tango-app-ui-manage-tickets 3.7.0-beta.6 → 3.7.0-beta.61

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.
Files changed (147) hide show
  1. package/.eslintrc.json +37 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +12 -25
  4. package/src/lib/components/add-csm-modal/add-csm-modal.component.html +32 -0
  5. package/src/lib/components/add-csm-modal/add-csm-modal.component.scss +14 -0
  6. package/src/lib/components/add-csm-modal/add-csm-modal.component.spec.ts +23 -0
  7. package/src/lib/components/add-csm-modal/add-csm-modal.component.ts +94 -0
  8. package/src/lib/components/audit-log/audit-log.component.html +1 -0
  9. package/src/lib/components/audit-log/audit-log.component.scss +0 -0
  10. package/src/lib/components/audit-log/audit-log.component.spec.ts +23 -0
  11. package/src/lib/components/audit-log/audit-log.component.ts +10 -0
  12. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.html +234 -0
  13. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.scss +186 -0
  14. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.spec.ts +23 -0
  15. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.ts +520 -0
  16. package/src/lib/components/audit-metrics/audit-metrics.component.html +345 -0
  17. package/src/lib/components/audit-metrics/audit-metrics.component.scss +34 -0
  18. package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +23 -0
  19. package/src/lib/components/audit-metrics/audit-metrics.component.ts +292 -0
  20. package/src/lib/components/audit-report-popup/audit-report-popup.component.html +111 -0
  21. package/src/lib/components/audit-report-popup/audit-report-popup.component.scss +101 -0
  22. package/src/lib/components/audit-report-popup/audit-report-popup.component.spec.ts +23 -0
  23. package/src/lib/components/audit-report-popup/audit-report-popup.component.ts +397 -0
  24. package/src/lib/components/audit-retag/audit-retag.component.html +129 -0
  25. package/src/lib/components/audit-retag/audit-retag.component.scss +146 -0
  26. package/src/lib/components/audit-retag/audit-retag.component.spec.ts +23 -0
  27. package/src/lib/components/audit-retag/audit-retag.component.ts +489 -0
  28. package/src/lib/components/comment-model/comment-model.component.html +24 -0
  29. package/src/lib/components/comment-model/comment-model.component.scss +20 -0
  30. package/src/lib/components/comment-model/comment-model.component.spec.ts +23 -0
  31. package/src/lib/components/comment-model/comment-model.component.ts +53 -0
  32. package/src/lib/components/count/count.component.html +54 -0
  33. package/src/lib/components/count/count.component.scss +14 -0
  34. package/src/lib/components/count/count.component.spec.ts +23 -0
  35. package/src/lib/components/count/count.component.ts +82 -0
  36. package/src/lib/components/custom-select/custom-select.component.html +134 -0
  37. package/src/lib/components/custom-select/custom-select.component.scss +204 -0
  38. package/src/lib/components/custom-select/custom-select.component.spec.ts +23 -0
  39. package/src/lib/components/custom-select/custom-select.component.ts +189 -0
  40. package/src/lib/components/filter-options/filter-options.component.html +51 -0
  41. package/src/lib/components/filter-options/filter-options.component.scss +102 -0
  42. package/src/lib/components/filter-options/filter-options.component.spec.ts +23 -0
  43. package/src/lib/components/filter-options/filter-options.component.ts +38 -0
  44. package/src/lib/components/footfall-dic/footfall-dic.component.html +1275 -0
  45. package/src/lib/components/footfall-dic/footfall-dic.component.scss +273 -0
  46. package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +23 -0
  47. package/src/lib/components/footfall-dic/footfall-dic.component.ts +1206 -0
  48. package/src/lib/components/footfall-dicview/footfall-dicview.component.html +1136 -0
  49. package/src/lib/components/footfall-dicview/footfall-dicview.component.scss +416 -0
  50. package/src/lib/components/footfall-dicview/footfall-dicview.component.spec.ts +23 -0
  51. package/src/lib/components/footfall-dicview/footfall-dicview.component.ts +1168 -0
  52. package/src/lib/components/footfall-popup/footfall-popup.component.html +61 -0
  53. package/src/lib/components/footfall-popup/footfall-popup.component.scss +20 -0
  54. package/src/lib/components/footfall-popup/footfall-popup.component.spec.ts +23 -0
  55. package/src/lib/components/footfall-popup/footfall-popup.component.ts +12 -0
  56. package/src/lib/components/group-select/group-select.component.html +44 -0
  57. package/src/lib/components/group-select/group-select.component.scss +144 -0
  58. package/src/lib/components/group-select/group-select.component.spec.ts +23 -0
  59. package/src/lib/components/group-select/group-select.component.ts +145 -0
  60. package/src/lib/components/re-trigger/re-trigger.component.html +53 -0
  61. package/src/lib/components/re-trigger/re-trigger.component.scss +16 -0
  62. package/src/lib/components/re-trigger/re-trigger.component.spec.ts +23 -0
  63. package/src/lib/components/re-trigger/re-trigger.component.ts +96 -0
  64. package/src/lib/components/reactive-select/reactive-select.component.html +18 -0
  65. package/src/lib/components/reactive-select/reactive-select.component.scss +52 -0
  66. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +23 -0
  67. package/src/lib/components/reactive-select/reactive-select.component.ts +104 -0
  68. package/src/lib/components/remove-audit/remove-audit.component.html +38 -0
  69. package/src/lib/components/remove-audit/remove-audit.component.scss +27 -0
  70. package/src/lib/components/remove-audit/remove-audit.component.spec.ts +23 -0
  71. package/src/lib/components/remove-audit/remove-audit.component.ts +81 -0
  72. package/src/lib/components/start-audit/start-audit.component.html +174 -0
  73. package/src/lib/components/start-audit/start-audit.component.scss +185 -0
  74. package/src/lib/components/start-audit/start-audit.component.spec.ts +23 -0
  75. package/src/lib/components/start-audit/start-audit.component.ts +761 -0
  76. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +43 -0
  77. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +35 -0
  78. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +23 -0
  79. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +118 -0
  80. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.html +386 -0
  81. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.scss +87 -0
  82. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.spec.ts +23 -0
  83. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.ts +494 -0
  84. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.html +4743 -0
  85. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.scss +1208 -0
  86. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.spec.ts +23 -0
  87. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.ts +3344 -0
  88. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.html +100 -0
  89. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.scss +34 -0
  90. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.spec.ts +23 -0
  91. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.ts +48 -0
  92. package/src/lib/components/tickets/tickets.component.html +451 -0
  93. package/src/lib/components/tickets/tickets.component.scss +131 -0
  94. package/src/lib/components/tickets/tickets.component.spec.ts +23 -0
  95. package/src/lib/components/tickets/tickets.component.ts +809 -0
  96. package/src/lib/components/viewcategory/viewcategory.component.html +38 -0
  97. package/src/lib/components/viewcategory/viewcategory.component.scss +29 -0
  98. package/src/lib/components/viewcategory/viewcategory.component.spec.ts +23 -0
  99. package/src/lib/components/viewcategory/viewcategory.component.ts +79 -0
  100. package/src/lib/services/audit.service.spec.ts +16 -0
  101. package/src/lib/services/audit.service.ts +98 -0
  102. package/src/lib/services/excel.service.ts +48 -0
  103. package/src/lib/services/ticket.service.spec.ts +16 -0
  104. package/src/lib/services/ticket.service.ts +501 -0
  105. package/src/lib/services/timer.service.spec.ts +16 -0
  106. package/src/lib/services/timer.service.ts +92 -0
  107. package/src/lib/tango-manage-tickets-routing.module.ts +37 -0
  108. package/src/lib/tango-manage-tickets.module.ts +68 -0
  109. package/{public-api.d.ts → src/public-api.ts} +8 -2
  110. package/tsconfig.lib.json +14 -0
  111. package/tsconfig.lib.prod.json +10 -0
  112. package/tsconfig.spec.json +14 -0
  113. package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +0 -98
  114. package/esm2022/lib/components/audit-log/audit-log.component.mjs +0 -11
  115. package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +0 -298
  116. package/esm2022/lib/components/comment-model/comment-model.component.mjs +0 -58
  117. package/esm2022/lib/components/count/count.component.mjs +0 -89
  118. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +0 -894
  119. package/esm2022/lib/components/group-select/group-select.component.mjs +0 -155
  120. package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +0 -96
  121. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +0 -108
  122. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +0 -127
  123. package/esm2022/lib/components/tickets/tickets.component.mjs +0 -793
  124. package/esm2022/lib/services/excel.service.mjs +0 -45
  125. package/esm2022/lib/services/ticket.service.mjs +0 -158
  126. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +0 -24
  127. package/esm2022/lib/tango-manage-tickets.module.mjs +0 -54
  128. package/esm2022/public-api.mjs +0 -6
  129. package/esm2022/tango-app-ui-manage-tickets.mjs +0 -5
  130. package/fesm2022/tango-app-ui-manage-tickets.mjs +0 -2914
  131. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +0 -1
  132. package/index.d.ts +0 -5
  133. package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +0 -30
  134. package/lib/components/audit-log/audit-log.component.d.ts +0 -5
  135. package/lib/components/audit-metrics/audit-metrics.component.d.ts +0 -59
  136. package/lib/components/comment-model/comment-model.component.d.ts +0 -17
  137. package/lib/components/count/count.component.d.ts +0 -23
  138. package/lib/components/footfall-dic/footfall-dic.component.d.ts +0 -130
  139. package/lib/components/group-select/group-select.component.d.ts +0 -33
  140. package/lib/components/re-trigger/re-trigger.component.d.ts +0 -32
  141. package/lib/components/reactive-select/reactive-select.component.d.ts +0 -32
  142. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +0 -27
  143. package/lib/components/tickets/tickets.component.d.ts +0 -84
  144. package/lib/services/excel.service.d.ts +0 -10
  145. package/lib/services/ticket.service.d.ts +0 -49
  146. package/lib/tango-manage-tickets-routing.module.d.ts +0 -7
  147. package/lib/tango-manage-tickets.module.d.ts +0 -21
