tango-app-api-store-builder 1.0.0-beta-126 → 1.0.0-beta-128

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-store-builder",
3
- "version": "1.0.0-beta-126",
3
+ "version": "1.0.0-beta-128",
4
4
  "description": "storeBuilder",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -220,6 +220,142 @@ export async function getplanoFeedback( req, res ) {
220
220
  {
221
221
  $unwind: { path: '$FixtureData', preserveNullAndEmptyArrays: true },
222
222
  },
223
+ {
224
+ $unwind: { path: '$FixtureData.vmConfig', preserveNullAndEmptyArrays: true },
225
+ },
226
+ {
227
+ $lookup: {
228
+ from: 'planovmdetails',
229
+ let: { 'vmId': '$FixtureData.vmConfig.vmId' },
230
+ pipeline: [
231
+ {
232
+ $match: {
233
+ $expr: {
234
+ $and: [
235
+ { $eq: [ '$_id', '$$vmId' ] },
236
+ ],
237
+ },
238
+ },
239
+ },
240
+ {
241
+ $project: {
242
+ vmName: 1,
243
+ },
244
+ },
245
+ ],
246
+ as: 'vmDetails',
247
+ },
248
+ },
249
+ {
250
+ $unwind: { path: '$vmDetails', preserveNullAndEmptyArrays: true },
251
+ },
252
+ {
253
+ $project: {
254
+ '_id': 1,
255
+ 'answers': 1,
256
+ 'createdAt': 1,
257
+ 'date_iso': 1,
258
+ 'date_string': 1,
259
+ 'fixtureId': 1,
260
+ 'floorId': 1,
261
+ 'planoId': 1,
262
+ 'status': 1,
263
+ 'taskType': 1,
264
+ 'FixtureData': 1,
265
+ 'FixtureData': {
266
+ _id: '$FixtureData._id',
267
+ clientId: '$FixtureData.clientId',
268
+ clientId: '$FixtureData.clientId',
269
+ fixtureCapacity: '$FixtureData.fixtureCapacity',
270
+ fixtureCategory: '$FixtureData.fixtureCategory',
271
+ fixtureLength: '$FixtureData.fixtureLength',
272
+ fixtureLibraryId: '$FixtureData.fixtureLibraryId',
273
+ fixtureName: '$FixtureData.fixtureName',
274
+ fixtureStaticLength: '$FixtureData.fixtureStaticLength',
275
+ fixtureStaticWidth: '$FixtureData.fixtureStaticWidth',
276
+ fixtureType: '$FixtureData.fixtureType',
277
+ fixtureWidth: '$FixtureData.fixtureWidth',
278
+ footer: '$FixtureData.footer',
279
+ header: '$FixtureData.header',
280
+ isBodyEnabled: '$FixtureData.isBodyEnabled',
281
+ productBrandName: '$FixtureData.productBrandName',
282
+ productCategory: '$FixtureData.productCategory',
283
+ productResolutionLevel: '$FixtureData.productResolutionLevel',
284
+ productSubCategory: '$FixtureData.productSubCategory',
285
+ shelfConfig: '$FixtureData.shelfConfig',
286
+ status: '$FixtureData.status',
287
+ templateIndex: '$FixtureData.templateIndex',
288
+ shelfConfig: '$FixtureData.shelfConfig',
289
+ vmConfig: {
290
+ vmName: '$vmDetails.vmName',
291
+ endYPosition: '$FixtureData.vmConfig.endYPosition',
292
+ startYPosition: '$FixtureData.vmConfig.startYPosition',
293
+ vmId: '$FixtureData.vmConfig.vmId',
294
+ xZone: '$FixtureData.vmConfig.xZone',
295
+ yZone: '$FixtureData.vmConfig.yZone',
296
+ position: '$FixtureData.vmConfig.position',
297
+ },
298
+ },
299
+ },
300
+ },
301
+
302
+ {
303
+ $group: {
304
+ _id: '$_id',
305
+ answers: { $first: '$answers' },
306
+ createdAt: { $first: '$createdAt' },
307
+ date_iso: { $first: '$date_iso' },
308
+ date_string: { $first: '$date_string' },
309
+ fixtureId: { $first: '$fixtureId' },
310
+ floorId: { $first: '$floorId' },
311
+ planoId: { $first: '$planoId' },
312
+ status: { $first: '$status' },
313
+ taskType: { $first: '$taskType' },
314
+ baseFixtureData: { $first: '$FixtureData' },
315
+ collectedVmConfigs: {
316
+ $push: '$FixtureData.vmConfig',
317
+ },
318
+ },
319
+ },
320
+ {
321
+ $project: {
322
+ _id: 1,
323
+ answers: 1,
324
+ createdAt: 1,
325
+ date_iso: 1,
326
+ date_string: 1,
327
+ fixtureId: 1,
328
+ floorId: 1,
329
+ planoId: 1,
330
+ status: 1,
331
+ taskType: 1,
332
+ FixtureData: {
333
+ $mergeObjects: [
334
+ '$baseFixtureData',
335
+ {
336
+ vmConfig: {
337
+ $reduce: {
338
+ input: '$collectedVmConfigs',
339
+ initialValue: [],
340
+ in: {
341
+ $cond: [
342
+ { $isArray: '$$this' },
343
+ { $concatArrays: [ '$$value', '$$this' ] },
344
+ { $concatArrays: [ '$$value', [ '$$this' ] ] },
345
+ ],
346
+ },
347
+ },
348
+ },
349
+ },
350
+ ],
351
+ },
352
+ },
353
+ },
354
+ {
355
+ $sort: { _id: -1 },
356
+ },
357
+
358
+
223
359
  );
