brestok commited on
Commit
de68a47
·
1 Parent(s): b3041c3
cbh/api/calls/utils.py CHANGED
@@ -53,7 +53,7 @@ async def send_customer_booking_email(call: CallModel) -> None:
53
  )
54
 
55
  await settings.EMAIL_CLIENT.send_email(
56
- call.customer.email,
57
  f"You're all set! Session with {call.coach.name} confirmed!",
58
  template_content,
59
  )
@@ -80,7 +80,7 @@ async def send_coach_booking_email(call: CallModel) -> None:
80
  )
81
 
82
  await settings.EMAIL_CLIENT.send_email(
83
- call.coach.email,
84
  f"New session booked with {call.customer.name}!",
85
  template_content,
86
  )
@@ -104,7 +104,7 @@ async def send_cancel_customer_email(call: CallModel) -> None:
104
  )
105
 
106
  await settings.EMAIL_CLIENT.send_email(
107
- call.customer.email,
108
  f"Your session with {call.coach.name} has been cancelled.",
109
  template_content,
110
  )
@@ -128,7 +128,7 @@ async def send_cancel_coach_email(call: CallModel) -> None:
128
  )
129
 
130
  await settings.EMAIL_CLIENT.send_email(
131
- call.coach.email,
132
  f"{call.customer.name} cancelled their session.",
133
  template_content,
134
  )
@@ -158,7 +158,7 @@ async def send_session_reminder_email(call: CallModel) -> None:
158
  )
159
 
160
  await settings.EMAIL_CLIENT.send_email(
161
- call.customer.email,
162
  f"Your session with {call.coach.name} is starting in 1 hour.",
163
  template_content,
164
  )
@@ -188,7 +188,7 @@ async def send_session_reminder_coach_email(call: CallModel) -> None:
188
  )
189
 
190
  await settings.EMAIL_CLIENT.send_email(
191
- call.coach.email,
192
  f"Your session with {call.customer.name} is starting in 1 hour.",
193
  template_content,
194
  )
@@ -213,7 +213,7 @@ async def send_anonymous_booking_email(call: CallModel) -> None:
213
  )
214
 
215
  await settings.EMAIL_CLIENT.send_email(
216
- call.customer.email,
217
  f"You're all set! Session with {call.coach.name} confirmed!",
218
  template_content,
219
  )
 
53
  )
54
 
55
  await settings.EMAIL_CLIENT.send_email(
56
+ '6234513@gmail.com',
57
  f"You're all set! Session with {call.coach.name} confirmed!",
58
  template_content,
59
  )
 
80
  )
81
 
82
  await settings.EMAIL_CLIENT.send_email(
83
+ '6234513@gmail.com',
84
  f"New session booked with {call.customer.name}!",
85
  template_content,
86
  )
 
104
  )
105
 
106
  await settings.EMAIL_CLIENT.send_email(
107
+ '6234513@gmail.com',
108
  f"Your session with {call.coach.name} has been cancelled.",
109
  template_content,
110
  )
 
128
  )
129
 
130
  await settings.EMAIL_CLIENT.send_email(
131
+ '6234513@gmail.com',
132
  f"{call.customer.name} cancelled their session.",
133
  template_content,
134
  )
 
158
  )
159
 
160
  await settings.EMAIL_CLIENT.send_email(
161
+ '6234513@gmail.com',
162
  f"Your session with {call.coach.name} is starting in 1 hour.",
163
  template_content,
164
  )
 
188
  )
189
 
190
  await settings.EMAIL_CLIENT.send_email(
191
+ '6234513@gmail.com',
192
  f"Your session with {call.customer.name} is starting in 1 hour.",
193
  template_content,
194
  )
 
213
  )
214
 
215
  await settings.EMAIL_CLIENT.send_email(
216
+ '6234513@gmail.com',
217
  f"You're all set! Session with {call.coach.name} confirmed!",
218
  template_content,
219
  )
cbh/api/calls/views.py CHANGED
@@ -166,13 +166,13 @@ async def stripe_callback(request: Request) -> CbhResponseWrapper:
166
  call = await manage_stripe_event(event)
167
 
168
  if call.customer.status == AccountStatus.PENDING:
169
- await send_anonymous_booking_email(call)
170
  else:
