tango-app-api-trax 1.0.0-alpha-task.130

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 (49) hide show
  1. package/.eslintrc.cjs +41 -0
  2. package/README.md +29 -0
  3. package/fir-51e77-firebase-adminsdk-x3sdp-fd902b74ae.json +14 -0
  4. package/index.js +12 -0
  5. package/package.json +43 -0
  6. package/src/controllers/download.controller.js +544 -0
  7. package/src/controllers/gallery.controller.js +457 -0
  8. package/src/controllers/internalTrax.controller.js +989 -0
  9. package/src/controllers/locus.controller.js +214 -0
  10. package/src/controllers/mobileTrax.controller.js +2327 -0
  11. package/src/controllers/teaxFlag.controller.js +2699 -0
  12. package/src/controllers/trax.controller.js +2214 -0
  13. package/src/controllers/traxDashboard.controllers.js +3523 -0
  14. package/src/dtos/dashboardValidation.dtos.js +143 -0
  15. package/src/dtos/downloadValidation.dtos.js +44 -0
  16. package/src/dtos/validation.dtos.js +138 -0
  17. package/src/hbs/login-otp.hbs +944 -0
  18. package/src/routes/download.router.js +23 -0
  19. package/src/routes/gallery.routes.js +28 -0
  20. package/src/routes/internalTraxApi.router.js +19 -0
  21. package/src/routes/locus.router.js +16 -0
  22. package/src/routes/mobileTrax.routes.js +25 -0
  23. package/src/routes/trax.routes.js +24 -0
  24. package/src/routes/traxDashboard.routes.js +59 -0
  25. package/src/routes/traxFlag.router.js +74 -0
  26. package/src/services/app.service.js +10 -0
  27. package/src/services/approver.service.js +20 -0
  28. package/src/services/authentication.service.js +6 -0
  29. package/src/services/checklist.service.js +31 -0
  30. package/src/services/checklistAssign.service.js +31 -0
  31. package/src/services/checklistQuestion.service.js +31 -0
  32. package/src/services/checklistlog.service.js +35 -0
  33. package/src/services/clientRequest.service.js +5 -0
  34. package/src/services/clients.services.js +23 -0
  35. package/src/services/domain.service.js +28 -0
  36. package/src/services/download.services.js +38 -0
  37. package/src/services/group.service.js +22 -0
  38. package/src/services/lenskartEmployeeMapping.service.js +15 -0
  39. package/src/services/locus.service.js +34 -0
  40. package/src/services/otp.service.js +14 -0
  41. package/src/services/processedTaskConfig.service.js +32 -0
  42. package/src/services/processedTaskList.service.js +30 -0
  43. package/src/services/processedchecklist.services.js +36 -0
  44. package/src/services/processedchecklistconfig.services.js +35 -0
  45. package/src/services/store.service.js +31 -0
  46. package/src/services/tagging.service.js +5 -0
  47. package/src/services/ticket.service.js +15 -0
  48. package/src/services/user.service.js +25 -0
  49. package/src/services/userAssignedstores.service.js +10 -0
