tango-app-api-store-builder 1.0.0-beta-92 → 1.0.0-beta-94

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.
@@ -26,6 +26,10 @@ import path from 'path';
26
26
  const __filename = fileURLToPath( import.meta.url );
27
27
  const __dirname = path.dirname( __filename );
28
28
 
29
+ import dayjs from 'dayjs';
30
+ import timeZone from 'dayjs/plugin/timezone.js';
31
+ dayjs.extend( timeZone );
32
+
29
33
 
30
34
  export async function getStoreNames( req, res ) {
31
35
  try {
@@ -4430,7 +4434,19 @@ export async function updateCrestPlanogram( req, res ) {
4430
4434
  }
4431
4435
  };
4432
4436
 
4433
- let storeList = await storeService.find( { ...( req?.body?.storeName ) ? { storeName: req?.body?.storeName } : {}, clientId: '11' } );
4437
+ if ( !req?.body?.storeName ) {
4438
+ return res.sendError( 'No store supplied', 200 );
4439
+ }
4440
+
4441
+ let storeQuery = {
4442
+ clientId: '11',
4443
+ $and: [
4444
+ { storeName: req.body.storeName },
4445
+ { storeName: { $nin: [ 'LKST98', 'LKST1193' ] } },
4446
+ ],
4447
+ };
4448
+
4449
+ let storeList = await storeService.find( storeQuery );
4434
4450
 
4435
4451
  const constantFixtureLength = 1220;
4436
4452
  const constantDetailedFixtureLength = 1220;
@@ -4456,7 +4472,7 @@ export async function updateCrestPlanogram( req, res ) {
4456
4472
  if ( existingPlanogram ) {
4457
4473
  const checkTaskSubmitted = await planoTaskService.findOne( { planoId: existingPlanogram.toObject()._id } );
4458
4474
 
4459
- const checkTaskCreated = await processedTaskService.findOne( { storeName: storeData.storeName, date_iso: { $gte: new Date( ), $lte: new Date( ) }, isPlano: true } );
4475
+ const checkTaskCreated = await processedTaskService.findOne( { storeName: storeData.storeName, date_string: dayjs().format( 'YYYY-MM-DD' ), isPlano: true } );
4460
4476
 
4461
4477
  if ( checkTaskSubmitted || checkTaskCreated ) {
4462
4478
  continue;
@@ -4465,7 +4481,7 @@ export async function updateCrestPlanogram( req, res ) {
4465
4481
 
4466
4482
 
4467
4483
  if ( existingPlanogram?.toObject()?._id && mongoose.Types.ObjectId.isValid( existingPlanogram?.toObject()?._id ) ) {
4468
- await Promise.all( [ planoService.deleteOne( { _id: existingPlanogram?.toObject()?._id } ), storeBuilderService.deleteOne( { planoId: existingPlanogram?.toObject()?._id } ),
4484
+ await Promise.all( [ planoService.deleteOne( { _id: existingPlanogram?.toObject()?._id } ), storeBuilderService.deleteMany( { planoId: existingPlanogram?.toObject()?._id } ),
4469
4485
  storeFixtureService.deleteMany( { planoId: existingPlanogram?.toObject()?._id } ), fixtureShelfService.deleteMany( { planoId: existingPlanogram?.toObject()?._id } ),
4470
4486
  planoMappingService.deleteMany( { planoId: existingPlanogram?.toObject()?._id } ),
4471
4487
  ] );
@@ -4490,880 +4506,928 @@ export async function updateCrestPlanogram( req, res ) {
4490
4506
  const insertedPlano = await planoService.upsertOne( { storeName: storeData.storeName }, planoInsertData );
4491
4507
  const planoDoc = insertedPlano.toObject();
4492
4508
 
4493
- const leftWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'LEFT WALL' );
4494
- const leftFixtures = leftWall.flatMap( ( wall ) => wall.fixtures );
4495
- const rightWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'RIGHT WALL' );
4496
- const rightFixtures = rightWall.flatMap( ( wall ) => wall.fixtures );
4497
- const backWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'RIGHT VERTICAL WALL' );
4498
- const backFixtures = backWall.flatMap( ( wall ) => wall.fixtures );
4499
- const floorFixtures = storeData.data.result.filter(
4500
- ( entry ) => entry['main'] === 'Euro Center' || entry['main'] === 'Euro Center Dr',
4501
- );
4509
+ const floors = new Set();
4502
4510
 
4503
- const leftXDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
4504
- const leftXDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
4511
+ for ( const item of storeData.data.result ) {
4512
+ if ( item.floor ) {
4513
+ floors.add( item.floor );
4514
+ }
4505
4515
 
4506
- const leftYDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantFixtureWidth / mmToFeet ) ) ) : 0;
4507
- const leftYDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantDetailedFixtureWidth / mmToFeet ) ) ) : 0;
4516
+ if ( Array.isArray( item.fixtures ) ) {
4517
+ for ( const fixture of item.fixtures ) {
4518
+ if ( fixture.floor ) {
4519
+ floors.add( fixture.floor );
4520
+ }
4521
+ }
4522
+ }
4523
+ }
4508
4524
 
4509
- const rightXDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
4510
- const rightXDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
4525
+ const floorArray = Array.from( floors );
4511
4526
 
4512
- const rightYDistanceFeet = rightFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
4513
- const rightYDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( constantDetailedFixtureWidth / mmToFeet ) ): 0;
4527
+ let isFloorKeyExist = true;
4514
4528
 
4515
- const maxFixturesPerRow = floorFixtures.length/2;
4516
- const totalRows = 2;
4529
+ if ( !floorArray.length ) {
4530
+ isFloorKeyExist = false;
4531
+ floorArray.push( 'GROUND' );
4532
+ }
4517
4533
 
4518
- const floorXDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantFixtureLength / mmToFeet ) ) ) : 0;
4519
- const floorXDetailedDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) ): 0;
4534
+ for ( let floorIndex = 0; floorIndex < floorArray.length; floorIndex++ ) {
4535
+ const leftWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'LEFT WALL' );
4536
+ let leftFixtures = leftWall.flatMap( ( wall ) => wall.fixtures );
4537
+ if ( isFloorKeyExist ) {
4538
+ leftFixtures = leftFixtures.filter( ( fixture ) => fixture.floor === floorArray[floorIndex] );
4539
+ }
4540
+ const rightWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'RIGHT WALL' );
4541
+ let rightFixtures = rightWall.flatMap( ( wall ) => wall.fixtures );
4542
+ if ( isFloorKeyExist ) {
4543
+ rightFixtures = rightFixtures.filter( ( fixture ) => fixture.floor === floorArray[floorIndex] );
4544
+ }
4545
+ const backWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'RIGHT VERTICAL WALL' );
4546
+ let backFixtures = backWall.flatMap( ( wall ) => wall.fixtures );
4547
+ if ( isFloorKeyExist ) {
4548
+ backFixtures = backFixtures.filter( ( fixture ) => fixture.floor === floorArray[floorIndex] );
4549
+ }
4550
+ let floorFixtures = storeData.data.result.filter(
4551
+ ( entry ) => entry['main'] === 'Euro Center' || entry['main'] === 'Euro Center Dr',
4552
+ );
4553
+ if ( isFloorKeyExist ) {
4554
+ floorFixtures = floorFixtures.filter( ( fixture ) => fixture.floor === floorArray[floorIndex] );
4555
+ }
4520
4556
 
4521
- const floorYDistanceFeet = floorFixtures.length ? roundToTwo( ( 2 * ( constantFixtureWidth/ mmToFeet ) ) ): 0;
4522
- const floorYDetailedDistanceFeet = floorFixtures.length ? roundToTwo( 2 * ( constantDetailedFixtureWidth/mmToFeet ) ): 0;
4557
+ const leftXDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
4558
+ const leftXDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
4523
4559
 
4524
- const backXDistanceFeet = backFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
4525
- const backXDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( constantDetailedFixtureLength / mmToFeet ) ) : 0;
4560
+ const leftYDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantFixtureWidth / mmToFeet ) ) ) : 0;
4561
+ const leftYDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantDetailedFixtureWidth / mmToFeet ) ) ) : 0;
4526
4562
 
4527
- const backYDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantFixtureLength / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantFixtureWidth )/mmToFeet ) ) ) : 0;
4528
- const backYDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantDetailedFixtureWidth / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth )/mmToFeet ) ) ): 0;
4563
+ const rightXDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
4564
+ const rightXDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
4529
4565
 
4530
- const maxXDistance = Math.max( leftXDistanceFeet, rightXDistanceFeet, floorXDistanceFeet );
4531
- const maxXDetailedDistance = Math.max( leftXDetailedDistanceFeet, rightXDetailedDistanceFeet, floorXDetailedDistanceFeet );
4566
+ const rightYDistanceFeet = rightFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
4567
+ const rightYDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( constantDetailedFixtureWidth / mmToFeet ) ): 0;
4532
4568
 
4533
- const maxYDistance = Math.max( floorYDistanceFeet, backYDistanceFeet );
4534
- const maxYDetailedDistance = Math.max( floorYDetailedDistanceFeet, backYDetailedDistanceFeet );
4569
+ const maxFixturesPerRow = floorFixtures.length/2;
4570
+ const totalRows = 2;
4535
4571
 
4536
- const finalXDistance = roundToTwo( ( maxXDistance < ( backXDistanceFeet + floorXDistanceFeet )? ( ( backXDistanceFeet + floorXDistanceFeet ) + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDistance + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : maxXDistance ) );
4537
- const finalXDetailedDistance = roundToTwo( ( maxXDetailedDistance < ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet )? ( ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDetailedDistance + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : maxXDetailedDistance ) );
4572
+ const floorXDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantFixtureLength / mmToFeet ) ) ) : 0;
4573
+ const floorXDetailedDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) ): 0;
4538
4574
 
