tango-app-api-store-builder 1.0.0-beta-93 → 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
|
-
|
|
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,
|
|
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.
|
|
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
|
|
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
|
-
|
|
4504
|
-
|
|
4511
|
+
for ( const item of storeData.data.result ) {
|
|
4512
|
+
if ( item.floor ) {
|
|
4513
|
+
floors.add( item.floor );
|
|
4514
|
+
}
|
|
4505
4515
|
|
|
4506
|
-
|
|
4507
|
-
|
|
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
|
|
4510
|
-
const rightXDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
|
|
4525
|
+
const floorArray = Array.from( floors );
|
|
4511
4526
|
|
|
4512
|
-
|
|
4513
|
-
const rightYDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( constantDetailedFixtureWidth / mmToFeet ) ): 0;
|
|
4527
|
+
let isFloorKeyExist = true;
|
|
4514
4528
|
|
|
4515
|
-
|
|
4516
|
-
|
|
4529
|
+
if ( !floorArray.length ) {
|
|
4530
|
+
isFloorKeyExist = false;
|
|
4531
|
+
floorArray.push( 'GROUND' );
|
|
4532
|
+
}
|
|
4517
4533
|
|
|
4518
|
-
|
|
4519
|
-
|
|
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
|
-
|
|
4522
|
-
|
|
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
|
-
|
|
4525
|
-
|
|
4560
|
+
const leftYDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantFixtureWidth / mmToFeet ) ) ) : 0;
|
|
4561
|
+
const leftYDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantDetailedFixtureWidth / mmToFeet ) ) ) : 0;
|
|
4526
4562
|
|
|
4527
|
-
|
|
4528
|
-
|
|
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
|
-
|
|
4531
|
-
|
|
4566
|
+
const rightYDistanceFeet = rightFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
|
|
4567
|
+
const rightYDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( constantDetailedFixtureWidth / mmToFeet ) ): 0;
|
|
4532
4568
|
|
|
4533
|
-
|
|
4534
|
-
|
|
4569
|
+
const maxFixturesPerRow = floorFixtures.length/2;
|
|
4570
|
+
const totalRows = 2;
|
|
4535
4571
|
|
|
4536
|
-
|
|
4537
|
-
|
|
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
|
-
|
|
4540
|
-
|
|
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
|
-
|
|
4544
|
-
|
|
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
|
-
|
|
4584
|
+
const maxXDistance = Math.max( leftXDistanceFeet, rightXDistanceFeet, floorXDistanceFeet );
|
|
4585
|
+
const maxXDetailedDistance = Math.max( leftXDetailedDistanceFeet, rightXDetailedDistanceFeet, floorXDetailedDistanceFeet );
|
|
4614
4586
|
|
|
4615
|
-
|
|
4587
|
+
const maxYDistance = Math.max( floorYDistanceFeet, backYDistanceFeet );
|
|
4588
|
+
const maxYDetailedDistance = Math.max( floorYDetailedDistanceFeet, backYDetailedDistanceFeet );
|
|
4616
4589
|
|
|
4617
|
-
|
|
4618
|
-
const
|
|
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
|
|
4623
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4678
|
-
|
|
4607
|
+
elementType: 'wall',
|
|
4608
|
+
distance: finalXDistance,
|
|
4609
|
+
unit: 'ft',
|
|
4610
|
+
direction: 'right',
|
|
4611
|
+
angle: 90,
|
|
4612
|
+
elementNumber: 1,
|
|
4613
|
+
detailedDistance: finalXDetailedDistance,
|
|
4679
4614
|
},
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4722
|
-
|
|
4723
|
-
let configData = vmConfig[0];
|
|
4672
|
+
for ( let index = 0; index < leftFixtures.length; index++ ) {
|
|
4673
|
+
const fixture = leftFixtures[index];
|
|
4724
4674
|
|
|
4725
|
-
|
|
4726
|
-
|
|
4727
|
-
|
|
4675
|
+
const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
|
|
4676
|
+
if ( !fixtureConfig ) continue;
|
|
4677
|
+
const fixtureConfigDoc = fixtureConfig.toObject();
|
|
4728
4678
|
|
|
4729
|
-
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
|
-
|
|
4742
|
-
|
|
4743
|
-
|
|
4744
|
-
|
|
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
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
|
|
5056
|
-
|
|
5057
|
-
|
|
5058
|
-
|
|
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
|
-
|
|
5078
|
-
|
|
5079
|
-
|
|
4732
|
+
const createdFixture = await storeFixtureService.upsertOne(
|
|
4733
|
+
{
|
|
4734
|
+
floorId: layoutDoc._id,
|
|
4735
|
+
fixtureNumber: fixtureCounter++,
|
|
4736
|
+
},
|
|
4737
|
+
fixtureData,
|
|
4738
|
+
);
|
|
5080
4739
|
|
|
5081
|
-
|
|
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
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5090
|
-
|
|
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
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
|
|
5110
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
|
|
5148
|
-
|
|
5149
|
-
|
|
5150
|
-
|
|
5151
|
-
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
|
|
5175
|
-
|
|
5176
|
-
|
|
5177
|
-
|
|
5178
|
-
}
|
|
5179
|
-
|
|
5180
|
-
|
|
5181
|
-
|
|
5182
|
-
|
|
5183
|
-
|
|
5184
|
-
'
|
|
5185
|
-
'
|
|
5186
|
-
|
|
5187
|
-
|
|
5188
|
-
'
|
|
5189
|
-
'
|
|
5190
|
-
'
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
'
|
|
5195
|
-
'
|
|
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
|
-
'
|
|
5268
|
-
'value':
|
|
4873
|
+
'fixtureLength': {
|
|
4874
|
+
'value': constantFixtureWidth,
|
|
5269
4875
|
'unit': 'mm',
|
|
5270
4876
|
},
|
|
5271
|
-
'
|
|
5272
|
-
|
|
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
|
-
'
|
|
5286
|
-
|
|
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
|
-
'
|
|
5290
|
-
|
|
5291
|
-
|
|
5292
|
-
|
|
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
|
|
5296
|
-
|
|
5297
|
-
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
|
|
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
|
-
|
|
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':
|
|
5035
|
+
'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
|
|
5326
5036
|
'planoId': layoutDoc.planoId,
|
|
5327
5037
|
'floorId': layoutDoc._id,
|
|
5328
|
-
'
|
|
5329
|
-
'
|
|
5330
|
-
'
|
|
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
|
-
|
|
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':
|
|
5229
|
+
'storeId': storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
|
|
5336
5230
|
'planoId': layoutDoc.planoId,
|
|
5337
5231
|
'floorId': layoutDoc._id,
|
|
5338
|
-
'
|
|
5339
|
-
'
|
|
5340
|
-
'
|
|
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
|
-
|
|
5276
|
+
const createdFixture = await storeFixtureService.upsertOne(
|
|
5277
|
+
{
|
|
5278
|
+
floorId: layoutDoc._id,
|
|
5279
|
+
fixtureNumber: fixtureCounter++,
|
|
5280
|
+
},
|
|
5281
|
+
fixtureData,
|
|
5282
|
+
);
|
|
5363
5283
|
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
|
|
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
|
+
}
|