@@ -0,0 +1,214 @@
1
+ import mongoose from 'mongoose';
2
+ import * as locusorderServices from '../services/locus.service.js';
3
+ import dayjs from 'dayjs';
4
+ import utc from 'dayjs/plugin/utc.js';
5
+ dayjs.extend( utc );
6
+
7
+
8
+ export const updateLocus = async ( req, res ) => {
9
+ try {
10
+ const locusAssignedUser = await locusorderServices.locusUserGetOne();
11
+
12
+ if ( !locusAssignedUser.allowedUsers.includes( req.user.email ) ) {
13
+ return res.status( 403 ).send( 'Forbidden' );
14
+ }
15
+
16
+ if ( !req.body.storeCodes || !req.body?.date ) {
17
+ return res.status( 400 ).send( 'Bad request' );
18
+ }
19
+
20
+ let storeCodes = req.body.storeCodes;
21
+
22
+ const storeCodeArray = storeCodes.split( ',' ).map( ( value ) => value.trim() ).filter( ( value ) => value !== '' );
23
+
24
+ const startOfDay = dayjs( req.body.date ).startOf( 'day' ).format();
25
+
26
+ const endOfDay = dayjs( req.body.date ).endOf( 'day' ).format();
27
+
28
+ if ( !startOfDay || !endOfDay || !storeCodeArray?.length ) {
29
+ return res.status( 400 ).send( 'Bad request' );
30
+ }
31
+
32
+ const invalidStId = [];
33
+
34
+ const existingStId = [];
35
+
36
+
37
+ for ( let index = 0; index < storeCodeArray.length; index++ ) {
38
+ const isRecordExistForDay = await locusorderServices.getOne( { 'ST_Code': { $regex: new RegExp( `^${storeCodeArray[index]}$`, 'i' ) }, 'type': 'inserted', 'date': { $gte: startOfDay, $lte: endOfDay } } );
39
+
40
+ if ( isRecordExistForDay ) {
41
+ existingStId.push( storeCodeArray[index] );
42
+ }
43
+
44
+ if ( !isRecordExistForDay ) {
45
+ let recordToInsert = await locusorderServices.getOne( { 'ST_Code': { $regex: new RegExp( `^${storeCodeArray[index]}$`, 'i' ) }, 'type': 'default' } );
46
+
47
+ if ( !recordToInsert ) {
48
+ invalidStId.push( storeCodeArray[index] );
49
+ }
50
+
51
+ if ( recordToInsert ) {
52
+ delete recordToInsert._doc._id;
53
+
54
+ recordToInsert = {
55
+ ...recordToInsert._doc,
56
+ Task_ID: `${recordToInsert._doc.ST_Code}_${Date.now()}`,
57
+ Service_Type: 'Store visit',
58
+ Customer_Name: recordToInsert._doc.ST_Code,
59
+ Customer_Contact: '9999999999',
60
+ Customer_Address: recordToInsert._doc?.Address_Full,
61
+ City: recordToInsert._doc?.Address_City,
62
+ State: recordToInsert._doc?.Address_State,
63
+ Country: '',
64
+ Customer_Zipcode: recordToInsert._doc?.Address_PIN_Code,
65
+ Latitude: recordToInsert._doc?.Latitude,
66
+ Longitude: recordToInsert._doc?.Longitude,
67
+ Task_Date: dayjs( req.body.date ).format( 'DD-MM-YYYY' ),
68
+ Task_Start_Time: '9:00 AM',
69
+ Task_End_Time: '9:00 PM',
70
+ TAT: '30',
71
+ Payment_Method: '',
72
+ Amount: '',
73
+ Note: '',
74
+ user_ID: recordToInsert._doc?.PS_Locus,
75
+ date: dayjs( req.body.date ).format(),
76
+ type: 'inserted',
77
+ createdBy: req.user.email,
78
+ };
79
+
80
+ await locusorderServices.insert( recordToInsert );
81
+ }
82
+ }
83
+ }
84
+
85
+ let responseMsg = 'Updated successfully';
86
+
87
+ if ( invalidStId?.length && existingStId?.length ) {
88
+ responseMsg = `Invalid ST Code ${invalidStId.join( ', ' )}. ST Code ${existingStId.join( ', ' )} already exist for the date.`;
89
+ } else if ( invalidStId?.length ) {
90
+ responseMsg = `Invalid ST Code ${invalidStId.join( ', ' )}.`;
91
+ } else if ( existingStId?.length ) {
92
+ responseMsg = `ST Code ${existingStId.join( ', ' )} already exist for the date.`;
93
+ }
94
+
95
+ return res.sendSuccess( responseMsg );
96
+ } catch ( error ) {
97
+ console.log( 'error =>', error );
98
+ if ( error.name === 'ValidationError' ) res.sendError( error, 400 );
99
+ else res.sendError( error, 500 );
100
+ }
101
+ };
102
+
103
+ export const getLocus = async ( req, res ) => {
104
+ try {
105
+ if ( !req.body?.date ) {
106
+ return res.status( 400 ).send( 'Bad request' );
107
+ }
108
+
109
+ const startOfDay = dayjs( req.body.date ).startOf( 'day' ).format();
110
+
111
+ const endOfDay = dayjs( req.body.date ).endOf( 'day' ).format();
112
+
113
+ if ( !startOfDay || !endOfDay ) {
114
+ return res.status( 400 ).send( 'Bad request' );
115
+ }
116
+
117
+ const orderList = await locusorderServices.getMany( { type: 'inserted', date: { $gte: startOfDay, $lte: endOfDay } }, { Task_ID: 1, Service_Type: 1, Customer_Name: 1, Customer_Contact: 1, Customer_Address: 1, City: 1, State: 1, Country: 1, Customer_Zipcode: 1, Latitude: 1, Longitude: 1, Task_Date: 1, Task_Start_Time: 1, Task_End_Time: 1, TAT: 1, Payment_Method: 1, Amount: 1, Note: 1, user_ID: 1 } );
118
+
119
+ return res.sendSuccess( orderList );
120
+ } catch ( error ) {
121
+ console.log( 'error =>', error );
122
+ if ( error.name === 'ValidationError' ) res.sendError( error, 400 );
123
+ else res.sendError( error, 500 );
124
+ }
125
+ };
126
+
127
+ export const deleteLocus = async ( req, res ) => {
128
+ try {
129
+ if ( !req?.body?._id ) {
130
+ return res.status( 400 ).send( 'Bad request' );
131
+ }
132
+
133
+ await locusorderServices.deleteOne( { type: 'inserted', _id: new mongoose.Types.ObjectId( req?.body?._id ) } );
134
+
135
+ return res.sendSuccess( 'Deleted successfully' );
136
+ } catch ( error ) {
137
+ console.log( 'error =>', error );
138
+ if ( error.name === 'ValidationError' ) res.sendError( error, 400 );
139
+ else res.sendError( error, 500 );
140
+ }
141
+ };
142
+
143
+ export const updateMaster = async ( req, res ) => {
144
+ try {
145
+ if ( !req.body.length ) {
146
+ return res.status( 400 ).send( 'Bad request' );
147
+ }
148
+
149
+ const headers = [
150
+ 'ST Code', 'Address - Full',
151
+ 'Address - Locality', 'Address - Landmark',
152
+ 'Address - City', 'Address - State',
153
+ 'Address - PIN Code', 'Latitude',
154
+ 'Longitude', 'Region',
155
+ 'Status', 'AOM',
156
+ 'ZM', 'AOM EMP CODE',
157
+ 'Phone number', 'PS Locus',
158
+ ];
159
+
160
+ const data = req.body.map( ( row ) => {
161
+ const obj = {};
162
+ headers.forEach( ( header ) => {
163
+ let value = row[header];
164
+ if ( typeof value === 'string' && value.startsWith( '#' ) ) {
165
+ value = '';
166
+ }
167
+ obj[header.replace( / - /g, '_' ).replace( / /g, '_' ).replace( /-/g, '' )] = value !== undefined && value !== null ? String( value ) : '';
168
+ } );
169
+ obj['type'] = 'default';
170
+ return obj;
171
+ } );
172
+
173
+
174
+ for ( let index = 0; index < data.length; index++ ) {
175
+ const aomData = await locusorderServices.getOneEmployeeMapping( { facilityCode: { $regex: new RegExp( `^${data[index]?.ST_Code}$`, 'i' ) }, mappingType: 'aom' } );
176
+
177
+ if ( aomData ) {
178
+ data[index].AOM = aomData?.aomName;
179
+ data[index].AOM_EMP_CODE = aomData?.employeeId;
180
+ }
181
+
182
+ if ( data[index].ST_Code ) {
183
+ const update = await locusorderServices.upsertOne( { ST_Code: data[index].ST_Code, type: 'default' }, data[index] );
184
+ if ( !update?.upsertedCount && !update?.modifiedCount ) {
185
+ console.log( data[index] );
186
+ }
187
+ }
188
+ }
189
+
190
+ return res.sendSuccess( 'Updated successfully' );
191
+ } catch ( error ) {
192
+ console.log( 'error =>', error );
193
+ if ( error.name === 'ValidationError' ) res.sendError( error, 400 );
194
+ else res.sendError( error, 500 );
195
+ }
196
+ };
197
+
198
+ export const isUserAllowed = async ( req, res ) => {
199
+ try {
200
+ const locusAssignedUser = await locusorderServices.locusUserGetOne();
201
+
202
+ if ( !locusAssignedUser.allowedUsers.includes( req.user.email ) ) {
203
+ return res.sendSuccess( 'UNAUTHORIZED' );
204
+ }
205
+
206
+ return res.sendSuccess( 'AUTHORIZED' );
207
+ } catch ( error ) {
208
+ console.log( 'error =>', error );
209
+ if ( error.name === 'ValidationError' ) res.sendError( error, 400 );
210
+ else res.sendError( error, 500 );
211
+ }
212
+ };
213
+
214
+