224
360
 
225
361
 
@@ -217,10 +217,10 @@ export async function getFixture( req, res ) {
217
217
  if ( fixtureDetails ) {
218
218
  let planoStatus = await planoService.findOne( { planoId: fixtureDetails.planoId }, { status: 1 } );
219
219
  if ( planoStatus ) {
220
- fixtureLibDetails.status = planoStatus.status == 'complete' ? 'Active' :'Inactive';
220
+ fixtureLibDetails.status = planoStatus.status == 'complete' ? 'active' :'inactive';
221
221
  }
222
222
  } else {
223
- fixtureLibDetails.status = fixtureLibDetails.status == 'draft' ? 'Draft' : 'Inactive';
223
+ fixtureLibDetails.status = fixtureLibDetails.status == 'draft' ? 'draft' : 'inactive';
224
224
  }
225
225
  fixtureLibDetails = {
226
226
  ...fixtureLibDetails.toObject(),
@@ -1329,16 +1329,18 @@ export async function getVmDetails( req, res ) {
1329
1329
  getVmDetails = getVmDetails.toObject();
1330
1330
  getVmDetails.templateCount = 0;
1331
1331
  let templateDetails = await fixtureTemplateService.find( { 'vmConfig.vmId': { $in: req.query.vmId } } );
1332
- if ( templateDetails.length && getVmDetails.status != 'draft' ) {
1333
- getVmDetails.templateCount = templateDetails.length;
1332
+ if ( getVmDetails.status != 'draft' ) {
1334
1333
  getVmDetails.status = 'inactive';
1335
- let fixtureDetails = await storeFixtureService.find( { 'vmConfig.vmId': { $in: req.query.vmId } }, { planoId: 1 } );
1336
- if ( fixtureDetails.length ) {
1337
- let planoList = fixtureDetails.map( ( ele ) => ele.planoId );
1338
- let planoDetails = await planoService.find( { _id: { $in: planoList } }, { status: 1 } );
1339
- planoDetails = planoDetails.map( ( ele ) => ele.status );
1340
- if ( planoDetails.includes( 'completed' ) ) {
1341
- getVmDetails.status = 'active';
1334
+ if ( templateDetails.length ) {
1335
+ getVmDetails.templateCount = templateDetails.length;
1336
+ let fixtureDetails = await storeFixtureService.find( { 'vmConfig.vmId': { $in: req.query.vmId } }, { planoId: 1 } );
1337
+ if ( fixtureDetails.length ) {
1338
+ let planoList = fixtureDetails.map( ( ele ) => ele.planoId );
1339
+ let planoDetails = await planoService.find( { _id: { $in: planoList } }, { status: 1 } );
1340
+ planoDetails = planoDetails.map( ( ele ) => ele.status );
1341
+ if ( planoDetails.includes( 'completed' ) ) {
1342
+ getVmDetails.status = 'active';
1343
+ }
1342
1344
  }
1343
1345
  }
1344
1346
  }
@@ -3205,6 +3205,43 @@ export async function planoList( req, res ) {
3205
3205
  let limit = inputData?.limit || 10;
3206
3206
  let page = inputData?.offset - 1 || 0;
3207
3207
  let skip = limit * page;
3208
+ let planoList = await planoService.find( { clientId: req.body.clientId }, { _id: 1 } );
3209
+ let idList = planoList?.map( ( ele ) => new mongoose.Types.ObjectId( ele._id ) );
3210
+ let taskQuery = [
3211
+ {
3212
+ $match: {
3213
+ planoId: { $in: idList },
3214
+ isPlano: true,
3215
+ date_iso: { $lte: new Date( dayjs().format( 'YYYY-MM-DD' ) ) },
3216
+ },
3217
+ },
3218
+ {
3219
+ $group: {
3220
+ _id: { store: '$storeName', floorId: '$floorId', type: '$planoType' },
3221
+ planoId: { $last: '$planoId' },
3222
+ checklistStatus: { $last: '$checklistStatus' },
3223
+ taskId: { $last: '$_id' },
3224
+ },
3225
+ },
3226
+ {
3227
+ $match: {
3228
+ checklistStatus: 'submit',
3229
+ },
3230
+ },
3231
+ {
3232
+ $project: {
3233
+ _id: 0,
3234
+ type: '$_id.type',
3235
+ planoId: 1,
3236
+ checklistStatus: 1,
3237
+ taskId: 1,
3238
+ floorId: '$_id.floorId',
3239
+ },
3240
+ },
3241
+ ];
3242
+
3243
+ let pendingDetails = await planotaskService.aggregate( taskQuery );
3244
+ console.log( pendingDetails );
3208
3245
  let query = [
3209
3246
  {
3210
3247
  $match: {
@@ -3279,7 +3316,7 @@ export async function planoList( req, res ) {
3279
3316
  },
3280
3317
  {
3281
3318
  $group: {
3282
- _id: '$planoType',
3319
+ _id: { type: '$planoType', floorId: '$floorId' },
3283
3320
  dateString: { $last: '$date_string' },
3284
3321
  checklistStatus: { $last: '$checklistStatus' },
3285
3322
  taskId: { $last: '$_id' },
@@ -3290,9 +3327,10 @@ export async function planoList( req, res ) {
3290
3327
  _id: null,
3291
3328
  taskStatus: {
3292
3329
  $push: {
3293
- type: '$_id',
3330
+ type: '$_id.type',
3294
3331
  status: '$checklistStatus',
3295
3332
  date: '$dateString',
3333
+ floorId: '$_id.floorId',
3296
3334
  },
3297
3335
  },
3298
3336
  taskIds: { $push: '$taskId' },
@@ -3302,23 +3340,21 @@ export async function planoList( req, res ) {
3302
3340
  as: 'planoTask',
3303
3341
  },
3304
3342
  },
3305
- {
3306
- $addFields: {
3307
- taskIds: { $ifNull: [ { $arrayElemAt: [ '$planoTask.taskIds', 0 ] }, [] ] },
3308
- taskStatus: { $ifNull: [ { $arrayElemAt: [ '$planoTask.taskStatus', 0 ] }, [] ] },
3309
- },
3310
- },
3311
3343
  {
3312
3344
  $lookup: {
3313
3345
  from: 'planotaskcompliances',
3314
- let: { plano: '$_id', taskId: '$taskIds' },
3346
+ let: {
3347
+ plano: '$_id',
3348
+ task: { $ifNull: [ '$taskIds', [] ] },
3349
+ },
3315
3350
  pipeline: [
3316
3351
  {
3317
3352
  $match: {
3318
3353
  $expr: {
3319
3354
  $and: [
3320
3355
  { $eq: [ '$planoId', '$$plano' ] },
3321
- { $in: [ '$taskId', '$$taskId' ] },
3356
+ { $in: [ '$taskId', pendingDetails.map( ( ele ) => ele.taskId ) ] },
3357
+ { $eq: [ '$taskType', 'initial' ] },
3322
3358
  ],
3323
3359
  },
3324
3360
  },
@@ -3326,7 +3362,7 @@ export async function planoList( req, res ) {
3326
3362
  { $sort: { _id: -1 } },
3327
3363
  {
3328
3364
  $group: {
3329
- _id: { type: '$type', planoId: '$planoId' },
3365
+ _id: '$floorId',
3330
3366
  layoutCount: {
3331
3367
  $sum: {
3332
3368
  $cond: {
@@ -3505,6 +3541,35 @@ export async function planoList( req, res ) {
3505
3541
  },
3506
3542
  },
3507
3543
  },
3544
+ {
3545
+ $group: {
3546
+ _id: null,
3547
+ layoutCount: { $sum: '$layoutCount' },
3548
+ fixtureCount: { $sum: '$fixtureCount' },
3549
+ vmCount: { $sum: '$vmCount' },
3550
+ completeLayout: {
3551
+ $sum: {
3552
+ $cond: {
3553
+ if: {
3554
+ $and: [
3555
+ { '$gt': [ '$layoutCount', 0 ] },
3556
+ { '$gt': [ '$layoutPending', 0 ] },
3557
+ { '$gt': [ '$fixtureCount', 0 ] },
3558
+ { '$gt': [ '$fixturePending', 0 ] },
3559
+ { '$gt': [ '$vmCount', 0 ] },
3560
+ { '$gt': [ '$fixturePending', 0 ] },
3561
+ ],
3562
+ },
3563
+ then: 1,
3564
+ else: 0,
3565
+ },
3566
+ },
3567
+ },
3568
+ layoutPending: { $sum: '$layoutPending' },
3569
+ fixturePending: { $sum: '$fixturePending' },
3570
+ vmPending: { $sum: '$vmPending' },
3571
+ },
3572
+ },
3508
3573
  {
3509
3574
  $project: {
3510
3575
  _id: 0,
@@ -3602,6 +3667,7 @@ export async function planoList( req, res ) {
3602
3667
  layoutCount: 1,
3603
3668
  fixtureCount: 1,
3604
3669
  vmCount: 1,
3670
+ completeLayout: 1,
3605
3671
  },
3606
3672
  },
3607
3673
  ],
@@ -3673,12 +3739,12 @@ export async function planoList( req, res ) {
3673
3739
 
3674
3740
  if ( inputData.filter.status.length ) {
3675
3741
  if ( inputData.filter.status.includes( 'taskAssigned' ) ) {
3676
- orQuery.push( { 'planoTask.checklistStatus': { $in: [ 'open', 'inprogress' ] } } );
3742
+ orQuery.push( { 'planoTask.taskStatus.status': { $in: [ 'open', 'inprogress' ] } } );
3677
3743
  }
3678
3744
  if ( inputData.filter.status.includes( 'reviewPending' ) ) {
3679
- orQuery.push( { $and: [ { 'taskDetails.layoutStatus': 'pending' }, { 'planoTask._id': 'layout' }, { 'planoTask.checklistStatus': 'submit' } ] } );
3680
- orQuery.push( { $and: [ { 'taskDetails.fixtureStatus': 'pending' }, { 'planoTask._id': 'fixture' }, { 'planoTask.checklistStatus': 'submit' } ] } );
3681
- orQuery.push( { $and: [ { 'taskDetails.vmStatus': 'pending' }, { 'planoTask._id': 'vm' }, { 'planoTask.checklistStatus': 'submit' } ] } );
3745
+ orQuery.push( { $and: [ { 'taskDetails.layoutStatus': 'pending' }, { 'planoTask.taskStatus.type': 'layout' }, { 'planoTask.taskStatus.status': 'submit' } ] } );
3746
+ orQuery.push( { $and: [ { 'taskDetails.fixtureStatus': 'pending' }, { 'planoTask.taskStatus.type': 'fixture' }, { 'planoTask.taskStatus.status': 'submit' } ] } );
3747
+ orQuery.push( { $and: [ { 'taskDetails.vmStatus': 'pending' }, { 'planoTask.taskStatus.type': 'vm' }, { 'planoTask.taskStatus.status': 'submit' } ] } );
3682
3748
  }
3683
3749
  if ( inputData.filter.status.includes( 'complete' ) ) {
3684
3750
  orQuery.push( { 'taskDetails.layoutStatus': 'complete' } );
@@ -3710,53 +3776,17 @@ export async function planoList( req, res ) {
3710
3776
  },
3711
3777
  } );
3712
3778
 
3713
- console.log( JSON.stringify( query ) );
3714
-
3715
3779
  let planoDetails = await planoService.aggregate( query );
3716
3780
 
3717
3781
  if ( !planoDetails[0].data.length ) {
3718
3782
  return res.sendError( 'No data found', 204 );
3719
3783
  }
3720
3784
 
3721
- let planoList = await planoService.find( { clientId: req.body.clientId }, { _id: 1 } );
3722
- let idList = planoList?.map( ( ele ) => new mongoose.Types.ObjectId( ele._id ) );
3723
- let taskQuery = [
3724
- {
3725
- $match: {
3726
- planoId: { $in: idList },
3727
- isPlano: true,
3728
- date_iso: { $lte: new Date( dayjs().format( 'YYYY-MM-DD' ) ) },
3729
- },
3730
- },
3731
- {
3732
- $group: {
3733
- _id: { store: '$storeName', type: '$planoType' },
3734
- planoId: { $last: '$planoId' },
3735
- checklistStatus: { $last: '$checklistStatus' },
3736
- taskId: { $last: '$_id' },
3737
- },
3738
- },
3739
- {
3740
- $match: {
3741
- checklistStatus: 'submit',
3742
- },
3743
- },
3744
- {
3745
- $project: {
3746
- _id: 0,
3747
- type: '$_id.type',
3748
- planoId: 1,
3749
- checklistStatus: 1,
3750
- taskId: 1,
3751
- },
3752
- },
3753
- ];
3754
-
3755
- let pendingDetails = await planotaskService.aggregate( taskQuery );
3756
3785
  query = [
3757
3786
  {
3758
3787
  $match: {
3759
3788
  taskId: { $in: pendingDetails.map( ( ele ) => ele.taskId ) },
3789
+ taskType: 'initial',
3760
3790
  },
3761
3791
  },
3762
3792
  {
@@ -260,7 +260,7 @@ export async function createTask( req, res ) {
260
260
  let getUserEmail = req.body.stores.find( ( ele ) => ele.store.toLowerCase() == store.storeName.toLowerCase() );
261
261
  let planoDetails = await planoService.findOne( { storeName: store.storeName } );
262
262
  if ( planoDetails ) {
263
- let floorDetails = await floorService.find( { planoId: planoDetails._id }, { _id: 1, floorName: 1 } );
263
+ let floorDetails = await floorService.find( { planoId: planoDetails._id, ...( req.body?.floorId ) ? { _id: req.body?.floorId }:{} }, { _id: 1, floorName: 1 } );
264
264
  for ( let i=0; i<floorDetails.length; i++ ) {
265
265
  if ( getUserEmail ) {
266
266
  let query = [
@@ -290,11 +290,19 @@ export async function createTask( req, res ) {
290
290
  taskData.userName = userDetails.userName;
291
291
  taskData.userEmail = userDetails.email;
292
292
  taskData.planoId = planoDetails?._id;
293
- for ( let i=0; i<req.body.days; i++ ) {
294
- let currDate = dayjs().add( i, 'day' );
293
+ for ( let j=0; j<req.body.days; j++ ) {
294
+ let planoProgress = req.body.checkListName == 'Fixture Verification' ? 50 : req.body.checkListName == 'VM Verification' ? 75 : 25;
295
+ if ( req.body?.checkListName && req.body.checkListName == 'Layout Verification' ) {
296
+ let taskIdList = await planoTaskService.find( { planoId: planoDetails?._id, floorId: taskData.floorId } );
297
+ taskIdList = taskIdList.map( ( ele ) => ele.taskId );
298
+ await planoTaskService.deleteMany( { planoId: planoDetails?._id, floorId: taskData.floorId } );
299
+ planoProgress = 25;
300
+ await processedService.deleteMany( { _id: taskIdList } );
301
+ }
302
+ await planoService.updateOne( { _id: planoDetails?._id }, { $set: { planoProgress } } );
303
+ let currDate = dayjs().add( j, 'day' );
295
304
  let insertData = { ...taskData, date_string: currDate.format( 'YYYY-MM-DD' ), date_iso: new Date( currDate.format( 'YYYY-MM-DD' ) ), scheduleStartTime_iso: dayjs.utc( `${currDate.format( 'YYYY-MM-DD' )} 12:00 AM`, 'YYYY-MM-DD hh:mm A' ).format() };
296
- let response = await processedService.updateOne( { date_string: currDate.format( 'YYYY-MM-DD' ), store_id: insertData.store_id, userEmail: insertData.userEmail, planoId: insertData.planoId, sourceCheckList_id: task._id, ...( taskData?.floorId ) ? { floorId: taskData.floorId }:{} }, insertData );
297
- console.log( response );
305
+ await processedService.updateOne( { date_string: currDate.format( 'YYYY-MM-DD' ), store_id: insertData.store_id, userEmail: insertData.userEmail, planoId: insertData.planoId, sourceCheckList_id: task._id, ...( taskData?.floorId ) ? { floorId: taskData.floorId }:{} }, insertData );
298
306
  }
299
307
  }
300
308
  }
@@ -26,3 +26,7 @@ export async function count( data ) {
26
26
  export async function aggregate( query ) {
27
27
  return model.planoTaskCompliance.aggregate( query );
28
28
  }
29
+
30
+ export async function deleteMany( query ) {
31
+ return model.planoTaskCompliance.deleteMany( query );
32
+ }