tango-app-api-store-builder 1.0.0-beta-76 → 1.0.0-beta-77

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.
@@ -2388,54 +2388,909 @@ export async function createCrestPlanogram( req, res ) {
2388
2388
 
2389
2389
  const crestData = data.filter( ( item ) => item.data.message === 'SUCCESS' );
2390
2390
 
2391
- const fixtureTypes = new Set();
2392
- const centerSubMains = new Set();
2391
+ const constantFixtureLength = 1220;
2392
+ const constantDetailedFixtureLength = 1220;
2393
2393
 
2394
- crestData.forEach( ( store ) => {
2395
- store.data.result.forEach( ( section ) => {
2396
- if ( section.fixtures ) {
2397
- section.fixtures.forEach( ( fixture ) => {
2398
- if ( fixture.fixtureType ) {
2399
- fixtureTypes.add( fixture.fixtureType );
2394
+ const constantFixtureWidth = 610;
2395
+ const constantDetailedFixtureWidth = 1524;
2396
+
2397
+ const mmToFeet = 305;
2398
+
2399
+ function roundToTwo( num ) {
2400
+ return Math.round( num * 100 ) / 100;
2401
+ }
2402
+
2403
+ for ( let i = 0; i < crestData.length; i++ ) {
2404
+ const storeData = crestData[i];
2405
+
2406
+ const storeDetails = await storeService.findOne( { storeName: storeData.storeName } );
2407
+
2408
+ const planoInsertData = {
2409
+ storeName: storeData.storeName,
2410
+ storeId: storeDetails?.toObject()?.storeId ? storeDetails.toObject().storeId : 'nil',
2411
+ layoutName: `${storeData.storeName} - Layout`,
2412
+ clientId: '11',
2413
+ attachments: [],
2414
+ createdBy: new mongoose.Types.ObjectId( '66a78cd82734f4f857cd6db6' ),
2415
+ createdByName: 'Bejan',
2416
+ createdByEmail: 'bejan@tangotech.co.in',
2417
+ status: 'completed',
2418
+ floorNumber: 1,
2419
+ productResolutionLevel: 'L2',
2420
+ scanType: 'qr',
2421
+ };
2422
+
2423
+ const insertedPlano = await planoService.upsertOne( { storeName: storeData.storeName }, planoInsertData );
2424
+
2425
+ const planoDoc = insertedPlano.toObject();
2426
+
2427
+ const leftWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'LEFT WALL' );
2428
+ const leftFixtures = leftWall.flatMap( ( wall ) => wall.fixtures );
2429
+ const rightWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'RIGHT WALL' );
2430
+ const rightFixtures = rightWall.flatMap( ( wall ) => wall.fixtures );
2431
+ const backWall = storeData.data.result.filter( ( entry ) => entry['main'] === 'RIGHT VERTICAL WALL' );
2432
+ const backFixtures = backWall.flatMap( ( wall ) => wall.fixtures );
2433
+ const floorFixtures = storeData.data.result.filter( ( entry ) => entry['main'] === 'Euro Center' || entry['main'] === 'Euro Center Dr' );
2434
+
2435
+ const leftXDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
2436
+ const leftXDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
2437
+
2438
+ const leftYDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantFixtureWidth / mmToFeet ) ) ) : 0;
2439
+ const leftYDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantDetailedFixtureWidth / mmToFeet ) ) ) : 0;
2440
+
2441
+ const rightXDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
2442
+ const rightXDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
2443
+
2444
+ const rightYDistanceFeet = rightFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
2445
+ const rightYDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( constantDetailedFixtureWidth / mmToFeet ) ): 0;
2446
+
2447
+ const maxFixturesPerRow = floorFixtures.length/2;
2448
+ const totalRows = 2;
2449
+
2450
+ const floorXDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantFixtureLength / mmToFeet ) ) ) : 0;
2451
+ const floorXDetailedDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) ): 0;
2452
+
2453
+ const floorYDistanceFeet = floorFixtures.length ? roundToTwo( ( 2 * ( constantFixtureWidth/ mmToFeet ) ) ): 0;
2454
+ const floorYDetailedDistanceFeet = floorFixtures.length ? roundToTwo( 2 * ( constantDetailedFixtureWidth/mmToFeet ) ): 0;
2455
+
2456
+ const backXDistanceFeet = backFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
2457
+ const backXDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( constantDetailedFixtureLength / mmToFeet ) ) : 0;
2458
+
2459
+ const backYDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantFixtureLength / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantFixtureWidth )/mmToFeet ) ) ) : 0;
2460
+ const backYDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantDetailedFixtureWidth / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth )/mmToFeet ) ) ): 0;
2461
+
2462
+ const maxXDistance = Math.max( leftXDistanceFeet, rightXDistanceFeet, floorXDistanceFeet );
2463
+ const maxXDetailedDistance = Math.max( leftXDetailedDistanceFeet, rightXDetailedDistanceFeet, floorXDetailedDistanceFeet );
2464
+
2465
+ const maxYDistance = Math.max( floorYDistanceFeet, backYDistanceFeet );
2466
+ const maxYDetailedDistance = Math.max( floorYDetailedDistanceFeet, backYDetailedDistanceFeet );
2467
+
2468
+ const finalXDistance = roundToTwo( ( maxXDistance < ( backXDistanceFeet + floorXDistanceFeet )? ( ( backXDistanceFeet + floorXDistanceFeet ) + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDistance + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : maxXDistance ) );
2469
+ const finalXDetailedDistance = roundToTwo( ( maxXDetailedDistance < ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet )? ( ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDetailedDistance + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : maxXDetailedDistance ) );
2470
+
2471
+ const finalYDistance = roundToTwo( ( maxYDistance < ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) ? ( ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) + ( ( 2 * constantFixtureWidth )/mmToFeet ) ) : ( maxYDistance + ( ( constantFixtureWidth )/mmToFeet ) ) ) );
2472
+ const finalYDetailedDistance = roundToTwo( ( maxYDetailedDistance < ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) ? ( ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureWidth )/mmToFeet ) ) : ( maxYDetailedDistance + ( ( constantDetailedFixtureWidth )/mmToFeet ) ) ) );
2473
+
2474
+ const floorInsertData = {
2475
+ storeName: planoDoc.storeName,
2476
+ storeId: planoDoc.storeId,
2477
+ layoutName: `${planoDoc.storeName} - Layout`,
2478
+ clientId: '11',
2479
+ floorNumber: 1,
2480
+ floorName: 'floor 1',
2481
+ layoutPolygon: [
2482
+ {
2483
+ elementType: 'wall',
2484
+ distance: finalXDistance,
2485
+ unit: 'ft',
2486
+ direction: 'right',
2487
+ angle: 90,
2488
+ elementNumber: 1,
2489
+ detailedDistance: finalXDetailedDistance,
2490
+ },
2491
+ {
2492
+ elementType: 'wall',
2493
+ distance: finalYDistance,
2494
+ unit: 'ft',
2495
+ direction: 'down',
2496
+ angle: 90,
2497
+ elementNumber: 2,
2498
+ detailedDistance: finalYDetailedDistance,
2499
+ },
2500
+ {
2501
+ elementType: 'wall',
2502
+ distance: finalXDistance,
2503
+ unit: 'ft',
2504
+ direction: 'left',
2505
+ angle: 90,
2506
+ elementNumber: 3,
2507
+ detailedDistance: finalXDetailedDistance,
2508
+ },
2509
+ {
2510
+ elementType: 'wall',
2511
+ distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
2512
+ unit: 'ft',
2513
+ direction: 'up',
2514
+ angle: 90,
2515
+ elementNumber: 4,
2516
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
2517
+ },
2518
+ {
2519
+ elementType: 'entrance',
2520
+ distance: roundToTwo( ( ( finalYDistance * 20 ) / 100 ) ),
2521
+ unit: 'ft',
2522
+ direction: 'up',
2523
+ angle: 90,
2524
+ elementNumber: 1,
2525
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 30 ) / 100 ) ),
2526
+ },
2527
+ {
2528
+ elementType: 'wall',
2529
+ distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
2530
+ unit: 'ft',
2531
+ direction: 'up',
2532
+ angle: 90,
2533
+ elementNumber: 5,
2534
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
2535
+ },
2536
+ ],
2537
+ createdBy: new mongoose.Types.ObjectId( '66a78cd82734f4f857cd6db6' ),
2538
+ createdByName: 'Bejan',
2539
+ createdByEmail: 'bejan@tangotech.co.in',
2540
+ status: 'completed',
2541
+ planoId: planoDoc._id,
2542
+ };
2543
+
2544
+ const layoutDoc = await storeBuilderService.upsertOne( { planoId: planoDoc._id }, floorInsertData );
2545
+
2546
+ let fixtureCounter = 1;
2547
+
2548
+ for ( let index = 0; index < leftFixtures.length; index++ ) {
2549
+ const fixture = leftFixtures[index];
2550
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
2551
+ const fixtureConfigDoc = fixtureConfig.toObject();
2552
+
2553
+ const fixtureData = {
2554
+ 'clientId': layoutDoc.clientId,
2555
+ 'storeName': layoutDoc.storeName,
2556
+ 'storeId': layoutDoc.storeId,
2557
+ 'planoId': layoutDoc.planoId,
2558
+ 'floorId': layoutDoc._id,
2559
+ 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
2560
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
2561
+ 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
2562
+ 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
2563
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
2564
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
2565
+ 'fixtureType': 'wall',
2566
+ 'fixtureHeight': {
2567
+ 'value': 0,
2568
+ 'unit': 'mm',
2569
+ },
2570
+ 'fixtureLength': {
2571
+ 'value': constantFixtureLength,
2572
+ 'unit': 'mm',
2573
+ },
2574
+ 'fixtureWidth': {
2575
+ 'value': constantFixtureWidth,
2576
+ 'unit': 'mm',
2577
+ },
2578
+ 'associatedElementType': 'wall',
2579
+ 'associatedElementNumber': 1,
2580
+ 'relativePosition': {
2581
+ 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
2582
+ 'y': 0,
2583
+ 'unit': 'ft',
2584
+ },
2585
+ 'fixtureNumber': fixtureCounter,
2586
+ 'detailedFixtureLength': {
2587
+ 'value': constantDetailedFixtureLength,
2588
+ 'unit': 'mm',
2589
+ },
2590
+ 'detailedFixtureWidth': {
2591
+ 'value': constantDetailedFixtureWidth,
2592
+ 'unit': 'mm',
2593
+ },
2594
+ 'relativeDetailedPosition': {
2595
+ 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
2596
+ 'y': 0,
2597
+ 'unit': 'ft',
2598
+ },
2599
+ 'productResolutionLevel': 'L2',
2600
+ 'associatedElementFixtureNumber': index+1,
2601
+ 'header': fixture.header,
2602
+ 'footer': fixture.footer,
2603
+ 'fixtureConfigId': fixtureConfigDoc._id,
2604
+ };
2605
+
2606
+ const createdFixture = await storeFixtureService.upsertOne(
2607
+ {
2608
+ floorId: layoutDoc._id,
2609
+ fixtureNumber: fixtureCounter,
2610
+ },
2611
+ fixtureData );
2612
+
2613
+ fixtureCounter +=1;
2614
+
2615
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
2616
+
2617
+
2618
+ for ( let j = 0; j < fixtureConfigDoc.shelfConfig.length; j++ ) {
2619
+ const configShelf = fixtureConfigDoc.shelfConfig[j];
2620
+ const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
2621
+
2622
+ const shelfSection = shelfZone.products.find( ( product ) => product.isMerchandisingElement === false );
2623
+
2624
+ const shelfData = {
2625
+ 'clientId': '11',
2626
+ 'storeName': layoutDoc.storeName,
2627
+ 'storeId': layoutDoc.storeId,
2628
+ 'planoId': layoutDoc.planoId,
2629
+ 'floorId': layoutDoc._id,
2630
+ 'fixtureId': createdFixture._id,
2631
+ 'shelfNumber': j + 1,
2632
+ 'shelfOrder': 'LTR',
2633
+ 'shelfCapacity': configShelf.shelfCapacity,
2634
+ 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
2635
+ 'sectionZone': configShelf.shelfZone,
2636
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
2637
+ };
2638
+
2639
+ await fixtureShelfService.upsertOne(
2640
+ {
2641
+ fixtureId: createdFixture._id,
2642
+ shelfNumber: j + 1,
2643
+ },
2644
+ shelfData,
2645
+ );
2646
+ }
2647
+
2648
+ for ( let i = 0; i < fixture.productZones?.length; i++ ) {
2649
+ const vms = fixture.productZones[i].products.filter( ( vm ) => vm.isMerchandisingElement );
2650
+ const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === fixture.productZones[i].zoneName );
2651
+
2652
+ for ( const vm of vms ) {
2653
+ let vmTemplate = await planoProductService.findOne( { productName: vm.productName, fixtureConfigId: fixtureConfig._id } );
2654
+ if ( !vmTemplate ) {
2655
+ let configData = vmConfig[0];
2656
+
2657
+ if ( vm.productName === 'Creatr' && fixture.productZones[i].zoneName === 'Mid' ) {
2658
+ configData = vmConfig.find( ( config ) => config.vmNumber === 3 );
2659
+ }
2660
+
2661
+ if ( vm.productName !== 'Creatr' && fixture.productZones[i].zoneName === 'Mid' ) {
2662
+ configData = vmConfig.find( ( config ) => config.vmNumber === 2 );
2663
+ }
2664
+
2665
+ const insertData = {
2666
+ 'clientId': '11',
2667
+ 'productId': 'VMCR',
2668
+ 'type': 'vm',
2669
+ 'productName': vm.productName,
2670
+ 'productHeight': {
2671
+ 'value': configData.vmHeightmm,
2672
+ 'unit': 'mm',
2673
+ },
2674
+ 'productWidth': {
2675
+ 'value': configData.vmWidthmm,
2676
+ 'unit': 'mm',
2677
+ },
2678
+ 'startYPosition': configData.startShelf,
2679
+ 'endYPosition': configData.endShelf,
2680
+ 'xZone': configData.zone,
2681
+ 'fixtureConfigId': fixtureConfig._id,
2682
+ };
2683
+
2684
+ vmTemplate = await planoProductService.upsertOne(
2685
+ { productName: vm.productName, fixtureConfigId: fixtureConfig._id },
2686
+ insertData );
2400
2687
  }
2401
- } );
2688
+
2689
+ const vmData = {
2690
+ 'clientId': layoutDoc.clientId,
2691
+ 'storeName': layoutDoc.storeName,
2692
+ 'storeId': layoutDoc.storeId,
2693
+ 'planoId': layoutDoc.planoId,
2694
+ 'floorId': layoutDoc._id,
2695
+ 'type': 'vm',
2696
+ 'fixtureId': createdFixture._id,
2697
+ 'productId': vmTemplate._id,
2698
+ };
2699
+
2700
+ await planoMappingService.upsertOne(
2701
+ {
2702
+ fixtureId: createdFixture._id,
2703
+ productId: vmTemplate._id,
2704
+ },
2705
+ vmData,
2706
+ );
2707
+ }
2402
2708
  }
