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

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-127",
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(),
@@ -3205,6 +3205,42 @@ 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', 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
+ },
3239
+ },
3240
+ ];
3241
+
3242
+ let pendingDetails = await planotaskService.aggregate( taskQuery );
3243
+ console.log( pendingDetails );
3208
3244
  let query = [
3209
3245
  {
3210
3246
  $match: {
@@ -3302,23 +3338,21 @@ export async function planoList( req, res ) {
3302
3338
  as: 'planoTask',
3303
3339
  },
3304
3340
  },
3305
- {
3306
- $addFields: {
3307
- taskIds: { $ifNull: [ { $arrayElemAt: [ '$planoTask.taskIds', 0 ] }, [] ] },
3308
- taskStatus: { $ifNull: [ { $arrayElemAt: [ '$planoTask.taskStatus', 0 ] }, [] ] },
3309
- },
3310
- },
3311
3341
  {
3312
3342
  $lookup: {
3313
3343
  from: 'planotaskcompliances',
3314
- let: { plano: '$_id', taskId: '$taskIds' },
3344
+ let: {
3345
+ plano: '$_id',
3346
+ task: { $ifNull: [ '$taskIds', [] ] },
3347
+ },
3315
3348
  pipeline: [
3316
3349
  {
3317
3350
  $match: {
3318
3351
  $expr: {
3319
3352
  $and: [
3320
3353
  { $eq: [ '$planoId', '$$plano' ] },
3321
- { $in: [ '$taskId', '$$taskId' ] },
3354
+ { $in: [ '$taskId', pendingDetails.map( ( ele ) => ele.taskId ) ] },
3355
+ { $eq: [ '$taskType', 'initial' ] },
3322
3356
  ],
3323
3357
  },
3324
3358
  },
@@ -3326,7 +3360,7 @@ export async function planoList( req, res ) {
3326
3360
  { $sort: { _id: -1 } },
3327
3361
  {
3328
3362
  $group: {
3329
- _id: { type: '$type', planoId: '$planoId' },
3363
+ _id: '$planoId',
3330
3364
  layoutCount: {
3331
3365
  $sum: {
3332
3366
  $cond: {
@@ -3673,12 +3707,12 @@ export async function planoList( req, res ) {
3673
3707
 
3674
3708
  if ( inputData.filter.status.length ) {
3675
3709
  if ( inputData.filter.status.includes( 'taskAssigned' ) ) {
3676
- orQuery.push( { 'planoTask.checklistStatus': { $in: [ 'open', 'inprogress' ] } } );
3710
+ orQuery.push( { 'planoTask.taskStatus.status': { $in: [ 'open', 'inprogress' ] } } );
3677
3711
  }
3678
3712
  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' } ] } );
3713
+ orQuery.push( { $and: [ { 'taskDetails.layoutStatus': 'pending' }, { 'planoTask.taskStatus.type': 'layout' }, { 'planoTask.taskStatus.status': 'submit' } ] } );
3714
+ orQuery.push( { $and: [ { 'taskDetails.fixtureStatus': 'pending' }, { 'planoTask.taskStatus.type': 'fixture' }, { 'planoTask.taskStatus.status': 'submit' } ] } );
3715
+ orQuery.push( { $and: [ { 'taskDetails.vmStatus': 'pending' }, { 'planoTask.taskStatus.type': 'vm' }, { 'planoTask.taskStatus.status': 'submit' } ] } );
3682
3716
  }
3683
3717
  if ( inputData.filter.status.includes( 'complete' ) ) {
3684
3718
  orQuery.push( { 'taskDetails.layoutStatus': 'complete' } );
@@ -3710,53 +3744,17 @@ export async function planoList( req, res ) {
3710
3744
  },
3711
3745
  } );
3712
3746
 
3713
- console.log( JSON.stringify( query ) );
3714
-
3715
3747
  let planoDetails = await planoService.aggregate( query );
3716
3748
 
3717
3749
  if ( !planoDetails[0].data.length ) {
3718
3750
  return res.sendError( 'No data found', 204 );
3719
3751
  }
3720
3752
 
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
3753
  query = [
3757
3754
  {
3758
3755
  $match: {
3759
3756
  taskId: { $in: pendingDetails.map( ( ele ) => ele.taskId ) },
3757
+ taskType: 'initial',
3760
3758
  },
3761
3759
  },
3762
3760
  {
@@ -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 = [
@@ -291,10 +291,18 @@ export async function createTask( req, res ) {
291
291
  taskData.userEmail = userDetails.email;
292
292
  taskData.planoId = planoDetails?._id;
293
293
  for ( let i=0; i<req.body.days; i++ ) {
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: floorDetails[i]._id } );
297
+ taskIdList = taskIdList.map( ( ele ) => ele.taskId );
298
+ await planoTaskService.deleteMany( { planoId: planoDetails?._id, floorId: floorDetails[i]._id } );
299
+ planoProgress = 25;
300
+ await processedService.deleteMany( { _id: taskIdList } );
301
+ }
302
+ await planoService.updateOne( { _id: planoDetails?._id }, { $set: { planoProgress } } );
294
303
  let currDate = dayjs().add( i, '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
+ }