@@ -40,82 +40,33 @@ class Scenario:
4040 context_builder : ContextBuilder
4141
4242
43- def _build_submission_deadline_context (offset_days : int ) -> ContextBuilder :
44- def _builder (program : PartnerProgram , user : CustomUser , deadline_date : date ) -> dict :
45- return {
46- "preview_text" : "Кейс-чемпионат уже стартовал" ,
47- "title" : "Время начинать!" ,
48- "text" : (
49- "Кейс-чемпионат уже стартовал. Скорее заходите на платформу, "
50- "создавайте проект и подключайте команду к работе.\n \n "
51- "Вас ждет много интересного ⚡"
52- ),
53- "button_text" : "Подать проект" ,
54- "button_link" : f"{ FRONTEND_BASE_URL } /office/program/{ program .id } " ,
55- }
56-
57- return _builder
58-
59-
60- def _build_registration_plus_5_context () -> ContextBuilder :
61- def _builder (program : PartnerProgram , user : CustomUser , _ref_date : date ) -> dict :
62- return {
63- "preview_text" : "Сделайте первый шаг в программе" ,
64- "title" : "Сделать первый шаг" ,
65- "text" : (
66- "Когда непонятно с чего начать — стоит начать с самого простого. "
67- "На раз-два-три: зайти на платформу — создать проект — "
68- "пригласить команду.\n \n "
69- "И вот, первый шаг уже сделан"
70- ),
71- }
72-
73- return _builder
74-
75-
76- def _build_project_not_submitted_context (title : str , text : str ) -> ContextBuilder :
77- def _builder (program : PartnerProgram , user : CustomUser , _ref_date : date ) -> dict :
78- return {
79- "preview_text" : title ,
80- "title" : title ,
81- "text" : text ,
82- }
83-
84- return _builder
85-
86-
87- def _build_registration_plus_3_inactive_context () -> ContextBuilder :
88- def _builder (program : PartnerProgram , user : CustomUser , _ref_date : date ) -> dict :
89- return {
90- "preview_text" : "Поздравляем!" ,
91- "title" : "Поздравляем!" ,
92- "text" : (
93- f"Вы зарегистрировались на кейс-чемпионат { program .name } . "
94- "Заходите на платформу, чтобы оформить свой профиль участника "
95- "и вступить в закрытую группу программы.\n \n "
96- "Увидимся на платформе ⚡"
97- ),
98- "button_text" : "Оформить профиль" ,
99- "button_link" : f"{ FRONTEND_BASE_URL } /office/profile/{ user .id } /" ,
100- }
101-
102- return _builder
43+ def _render_context_value (value : str , program : PartnerProgram , user : CustomUser ) -> str :
44+ return (
45+ value .replace ("{program_name}" , program .name )
46+ .replace ("{program_id}" , str (program .id ))
47+ .replace ("{user_id}" , str (user .id ))
48+ )
10349
10450
105- def _build_registration_end_plus_3_inactive_context () -> ContextBuilder :
51+ def _build_context (
52+ * ,
53+ preview_text : str ,
54+ title : str ,
55+ text : str ,
56+ button_text : str | None = None ,
57+ button_link : str | None = None ,
58+ ) -> ContextBuilder :
10659 def _builder (program : PartnerProgram , user : CustomUser , _ref_date : date ) -> dict :
107- return {
108- "preview_text" : "Без вас совсем не то" ,
109- "title" : "Без вас совсем не то" ,
110- "text" : (
111- "Мы так обрадовались, увидев вашу регистрацию, но, кажется, "
112- "вы еще не заходили на платформу.\n \n "
113- "Скорее заходите на procollab, чтобы стать активным участником "
114- "всероссийского кейс-чемпионата и забрать максимум полезного для себя ⚡"
115- ),
116- "button_text" : "Зайти на платформу" ,
117- "button_link" : f"{ FRONTEND_BASE_URL } /office/profile/{ user .id } /" ,
60+ context = {
61+ "preview_text" : _render_context_value (preview_text , program , user ),
62+ "title" : _render_context_value (title , program , user ),
63+ "text" : _render_context_value (text , program , user ),
11864 }
65+ if button_text is not None :
66+ context ["button_text" ] = _render_context_value (button_text , program , user )
67+ if button_link is not None :
68+ context ["button_link" ] = _render_context_value (button_link , program , user )
69+ return context
11970
12071 return _builder
12172
@@ -126,79 +77,137 @@ def _builder(program: PartnerProgram, user: CustomUser, _ref_date: date) -> dict
12677 trigger = TriggerType .PROGRAM_SUBMISSION_DEADLINE ,
12778 offset_days = 10 ,
12879 template_name = "email/generic-template-0.html" ,
129- subject = "Время начинать! " ,
80+ subject = "{program_name}: важное сообщение " ,
13081 recipient_rule = RecipientRule .NO_PROJECT_IN_PROGRAM ,
131- context_builder = _build_submission_deadline_context (10 ),
82+ context_builder = _build_context (
83+ preview_text = "Кейс-чемпионат уже стартовал" ,
84+ title = "Время начинать!" ,
85+ text = (
86+ "Кейс-чемпионат уже стартовал. Скорее заходите на платформу, "
87+ "создавайте проект и подключайте команду к работе.\n \n "
88+ "Вас ждет много интересного ⚡"
89+ ),
90+ button_text = "Создать проект" ,
91+ button_link = f"{ FRONTEND_BASE_URL } /office/projects" ,
92+ ),
13293 ),
13394 Scenario (
13495 code = "program_registration_plus_5_no_project" ,
13596 trigger = TriggerType .PROGRAM_REGISTRATION_DATE ,
13697 offset_days = 5 ,
13798 template_name = "email/generic-template-0.html" ,
138- subject = "Сделать первый шаг " ,
99+ subject = "{program_name}: важное сообщение " ,
139100 recipient_rule = RecipientRule .NO_PROJECT_IN_PROGRAM_REGISTERED_ON_DATE ,
140- context_builder = _build_registration_plus_5_context (),
101+ context_builder = _build_context (
102+ preview_text = "Сделать первый шаг" ,
103+ title = "Сделать первый шаг" ,
104+ text = (
105+ "Когда непонятно с чего начать — стоит начать с самого простого. "
106+ "Например, зайти на платформу, создать проект или вступить в уже "
107+ "созданный лидером вашей команды.\n \n "
108+ "И вот, первый шаг уже сделан!"
109+ ),
110+ button_text = "Зайти на платформу" ,
111+ button_link = f"{ FRONTEND_BASE_URL } /office/projects" ,
112+ ),
141113 ),
142114 Scenario (
143115 code = "program_registration_plus_3_inactive_account" ,
144116 trigger = TriggerType .PROGRAM_REGISTRATION_DATE ,
145117 offset_days = 3 ,
146118 template_name = "email/generic-template-0.html" ,
147- subject = "Поздравляем! " ,
119+ subject = "{program_name}: важное сообщение " ,
148120 recipient_rule = RecipientRule .INACTIVE_ACCOUNT_IN_PROGRAM_REGISTERED_ON_DATE ,
149- context_builder = _build_registration_plus_3_inactive_context (),
121+ context_builder = _build_context (
122+ preview_text = "Поздравляем!" ,
123+ title = "Поздравляем!" ,
124+ text = (
125+ "Вы зарегистрировались на {program_name}. "
126+ "Заходите на платформу, чтобы оформить свой профиль участника "
127+ "и вступить в закрытую группу программы.\n \n "
128+ "Увидимся на платформе ⚡"
129+ ),
130+ button_text = "Оформить профиль" ,
131+ button_link = f"{ FRONTEND_BASE_URL } /office/profile/{{user_id}}/" ,
132+ ),
150133 ),
151134 Scenario (
152135 code = "program_registration_end_plus_3_inactive_account" ,
153136 trigger = TriggerType .PROGRAM_REGISTRATION_END ,
154137 offset_days = 3 ,
155138 template_name = "email/generic-template-0.html" ,
156- subject = "Без вас совсем не то " ,
139+ subject = "{program_name}: важное сообщение " ,
157140 recipient_rule = RecipientRule .INACTIVE_ACCOUNT_IN_PROGRAM ,
158- context_builder = _build_registration_end_plus_3_inactive_context (),
141+ context_builder = _build_context (
142+ preview_text = "Без вас совсем не то" ,
143+ title = "Без вас совсем не то" ,
144+ text = (
145+ "Мы так обрадовались, увидев вашу регистрацию, но, кажется, "
146+ "вы еще не заходили на платформу.\n \n "
147+ "Скорее заходите на procollab, чтобы стать активным участником "
148+ "программы и забрать максимум полезного для себя ⚡"
149+ ),
150+ button_text = "Зайти на платформу" ,
151+ button_link = f"{ FRONTEND_BASE_URL } /office/profile/{{user_id}}/" ,
152+ ),
159153 ),
160154 Scenario (
161155 code = "program_submission_deadline_minus_9_project_not_submitted" ,
162156 trigger = TriggerType .PROGRAM_SUBMISSION_DEADLINE ,
163157 offset_days = 9 ,
164158 template_name = "email/generic-template-0.html" ,
165- subject = "Кейс-задания опубликованы " ,
159+ subject = "{program_name}: важное сообщение " ,
166160 recipient_rule = RecipientRule .PROJECT_NOT_SUBMITTED ,
167- context_builder = _build_project_not_submitted_context (
168- "Кейс-задания опубликованы" ,
169- "Заходите на платформу, чтобы познакомиться с кейсами первого этапа "
170- "кейс-чемпионата. Кейсы загружены в материалы закрытой группы.\n \n "
171- "Приступайте к работе уже сегодня, чтобы успеть подготовить итоговое "
172- "решение в срок ⚡" ,
161+ context_builder = _build_context (
162+ preview_text = "Кейс-задания опубликованы" ,
163+ title = "Кейс-задания опубликованы" ,
164+ text = (
165+ "Заходите на платформу, чтобы познакомиться с кейсами первого этапа "
166+ "кейс-чемпионата. Кейсы загружены в материалы закрытой группы.\n \n "
167+ "Приступайте к работе уже сегодня, чтобы успеть подготовить итоговое "
168+ "решение в срок ⚡"
169+ ),
170+ button_text = "Познакомиться с кейсом" ,
171+ button_link = f"{ FRONTEND_BASE_URL } /office/program/{{program_id}}" ,
173172 ),
174173 ),
175174 Scenario (
176175 code = "program_submission_deadline_minus_3_project_not_submitted" ,
177176 trigger = TriggerType .PROGRAM_SUBMISSION_DEADLINE ,
178177 offset_days = 3 ,
179178 template_name = "email/generic-template-0.html" ,
180- subject = "До сдачи итогового решения осталось 3 дня " ,
179+ subject = "{program_name}: важное сообщение " ,
181180 recipient_rule = RecipientRule .PROJECT_NOT_SUBMITTED ,
182- context_builder = _build_project_not_submitted_context (
183- "До сдачи итогового решения осталось 3 дня" ,
184- "Работа в самом разгаре, и мы запускаем обратный отсчет. "
185- "Осталось всего 3 дня, чтобы доработать проект, оформить презентацию "
186- "и загрузить итоговое решение на платформу." ,
181+ context_builder = _build_context (
182+ preview_text = "До сдачи итогового решения осталось 3 дня" ,
183+ title = "До сдачи итогового решения осталось 3 дня" ,
184+ text = (
185+ "Работа в самом разгаре, и мы запускаем обратный отсчет. "
186+ "Осталось всего 3 дня, чтобы доработать проект, оформить презентацию "
187+ "и загрузить итоговое решение на платформу."
188+ ),
189+ button_text = "Загрузить решение" ,
190+ button_link = f"{ FRONTEND_BASE_URL } /office/projects" ,
187191 ),
188192 ),
189193 Scenario (
190194 code = "program_submission_deadline_minus_1_project_not_submitted" ,
191195 trigger = TriggerType .PROGRAM_SUBMISSION_DEADLINE ,
192196 offset_days = 1 ,
193197 template_name = "email/generic-template-0.html" ,
194- subject = "1 день до сдачи итогового решения " ,
198+ subject = "{program_name}: важное сообщение " ,
195199 recipient_rule = RecipientRule .PROJECT_NOT_SUBMITTED ,
196- context_builder = _build_project_not_submitted_context (
197- "1 день до сдачи итогового решения" ,
198- "День X совсем скоро. Осталось только внести последние штрихи и "
199- "загрузить итоговое решение на платформу.\n \n "
200- "По любым техническим вопросам всегда на связи @procollab_support\n \n "
201- "Удачи!" ,
200+ context_builder = _build_context (
201+ preview_text = "1 день до сдачи итогового решения" ,
202+ title = "1 день до сдачи итогового решения" ,
203+ text = (
204+ "День X совсем скоро. Осталось только внести последние штрихи и "
205+ "загрузить итоговое решение на платформу.\n \n "
206+ "По любым техническим вопросам всегда на связи @procollab_support\n \n "
207+ "Удачи!"
208+ ),
209+ button_text = "Загрузить решение" ,
210+ button_link = f"{ FRONTEND_BASE_URL } /office/program/{{program_id}}" ,
202211 ),
203212 ),
204213)
0 commit comments