4539
- const finalYDistance = roundToTwo( ( maxYDistance < ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) ? ( ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) + ( ( 2 * constantFixtureWidth )/mmToFeet ) ) : ( maxYDistance + ( ( constantFixtureWidth )/mmToFeet ) ) ) );
4540
- const finalYDetailedDistance = roundToTwo( ( maxYDetailedDistance < ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) ? ( ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureWidth )/mmToFeet ) ) : ( maxYDetailedDistance + ( ( constantDetailedFixtureWidth )/mmToFeet ) ) ) );
4575
+ const floorYDistanceFeet = floorFixtures.length ? roundToTwo( ( 2 * ( constantFixtureWidth/ mmToFeet ) ) ): 0;
4576
+ const floorYDetailedDistanceFeet = floorFixtures.length ? roundToTwo( 2 * ( constantDetailedFixtureWidth/mmToFeet ) ): 0;
4541
4577
 
4578
+ const backXDistanceFeet = backFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
4579
+ const backXDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( constantDetailedFixtureLength / mmToFeet ) ) : 0;
4542
4580
 
4543
- const floorInsertData = {
4544
- storeName: planoDoc.storeName,
4545
- storeId: planoDoc.storeId,
4546
- layoutName: `${planoDoc.storeName} - Layout`,
4547
- clientId: '11',
4548
- floorNumber: 1,
4549
- floorName: 'floor 1',
4550
- layoutPolygon: [
4551
- {
4552
- elementType: 'wall',
4553
- distance: finalXDistance,
4554
- unit: 'ft',
4555
- direction: 'right',
4556
- angle: 90,
4557
- elementNumber: 1,
4558
- detailedDistance: finalXDetailedDistance,
4559
- },
4560
- {
4561
- elementType: 'wall',
4562
- distance: finalYDistance,
4563
- unit: 'ft',
4564
- direction: 'down',
4565
- angle: 90,
4566
- elementNumber: 2,
4567
- detailedDistance: finalYDetailedDistance,
4568
- },
4569
- {
4570
- elementType: 'wall',
4571
- distance: finalXDistance,
4572
- unit: 'ft',
4573
- direction: 'left',
4574
- angle: 90,
4575
- elementNumber: 3,
4576
- detailedDistance: finalXDetailedDistance,
4577
- },
4578
- {
4579
- elementType: 'wall',
4580
- distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
4581
- unit: 'ft',
4582
- direction: 'up',
4583
- angle: 90,
4584
- elementNumber: 4,
4585
- detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
4586
- },
4587
- {
4588
- elementType: 'entrance',
4589
- distance: roundToTwo( ( ( finalYDistance * 20 ) / 100 ) ),
4590
- unit: 'ft',
4591
- direction: 'up',
4592
- angle: 90,
4593
- elementNumber: 1,
4594
- detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 30 ) / 100 ) ),
4595
- },
4596
- {
4597
- elementType: 'wall',
4598
- distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
4599
- unit: 'ft',
4600
- direction: 'up',
4601
- angle: 90,
4602
- elementNumber: 5,
4603
- detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
4604
- },
4605
- ],
4606
- createdBy: new mongoose.Types.ObjectId( '66a78cd82734f4f857cd6db6' ),
4607
- createdByName: 'Bejan',
4608
- createdByEmail: 'bejan@tangotech.co.in',
4609
- status: 'completed',
4610
- planoId: planoDoc._id,
4611
- };
4581
+ const backYDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantFixtureLength / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantFixtureWidth )/mmToFeet ) ) ) : 0;
4582
+ const backYDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantDetailedFixtureWidth / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth )/mmToFeet ) ) ): 0;
4612
4583
 
4613
- const layoutDoc = await storeBuilderService.upsertOne( { planoId: planoDoc._id }, floorInsertData );
4584
+ const maxXDistance = Math.max( leftXDistanceFeet, rightXDistanceFeet, floorXDistanceFeet );
4585
+ const maxXDetailedDistance = Math.max( leftXDetailedDistanceFeet, rightXDetailedDistanceFeet, floorXDetailedDistanceFeet );
4614
4586
 
4615
- let fixtureCounter = 1;
4587
+ const maxYDistance = Math.max( floorYDistanceFeet, backYDistanceFeet );
4588
+ const maxYDetailedDistance = Math.max( floorYDetailedDistanceFeet, backYDetailedDistanceFeet );
4616
4589
 
4617
- const leftFixturePromises = leftFixtures.map( async ( fixture, index ) => {
4618
- const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
4619
- if ( !fixtureConfig ) return;
4620
- const fixtureConfigDoc = fixtureConfig.toObject();
4590
+ const finalXDistance = roundToTwo( ( maxXDistance < ( backXDistanceFeet + floorXDistanceFeet )? ( ( backXDistanceFeet + floorXDistanceFeet ) + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDistance + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : maxXDistance ) );
4591
+ const finalXDetailedDistance = roundToTwo( ( maxXDetailedDistance < ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet )? ( ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDetailedDistance + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : maxXDetailedDistance ) );
4621
4592
 
4622
- const fixtureData = {
4623
- 'clientId': layoutDoc.clientId,
4624
- 'storeName': layoutDoc.storeName,
4625
- 'storeId': layoutDoc.storeId,
4626
- 'planoId': layoutDoc.planoId,
4627
- 'floorId': layoutDoc._id,
4628
- 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
4629
- 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
4630
- 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4631
- 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4632
- 'fixtureCode': fixtureConfigDoc?.fixtureCode,
4633
- 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
4634
- 'fixtureType': 'wall',
4635
- 'fixtureHeight': {
4636
- 'value': 0,
4637
- 'unit': 'mm',
4638
- },
4639
- 'fixtureLength': {
4640
- 'value': constantFixtureLength,
4641
- 'unit': 'mm',
4642
- },
4643
- 'fixtureWidth': {
4644
- 'value': constantFixtureWidth,
4645
- 'unit': 'mm',
4646
- },
4647
- 'associatedElementType': 'wall',
4648
- 'associatedElementNumber': 1,
4649
- 'relativePosition': {
4650
- 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
4651
- 'y': 0,
4652
- 'unit': 'ft',
4653
- },
4654
- 'fixtureNumber': fixtureCounter,
4655
- 'detailedFixtureLength': {
4656
- 'value': constantDetailedFixtureLength,
4657
- 'unit': 'mm',
4658
- },
4659
- 'detailedFixtureWidth': {
4660
- 'value': constantDetailedFixtureWidth,
4661
- 'unit': 'mm',
4662
- },
4663
- 'relativeDetailedPosition': {
4664
- 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
4665
- 'y': 0,
4666
- 'unit': 'ft',
4667
- },
4668
- 'productResolutionLevel': 'L2',
4669
- 'associatedElementFixtureNumber': index+1,
4670
- 'header': fixture.header,
4671
- 'footer': fixture.footer,
4672
- 'fixtureConfigId': fixtureConfigDoc._id,
4673
- };
4593
+ const finalYDistance = roundToTwo( ( maxYDistance < ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) ? ( ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) + ( ( 2 * constantFixtureWidth )/mmToFeet ) ) : ( maxYDistance + ( ( constantFixtureWidth )/mmToFeet ) ) ) );
4594
+ const finalYDetailedDistance = roundToTwo( ( maxYDetailedDistance < ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) ? ( ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureWidth )/mmToFeet ) ) : ( maxYDetailedDistance + ( ( constantDetailedFixtureWidth )/mmToFeet ) ) ) );
4674
4595
 
4675
- const createdFixture = await storeFixtureService.upsertOne(
4596
+
4597
+ const floorInsertData = {
4598
+ storeName: planoDoc.storeName,
4599
+ storeId: storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
4600
+ layoutName: `${planoDoc.storeName} - Layout`,
4601
+ clientId: '11',
4602
+ floorNumber: floorIndex + 1,
4603
+ floorName: `${floorArray[floorIndex].toLowerCase()} floor`,
4604
+ crestLayout: true,
4605
+ layoutPolygon: [
4676
4606
  {
4677
- floorId: layoutDoc._id,
4678
- fixtureNumber: fixtureCounter++,
4607
+ elementType: 'wall',
4608
+ distance: finalXDistance,
4609
+ unit: 'ft',
4610
+ direction: 'right',
4611
+ angle: 90,
4612
+ elementNumber: 1,
4613
+ detailedDistance: finalXDetailedDistance,
4679
4614
  },
4680
- fixtureData,
4681
- );
4682
-
4683
- if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) return;
4684
-
4685
- await Promise.all(
4686
- fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
4687
- const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
4688
- const shelfSection = shelfZone.products.find( ( product ) => !product.isMerchandisingElement );
4689
-
4690
- const shelfData = {
4691
- 'clientId': '11',
4692
- 'storeName': layoutDoc.storeName,
4693
- 'storeId': layoutDoc.storeId,
4694
- 'planoId': layoutDoc.planoId,
4695
- 'floorId': layoutDoc._id,
4696
- 'fixtureId': createdFixture._id,
4697
- 'shelfNumber': j + 1,
4698
- 'shelfOrder': 'LTR',
4699
- 'shelfCapacity': configShelf.shelfCapacity,
4700
- 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
4701
- 'sectionZone': configShelf.shelfZone,
4702
- 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
4703
- };
4615
+ {
4616
+ elementType: 'wall',
4617
+ distance: finalYDistance,
4618
+ unit: 'ft',
4619
+ direction: 'down',
4620
+ angle: 90,
4621
+ elementNumber: 2,
4622
+ detailedDistance: finalYDetailedDistance,
4623
+ },
4624
+ {
4625
+ elementType: 'wall',
4626
+ distance: finalXDistance,
4627
+ unit: 'ft',
4628
+ direction: 'left',
4629
+ angle: 90,
4630
+ elementNumber: 3,
4631
+ detailedDistance: finalXDetailedDistance,
4632
+ },
4633
+ {
4634
+ elementType: 'wall',
4635
+ distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
4636
+ unit: 'ft',
4637
+ direction: 'up',
4638
+ angle: 90,
4639
+ elementNumber: 4,
4640
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
4641
+ },
4642
+ {
4643
+ elementType: 'entrance',
4644
+ distance: roundToTwo( ( ( finalYDistance * 20 ) / 100 ) ),
4645
+ unit: 'ft',
4646
+ direction: 'up',
4647
+ angle: 90,
4648
+ elementNumber: 1,
4649
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 30 ) / 100 ) ),
4650
+ },
4651
+ {
4652
+ elementType: 'wall',
4653
+ distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
4654
+ unit: 'ft',
4655
+ direction: 'up',
4656
+ angle: 90,
4657
+ elementNumber: 5,
4658
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
4659
+ },
4660
+ ],
4661
+ createdBy: new mongoose.Types.ObjectId( '66a78cd82734f4f857cd6db6' ),
4662
+ createdByName: 'Bejan',
4663
+ createdByEmail: 'bejan@tangotech.co.in',
4664
+ status: 'completed',
4665
+ planoId: planoDoc._id,
4666
+ };
4704
4667
 