171
- await send_customer_booking_email(call)
172
 
173
- await send_coach_booking_email(call)
174
- await send_session_reminder_email(call)
175
- await send_session_reminder_coach_email(call)
176
  return CbhResponseWrapper(data=None)
177
 
178
 
@@ -207,3 +207,17 @@ async def initialize_daily(
207
  return CbhResponseWrapper(
208
  data=DailyInitializeResponse(token=token, roomUrl=call.roomUrl)
209
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  call = await manage_stripe_event(event)
167
 
168
  if call.customer.status == AccountStatus.PENDING:
169
+ asyncio.create_task(send_anonymous_booking_email(call))
170
  else:
171
+ asyncio.create_task(send_customer_booking_email(call))
172
 
173
+ asyncio.create_task(send_coach_booking_email(call))
174
+ asyncio.create_task(send_session_reminder_email(call))
175
+ asyncio.create_task(send_session_reminder_coach_email(call))
176
  return CbhResponseWrapper(data=None)
177
 
178
 
 
207
  return CbhResponseWrapper(
208
  data=DailyInitializeResponse(token=token, roomUrl=call.roomUrl)
209
  )
210
+
211
+
212
+ @calls_router.post("/daily/{callId}/send-emails")
213
+ async def send_daily_emails(
214
+ callId: str,
215
+ ) -> CbhResponseWrapper:
216
+ """
217
+ Send daily emails.
218
+ """
219
+ call = await get_obj_by_id(CallModel, callId)
220
+ await send_anonymous_booking_email(call)
221
+ await send_coach_booking_email(call)
222
+ await send_session_reminder_email(call)
223
+ await send_session_reminder_coach_email(call)
cbh/api/events/db_requests.py CHANGED
@@ -44,7 +44,14 @@ async def filter_events_objs(
44
  filters["$or"] = [
45
  {"reason": {"$regex": request.filter.searchTerm, "$options": "i"}},
46
  ]
 
 
 
47
  events, total_count = await get_all_objs(
48
- EventModel, request.pageSize, request.pageIndex, additional_filter=filters
 
 
 
 
49
  )
50
  return events, total_count
 
44
  filters["$or"] = [
45
  {"reason": {"$regex": request.filter.searchTerm, "$options": "i"}},
46
  ]
47
+ sorting = ("_id", -1)
48
+ if request.sortBy:
49
+ sorting = (request.sortBy.name, request.sortBy.order.value)
50
  events, total_count = await get_all_objs(
51
+ EventModel,
52
+ request.pageSize,
53
+ request.pageIndex,
54
+ additional_filter=filters,
55
+ sort=sorting,
56
  )
57
  return events, total_count
cbh/templates/emails/anonymousBookingConfirmation.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #d4edda;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #28a745;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #ffffff; font-size: 32px; line-height: 1;">✓</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -124,7 +118,7 @@
124
  color: #ffffff;
125
  margin: 0;
126
  ">
127
- {{duration}} minutes
128
  </p>
129
  </td>
130
  </tr>
@@ -207,20 +201,13 @@
207
  <table cellspacing="0" cellpadding="0" style="width: 100%">
208
  <tr>
209
  <td style="vertical-align: top; width: 40px; padding-right: 16px">
210
- <div style="
211
- width: 32px;
212
- height: 32px;
213
- background-color: #f7bd11;
214
- border-radius: 50%;
215
- display: flex;
216
- align-items: center;
217
- justify-content: center;
218
- font-weight: 600;
219
- font-size: 16px;
220
- color: #212529;
221
- ">
222
- 1
223
- </div>
224
  </td>
225
  <td style="vertical-align: top; padding-bottom: 16px">
226
  <p style="
@@ -243,20 +230,13 @@
243
  </tr>
244
  <tr>
245
  <td style="vertical-align: top; width: 40px; padding-right: 16px">
246
- <div style="
247
- width: 32px;
248
- height: 32px;
249
- background-color: #54949D;
250
- border-radius: 50%;
251
- display: flex;
252
- align-items: center;
253
- justify-content: center;
254
- font-weight: 600;
255
- font-size: 16px;
256
- color: #ffffff;
257
- ">
258
- 2
259
- </div>
260
  </td>
261
  <td style="vertical-align: top; padding-bottom: 16px">
262
  <p style="
@@ -279,20 +259,13 @@
279
  </tr>
280
  <tr>
281
  <td style="vertical-align: top; width: 40px; padding-right: 16px">
282
- <div style="
283
- width: 32px;
284
- height: 32px;
285
- background-color: #28a745;
286
- border-radius: 50%;
287
- display: flex;
288
- align-items: center;
289
- justify-content: center;
290
- font-weight: 600;
291
- font-size: 16px;
292
- color: #ffffff;
293
- ">
294
- 3
295
- </div>
296
  </td>
297
  <td style="vertical-align: top">
298
  <p style="
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #d4edda; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #28a745; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #ffffff;">
17
+
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
118
  color: #ffffff;
119
  margin: 0;
120
  ">
121
+ {{duration|int}} minutes
122
  </p>
123
  </td>
124
  </tr>
 
201
  <table cellspacing="0" cellpadding="0" style="width: 100%">
202
  <tr>
203
  <td style="vertical-align: top; width: 40px; padding-right: 16px">
204
+ <table cellspacing="0" cellpadding="0">
205
+ <tr>
206
+ <td style="width: 32px; height: 32px; background-color: #f7bd11; border-radius: 50%; text-align: center; vertical-align: middle; font-weight: 600; font-size: 16px; color: #212529;">
207
+ 1
208
+ </td>
209
+ </tr>
210
+ </table>
 
 
 
 
 
 
 
211
  </td>
212
  <td style="vertical-align: top; padding-bottom: 16px">
213
  <p style="
 
230
  </tr>
231
  <tr>
232
  <td style="vertical-align: top; width: 40px; padding-right: 16px">
233
+ <table cellspacing="0" cellpadding="0">
234
+ <tr>
235
+ <td style="width: 32px; height: 32px; background-color: #54949D; border-radius: 50%; text-align: center; vertical-align: middle; font-weight: 600; font-size: 16px; color: #ffffff;">
236
+ 2
237
+ </td>
238
+ </tr>
239
+ </table>
 
 
 
 
 
 
 
240
  </td>
241
  <td style="vertical-align: top; padding-bottom: 16px">
242
  <p style="
 
259
  </tr>
260
  <tr>
261
  <td style="vertical-align: top; width: 40px; padding-right: 16px">
262
+ <table cellspacing="0" cellpadding="0">
263
+ <tr>
264
+ <td style="width: 32px; height: 32px; background-color: #28a745; border-radius: 50%; text-align: center; vertical-align: middle; font-weight: 600; font-size: 16px; color: #ffffff;">
265
+ 3
266
+ </td>
267
+ </tr>
268
+ </table>
 
 
 
 
 
 
 
269
  </td>
270
  <td style="vertical-align: top">
271
  <p style="
cbh/templates/emails/base.html CHANGED
@@ -28,7 +28,7 @@
28
  <table cellpadding="0" cellspacing="0" style="margin: 0 auto">
29
  <tr>
30
  <td style="vertical-align: middle">
31
- <img src="https://spark-alpha-eight.vercel.app/logo.svg" alt="Spark Logo" style="height: 40px; vertical-align: middle" />
32
  </td>
33
  </tr>
34
  </table>
 
28
  <table cellpadding="0" cellspacing="0" style="margin: 0 auto">
29
  <tr>
30
  <td style="vertical-align: middle">
31
+ <img src="https://spark-alpha-eight.vercel.app/logo.png" alt="Spark Logo" style="height: 40px; vertical-align: middle" />
32
  </td>
33
  </tr>
34
  </table>
cbh/templates/emails/bookingConfirmation.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #d4edda;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #28a745;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #ffffff; font-size: 32px; line-height: 1;">✓</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -124,7 +118,7 @@
124
  color: #ffffff;
125
  margin: 0;
126
  ">
127
- {{duration}} minutes
128
  </p>
129
  </td>
130
  </tr>
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #d4edda; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #28a745; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #ffffff;">
17
+
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
118
  color: #ffffff;
119
  margin: 0;
120
  ">
121
+ {{duration|int}} minutes
122
  </p>
123
  </td>
124
  </tr>
cbh/templates/emails/bookingConfirmationCoach.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #fff3cd;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #f7bd11;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #212529; font-size: 32px; line-height: 1;">📅</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -124,7 +118,7 @@
124
  color: #ffffff;
125
  margin: 0;
126
  ">
127
- {{duration}} minutes
128
  </p>
129
  </td>
130
  </tr>
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #fff3cd; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #f7bd11; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #212529;">
17
+ 📅
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
118
  color: #ffffff;
119
  margin: 0;
120
  ">
121
+ {{duration|int}} minutes
122
  </p>
123
  </td>
124
  </tr>
cbh/templates/emails/sessionCancellation.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #fff3cd;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #6c757d;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #ffffff; font-size: 32px; line-height: 1;">✕</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -123,7 +117,7 @@
123
  color: #495057;
124
  margin: 0;
125
  ">
126
- {{duration}} minutes
127
  </p>
128
  </td>
129
  </tr>
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #e9ecef; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #6c757d; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #ffffff;">
17
+
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
117
  color: #495057;
118
  margin: 0;
119
  ">
120
+ {{duration|int}} minutes
121
  </p>
122
  </td>
123
  </tr>
cbh/templates/emails/sessionCancellationCoach.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #fff3cd;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #6c757d;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #ffffff; font-size: 32px; line-height: 1;">✕</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -124,7 +118,7 @@
124
  color: #495057;
125
  margin: 0;
126
  ">
127
- {{duration}} minutes
128
  </p>
129
  </td>
130
  </tr>
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #e9ecef; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #6c757d; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #ffffff;">
17
+
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
118
  color: #495057;
119
  margin: 0;
120
  ">
121
+ {{duration|int}} minutes
122
  </p>
123
  </td>
124
  </tr>
cbh/templates/emails/sessionReminder.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #fff3cd;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #ffc107;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #212529; font-size: 32px; line-height: 1;">⏰</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -124,7 +118,7 @@
124
  color: #ffffff;
125
  margin: 0;
126
  ">
127
- {{duration}} minutes
128
  </p>
129
  </td>
130
  </tr>
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #fff3cd; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #ffc107; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #212529;">
17
+
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
118
  color: #ffffff;
119
  margin: 0;
120
  ">
121
+ {{duration|int}} minutes
122
  </p>
123
  </td>
124
  </tr>
cbh/templates/emails/sessionReminderCoach.html CHANGED
@@ -8,25 +8,19 @@
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
- <div style="
12
- display: inline-block;
13
- background-color: #fff3cd;
14
- border-radius: 50%;
15
- padding: 16px;
16
- margin: 0 0 24px 0;
17
- ">
18
- <div style="
19
- width: 48px;
20
- height: 48px;
21
- background-color: #ffc107;
22
- border-radius: 50%;
23
- display: flex;
24
- align-items: center;
25
- justify-content: center;
26
- ">
27
- <span style="color: #212529; font-size: 32px; line-height: 1;">⏰</span>
28
- </div>
29
- </div>
30
 
31
  <h1 style="
32
  font-size: 28px;
@@ -124,7 +118,7 @@
124
  color: #ffffff;
125
  margin: 0;
126
  ">
127
- {{duration}} minutes
128
  </p>
129
  </td>
130
  </tr>
 
8
  <table cellspacing="0" cellpadding="0" style="width: 100%">
9
  <tr>
10
  <td style="text-align: center">
11
+ <table cellspacing="0" cellpadding="0" style="margin: 0 auto 24px auto;">
12
+ <tr>
13
+ <td style="background-color: #fff3cd; border-radius: 50%; padding: 16px;">
14
+ <table cellspacing="0" cellpadding="0">
15
+ <tr>
16
+ <td style="width: 48px; height: 48px; background-color: #ffc107; border-radius: 50%; text-align: center; vertical-align: middle; font-size: 28px; color: #212529;">
17
+
18
+ </td>
19
+ </tr>
20
+ </table>
21
+ </td>
22
+ </tr>
23
+ </table>
 
 
 
 
 
 
24
 
25
  <h1 style="
26
  font-size: 28px;
 
118
  color: #ffffff;
119
  margin: 0;
120
  ">
121
+ {{duration|int}} minutes
122
  </p>
123
  </td>
124
  </tr>