tango-app-api-analysis-traffic 3.1.0-alpha.11 → 3.1.0-alpha.12

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-analysis-traffic",
3
- "version": "3.1.0-alpha.11",
3
+ "version": "3.1.0-alpha.12",
4
4
  "description": "Traffic Analysis",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -27,7 +27,7 @@
27
27
  "puppeteer": "^23.11.1",
28
28
  "swagger-ui-express": "^5.0.1",
29
29
  "tango-api-schema": "^2.2.7",
30
- "tango-app-api-middleware": "^3.1.53",
30
+ "tango-app-api-middleware": "^3.1.57",
31
31
  "winston": "^3.13.1",
32
32
  "winston-daily-rotate-file": "^5.0.0"
33
33
  },
@@ -134,23 +134,26 @@ export const createEmailers = async ( req, res ) => {
134
134
  // // Make for Loop and Get Assigned Stores each users ////
135
135
  for ( let i = 0; i < getUserData.length; i++ ) {
136
136
  let getUserStores = await getAssinedStoreEmailers( getUserData[i] );
137
- let currentDate = new Date();
138
- let emailersInsertData = {
139
- clientId: requestData.clientId,
140
- fromDate: requestData.fromDate,
141
- toDate: requestData.toDate,
142
- templateType: requestData.templateType,
143
- status: 'open',
144
- createdAt: currentDate,
145
- dateISO: new Date( currentDate.getTime() + kolkataOffset * 60 * 1000 ),
146
- userEmail: getUserData[i].email,
147
- userName: getUserData[i].userName,
148
- storeIds: getUserStores || [],
149
- };
150
- // // Insert emailers ////
151
- let insertOS = await insertOpenSearchData( JSON.parse( process.env.OPENSEARCH ).emailers, emailersInsertData );
152
- if ( insertOS && insertOS.body.result == 'created' ) {
153
- emailersIds.push( insertOS.body._id );
137
+
138
+ if ( getUserStores.length > 0 ) {
139
+ let currentDate = new Date();
140
+ let emailersInsertData = {
141
+ clientId: requestData.clientId,
142
+ fromDate: requestData.fromDate,
143
+ toDate: requestData.toDate,
144
+ templateType: requestData.templateType,
145
+ status: 'open',
146
+ createdAt: currentDate,
147
+ dateISO: new Date( currentDate.getTime() + kolkataOffset * 60 * 1000 ),
148
+ userEmail: getUserData[i].email,
149
+ userName: getUserData[i].userName,
150
+ storeIds: getUserStores || [],
151
+ };
152
+ // // Insert emailers ////
153
+ let insertOS = await insertOpenSearchData( JSON.parse( process.env.OPENSEARCH ).emailers, emailersInsertData );
154
+ if ( insertOS && insertOS.body.result == 'created' ) {
155
+ emailersIds.push( insertOS.body._id );
156
+ }
154
157
  }
155
158
  }
156
159
  // // Send SQS Message ////
@@ -289,7 +292,7 @@ export const sendEmailers = async ( req, res ) => {
289
292
  let storeData = {
290
293
  storeId: getStoreSourceData.storeId,
291
294
  storeName: getStoreSourceData.storeName,
292
- storeLocation: getStoreSourceData.storeProfile?.city+' '+getStoreSourceData.storeProfile.pincode,
295
+ storeLocation: getStoreSourceData.storeProfile?.city+' - '+getStoreSourceData.storeProfile.pincode,
293
296
  storeCount: emailerSourceData._source.storeIds.length-1,
294
297
  storeBaseImage: cameraBaseImage,
295
298
  };
@@ -304,8 +307,8 @@ export const sendEmailers = async ( req, res ) => {
304
307
  templateType: emailerSourceData._source.templateType,
305
308
  clientId: emailerSourceData._source.clientId,
306
309
  clientName: clientData.clientName,
307
- storeId: emailerSourceData._source.storeIds.slice( 0, 30 ),
308
- allStores: emailerSourceData._source.storeIds,
310
+ storeId: emailerSourceData._source.storeIds,
311
+ // allStores: emailerSourceData._source.storeIds,
309
312
  fromDate: emailerSourceData._source.fromDate,
310
313
  toDate: emailerSourceData._source.toDate,
311
314
  templateType: emailerSourceData._source.templateType,
@@ -319,6 +322,8 @@ export const sendEmailers = async ( req, res ) => {
319
322
  bufferTime: 30,
320
323
  },
321
324
  templateId: emailerSourceData._id,
325
+ fromDateFormat: dayjs( emailerSourceData._source.fromDate ).format( 'DD-MM-YYYY' ),
326
+ toDateFormat: dayjs( emailerSourceData._source.toDate ).format( 'DD-MM-YYYY' ),
322
327
  };
323
328
  // console.log( 'templateData =>', templateData );
324
329
  // console.log( 'emailerSourceData =>', emailerSourceData );
@@ -326,6 +331,7 @@ export const sendEmailers = async ( req, res ) => {
326
331
 
327
332
  // // Get Lamda Metrics Data ////
328
333
  let lamdaMetrics = await getLamdaMetricsData( templateData );
334
+ // console.log( 'XYZ lamdaMetrics =>', lamdaMetrics );
329
335
 
330
336
  // // Get Lamda Chart Data ///
331
337
  let lamdaCharts = await getLamdaChartData( templateData );
@@ -363,30 +369,31 @@ export const sendEmailers = async ( req, res ) => {
363
369
  async function getLamdaMetricsData( templateData ) {
364
370
  try {
365
371
  let resultLamdaMetricsData;
366
- if ( templateData.allStores.length == 1 && templateData.templateType == 'daily' ) {
372
+ if ( templateData.storeId.length == 1 && templateData.templateType == 'daily' ) {
367
373
  // // Call Lamda API No 1 Single Store Single Date
368
374
  // API Number: 1 (Daily Emailer With Single Store)
369
375
  resultLamdaMetricsData = await lamdaAPI1( templateData );
370
376
  return resultLamdaMetricsData;
371
- } else if ( templateData.allStores.length > 1 && templateData.templateType == 'daily' ) {
377
+ } else if ( templateData.storeId.length > 1 && templateData.templateType == 'daily' ) {
372
378
  // // Call Lamda API No 2 Multiple Store Single Date
373
379
  // API Number: 3 (Daily Emailer With Multi Stores)
374
380
  resultLamdaMetricsData = await lamdaAPI3( templateData );
381
+ // console.log( 'ABC resultLamdaMetricsData =>', resultLamdaMetricsData );
375
382
  return resultLamdaMetricsData;
376
- } else if ( templateData.allStores.length == 1 && templateData.templateType == 'weekly' ) {
383
+ } else if ( templateData.storeId.length == 1 && templateData.templateType == 'weekly' ) {
377
384
  // // Call Lamda API No 3 Single Store Multiple Date
378
385
  // API Number: 2 (Weekly Emailer With Single Store)
379
386
  resultLamdaMetricsData = await lamdaAPI2( templateData );
380
387
  return resultLamdaMetricsData;
381
- } else if ( templateData.allStores.length > 1 && templateData.templateType == 'weekly' ) {
388
+ } else if ( templateData.storeId.length > 1 && templateData.templateType == 'weekly' ) {
382
389
  // // Call Lamda API No 4 Multiple Store Multiple Date
383
390
  // API Number: 4 (Weekly Emailer With Multi Stores)
384
391
  resultLamdaMetricsData = await lamdaAPI4( templateData );
385
392
  return resultLamdaMetricsData;
386
- } else if ( templateData.allStores.length == 1 && templateData.templateType == 'monthly' ) {
393
+ } else if ( templateData.storeId.length == 1 && templateData.templateType == 'monthly' ) {
387
394
  // // Call Lamda API No 5 Single Store Multiple Date
388
395
 
389
- } else if ( templateData.allStores.length > 1 && templateData.templateType == 'monthly' ) {
396
+ } else if ( templateData.storeId.length > 1 && templateData.templateType == 'monthly' ) {
390
397
  // // Call Lamda API No 6 Multiple Store Multiple Date
391
398
 
392
399
  } else {
@@ -645,7 +652,105 @@ async function lamdaAPI3( templateData ) {
645
652
  if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== '200' ) {
646
653
  return '';
647
654
  }
648
- return lamdaAPIResultData;
655
+ // Format metrics data
656
+ // const updatedLamdaMetrics = formatLamdaMetrics(lamdaMetrics);
657
+ let updatedlamdaAPIResultData = lamdaAPIResultData;
658
+ // console.log( 'updatedlamdaAPIResultData 678=>', updatedlamdaAPIResultData );
659
+
660
+ let highData = {
661
+ 'storeName': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
662
+ lamdaAPIResultData.conversionMetrics.highEngagers.storeName :
663
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
664
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.storeName :
665
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
666
+ lamdaAPIResultData.conversionMetrics.highFootfall.storeName : // Assuming correct key name
667
+ 'NA',
668
+ 'storeId': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
669
+ lamdaAPIResultData.conversionMetrics.highEngagers.storeId :
670
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
671
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.storeId :
672
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
673
+ lamdaAPIResultData.conversionMetrics.highFootfall.storeId : // Assuming correct key name
674
+ 'NA',
675
+ 'vsSameDayLastWeekRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
676
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsSameDayLastWeekRate :
677
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
678
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsSameDayLastWeekRate :
679
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
680
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsSameDayLastWeekRate : // Assuming correct key name
681
+ 'NA',
682
+ 'vsSameDayLastWeekComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
683
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsSameDayLastWeekComparisonFlag :
684
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
685
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsSameDayLastWeekComparisonFlag :
686
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
687
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsSameDayLastWeekComparisonFlag : // Assuming correct key name
688
+ 'NA',
689
+ 'vsMTDAvgRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
690
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsMTDAvgRate :
691
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
692
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsMTDAvgRate :
693
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
694
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsMTDAvgRate : // Assuming correct key name
695
+ 'NA',
696
+ 'vsMTDAvgComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
697
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsMTDAvgComparisonFlag :
698
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
699
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsMTDAvgComparisonFlag :
700
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
701
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsMTDAvgComparisonFlag : // Assuming correct key name
702
+ 'NA',
703
+ };
704
+ // console.log( 'highData =>', highData );
705
+ let lowData = {
706
+ 'storeName': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
707
+ lamdaAPIResultData.conversionMetrics.lowEngagers.storeName :
708
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
709
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.storeName :
710
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
711
+ lamdaAPIResultData.conversionMetrics.lowFootfall.storeName : // Assuming correct key name
712
+ 'NA',
713
+ 'storeId': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
714
+ lamdaAPIResultData.conversionMetrics.lowEngagers.storeId :
715
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
716
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.storeId :
717
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
718
+ lamdaAPIResultData.conversionMetrics.lowFootfall.storeId : // Assuming correct key name
719
+ 'NA',
720
+ 'vsSameDayLastWeekRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
721
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsSameDayLastWeekRate :
722
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
723
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsSameDayLastWeekRate :
724
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
725
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsSameDayLastWeekRate : // Assuming correct key name
726
+ 'NA',
727
+ 'vsSameDayLastWeekComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
728
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsSameDayLastWeekComparisonFlag :
729
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
730
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsSameDayLastWeekComparisonFlag :
731
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
732
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsSameDayLastWeekComparisonFlag : // Assuming correct key name
733
+ 'NA',
734
+ 'vsMTDAvgRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
735
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsMTDAvgRate :
736
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
737
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsMTDAvgRate :
738
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
739
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsMTDAvgRate : // Assuming correct key name
740
+ 'NA',
741
+ 'vsMTDAvgComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
742
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsMTDAvgComparisonFlag :
743
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
744
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsMTDAvgComparisonFlag :
745
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
746
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsMTDAvgComparisonFlag : // Assuming correct key name
747
+ 'NA',
748
+ };
749
+ // console.log( 'lowData =>', lowData );
750
+ updatedlamdaAPIResultData.conversionMetrics.highData = highData;
751
+ updatedlamdaAPIResultData.conversionMetrics.lowData = lowData;
752
+ // console.log( 'updatedlamdaAPIResultData =>', updatedlamdaAPIResultData );
753
+ return updatedlamdaAPIResultData;
649
754
  } catch ( error ) {
650
755
  // console.log( 'error lamdaAPI3=>', error );
651
756
  logger.error( { error: error, function: 'lamdaAPI3' } );
@@ -767,7 +872,103 @@ async function lamdaAPI4( templateData ) {
767
872
  if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== '200' ) {
768
873
  return '';
769
874
  }
770
- return lamdaAPIResultData;
875
+ let updatedlamdaAPIResultData = lamdaAPIResultData;
876
+
877
+ let highData = {
878
+ 'storeName': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
879
+ lamdaAPIResultData.conversionMetrics.highEngagers.storeName :
880
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
881
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.storeName :
882
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
883
+ lamdaAPIResultData.conversionMetrics.highFootfall.storeName : // Assuming correct key name
884
+ 'NA',
885
+ 'storeId': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
886
+ lamdaAPIResultData.conversionMetrics.highEngagers.storeId :
887
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
888
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.storeId :
889
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
890
+ lamdaAPIResultData.conversionMetrics.highFootfall.storeId : // Assuming correct key name
891
+ 'NA',
892
+ 'vsSameDayLastWeekRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
893
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsSameDayLastWeekRate :
894
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
895
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsSameDayLastWeekRate :
896
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
897
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsSameDayLastWeekRate : // Assuming correct key name
898
+ 'NA',
899
+ 'vsSameDayLastWeekComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
900
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsSameDayLastWeekComparisonFlag :
901
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
902
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsSameDayLastWeekComparisonFlag :
903
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
904
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsSameDayLastWeekComparisonFlag : // Assuming correct key name
905
+ 'NA',
906
+ 'vsMTDAvgRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
907
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsMTDAvgRate :
908
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
909
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsMTDAvgRate :
910
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
911
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsMTDAvgRate : // Assuming correct key name
912
+ 'NA',
913
+ 'vsMTDAvgComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
914
+ lamdaAPIResultData.conversionMetrics.highEngagers.vsMTDAvgComparisonFlag :
915
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
916
+ lamdaAPIResultData.conversionMetrics.highPotentialBuyers.vsMTDAvgComparisonFlag :
917
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
918
+ lamdaAPIResultData.conversionMetrics.highFootfall.vsMTDAvgComparisonFlag : // Assuming correct key name
919
+ 'NA',
920
+ };
921
+ let lowData = {
922
+ 'storeName': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
923
+ lamdaAPIResultData.conversionMetrics.lowEngagers.storeName :
924
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
925
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.storeName :
926
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
927
+ lamdaAPIResultData.conversionMetrics.lowFootfall.storeName : // Assuming correct key name
928
+ 'NA',
929
+ 'storeId': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
930
+ lamdaAPIResultData.conversionMetrics.lowEngagers.storeId :
931
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
932
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.storeId :
933
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
934
+ lamdaAPIResultData.conversionMetrics.lowFootfall.storeId : // Assuming correct key name
935
+ 'NA',
936
+ 'vsSameDayLastWeekRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
937
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsSameDayLastWeekRate :
938
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
939
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsSameDayLastWeekRate :
940
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
941
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsSameDayLastWeekRate : // Assuming correct key name
942
+ 'NA',
943
+ 'vsSameDayLastWeekComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
944
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsSameDayLastWeekComparisonFlag :
945
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
946
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsSameDayLastWeekComparisonFlag :
947
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
948
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsSameDayLastWeekComparisonFlag : // Assuming correct key name
949
+ 'NA',
950
+ 'vsMTDAvgRate': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
951
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsMTDAvgRate :
952
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
953
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsMTDAvgRate :
954
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
955
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsMTDAvgRate : // Assuming correct key name
956
+ 'NA',
957
+ 'vsMTDAvgComparisonFlag': templateData.featureConfigs.conversionCalculation === 'engagers-count' ?
958
+ lamdaAPIResultData.conversionMetrics.lowEngagers.vsMTDAvgComparisonFlag :
959
+ templateData.featureConfigs.conversionCalculation === 'billable-entities' ?
960
+ lamdaAPIResultData.conversionMetrics.lowPotentialBuyers.vsMTDAvgComparisonFlag :
961
+ templateData.featureConfigs.conversionCalculation === 'footfall-count' ?
962
+ lamdaAPIResultData.conversionMetrics.lowFootfall.vsMTDAvgComparisonFlag : // Assuming correct key name
963
+ 'NA',
964
+ };
965
+ // console.log( 'lowData =>', lowData );
966
+ updatedlamdaAPIResultData.conversionMetrics.highData = highData;
967
+ updatedlamdaAPIResultData.conversionMetrics.lowData = lowData;
968
+ // console.log( 'updatedlamdaAPIResultData =>', updatedlamdaAPIResultData );
969
+
970
+
971
+ return updatedlamdaAPIResultData;
771
972
  } catch ( error ) {
772
973
  // console.log( 'error lamdaAPI4=>', error );
773
974
  logger.error( { error: error, function: 'lamdaAPI4' } );
@@ -1059,8 +1260,10 @@ async function dailyFootfallTrendChartLamdaAPI( templateData ) {
1059
1260
  let newTemplateData = templateData;
1060
1261
  // console.log( 'Template Data:', templateData );
1061
1262
  // newTemplateData.dateType = 'weekly';
1062
- let processTypeValue = 'engagers';
1063
- if ( templateData.featureConfigs.conversionCalculation !== 'engagers-count' ) {
1263
+ let processTypeValue = 'conversion';
1264
+ if ( templateData.featureConfigs.conversionCalculation == 'engagers-count' ) {
1265
+ processTypeValue='engagers';
1266
+ } else if ( templateData.featureConfigs.conversionCalculation == 'billable-entities' ) {
1064
1267
  processTypeValue='potentialBuyer';
1065
1268
  }
1066
1269
  let filterByTypeValue = 'average';
@@ -1074,10 +1277,8 @@ async function dailyFootfallTrendChartLamdaAPI( templateData ) {
1074
1277
  newTemplateData.processType = processTypeValue;
1075
1278
  newTemplateData.limit = 31;
1076
1279
  newTemplateData.offset = 0;
1077
- // console.log( 'newTemplateData', newTemplateData );
1078
1280
  const overallLamdaURL = 'https://x6sjlqwaqd64kyioxhwrwfesbm0jjitx.lambda-url.ap-south-1.on.aws/';
1079
1281
  let lamdaAPIResultData = await LamdaServiceCall( overallLamdaURL, newTemplateData );
1080
- // console.log( 'lamdaAPIResultData =>', lamdaAPIResultData );
1081
1282
  if ( !lamdaAPIResultData || lamdaAPIResultData.status_code !== '200' ) {
1082
1283
  return chartUrl;
1083
1284
  }
@@ -1097,7 +1298,7 @@ async function dailyFootfallTrendChartLamdaAPI( templateData ) {
1097
1298
  // console.log( 'bucketDetails =>', bucketDetails.mailer );
1098
1299
  // console.log( 'overallChartParams =>', overallChartParams );
1099
1300
  const overallChartResponse = await fileUpload( overallChartParams );
1100
-
1301
+ // console.log( 'overallChartResponse', overallChartResponse );
1101
1302
  if ( overallChartResponse && overallChartResponse.Key ) {
1102
1303
  const URL= JSON.parse( process.env.URL );
1103
1304
  chartUrl = `${URL.emailers}${overallChartResponse.Key}`;
@@ -1125,7 +1326,7 @@ async function getLamdaChartData( templateData ) {
1125
1326
  dailyData: '',
1126
1327
  hourlyData: '',
1127
1328
  };
1128
- if ( templateData.allStores.length == 1 && templateData.templateType == 'daily' ) {
1329
+ if ( templateData.storeId.length == 1 && templateData.templateType == 'daily' ) {
1129
1330
  // // Call Lamda API No 1 Single Store Single Date
1130
1331
  const [ chartImagePath, hourlyChartImagePath ] = await Promise.all( [
1131
1332
  dailyChartLamdaAPI( templateData ), // For the overall chart (col-8)
@@ -1150,32 +1351,35 @@ async function getLamdaChartData( templateData ) {
1150
1351
  async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaCharts, templateData ) {
1151
1352
  try {
1152
1353
  let hbsFileName = '../hbs/dailyMailerSingle.hbs';
1153
- if ( templateData.allStores.length === 1 && templateData.templateType === 'daily' ) {
1354
+ if ( templateData.storeId.length === 1 && templateData.templateType === 'daily' ) {
1154
1355
  hbsFileName = '../hbs/dailyMailerSingle.hbs';
1155
- } else if ( templateData.allStores.length > 1 && templateData.templateType === 'daily' ) {
1356
+ } else if ( templateData.storeId.length > 1 && templateData.templateType === 'daily' ) {
1156
1357
  hbsFileName = '../hbs/dailyMailerMultiple.hbs';
1157
- } else if ( templateData.allStores.length === 1 && templateData.templateType === 'weekly' ) {
1358
+ } else if ( templateData.storeId.length === 1 && templateData.templateType === 'weekly' ) {
1158
1359
  hbsFileName = '../hbs/weeklyMailerSingle.hbs';
1159
- } else if ( templateData.allStores.length > 1 && templateData.templateType === 'weekly' ) {
1360
+ } else if ( templateData.storeId.length > 1 && templateData.templateType === 'weekly' ) {
1160
1361
  hbsFileName = '../hbs/weeklyMailerMultiple.hbs';
1161
- } else if ( templateData.allStores.length === 1 && templateData.templateType === 'monthly' ) {
1362
+ } else if ( templateData.storeId.length === 1 && templateData.templateType === 'monthly' ) {
1162
1363
  hbsFileName = '../hbs/dailyMailerSingle.hbs';
1163
- } else if ( templateData.allStores.length > 1 && templateData.templateType === 'monthly' ) {
1364
+ } else if ( templateData.storeId.length > 1 && templateData.templateType === 'monthly' ) {
1164
1365
  hbsFileName = '../hbs/dailyMailerSingle.hbs';
1165
1366
  }
1166
1367
 
1368
+
1167
1369
  // Prepare email with Handlebars template
1168
1370
  const hbsFilePath = path.join( __dirname, hbsFileName );
1169
1371
  const templateHtml = fs.readFileSync( hbsFilePath, 'utf8' );
1170
1372
  const template = Handlebars.compile( templateHtml );
1171
- console.log( 'JSON.parse( process.env.URL ).apiDomain', JSON.parse( process.env.URL ).apiDomain );
1373
+ // console.log( 'JSON.parse( process.env.URL ).apiDomain', JSON.parse( process.env.URL ).apiDomain );
1172
1374
  const html = template( { data: {
1375
+
1173
1376
  // email: inputData.email,
1174
1377
  clientName: clientData.clientName,
1175
1378
  domain: JSON.parse( process.env.URL ).domain,
1176
1379
  overallChartImage: lamdaCharts.dailyData,
1177
1380
  hourlyChartImage: lamdaCharts.hourlyData,
1178
1381
  lamdaMetrics: lamdaMetrics,
1382
+ // updatedLamdaMetrics: updatedLamdaMetrics,
1179
1383
  storeData: storeData,
1180
1384
  templateData: templateData,
1181
1385
  chartImage: lamdaCharts.dailyFootfallTrendData,
@@ -1187,7 +1391,9 @@ async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaChart
1187
1391
  missedOpportunityCalculation: clientData?.featureConfigs?.missedOpportunityCalculation || 'engagers-conversion',
1188
1392
  bufferTime: 30,
1189
1393
  },
1394
+
1190
1395
  } } );
1396
+ // console.log( 'templateData', templateData );
1191
1397
 
1192
1398
 
1193
1399
  let file = { content: html };
@@ -1206,7 +1412,31 @@ async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaChart
1206
1412
  let pdfBuffer = await htmlpdf.generatePdf( file, options );
1207
1413
  // console.log( 'PDF generated successfully' );
1208
1414
 
1209
- const subject = `Footfall Trend Report for ${clientData.clientName}`;
1415
+ let subject = '';
1416
+ let attachmentFileName = '';
1417
+ switch ( hbsFileName ) {
1418
+ case '../hbs/dailyMailerSingle.hbs':
1419
+ subject = `Footfall Trend Report for ${storeData.storeName}_${templateData.toDateFormat}`;
1420
+ attachmentFileName = `${storeData.storeName}_${templateData.toDateFormat}.pdf`;
1421
+ break;
1422
+ case '../hbs/dailyMailerMultiple.hbs':
1423
+ subject = `Daily Footfall Trend Report for ${templateData.toDateFormat}`;
1424
+ attachmentFileName = `Daily_${templateData.toDateFormat}.pdf`;
1425
+ break;
1426
+ break;
1427
+ case '../hbs/weeklyMailerSingle.hbs':
1428
+ subject = `Footfall Weekly Analysis Report for ${storeData.storeName}_${templateData.fromDateFormat} - ${templateData.toDateFormat}`;
1429
+ attachmentFileName = `${storeData.storeName}_${templateData.fromDateFormat} - ${templateData.toDateFormat}.pdf`;
1430
+ break;
1431
+ case '../hbs/weeklyMailerMultiple.hbs':
1432
+ subject = `Weekly Footfall Trend Report for ${templateData.fromDateFormat} - ${templateData.toDateFormat}`;
1433
+ attachmentFileName = `Weekly_${templateData.fromDateFormat} - ${templateData.toDateFormat}.pdf`;
1434
+ break;
1435
+ default:
1436
+ subject = `Footfall Report for ${templateData.toDateFormat}`;
1437
+ attachmentFileName = `${templateData.toDateFormat}.pdf`;
1438
+ }
1439
+
1210
1440
  const ses = JSON.parse( process.env.SES );
1211
1441
  // templateData.userEmail
1212
1442
  await sendEmailWithSES(
@@ -1214,7 +1444,8 @@ async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaChart
1214
1444
  subject,
1215
1445
  html,
1216
1446
  {
1217
- filename: `Attachment_${Date.now()}.pdf`,
1447
+ // filename: `Attachment_${Date.now()}.pdf`,
1448
+ filename: attachmentFileName,
1218
1449
  content: pdfBuffer,
1219
1450
  contentType: 'application/pdf',
1220
1451
  },
@@ -1227,7 +1458,6 @@ async function emailerSendEmail( storeData, clientData, lamdaMetrics, lamdaChart
1227
1458
  return false;
1228
1459
  }
1229
1460
  }
1230
-
1231
1461
  const overallChart = async ( data ) => {
1232
1462
  console.log( 'Generating overallChart footfall chart...' );
1233
1463
 
@@ -1568,9 +1798,9 @@ const footfallTrend = async ( data ) => {
1568
1798
  })
1569
1799
  );
1570
1800
 
1571
- chart.set("scrollbarX", am5.Scrollbar.new(root, {
1572
- orientation: "horizontal"
1573
- }));
1801
+ // chart.set("scrollbarX", am5.Scrollbar.new(root, {
1802
+ // orientation: "horizontal"
1803
+ // }));
1574
1804
 
1575
1805
  const xRenderer = am5xy.AxisRendererX.new(root, {
1576
1806
  minGridDistance: 20,
@@ -1735,7 +1965,9 @@ const footfallTrend = async ( data ) => {
1735
1965
  let weeklyChartBuffer;
1736
1966
  try {
1737
1967
  await page.setContent( chartHtmlContent, { waitUntil: 'domcontentloaded' } );
1968
+
1738
1969
  await page.waitForSelector( '#Footfalltrend', { visible: true } );
1970
+ // await page.waitForTimeout( 10 );
1739
1971
  weeklyChartBuffer = await page.screenshot( { encoding: 'binary' } );
1740
1972
  } catch ( err ) {
1741
1973
  // console.log( 'Error generating chart screenshot:', err );
@@ -17,6 +17,11 @@ export const registerHelpers = () => {
17
17
  /* eslint-disable no-invalid-this */
18
18
  return a !== b ? options.fn( this ) : options.inverse( this );
19
19
  } );
20
+
21
+ // New helper: If value is empty, return "NA"
22
+ handlebars.registerHelper( 'ifEmpty', function( value ) {
23
+ return value && value.trim() !== '' ? value : 'NA';
24
+ } );
20
25
  };
21
26
 
22
27
  export default handlebars;
@@ -224,7 +224,7 @@
224
224
 
225
225
  </head>
226
226
 
227
- <body style="margin: 0; padding: 0; background: #EFEFEF; font-family: Inter;">
227
+ <body style="margin: 0; padding: 10px 0; background: #EFEFEF; font-family: Inter;">
228
228
  <div
229
229
  style="font-size: 0px; line-height: 1px; mso-line-height-rule: exactly; display: none; max-width: 0px; max-height: 0px; opacity: 0; overflow: hidden; mso-hide: all">
230
230
  </div>
@@ -232,13 +232,13 @@
232
232
  style="width: 100%; table-layout: fixed; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%">
233
233
  <table class="bg-fffffe" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="white"
234
234
  width="640.00"
235
- style=" background-color: white; padding-bottom: 16px; width: 640px; border-spacing: 0; font-family: Inter, Tahoma, sans-serif; min-width: 640px; border-collapse: separate">
235
+ style=" background-color: white; padding-bottom: 16px; width: 640px; border-spacing: 0; font-family: Inter, Tahoma, sans-serif; min-width: 640px; border-collapse: separate; border-radius: 12px;">
236
236
  <tr>
237
- <td valign="top" width="100.00%" style="padding-top: 8px; width: 100%; vertical-align: top">
237
+ <td valign="top" width="100.00%" style="padding-top: 18px; width: 100%; vertical-align: top">
238
238
  <table cellpadding="0" cellspacing="0" border="0" role="presentation" width="100.00%"
239
239
  style="width: 100%; border-spacing: 0">
240
240
  <tr>
241
- <td style="padding-bottom: 4.5px">
241
+ <td style="padding-bottom: 9.5px">
242
242
  <img src="{{data.domain}}/assets/emailers/Tango Logo mailer.png" width="170"
243
243
  style="max-width: initial; width: 170px; display: block" />
244
244
  </td>
@@ -262,7 +262,7 @@
262
262
  <table cellspacing="0" cellpadding="0" border="0">
263
263
  <tr>
264
264
  <td width="295" align="center"
265
- style="vertical-align: middle; padding-left:4px; padding-right:4px;">
265
+ style="vertical-align: middle; padding-left:4px; padding-right:4px;">
266
266
  <table width="100%" border="0" cellpadding="0" cellspacing="0">
267
267
  <tr>
268
268
  <td style="vertical-align: middle;" align="center">
@@ -280,7 +280,7 @@
280
280
  <td style="vertical-align: middle;" align="center">
281
281
  <div style="text-align:center;"><span
282
282
  style="color:#384860;font-family:Inter,Arial,sans-serif;font-size:16px;letter-spacing:0.20000000298023224px;line-height:150%;text-align:center;">Your
283
- Store's Key Footfall Insights for {{data.templateData.toDate}}</span></div>
283
+ Store's Key Footfall Insights for <br /> {{data.templateData.toDateFormat}}</span></div>
284
284
  </td>
285
285
  </tr>
286
286
  </table>
@@ -857,40 +857,31 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
857
857
  style="background: url('assets/image_c925bfaf.png') 50% / 100% no-repeat; width: 100%; height: 40px">
858
858
  <p class="color-384860" width="100.00%" style="font-size: 14px; font-weight: 500; text-align: left; line-height: 20px; color: #384860; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%">
859
859
  <span style="font-size: 14px; font-weight: 700; text-align: left; line-height: 20px; mso-line-height-rule: exactly; display: inline-flex; align-items: center;">
860
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
861
- {{data.lamdaMetrics.conversionMetrics.highEngagers.storeName}}
862
- {{/eq}}
863
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
864
- {{data.lamdaMetrics.conversionMetrics.highPotentialBuyers.storeName}}
865
- {{/eq}}
860
+ {{data.lamdaMetrics.conversionMetrics.highData.storeName}}
866
861
  </span>
867
862
  <span>
868
- - High performing store with highest change in
863
+ - High performing store with highest change in
869
864
  {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
870
865
  Engagers
871
866
  {{/eq}}
872
867
  {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
873
868
  Potential Buyers
874
869
  {{/eq}}
875
- ({{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
876
- {{data.lamdaMetrics.conversionMetrics.highEngagers.vsSameDayLastWeekRate}}%
877
- {{/eq}}
878
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
879
- {{data.lamdaMetrics.conversionMetrics.highPotentialBuyers.vsSameDayLastWeekRate}}%
870
+ {{#eq data.featureConfigs.conversionCalculation 'footfall-count'}}
871
+ Footfall
880
872
  {{/eq}}
881
- {{#eq data.lamdaMetrics.conversionMetrics.highEngagers.vsSameDayLastWeekComparisonFlag true}}
873
+
874
+ ({{data.lamdaMetrics.conversionMetrics.highData.vsSameDayLastWeekRate}}%
875
+
876
+ {{#eq data.lamdaMetrics.conversionMetrics.highData.vsSameDayLastWeekComparisonFlag true}}
882
877
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
883
878
  {{else}}
884
879
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
885
880
  {{/eq}}
886
881
  vs same day last week and
887
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
888
- {{data.lamdaMetrics.conversionMetrics.highEngagers.vsMTDAvgRate}}%
889
- {{/eq}}
890
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
891
- {{data.lamdaMetrics.conversionMetrics.highPotentialBuyers.vsMTDAvgRate}}%
892
- {{/eq}}
893
- {{#eq data.lamdaMetrics.conversionMetrics.highEngagers.vsMTDAvgComparisonFlag true}}
882
+ {{data.lamdaMetrics.conversionMetrics.highData.vsMTDAvgRate}}%
883
+
884
+ {{#eq data.lamdaMetrics.conversionMetrics.highData.vsMTDAvgComparisonFlag true}}
894
885
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
895
886
  {{else}}
896
887
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
@@ -918,12 +909,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
918
909
  style="background: url('assets/image_a402f201.png') 50% / 100% no-repeat; width: 100%; height: 40px">
919
910
  <p class="color-384860" width="100.00%" style="font-size: 14px; font-weight: 500; text-align: left; line-height: 20px; color: #384860; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%">
920
911
  <span style="font-size: 14px; font-weight: 700; text-align: left; line-height: 20px; mso-line-height-rule: exactly; display: inline-flex; align-items: center;">
921
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
922
- {{data.lamdaMetrics.conversionMetrics.lowEngagers.storeName}}
923
- {{/eq}}
924
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
925
- {{data.lamdaMetrics.conversionMetrics.lowPotentialBuyers.storeName}}
926
- {{/eq}}
912
+ {{data.lamdaMetrics.conversionMetrics.lowData.storeName}}
927
913
  </span>
928
914
  <span>
929
915
  - Poor performing store with lowest change in
@@ -933,25 +919,20 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
933
919
  {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
934
920
  Potential Buyers
935
921
  {{/eq}}
936
- ({{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
937
- {{data.lamdaMetrics.conversionMetrics.lowEngagers.vsSameDayLastWeekRate}}%
922
+ {{#eq data.featureConfigs.conversionCalculation 'footfall-count'}}
923
+ Footfall
938
924
  {{/eq}}
939
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
940
- {{data.lamdaMetrics.conversionMetrics.lowPotentialBuyers.vsSameDayLastWeekRate}}%
941
- {{/eq}}
942
- {{#eq data.lamdaMetrics.conversionMetrics.lowEngagers.vsSameDayLastWeekComparisonFlag true}}
925
+
926
+ ({{data.lamdaMetrics.conversionMetrics.lowData.vsSameDayLastWeekRate}}%
927
+
928
+ {{#eq data.lamdaMetrics.conversionMetrics.lowData.vsSameDayLastWeekComparisonFlag true}}
943
929
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
944
930
  {{else}}
945
931
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
946
932
  {{/eq}}
947
933
  vs same day last week and
948
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
949
- {{data.lamdaMetrics.conversionMetrics.lowEngagers.vsMTDAvgRate}}%
950
- {{/eq}}
951
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
952
- {{data.lamdaMetrics.conversionMetrics.lowPotentialBuyers.vsMTDAvgRate}}%
953
- {{/eq}}
954
- {{#eq data.lamdaMetrics.conversionMetrics.lowEngagers.vsMTDAvgComparisonFlag true}}
934
+ {{data.lamdaMetrics.conversionMetrics.lowData.vsMTDAvgRate}}%
935
+ {{#eq data.lamdaMetrics.conversionMetrics.lowData.vsMTDAvgComparisonFlag true}}
955
936
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
956
937
  {{else}}
957
938
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
@@ -1034,21 +1015,25 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
1034
1015
  </td>
1035
1016
  </tr>
1036
1017
  <tr>
1037
- <td style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px">
1038
- <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation"
1039
- bgcolor="#00a3ff" width="580.00" height="48.00"
1040
- style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate; cursor:pointer">
1041
- <tr>
1042
- <td valign="middle" width="100.00%" height="46.00"
1043
- style="width: 100%; vertical-align: middle; height: 46px; text-align: center;">
1044
- <a href="https://dashboard.tangoeye.ai/" class="color-fffffe"
1045
- style="font-size: 16px; font-weight: 600; text-transform: capitalize; color: white; margin: 0; padding: 0; line-height: 24px; display: inline-block; text-decoration: none;">
1046
- View Detailed Analysis
1047
- </a>
1048
- </td>
1049
- </tr>
1050
- </table>
1051
- </td>
1018
+ <td
1019
+ style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px;">
1020
+ <a href="https://dashboard.tangoeye.ai/">
1021
+ <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation"
1022
+ bgcolor="#00a3ff" width="580.00" height="48.00"
1023
+ style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate">
1024
+ <tr>
1025
+ <td valign="middle" width="100.00%" height="46.00"
1026
+ style="width: 100%; vertical-align: middle; height: 46px; text-align: center; cursor:pointer !important">
1027
+ <span class="color-fffffe"
1028
+ style="font-size: 16px; font-weight: 600; text-transform: capitalize; color: white; margin: 0; padding: 0; line-height: 24px; display: inline-block;text-decoration: none;">
1029
+ View Detailed Analysis
1030
+ </span>
1031
+
1032
+ </td>
1033
+ </tr>
1034
+ </table>
1035
+ </a>
1036
+ </td>
1052
1037
  </tr>
1053
1038
  <tr>
1054
1039
  <td align="left" style="padding-top: 12px; padding-bottom: 12px; padding-left: 29px; padding-right: 29px">
@@ -1060,7 +1045,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
1060
1045
  </tr>
1061
1046
  <tr>
1062
1047
  <td align="center">
1063
- <table cellspacing="0" cellpadding="0" border="0">
1048
+ <table cellspacing="0" cellpadding="0" border="0" style="margin-bottom: 5px;">
1064
1049
  <tr>
1065
1050
  <td style="vertical-align: middle;">
1066
1051
  <table cellspacing="0" cellpadding="0" border="0">
@@ -208,7 +208,7 @@
208
208
  </style>
209
209
  </head>
210
210
 
211
- <body style="margin: 0; padding: 0; background: #EFEFEF; font-family:Inter,Arial,sans-serif;
211
+ <body style="margin: 0; padding: 10px 0; background: #EFEFEF; font-family:Inter,Arial,sans-serif;
212
212
  ">
213
213
  <div
214
214
  style="font-size: 0px; line-height: 1px; mso-line-height-rule: exactly; display: none; max-width: 0px; max-height: 0px; opacity: 0; overflow: hidden; mso-hide: all">
@@ -218,14 +218,14 @@
218
218
  <table class="bg-fffffe" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="white"
219
219
  width="640.00"
220
220
  style="background-color: white; width: 640px; border-spacing: 0; font-family:Inter,Arial,sans-serif;
221
- min-width: 640px; border-collapse: separate">
221
+ min-width: 640px; border-collapse: separate; border-radius: 12px;">
222
222
  <tr>
223
223
  <td valign="top" width="100.00%"
224
- style="padding-top: 15px; padding-bottom: 34px; width: 100%; vertical-align: top">
224
+ style="padding-top: 18px; padding-bottom: 18px; width: 100%; vertical-align: top">
225
225
  <table cellpadding="0" cellspacing="0" border="0" role="presentation" width="100.00%"
226
226
  style="width: 100%; border-spacing: 0">
227
227
  <tr>
228
- <td style="padding-bottom: 10.5px">
228
+ <td style="padding-bottom: 4.5px">
229
229
  <img src="{{data.domain}}/assets/emailers/Tango Logo mailer.png" width="170"
230
230
  style="max-width: initial; width: 170px; display: block" />
231
231
  </td>
@@ -263,8 +263,8 @@
263
263
  <td align="center" style="padding-top: 6.73px">
264
264
  <p class="color-fffffe" width="100.00%"
265
265
  style="font-size: 16px; font-weight: 400; letter-spacing: 0.2px; color: white; margin: 0; padding: 0; width: 100%; line-height: 24px; text-align: center; mso-line-height-rule: exactly">
266
- Your Store's Key Footfall Insights for
267
- {{data.templateData.toDate}}</p>
266
+ Your Store's Key Footfall Insights for <br />
267
+ {{data.templateData.toDateFormat}}</p>
268
268
  </td>
269
269
  </tr>
270
270
  </table>
@@ -951,21 +951,23 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
951
951
  </tr>
952
952
  <tr>
953
953
  <td
954
- style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px">
954
+ style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px;">
955
+ <a href="https://dashboard.tangoeye.ai/">
955
956
  <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation"
956
957
  bgcolor="#00a3ff" width="580.00" height="48.00"
957
- style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate; cursor:pointer">
958
+ style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate">
958
959
  <tr>
959
960
  <td valign="middle" width="100.00%" height="46.00"
960
- style="width: 100%; vertical-align: middle; height: 46px; text-align: center;">
961
- <a href="https://dashboard.tangoeye.ai/" class="color-fffffe"
961
+ style="width: 100%; vertical-align: middle; height: 46px; text-align: center; cursor:pointer !important">
962
+ <span class="color-fffffe"
962
963
  style="font-size: 16px; font-weight: 600; text-transform: capitalize; color: white; margin: 0; padding: 0; line-height: 24px; display: inline-block;text-decoration: none;">
963
- View Detailed Analysis
964
- </a>
964
+ View Detailed Analysis
965
+ </span>
966
+
965
967
  </td>
966
968
  </tr>
967
969
  </table>
968
-
970
+ </a>
969
971
  </td>
970
972
  </tr>
971
973
  <tr>
@@ -980,7 +982,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
980
982
  </tr>
981
983
  <tr>
982
984
  <td align="center">
983
- <table cellspacing="0" cellpadding="0" border="0">
985
+ <table cellspacing="0" cellpadding="0" border="0" style="margin-bottom: 20px;">
984
986
  <tr>
985
987
  <td style="vertical-align: middle;">
986
988
  <table cellspacing="0" cellpadding="0" border="0">
@@ -156,15 +156,15 @@
156
156
 
157
157
 
158
158
  </head>
159
- <body style="margin: 0; padding: 0; background: #EFEFEF; font-family: 'Inter';">
159
+ <body style="margin: 0; padding: 10px 0; background: #EFEFEF; font-family: 'Inter';">
160
160
  <div style="font-size: 0px; line-height: 1px; mso-line-height-rule: exactly; display: none; max-width: 0px; max-height: 0px; opacity: 0; overflow: hidden; mso-hide: all"></div>
161
161
  <center lang="und" dir="auto" style="width: 100%; table-layout: fixed; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%">
162
- <table class="bg-fffffe" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="white" width="640.00" style=" background-color: white; padding-bottom: 16px; width: 640px; border-spacing: 0; font-family: Inter, Tahoma, sans-serif; min-width: 640px; border-collapse: separate">
162
+ <table class="bg-fffffe" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="white" width="640.00" style=" background-color: white; padding-bottom: 16px; width: 640px; border-spacing: 0; font-family: Inter, Tahoma, sans-serif; min-width: 640px; border-collapse: separate; border-radius: 12px;">
163
163
  <tr>
164
164
  <td valign="top" width="100.00%" style="padding-top: 15px; width: 100%; vertical-align: top">
165
165
  <table cellpadding="0" cellspacing="0" border="0" role="presentation" width="100.00%" style="width: 100%; border-spacing: 0">
166
166
  <tr>
167
- <td style="padding-bottom: 4.5px">
167
+ <td style="padding-bottom: 9.5px">
168
168
  <img src="{{data.domain}}/assets/emailers/Tango Logo mailer.png" width="170" style="max-width: initial; width: 170px; display: block" />
169
169
  </td>
170
170
  </tr>
@@ -198,7 +198,8 @@
198
198
  </tr>
199
199
  <tr>
200
200
  <td style="vertical-align: middle;" align="center">
201
- <div style="text-align:center;"><span style="color:#384860;font-family:Inter,Arial,sans-serif;font-size:16px;letter-spacing:0.20000000298023224px;line-height:150%;text-align:center;">Your Store’s Key Footfall Insights for {{data.templateData.fromDate}} - {{data.templateData.toDate}}</span></div>
201
+ <div style="text-align:center;"><span style="color:#384860;font-family:Inter,Arial,sans-serif;font-size:16px;letter-spacing:0.20000000298023224px;line-height:150%;text-align:center;">Your Store’s Key Footfall Insights for <br />
202
+ {{data.templateData.fromDateFormat}} - {{data.templateData.toDateFormat}}</span></div>
202
203
  </td>
203
204
  </tr>
204
205
  </table>
@@ -751,12 +752,7 @@
751
752
  <td valign="middle" width="521" height="40" style="padding-left: 6px; width: 521px; vertical-align: middle; height: 40px">
752
753
 
753
754
  <div background="assets/image_d2366d91.png" width="100.00%" height="40" style="background: url('assets/image_c925bfaf.png') 50% / 100% no-repeat; width: 100%; height: 40px">
754
- <p class="color-384860" width="100.00%" style="font-size: 14px; font-weight: 500; text-align: left; line-height: 20px; color: #384860; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%"><span style="font-size: 14px; font-weight: 700; text-align: left; line-height: 20px; mso-line-height-rule: exactly; display: inline-flex; align-items: center;">{{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
755
- {{data.lamdaMetrics.conversionMetrics.highEngagers.storeName}}
756
- {{/eq}}
757
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
758
- {{data.lamdaMetrics.conversionMetrics.highPotentialBuyers.storeName}}
759
- {{/eq}}</span>
755
+ <p class="color-384860" width="100.00%" style="font-size: 14px; font-weight: 500; text-align: left; line-height: 20px; color: #384860; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%"><span style="font-size: 14px; font-weight: 700; text-align: left; line-height: 20px; mso-line-height-rule: exactly; display: inline-flex; align-items: center;">{{data.lamdaMetrics.conversionMetrics.highData.storeName}}</span>
760
756
  <span>
761
757
  - High performing store with highest change in
762
758
  {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
@@ -765,25 +761,21 @@
765
761
  {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
766
762
  Potential Buyers
767
763
  {{/eq}}
768
- ({{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
769
- {{data.lamdaMetrics.conversionMetrics.highEngagers.vsSameDayLastWeekRate}}%
770
- {{/eq}}
771
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
772
- {{data.lamdaMetrics.conversionMetrics.highPotentialBuyers.vsSameDayLastWeekRate}}%
764
+ {{#eq data.featureConfigs.conversionCalculation 'footfall-count'}}
765
+ Footfall
773
766
  {{/eq}}
774
- {{#eq data.lamdaMetrics.conversionMetrics.highEngagers.vsSameDayLastWeekComparisonFlag true}}
767
+
768
+ ({{data.lamdaMetrics.conversionMetrics.highData.vsSameDayLastWeekRate}}%
769
+
770
+
771
+ {{#eq data.lamdaMetrics.conversionMetrics.highData.vsSameDayLastWeekComparisonFlag true}}
775
772
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
776
773
  {{else}}
777
774
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
778
775
  {{/eq}}
779
776
  vs same day last week and
780
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
781
- {{data.lamdaMetrics.conversionMetrics.highEngagers.vsMTDAvgRate}}%
782
- {{/eq}}
783
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
784
- {{data.lamdaMetrics.conversionMetrics.highPotentialBuyers.vsMTDAvgRate}}%
785
- {{/eq}}
786
- {{#eq data.lamdaMetrics.conversionMetrics.highEngagers.vsMTDAvgComparisonFlag true}}
777
+ {{data.lamdaMetrics.conversionMetrics.highData.vsMTDAvgRate}}%
778
+ {{#eq data.lamdaMetrics.conversionMetrics.highData.vsMTDAvgComparisonFlag true}}
787
779
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
788
780
  {{else}}
789
781
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
@@ -810,12 +802,7 @@
810
802
  style="background: url('assets/image_a402f201.png') 50% / 100% no-repeat; width: 100%; height: 40px">
811
803
  <p class="color-384860" width="100.00%" style="font-size: 14px; font-weight: 500; text-align: left; line-height: 20px; color: #384860; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%">
812
804
  <span style="font-size: 14px; font-weight: 700; text-align: left; line-height: 20px; mso-line-height-rule: exactly; display: inline-flex; align-items: center;">
813
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
814
- {{data.lamdaMetrics.conversionMetrics.lowEngagers.storeName}}
815
- {{/eq}}
816
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
817
- {{data.lamdaMetrics.conversionMetrics.lowPotentialBuyers.storeName}}
818
- {{/eq}}
805
+ {{data.lamdaMetrics.conversionMetrics.lowData.storeName}}
819
806
  </span>
820
807
  <span>
821
808
  - Poor performing store with lowest change in
@@ -825,25 +812,21 @@
825
812
  {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
826
813
  Potential Buyers
827
814
  {{/eq}}
828
- ({{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
829
- {{data.lamdaMetrics.conversionMetrics.lowEngagers.vsSameDayLastWeekRate}}%
830
- {{/eq}}
831
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
832
- {{data.lamdaMetrics.conversionMetrics.lowPotentialBuyers.vsSameDayLastWeekRate}}%
815
+ {{#eq data.featureConfigs.conversionCalculation 'footfall-count'}}
816
+ Footfall
833
817
  {{/eq}}
834
- {{#eq data.lamdaMetrics.conversionMetrics.lowEngagers.vsSameDayLastWeekComparisonFlag true}}
818
+
819
+ ({{data.lamdaMetrics.conversionMetrics.lowData.vsSameDayLastWeekRate}}%
820
+
821
+ {{#eq data.lamdaMetrics.conversionMetrics.lowData.vsSameDayLastWeekComparisonFlag true}}
835
822
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
836
823
  {{else}}
837
824
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
838
825
  {{/eq}}
839
826
  vs same day last week and
840
- {{#eq data.featureConfigs.conversionCalculation 'engagers-count'}}
841
- {{data.lamdaMetrics.conversionMetrics.lowEngagers.vsMTDAvgRate}}%
842
- {{/eq}}
843
- {{#eq data.featureConfigs.conversionCalculation 'billable-entities'}}
844
- {{data.lamdaMetrics.conversionMetrics.lowPotentialBuyers.vsMTDAvgRate}}%
845
- {{/eq}}
846
- {{#eq data.lamdaMetrics.conversionMetrics.lowEngagers.vsMTDAvgComparisonFlag true}}
827
+ {{data.lamdaMetrics.conversionMetrics.lowData.vsMTDAvgRate}}%
828
+
829
+ {{#eq data.lamdaMetrics.conversionMetrics.lowData.vsMTDAvgComparisonFlag true}}
847
830
  <img src="{{data.domain}}/assets/emailers/PositiveVector.png" border="0" width="12" />
848
831
  {{else}}
849
832
  <img src="{{data.domain}}/assets/emailers/NegativeVector.png" border="0" width="12" />
@@ -948,21 +931,25 @@
948
931
  </td>
949
932
  </tr>
950
933
  <tr>
951
- <td style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px">
952
- <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation"
953
- bgcolor="#00a3ff" width="580.00" height="48.00"
954
- style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate; cursor:pointer">
955
- <tr>
956
- <td valign="middle" width="100.00%" height="46.00"
957
- style="width: 100%; vertical-align: middle; height: 46px; text-align: center;">
958
- <a href="https://dashboard.tangoeye.ai/" class="color-fffffe"
959
- style="font-size: 16px; font-weight: 600; text-transform: capitalize; color: white; margin: 0; padding: 0; line-height: 24px; display: inline-block; text-decoration: none;">
960
- View Detailed Insights
961
- </a>
962
- </td>
963
- </tr>
964
- </table>
965
- </td>
934
+ <td
935
+ style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px;">
936
+ <a href="https://dashboard.tangoeye.ai/">
937
+ <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation"
938
+ bgcolor="#00a3ff" width="580.00" height="48.00"
939
+ style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate">
940
+ <tr>
941
+ <td valign="middle" width="100.00%" height="46.00"
942
+ style="width: 100%; vertical-align: middle; height: 46px; text-align: center; cursor:pointer !important">
943
+ <span class="color-fffffe"
944
+ style="font-size: 16px; font-weight: 600; text-transform: capitalize; color: white; margin: 0; padding: 0; line-height: 24px; display: inline-block;text-decoration: none;">
945
+ View Detailed Insights
946
+ </span>
947
+
948
+ </td>
949
+ </tr>
950
+ </table>
951
+ </a>
952
+ </td>
966
953
  </tr>
967
954
  <tr>
968
955
  <td align="left" style="padding-top: 12px; padding-bottom: 12px; padding-left: 29px; padding-right: 29px">
@@ -971,7 +958,7 @@
971
958
  </tr>
972
959
  <tr>
973
960
  <td align="center">
974
- <table cellspacing="0" cellpadding="0" border="0">
961
+ <table cellspacing="0" cellpadding="0" border="0" style="margin-bottom: 5px;">
975
962
  <tr>
976
963
  <td style="vertical-align: middle;">
977
964
  <table cellspacing="0" cellpadding="0" border="0">
@@ -169,15 +169,15 @@
169
169
  }
170
170
  </style>
171
171
  </head>
172
- <body style="margin: 0; padding: 0; background: #EFEFEF; font-family: Inter;">
172
+ <body style="margin: 0; padding: 10px 0; background: #EFEFEF; font-family: Inter;">
173
173
  <div style="font-size: 0px; line-height: 1px; mso-line-height-rule: exactly; display: none; max-width: 0px; max-height: 0px; opacity: 0; overflow: hidden; mso-hide: all"></div>
174
174
  <center lang="und" dir="auto" style="width: 100%; table-layout: fixed; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%">
175
- <table class="bg-fffffe" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="white" width="640.00" style=" background-color: white; width: 640px; border-spacing: 0; font-family: Inter, Tahoma, sans-serif; min-width: 640px; border-collapse: separate">
175
+ <table class="bg-fffffe" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="white" width="640.00" style=" background-color: white; width: 640px; border-spacing: 0; font-family: Inter, Tahoma, sans-serif; min-width: 640px; border-collapse: separate; border-radius: 12px;">
176
176
  <tr>
177
- <td valign="top" width="100.00%" style="padding-top: 15px; padding-bottom: 34px; width: 100%; vertical-align: top">
177
+ <td valign="top" width="100.00%" style="padding-top: 15px; width: 100%; vertical-align: top">
178
178
  <table cellpadding="0" cellspacing="0" border="0" role="presentation" width="100.00%" style="width: 100%; border-spacing: 0">
179
179
  <tr>
180
- <td style="padding-bottom: 9.5px">
180
+ <td style="padding-bottom: 4.5px">
181
181
  <img src="{{data.domain}}/assets/emailers/Tango Logo mailer.png" width="170" style="max-width: initial; width: 170px; display: block" />
182
182
  </td>
183
183
  </tr>
@@ -202,7 +202,7 @@
202
202
  </tr>
203
203
  <tr>
204
204
  <td style="padding-top: 6.73px; padding-left: 14.8px; padding-right: 14.8px; mso-padding-left-alt: 0; margin-left: 14.8px">
205
- <p class="color-fffffe" width="100.00%" style="font-size: 16px; font-weight: 400; letter-spacing: 0.2px; text-align: center; line-height: 24px; color: white; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%">Your Store's Key Footfall Insights for <br />{{data.templateData.fromDate}} - {{data.templateData.toDate}}</p>
205
+ <p class="color-fffffe" width="100.00%" style="font-size: 16px; font-weight: 400; letter-spacing: 0.2px; text-align: center; line-height: 24px; color: white; mso-line-height-rule: exactly; margin: 0; padding: 0; width: 100%">Your Store's Key Footfall Insights for <br />{{data.templateData.fromDateFormat}} - {{data.templateData.toDateFormat}}</p>
206
206
  </td>
207
207
  </tr>
208
208
  </table>
@@ -804,20 +804,25 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
804
804
  </td>
805
805
  </tr>
806
806
  <tr>
807
- <td style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px">
808
- <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation" bgcolor="#00a3ff" width="580.00" height="48.00" style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate; cursor:pointer">
809
-
810
- <tr>
807
+ <td
808
+ style="padding-top: 12px; padding-bottom: 12px; padding-left: 30px; padding-right: 30px;">
809
+ <a href="https://dashboard.tangoeye.ai/">
810
+ <table class="bg-00a3ff" cellpadding="0" cellspacing="0" border="0" role="presentation"
811
+ bgcolor="#00a3ff" width="580.00" height="48.00"
812
+ style="border-radius: 8px; border: 1px solid #00a3ff; box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05); background-color: #00a3ff; width: 580px; height: 48px; border-spacing: 0; border-collapse: separate">
813
+ <tr>
811
814
  <td valign="middle" width="100.00%" height="46.00"
812
- style="width: 100%; vertical-align: middle; height: 46px; text-align: center;">
813
- <a href="https://dashboard.tangoeye.ai/" class="color-fffffe"
815
+ style="width: 100%; vertical-align: middle; height: 46px; text-align: center; cursor:pointer !important">
816
+ <span class="color-fffffe"
814
817
  style="font-size: 16px; font-weight: 600; text-transform: capitalize; color: white; margin: 0; padding: 0; line-height: 24px; display: inline-block;text-decoration: none;">
815
- View Detailed Insights
816
- </a>
818
+ View Detailed Insights
819
+ </span>
820
+
817
821
  </td>
818
822
  </tr>
819
- </table>
820
- </td>
823
+ </table>
824
+ </a>
825
+ </td>
821
826
  </tr>
822
827
  <tr>
823
828
  <td align="left" style="padding-top: 12px; padding-bottom: 12px; padding-left: 29px; padding-right: 29px">
@@ -826,7 +831,7 @@ background: radial-gradient(circle at 16.16% 32.77%, rgba(255, 255, 255, 0.40) 0
826
831
  </tr>
827
832
  <tr>
828
833
  <td align="center">
829
- <table cellspacing="0" cellpadding="0" border="0">
834
+ <table cellspacing="0" cellpadding="0" border="0" style="margin-bottom: 20px;">
830
835
  <tr>
831
836
  <td style="vertical-align: middle;">
832
837
  <table cellspacing="0" cellpadding="0" border="0">