tango-app-api-trax 3.4.1-beta-1 → 3.5.0-alpha-0
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/index.js +2 -1
- package/package.json +1 -1
- package/src/controllers/activityLog.controller.js +294 -0
- package/src/controllers/download.controller.js +2 -0
- package/src/controllers/gallery.controller.js +202 -6
- package/src/controllers/internalTrax.controller.js +558 -1
- package/src/controllers/mobileTrax.controller.js +289 -6
- package/src/controllers/trax.controller.js +589 -135
- package/src/controllers/traxDashboard.controllers.js +18 -5
- package/src/dtos/downloadValidation.dtos.js +1 -0
- package/src/routes/activityLog.router.js +18 -0
- package/src/routes/gallery.routes.js +2 -1
- package/src/routes/mobileTrax.routes.js +1 -0
- package/src/services/camera.service.js +14 -0
package/index.js
CHANGED
|
@@ -8,5 +8,6 @@ import { downloadRouter } from './src/routes/download.router.js';
|
|
|
8
8
|
import { mobileRouter } from './src/routes/mobileTrax.routes.js';
|
|
9
9
|
import { internalTraxRouter } from './src/routes/internalTraxApi.router.js';
|
|
10
10
|
import { locusOrderRouter } from './src/routes/locus.router.js';
|
|
11
|
+
import { traxActivityLogRouter } from './src/routes/activityLog.router.js';
|
|
11
12
|
|
|
12
|
-
export { traxDashboardRouter, traxFlagRouter, traxRouter, galleryRouter, downloadRouter, mobileRouter, internalTraxRouter, locusOrderRouter };
|
|
13
|
+
export { traxDashboardRouter, traxFlagRouter, traxRouter, galleryRouter, downloadRouter, mobileRouter, internalTraxRouter, locusOrderRouter, traxActivityLogRouter };
|
package/package.json
CHANGED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
// import mongoose from 'mongoose';
|
|
2
|
+
import { insertOpenSearchData, updateOpenSearchData, getOpenSearchData } from 'tango-app-api-middleware';
|
|
3
|
+
import * as checklistService from '../services/checklist.service.js';
|
|
4
|
+
import * as taskconfigService from '../services/taskConfig.service.js';
|
|
5
|
+
|
|
6
|
+
export const insertLog = async ( req, res ) => {
|
|
7
|
+
try {
|
|
8
|
+
// let currentDate = new Date();
|
|
9
|
+
// let inserttraxlogs = {
|
|
10
|
+
// 'client_id': '11',
|
|
11
|
+
// 'createAt': new Date(),
|
|
12
|
+
// 'sourceCheckList_id': '668e3e1807d5312fa49b0046',
|
|
13
|
+
// 'checkListName': 'Daily Store Checklistnafi33',
|
|
14
|
+
// 'fromCheckListName': '',
|
|
15
|
+
// 'type': 'checklist',
|
|
16
|
+
// 'action': 'updated',
|
|
17
|
+
// 'storeName': 'LKST007',
|
|
18
|
+
// 'store_id': '',
|
|
19
|
+
// 'createdByEmail': 'lkst007bc1@lenskart.co.in',
|
|
20
|
+
// 'createdBy': 'lkst007bc1',
|
|
21
|
+
// 'coverage': 'store',
|
|
22
|
+
// 'logDetails': {
|
|
23
|
+
// 'schedule': {
|
|
24
|
+
// 'previous': {
|
|
25
|
+
// 'schedule': 'repeats',
|
|
26
|
+
// // "repeats":"daily",
|
|
27
|
+
// 'time': '10:00 AM to 11:00 PM',
|
|
28
|
+
// // "occurs":[],
|
|
29
|
+
// 'scheduleRepeatedDay': [ '01' ],
|
|
30
|
+
// 'scheduleRepeatedType': 'daily',
|
|
31
|
+
// 'scheduleStartTime_iso': '2025-02-10T23:30:00.000+00:00',
|
|
32
|
+
// 'scheduleEndTime_iso': '2025-02-10T23:30:00.000+00:00',
|
|
33
|
+
// 'configStartDate': '2025-03-11T00:00:00.000+00:00',
|
|
34
|
+
// 'configEndDate': '2025-03-12T00:00:00.000+00:00',
|
|
35
|
+
// 'scheduleWeekDays': [ 'Monday', 'Tuesday' ],
|
|
36
|
+
// 'scheduleRepeatedMonthWeek': '2 Tuesday',
|
|
37
|
+
// 'specificDate': [ '10', '11' ],
|
|
38
|
+
|
|
39
|
+
// },
|
|
40
|
+
// 'new': {
|
|
41
|
+
// 'schedule': 'onetime',
|
|
42
|
+
// // "repeats":"weekly",
|
|
43
|
+
// 'time': '10:00 AM to 11:00 PM',
|
|
44
|
+
// // "occurs":["Mondy","Tuesday"],
|
|
45
|
+
// 'scheduleRepeatedDay': [ '01' ],
|
|
46
|
+
// 'scheduleRepeatedType': 'daily',
|
|
47
|
+
// 'configStartDate': '2025-03-11T00:00:00.000+00:00',
|
|
48
|
+
// 'configEndDate': '2025-03-12T00:00:00.000+00:00',
|
|
49
|
+
// 'scheduleStartTime_iso': '2025-02-10T23:30:00.000+00:00',
|
|
50
|
+
// 'scheduleEndTime_iso': '2025-02-10T23:30:00.000+00:00',
|
|
51
|
+
// 'scheduleWeekDays': [ 'Monday', 'Tuesday' ],
|
|
52
|
+
// 'scheduleRepeatedMonthWeek': '2 Tuesday',
|
|
53
|
+
// 'specificDate': [ '10', '11' ],
|
|
54
|
+
// },
|
|
55
|
+
// },
|
|
56
|
+
// 'response': {
|
|
57
|
+
// 'previous': [ 'Geo Facing', 'Allow Multiple response' ],
|
|
58
|
+
// 'new': [ 'Geo Facing 2', 'Allow Multiple response 2' ],
|
|
59
|
+
// },
|
|
60
|
+
// 'owner': {
|
|
61
|
+
// 'previous': [ 'Ajinkya Malshe' ],
|
|
62
|
+
// 'new': [ 'Ajinkya Malshe' ],
|
|
63
|
+
// },
|
|
64
|
+
// 'approver': {
|
|
65
|
+
// 'previous': [ 'raju', 'rajuapprover' ],
|
|
66
|
+
// 'new': [ 'raju 1', 'rajuapprover 2' ],
|
|
67
|
+
// },
|
|
68
|
+
// 'storeAdded': [ 'LKST011', 'LKST022', 'LKST3444', 'LKST455', 'LKST566', 'LKST666', 'LKST766', 'LKST866', 'LkST966' ],
|
|
69
|
+
// 'storeRemoved': [ 'LKST1166', 'LKST1177', 'LKST1188', 'LKST1199', 'LKST1155', 'LKST1144', 'LKST1133', 'LKST1122', 'LkST1111' ],
|
|
70
|
+
// 'userAdded': [ 'LKST011@yopmail.com', 'LKST022@yopmail.com', 'LKST3444@yopmail.com', 'LKST455@yopmail.com', 'LKST566@yopmail.com', 'LKST666@yopmail.com', 'LKST766@yopmail.com', 'LKST866@yopmail.com', 'LkST966@yopmail.com' ],
|
|
71
|
+
// 'userRemoved': [ 'LKST1166@yopmail.com', 'LKST1177@yopmail.com', 'LKST1188@yopmail.com', 'LKST1199@yopmail.com', 'LKST1155@yopmail.com', 'LKST1144@yopmail.com', 'LKST1133@yopmail.com', 'LKST1122@yopmail.com', 'LkST1111@yopmail.com' ],
|
|
72
|
+
// },
|
|
73
|
+
// };
|
|
74
|
+
|
|
75
|
+
let inserttraxlogs = {
|
|
76
|
+
client_id: '201',
|
|
77
|
+
createAt: new Date( '2025-04-21T14:43:22.603Z' ),
|
|
78
|
+
sourceCheckList_id: '68065496feb4eaeb4515cf1d',
|
|
79
|
+
checkListName: 'Ghk',
|
|
80
|
+
fromCheckListName: '',
|
|
81
|
+
type: 'checklist',
|
|
82
|
+
action: 'draft',
|
|
83
|
+
storeName: '',
|
|
84
|
+
store_id: '',
|
|
85
|
+
createdByEmail: 'praveenraju@tangotech.co.in',
|
|
86
|
+
createdBy: 'Praveen Raju',
|
|
87
|
+
coverage: 'store',
|
|
88
|
+
logDetails: {
|
|
89
|
+
schedule: {
|
|
90
|
+
previous: {
|
|
91
|
+
scheduleDateString: '28 Apr, 2025',
|
|
92
|
+
schedule: 'onetime',
|
|
93
|
+
time: '10:00 AM to 10:00 PM',
|
|
94
|
+
scheduleRepeatedDay: '',
|
|
95
|
+
scheduleRepeatedType: 'onetime',
|
|
96
|
+
scheduleWeekDays: [],
|
|
97
|
+
scheduleRepeatedMonthWeek: '',
|
|
98
|
+
specificDate: [],
|
|
99
|
+
},
|
|
100
|
+
new: {
|
|
101
|
+
scheduleDateString: '29 Apr, 2025',
|
|
102
|
+
schedule: 'onetime',
|
|
103
|
+
time: '10:00 AM to 10:00 PM',
|
|
104
|
+
scheduleRepeatedDay: '',
|
|
105
|
+
scheduleRepeatedType: 'onetime',
|
|
106
|
+
scheduleWeekDays: [],
|
|
107
|
+
scheduleRepeatedMonthWeek: '',
|
|
108
|
+
specificDate: [],
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
response: { previous: [], new: [] },
|
|
112
|
+
approver: {},
|
|
113
|
+
owner: {},
|
|
114
|
+
storeAdded: [ 'test_Eye52', 'test_Eye53' ],
|
|
115
|
+
storeRemoved: [],
|
|
116
|
+
userAdded: [],
|
|
117
|
+
userRemoved: [],
|
|
118
|
+
},
|
|
119
|
+
userType: 'tango',
|
|
120
|
+
};
|
|
121
|
+
// console.log( 'inserttraxlogs =>', inserttraxlogs );
|
|
122
|
+
let insertOS = await insertOpenSearchData( JSON.parse( process.env.OPENSEARCH ).traxActivityLog, inserttraxlogs );
|
|
123
|
+
console.log( 'insertOS', insertOS );
|
|
124
|
+
return res.sendSuccess( 'insert successfully' );
|
|
125
|
+
// if ( insertOS && insertOS.body.result == 'created' ) {
|
|
126
|
+
// emailersIds.push( insertOS.body._id );
|
|
127
|
+
// }
|
|
128
|
+
} catch ( e ) {
|
|
129
|
+
// logger.error( 'insertLog =>', e );
|
|
130
|
+
// console.log( 'insertLog =>', e );
|
|
131
|
+
return res.sendError( e, 500 );
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
export const updateLog = async ( req, res ) => {
|
|
135
|
+
try {
|
|
136
|
+
// console.log( 'update' );
|
|
137
|
+
const document = {
|
|
138
|
+
doc: {
|
|
139
|
+
storeName: 'LKST008',
|
|
140
|
+
// fromDate: '2025-01-13',
|
|
141
|
+
// toDate: '2025-01-19',
|
|
142
|
+
// status: 'completed',
|
|
143
|
+
// storeIds: [ '347-1' ],
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
let updateResult = await updateOpenSearchData( JSON.parse( process.env.OPENSEARCH ).traxActivityLog, '5DwBYZUBcRcpuflp5oek', document );
|
|
147
|
+
// console.log( 'updateResult', updateResult );
|
|
148
|
+
if ( updateResult?.statusCode == 200 && updateResult?.body?.result == 'updated' ) {
|
|
149
|
+
return res.sendSuccess( 'Email Send Successfully' );
|
|
150
|
+
} else {
|
|
151
|
+
return res.sendSuccess( 'Email Send Successfully' );
|
|
152
|
+
// return res.sendError( { error: error }, 500 );
|
|
153
|
+
}
|
|
154
|
+
} catch ( e ) {
|
|
155
|
+
logger.error( 'updateLog =>', e );
|
|
156
|
+
return res.sendError( e, 500 );
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
export const listLog = async ( req, res ) => {
|
|
160
|
+
try {
|
|
161
|
+
let requestBody = req.body;
|
|
162
|
+
let from = ( requestBody.offset ) * requestBody.limit;
|
|
163
|
+
|
|
164
|
+
let start = new Date( requestBody.fromDate );
|
|
165
|
+
let userTimezoneOffset = start.getTimezoneOffset() * 60000;
|
|
166
|
+
start = new Date( start.getTime() - userTimezoneOffset );
|
|
167
|
+
start.setUTCHours( 0, 0, 0, 0 );
|
|
168
|
+
let end = new Date( requestBody.toDate );
|
|
169
|
+
end = new Date( end.getTime() - userTimezoneOffset );
|
|
170
|
+
end.setUTCHours( 23, 59, 59, 59 );
|
|
171
|
+
|
|
172
|
+
// console.log( 'list' );
|
|
173
|
+
const mustConditions = [];
|
|
174
|
+
|
|
175
|
+
if ( requestBody.clientId ) {
|
|
176
|
+
mustConditions.push( { term: { client_id: requestBody.clientId } } );
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if ( requestBody.type ) {
|
|
180
|
+
mustConditions.push( { term: { type: requestBody.type } } );
|
|
181
|
+
}
|
|
182
|
+
if ( requestBody.action && requestBody.action.length > 0 ) {
|
|
183
|
+
mustConditions.push( { terms: { action: requestBody.action } } );
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if ( req.user.userType == 'client' && req.user.role == 'user' ) {
|
|
187
|
+
return res.sendError( 'no data found', 204 );
|
|
188
|
+
}
|
|
189
|
+
let sourceCheckListIds;
|
|
190
|
+
if ( req.user.userType === 'client' && req.user.role == 'admin' ) {
|
|
191
|
+
if ( requestBody.type === 'checklist' ) {
|
|
192
|
+
const sourceCheckListResult = await checklistService.aggregate( [
|
|
193
|
+
// { $match: { 'owner.value': req.user.email } },
|
|
194
|
+
{ $match: { $or: [ { 'owner.value': req.user.email }, { 'approver.value': req.user.email } ] } },
|
|
195
|
+
{ $group: { _id: null, checklistIds: { $push: { $toString: '$_id' } } } },
|
|
196
|
+
{ $project: { _id: 0, checklistIds: 1 } },
|
|
197
|
+
] );
|
|
198
|
+
sourceCheckListIds = sourceCheckListResult.length > 0 ? sourceCheckListResult[0].checklistIds : [];
|
|
199
|
+
// console.log( 'sourceCheckListIds', sourceCheckListIds );
|
|
200
|
+
}
|
|
201
|
+
if ( requestBody.type === 'task' ) {
|
|
202
|
+
const sourceCheckListResult = await taskconfigService.aggregate( [
|
|
203
|
+
{ $match: { createdBy: req.user._id } },
|
|
204
|
+
// { $match: { $or: [ { 'owner.value': req.user.email }, { 'approver.value': req.user.email } ] } },
|
|
205
|
+
{ $group: { _id: null, checklistIds: { $push: { $toString: '$_id' } } } },
|
|
206
|
+
{ $project: { _id: 0, checklistIds: 1 } },
|
|
207
|
+
] );
|
|
208
|
+
sourceCheckListIds = sourceCheckListResult.length > 0 ? sourceCheckListResult[0].checklistIds : [];
|
|
209
|
+
// console.log( 'sourceCheckListIds', sourceCheckListIds );
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// mustConditions.push( { terms: { $or: [ { store_id: { $in: requestBody.storeId } }, { store_id: { $eq: '' }, userEmail: { $in: requestBody.userEmailes } }, { sourceCheckList_id: { $in: sourceCheckListIds } } ] } } );
|
|
213
|
+
mustConditions.push( {
|
|
214
|
+
'bool': {
|
|
215
|
+
'should': [
|
|
216
|
+
{ 'terms': { 'store_id': requestBody.storeId } },
|
|
217
|
+
{
|
|
218
|
+
'bool': {
|
|
219
|
+
'must': [
|
|
220
|
+
{ 'term': { 'store_id': '' } },
|
|
221
|
+
{ 'terms': { 'userEmail': requestBody.userEmailes } },
|
|
222
|
+
],
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{ 'terms': { 'sourceCheckList_id': sourceCheckListIds.map( String ) } },
|
|
226
|
+
],
|
|
227
|
+
'minimum_should_match': 1,
|
|
228
|
+
},
|
|
229
|
+
} );
|
|
230
|
+
}
|
|
231
|
+
if ( req.user.userType === 'client' ) {
|
|
232
|
+
mustConditions.push( {
|
|
233
|
+
term: { userType: 'client' },
|
|
234
|
+
} );
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
if ( requestBody.searchValue ) {
|
|
239
|
+
mustConditions.push( { multi_match: {
|
|
240
|
+
'query': requestBody.searchValue,
|
|
241
|
+
'fields': [ 'checkListName', 'storeName', 'createdByEmail' ],
|
|
242
|
+
'type': 'phrase_prefix',
|
|
243
|
+
},
|
|
244
|
+
} );
|
|
245
|
+
}
|
|
246
|
+
// console.log( 'Generated Query:', JSON.stringify( mustConditions, null, 2 ) );
|
|
247
|
+
|
|
248
|
+
// console.log( 'mustConditions =>', mustConditions );
|
|
249
|
+
if ( requestBody.fromDate && requestBody.toDate ) {
|
|
250
|
+
mustConditions.push( {
|
|
251
|
+
range: {
|
|
252
|
+
createAt: {
|
|
253
|
+
gte: start, // Start date
|
|
254
|
+
lte: end, // End date
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
} );
|
|
258
|
+
}
|
|
259
|
+
let sortCreatedAt = 'desc';
|
|
260
|
+
if ( requestBody.sortColumnName && requestBody.sortColumnName != '' ) {
|
|
261
|
+
if ( requestBody.sortBy == '1' ) {
|
|
262
|
+
sortCreatedAt = 'asc';
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
let query = {
|
|
266
|
+
from: parseInt( from ),
|
|
267
|
+
size: parseInt( requestBody.limit ),
|
|
268
|
+
track_total_hits: true,
|
|
269
|
+
query: {
|
|
270
|
+
bool: {
|
|
271
|
+
must: mustConditions,
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
sort: [
|
|
275
|
+
{
|
|
276
|
+
createAt: {
|
|
277
|
+
order: sortCreatedAt,
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
'_doc',
|
|
281
|
+
],
|
|
282
|
+
};
|
|
283
|
+
// console.log( 'Executing OpenSearch Query:', JSON.stringify( query, null, 2 ) );
|
|
284
|
+
let result = await getOpenSearchData( JSON.parse( process.env.OPENSEARCH ).traxActivityLog, query );
|
|
285
|
+
// console.log( 'OpenSearch Raw Response', JSON.stringify( result, null, 2 ) );
|
|
286
|
+
if ( !result || !result.body.hits.hits.length ) {
|
|
287
|
+
return res.sendError( 'no data found', 204 );
|
|
288
|
+
}
|
|
289
|
+
return res.sendSuccess( { count: result.body.hits.total.value, result: result.body.hits.hits } );
|
|
290
|
+
} catch ( e ) {
|
|
291
|
+
// console.log( 'listLog', e );
|
|
292
|
+
return res.sendError( e, 500 );
|
|
293
|
+
}
|
|
294
|
+
};
|
|
@@ -559,6 +559,8 @@ export const getChecklistFromZipId = async ( req, res ) => {
|
|
|
559
559
|
resultData.questions = getzipdata.questions;
|
|
560
560
|
resultData.insertType = getzipdata.insertType;
|
|
561
561
|
resultData.status = getzipdata.status;
|
|
562
|
+
resultData.fromDate = getzipdata.fromDate;
|
|
563
|
+
resultData.toDate = getzipdata.toDate;
|
|
562
564
|
return res.sendSuccess( resultData );
|
|
563
565
|
}
|
|
564
566
|
} else {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
import { logger } from 'tango-app-api-middleware';
|
|
3
|
+
import { logger, insertOpenSearchData } from 'tango-app-api-middleware';
|
|
4
4
|
import * as storeService from '../services/store.service.js';
|
|
5
5
|
import * as groupService from '../services/group.service.js';
|
|
6
6
|
import * as clusterService from '../services/cluster.service.js';
|
|
@@ -282,15 +282,23 @@ export async function approveChecklist( req, res ) {
|
|
|
282
282
|
if ( req.body?.storeId?.length ) {
|
|
283
283
|
query['store_id'] = { $in: req.body.storeId };
|
|
284
284
|
}
|
|
285
|
-
let checklistDetails = await processedChecklist.find( query, { _id: 1, checklistStatus: 1, storeName: 1, store_id: 1, userEmail: 1 } );
|
|
285
|
+
let checklistDetails = await processedChecklist.find( query, { _id: 1, checklistStatus: 1, storeName: 1, store_id: 1, userEmail: 1, client_id: 1, coverage: 1, checkListName: 1 } );
|
|
286
286
|
if ( !checklistDetails.length ) {
|
|
287
287
|
return res.sendError( 'No data found', 204 );
|
|
288
288
|
}
|
|
289
289
|
let idList = checklistDetails.filter( ( ele ) => ele.checklistStatus == 'submit' ).map( ( item ) => item._id );
|
|
290
290
|
if ( idList.length ) {
|
|
291
|
-
let
|
|
291
|
+
let approvalUpdateData = {
|
|
292
|
+
approvalStatus: true,
|
|
293
|
+
approvalTime: new Date(),
|
|
294
|
+
approvalTime_string: dayjs().format( 'hh:mm A, DD MMM YYYY' ),
|
|
295
|
+
approvalByName: req.user.userName,
|
|
296
|
+
approvalByEmail: req.user.email,
|
|
297
|
+
};
|
|
298
|
+
let updateResponse = await processedChecklist.updateMany( { _id: { $in: idList } }, approvalUpdateData );
|
|
292
299
|
if ( updateResponse.modifiedCount || updateResponse.matchedCount ) {
|
|
293
300
|
let inputstores = checklistDetails.filter( ( data ) => data.checklistStatus == 'submit' );
|
|
301
|
+
let storeNames = inputstores.map( ( data ) => data.storeName );
|
|
294
302
|
|
|
295
303
|
|
|
296
304
|
let params = {
|
|
@@ -303,6 +311,10 @@ export async function approveChecklist( req, res ) {
|
|
|
303
311
|
},
|
|
304
312
|
'upsert': {
|
|
305
313
|
approvalStatus: true,
|
|
314
|
+
approvalTime: new Date(),
|
|
315
|
+
approvalTime_string: dayjs().format( 'hh:mm A, DD MMM YYYY' ),
|
|
316
|
+
approvalByName: req.user.userName,
|
|
317
|
+
approvalByEmail: req.user.email,
|
|
306
318
|
},
|
|
307
319
|
};
|
|
308
320
|
|
|
@@ -315,7 +327,27 @@ export async function approveChecklist( req, res ) {
|
|
|
315
327
|
};
|
|
316
328
|
let url = JSON.parse( process.env.LAMBDAURL );
|
|
317
329
|
let searchResponse = await fetch( url.approveChecklist, requestOptions );
|
|
318
|
-
|
|
330
|
+
let logData= {
|
|
331
|
+
'client_id': checklistDetails[0].client_id,
|
|
332
|
+
'createAt': new Date(),
|
|
333
|
+
'sourceCheckList_id': req.body.sourceCheckList_id,
|
|
334
|
+
'checkListName': checklistDetails[0].checkListName,
|
|
335
|
+
'fromCheckListName': '',
|
|
336
|
+
'type': 'checklist',
|
|
337
|
+
'action': 'approved',
|
|
338
|
+
'storeName': '',
|
|
339
|
+
'store_id': '',
|
|
340
|
+
'createdByEmail': req.user.email,
|
|
341
|
+
'createdBy': req.user._id,
|
|
342
|
+
'coverage': checklistDetails[0].coverage,
|
|
343
|
+
'logDetails': {
|
|
344
|
+
'approved': storeNames,
|
|
345
|
+
},
|
|
346
|
+
'userType': req.user.userType,
|
|
347
|
+
};
|
|
348
|
+
console.log( 'logData', logData );
|
|
349
|
+
let urlopensearch = JSON.parse( process.env.OPENSEARCH );
|
|
350
|
+
insertOpenSearchData( urlopensearch.traxActivityLog, logData );
|
|
319
351
|
console.log( searchResponse.ok );
|
|
320
352
|
if ( searchResponse.ok ) {
|
|
321
353
|
let pendingstores = checklistDetails.filter( ( data ) => data.checklistStatus != 'submit' );
|
|
@@ -350,7 +382,7 @@ export async function redoChecklist( req, res ) {
|
|
|
350
382
|
}
|
|
351
383
|
|
|
352
384
|
|
|
353
|
-
let checklistDetails = await processedChecklist.findOne( { _id: req.body.payload._id }, { questionAnswers: 1, redoStatus: 1, checklistStatus: 1, client_id: 1, store_id: 1, storeName: 1, checkListType: 1, sourceCheckList_id: 1, checkListName: 1, submitTime: 1, userName: 1, answerType: 1 } );
|
|
385
|
+
let checklistDetails = await processedChecklist.findOne( { _id: req.body.payload._id }, { questionAnswers: 1, redoStatus: 1, checklistStatus: 1, client_id: 1, store_id: 1, storeName: 1, checkListType: 1, sourceCheckList_id: 1, checkListName: 1, submitTime: 1, userName: 1, answerType: 1, coverage: 1, userEmail: 1 } );
|
|
354
386
|
if ( !checklistDetails ) {
|
|
355
387
|
return res.sendError( 'No data found', 204 );
|
|
356
388
|
}
|
|
@@ -440,7 +472,27 @@ export async function redoChecklist( req, res ) {
|
|
|
440
472
|
let url = JSON.parse( process.env.LAMBDAURL );
|
|
441
473
|
let searchResponse = await fetch( url.redoChecklist, requestOptions );
|
|
442
474
|
console.log( searchResponse.ok );
|
|
443
|
-
|
|
475
|
+
let logData= {
|
|
476
|
+
'client_id': checklistDetails.client_id,
|
|
477
|
+
'createAt': new Date(),
|
|
478
|
+
'sourceCheckList_id': checklistDetails.sourceCheckList_id,
|
|
479
|
+
'checkListName': checklistDetails.checkListName,
|
|
480
|
+
'fromCheckListName': checklistDetails.checkListName,
|
|
481
|
+
'type': 'checklist',
|
|
482
|
+
'action': checklistDetails.redoStatus?'multiredo': 'redo',
|
|
483
|
+
'storeName': checklistDetails?.storeName?checklistDetails?.storeName:'',
|
|
484
|
+
'store_id': checklistDetails?.store_id?checklistDetails?.store_id:'',
|
|
485
|
+
'userName': checklistDetails.userName,
|
|
486
|
+
'userEmail': checklistDetails.userEmail,
|
|
487
|
+
'createdByEmail': req.user.email,
|
|
488
|
+
'createdBy': req.user.userName,
|
|
489
|
+
'coverage': checklistDetails.coverage,
|
|
490
|
+
'logDetails': {},
|
|
491
|
+
'userType': req.user.userType,
|
|
492
|
+
};
|
|
493
|
+
let urlopensearch = JSON.parse( process.env.OPENSEARCH );
|
|
494
|
+
console.log( 'logData', logData );
|
|
495
|
+
insertOpenSearchData( urlopensearch.traxActivityLog, logData );
|
|
444
496
|
if ( searchResponse.ok ) {
|
|
445
497
|
return res.sendSuccess( 'Question redo successfully' );
|
|
446
498
|
} else {
|
|
@@ -455,6 +507,150 @@ export async function redoChecklist( req, res ) {
|
|
|
455
507
|
}
|
|
456
508
|
}
|
|
457
509
|
|
|
510
|
+
export async function redomultiChecklist( req, res ) {
|
|
511
|
+
try {
|
|
512
|
+
let inputData = req.body.payload.coverage==='user'?req.body.payload.userEmail:req.body.payload.storeName;
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
for ( let originalData of inputData ) {
|
|
516
|
+
if ( !originalData.checklistId ) {
|
|
517
|
+
return res.sendError( 'Id is Required', 400 );
|
|
518
|
+
}
|
|
519
|
+
if ( !originalData.section_id ) {
|
|
520
|
+
return res.sendError( 'Section id is Required', 400 );
|
|
521
|
+
}
|
|
522
|
+
if ( !req.body.payload.qno ) {
|
|
523
|
+
return res.sendError( 'Question number is Required', 400 );
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
let checklistDetails = await processedChecklist.findOne( { _id: originalData.checklistId }, { questionAnswers: 1, redoStatus: 1, checklistStatus: 1, client_id: 1, store_id: 1, storeName: 1, checkListType: 1, sourceCheckList_id: 1, checkListName: 1, submitTime: 1, userName: 1, answerType: 1 } );
|
|
528
|
+
if ( !checklistDetails ) {
|
|
529
|
+
return res.sendError( 'No data found', 204 );
|
|
530
|
+
}
|
|
531
|
+
let question = checklistDetails.questionAnswers;
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
let sectionIndex = question.findIndex( ( sec ) => sec.sectionName == req.body.payload.sectionName );
|
|
535
|
+
if ( sectionIndex == -1 ) {
|
|
536
|
+
return res.sendError( 'section is not found', 400 );
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
let findQuestion = question[sectionIndex].questions.findIndex( ( ele ) => ele.qno == req.body.payload.qno );
|
|
540
|
+
|
|
541
|
+
let data = { ...question[sectionIndex].questions[findQuestion], redo: true, redoComment: req.body.payload?.checklistDescription || '' };
|
|
542
|
+
// if ( checklistDetails.client_id == '458' ) {
|
|
543
|
+
data.answers.forEach( ( item ) => {
|
|
544
|
+
if ( item.showLinked ) {
|
|
545
|
+
item.nestedQuestion.forEach( ( ele ) => {
|
|
546
|
+
let eleIndex = question[sectionIndex].questions.findIndex( ( qn ) => qn.qno == parseInt( ele ) );
|
|
547
|
+
let element = { ...question[sectionIndex].questions[eleIndex], redo: true, redoComment: '', linkquestionenabled: false };
|
|
548
|
+
question[sectionIndex].questions[eleIndex] = element;
|
|
549
|
+
question[sectionIndex].questions[eleIndex].userAnswer = [];
|
|
550
|
+
question[sectionIndex].questions[eleIndex].remarks = '';
|
|
551
|
+
} );
|
|
552
|
+
}
|
|
553
|
+
} );
|
|
554
|
+
// data.answers.forEach( ( item ) => {
|
|
555
|
+
// if ( item.showLinked ) {
|
|
556
|
+
// item.nestedQuestion = [];
|
|
557
|
+
// item.showLinked = false;
|
|
558
|
+
// item.linkedQuestion = 0;
|
|
559
|
+
// }
|
|
560
|
+
// } );
|
|
561
|
+
// }
|
|
562
|
+
let userAnswer = data.userAnswer;
|
|
563
|
+
|
|
564
|
+
question[sectionIndex].questions[findQuestion] = data;
|
|
565
|
+
question[sectionIndex].questions[findQuestion].userAnswer = [];
|
|
566
|
+
question[sectionIndex].questions[findQuestion].remarks = '';
|
|
567
|
+
checklistDetails.questionAnswers = question;
|
|
568
|
+
let updateData = {
|
|
569
|
+
checklistStatus: 'open',
|
|
570
|
+
redoStatus: true,
|
|
571
|
+
reinitiateStatus: true,
|
|
572
|
+
questionAnswers: question,
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
let response = await processedChecklist.updateOne( { _id: originalData.checklistId }, updateData );
|
|
576
|
+
console.log( response );
|
|
577
|
+
if ( response.modifiedCount || response.matchedCount ) {
|
|
578
|
+
let storeTimeZone = await storeService.findOne( { storeName: checklistDetails.storeName }, { 'storeProfile.timeZone': 1 } );
|
|
579
|
+
let currentDateTime;
|
|
580
|
+
if ( storeTimeZone?.storeProfile?.timeZone ) {
|
|
581
|
+
currentDateTime = dayjs().tz( storeTimeZone?.storeProfile?.timeZone );
|
|
582
|
+
} else {
|
|
583
|
+
currentDateTime = dayjs();
|
|
584
|
+
}
|
|
585
|
+
data = {
|
|
586
|
+
checklistId: checklistDetails.sourceCheckList_id,
|
|
587
|
+
checkListName: checklistDetails.checkListName,
|
|
588
|
+
checklistDescription: req.body.payload.checklistDescription,
|
|
589
|
+
sectionId: originalData.section_id,
|
|
590
|
+
sectionName: question[sectionIndex].sectionName,
|
|
591
|
+
questionName: question[sectionIndex].questions[findQuestion].qname,
|
|
592
|
+
action: 'redo',
|
|
593
|
+
store_id: checklistDetails?.store_id?checklistDetails?.store_id:'',
|
|
594
|
+
storeName: checklistDetails?.storeName?checklistDetails?.storeName:'',
|
|
595
|
+
client_id: checklistDetails.client_id,
|
|
596
|
+
processedChecklistId: checklistDetails._id,
|
|
597
|
+
type: checklistDetails.checkListType,
|
|
598
|
+
userAnswer: userAnswer,
|
|
599
|
+
initiatedBy: req.user.userName,
|
|
600
|
+
initiatedTime: dayjs.utc( currentDateTime.format( 'hh:mm:ss A, DD MMM YYYY' ), 'hh:mm:ss A, DD MMM YYYY' ).format(),
|
|
601
|
+
answerType: question[sectionIndex].questions[findQuestion].answerType,
|
|
602
|
+
submitedBy: checklistDetails.userName,
|
|
603
|
+
submitTime: checklistDetails.submitTime,
|
|
604
|
+
};
|
|
605
|
+
await checklistLogs.create( data );
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
req.body.payload._id=originalData.checklistId;
|
|
609
|
+
req.body.payload.section_id=originalData.section_id;
|
|
610
|
+
req.body.payload.uniqueNo=originalData.uniqueNo;
|
|
611
|
+
console.log( req.body );
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
const requestOptions = {
|
|
615
|
+
method: 'POST',
|
|
616
|
+
headers: {
|
|
617
|
+
'Content-Type': 'application/json',
|
|
618
|
+
},
|
|
619
|
+
body: JSON.stringify( req.body ),
|
|
620
|
+
};
|
|
621
|
+
let url = JSON.parse( process.env.LAMBDAURL );
|
|
622
|
+
let searchResponse = await fetch( url.redoChecklist, requestOptions );
|
|
623
|
+
console.log( searchResponse.ok );
|
|
624
|
+
let logData= {
|
|
625
|
+
'client_id': checklistDetails.client_id,
|
|
626
|
+
'createAt': new Date(),
|
|
627
|
+
'sourceCheckList_id': checklistDetails.sourceCheckList_id,
|
|
628
|
+
'checkListName': checklistDetails.checkListName,
|
|
629
|
+
'fromCheckListName': checklistDetails.checkListName,
|
|
630
|
+
'type': 'checklist',
|
|
631
|
+
'action': checklistDetails.redoStatus?'multiredo': 'redo',
|
|
632
|
+
'storeName': checklistDetails?.storeName?checklistDetails?.storeName:'',
|
|
633
|
+
'store_id': checklistDetails?.store_id?checklistDetails?.store_id:'',
|
|
634
|
+
'userName': checklistDetails.userName,
|
|
635
|
+
'userEmail': checklistDetails.userEmail,
|
|
636
|
+
'createdByEmail': req.user.email,
|
|
637
|
+
'createdBy': req.user.userName,
|
|
638
|
+
'coverage': checklistDetails.coverage,
|
|
639
|
+
'logDetails': {},
|
|
640
|
+
'userType': req.user.userType,
|
|
641
|
+
};
|
|
642
|
+
let urlopensearch = JSON.parse( process.env.OPENSEARCH );
|
|
643
|
+
console.log( 'logData', logData );
|
|
644
|
+
insertOpenSearchData( urlopensearch.traxActivityLog, logData );
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
return res.sendSuccess( 'Question redo successfully' );
|
|
648
|
+
} catch ( e ) {
|
|
649
|
+
logger.error( { function: 'redomultiChecklist', error: e } );
|
|
650
|
+
return res.sendError( e, 500 );
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
458
654
|
|
|
459
655
|
export async function getLogs( req, res ) {
|
|
460
656
|
try {
|