4705
- await fixtureShelfService.upsertOne(
4706
- {
4707
- fixtureId: createdFixture._id,
4708
- shelfNumber: j + 1,
4709
- },
4710
- shelfData,
4711
- );
4712
- } ),
4713
- );
4668
+ const layoutDoc = await storeBuilderService.upsertOne( { planoId: planoDoc._id, floorNumber: floorIndex + 1 }, floorInsertData );
4714
4669
 
4715
- await Promise.all(
4716
- fixture.productZones?.map( async ( zone ) => {
4717
- const vms = zone.products.filter( ( vm ) => vm.isMerchandisingElement );
4718
- const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === zone.zoneName );
4719
- const pids = zone.products.filter( ( vm ) => !vm.isMerchandisingElement );
4670
+ let fixtureCounter = 1;
4720
4671
 
4721
- await Promise.all(
4722
- vms.map( async ( vm ) => {
4723
- let configData = vmConfig[0];
4672
+ for ( let index = 0; index < leftFixtures.length; index++ ) {
4673
+ const fixture = leftFixtures[index];
4724
4674
 
4725
- if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
4726
- configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
4727
- }
4675
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
4676
+ if ( !fixtureConfig ) continue;
4677
+ const fixtureConfigDoc = fixtureConfig.toObject();
4728
4678
 
4729
- if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
4730
- configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
4731
- }
4732
-
4733
- if ( !configData ) return;
4734
-
4735
- const insertData = {
4736
- 'clientId': '11',
4737
- 'productId': 'VMCR',
4738
- 'type': 'vm',
4739
- 'productName': vm.productName,
4740
- 'productHeight': {
4741
- 'value': configData.vmHeightmm,
4742
- 'unit': 'mm',
4743
- },
4744
- 'productWidth': {
4745
- 'value': configData.vmWidthmm,
4746
- 'unit': 'mm',
4747
- },
4748
- 'startYPosition': configData.startShelf,
4749
- 'endYPosition': configData.endShelf,
4750
- 'xZone': configData.zone,
4751
- 'fixtureConfigId': fixtureConfig._id,
4752
- };
4753
-
4754
- const vmTemplate = await planoProductService.upsertOne(
4755
- {
4756
- 'productName': vm.productName,
4757
- 'fixtureConfigId': fixtureConfig._id,
4758
- 'productHeight.value': configData.vmHeightmm,
4759
- 'productWidth.value': configData.vmWidthmm,
4760
- 'startYPosition': configData.startShelf,
4761
- 'endYPosition': configData.endShelf,
4762
- 'xZone': configData.zone,
4763
- },
4764
- insertData,
4765
- );
4766
-
4767
- const vmData = {
4768
- 'clientId': layoutDoc.clientId,
4769
- 'storeName': layoutDoc.storeName,
4770
- 'storeId': layoutDoc.storeId,
4771
- 'planoId': layoutDoc.planoId,
4772
- 'floorId': layoutDoc._id,
4773
- 'type': 'vm',
4774
- 'fixtureId': createdFixture._id,
4775
- 'productId': vmTemplate._id,
4776
- };
4777
-
4778
- await planoMappingService.upsertOne(
4779
- {
4780
- fixtureId: createdFixture._id,
4781
- productId: vmTemplate._id,
4782
- },
4783
- vmData,
4784
- );
4785
- } ),
4786
- );
4787
- } ) || [],
4788
- );
4789
- } );
4790
-
4791
- const backFixturePromises = backFixtures.map( async ( fixture, index ) => {
4792
- const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
4793
- if ( !fixtureConfig ) return;
4794
- const fixtureConfigDoc = fixtureConfig.toObject();
4795
-
4796
- const fixtureData = {
4797
- 'clientId': layoutDoc.clientId,
4798
- 'storeName': layoutDoc.storeName,
4799
- 'storeId': layoutDoc.storeId,
4800
- 'planoId': layoutDoc.planoId,
4801
- 'floorId': layoutDoc._id,
4802
- 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
4803
- 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
4804
- 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4805
- 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4806
- 'fixtureCode': fixtureConfigDoc?.fixtureCode,
4807
- 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
4808
- 'fixtureType': 'wall',
4809
- 'fixtureHeight': {
4810
- 'value': 0,
4811
- 'unit': 'mm',
4812
- },
4813
- 'fixtureLength': {
4814
- 'value': constantFixtureWidth,
4815
- 'unit': 'mm',
4816
- },
4817
- 'fixtureWidth': {
4818
- 'value': constantFixtureLength,
4819
- 'unit': 'mm',
4820
- },
4821
- 'associatedElementType': 'wall',
4822
- 'associatedElementNumber': 2,
4823
- 'relativePosition': {
4824
- 'x': roundToTwo( ( finalXDistance - ( constantFixtureWidth/mmToFeet ) ) ),
4825
- 'y': roundToTwo( ( ( index * ( ( constantFixtureLength/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantFixtureWidth/mmToFeet ) ) ),
4826
- 'unit': 'ft',
4827
- },
4828
- 'fixtureNumber': fixtureCounter,
4829
- 'detailedFixtureLength': {
4830
- 'value': constantDetailedFixtureLength,
4831
- 'unit': 'mm',
4832
- },
4833
- 'detailedFixtureWidth': {
4834
- 'value': constantDetailedFixtureWidth,
4835
- 'unit': 'mm',
4836
- },
4837
- 'relativeDetailedPosition': {
4838
- 'x': roundToTwo( ( finalXDetailedDistance - ( constantDetailedFixtureLength/mmToFeet ) ) ),
4839
- 'y': roundToTwo( ( ( index * ( ( constantDetailedFixtureWidth/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth/mmToFeet ) ) ),
4840
- 'unit': 'ft',
4841
- },
4842
- 'productResolutionLevel': 'L2',
4843
- 'associatedElementFixtureNumber': index+1,
4844
- 'header': fixture.header,
4845
- 'footer': fixture.footer,
4846
- 'fixtureConfigId': fixtureConfigDoc._id,
4847
- };
4848
-
4849
- const createdFixture = await storeFixtureService.upsertOne(
4850
- {
4851
- floorId: layoutDoc._id,
4852
- fixtureNumber: fixtureCounter++,
4853
- },
4854
- fixtureData,
4855
- );
4856
-
4857
- if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) return;
4858
-
4859
- await Promise.all(
4860
- fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
4861
- const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
4862
- const shelfSection = shelfZone.products.find( ( product ) => !product.isMerchandisingElement );
4863
-
4864
- const shelfData = {
4865
- 'clientId': '11',
4866
- 'storeName': layoutDoc.storeName,
4867
- 'storeId': layoutDoc.storeId,
4868
- 'planoId': layoutDoc.planoId,
4869
- 'floorId': layoutDoc._id,
4870
- 'fixtureId': createdFixture._id,
4871
- 'shelfNumber': j + 1,
4872
- 'shelfOrder': 'LTR',
4873
- 'shelfCapacity': configShelf.shelfCapacity,
4874
- 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
4875
- 'sectionZone': configShelf.shelfZone,
4876
- 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
4877
- }; ;
4878
-
4879
- await fixtureShelfService.upsertOne(
4880
- {
4881
- fixtureId: createdFixture._id,
4882
- shelfNumber: j + 1,
4883
- },
4884
- shelfData,
4885
- );
4886
- } ),
4887
- );
4888
-
4889
- await Promise.all(
4890
- fixture.productZones?.map( async ( zone ) => {
4891
- const vms = zone.products.filter( ( vm ) => vm.isMerchandisingElement );
4892
- const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === zone.zoneName );
4893
- const pids = zone.products.filter( ( vm ) => !vm.isMerchandisingElement );
4894
-
4895
- await Promise.all(
4896
- vms.map( async ( vm ) => {
4897
- let configData = vmConfig[0];
4898
-
4899
- if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
4900
- configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
4901
- }
4902
-
4903
- if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
4904
- configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
4905
- }
4906
-
4907
- if ( !configData ) return;
4908
-
4909
- const insertData = {
4910
- 'clientId': '11',
4911
- 'productId': 'VMCR',
4912
- 'type': 'vm',
4913
- 'productName': vm.productName,
4914
- 'productHeight': {
4915
- 'value': configData.vmHeightmm,
4916
- 'unit': 'mm',
4917
- },
4918
- 'productWidth': {
4919
- 'value': configData.vmWidthmm,
4920
- 'unit': 'mm',
4921
- },
4922
- 'startYPosition': configData.startShelf,
4923
- 'endYPosition': configData.endShelf,
4924
- 'xZone': configData.zone,
4925
- 'fixtureConfigId': fixtureConfig._id,
4926
- };
4927
-
4928
- const vmTemplate = await planoProductService.upsertOne(
4929
- {
4930
- 'productName': vm.productName,
4931
- 'fixtureConfigId': fixtureConfig._id,
4932
- 'productHeight.value': configData.vmHeightmm,
4933
- 'productWidth.value': configData.vmWidthmm,
4934
- 'startYPosition': configData.startShelf,
4935
- 'endYPosition': configData.endShelf,
4936
- 'xZone': configData.zone,
4937
- },
4938
- insertData,
4939
- );
4940
-
4941
- const vmData = {
4942
- 'clientId': layoutDoc.clientId,
4943
- 'storeName': layoutDoc.storeName,
4944
- 'storeId': layoutDoc.storeId,
4945
- 'planoId': layoutDoc.planoId,
4946
- 'floorId': layoutDoc._id,
4947
- 'type': 'vm',
4948
- 'fixtureId': createdFixture._id,
4949
- 'productId': vmTemplate._id,
4950
- };
4951
-
4952
- await planoMappingService.upsertOne(
4953
- {
4954
- fixtureId: createdFixture._id,
4955
- productId: vmTemplate._id,
4956
- },
4957
- vmData,
4958
- );
4959
- } ),
4960
- );
4961
- } ) || [],
4962
- );
4963
- } );
4964
-
4965
- const rightFixturePromises = rightFixtures.map( async ( fixture, index ) => {
4966
- const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
4967
- if ( !fixtureConfig ) return;
4968
- const fixtureConfigDoc = fixtureConfig.toObject();
4969
-
4970
- const fixtureData = {
4971
- 'clientId': layoutDoc.clientId,
4972
- 'storeName': layoutDoc.storeName,
4973
- 'storeId': layoutDoc.storeId,
4974
- 'planoId': layoutDoc.planoId,
4975
- 'floorId': layoutDoc._id,
4976
- 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
4977
- 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
4978
- 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4979
- 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4980
- 'fixtureCode': fixtureConfigDoc?.fixtureCode,
4981
- 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
4982
- 'fixtureType': 'wall',
4983
- 'fixtureHeight': {
4984
- 'value': 0,
4985
- 'unit': 'mm',
4986
- },
4987
- 'fixtureLength': {
4988
- 'value': constantFixtureLength,
4989
- 'unit': 'mm',
4990
- },
4991
- 'fixtureWidth': {
4992
- 'value': constantFixtureWidth,
4993
- 'unit': 'mm',
4994
- },
4995
- 'associatedElementType': 'wall',
4996
- 'associatedElementNumber': 3,
4997
- 'relativePosition': {
4998
- 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
4999
- 'y': roundToTwo( ( finalYDistance - ( constantFixtureWidth / mmToFeet ) ) ),
5000
- 'unit': 'ft',
5001
- },
5002
- 'fixtureNumber': fixtureCounter,
5003
- 'detailedFixtureLength': {
5004
- 'value': constantDetailedFixtureLength,
5005
- 'unit': 'mm',
5006
- },
5007
- 'detailedFixtureWidth': {
5008
- 'value': constantDetailedFixtureWidth,
5009
- 'unit': 'mm',
5010
- },
5011
- 'relativeDetailedPosition': {
5012
- 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
5013
- 'y': roundToTwo( ( finalYDetailedDistance - ( constantDetailedFixtureWidth / mmToFeet ) ) ),
5014
- 'unit': 'ft',
5015
- },
5016
- 'productResolutionLevel': 'L2',
5017
- 'associatedElementFixtureNumber': index+1,
5018
- 'header': fixture.header,
5019
- 'footer': fixture.footer,
5020
- 'fixtureConfigId': fixtureConfigDoc._id,
5021
- };
5022
-
5023
- const createdFixture = await storeFixtureService.upsertOne(
5024
- {
5025
- floorId: layoutDoc._id,
5026
- fixtureNumber: fixtureCounter++,
4679
+ const fixtureData = {
4680
+ 'clientId': layoutDoc.clientId,
4681
+ 'storeName': layoutDoc.storeName,
4682
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
4683
+ 'planoId': layoutDoc.planoId,
4684
+ 'floorId': layoutDoc._id,
4685
+ 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
4686
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
4687
+ 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4688
+ 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4689
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
4690
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
4691
+ 'fixtureType': 'wall',
4692
+ 'fixtureHeight': {
4693
+ 'value': 0,
4694
+ 'unit': 'mm',
5027
4695
  },
5028
- fixtureData,
5029
- );
5030
-
5031
- if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) return;
5032
-
5033
- await Promise.all(
5034
- fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
5035
- const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
5036
- const shelfSection = shelfZone.products.find( ( product ) => !product.isMerchandisingElement );
5037
-
5038
- const shelfData = {
5039
- 'clientId': '11',
5040
- 'storeName': layoutDoc.storeName,
5041
- 'storeId': layoutDoc.storeId,
5042
- 'planoId': layoutDoc.planoId,
5043
- 'floorId': layoutDoc._id,
5044
- 'fixtureId': createdFixture._id,
5045
- 'shelfNumber': j + 1,
5046
- 'shelfOrder': 'LTR',
5047
- 'shelfCapacity': configShelf.shelfCapacity,
5048
- 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
5049
- 'sectionZone': configShelf.shelfZone,
5050
- 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
5051
- };
5052
-
5053
- await fixtureShelfService.upsertOne(
5054
- {
5055
- fixtureId: createdFixture._id,
5056
- shelfNumber: j + 1,
5057
- },
5058
- shelfData,
5059
- );
5060
- } ),
5061
- );
5062
-
5063
- await Promise.all(
5064
- fixture.productZones?.map( async ( zone ) => {
5065
- const vms = zone.products.filter( ( vm ) => vm.isMerchandisingElement );
5066
- const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === zone.zoneName );
5067
- const pids = zone.products.filter( ( vm ) => !vm.isMerchandisingElement );
5068
-
5069
- await Promise.all(
5070
- vms.map( async ( vm ) => {
5071
- let configData = vmConfig[0];
5072
-
5073
- if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
5074
- configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
5075
- }
4696
+ 'fixtureLength': {
4697
+ 'value': constantFixtureLength,
4698
+ 'unit': 'mm',
4699
+ },
4700
+ 'fixtureWidth': {
4701
+ 'value': constantFixtureWidth,
4702
+ 'unit': 'mm',
4703
+ },
4704
+ 'associatedElementType': 'wall',
4705
+ 'associatedElementNumber': 1,
4706
+ 'relativePosition': {
4707
+ 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
4708
+ 'y': 0,
4709
+ 'unit': 'ft',
4710
+ },
4711
+ 'fixtureNumber': fixtureCounter,
4712
+ 'detailedFixtureLength': {
4713
+ 'value': constantDetailedFixtureLength,
4714
+ 'unit': 'mm',
4715
+ },
4716
+ 'detailedFixtureWidth': {
4717
+ 'value': constantDetailedFixtureWidth,
4718
+ 'unit': 'mm',
4719
+ },
4720
+ 'relativeDetailedPosition': {
4721
+ 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
4722
+ 'y': 0,
4723
+ 'unit': 'ft',
4724
+ },
4725
+ 'productResolutionLevel': 'L2',
4726
+ 'associatedElementFixtureNumber': index+1,
4727
+ 'header': fixture.header,
4728
+ 'footer': fixture.footer,
4729
+ 'fixtureConfigId': fixtureConfigDoc._id,
4730
+ };
5076
4731
 
5077
- if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
5078
- configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
5079
- }
4732
+ const createdFixture = await storeFixtureService.upsertOne(
4733
+ {
4734
+ floorId: layoutDoc._id,
4735
+ fixtureNumber: fixtureCounter++,
4736
+ },
4737
+ fixtureData,
4738
+ );
5080
4739
 
5081
- if ( !configData ) return;
4740
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
4741
+
4742
+ await Promise.all(
4743
+ fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
4744
+ const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
4745
+ const shelfSection = shelfZone.products.find( ( product ) => !product.isMerchandisingElement );
4746
+
4747
+ const shelfData = {
4748
+ 'clientId': '11',
4749
+ 'storeName': layoutDoc.storeName,
4750
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
4751
+ 'planoId': layoutDoc.planoId,
4752
+ 'floorId': layoutDoc._id,
4753
+ 'fixtureId': createdFixture._id,
4754
+ 'shelfNumber': j + 1,
4755
+ 'shelfOrder': 'LTR',
4756
+ 'shelfCapacity': configShelf.shelfCapacity,
4757
+ 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
4758
+ 'sectionZone': configShelf.shelfZone,
4759
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
4760
+ };
5082
4761
 
5083
- const insertData = {
5084
- 'clientId': '11',
5085
- 'productId': 'VMCR',
5086
- 'type': 'vm',
5087
- 'productName': vm.productName,
5088
- 'productHeight': {
5089
- 'value': configData.vmHeightmm,
5090
- 'unit': 'mm',
5091
- },
5092
- 'productWidth': {
5093
- 'value': configData.vmWidthmm,
5094
- 'unit': 'mm',
5095
- },
5096
- 'startYPosition': configData.startShelf,
5097
- 'endYPosition': configData.endShelf,
5098
- 'xZone': configData.zone,
5099
- 'fixtureConfigId': fixtureConfig._id,
5100
- };
4762
+ await fixtureShelfService.upsertOne(
4763
+ {
4764
+ fixtureId: createdFixture._id,
4765
+ shelfNumber: j + 1,
4766
+ },
4767
+ shelfData,
4768
+ );
4769
+ } ),
4770
+ );
5101
4771
 
5102
- const vmTemplate = await planoProductService.upsertOne(
5103
- {
5104
- 'productName': vm.productName,
5105
- 'fixtureConfigId': fixtureConfig._id,
5106
- 'productHeight.value': configData.vmHeightmm,
5107
- 'productWidth.value': configData.vmWidthmm,
5108
- 'startYPosition': configData.startShelf,
5109
- 'endYPosition': configData.endShelf,
5110
- 'xZone': configData.zone,
4772
+ await Promise.all(
4773
+ fixture.productZones?.map( async ( zone ) => {
4774
+ const vms = zone.products.filter( ( vm ) => vm.isMerchandisingElement );
4775
+ const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === zone.zoneName );
4776
+ const pids = zone.products.filter( ( vm ) => !vm.isMerchandisingElement );
4777
+
4778
+ await Promise.all(
4779
+ vms.map( async ( vm ) => {
4780
+ let configData = vmConfig[0];
4781
+
4782
+ if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
4783
+ configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
4784
+ }
4785
+
4786
+ if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
4787
+ configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
4788
+ }
4789
+
4790
+ if ( !configData ) return;
4791
+
4792
+ const insertData = {
4793
+ 'clientId': '11',
4794
+ 'productId': 'VMCR',
4795
+ 'type': 'vm',
4796
+ 'productName': vm.productName,
4797
+ 'productHeight': {
4798
+ 'value': configData.vmHeightmm,
4799
+ 'unit': 'mm',
5111
4800
  },
5112
- insertData,
5113
- );
5114
-
5115
- const vmData = {
5116
- 'clientId': layoutDoc.clientId,
5117
- 'storeName': layoutDoc.storeName,
5118
- 'storeId': layoutDoc.storeId,
5119
- 'planoId': layoutDoc.planoId,
5120
- 'floorId': layoutDoc._id,
5121
- 'type': 'vm',
5122
- 'fixtureId': createdFixture._id,
5123
- 'productId': vmTemplate._id,
5124
- };
5125
-
5126
- await planoMappingService.upsertOne(
5127
- {
5128
- fixtureId: createdFixture._id,
5129
- productId: vmTemplate._id,
4801
+ 'productWidth': {
4802
+ 'value': configData.vmWidthmm,
4803
+ 'unit': 'mm',
5130
4804
  },
5131
- vmData,
5132
- );
5133
- } ),
5134
- );
5135
- } ) || [],
5136
- );
5137
- } );
5138
-
5139
- const floorFixturePromises = floorFixtures.map( async ( fixture, index ) => {
5140
- const centerRow = Math.floor( totalRows / 2 );
5141
-
5142
- const startingX = roundToTwo( ( finalXDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantFixtureLength / mmToFeet ) ) );
5143
- const detailedStartingX = roundToTwo( ( finalXDetailedDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) );
5144
-
5145
- const startingY = finalYDistance / 2 - centerRow * ( constantFixtureWidth / mmToFeet );
5146
- const detailedStartingY = finalYDetailedDistance / 2 - centerRow * ( constantDetailedFixtureWidth / mmToFeet );
5147
-
5148
- const colIndex = Math.floor( index / 2 );
5149
- const rowIndex = index % 2 === 0 ? 1 : 0;
5150
-
5151
- const xPos = roundToTwo( startingX + colIndex * ( constantFixtureLength / mmToFeet ) );
5152
- const yPos = roundToTwo( startingY + rowIndex * ( constantFixtureWidth / mmToFeet ) );
5153
-
5154
- const detailedXPos = roundToTwo( ( detailedStartingX + colIndex * ( constantDetailedFixtureLength / mmToFeet ) ) );
5155
- const detailedYPos = roundToTwo( ( detailedStartingY + rowIndex * ( constantDetailedFixtureWidth / mmToFeet ) ) );
5156
-
5157
- const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.main } );
5158
- if ( !fixtureConfig ) return;
5159
-
5160
- const fixtureConfigDoc = fixtureConfig.toObject();
5161
-
5162
- const fixtureData = {
5163
- 'clientId': layoutDoc.clientId,
5164
- 'storeName': layoutDoc.storeName,
5165
- 'storeId': layoutDoc.storeId,
5166
- 'planoId': layoutDoc.planoId,
5167
- 'floorId': layoutDoc._id,
5168
- 'fixtureName': `Fixture ${index+1} - ${fixture.main}`,
5169
- 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
5170
- 'fixtureBrandCategory': fixture.centerSubMain ? fixture.centerSubMain : undefined,
5171
- 'fixtureBrandSubCategory': fixture.centerSubMain ? fixture.centerSubMain : undefined,
5172
- 'fixtureCode': fixtureConfigDoc?.fixtureCode,
5173
- 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
5174
- 'fixtureType': 'floor',
5175
- 'fixtureHeight': {
5176
- 'value': 0,
5177
- 'unit': 'mm',
5178
- },
5179
- 'fixtureLength': {
5180
- 'value': constantFixtureLength,
5181
- 'unit': 'mm',
5182
- },
5183
- 'fixtureWidth': {
5184
- 'value': constantFixtureWidth,
5185
- 'unit': 'mm',
5186
- },
5187
- 'relativePosition': {
5188
- 'x': xPos,
5189
- 'y': yPos,
5190
- 'unit': 'ft',
5191
- },
5192
- 'fixtureNumber': fixtureCounter,
5193
- 'detailedFixtureLength': {
5194
- 'value': constantDetailedFixtureLength,
5195
- 'unit': 'mm',
5196
- },
5197
- 'detailedFixtureWidth': {
5198
- 'value': constantDetailedFixtureWidth,
5199
- 'unit': 'mm',
5200
- },
5201
- 'relativeDetailedPosition': {
5202
- 'x': detailedXPos,
5203
- 'y': detailedYPos,
5204
- 'unit': 'ft',
5205
- },
5206
- 'productResolutionLevel': 'L2',
5207
- 'associatedElementFixtureNumber': index+1,
5208
- 'fixtureConfigId': fixtureConfigDoc._id,
5209
- };
5210
-
5211
-
5212
- const createdFixture = await storeFixtureService.upsertOne(
5213
- {
5214
- floorId: layoutDoc._id,
5215
- fixtureNumber: fixtureCounter++,
5216
- },
5217
- fixtureData,
5218
- );
5219
-
5220
- if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) return;
5221
-
5222
- await Promise.all(
5223
- fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
5224
- const shelfSection = fixture.centerSuperSubMain.find(
5225
- ( product ) => product.isVisualMerchandiser === false || product.isVisualMerchandiser === true,
5226
- );
5227
-
5228
- const shelfData = {
5229
- 'clientId': '11',
5230
- 'storeName': layoutDoc.storeName,
5231
- 'storeId': layoutDoc.storeId,
5232
- 'planoId': layoutDoc.planoId,
5233
- 'floorId': layoutDoc._id,
5234
- 'fixtureId': createdFixture._id,
5235
- 'shelfNumber': j + 1,
5236
- 'shelfOrder': 'LTR',
5237
- 'shelfCapacity': configShelf.shelfCapacity,
5238
- 'sectionName': fixture.centerSuperSubMain.find( ( product ) => product.isVisualMerchandiser === true ) ? shelfSection?.name + ' PIDs' : shelfSection?.name,
5239
- 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
5240
- };
5241
-
5242
- await fixtureShelfService.upsertOne(
5243
- {
5244
- fixtureId: createdFixture._id,
5245
- shelfNumber: j + 1,
5246
- },
5247
- shelfData,
5248
- );
5249
- } ),
5250
- );
5251
-
5252
- const vm = fixture.centerSuperSubMain.find( ( vm ) => vm.isVisualMerchandiser );
5253
- const vmConfig = fixtureConfigDoc.vmConfig;
5254
-
5255
- if ( vm ) {
5256
- const [ configData1, configData2 ] = [ vmConfig[0], vmConfig[1] ];
5257
-
5258
- const insertData1 = {
5259
- 'clientId': '11',
5260
- 'productId': 'VMCR',
5261
- 'type': 'vm',
5262
- 'productName': vm.name,
5263
- 'productHeight': {
5264
- 'value': configData1.vmHeightmm,
4805
+ 'startYPosition': configData.startShelf,
4806
+ 'endYPosition': configData.endShelf,
4807
+ 'xZone': configData.zone,
4808
+ 'fixtureConfigId': fixtureConfig._id,
4809
+ };
4810
+
4811
+ const vmTemplate = await planoProductService.upsertOne(
4812
+ {
4813
+ 'productName': vm.productName,
4814
+ 'fixtureConfigId': fixtureConfig._id,
4815
+ 'productHeight.value': configData.vmHeightmm,
4816
+ 'productWidth.value': configData.vmWidthmm,
4817
+ 'startYPosition': configData.startShelf,
4818
+ 'endYPosition': configData.endShelf,
4819
+ 'xZone': configData.zone,
4820
+ },
4821
+ insertData,
4822
+ );
4823
+
4824
+ const vmData = {
4825
+ 'clientId': layoutDoc.clientId,
4826
+ 'storeName': layoutDoc.storeName,
4827
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
4828
+ 'planoId': layoutDoc.planoId,
4829
+ 'floorId': layoutDoc._id,
4830
+ 'type': 'vm',
4831
+ 'fixtureId': createdFixture._id,
4832
+ 'productId': vmTemplate._id,
4833
+ };
4834
+
4835
+ await planoMappingService.upsertOne(
4836
+ {
4837
+ fixtureId: createdFixture._id,
4838
+ productId: vmTemplate._id,
4839
+ },
4840
+ vmData,
4841
+ );
4842
+ } ),
4843
+ );
4844
+ } ) || [],
4845
+ );
4846
+ }
4847
+
4848
+
4849
+ for ( let index = 0; index < backFixtures.length; index++ ) {
4850
+ const fixture = backFixtures[index];
4851
+
4852
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
4853
+ if ( !fixtureConfig ) continue;
4854
+ const fixtureConfigDoc = fixtureConfig.toObject();
4855
+
4856
+ const fixtureData = {
4857
+ 'clientId': layoutDoc.clientId,
4858
+ 'storeName': layoutDoc.storeName,
4859
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
4860
+ 'planoId': layoutDoc.planoId,
4861
+ 'floorId': layoutDoc._id,
4862
+ 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
4863
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
4864
+ 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4865
+ 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
4866
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
4867
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
4868
+ 'fixtureType': 'wall',
4869
+ 'fixtureHeight': {
4870
+ 'value': 0,
5265
4871
  'unit': 'mm',
5266
4872
  },
5267
- 'productWidth': {
5268
- 'value': configData1.vmWidthmm,
4873
+ 'fixtureLength': {
4874
+ 'value': constantFixtureWidth,
5269
4875
  'unit': 'mm',
5270
4876
  },
5271
- 'startYPosition': configData1.startShelf,
5272
- 'endYPosition': configData1.endShelf,
5273
- 'xZone': configData1.zone,
5274
- 'fixtureConfigId': fixtureConfig._id,
5275
- };
5276
- const insertData2 = {
5277
- 'clientId': '11',
5278
- 'productId': 'VMCR',
5279
- 'type': 'vm',
5280
- 'productName': ' ',
5281
- 'productHeight': {
5282
- 'value': configData2.vmHeightmm,
4877
+ 'fixtureWidth': {
4878
+ 'value': constantFixtureLength,
5283
4879
  'unit': 'mm',
5284
4880
  },
5285
- 'productWidth': {
5286
- 'value': configData2.vmWidthmm,
4881
+ 'associatedElementType': 'wall',
4882
+ 'associatedElementNumber': 2,
4883
+ 'relativePosition': {
4884
+ 'x': roundToTwo( ( finalXDistance - ( constantFixtureWidth/mmToFeet ) ) ),
4885
+ 'y': roundToTwo( ( ( index * ( ( constantFixtureLength/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantFixtureWidth/mmToFeet ) ) ),
4886
+ 'unit': 'ft',
4887
+ },
4888
+ 'fixtureNumber': fixtureCounter,
4889
+ 'detailedFixtureLength': {
4890
+ 'value': constantDetailedFixtureLength,
5287
4891
  'unit': 'mm',
5288
4892
  },
5289
- 'startYPosition': configData2.startShelf,
5290
- 'endYPosition': configData2.endShelf,
5291
- 'xZone': configData2.zone,
5292
- 'fixtureConfigId': fixtureConfig._id,
4893
+ 'detailedFixtureWidth': {
4894
+ 'value': constantDetailedFixtureWidth,
4895
+ 'unit': 'mm',
4896
+ },
4897
+ 'relativeDetailedPosition': {
4898
+ 'x': roundToTwo( ( finalXDetailedDistance - ( constantDetailedFixtureLength/mmToFeet ) ) ),
4899
+ 'y': roundToTwo( ( ( index * ( ( constantDetailedFixtureWidth/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth/mmToFeet ) ) ),
4900
+ 'unit': 'ft',
4901
+ },
4902
+ 'productResolutionLevel': 'L2',
4903
+ 'associatedElementFixtureNumber': index+1,
4904
+ 'header': fixture.header,
4905
+ 'footer': fixture.footer,
4906
+ 'fixtureConfigId': fixtureConfigDoc._id,
5293
4907
  };
5294
4908
 
5295
- const [ vmTemplate1, vmTemplate2 ] = await Promise.all( [
5296
- planoProductService.upsertOne(
5297
- {
5298
- 'productName': vm.name,
5299
- 'fixtureConfigId': fixtureConfig._id,
5300
- 'productHeight.value': configData1.vmHeightmm,
5301
- 'productWidth.value': configData1.vmWidthmm,
5302
- 'startYPosition': configData1.startShelf,
5303
- 'endYPosition': configData1.endShelf,
5304
- 'xZone': configData1.zone,
5305
- },
5306
- insertData1,
5307
- ),
5308
- planoProductService.upsertOne(
5309
- {
5310
- 'productName': ' ',
5311
- 'fixtureConfigId': fixtureConfig._id,
5312
- 'productHeight.value': configData2.vmHeightmm,
5313
- 'productWidth.value': configData2.vmWidthmm,
5314
- 'startYPosition': configData2.startShelf,
5315
- 'endYPosition': configData2.endShelf,
5316
- 'xZone': configData2.zone,
5317
- },
5318
- insertData2,
5319
- ),
5320
- ] );
4909
+ const createdFixture = await storeFixtureService.upsertOne(
4910
+ {
4911
+ floorId: layoutDoc._id,
4912
+ fixtureNumber: fixtureCounter++,
4913
+ },
4914
+ fixtureData,
4915
+ );
5321
4916
 
5322
- const vmData1 = {
4917
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
4918
+
4919
+ await Promise.all(
4920
+ fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
4921
+ const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
4922
+ const shelfSection = shelfZone.products.find( ( product ) => !product.isMerchandisingElement );
4923
+
4924
+ const shelfData = {
4925
+ 'clientId': '11',
4926
+ 'storeName': layoutDoc.storeName,
4927
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
4928
+ 'planoId': layoutDoc.planoId,
4929
+ 'floorId': layoutDoc._id,
4930
+ 'fixtureId': createdFixture._id,
4931
+ 'shelfNumber': j + 1,
4932
+ 'shelfOrder': 'LTR',
4933
+ 'shelfCapacity': configShelf.shelfCapacity,
4934
+ 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
4935
+ 'sectionZone': configShelf.shelfZone,
4936
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
4937
+ }; ;
4938
+
4939
+ await fixtureShelfService.upsertOne(
4940
+ {
4941
+ fixtureId: createdFixture._id,
4942
+ shelfNumber: j + 1,
4943
+ },
4944
+ shelfData,
4945
+ );
4946
+ } ),
4947
+ );
4948
+
4949
+ await Promise.all(
4950
+ fixture.productZones?.map( async ( zone ) => {
4951
+ const vms = zone.products.filter( ( vm ) => vm.isMerchandisingElement );
4952
+ const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === zone.zoneName );
4953
+ const pids = zone.products.filter( ( vm ) => !vm.isMerchandisingElement );
4954
+
4955
+ await Promise.all(
4956
+ vms.map( async ( vm ) => {
4957
+ let configData = vmConfig[0];
4958
+
4959
+ if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
4960
+ configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
4961
+ }
4962
+
4963
+ if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
4964
+ configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
4965
+ }
4966
+
4967
+ if ( !configData ) return;
4968
+
4969
+ const insertData = {
4970
+ 'clientId': '11',
4971
+ 'productId': 'VMCR',
4972
+ 'type': 'vm',
4973
+ 'productName': vm.productName,
4974
+ 'productHeight': {
4975
+ 'value': configData.vmHeightmm,
4976
+ 'unit': 'mm',
4977
+ },
4978
+ 'productWidth': {
4979
+ 'value': configData.vmWidthmm,
4980
+ 'unit': 'mm',
4981
+ },
4982
+ 'startYPosition': configData.startShelf,
4983
+ 'endYPosition': configData.endShelf,
4984
+ 'xZone': configData.zone,
4985
+ 'fixtureConfigId': fixtureConfig._id,
4986
+ };
4987
+
4988
+ const vmTemplate = await planoProductService.upsertOne(
4989
+ {
4990
+ 'productName': vm.productName,
4991
+ 'fixtureConfigId': fixtureConfig._id,
4992
+ 'productHeight.value': configData.vmHeightmm,
4993
+ 'productWidth.value': configData.vmWidthmm,
4994
+ 'startYPosition': configData.startShelf,
4995
+ 'endYPosition': configData.endShelf,
4996
+ 'xZone': configData.zone,
4997
+ },
4998
+ insertData,
4999
+ );
5000
+
5001
+ const vmData = {
5002
+ 'clientId': layoutDoc.clientId,
5003
+ 'storeName': layoutDoc.storeName,
5004
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5005
+ 'planoId': layoutDoc.planoId,
5006
+ 'floorId': layoutDoc._id,
5007
+ 'type': 'vm',
5008
+ 'fixtureId': createdFixture._id,
5009
+ 'productId': vmTemplate._id,
5010
+ };
5011
+
5012
+ await planoMappingService.upsertOne(
5013
+ {
5014
+ fixtureId: createdFixture._id,
5015
+ productId: vmTemplate._id,
5016
+ },
5017
+ vmData,
5018
+ );
5019
+ } ),
5020
+ );
5021
+ } ) || [],
5022
+ );
5023
+ }
5024
+
5025
+ for ( let index = 0; index < rightFixtures.length; index++ ) {
5026
+ const fixture = rightFixtures[index];
5027
+
5028
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
5029
+ if ( !fixtureConfig ) continue;
5030
+ const fixtureConfigDoc = fixtureConfig.toObject();
5031
+
5032
+ const fixtureData = {
5323
5033
  'clientId': layoutDoc.clientId,
5324
5034
  'storeName': layoutDoc.storeName,
5325
- 'storeId': layoutDoc.storeId,
5035
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5326
5036
  'planoId': layoutDoc.planoId,
5327
5037
  'floorId': layoutDoc._id,
5328
- 'type': 'vm',
5329
- 'fixtureId': createdFixture._id,
5330
- 'productId': vmTemplate1._id,
5038
+ 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
5039
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
5040
+ 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
5041
+ 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
5042
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
5043
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
5044
+ 'fixtureType': 'wall',
5045
+ 'fixtureHeight': {
5046
+ 'value': 0,
5047
+ 'unit': 'mm',
5048
+ },
5049
+ 'fixtureLength': {
5050
+ 'value': constantFixtureLength,
5051
+ 'unit': 'mm',
5052
+ },
5053
+ 'fixtureWidth': {
5054
+ 'value': constantFixtureWidth,
5055
+ 'unit': 'mm',
5056
+ },
5057
+ 'associatedElementType': 'wall',
5058
+ 'associatedElementNumber': 3,
5059
+ 'relativePosition': {
5060
+ 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
5061
+ 'y': roundToTwo( ( finalYDistance - ( constantFixtureWidth / mmToFeet ) ) ),
5062
+ 'unit': 'ft',
5063
+ },
5064
+ 'fixtureNumber': fixtureCounter,
5065
+ 'detailedFixtureLength': {
5066
+ 'value': constantDetailedFixtureLength,
5067
+ 'unit': 'mm',
5068
+ },
5069
+ 'detailedFixtureWidth': {
5070
+ 'value': constantDetailedFixtureWidth,
5071
+ 'unit': 'mm',
5072
+ },
5073
+ 'relativeDetailedPosition': {
5074
+ 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
5075
+ 'y': roundToTwo( ( finalYDetailedDistance - ( constantDetailedFixtureWidth / mmToFeet ) ) ),
5076
+ 'unit': 'ft',
5077
+ },
5078
+ 'productResolutionLevel': 'L2',
5079
+ 'associatedElementFixtureNumber': index+1,
5080
+ 'header': fixture.header,
5081
+ 'footer': fixture.footer,
5082
+ 'fixtureConfigId': fixtureConfigDoc._id,
5331
5083
  };
5332
- const vmData2 = {
5084
+
5085
+ const createdFixture = await storeFixtureService.upsertOne(
5086
+ {
5087
+ floorId: layoutDoc._id,
5088
+ fixtureNumber: fixtureCounter++,
5089
+ },
5090
+ fixtureData,
5091
+ );
5092
+
5093
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
5094
+
5095
+ await Promise.all(
5096
+ fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
5097
+ const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
5098
+ const shelfSection = shelfZone.products.find( ( product ) => !product.isMerchandisingElement );
5099
+
5100
+ const shelfData = {
5101
+ 'clientId': '11',
5102
+ 'storeName': layoutDoc.storeName,
5103
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5104
+ 'planoId': layoutDoc.planoId,
5105
+ 'floorId': layoutDoc._id,
5106
+ 'fixtureId': createdFixture._id,
5107
+ 'shelfNumber': j + 1,
5108
+ 'shelfOrder': 'LTR',
5109
+ 'shelfCapacity': configShelf.shelfCapacity,
5110
+ 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
5111
+ 'sectionZone': configShelf.shelfZone,
5112
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
5113
+ };
5114
+
5115
+ await fixtureShelfService.upsertOne(
5116
+ {
5117
+ fixtureId: createdFixture._id,
5118
+ shelfNumber: j + 1,
5119
+ },
5120
+ shelfData,
5121
+ );
5122
+ } ),
5123
+ );
5124
+
5125
+ await Promise.all(
5126
+ fixture.productZones?.map( async ( zone ) => {
5127
+ const vms = zone.products.filter( ( vm ) => vm.isMerchandisingElement );
5128
+ const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === zone.zoneName );
5129
+ const pids = zone.products.filter( ( vm ) => !vm.isMerchandisingElement );
5130
+
5131
+ await Promise.all(
5132
+ vms.map( async ( vm ) => {
5133
+ let configData = vmConfig[0];
5134
+
5135
+ if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
5136
+ configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
5137
+ }
5138
+
5139
+ if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
5140
+ configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
5141
+ }
5142
+
5143
+ if ( !configData ) return;
5144
+
5145
+ const insertData = {
5146
+ 'clientId': '11',
5147
+ 'productId': 'VMCR',
5148
+ 'type': 'vm',
5149
+ 'productName': vm.productName,
5150
+ 'productHeight': {
5151
+ 'value': configData.vmHeightmm,
5152
+ 'unit': 'mm',
5153
+ },
5154
+ 'productWidth': {
5155
+ 'value': configData.vmWidthmm,
5156
+ 'unit': 'mm',
5157
+ },
5158
+ 'startYPosition': configData.startShelf,
5159
+ 'endYPosition': configData.endShelf,
5160
+ 'xZone': configData.zone,
5161
+ 'fixtureConfigId': fixtureConfig._id,
5162
+ };
5163
+
5164
+ const vmTemplate = await planoProductService.upsertOne(
5165
+ {
5166
+ 'productName': vm.productName,
5167
+ 'fixtureConfigId': fixtureConfig._id,
5168
+ 'productHeight.value': configData.vmHeightmm,
5169
+ 'productWidth.value': configData.vmWidthmm,
5170
+ 'startYPosition': configData.startShelf,
5171
+ 'endYPosition': configData.endShelf,
5172
+ 'xZone': configData.zone,
5173
+ },
5174
+ insertData,
5175
+ );
5176
+
5177
+ const vmData = {
5178
+ 'clientId': layoutDoc.clientId,
5179
+ 'storeName': layoutDoc.storeName,
5180
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5181
+ 'planoId': layoutDoc.planoId,
5182
+ 'floorId': layoutDoc._id,
5183
+ 'type': 'vm',
5184
+ 'fixtureId': createdFixture._id,
5185
+ 'productId': vmTemplate._id,
5186
+ };
5187
+
5188
+ await planoMappingService.upsertOne(
5189
+ {
5190
+ fixtureId: createdFixture._id,
5191
+ productId: vmTemplate._id,
5192
+ },
5193
+ vmData,
5194
+ );
5195
+ } ),
5196
+ );
5197
+ } ) || [],
5198
+ );
5199
+ }
5200
+
5201
+
5202
+ for ( let index = 0; index < floorFixtures.length; index++ ) {
5203
+ const fixture = floorFixtures[index];
5204
+ const centerRow = Math.floor( totalRows / 2 );
5205
+
5206
+ const startingX = roundToTwo( ( finalXDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantFixtureLength / mmToFeet ) ) );
5207
+ const detailedStartingX = roundToTwo( ( finalXDetailedDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) );
5208
+
5209
+ const startingY = finalYDistance / 2 - centerRow * ( constantFixtureWidth / mmToFeet );
5210
+ const detailedStartingY = finalYDetailedDistance / 2 - centerRow * ( constantDetailedFixtureWidth / mmToFeet );
5211
+
5212
+ const colIndex = Math.floor( index / 2 );
5213
+ const rowIndex = index % 2 === 0 ? 1 : 0;
5214
+
5215
+ const xPos = roundToTwo( startingX + colIndex * ( constantFixtureLength / mmToFeet ) );
5216
+ const yPos = roundToTwo( startingY + rowIndex * ( constantFixtureWidth / mmToFeet ) );
5217
+
5218
+ const detailedXPos = roundToTwo( ( detailedStartingX + colIndex * ( constantDetailedFixtureLength / mmToFeet ) ) );
5219
+ const detailedYPos = roundToTwo( ( detailedStartingY + rowIndex * ( constantDetailedFixtureWidth / mmToFeet ) ) );
5220
+
5221
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.main } );
5222
+ if ( !fixtureConfig ) continue;
5223
+
5224
+ const fixtureConfigDoc = fixtureConfig.toObject();
5225
+
5226
+ const fixtureData = {
5333
5227
  'clientId': layoutDoc.clientId,
5334
5228
  'storeName': layoutDoc.storeName,
5335
- 'storeId': layoutDoc.storeId,
5229
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5336
5230
  'planoId': layoutDoc.planoId,
5337
5231
  'floorId': layoutDoc._id,
5338
- 'type': 'vm',
5339
- 'fixtureId': createdFixture._id,
5340
- 'productId': vmTemplate2._id,
5232
+ 'fixtureName': `Fixture ${index+1} - ${fixture.main}`,
5233
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
5234
+ 'fixtureBrandCategory': fixture.centerSubMain ? fixture.centerSubMain : undefined,
5235
+ 'fixtureBrandSubCategory': fixture.centerSubMain ? fixture.centerSubMain : undefined,
5236
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
5237
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
5238
+ 'fixtureType': 'floor',
5239
+ 'fixtureHeight': {
5240
+ 'value': 0,
5241
+ 'unit': 'mm',
5242
+ },
5243
+ 'fixtureLength': {
5244
+ 'value': constantFixtureLength,
5245
+ 'unit': 'mm',
5246
+ },
5247
+ 'fixtureWidth': {
5248
+ 'value': constantFixtureWidth,
5249
+ 'unit': 'mm',
5250
+ },
5251
+ 'relativePosition': {
5252
+ 'x': xPos,
5253
+ 'y': yPos,
5254
+ 'unit': 'ft',
5255
+ },
5256
+ 'fixtureNumber': fixtureCounter,
5257
+ 'detailedFixtureLength': {
5258
+ 'value': constantDetailedFixtureLength,
5259
+ 'unit': 'mm',
5260
+ },
5261
+ 'detailedFixtureWidth': {
5262
+ 'value': constantDetailedFixtureWidth,
5263
+ 'unit': 'mm',
5264
+ },
5265
+ 'relativeDetailedPosition': {
5266
+ 'x': detailedXPos,
5267
+ 'y': detailedYPos,
5268
+ 'unit': 'ft',
5269
+ },
5270
+ 'productResolutionLevel': 'L2',
5271
+ 'associatedElementFixtureNumber': index+1,
5272
+ 'fixtureConfigId': fixtureConfigDoc._id,
5341
5273
  };