2709
+ }
2710
+
2711
+ for ( let index = 0; index < backFixtures.length; index++ ) {
2712
+ const fixture = backFixtures[index];
2713
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
2714
+ const fixtureConfigDoc = fixtureConfig.toObject();
2403
2715
 
2404
- if ( section.main === 'Euro Center' && section.centerSubMain ) {
2405
- centerSubMains.add( section.centerSubMain );
2716
+ const fixtureData = {
2717
+ 'clientId': layoutDoc.clientId,
2718
+ 'storeName': layoutDoc.storeName,
2719
+ 'storeId': layoutDoc.storeId,
2720
+ 'planoId': layoutDoc.planoId,
2721
+ 'floorId': layoutDoc._id,
2722
+ 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
2723
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
2724
+ 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
2725
+ 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
2726
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
2727
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
2728
+ 'fixtureType': 'wall',
2729
+ 'fixtureHeight': {
2730
+ 'value': 0,
2731
+ 'unit': 'mm',
2732
+ },
2733
+ 'fixtureLength': {
2734
+ 'value': constantFixtureWidth,
2735
+ 'unit': 'mm',
2736
+ },
2737
+ 'fixtureWidth': {
2738
+ 'value': constantFixtureLength,
2739
+ 'unit': 'mm',
2740
+ },
2741
+ 'associatedElementType': 'wall',
2742
+ 'associatedElementNumber': 2,
2743
+ 'relativePosition': {
2744
+ 'x': roundToTwo( ( finalXDistance - ( constantFixtureWidth/mmToFeet ) ) ),
2745
+ 'y': roundToTwo( ( ( index * ( ( constantFixtureLength/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantFixtureWidth/mmToFeet ) ) ),
2746
+ 'unit': 'ft',
2747
+ },
2748
+ 'fixtureNumber': fixtureCounter,
2749
+ 'detailedFixtureLength': {
2750
+ 'value': constantDetailedFixtureLength,
2751
+ 'unit': 'mm',
2752
+ },
2753
+ 'detailedFixtureWidth': {
2754
+ 'value': constantDetailedFixtureWidth,
2755
+ 'unit': 'mm',
2756
+ },
2757
+ 'relativeDetailedPosition': {
2758
+ 'x': roundToTwo( ( finalXDetailedDistance - ( constantDetailedFixtureLength/mmToFeet ) ) ),
2759
+ 'y': roundToTwo( ( ( index * ( ( constantDetailedFixtureWidth/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth/mmToFeet ) ) ),
2760
+ 'unit': 'ft',
2761
+ },
2762
+ 'productResolutionLevel': 'L2',
2763
+ 'associatedElementFixtureNumber': index+1,
2764
+ 'header': fixture.header,
2765
+ 'footer': fixture.footer,
2766
+ 'fixtureConfigId': fixtureConfigDoc._id,
2767
+ };
2768
+
2769
+ const createdFixture = await storeFixtureService.upsertOne(
2770
+ {
2771
+ floorId: layoutDoc._id,
2772
+ fixtureNumber: fixtureCounter,
2773
+ },
2774
+ fixtureData );
2775
+
2776
+ fixtureCounter +=1;
2777
+
2778
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
2779
+
2780
+ for ( let j = 0; j < fixtureConfigDoc.shelfConfig.length; j++ ) {
2781
+ const configShelf = fixtureConfigDoc.shelfConfig[j];
2782
+ const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
2783
+
2784
+ const shelfSection = shelfZone.products.find( ( product ) => product.isMerchandisingElement === false );
2785
+
2786
+ const shelfData = {
2787
+ 'clientId': '11',
2788
+ 'storeName': layoutDoc.storeName,
2789
+ 'storeId': layoutDoc.storeId,
2790
+ 'planoId': layoutDoc.planoId,
2791
+ 'floorId': layoutDoc._id,
2792
+ 'fixtureId': createdFixture._id,
2793
+ 'shelfNumber': j + 1,
2794
+ 'shelfOrder': 'LTR',
2795
+ 'shelfCapacity': configShelf.shelfCapacity,
2796
+ 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
2797
+ 'sectionZone': configShelf.shelfZone,
2798
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
2799
+ };
2800
+
2801
+ await fixtureShelfService.upsertOne(
2802
+ {
2803
+ fixtureId: createdFixture._id,
2804
+ shelfNumber: j + 1,
2805
+ },
2806
+ shelfData,
2807
+ );
2406
2808
  }
2407
- } );
2408
- } );
2409
2809
 
2410
- return res.sendSuccess( {
2411
- fixtureTypes: Array.from( fixtureTypes ),
2412
- euroCenterSubMains: Array.from( centerSubMains ),
2810
+ for ( let i = 0; i < fixture.productZones?.length; i++ ) {
2811
+ const vms = fixture.productZones[i].products.filter( ( vm ) => vm.isMerchandisingElement );
2812
+ const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === fixture.productZones[i].zoneName );
2813
+
2814
+ for ( const vm of vms ) {
2815
+ let vmTemplate = await planoProductService.findOne( { productName: vm.productName, fixtureConfigId: fixtureConfig._id } );
2816
+ if ( !vmTemplate ) {
2817
+ let configData = vmConfig[0];
2818
+
2819
+ if ( vm.productName === 'Creatr' && fixture.productZones[i].zoneName === 'Mid' ) {
2820
+ configData = vmConfig.find( ( config ) => config.vmNumber === 3 );
2821
+ }
2822
+
2823
+ if ( vm.productName !== 'Creatr' && fixture.productZones[i].zoneName === 'Mid' ) {
2824
+ configData = vmConfig.find( ( config ) => config.vmNumber === 2 );
2825
+ }
2826
+
2827
+ const insertData = {
2828
+ 'clientId': '11',
2829
+ 'productId': 'VMCR',
2830
+ 'type': 'vm',
2831
+ 'productName': vm.productName,
2832
+ 'productHeight': {
2833
+ 'value': configData.vmHeightmm,
2834
+ 'unit': 'mm',
2835
+ },
2836
+ 'productWidth': {
2837
+ 'value': configData.vmWidthmm,
2838
+ 'unit': 'mm',
2839
+ },
2840
+ 'startYPosition': configData.startShelf,
2841
+ 'endYPosition': configData.endShelf,
2842
+ 'xZone': configData.zone,
2843
+ 'fixtureConfigId': fixtureConfig._id,
2844
+ };
2845
+
2846
+ vmTemplate = await planoProductService.upsertOne(
2847
+ { productName: vm.productName, fixtureConfigId: fixtureConfig._id },
2848
+ insertData );
2849
+ }
2850
+
2851
+ const vmData = {
2852
+ 'clientId': layoutDoc.clientId,
2853
+ 'storeName': layoutDoc.storeName,
2854
+ 'storeId': layoutDoc.storeId,
2855
+ 'planoId': layoutDoc.planoId,
2856
+ 'floorId': layoutDoc._id,
2857
+ 'type': 'vm',
2858
+ 'fixtureId': createdFixture._id,
2859
+ 'productId': vmTemplate._id,
2860
+ };
2861
+
2862
+ await planoMappingService.upsertOne(
2863
+ {
2864
+ fixtureId: createdFixture._id,
2865
+ productId: vmTemplate._id,
2866
+ },
2867
+ vmData,
2868
+ );
2869
+ }
2870
+ }
2871
+ }
2872
+
2873
+ for ( let index = 0; index < rightFixtures.length; index++ ) {
2874
+ const fixture = rightFixtures[index];
2875
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.fixtureType } );
2876
+ const fixtureConfigDoc = fixtureConfig.toObject();
2877
+
2878
+ const fixtureData = {
2879
+ 'clientId': layoutDoc.clientId,
2880
+ 'storeName': layoutDoc.storeName,
2881
+ 'storeId': layoutDoc.storeId,
2882
+ 'planoId': layoutDoc.planoId,
2883
+ 'floorId': layoutDoc._id,
2884
+ 'fixtureName': `Fixture ${index+1} - ${fixture.fixtureType}`,
2885
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
2886
+ 'fixtureBrandCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
2887
+ 'fixtureBrandSubCategory': fixture.fixtureSubname.length ? ( fixture.fixtureSubname.length > 1 ? fixture.fixtureSubname.join( ' + ' ) : fixture.fixtureSubname[0] ) : undefined,
2888
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
2889
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
2890
+ 'fixtureType': 'wall',
2891
+ 'fixtureHeight': {
2892
+ 'value': 0,
2893
+ 'unit': 'mm',
2894
+ },
2895
+ 'fixtureLength': {
2896
+ 'value': constantFixtureLength,
2897
+ 'unit': 'mm',
2898
+ },
2899
+ 'fixtureWidth': {
2900
+ 'value': constantFixtureWidth,
2901
+ 'unit': 'mm',
2902
+ },
2903
+ 'associatedElementType': 'wall',
2904
+ 'associatedElementNumber': 3,
2905
+ 'relativePosition': {
2906
+ 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
2907
+ 'y': roundToTwo( ( finalYDistance - ( constantFixtureWidth / mmToFeet ) ) ),
2908
+ 'unit': 'ft',
2909
+ },
2910
+ 'fixtureNumber': fixtureCounter,
2911
+ 'detailedFixtureLength': {
2912
+ 'value': constantDetailedFixtureLength,
2913
+ 'unit': 'mm',
2914
+ },
2915
+ 'detailedFixtureWidth': {
2916
+ 'value': constantDetailedFixtureWidth,
2917
+ 'unit': 'mm',
2918
+ },
2919
+ 'relativeDetailedPosition': {
2920
+ 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
2921
+ 'y': roundToTwo( ( finalYDetailedDistance - ( constantDetailedFixtureWidth / mmToFeet ) ) ),
2922
+ 'unit': 'ft',
2923
+ },
2924
+ 'productResolutionLevel': 'L2',
2925
+ 'associatedElementFixtureNumber': index+1,
2926
+ 'header': fixture.header,
2927
+ 'footer': fixture.footer,
2928
+ 'fixtureConfigId': fixtureConfigDoc._id,
2929
+ };
2930
+
2931
+ const createdFixture = await storeFixtureService.upsertOne(
2932
+ {
2933
+ floorId: layoutDoc._id,
2934
+ fixtureNumber: fixtureCounter,
2935
+ },
2936
+ fixtureData );
2937
+
2938
+ fixtureCounter +=1;
2939
+
2940
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
2941
+
2942
+ for ( let j = 0; j < fixtureConfigDoc.shelfConfig.length; j++ ) {
2943
+ const configShelf = fixtureConfigDoc.shelfConfig[j];
2944
+
2945
+ const shelfZone = fixture.productZones.find( ( zone ) => zone.zoneName === configShelf.shelfZone );
2946
+ const shelfSection = shelfZone.products.find( ( product ) => product.isMerchandisingElement === false );
2947
+
2948
+ const shelfData = {
2949
+ 'clientId': '11',
2950
+ 'storeName': layoutDoc.storeName,
2951
+ 'storeId': layoutDoc.storeId,
2952
+ 'planoId': layoutDoc.planoId,
2953
+ 'floorId': layoutDoc._id,
2954
+ 'fixtureId': createdFixture._id,
2955
+ 'shelfNumber': j + 1,
2956
+ 'shelfOrder': 'LTR',
2957
+ 'shelfCapacity': configShelf.shelfCapacity,
2958
+ 'sectionName': shelfSection?.productName ? shelfSection.productName : 'Unknown',
2959
+ 'sectionZone': configShelf.shelfZone,
2960
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
2961
+ };
2962
+
2963
+ await fixtureShelfService.upsertOne(
2964
+ {
2965
+ fixtureId: createdFixture._id,
2966
+ shelfNumber: j + 1,
2967
+ },
2968
+ shelfData,
2969
+ );
2970
+ }
2971
+
2972
+ for ( let i = 0; i < fixture.productZones?.length; i++ ) {
2973
+ const vms = fixture.productZones[i].products.filter( ( vm ) => vm.isMerchandisingElement );
2974
+ const vmConfig = fixtureConfigDoc.vmConfig.filter( ( vm ) => vm.position === fixture.productZones[i].zoneName );
2975
+
2976
+ for ( const vm of vms ) {
2977
+ let vmTemplate = await planoProductService.findOne( { productName: vm.productName, fixtureConfigId: fixtureConfig._id } );
2978
+ if ( !vmTemplate ) {
2979
+ let configData = vmConfig[0];
2980
+
2981
+ if ( vm.productName === 'Creatr' && fixture.productZones[i].zoneName === 'Mid' ) {
2982
+ configData = vmConfig.find( ( config ) => config.vmNumber === 3 );
2983
+ }
2984
+
2985
+ if ( vm.productName !== 'Creatr' && fixture.productZones[i].zoneName === 'Mid' ) {
2986
+ configData = vmConfig.find( ( config ) => config.vmNumber === 2 );
2987
+ }
2988
+
2989
+ const insertData = {
2990
+ 'clientId': '11',
2991
+ 'productId': 'VMCR',
2992
+ 'type': 'vm',
2993
+ 'productName': vm.productName,
2994
+ 'productHeight': {
2995
+ 'value': configData.vmHeightmm,
2996
+ 'unit': 'mm',
2997
+ },
2998
+ 'productWidth': {
2999
+ 'value': configData.vmWidthmm,
3000
+ 'unit': 'mm',
3001
+ },
3002
+ 'startYPosition': configData.startShelf,
3003
+ 'endYPosition': configData.endShelf,
3004
+ 'xZone': configData.zone,
3005
+ 'fixtureConfigId': fixtureConfig._id,
3006
+ };
3007
+
3008
+ vmTemplate = await planoProductService.upsertOne(
3009
+ { productName: vm.productName, fixtureConfigId: fixtureConfig._id },
3010
+ insertData );
3011
+ }
3012
+
3013
+ const vmData = {
3014
+ 'clientId': layoutDoc.clientId,
3015
+ 'storeName': layoutDoc.storeName,
3016
+ 'storeId': layoutDoc.storeId,
3017
+ 'planoId': layoutDoc.planoId,
3018
+ 'floorId': layoutDoc._id,
3019
+ 'type': 'vm',
3020
+ 'fixtureId': createdFixture._id,
3021
+ 'productId': vmTemplate._id,
3022
+ };
3023
+
3024
+ await planoMappingService.upsertOne(
3025
+ {
3026
+ fixtureId: createdFixture._id,
3027
+ productId: vmTemplate._id,
3028
+ },
3029
+ vmData,
3030
+ );
3031
+ }
3032
+ }
3033
+ }
3034
+
3035
+ for ( let index = 0; index < floorFixtures.length; index++ ) {
3036
+ const fixture = floorFixtures[index];
3037
+ const centerRow = Math.floor( totalRows / 2 );
3038
+
3039
+ const startingX =roundToTwo( ( ( finalXDistance / 2 ) - ( ( maxFixturesPerRow / 2 ) * ( constantFixtureLength / mmToFeet ) ) ) );
3040
+ const detailedStartingX = roundToTwo( ( ( finalXDetailedDistance / 2 ) - ( ( maxFixturesPerRow / 2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) ) );
3041
+
3042
+ const startingY = ( finalYDistance / 2 ) - ( centerRow * ( constantFixtureWidth / mmToFeet ) );
3043
+ const detailedStartingY = ( finalYDetailedDistance / 2 ) - ( centerRow * ( constantDetailedFixtureWidth / mmToFeet ) );
3044
+
3045
+ const colIndex = Math.floor( index / 2 );
3046
+ const rowIndex = index % 2 === 0 ? 1 : 0;
3047
+
3048
+
3049
+ const xPos = roundToTwo( ( startingX + colIndex * ( constantFixtureLength / mmToFeet ) ) );
3050
+ const yPos = roundToTwo( ( startingY + rowIndex * ( constantFixtureWidth / mmToFeet ) ) );
3051
+
3052
+ const detailedXPos = roundToTwo( ( detailedStartingX + colIndex * ( constantDetailedFixtureLength / mmToFeet ) ) );
3053
+ const detailedYPos = roundToTwo( ( detailedStartingY + rowIndex * ( constantDetailedFixtureWidth / mmToFeet ) ) );
3054
+
3055
+ const fixtureConfig = await fixtureConfigService.findOne( { fixtureCategory: fixture.main } );
3056
+ const fixtureConfigDoc = fixtureConfig.toObject();
3057
+
3058
+ const fixtureData = {
3059
+ 'clientId': layoutDoc.clientId,
3060
+ 'storeName': layoutDoc.storeName,
3061
+ 'storeId': layoutDoc.storeId,
3062
+ 'planoId': layoutDoc.planoId,
3063
+ 'floorId': layoutDoc._id,
3064
+ 'fixtureName': `Fixture ${index+1} - ${fixture.main}`,
3065
+ 'fixtureCategory': fixtureConfigDoc.fixtureConfigType,
3066
+ 'fixtureBrandCategory': fixture.centerSubMain ? fixture.centerSubMain : undefined,
3067
+ 'fixtureBrandSubCategory': fixture.centerSubMain ? fixture.centerSubMain : undefined,
3068
+ 'fixtureCode': fixtureConfigDoc?.fixtureCode,
3069
+ 'fixtureCapacity': fixtureConfigDoc?.fixtureCapacity,
3070
+ 'fixtureType': 'floor',
3071
+ 'fixtureHeight': {
3072
+ 'value': 0,
3073
+ 'unit': 'mm',
3074
+ },
3075
+ 'fixtureLength': {
3076
+ 'value': constantFixtureLength,
3077
+ 'unit': 'mm',
3078
+ },
3079
+ 'fixtureWidth': {
3080
+ 'value': constantFixtureWidth,
3081
+ 'unit': 'mm',
3082
+ },
3083
+ 'relativePosition': {
3084
+ 'x': xPos,
3085
+ 'y': yPos,
3086
+ 'unit': 'ft',
3087
+ },
3088
+ 'fixtureNumber': fixtureCounter,
3089
+ 'detailedFixtureLength': {
3090
+ 'value': constantDetailedFixtureLength,
3091
+ 'unit': 'mm',
3092
+ },
3093
+ 'detailedFixtureWidth': {
3094
+ 'value': constantDetailedFixtureWidth,
3095
+ 'unit': 'mm',
3096
+ },
3097
+ 'relativeDetailedPosition': {
3098
+ 'x': detailedXPos,
3099
+ 'y': detailedYPos,
3100
+ 'unit': 'ft',
3101
+ },
3102
+ 'productResolutionLevel': 'L2',
3103
+ 'associatedElementFixtureNumber': index+1,
3104
+ 'fixtureConfigId': fixtureConfigDoc._id,
3105
+ };
3106
+
3107
+ const createdFixture = await storeFixtureService.upsertOne(
3108
+ {
3109
+ floorId: layoutDoc._id,
3110
+ fixtureNumber: fixtureCounter,
3111
+ },
3112
+ fixtureData );
3113
+
3114
+ fixtureCounter +=1;
3115
+
3116
+ if ( !fixtureConfigDoc.shelfConfig.length || fixture.header === 'CL' || fixture.fixtureSubname?.includes( 'CL' ) ) continue;
3117
+
3118
+ for ( let j = 0; j < fixtureConfigDoc.shelfConfig.length; j++ ) {
3119
+ const configShelf = fixtureConfigDoc.shelfConfig[j];
3120
+
3121
+ const shelfSection = fixture.centerSuperSubMain.find( ( product ) => product.isVisualMerchandiser === false || product.isVisualMerchandiser === true );
3122
+
3123
+ const shelfData = {
3124
+ 'clientId': '11',
3125
+ 'storeName': layoutDoc.storeName,
3126
+ 'storeId': layoutDoc.storeId,
3127
+ 'planoId': layoutDoc.planoId,
3128
+ 'floorId': layoutDoc._id,
3129
+ 'fixtureId': createdFixture._id,
3130
+ 'shelfNumber': j + 1,
3131
+ 'shelfOrder': 'LTR',
3132
+ 'shelfCapacity': configShelf.shelfCapacity,
3133
+ 'sectionName': fixture.centerSuperSubMain.find( ( product ) => product.isVisualMerchandiser === true ) ? shelfSection?.name + ' PIDs' : shelfSection?.name,
3134
+ 'shelfSplitup': configShelf?.shelfSplitup ? configShelf.shelfSplitup : 0,
3135
+ };
3136
+
3137
+ await fixtureShelfService.upsertOne(
3138
+ {
3139
+ fixtureId: createdFixture._id,
3140
+ shelfNumber: j + 1,
3141
+ },
3142
+ shelfData,
3143
+ );
3144
+ }
3145
+
3146
+
3147
+ const vm = fixture.centerSuperSubMain.find( ( vm ) => vm.isVisualMerchandiser );
3148
+ const vmConfig = fixtureConfigDoc.vmConfig;
3149
+
3150
+ if ( vm ) {
3151
+ let vmTemplate1 = await planoProductService.findOne( { productName: vm.name, fixtureConfigId: fixtureConfig._id } );
3152
+ if ( !vmTemplate1 ) {
3153
+ const configData1 = vmConfig[0];
3154
+
3155
+
3156
+ const insertData1 = {
3157
+ 'clientId': '11',
3158
+ 'productId': 'VMCR',
3159
+ 'type': 'vm',
3160
+ 'productName': vm.name,
3161
+ 'productHeight': {
3162
+ 'value': configData1.vmHeightmm,
3163
+ 'unit': 'mm',
3164
+ },
3165
+ 'productWidth': {
3166
+ 'value': configData1.vmWidthmm,
3167
+ 'unit': 'mm',
3168
+ },
3169
+ 'startYPosition': configData1.startShelf,
3170
+ 'endYPosition': configData1.endShelf,
3171
+ 'xZone': configData1.zone,
3172
+ 'fixtureConfigId': fixtureConfig._id,
3173
+ };
3174
+
3175
+ vmTemplate1 = await planoProductService.upsertOne(
3176
+ { productName: vm.productName, fixtureConfigId: fixtureConfig._id },
3177
+ insertData1 );
3178
+ }
3179
+
3180
+ const vmData1 = {
3181
+ 'clientId': layoutDoc.clientId,
3182
+ 'storeName': layoutDoc.storeName,
3183
+ 'storeId': layoutDoc.storeId,
3184
+ 'planoId': layoutDoc.planoId,
3185
+ 'floorId': layoutDoc._id,
3186
+ 'type': 'vm',
3187
+ 'fixtureId': createdFixture._id,
3188
+ 'productId': vmTemplate1._id,
3189
+ };
3190
+
3191
+ await planoMappingService.upsertOne(
3192
+ {
3193
+ fixtureId: createdFixture._id,
3194
+ productId: vmTemplate1._id,
3195
+ },
3196
+ vmData1,
3197
+ );
3198
+
3199
+ let vmTemplate2 = await planoProductService.findOne( { productName: ' ', fixtureConfigId: fixtureConfig._id } );
3200
+ if ( !vmTemplate2 ) {
3201
+ const configData2 = vmConfig[1];
3202
+
3203
+
3204
+ const insertData2 = {
3205
+ 'clientId': '11',
3206
+ 'productId': 'VMCR',
3207
+ 'type': 'vm',
3208
+ 'productName': ' ',
3209
+ 'productHeight': {
3210
+ 'value': configData2.vmHeightmm,
3211
+ 'unit': 'mm',
3212
+ },
3213
+ 'productWidth': {
3214
+ 'value': configData2.vmWidthmm,
3215
+ 'unit': 'mm',
3216
+ },
3217
+ 'startYPosition': configData2.startShelf,
3218
+ 'endYPosition': configData2.endShelf,
3219
+ 'xZone': configData2.zone,
3220
+ 'fixtureConfigId': fixtureConfig._id,
3221
+ };
3222
+
3223
+ vmTemplate2 = await planoProductService.upsertOne(
3224
+ { productName: ' ', fixtureConfigId: fixtureConfig._id },
3225
+ insertData2 );
3226
+ }
3227
+
3228
+ const vmData2 = {
3229
+ 'clientId': layoutDoc.clientId,
3230
+ 'storeName': layoutDoc.storeName,
3231
+ 'storeId': layoutDoc.storeId,
3232
+ 'planoId': layoutDoc.planoId,
3233
+ 'floorId': layoutDoc._id,
3234
+ 'type': 'vm',
3235
+ 'fixtureId': createdFixture._id,
3236
+ 'productId': vmTemplate2._id,
3237
+ };
3238
+
3239
+ await planoMappingService.upsertOne(
3240
+ {
3241
+ fixtureId: createdFixture._id,
3242
+ productId: vmTemplate2._id,
3243
+ },
3244
+ vmData2,
3245
+ );
3246
+ }
3247
+ }
3248
+
3249
+ console.log( storeData.storeName );
3250
+ }
3251
+
3252
+ res.sendSuccess( 'Updated Successfully' );
3253
+ } catch ( e ) {
3254
+ logger.error( { functionName: 'createCrestPlanogram', error: e } );
3255
+ return res.sendError( e.message || 'Internal Server Error', 500 );
3256
+ }
3257
+ }
3258
+
3259
+ export async function updateCrestVms( req, res ) {
3260
+ try {
3261
+ if ( req?.headers?.authorization?.split( ' ' )[1] !== 'hwjXfCD6TgMvc82cuSGZ9bNv9MuXsaiQ6uvx' ) {
3262
+ return res.sendError( 'Unauthorized', 401 );
3263
+ }
3264
+
3265
+ if ( !req.files || !req.files.file ) {
3266
+ return res.sendError( 'JSON file is required', 400 );
3267
+ }
3268
+
3269
+ const data = JSON.parse( req.files.file.data.toString( 'utf8' ) );
3270
+
3271
+ const crestData = data.filter( ( item ) => item.data.message === 'FAILURE' );
3272
+
3273
+
3274
+ const returnSet = new Set();
3275
+
3276
+
3277
+ crestData.forEach( ( store ) => {
3278
+ returnSet.add( store.storeName );
3279
+ // store.data.result.forEach( ( wall ) => {
3280
+ // wall.fixtures?.forEach( ( fixture ) => {
3281
+ // fixture.productZones.forEach( ( zone ) => {
3282
+ // zone.products.forEach( ( product ) => {
3283
+
3284
+ // } );
3285
+ // } );
3286
+ // } );
3287
+ // } );
2413
3288
  } );
3289
+
3290
+ return res.sendSuccess( Array.from( returnSet ) );
2414
3291
  } catch ( e ) {
2415
3292
  logger.error( { functionName: 'createCrestPlanogram', error: e } );
2416
3293
  return res.sendError( e.message || 'Internal Server Error', 500 );
2417
3294
  }
2418
3295
  }
2419
3296
 
2420
- const data = {
2421
- 'clientId': '11',
2422
- 'fixtureCode': 'FX01',
2423
- 'fixtureCategory': 'Shelves',
2424
- 'fixtureConfigLength': {
2425
- 'value': 3,
2426
- 'unit': 'ft',
2427
- },
2428
- 'fixtureConfigWidth': {
2429
- 'value': 2,
2430
- 'unit': 'ft',
2431
- },
2432
- 'fixtureConfigType': 'Shelves',
2433
- 'shelfConfig': [
2434
- {
2435
- shelfNumber: 1,
2436
- shelfZone: 'Top',
2437
- shelfSplitup: 0,
2438
- shelfProducts: 10,
2439
- },
2440
- ],
2441
- };