@@ -0,0 +1,397 @@
1
+ import { Component, OnInit, ViewChild, Input, viewChild, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
+ import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
3
+ import { AuditService } from '../../services/audit.service';
4
+ import * as LZString from 'lz-string';
5
+ import { ActivatedRoute, Router } from '@angular/router';
6
+ import { ToastService } from 'tango-app-ui-shared';
7
+ import { Subject, takeUntil, Subscription } from 'rxjs';
8
+ import { TimerService } from '../../services/timer.service';
9
+ import { TicketService } from '../../services/ticket.service';
10
+
11
+ @Component({
12
+ selector: 'lib-audit-report-popup',
13
+ templateUrl: './audit-report-popup.component.html',
14
+ styleUrl: './audit-report-popup.component.scss'
15
+ })
16
+ export class AuditReportPopupComponent implements OnInit, OnDestroy {
17
+
18
+ Retagjunkcount: any = 0;
19
+ Retagemployeecount: any = 0;
20
+ Retagcustomercount: any = 0;
21
+ demographicCount: any;
22
+ retagjunkdata: any;
23
+ retagemployeedata: any;
24
+ retagcustomerdata: any;
25
+ totalfiles: any;
26
+ auth: boolean = false;
27
+ submitauth: boolean = false;
28
+ Errormsg: any = '';
29
+ @Input() selectedType: any;
30
+ @ViewChild('confirmerror') confirmerror: any;
31
+ private readonly destroy$ = new Subject();
32
+ timePassed: number = 0;
33
+ subscription: Subscription | null = null;
34
+ formattedTime: string = '00:00:00';
35
+ category: any = []
36
+ centralOpsData: any;
37
+ tangoData: any;
38
+ tangoAccuracy:any=''
39
+ constructor(public modalService: NgbModal,
40
+ public activeModal: NgbActiveModal,
41
+ private service: TicketService,
42
+ public router: Router, private timerService: TimerService, private cd: ChangeDetectorRef,
43
+ public apiservice: AuditService, private route: ActivatedRoute, private toast: ToastService
44
+ ) { }
45
+
46
+ ngOnInit(): void {
47
+ let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}')
48
+ this.totalfiles = filedata;
49
+ this.apiservice.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
50
+ next: (res: any) => {
51
+ if (res && res?.code == 200) {
52
+ this.category = res.data.footfallDirectoryConfigs.taggingLimitation
53
+
54
+
55
+ this.category.map((data: any) => {
56
+ let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '{}')
57
+ data.value = filterData
58
+ data.count = data?.value?.length
59
+ })
60
+ console.log("🚀 ~ AuditReportPopupComponent ~ ngOnInit ~ this.category:", this.category)
61
+ let stringifydata = sessionStorage.getItem('audit') || '{}'
62
+ const decompressedData = LZString.decompress(stringifydata);
63
+ var customer = JSON.parse(decompressedData || '{}')
64
+ this.Retagcustomercount = customer.length
65
+ console.log("🚀 ~ AuditReportPopupComponent ~ ngOnInit ~ this.totalfiles:", this.totalfiles)
66
+ let input = {
67
+ storeId: this.totalfiles?.filedetails?.storeId,
68
+ dateString: this.totalfiles?.filedetails?.Date,
69
+ }
70
+ this.service
71
+ .checkTicketExists(input).pipe(takeUntil(this.destroy$))
72
+ .subscribe({
73
+ next: (res: any) => {
74
+ if (res && res?.code === 200) {
75
+ console.log(res.data)
76
+ let ticketList = res?.data
77
+ let findstoreticket = ticketList.filter((data: any) => data?._source?.type === 'store' && data?._source?.status != "Closed")[0]?._source
78
+ if (findstoreticket && findstoreticket?.mappingInfo.length > 0) {
79
+ this.centralOpsData = findstoreticket.mappingInfo.filter((data: any) => data.type != "tangoreview")[0]
80
+ console.log("🚀 ~ TicketclosepopupComponent ~ ngOnInit ~ this.centralOpsData:", this.centralOpsData)
81
+ }
82
+ this.tangoAccuracy = Math.round((this.Retagcustomercount/this.totalfiles?.totalfiles)*100)
83
+ this.tangoData ={
84
+ revicedFootfall:this.Retagcustomercount,
85
+ revicedPerc:this.tangoAccuracy+"%"
86
+ }
87
+ }
88
+ }
89
+ })
90
+
91
+
92
+
93
+
94
+ }
95
+ }
96
+ })
97
+ this.setTimer();
98
+ }
99
+
100
+ setTimer() {
101
+ this.subscription = this.timerService.getTimePassed().subscribe(time => {
102
+ this.timePassed = time;
103
+ this.formattedTime = this.timerService.formatTime(time);
104
+ this.cd.detectChanges();
105
+ });
106
+ this.timerService.startTimer();
107
+ document.addEventListener('mousemove', this.handleGlobalMouseEvent);
108
+ document.addEventListener('click', this.handleGlobalMouseEvent);
109
+ document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
110
+ document.addEventListener('scroll', this.handleGlobalMouseEvent);
111
+ }
112
+
113
+ handleGlobalMouseEvent = (): void => {
114
+ this.timerService.startTimer();
115
+ }
116
+
117
+ ngOnDestroy(): void {
118
+ this.destroy$.next(true);
119
+ this.destroy$.complete();
120
+ document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
121
+ document.removeEventListener('click', this.handleGlobalMouseEvent);
122
+ document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
123
+ document.removeEventListener('scroll', this.handleGlobalMouseEvent);
124
+ this.timerService.clearTimer()
125
+ }
126
+
127
+ changebrand() {
128
+ this.auth = true;
129
+ var totalfile: any = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
130
+
131
+ let junkimage: any = [];
132
+ let employeeimage: any = [];
133
+ let customerimage: any = [];
134
+
135
+ this.retagjunkdata.map((e: any) => {
136
+ delete e.img_path; delete e.selected; delete e.count;
137
+ delete e.dropped; delete e.mappedid;
138
+ junkimage.push(e);
139
+ })
140
+ this.retagemployeedata.map((e: any) => {
141
+ delete e.img_path; delete e.selected; delete e.count;
142
+ delete e.dropped; delete e.mappedid;
143
+ employeeimage.push(e);
144
+ })
145
+
146
+ this.retagcustomerdata.map((e: any) => {
147
+
148
+ if (e.count > 1) {
149
+ delete e.img_path;
150
+ delete e.selected;
151
+ delete e.dropped;
152
+ var result = e.mappedid;
153
+ e.mappedid = result
154
+ e.count = result.length
155
+ e.mappedid.forEach((e1: any) => { delete e1.img_path })
156
+ customerimage.push(e)
157
+ }
158
+ if (e.demographic === 'd' && e.count === 1) {
159
+ delete e.img_path;
160
+ delete e.selected;
161
+ delete e.dropped;
162
+ var result = e.mappedid;
163
+ e.mappedid = result
164
+ e.count = result.length
165
+ e.mappedid.forEach((e1: any) => { delete e1.img_path })
166
+ customerimage.push(e)
167
+ }
168
+ })
169
+ var obj: any = {
170
+ auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails?.auditId,
171
+ storeId: totalfile?.filedetails?.store_id,
172
+ auditType: totalfile?.filedetails?.type,
173
+ fileDate: totalfile?.filedetails?.file_date,
174
+ beforeCount: totalfile?.totalfiles,
175
+ junkCount: this.Retagjunkcount,
176
+ junk: junkimage ? junkimage : [],
177
+ employeeCount: this.Retagemployeecount,
178
+ employee: employeeimage ? employeeimage : [],
179
+ customerCount: this.Retagcustomercount,
180
+ zoneName: totalfile?.filedetails?.zoneName ? totalfile?.filedetails?.zoneName : '',
181
+ moduleType: this.selectedType,
182
+ customer: customerimage ? customerimage : [],
183
+ timeSpent: this.timePassed
184
+ }
185
+
186
+ this.apiservice.saveaudit(obj).pipe(takeUntil(this.destroy$)).subscribe({
187
+ next: (res: any) => {
188
+ if (res && res.code == 200) {
189
+ this.toast.getSuccessToast(res?.data?.result)
190
+ this.auth = false;
191
+ this.timerService.resetTimer()
192
+ sessionStorage.removeItem('timeSpent')
193
+ this.closepopup()
194
+ sessionStorage.removeItem('employee')
195
+ sessionStorage.removeItem('junk')
196
+ sessionStorage.removeItem('audit')
197
+ sessionStorage.removeItem('totalfiles')
198
+ sessionStorage.removeItem('retag')
199
+
200
+ this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } })
201
+
202
+ } else {
203
+ this.auth = false;
204
+ if (res && res.code == 203) {
205
+ this.Errormsg = res.error
206
+ const modalRef = this.modalService.open(this.confirmerror)
207
+ modalRef.result.then((result) => {
208
+ if (result.isConfirmed) {
209
+ this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } })
210
+ }
211
+ })
212
+ }
213
+ }
214
+ },
215
+ error: (err) => {
216
+ const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
217
+ this.toast.getErrorToast(errorMessage);
218
+ },
219
+
220
+ })
221
+
222
+ }
223
+
224
+ nextfile() {
225
+ this.auth = true;
226
+ let totalfile: any = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
227
+ console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ totalfile:", totalfile)
228
+ let revisedDetail: any = []
229
+ let stringifydata = sessionStorage.getItem('audit') || '{}'
230
+ const decompressedData = LZString.decompress(stringifydata);
231
+ var customer = JSON.parse(decompressedData || '{}')
232
+ customer.map((customerData: any) => {
233
+ if (customerData.count > 1) {
234
+ // console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
235
+ let duplicateData = customerData.mappedid.filter((data: any) => data.img_name != customerData?.img_name)
236
+ console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ duplicateData:", duplicateData)
237
+ let duplicateImage: any = []
238
+ duplicateData.map((dupData: any) => {
239
+ duplicateImage.push(
240
+ {
241
+ "id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${dupData?.img_name}`,
242
+ "tempId": dupData?.img_name,
243
+ "filePath": dupData?.img_path,
244
+ "isChecked": true
245
+ }
246
+ )
247
+
248
+ })
249
+ let newObj: any = {
250
+ "id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
251
+ "clientId": totalfile?.filedetails?.clientId,
252
+ "storeId": totalfile?.filedetails?.storeId,
253
+ "tempId": customerData?.img_name,
254
+ "dateString": totalfile?.filedetails?.Date,
255
+ // "timeRange": "11AM-12PM",
256
+ "processType": "footfall",
257
+ "revopsType": "duplicate",
258
+ "filePath": customerData?.img_path,
259
+ "status": "submitted",
260
+ "description": "",
261
+ "isChecked": true,
262
+ "type": "tagging-reflect",
263
+ "parent": null,
264
+ "isParent": true,
265
+ "duplicateImage": duplicateImage
266
+ }
267
+ console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj)
268
+ revisedDetail.push(newObj)
269
+ } else {
270
+ // console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
271
+ let newObj: any = {
272
+ "id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
273
+ "clientId": totalfile?.filedetails?.clientId,
274
+ "storeId": totalfile?.filedetails?.storeId,
275
+ "tempId": customerData?.img_name,
276
+ "dateString": totalfile?.filedetails?.Date,
277
+ "timeRange": "11AM-12PM",
278
+ "processType": "footfall",
279
+ "revopsType": "duplicate",
280
+ "filePath": customerData?.img_path,
281
+ "status": "submitted",
282
+ "description": "",
283
+ "isChecked": true,
284
+ "type": "tagging-reflect",
285
+ "parent": null,
286
+ "isParent": true,
287
+ "duplicateImage": []
288
+ }
289
+ console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj)
290
+ revisedDetail.push(newObj)
291
+ }
292
+
293
+
294
+ })
295
+ let count: any = []
296
+ this.category.map((data: any) => {
297
+ count.push({
298
+ name: data.name,
299
+ value: data.count,
300
+ type: data.type
301
+ })
302
+ let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '[]')
303
+
304
+ filterData.map((otherData: any) => {
305
+
306
+ let otherObj: any = {
307
+ "id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${otherData?.img_name}`,
308
+ "clientId": totalfile?.filedetails?.clientId,
309
+ "storeId": totalfile?.filedetails?.storeId,
310
+ "tempId": otherData?.img_name,
311
+ "dateString": totalfile?.filedetails?.Date,
312
+ "processType": "footfall",
313
+ "revopsType": data?.type,
314
+ "filePath": otherData?.img_path,
315
+ "status": "submitted",
316
+ "description": "",
317
+ "isChecked": true,
318
+ "type": "tagging-reflect",
319
+ "parent": null,
320
+ "isParent": false,
321
+ "duplicateImage": []
322
+ }
323
+ revisedDetail.push(otherObj)
324
+ })
325
+ })
326
+
327
+
328
+ let ticketType = sessionStorage.getItem('ticketType')
329
+
330
+ var obj: any = {
331
+ "type": "tangoreview",
332
+ "mode": "web",
333
+ "revicedFootfall": this.Retagcustomercount,
334
+
335
+ "revicedPerc": Math.round((this.Retagcustomercount / totalfile?.totalfiles) * 100) + "%",
336
+ count: count,
337
+ revisedDetail: revisedDetail
338
+ }
339
+ console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ obj:", obj)
340
+ // return
341
+ let payload = {
342
+ storeId: totalfile?.filedetails?.storeId,
343
+ "dateString": totalfile?.filedetails?.Date,
344
+ ticketType: ticketType,
345
+ mappingInfo: obj
346
+ }
347
+ this.apiservice.saveaudit(payload).pipe(takeUntil(this.destroy$)).subscribe({
348
+ next: (res: any) => {
349
+ if (res && res.code == 200) {
350
+ this.auth = false;
351
+ this.timerService.resetTimer()
352
+ sessionStorage.removeItem('timeSpent')
353
+ this.closepopup()
354
+ sessionStorage.removeItem('employee')
355
+ sessionStorage.removeItem('junk')
356
+ sessionStorage.removeItem('audit')
357
+ sessionStorage.removeItem('totalfiles')
358
+ sessionStorage.removeItem('retag')
359
+ var obj: any = {
360
+ totalfiles: {
361
+ }
362
+ }
363
+ obj.totalfiles.queueName = totalfile?.filedetails?.queueName
364
+ sessionStorage.setItem('totalfiles', JSON.stringify(obj))
365
+ this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } })
366
+
367
+ } else {
368
+ this.auth = false;
369
+ if (res && res.code == 203) {
370
+ this.Errormsg = res.error
371
+ const modalRef = this.modalService.open(this.confirmerror)
372
+ modalRef.result.then((result) => {
373
+ if (result.isConfirmed) {
374
+ this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } })
375
+ }
376
+ })
377
+ }
378
+ }
379
+
380
+ },
381
+ error: (err) => {
382
+ const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
383
+ this.toast.getErrorToast(errorMessage);
384
+ },
385
+ })
386
+
387
+ }
388
+ closepopup() {
389
+ this.activeModal.close();
390
+ }
391
+
392
+ reviewdata() {
393
+ this.router.navigate(["/manage/tickets/mapping-list"])
394
+ this.activeModal.close();
395
+ }
396
+
397
+ }
@@ -0,0 +1,129 @@
1
+ <div class="card">
2
+ <div class="card-header">
3
+ <div class="card-title">
4
+ <h3 class="flex-column">
5
+ <div class="card-label">
6
+ <span>{{filedetails?.storeId}}</span>
7
+ <span class="mx-3 arrow-code"> - </span>
8
+ <span>{{filedetails?.Date}}</span>
9
+ </div>
10
+ </h3>
11
+ <div class="rounded-3 ms-3 d-flex align-items-center bg-timer">
12
+ <span class="me-3 text-timer fw-semibold">{{ formattedTime }}</span>
13
+ <span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
14
+ <path
15
+ d="M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z"
16
+ fill="black" />
17
+ </svg></span>
18
+ </div>
19
+ </div>
20
+ <div class="card-toolbar">
21
+ <div class="d-flex">
22
+ <div class="d-flex align-items-center position-relative my-1">
23
+ <a class="btn btn-sm btn-default btn-outline py-2 mx-2" (click)="reviewdata()"><span
24
+ class="svg-icon svg-icon-primary svg-icon-2x"><svg xmlns="http://www.w3.org/2000/svg"
25
+ width="20" height="20" viewBox="0 0 20 20" fill="none">
26
+ <path
27
+ d="M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675"
28
+ stroke="#344054" stroke-width="1.67" stroke-linecap="round"
29
+ stroke-linejoin="round" />
30
+ </svg></span><span class="ms-3">Back to Review</span></a>
31
+ <button class="btn btn-sm btn-primary py-2 mx-2" [disabled]="submitvalue"
32
+ (click)="submitaudit()">Submit
33
+ <span class="svg-icon svg-icon-primary svg-icon-2x"><svg xmlns="http://www.w3.org/2000/svg"
34
+ width="20" height="20" viewBox="0 0 20 20" fill="none">
35
+ <path
36
+ d="M4.16699 10.0001H15.8337M15.8337 10.0001L10.0003 4.16675M15.8337 10.0001L10.0003 15.8334"
37
+ stroke="white" stroke-width="1.67" stroke-linecap="round" stroke-linejoin="round" />
38
+ </svg></span>
39
+ </button>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="card-header">
46
+ <h3 class="card-title align-items-center flex-row">
47
+ <span class="card-label text-dark">Total Files - <span>{{totalfile}}</span></span>
48
+
49
+ </h3>
50
+ <div class="card-toolbar ">
51
+ <div class="d-flex">
52
+ <div class="d-flex align-items-center position-relative my-1">
53
+ <span class="me-3 text fw-semibold">Unique Customers <span
54
+ class=" badge badge-light-primary">{{auditmappingdata?.length ? auditmappingdata?.length :
55
+ 0}}</span></span>
56
+ <div *ngFor="let item of category">
57
+ <button class="btn btn-outline text w-semibold btn-sm py-2 butn-flag mx-2" (click)="viewcategory(item)" [disabled]="!item?.count">View
58
+ {{item?.name}}
59
+ <span class=" badge badge-light-primary">{{item?.count}}</span> </button>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ <div class="row">
68
+ <div *ngIf="auditLoading" class="card mt-5">
69
+ <div class="card-body h-500px">
70
+ <div class="row loader d-flex justify-content-center align-items-center">
71
+ <div class="shimmer">
72
+ <div class="wrapper">
73
+ <div class="stroke animate title"></div>
74
+ <div class="stroke animate link"></div>
75
+ <div class="stroke animate description"></div>
76
+ </div>
77
+ </div>
78
+ <div class="shimmer">
79
+ <div class="wrapper">
80
+ <div class="stroke animate title"></div>
81
+ <div class="stroke animate link"></div>
82
+ <div class="stroke animate description"></div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ <!-- <h5 class="text-dark-600 fw-bold text-center mt-5">Loading Audit file......</h5> -->
87
+ </div>
88
+ </div>
89
+ <div *ngIf="!auditLoading" class="col-md-5">
90
+ <div class="card mt-5">
91
+ <div class="card-body h-1000px">
92
+ <div class="card-label fw-bold">Images for Retagging</div>
93
+ <div class="text-sub mt-2 fw-semibold">Drag and Drop on correct customers</div>
94
+ <div class="item" *ngFor="let obj1 of retagimage" (dragover)="retagallowDrop($event)">
95
+ <img draggable="true" (dragstart)="dragStart($event)" id="{{obj1.img_id}}" [src]="obj1.img_path"
96
+ class="my-3 mx-4 img-ret" (click)="selectretagimage(obj1.img_id)" name="retag">
97
+ <div class="text-center m-0 fs-7 fw-bold">{{obj1.img_name}}</div>
98
+ <span *ngIf="obj1.selected" class="notify-badge1 nwbg"><i class="fa fa-check colorvalue"
99
+ aria-hidden="true" style="font-size:15px;color:#00A3FF"></i></span>
100
+ <span class="notify-badge cursor-pointer" (click)="removeaudit(obj1)"
101
+ *ngIf="obj1.count>1">{{obj1.count}}</span>
102
+
103
+ </div>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ <div *ngIf="!auditLoading" class="col-md-7">
108
+ <div class="card mt-5">
109
+ <div class="card-body h-1000px">
110
+ <div class="card-label fw-bold">Unique Customers <span class="card-label">{{auditmappingdata?.length ?
111
+ auditmappingdata?.length : 0}}</span></div>
112
+ <div class="item" *ngFor="let obj of auditmappingdata;let i=index" style="padding: 10px;">
113
+
114
+ <img class="mx-3 mb-5 img" [src]="obj.img_path" id="{{obj.img_id}}" alt="Image" name="customer"
115
+ (dragover)="retagallowDrop($event)" (drop)="dropImage($event)" draggable="true"
116
+ (dragstart)="dragStart($event)" (click)="selectgroupimage(obj.img_id )">
117
+ <div class="text-center m-0 fs-7 fw-bold">{{obj.img_name}}</div>
118
+ <span *ngIf="obj.selected" class="notify-badge1"><i class="fa fa-check" aria-hidden="true"
119
+ style="font-size:15px;color:#00A3FF"></i></span>
120
+
121
+ <span class="notify-badge cursor-pointer" (click)="removeaudit(obj)"
122
+ *ngIf="obj.count>1">{{obj.count}}</span>
123
+ </div>
124
+ </div>
125
+ </div>
126
+
127
+ </div>
128
+
129
+ </div>
@@ -0,0 +1,146 @@
1
+ .img {
2
+ width: 90px;
3
+ height: 200px;
4
+ }
5
+
6
+ .text{
7
+ color: var(--Gray-700, #344054);
8
+ font-size: 14px;
9
+ line-height: 20px;
10
+ }
11
+
12
+ .text-sub{
13
+ color: var(--Gray-500, #667085) !important;
14
+ font-family: "Inter";
15
+ font-size: 14px !important;
16
+ font-weight: 400 !important;
17
+ line-height: 20px;
18
+ }
19
+
20
+ .card-label{
21
+ font-family: 'Inter';
22
+ font-style: normal;
23
+ // font-weight: 700 !important;
24
+ font-size: 18px !important;
25
+ // line-height: 27px;
26
+ // color: #3F4254 !important;
27
+ }
28
+ .text-col{
29
+ font-family: 'Inter';
30
+ font-style: normal;
31
+ font-weight: 400;
32
+ font-size: 14px;
33
+ line-height: 17px;
34
+ color: #3F4254;
35
+ }
36
+
37
+ .img-ret{
38
+ width: 90px;
39
+ height: 170px;
40
+ }
41
+
42
+ .butn:hover{
43
+ color:#009ef7 !important
44
+ }
45
+ .butn-flag {
46
+ border: 1px solid #009ef7 !important;
47
+ border-right-style: none !important;
48
+ border-radius: 0.5rem 0rem 0rem 0.5rem !important;
49
+ padding: calc(0.25rem + 1px) calc(1.5rem + 1px) !important;
50
+ background-color: #fff !important;
51
+ }
52
+
53
+ .butn-flag1 {
54
+ border: 1px solid #009ef7 !important;
55
+ border-radius: 0rem 0.5rem 0.5rem 0rem !important;
56
+ padding: calc(0.25rem + 1px) calc(1.5rem + 1px) !important;
57
+ background-color: #fff !important;
58
+ }
59
+
60
+ .btn.btn-light-primary:hover:not(.btn-active) {
61
+ background-color: #fff !important;
62
+ }
63
+ .btn-check:checked + .btn.btn-light-primary, .btn-check:active + .btn.btn-light-primary, .btn.btn-light-primary:focus:not(.btn-active), .btn.btn-light-primary:hover:not(.btn-active), .btn.btn-light-primary:active:not(.btn-active), .btn.btn-light-primary.active, .btn.btn-light-primary.show, .show > .btn.btn-light-primary {
64
+ background-color: #fff !important;
65
+ }
66
+ .butn {
67
+ border: 1px solid #009ef7 !important;
68
+ padding: calc(0.65rem + 1px) calc(1.5rem + 1px) !important;
69
+ }
70
+
71
+ .h-800px{
72
+ min-height: 120px;
73
+ max-height: auto;
74
+ }
75
+
76
+ .h-500{
77
+ min-height: 300px;
78
+ }
79
+
80
+ .h-1000px{
81
+ overflow: auto;
82
+ }
83
+
84
+ .item {
85
+ position: relative;
86
+ padding-top: 20px;
87
+ display: inline-block;
88
+ }
89
+ .notify-badge {
90
+ position: absolute;
91
+ right: 0px;
92
+ top: 195px;
93
+ background: var(--Primary-50, #EAF8FF);
94
+ border: 2px solid var(--Primary-600, #00A3FF);
95
+ text-align: center;
96
+ border-radius: 6px;
97
+ color: #00A3FF;
98
+ padding: 5px 10px;
99
+ font-size: 15px;
100
+ }
101
+ .notify-badge1 {
102
+ position: absolute;
103
+ right: 14px;
104
+ top: 5px;
105
+ background: var(--Primary-50, #EAF8FF);;
106
+ text-align: center;
107
+ border-radius: 6px;
108
+ border: 2px solid var(--Primary-600, #00A3FF);
109
+ color: #00A3FF;
110
+ padding: 0px 7px;
111
+ font-size: 19px;
112
+ }
113
+
114
+ .colorvalue{
115
+ font-size:20px;color:rgb(255, 255, 255)
116
+ }
117
+ .nwbg{
118
+ top: 23px !important;
119
+ right: 7px !important;
120
+ }
121
+
122
+ .svg-icon.svg-icon-2x svg{
123
+ width:20px !important;
124
+ height:20px !important;
125
+ }
126
+ .btn-outline {
127
+ border-radius: 8px;
128
+ border: 1px solid var(--Gray-300, #D0D5DD);
129
+ background: var(--White, #FFF);
130
+ box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05);
131
+ color: var(--Gray-700, #344054);
132
+ font-size: 14px;
133
+ font-weight: 500;
134
+ line-height: 24px;
135
+ }
136
+
137
+ .text-timer{
138
+ color: var(--Gray-900, #101828);
139
+ font-size: 24px;
140
+ line-height: 32px;
141
+ }
142
+ .bg-timer{
143
+ border-radius: 12px;
144
+ background: var(--Primary-25, #F6FCFF);
145
+ padding:4px
146
+ }