|
19 | 19 | # |1|00:00:00.208768|00:00:01.398161|00:00:28.951521|
|
20 | 20 | # |2|00:00:01.330297|00:00:06.076814|00:00:03.481192|
|
21 | 21 | # |3|00:00:02.092967|00:00:11.271081|00:00:06.045881|
|
22 |
| -UPDATE_PROJECT_GROUP_DATA = f""" |
| 22 | + |
| 23 | +UPDATE_PROJECT_GROUP_DATA_USING_PROJECT_ID = f""" |
| 24 | + WITH to_calculate_groups AS ( |
| 25 | + SELECT |
| 26 | + project_id, |
| 27 | + group_id |
| 28 | + FROM groups |
| 29 | + WHERE |
| 30 | + (project_id, group_id) in ( |
| 31 | + SELECT |
| 32 | + MS.project_id, |
| 33 | + MS.group_id |
| 34 | + FROM mapping_sessions MS |
| 35 | + WHERE |
| 36 | + project_id = %(project_id)s |
| 37 | + GROUP BY MS.project_id, MS.group_id |
| 38 | + ) AND |
| 39 | + ( |
| 40 | + total_area is NULL OR time_spent_max_allowed is NULL |
| 41 | + ) |
| 42 | + ), |
| 43 | + groups_data AS ( |
| 44 | + SELECT |
| 45 | + T.project_id, |
| 46 | + T.group_id, |
| 47 | + SUM( -- sqkm |
| 48 | + ST_Area(T.geom::geography(GEOMETRY,4326)) / 1000000 |
| 49 | + ) as total_task_group_area, |
| 50 | + ( |
| 51 | + CASE |
| 52 | + -- Using 95_percent value of existing data for each project_type |
| 53 | + WHEN P.project_type = {Project.Type.BUILD_AREA.value} THEN 1.4 |
| 54 | + WHEN P.project_type = {Project.Type.COMPLETENESS.value} THEN 1.4 |
| 55 | + WHEN P.project_type = {Project.Type.CHANGE_DETECTION.value} THEN 11.2 |
| 56 | + -- FOOTPRINT: Not calculated right now |
| 57 | + WHEN P.project_type = {Project.Type.FOOTPRINT.value} THEN 6.1 |
| 58 | + ELSE 1 |
| 59 | + END |
| 60 | + ) * COUNT(*) as time_spent_max_allowed |
| 61 | + FROM tasks T |
| 62 | + INNER JOIN to_calculate_groups G USING (project_id, group_id) |
| 63 | + INNER JOIN projects P USING (project_id) |
| 64 | + GROUP BY project_id, P.project_type, group_id |
| 65 | + ) |
| 66 | + UPDATE groups G |
| 67 | + SET |
| 68 | + total_area = GD.total_task_group_area, |
| 69 | + time_spent_max_allowed = GD.time_spent_max_allowed |
| 70 | + FROM groups_data GD |
| 71 | + WHERE |
| 72 | + G.project_id = GD.project_id AND |
| 73 | + G.group_id = GD.group_id; |
| 74 | +""" |
| 75 | + |
| 76 | + |
| 77 | +UPDATE_PROJECT_GROUP_DATA_USING_TIME_RANGE = f""" |
23 | 78 | WITH to_calculate_groups AS (
|
24 | 79 | SELECT
|
25 | 80 | project_id,
|
|
73 | 128 | G.group_id = GD.group_id;
|
74 | 129 | """
|
75 | 130 |
|
76 |
| -TASK_GROUP_METADATA_QUERY = """ |
| 131 | +TASK_GROUP_METADATA_QUERY = f""" |
77 | 132 | SELECT
|
78 | 133 | G.project_id,
|
79 | 134 | G.group_id,
|
80 |
| - G.total_area as total_task_group_area, |
| 135 | + ( |
| 136 | + CASE |
| 137 | + -- Hide area for Footprint |
| 138 | + WHEN P.project_type = {Project.Type.FOOTPRINT.value} THEN 0 |
| 139 | + ELSE G.total_area |
| 140 | + END |
| 141 | + ) as total_task_group_area, |
81 | 142 | G.time_spent_max_allowed
|
82 | 143 | FROM groups G
|
83 | 144 | INNER JOIN used_task_groups UG USING (project_id, group_id)
|
|
106 | 167 | FROM mapping_sessions MS
|
107 | 168 | INNER JOIN projects P USING (project_id)
|
108 | 169 | WHERE
|
109 |
| - -- Skip for footprint type missions |
110 |
| - P.project_type != {Project.Type.FOOTPRINT.value} |
111 |
| - AND MS.start_time >= %(from_date)s |
| 170 | + MS.start_time >= %(from_date)s |
112 | 171 | AND MS.start_time < %(until_date)s
|
113 | 172 | GROUP BY project_id, project_type, group_id -- To get unique
|
114 | 173 | ),
|
|
185 | 244 | INNER JOIN mapping_sessions MS USING (mapping_session_id)
|
186 | 245 | INNER JOIN projects P USING (project_id)
|
187 | 246 | WHERE
|
188 |
| - -- Skip for footprint type missions |
189 |
| - P.project_type != {Project.Type.FOOTPRINT.value} |
190 |
| - AND MS.start_time >= %(from_date)s |
| 247 | + MS.start_time >= %(from_date)s |
191 | 248 | AND MS.start_time < %(until_date)s
|
192 | 249 | GROUP BY project_id, project_type, group_id -- To get unique
|
193 | 250 | ),
|
@@ -288,7 +345,7 @@ def _track(self, tracker_type, label, sql):
|
288 | 345 | )
|
289 | 346 | with transaction.atomic():
|
290 | 347 | with connection.cursor() as cursor:
|
291 |
| - cursor.execute(UPDATE_PROJECT_GROUP_DATA, params) |
| 348 | + cursor.execute(UPDATE_PROJECT_GROUP_DATA_USING_TIME_RANGE, params) |
292 | 349 | self.stdout.write(
|
293 | 350 | self.style.SUCCESS(
|
294 | 351 | f"Successfull. Runtime: {time.time() - start_time} seconds"
|
|
0 commit comments