tango-app-api-trax 3.7.54 → 3.7.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tango-app-api-trax",
3
- "version": "3.7.54",
3
+ "version": "3.7.55",
4
4
  "description": "Trax",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -1089,7 +1089,7 @@ export async function sopMobilechecklistMultiSectionFormatterv1( req, res, next
1089
1089
 
1090
1090
  if ( requestData.submittype == 'submit' ) {
1091
1091
  reqAnswers.forEach( ( reqA ) => {
1092
- if ( ![ 'multiplechoicemultiple', 'multipleImage' ].includes( reqA?.answerType ) && ( reqA.answerType == 'dropDown' && !reqA.allowMultiple ) ) {
1092
+ if ( ![ 'multiplechoicemultiple', 'multipleImage', 'image/video' ].includes( reqA?.answerType ) && ( reqA.answerType == 'dropDown' && !reqA.allowMultiple ) ) {
1093
1093
  if ( ( !reqA.linkType && ( reqA.answer == null || reqA.answer == '' ) ) || ( reqA.linkType && reqA.linkquestionenabled && ( reqA.answer == null || reqA.answer == '' ) ) ) {
1094
1094
  return res.sendError( 'Please Fill All Fields', 400 );
1095
1095
  }
@@ -1343,7 +1343,7 @@ export async function sopMobilechecklistMultiSectionFormatterv1( req, res, next
1343
1343
  structure.redoComment = qaAnswers[j]?.redoComment;
1344
1344
  };
1345
1345
  newArray.push( structure );
1346
- } else if ( qaAnswers[j].answerType == 'multipleImage' ) {
1346
+ } else if ( [ 'image/video', 'multipleImage' ].includes( qaAnswers[j].answerType ) ) {
1347
1347
  let separatedArray = typeof requestSection[i].Multianswer == 'string' ? JSON.parse( requestSection[i].Multianswer ) : requestSection[i].Multianswer;
1348
1348
  let mcmi = [];
1349
1349
  // for (let k = 0; k < qaans.length; k++) {
@@ -1373,6 +1373,9 @@ export async function sopMobilechecklistMultiSectionFormatterv1( req, res, next
1373
1373
  newAnswer.runAI = qaAnswers[j].answers[0]?.runAI || false;
1374
1374
  newAnswer.runAIFeatures = qaAnswers[j].answers[0]?.runAIFeatures || [];
1375
1375
  newAnswer.runAIDescription = qaAnswers[j].answers[0]?.runAIDescription || '';
1376
+ if ( qaAnswers[j].answerType == 'image/video' ) {
1377
+ newAnswer.answerType = separatedArray[s].answerType;
1378
+ }
1376
1379
  mcmi.push( newAnswer );
1377
1380
  }
1378
1381
  }
@@ -2009,6 +2012,32 @@ export async function submitChecklist( req, res ) {
2009
2012
  };
2010
2013
  console.log( 'inserttraxlogs =>', inserttraxlogs );
2011
2014
  insertOpenSearchData( openSearch.traxActivityLog, inserttraxlogs );
2015
+ let checklistDetails = await checklistService.findOne( { _id: getchecklist[0].sourceCheckList_id }, { notifyFlags: 1, approver: 1 } );
2016
+ if ( checklistDetails?.notifyFlags?.notifyType?.length ) {
2017
+ let emailList = checklistDetails?.notifyFlags?.notifyType.includes( 'approver' ) ? checklistDetails.approver.flatMap( ( ele ) => ele?.value ): [];
2018
+ emailList = [ ...emailList, ...checklistDetails?.notifyFlags?.notifyType?.users.flatMap( ( ele ) => ele?.value ) ];
2019
+ let data = {
2020
+ storeName: getchecklist[0].storeName,
2021
+ flagCount: updateData.questionFlag,
2022
+ checklistName: getchecklist[0].checkListName,
2023
+ submittedBy: getchecklist[0].userName,
2024
+ time: updateData.submitMobileTime,
2025
+ domain: JSON.parse( process.env.URL ).domain,
2026
+ };
2027
+ const templateHtml = fs.readFileSync( path.resolve( path.dirname( '' ) ) + '/src/hbs/trialExtentionEmail.hbs', 'utf8' );
2028
+ const template = Handlebars.compile( templateHtml );
2029
+ const html = template( { data: data } );
2030
+ emailList.forEach( ( email ) => {
2031
+ let params = {
2032
+ toEmail: email,
2033
+ mailSubject: 'TangoEye | Checklist Flag',
2034
+ htmlBody: html,
2035
+ attachment: '',
2036
+ sourceEmail: JSON.parse( process.env.SES ).adminEmail,
2037
+ };
2038
+ sendEmailWithSES( params.toEmail, params.mailSubject, params.htmlBody, params.attachment, params.sourceEmail );
2039
+ } );
2040
+ }
2012
2041
  }
2013
2042
 
2014
2043
  return res.sendSuccess( 'Checklist Updated Successfully' );
@@ -3353,11 +3382,11 @@ export async function questionList( req, res ) {
3353
3382
  Multianswer[ansIndex].validationAnswer = userAns.validationAnswer;
3354
3383
  }
3355
3384
  }
3356
- if ( question.answerType == 'multipleImage' ) {
3385
+ if ( [ 'image/video', 'multipleImage' ].includes( question.answerType ) ) {
3357
3386
  if ( userAns && userAns.answer && userAns.answer !='' ) {
3358
3387
  // let manswer = await signedUrl( { file_path: decodeURIComponent( userAns.answer ), Bucket: bucket.sop } );
3359
3388
  let manswer = `${cdnurl.TraxAnswerCDN}${userAns.answer}`;
3360
- Multianswer.push( { 'answer': manswer, 'no': userAnsIndex, 'validationAnswer': '' } );
3389
+ Multianswer.push( { 'answer': manswer, 'no': userAnsIndex, 'validationAnswer': '', ...( question.answerType == 'image/video' && { answerType: userAns?.answerType } ) } );
3361
3390
  } else {
3362
3391
 
3363
3392
  }
@@ -3376,11 +3405,11 @@ export async function questionList( req, res ) {
3376
3405
  question.Multianswer = Multianswer;
3377
3406
  }
3378
3407
  }
3379
- if ( question.answerType == 'multipleImage' ) {
3408
+ if ( [ 'image/video', 'multipleImage' ].includes( question.answerType ) ) {
3380
3409
  if ( Multianswer.length ) {
3381
3410
  question.Multianswer = Multianswer;
3382
3411
  } else {
3383
- Multianswer.push( { 'answer': null, 'no': 0, 'validationAnswer': null } );
3412
+ Multianswer.push( { 'answer': null, 'no': 0, 'validationAnswer': null, ...( question.answerType == 'image/video' && { answerType: null } ) } );
3384
3413
  question.Multianswer = Multianswer;
3385
3414
  }
3386
3415
  }
@@ -4365,7 +4394,7 @@ export async function questionListV1( req, res ) {
4365
4394
  Multianswer[ansIndex].validationAnswer = userAns.validationAnswer;
4366
4395
  }
4367
4396
  }
4368
- if ( question.answerType == 'multipleImage' ) {
4397
+ if ( question.answerType == 'multipleImage' || question.answerType == 'image/video' ) {
4369
4398
  if ( userAns && userAns.answer && userAns.answer !='' ) {
4370
4399
  let manswer = `${cdnurl.TraxAnswerCDN}${userAns.answer}`;
4371
4400
  Multianswer.push( { 'answer': manswer, 'no': userAnsIndex, 'validationAnswer': '' } );
@@ -4387,7 +4416,7 @@ export async function questionListV1( req, res ) {
4387
4416
  question.Multianswer = Multianswer;
4388
4417
  }
4389
4418
  }
4390
- if ( question.answerType == 'multipleImage' ) {
4419
+ if ( question.answerType == 'multipleImage' || question.answerType == 'image/video' ) {
4391
4420
  if ( Multianswer.length ) {
4392
4421
  question.Multianswer = Multianswer;
4393
4422
  } else {
@@ -0,0 +1,249 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
8
+ <title>Trial Intiate Email</title>
9
+ <meta name="viewport" content="width=device-width, initial-scale=1">
10
+ <style type="text/css">
11
+ @media screen {
12
+ @font-face {
13
+ font-family: 'Inter';
14
+ font-style: normal;
15
+ font-weight: 400;
16
+ font-display: swap;
17
+ src: local("Inter"), local("Inter-Regular"), url(https://fonts.gstatic.com/s/inter/v12/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMw2boKoduKmMEVuLyfAZJhiI2B.woff2) format('woff2');
18
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
19
+ }
20
+ }
21
+
22
+ body {
23
+ font-family: "Inter", sans-serif !important;
24
+ }
25
+
26
+ body,
27
+ table,
28
+ td,
29
+ a {
30
+ -ms-text-size-adjust: 100%;
31
+ -webkit-text-size-adjust: 100%;
32
+ }
33
+
34
+ table,
35
+ td {
36
+ mso-table-rspace: 0pt;
37
+ mso-table-lspace: 0pt;
38
+ }
39
+
40
+ img {
41
+ -ms-interpolation-mode: bicubic;
42
+ }
43
+
44
+ a[x-apple-data-detectors] {
45
+ font-family: "inherit" !important;
46
+ font-size: inherit !important;
47
+ font-weight: inherit !important;
48
+ line-height: inherit !important;
49
+ color: inherit !important;
50
+ text-decoration: none !important;
51
+ }
52
+
53
+
54
+ div[style*="margin: 16px 0;"
55
+
56
+ ] {
57
+ margin: 0 !important;
58
+ }
59
+
60
+ body {
61
+ width: 100% !important;
62
+ height: 100% !important;
63
+ padding: 0 !important;
64
+ margin: 0 !important;
65
+ }
66
+
67
+
68
+ table {
69
+ border-collapse: collapse !important;
70
+ }
71
+
72
+ a {
73
+ color: #1a82e2;
74
+ }
75
+
76
+ img {
77
+ height: auto;
78
+ line-height: 100%;
79
+ text-decoration: none;
80
+ border: 0;
81
+ outline: none;
82
+ }
83
+
84
+ .flagText {
85
+ /* font-family: 'Inter'; */
86
+ /* color: #667085 !important; */
87
+ font-size: 16px;
88
+ font-weight: 600;
89
+ line-height: 24px;
90
+ text-align: left;
91
+
92
+ }
93
+ </style>
94
+
95
+ </head>
96
+
97
+ <body style="background-color: #dbe5ea;">
98
+
99
+ <div class="preheader"
100
+ style="display: none; max-width: 0; max-height: 0; overflow: hidden; font-size: 1px; line-height: 1px; color: #fff; opacity: 0;">
101
+ Email Summary (Hidden)
102
+ </div>
103
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding-left:10px;padding-right:10px">
104
+ <tr>
105
+ <td bgcolor="#dbe5ea" style="padding:32px 10px 0 10px">
106
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 680px;" align="center">
107
+ <tr>
108
+ <td class="o_bg-white o_px-md o_py-md o_sans o_text"
109
+ style="margin-top: 0px;margin-bottom: 0px;font-size: 16px;line-height: 24px;background-color: #ffffff;padding-left: 18px;padding-right: 24px;padding-top: 24px;padding-bottom: 24px;">
110
+ <p style="margin-top: 0px;margin-bottom: 0px;"><a class="o_text-white"
111
+ href="https://tangoeye.ai/"
112
+ style="text-decoration: none;outline: none;color: #ffffff;"><img
113
+ src="https://devtangoretail-api.tangoeye.ai/logo.png" width="200" height="100"
114
+ alt="SimpleApp"
115
+ style="-ms-interpolation-mode: bicubic;vertical-align: middle;border: 0;line-height: 100%;height: auto;outline: none;text-decoration: none;"></a>
116
+ </p>
117
+ </td>
118
+ </tr>
119
+ <tr>
120
+ <td align="left" bgcolor="#ffffff"
121
+ style="padding-left: 30px;padding-right: 24px; font-size: 14px; line-height: 24px;">
122
+ <p class="o_heading o_mb-xxs"
123
+ style="width: 624px;height: 0px;border: 1px solid #CBD5E1;flex: none;order: 1;flex-grow: 0;">
124
+ </p>
125
+ </td>
126
+ </tr>
127
+ <tr>
128
+ <td class="o_bg-white o_px-md o_py-xl o_xs-py-md"
129
+ style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-bottom: 10px;">
130
+ <div class="o_col-6s o_sans o_text-md o_text-light o_center"
131
+ style="margin-top: 0px;margin-bottom: 0px;font-size: 16px;line-height: 28px;color: #82899a;">
132
+ <span class="o_heading o_text-dark o_mb-xxs"
133
+ style="font-weight: 400;margin-top: 0px;margin-bottom: 4px;color: #121A26;line-height: 140%;">
134
+ Hi,<br />
135
+ Flag has been detected based on the response submitted in a recently completed
136
+ checklist for Store {{data.storeName}}. Review
137
+ the flagged item and take the necessary action from the dashboard.
138
+ </span>
139
+ </div>
140
+ </td>
141
+ </tr>
142
+ <tr>
143
+ <td class="o_bg-white o_px-md o_py-xl o_xs-py-md"
144
+ style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-bottom: 10px;">
145
+ <div class="o_col-6s o_sans o_text-md o_text-light o_center"
146
+ style="margin-top: 0px;margin-bottom: 0px;font-size: 16px;line-height: 28px;color: #82899a;">
147
+ <span class="o_heading o_text-dark o_mb-xxs"
148
+ style="font-weight: 400;margin-top: 0px;margin-bottom: 4px;color: #121A26;line-height: 140%;">
149
+ Details of the checklist are as follows:
150
+ </span>
151
+ </div>
152
+ </td>
153
+ </tr>
154
+ </table>
155
+ </td>
156
+ </tr>
157
+ <tr>
158
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
159
+ <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%"
160
+ style="max-width: 680px;">
161
+ <tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
162
+ <td class="flagText" style="padding-left:30px; line-height: 24px;color:#000000">Store Name :
163
+ </td>
164
+ <td></td>
165
+ <td></td>
166
+ <td class="flagText">{{data.storeName}}</td>
167
+ </tr>
168
+ <tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
169
+ <td class="flagText" style="padding-left:30px; line-height: 24px;">Checklist Name :</td>
170
+ <td></td>
171
+ <td></td>
172
+ <td class="flagText">{{data.checklistName}}%</td>
173
+ </tr>
174
+
175
+ <tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
176
+ <td class="flagText" style="padding-left:30px; line-height: 24px;">No of Flags :</td>
177
+ <td></td>
178
+ <td></td>
179
+ <td class="flagText">{{data.flagCount}}</td>
180
+ </tr>
181
+ <tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
182
+ <td class="flagText" style="padding-left:30px; line-height: 24px;">Submitted By :</td>
183
+ <td></td>
184
+ <td></td>
185
+ <td class="flagText">{{data.submittedBy}}</td>
186
+ </tr>
187
+ <tr bgcolor="#ffffff" style="border:none;margin-top:0px;">
188
+ <td class="flagText" style="padding-left:30px; line-height: 24px;">Date & Time :</td>
189
+ <td></td>
190
+ <td></td>
191
+ <td class="flagText">{{data.time}}</td>
192
+ </tr>
193
+ </table>
194
+ </td>
195
+ </tr>
196
+ <tr>
197
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 0 10px">
198
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 680px;">
199
+ <tr>
200
+ <td bgcolor="#ffffff" style="padding: 20px;padding-top:15px;padding-left:30px;">
201
+ <table border="0" cellpadding="0" cellspacing="0">
202
+ <tr>
203
+ <td align="center" bgcolor="#00A3FF" style="border-radius: 6px;height:50px;">
204
+ <a href="{{data.domain}}" target="_blank"
205
+ style="display: inline-block; padding: 16px 36px; font-size: 16px; color: #ffffff; text-decoration: none; border-radius: 6px;">View
206
+ Flags
207
+ </a>
208
+ </td>
209
+ </tr>
210
+ </table>
211
+ </td>
212
+ </tr>
213
+ </table>
214
+ </td>
215
+ </tr>
216
+ <tr>
217
+ <td align="center" bgcolor="#dbe5ea" style="padding:0 10px 32px 10px;">
218
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 680px;">
219
+ <tr>
220
+ <td class="o_bg-white o_px-md o_py-xl o_xs-py-md"
221
+ style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-top:5px">
222
+ <div class="o_col-6s o_sans o_text-md o_text-light o_center"
223
+ style="margin-top: 0px;margin-bottom: 0px;font-size: 12px;color: #202B3C;font-style: normal;font-weight: 400;font-size: 12px;line-height: 150%;">
224
+ <p>
225
+ If you have any questions or need assistance, please reach out to us at
226
+ support@tangotech.co.in.
227
+ </p>
228
+ </div>
229
+ </td>
230
+ </tr>
231
+ <tr>
232
+ <td class="o_bg-white o_px-md o_py-xl o_xs-py-md"
233
+ style="background-color: #ffffff;padding-left: 30px;padding-right: 24px;padding-bottom:15px">
234
+ <div class="o_col-6s o_sans o_text-md o_text-light o_center"
235
+ style="margin-top: 0px;margin-bottom: 0px;font-size: 12px;color: #202B3C;font-style: normal;font-weight: 400;font-size: 12px;line-height: 150%;">
236
+ <p>
237
+ © Tango Eye. All rights reserved.</p>
238
+ </div>
239
+ </td>
240
+ </tr>
241
+ </table>
242
+ </td>
243
+ </tr>
244
+
245
+ </table>
246
+
247
+ </body>
248
+
249
+ </html>