5342
5274
 
5343
- await Promise.all( [
5344
- planoMappingService.upsertOne(
5345
- {
5346
- fixtureId: createdFixture._id,
5347
- productId: vmTemplate1._id,
5348
- },
5349
- vmData1,
5350
- ),
5351
- planoMappingService.upsertOne(
5352
- {
5353
- fixtureId: createdFixture._id,
5354
- productId: vmTemplate2._id,
5355
- },
5356
- vmData2,
5357
- ),
5358
- ] );
5359
- }
5360
- } );
5361
5275
 
5362
- await Promise.all( [ ...leftFixturePromises, ...backFixturePromises, ...rightFixturePromises, ...floorFixturePromises ] );
5276
+ const createdFixture = await storeFixtureService.upsertOne(
5277
+ {
5278
+ floorId: layoutDoc._id,
5279
+ fixtureNumber: fixtureCounter++,
5280
+ },
5281
+ fixtureData,
5282
+ );
5363
5283
 
5364
- const now = Date.now();
5365
- const elapsedMinutes = ( now - startTime ) / 1000 / 60;
5366
- console.log( `Store name: ${storeData.storeName}, Iteration ${i + 1}/${storeList?.length}: total elapsed time = ${elapsedMinutes.toFixed( 2 )} minutes` );
5284
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
5285
+
5286
+ await Promise.all(
5287
+ fixtureConfigDoc.shelfConfig.map( async ( configShelf, j ) => {
5288
+ const shelfSection = fixture.centerSuperSubMain.find(
5289
+ ( product ) => product.isVisualMerchandiser === false || product.isVisualMerchandiser === true,
5290
+ );
5291
+
5292
+ const shelfData = {
5293
+ 'clientId': '11',
5294
+ 'storeName': layoutDoc.storeName,
5295
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5296
+ 'planoId': layoutDoc.planoId,
5297
+ 'floorId': layoutDoc._id,
5298
+ 'fixtureId': createdFixture._id,
5299
+ 'shelfNumber': j + 1,
5300
+ 'shelfOrder': 'LTR',
5301
+ 'shelfCapacity': configShelf.shelfCapacity,
5302
+ 'sectionName': fixture.centerSuperSubMain.find( ( product ) => product.isVisualMerchandiser === true ) ? shelfSection?.name + ' PIDs' : shelfSection?.name,
5303
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
5304
+ };
5305
+
5306
+ await fixtureShelfService.upsertOne(
5307
+ {
5308
+ fixtureId: createdFixture._id,
5309
+ shelfNumber: j + 1,
5310
+ },
5311
+ shelfData,
5312
+ );
5313
+ } ),
5314
+ );
5315
+
5316
+ const vm = fixture.centerSuperSubMain.find( ( vm ) => vm.isVisualMerchandiser );
5317
+ const vmConfig = fixtureConfigDoc.vmConfig;
5318
+
5319
+ if ( vm ) {
5320
+ const [ configData1, configData2 ] = [ vmConfig[0], vmConfig[1] ];
5321
+
5322
+ const insertData1 = {
5323
+ 'clientId': '11',
5324
+ 'productId': 'VMCR',
5325
+ 'type': 'vm',
5326
+ 'productName': vm.name,
5327
+ 'productHeight': {
5328
+ 'value': configData1.vmHeightmm,
5329
+ 'unit': 'mm',
5330
+ },
5331
+ 'productWidth': {
5332
+ 'value': configData1.vmWidthmm,
5333
+ 'unit': 'mm',
5334
+ },
5335
+ 'startYPosition': configData1.startShelf,
5336
+ 'endYPosition': configData1.endShelf,
5337
+ 'xZone': configData1.zone,
5338
+ 'fixtureConfigId': fixtureConfig._id,
5339
+ };
5340
+ const insertData2 = {
5341
+ 'clientId': '11',
5342
+ 'productId': 'VMCR',
5343
+ 'type': 'vm',
5344
+ 'productName': ' ',
5345
+ 'productHeight': {
5346
+ 'value': configData2.vmHeightmm,
5347
+ 'unit': 'mm',
5348
+ },
5349
+ 'productWidth': {
5350
+ 'value': configData2.vmWidthmm,
5351
+ 'unit': 'mm',
5352
+ },
5353
+ 'startYPosition': configData2.startShelf,
5354
+ 'endYPosition': configData2.endShelf,
5355
+ 'xZone': configData2.zone,
5356
+ 'fixtureConfigId': fixtureConfig._id,
5357
+ };
5358
+
5359
+ const [ vmTemplate1, vmTemplate2 ] = await Promise.all( [
5360
+ planoProductService.upsertOne(
5361
+ {
5362
+ 'productName': vm.name,
5363
+ 'fixtureConfigId': fixtureConfig._id,
5364
+ 'productHeight.value': configData1.vmHeightmm,
5365
+ 'productWidth.value': configData1.vmWidthmm,
5366
+ 'startYPosition': configData1.startShelf,
5367
+ 'endYPosition': configData1.endShelf,
5368
+ 'xZone': configData1.zone,
5369
+ },
5370
+ insertData1,
5371
+ ),
5372
+ planoProductService.upsertOne(
5373
+ {
5374
+ 'productName': ' ',
5375
+ 'fixtureConfigId': fixtureConfig._id,
5376
+ 'productHeight.value': configData2.vmHeightmm,
5377
+ 'productWidth.value': configData2.vmWidthmm,
5378
+ 'startYPosition': configData2.startShelf,
5379
+ 'endYPosition': configData2.endShelf,
5380
+ 'xZone': configData2.zone,
5381
+ },
5382
+ insertData2,
5383
+ ),
5384
+ ] );
5385
+
5386
+ const vmData1 = {
5387
+ 'clientId': layoutDoc.clientId,
5388
+ 'storeName': layoutDoc.storeName,
5389
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5390
+ 'planoId': layoutDoc.planoId,
5391
+ 'floorId': layoutDoc._id,
5392
+ 'type': 'vm',
5393
+ 'fixtureId': createdFixture._id,
5394
+ 'productId': vmTemplate1._id,
5395
+ };
5396
+ const vmData2 = {
5397
+ 'clientId': layoutDoc.clientId,
5398
+ 'storeName': layoutDoc.storeName,
5399
+ 'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
5400
+ 'planoId': layoutDoc.planoId,
5401
+ 'floorId': layoutDoc._id,
5402
+ 'type': 'vm',
5403
+ 'fixtureId': createdFixture._id,
5404
+ 'productId': vmTemplate2._id,
5405
+ };
5406
+
5407
+ await Promise.all( [
5408
+ planoMappingService.upsertOne(
5409
+ {
5410
+ fixtureId: createdFixture._id,
5411
+ productId: vmTemplate1._id,
5412
+ },
5413
+ vmData1,
5414
+ ),
5415
+ planoMappingService.upsertOne(
5416
+ {
5417
+ fixtureId: createdFixture._id,
5418
+ productId: vmTemplate2._id,
5419
+ },
5420
+ vmData2,
5421
+ ),
5422
+ ] );
5423
+ }
5424
+ }
5425
+
5426
+ const now = Date.now();
5427
+ const elapsedMinutes = ( now - startTime ) / 1000 / 60;
5428
+ console.log( `Store name: ${storeData.storeName},Floor name: ${floorArray[floorIndex]} Iteration ${i + 1}/${storeList?.length}: total elapsed time = ${elapsedMinutes.toFixed( 2 )} minutes` );
5429
+ logger.info( { functionName: 'updateCrestPlanogram', body: `Store name: ${storeData.storeName},Floor name: ${floorArray[floorIndex]} Iteration ${i + 1}/${storeList?.length}: total elapsed time = ${elapsedMinutes.toFixed( 2 )} minutes` } );
5430
+ }
5367
5431
  }
