@@ -232,80 +232,84 @@ class Meta:
232232 ordering = ["-id" ]
233233
234234
235+ class TimeFrame (models .IntegerChoices ):
236+ YEARS = 10 , _ ("Years" )
237+ MONTHS = 20 , _ ("Months" )
238+ DAYS = 30 , _ ("Days" )
239+ HOURS = 40 , _ ("Hours" )
240+
241+
242+ class YearsTimeFrameChoices (models .IntegerChoices ):
243+ ONE_YEAR = 1 , _ ("1" )
244+ TWO_YEARS = 2 , _ ("2" )
245+ THREE_YEARS = 3 , _ ("3" )
246+ FOUR_YEARS = 4 , _ ("4" )
247+ FIVE_YEARS = 5 , _ ("5" )
248+
249+
250+ class MonthsTimeFrameChoices (models .IntegerChoices ):
251+ ONE_MONTH = 1 , _ ("1" )
252+ TWO_MONTHS = 2 , _ ("2" )
253+ THREE_MONTHS = 3 , _ ("3" )
254+ FOUR_MONTHS = 4 , _ ("4" )
255+ FIVE_MONTHS = 5 , _ ("5" )
256+ SIX_MONTHS = 6 , _ ("6" )
257+ SEVEN_MONTHS = 7 , _ ("7" )
258+ EIGHT_MONTHS = 8 , _ ("8" )
259+ NINE_MONTHS = 9 , _ ("9" )
260+ TEN_MONTHS = 10 , _ ("10" )
261+ ELEVEN_MONTHS = 11 , _ ("11" )
262+ TWELVE_MONTHS = 12 , _ ("12" )
263+
264+
265+ class DaysTimeFrameChoices (models .IntegerChoices ):
266+ ONE_DAY = 1 , _ ("1" )
267+ TWO_DAYS = 2 , _ ("2" )
268+ THREE_DAYS = 3 , _ ("3" )
269+ FOUR_DAYS = 4 , _ ("4" )
270+ FIVE_DAYS = 5 , _ ("5" )
271+ SIX_DAYS = 6 , _ ("6" )
272+ SEVEN_DAYS = 7 , _ ("7" )
273+ EIGHT_DAYS = 8 , _ ("8" )
274+ NINE_DAYS = 9 , _ ("9" )
275+ TEN_DAYS = 10 , _ ("10" )
276+ ELEVEN_DAYS = 11 , _ ("11" )
277+ TWELVE_DAYS = 12 , _ ("12" )
278+ THIRTEEN_DAYS = 13 , _ ("13" )
279+ FOURTEEN_DAYS = 14 , _ ("14" )
280+ FIFTEEN_DAYS = 15 , _ ("15" )
281+ SIXTEEN_DAYS = 16 , _ ("16" )
282+ SEVENTEEN_DAYS = 17 , _ ("17" )
283+ EIGHTEEN_DAYS = 18 , _ ("18" )
284+ NINETEEN_DAYS = 19 , _ ("19" )
285+ TWENTY_DAYS = 20 , _ ("20" )
286+ TWENTY_ONE_DAYS = 21 , _ ("21" )
287+ TWENTY_TWO_DAYS = 22 , _ ("22" )
288+ TWENTY_THREE_DAYS = 23 , _ ("23" )
289+ TWENTY_FOUR_DAYS = 24 , _ ("24" )
290+ TWENTY_FIVE_DAYS = 25 , _ ("25" )
291+ TWENTY_SIX_DAYS = 26 , _ ("26" )
292+ TWENTY_SEVEN_DAYS = 27 , _ ("27" )
293+ TWENTY_EIGHT_DAYS = 28 , _ ("28" )
294+ TWENTY_NINE_DAYS = 29 , _ ("29" )
295+ THIRTY_DAYS = 30 , _ ("30" )
296+ THIRTY_ONE_DAYS = 31 , _ ("31" )
297+
298+
299+ class HoursTimeFrameChoices (models .IntegerChoices ):
300+ ZERO_TO_FIVE_HOURS = 5 , _ ("0-5" )
301+ FIVE_TO_TEN_HOURS = 10 , _ ("5-10" )
302+ TEN_TO_FIFTEEN_HOURS = 15 , _ ("10-15" )
303+ FIFTEEN_TO_TWENTY_HOURS = 20 , _ ("15-20" )
304+ TWENTY_TO_TWENTY_FIVE_HOURS = 25 , _ ("20-25" )
305+ TWENTY_FIVE_TO_THIRTY_HOURS = 30 , _ ("25-30" )
306+
307+
235308class OperationActivity (models .Model ):
236309 # NOTE: `timeframe` and `time_value` together represent the time span for an activity.
237310 # Make sure to keep them in sync.
238- class TimeFrame (models .IntegerChoices ):
239- YEARS = 10 , _ ("Years" )
240- MONTHS = 20 , _ ("Months" )
241- DAYS = 30 , _ ("Days" )
242- HOURS = 40 , _ ("Hours" )
243-
244- class YearsTimeFrameChoices (models .IntegerChoices ):
245- ONE_YEAR = 1 , _ ("1" )
246- TWO_YEARS = 2 , _ ("2" )
247- THREE_YEARS = 3 , _ ("3" )
248- FOUR_YEARS = 4 , _ ("4" )
249- FIVE_YEARS = 5 , _ ("5" )
250-
251- class MonthsTimeFrameChoices (models .IntegerChoices ):
252- ONE_MONTH = 1 , _ ("1" )
253- TWO_MONTHS = 2 , _ ("2" )
254- THREE_MONTHS = 3 , _ ("3" )
255- FOUR_MONTHS = 4 , _ ("4" )
256- FIVE_MONTHS = 5 , _ ("5" )
257- SIX_MONTHS = 6 , _ ("6" )
258- SEVEN_MONTHS = 7 , _ ("7" )
259- EIGHT_MONTHS = 8 , _ ("8" )
260- NINE_MONTHS = 9 , _ ("9" )
261- TEN_MONTHS = 10 , _ ("10" )
262- ELEVEN_MONTHS = 11 , _ ("11" )
263- TWELVE_MONTHS = 12 , _ ("12" )
264-
265- class DaysTimeFrameChoices (models .IntegerChoices ):
266- ONE_DAY = 1 , _ ("1" )
267- TWO_DAYS = 2 , _ ("2" )
268- THREE_DAYS = 3 , _ ("3" )
269- FOUR_DAYS = 4 , _ ("4" )
270- FIVE_DAYS = 5 , _ ("5" )
271- SIX_DAYS = 6 , _ ("6" )
272- SEVEN_DAYS = 7 , _ ("7" )
273- EIGHT_DAYS = 8 , _ ("8" )
274- NINE_DAYS = 9 , _ ("9" )
275- TEN_DAYS = 10 , _ ("10" )
276- ELEVEN_DAYS = 11 , _ ("11" )
277- TWELVE_DAYS = 12 , _ ("12" )
278- THIRTEEN_DAYS = 13 , _ ("13" )
279- FOURTEEN_DAYS = 14 , _ ("14" )
280- FIFTEEN_DAYS = 15 , _ ("15" )
281- SIXTEEN_DAYS = 16 , _ ("16" )
282- SEVENTEEN_DAYS = 17 , _ ("17" )
283- EIGHTEEN_DAYS = 18 , _ ("18" )
284- NINETEEN_DAYS = 19 , _ ("19" )
285- TWENTY_DAYS = 20 , _ ("20" )
286- TWENTY_ONE_DAYS = 21 , _ ("21" )
287- TWENTY_TWO_DAYS = 22 , _ ("22" )
288- TWENTY_THREE_DAYS = 23 , _ ("23" )
289- TWENTY_FOUR_DAYS = 24 , _ ("24" )
290- TWENTY_FIVE_DAYS = 25 , _ ("25" )
291- TWENTY_SIX_DAYS = 26 , _ ("26" )
292- TWENTY_SEVEN_DAYS = 27 , _ ("27" )
293- TWENTY_EIGHT_DAYS = 28 , _ ("28" )
294- TWENTY_NINE_DAYS = 29 , _ ("29" )
295- THIRTY_DAYS = 30 , _ ("30" )
296- THIRTY_ONE_DAYS = 31 , _ ("31" )
297-
298- class HoursTimeFrameChoices (models .IntegerChoices ):
299- ZERO_TO_FIVE_HOURS = 5 , _ ("0-5" )
300- FIVE_TO_TEN_HOURS = 10 , _ ("5-10" )
301- TEN_TO_FIFTEEN_HOURS = 15 , _ ("10-15" )
302- FIFTEEN_TO_TWENTY_HOURS = 20 , _ ("15-20" )
303- TWENTY_TO_TWENTY_FIVE_HOURS = 25 , _ ("20-25" )
304- TWENTY_FIVE_TO_THIRTY_HOURS = 30 , _ ("25-30" )
305-
306311 activity = models .CharField (max_length = 255 , verbose_name = _ ("Activity" ))
307312 timeframe = models .IntegerField (choices = TimeFrame .choices , verbose_name = _ ("Timeframe" ))
308- # TODO(susilnem): Use enums for time_value?
309313 time_value = ArrayField (
310314 base_field = models .IntegerField (),
311315 verbose_name = _ ("Activity time span" ),
@@ -950,16 +954,26 @@ class SimplifiedEAP(EAPBaseModel, CommonEAPFields):
950954 blank = True ,
951955 )
952956
957+ # NOTE: seap_lead_timeframe_unit and seap_lead_time are atomic
958+ seap_lead_timeframe_unit = models .IntegerField (
959+ choices = TimeFrame .choices ,
960+ verbose_name = _ ("sEAP Lead Timeframe Unit" ),
961+ )
953962 seap_lead_time = models .IntegerField (
954- verbose_name = _ ("sEAP Lead Time (Hours)" ),
955- null = True ,
956- blank = True ,
963+ verbose_name = _ ("sEAP Lead Time" ),
964+ )
965+
966+ # NOTE: operational_timeframe_unit and operational_time are atomic
967+ # operational_timeframe is set default to Months
968+ operational_timeframe_unit = models .IntegerField (
969+ choices = TimeFrame .choices ,
970+ default = TimeFrame .MONTHS ,
971+ verbose_name = _ ("Operational Timeframe Unit" ),
957972 )
958973 operational_timeframe = models .IntegerField (
959- verbose_name = _ ("Operational Timeframe (Months)" ),
960- null = True ,
961- blank = True ,
974+ verbose_name = _ ("Operational Time" ),
962975 )
976+
963977 trigger_threshold_justification = models .TextField (
964978 verbose_name = _ ("Trigger Threshold Justification" ),
965979 help_text = _ ("Explain how the trigger were set and provide information" ),
@@ -1054,9 +1068,13 @@ def generate_snapshot(self):
10541068 "modified_by_id" : self .modified_by_id ,
10551069 "updated_checklist_file" : None ,
10561070 },
1057- exclude_clone_m2m_fields = [
1071+ exclude_clone_m2m_fields = {
10581072 "admin2" ,
1059- ],
1073+ "cover_image" ,
1074+ "hazard_impact_images" ,
1075+ "risk_selected_protocols_images" ,
1076+ "selected_early_actions_images" ,
1077+ },
10601078 )
10611079
10621080 # Setting Parent as locked
@@ -1438,9 +1456,27 @@ def generate_snapshot(self):
14381456 "modified_by_id" : self .modified_by_id ,
14391457 "updated_checklist_file" : None ,
14401458 },
1441- exclude_clone_m2m_fields = [
1459+ exclude_clone_m2m_fields = {
14421460 "admin2" ,
1443- ],
1461+ "cover_image" ,
1462+ # Files
1463+ "hazard_selection_images" ,
1464+ "theory_of_change_table_file" ,
1465+ "exposed_element_and_vulnerability_factor_images" ,
1466+ "prioritized_impact_images" ,
1467+ "risk_analysis_relevant_files" ,
1468+ "forecast_selection_images" ,
1469+ "definition_and_justification_impact_level_images" ,
1470+ "identification_of_the_intervention_area_images" ,
1471+ "trigger_model_relevant_files" ,
1472+ "early_action_selection_process_images" ,
1473+ "evidence_base_relevant_files" ,
1474+ "early_action_implementation_images" ,
1475+ "trigger_activation_system_images" ,
1476+ "activation_process_relevant_files" ,
1477+ "meal_relevant_files" ,
1478+ "capacity_relevant_files" ,
1479+ },
14441480 )
14451481
14461482 # Setting Parent as locked
0 commit comments