5368
5432
 
5369
5433
  res.sendSuccess( 'Updated Successfully' );
@@ -6726,3 +6790,70 @@ export async function updateExcelPlanogram( req, res ) {
6726
6790
  return res.sendError( e.message || 'Internal Server Error', 500 );
6727
6791
  }
6728
6792
  }
6793
+
6794
+ async function downloadImage() {
6795
+ const url = 'https://api.getcrest.ai/api/ms_data_preparation/master_data/attachment/?preview=0&attachment_id=2934';
6796
+
6797
+ try {
6798
+ const response = await fetch( url, {
6799
+ headers: {
6800
+ Authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzQ3MDMyNDcyLCJpYXQiOjE3NDcwMjg4NzIsImp0aSI6IjZmN2Y0Yzk4OGY5ZjRiYjg5NmNhOTYwNzMyMTVlOTUwIiwidXNlcl9pZCI6MTA4NCwiaWQiOjEwODQsImlzX21lZXNlZWtfYWNjb3VudCI6ZmFsc2UsImN1c3RvbWVyX2dyb3VwIjozOTgsImxpY2VuY2Vfc2NvcGVzIjpbeyJyZXNvdXJjZV9zZXQiOiJwcF9zZXQiLCJzY29wZV9yb2xlIjoiYWRtaW4ifSx7InJlc291cmNlX3NldCI6ImRwX3NldCIsInNjb3BlX3JvbGUiOiJhZG1pbiJ9LHsicmVzb3VyY2Vfc2V0IjoiZGZfc2V0Iiwic2NvcGVfcm9sZSI6ImFkbWluIn0seyJyZXNvdXJjZV9zZXQiOiJkZWZhdWx0X3NldCIsInNjb3BlX3JvbGUiOiJhZG1pbiJ9XX0.Lt3zT1Rw4KnDWRQ8LWYRVMFPS3PHRRTgHXn6kLG8Uk0',
6801
+ Cookie: 'prod_session_key=w144dqljxlh096487nc33rm09vwtossh; prod_session_key=xn1fry9sekk94hs2hfo78erxcmc8a3am',
6802
+ },
6803
+ } );
6804
+
6805
+ if ( !response.ok ) throw new Error( `HTTP error! Status: ${response.status}` );
6806
+
6807
+ const dest = fs.createWriteStream( '2934.png' );
6808
+ response.body.pipe( dest );
6809
+
6810
+ dest.on( 'finish', () => console.log( 'Image saved as image.jpg' ) );
6811
+ dest.on( 'error', ( err ) => console.error( 'File write error:', err ) );
6812
+ } catch ( err ) {
6813
+ console.error( 'Fetch error:', err );
6814
+ }
6815
+ }
6816
+
6817
+ // downloadImage();
6818
+
6819
+ export async function recorrectTaskData( req, res ) {
6820
+ if ( req?.headers?.authorization?.split( ' ' )[1] !== 'hwjXfCD6TgMvc82cuSGZ9bNv9MuXsaiQ6uvx' ) {
6821
+ return res.sendError( 'Unauthorized', 401 );
6822
+ }
6823
+ try {
6824
+ const taskData = await planoTaskService.find( { type: 'layout' } );
6825
+
6826
+ for ( let index = 0; index < taskData.length; index++ ) {
6827
+ const task = taskData[index].toObject();
6828
+
6829
+ console.log( { storeName: task.storeName, isPlano: true, date_string: task.date_string } );
6830
+
6831
+ const processedTaskData = await processedTaskService.findOne( { storeName: task.storeName, isPlano: true, date_string: task.date_string } );
6832
+
6833
+ const currentPlano = await planoService.findOne( { storeName: processedTaskData?.toObject().storeName } );
6834
+
6835
+ const currentFloor = await storeBuilderService.findOne( { planoId: currentPlano?.toObject()._id } );
6836
+
6837
+ const updateData = {
6838
+ storeName: currentPlano.toObject().storeName,
6839
+ planoId: currentPlano.toObject()._id,
6840
+ floorId: currentFloor.toObject()._id,
6841
+ taskId: processedTaskData?.toObject()?._id,
6842
+ };
6843
+
6844
+ if ( task.date_string ) {
6845
+ updateData.date_iso = new Date( dayjs().format( task.date_string ) );
6846
+ }
6847
+ console.log( updateData );
6848
+
6849
+ const updateTask = await planoTaskService.updateOne( { _id: task._id }, updateData );
6850
+
6851
+ console.log( updateTask );
6852
+ }
6853
+
6854
+ res.sendSuccess( 'Updated Successfully' );
6855
+ } catch ( e ) {
6856
+ console.log( e );
6857
+ return res.sendError( e, 500 );
6858
+ }
6859
+ }