tango-app-api-store-builder 1.0.39 → 1.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tango-app-api-store-builder",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "description": "storeBuilder",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -1929,9 +1929,19 @@ export async function getPlanoRevisionById( req, res ) {
1929
1929
  },
1930
1930
  ];
1931
1931
  let complianceStatus = await planoComplianceService.aggregate( complianceQuery );
1932
+ if ( fixture._id.toString() == '690b3745e4c80c1a0572ae4e' ) {
1933
+ console.log( complianceStatus?.[0]?.status, fixture._id.toString() );
1934
+ }
1932
1935
  shelf.compliance = complianceStatus?.[0]?.status.length ? ( ( complianceStatus?.[0]?.status?.length != shelf.productPerShelf ) || complianceStatus?.[0]?.status?.includes( 'misplaced' ) ) ? 'improper' : 'proper' : 'improper';
1933
1936
  return shelf;
1934
1937
  } ) );
1938
+ fixture.vmConfig = await Promise.all( fixture.vmConfig.map( async ( vm ) => {
1939
+ const vmInfo = await planoVmService.findOne( { _id: vm.vmId } );
1940
+ return {
1941
+ ...vm,
1942
+ ...vmInfo?.toObject(),
1943
+ };
1944
+ } ) );
1935
1945
  return fixture;
1936
1946
  } ) );
1937
1947
  return poly;
@@ -2369,11 +2379,11 @@ export async function createPlanoFromCAD( req, res ) {
2369
2379
  const file = req.files.file;
2370
2380
  const { storeId, floorNumber } = req.body;
2371
2381
 
2372
- if (!req?.files?.file) return res.sendError({ errMsg: 'File is required' }, 400);
2382
+ if ( !req?.files?.file ) return res.sendError( { errMsg: 'File is required' }, 400 );
2373
2383
 
2374
- if (!storeId || !floorNumber) return res.sendError({ errMsg: 'storeId and floorNumber are required' }, 400);
2384
+ if ( !storeId || !floorNumber ) return res.sendError( { errMsg: 'storeId and floorNumber are required' }, 400 );
2375
2385
 
2376
- if (!file.name.endsWith('.dxf')) return res.sendError({ errMsg: 'Only DXF files are allowed' }, 400);
2386
+ if ( !file.name.endsWith( '.dxf' ) ) return res.sendError( { errMsg: 'Only DXF files are allowed' }, 400 );
2377
2387
 
2378
2388
 
2379
2389
  // if (file.size > 20 * 1024 * 1024) {
@@ -2391,7 +2401,7 @@ export async function createPlanoFromCAD( req, res ) {
2391
2401
 
2392
2402
  const fileRes = await fileUpload( fileUploadPayload );
2393
2403
 
2394
- if (!fileRes?.Key) return res.sendError({ errMsg: 'Failed to upload file to storage' }, 502);
2404
+ if ( !fileRes?.Key ) return res.sendError( { errMsg: 'Failed to upload file to storage' }, 502 );
2395
2405
 
2396
2406
  // CAD Extraction
2397
2407
  const dataExtractPayload = {
@@ -2410,8 +2420,8 @@ export async function createPlanoFromCAD( req, res ) {
2410
2420
 
2411
2421
  if ( !cadRes.ok ) {
2412
2422
  const errorText = await cadRes.text();
2413
- logger.error({ cadLambdaError: errorText });
2414
- return res.sendError({ errMsg: 'CAD extraction service failed' }, 502);
2423
+ logger.error( { cadLambdaError: errorText } );
2424
+ return res.sendError( { errMsg: 'CAD extraction service failed' }, 502 );
2415
2425
  }
2416
2426
 
2417
2427
  const cadData = await cadRes.json();
@@ -2426,10 +2436,10 @@ export async function createPlanoFromCAD( req, res ) {
2426
2436
  !cadData?.data?.layoutPolygon
2427
2437
  ) {
2428
2438
  return res.sendError(
2429
- {
2430
- errMsg: 'Invalid CAD layout data',
2431
- errInfo: { cadData, input: dataExtractPayload }
2432
- }, 502);
2439
+ {
2440
+ errMsg: 'Invalid CAD layout data',
2441
+ errInfo: { cadData, input: dataExtractPayload },
2442
+ }, 502 );
2433
2443
  }
2434
2444
 
2435
2445
  const userMeta = {
@@ -2441,9 +2451,9 @@ export async function createPlanoFromCAD( req, res ) {
2441
2451
  // PLANOGRAM
2442
2452
  let planoData = await planoService.findOne( { storeId }, { _id: 1, clientId: 1, storeName: 1 } );
2443
2453
 
2444
- if (!planoData) {
2445
- const storeData = await storeService.findOne({ storeId }, { clientId: 1, storeName: 1 });
2446
- if (!storeData) return res.sendError({ errMsg: 'Unable to find the store to create planogram' }, 400);
2454
+ if ( !planoData ) {
2455
+ const storeData = await storeService.findOne( { storeId }, { clientId: 1, storeName: 1 } );
2456
+ if ( !storeData ) return res.sendError( { errMsg: 'Unable to find the store to create planogram' }, 400 );
2447
2457
 
2448
2458
  const newPlano = {
2449
2459
  clientId: storeData.clientId,
@@ -2458,8 +2468,8 @@ export async function createPlanoFromCAD( req, res ) {
2458
2468
  ...userMeta,
2459
2469
  };
2460
2470
 
2461
- planoData = await planoService.create(newPlano);
2462
- if (!planoData) return res.sendError({ errMsg: 'Failed to create new planogram' }, 400);
2471
+ planoData = await planoService.create( newPlano );
2472
+ if ( !planoData ) return res.sendError( { errMsg: 'Failed to create new planogram' }, 400 );
2463
2473
  }
2464
2474
 
2465
2475
  const floorPayload = {
@@ -2486,8 +2496,8 @@ export async function createPlanoFromCAD( req, res ) {
2486
2496
  ...userMeta,
2487
2497
  };
2488
2498
 
2489
- floorData = await floorService.create(newFloor);
2490
- if (!floorData) return res.sendError({ errMsg: 'Failed to create new floor layout' }, 400);
2499
+ floorData = await floorService.create( newFloor );
2500
+ if ( !floorData ) return res.sendError( { errMsg: 'Failed to create new floor layout' }, 400 );
2491
2501
  }
2492
2502
 
2493
2503
  const meta = {
@@ -2499,36 +2509,36 @@ export async function createPlanoFromCAD( req, res ) {
2499
2509
  };
2500
2510
 
2501
2511
  // Create Fixtures
2502
- const processedFixtures = computeStoreFixtures(cadData.data, meta);
2512
+ const processedFixtures = computeStoreFixtures( cadData.data, meta );
2503
2513
  const storeFixtures = [];
2504
2514
  const storeFixtureShelves = [];
2505
2515
 
2506
2516
  try {
2507
- await Promise.all([
2508
- fixtureShelfService.deleteMany({ floorId: meta.floorId }),
2509
- storeFixtureService.deleteMany({ floorId: meta.floorId }),
2510
- ]);
2517
+ await Promise.all( [
2518
+ fixtureShelfService.deleteMany( { floorId: meta.floorId } ),
2519
+ storeFixtureService.deleteMany( { floorId: meta.floorId } ),
2520
+ ] );
2511
2521
 
2512
- for (let i = 0; i < processedFixtures.length; i++) {
2522
+ for ( let i = 0; i < processedFixtures.length; i++ ) {
2513
2523
  const fix = processedFixtures[i];
2514
- const fixRes = await storeFixtureService.create(fix);
2515
- if (fixRes) {
2524
+ const fixRes = await storeFixtureService.create( fix );
2525
+ if ( fixRes ) {
2516
2526
  const fixture = fixRes.toObject();
2517
- storeFixtures.push({ ...fixture, shelfConfig: fix.shelfConfig });
2527
+ storeFixtures.push( { ...fixture, shelfConfig: fix.shelfConfig } );
2518
2528
 
2519
- const shelvesToCreate = fix?.shelfConfig?.map(s => {
2529
+ const shelvesToCreate = fix?.shelfConfig?.map( ( s ) => {
2520
2530
  return {
2521
2531
  ...s,
2522
2532
  ...meta,
2523
- fixtureId: fixture._id
2524
- }
2525
- })
2526
- storeFixtureShelves.push(...shelvesToCreate);
2533
+ fixtureId: fixture._id,
2534
+ };
2535
+ } );
2536
+ storeFixtureShelves.push( ...shelvesToCreate );
2527
2537
  }
2528
2538
  }
2529
2539
 
2530
- if(storeFixtureShelves.length){
2531
- await fixtureShelfService.insertMany(storeFixtureShelves);
2540
+ if ( storeFixtureShelves.length ) {
2541
+ await fixtureShelfService.insertMany( storeFixtureShelves );
2532
2542
  }
2533
2543
  } catch ( e ) {
2534
2544
  logger.error( {
@@ -2539,25 +2549,24 @@ export async function createPlanoFromCAD( req, res ) {
2539
2549
 
2540
2550
 
2541
2551
  try {
2542
- const updateStoreFixtures = await processFixtureTemplates({ fixtures: storeFixtures });
2552
+ const updateStoreFixtures = await processFixtureTemplates( { fixtures: storeFixtures } );
2543
2553
 
2544
- if (updateStoreFixtures.length) await storeFixtureService.bulkUpsert(updateStoreFixtures);
2545
- } catch (e) {
2546
- logger.error({
2554
+ if ( updateStoreFixtures.length ) await storeFixtureService.bulkUpsert( updateStoreFixtures );
2555
+ } catch ( e ) {
2556
+ logger.error( {
2547
2557
  functionName: 'createPlanoFromCAD [Update Fixtures]',
2548
2558
  error: e,
2549
- });
2559
+ } );
2550
2560
  }
2551
2561
 
2552
- return res.sendSuccess(meta);
2553
-
2554
- } catch (error) {
2555
- logger.error({
2562
+ return res.sendSuccess( meta );
2563
+ } catch ( error ) {
2564
+ logger.error( {
2556
2565
  functionName: 'createPlanoFromCAD',
2557
2566
  error,
2558
2567
  } );
2559
2568
 
2560
- return res.sendError({ errMsg: 'Failed to create planogram.' }, 500);
2569
+ return res.sendError( { errMsg: 'Failed to create planogram.' }, 500 );
2561
2570
  }
2562
2571
  }
2563
2572
 
@@ -2602,7 +2611,7 @@ function transformFixtureData( data ) {
2602
2611
  associatedElementNumber: data?.wallNumber,
2603
2612
  associatedElementFixtureNumber: data.fixtureNumber,
2604
2613
  associatedElementType: f?.associatedElementType === 'wall' ? 'wall' : undefined,
2605
- productBrandName: Array.isArray(f?.productBrandName) ? f?.productBrandName?.map(normalizeCadText) : normalizeCadText(f?.productBrandName),
2614
+ productBrandName: Array.isArray( f?.productBrandName ) ? f?.productBrandName?.map( normalizeCadText ) : normalizeCadText( f?.productBrandName ),
2606
2615
  shelfConfig: f?.shelfConfig ?? [],
2607
2616
  fixtureHeight: {
2608
2617
  value: 0,
@@ -2625,10 +2634,10 @@ function transformFixtureData( data ) {
2625
2634
 
2626
2635
  function computeStoreFixtures( data, meta ) {
2627
2636
  let fixtures = [];
2628
- const walls = (data?.layoutPolygon ?? []).filter(e => e.elementType === 'wall').sort((a,b) => a.elementNumber - b.elementNumber);
2629
- const allFixtures = walls.flatMap(w => w?.fixtures);
2630
- allFixtures.forEach((f,i) => f.fixtureNumber = i + 1);
2631
-
2637
+ const walls = ( data?.layoutPolygon ?? [] ).filter( ( e ) => e.elementType === 'wall' ).sort( ( a, b ) => a.elementNumber - b.elementNumber );
2638
+ const allFixtures = walls.flatMap( ( w ) => w?.fixtures );
2639
+ allFixtures.forEach( ( f, i ) => f.fixtureNumber = i + 1 );
2640
+
2632
2641
  for ( let i = 1; i <= walls.length; i++ ) {
2633
2642
  const w = walls[i - 1];
2634
2643
  const wFixtures = w?.fixtures ?? [];
@@ -2664,11 +2673,11 @@ function computeStoreFixtures( data, meta ) {
2664
2673
  return fixtures;
2665
2674
  }
2666
2675
 
2667
- async function processFixtureTemplates(data) {
2676
+ async function processFixtureTemplates( data ) {
2668
2677
  const updateStoreFixtures = [];
2669
2678
  const newFixtureTemplates = [];
2670
2679
 
2671
- for (let i = 0; i < data.fixtures.length; i++) {
2680
+ for ( let i = 0; i < data.fixtures.length; i++ ) {
2672
2681
  let fixture = data.fixtures[i];
2673
2682
  const mapKey = `${fixture.fixtureCategory}${fixture.fixtureWidth.value}${fixture.fixtureWidth.unit}${fixture.header.label}`;
2674
2683
 
@@ -2700,13 +2709,13 @@ async function processFixtureTemplates(data) {
2700
2709
  },
2701
2710
  ];
2702
2711
 
2703
- let [subTemplate, masterTemplate] = await Promise.all([
2704
- await fixtureConfigService.aggregate(subTemplateQuery),
2705
- await fixtureConfigService.aggregate(masterTemplateQuery),
2706
- ]);
2712
+ let [ subTemplate, masterTemplate ] = await Promise.all( [
2713
+ await fixtureConfigService.aggregate( subTemplateQuery ),
2714
+ await fixtureConfigService.aggregate( masterTemplateQuery ),
2715
+ ] );
2707
2716
 
2708
2717
 
2709
- if (!subTemplate?.length) {
2718
+ if ( !subTemplate?.length ) {
2710
2719
  const templateGroupName = fixture.header.label;
2711
2720
  let templateIndex = 1;
2712
2721
 
@@ -2716,25 +2725,25 @@ async function processFixtureTemplates(data) {
2716
2725
  status: 'complete',
2717
2726
  templateIndex: masterTemplate.length ? masterTemplate.length + 1 : 1,
2718
2727
  crestMapKey: mapKey,
2719
- }
2728
+ };
2720
2729
 
2721
2730
  delete newTemplateData._id;
2722
2731
 
2723
- if (!masterTemplate.length) {
2732
+ if ( !masterTemplate.length ) {
2724
2733
  const newMasterTemplate = {
2725
2734
  ...newTemplateData,
2726
2735
  fixtureName: `${newTemplateData?.header?.label}-${newTemplateData?.fixtureCategory}`,
2727
2736
  templateType: 'master',
2728
2737
  crestMapKey: mapKey,
2729
- }
2730
- masterTemplate = await fixtureConfigService.create(newMasterTemplate);
2738
+ };
2739
+ masterTemplate = await fixtureConfigService.create( newMasterTemplate );
2731
2740
  } else {
2732
2741
  masterTemplate = masterTemplate[0];
2733
2742
 
2734
2743
  const masterTempIndexQuery = [
2735
2744
  {
2736
2745
  $match: {
2737
- masterTemplateId: new mongoose.Types.ObjectId(masterTemplate._id),
2746
+ masterTemplateId: new mongoose.Types.ObjectId( masterTemplate._id ),
2738
2747
  },
2739
2748
  }, {
2740
2749
  $group: {
@@ -2744,7 +2753,7 @@ async function processFixtureTemplates(data) {
2744
2753
  },
2745
2754
  ];
2746
2755
 
2747
- const getMaxTempIndex = await fixtureConfigService.aggregate(masterTempIndexQuery);
2756
+ const getMaxTempIndex = await fixtureConfigService.aggregate( masterTempIndexQuery );
2748
2757
  templateIndex = getMaxTempIndex?.[0]?.tempId + 1;
2749
2758
  }
2750
2759
 
@@ -2755,7 +2764,7 @@ async function processFixtureTemplates(data) {
2755
2764
  newTemplateData.createdAt = new Date();
2756
2765
  newTemplateData.updatedAt = new Date();
2757
2766
 
2758
- subTemplate = await fixtureConfigService.create(newTemplateData);
2767
+ subTemplate = await fixtureConfigService.create( newTemplateData );
2759
2768
 
2760
2769
  fixture.fixtureConfigId = subTemplate._id;
2761
2770
  fixture.masterTemplateId = masterTemplate._id;
@@ -2767,9 +2776,9 @@ async function processFixtureTemplates(data) {
2767
2776
  fixture.masterTemplateId = sub?.masterTemplateId;
2768
2777
  }
2769
2778
 
2770
- newFixtureTemplates.push(subTemplate);
2771
- updateStoreFixtures.push(fixture);
2779
+ newFixtureTemplates.push( subTemplate );
2780
+ updateStoreFixtures.push( fixture );
2772
2781
  }
2773
2782
 
2774
2783
  return updateStoreFixtures;
2775
- }
2784
+ }
@@ -15434,3 +15434,376 @@ export async function update4487Inventory( req, res ) {
15434
15434
  return res.sendError( e.message || 'Internal Server Error', 500 );
15435
15435
  }
15436
15436
  }
15437
+
15438
+ export async function insertAntennaMappingData( req, res ) {
15439
+ try {
15440
+ const storeName = "LKST4487";
15441
+ let successCount = 0;
15442
+ let errorCount = 0;
15443
+ const errors = [];
15444
+
15445
+ const antennaMapingData = [
15446
+ {
15447
+ "fixtureNumber": 14,
15448
+ "readerId": "a4:e8:a3:91:7f:01",
15449
+ "storageBoxAntennaNo": [ 1, 2, 3, 6, 7 ],
15450
+ "shelfConfig": [
15451
+ { "shelfNumber": 1, "antennaNo": [ 18 ] },
15452
+ { "shelfNumber": 2, "antennaNo": [ 16 ] },
15453
+ { "shelfNumber": 3, "antennaNo": [ 15 ] },
15454
+ { "shelfNumber": 4, "antennaNo": [ 20 ] },
15455
+ { "shelfNumber": 5, "antennaNo": [ 19 ] },
15456
+ { "shelfNumber": 6, "antennaNo": [ 17 ] },
15457
+ { "shelfNumber": 7, "antennaNo": [ 12 ] },
15458
+ { "shelfNumber": 8, "antennaNo": [ 10 ] },
15459
+ ],
15460
+ },
15461
+ {
15462
+ "fixtureNumber": 15,
15463
+ "readerId": "a4:e8:a3:91:7f:01",
15464
+ "storageBoxAntennaNo": [ 8, 9, 11, 13, 14 ],
15465
+ "shelfConfig": [
15466
+ { "shelfNumber": 1, "antennaNo": [ 26 ] },
15467
+ { "shelfNumber": 2, "antennaNo": [ 25 ] },
15468
+ { "shelfNumber": 3, "antennaNo": [ 24 ] },
15469
+ { "shelfNumber": 4, "antennaNo": [ 23 ] },
15470
+ { "shelfNumber": 5, "antennaNo": [ 22 ] },
15471
+ { "shelfNumber": 6, "antennaNo": [ 21 ] },
15472
+ { "shelfNumber": 7, "antennaNo": [ 4 ] },
15473
+ { "shelfNumber": 8, "antennaNo": [ 5 ] },
15474
+ ],
15475
+ },
15476
+ {
15477
+ "fixtureNumber": 3,
15478
+ "wallNumber": 1,
15479
+ "readerId": "a4:e8:a3:91:7f:01",
15480
+ "storageBoxAntennaNo": [ 25, 26, 27, 28, 29 ],
15481
+ "shelfConfig": [
15482
+ { "shelfNumber": 1, "antennaNo": [ 15 ] },
15483
+ { "shelfNumber": 2, "antennaNo": [ 16 ] },
15484
+ { "shelfNumber": 3, "antennaNo": [ 21, 19 ] },
15485
+ { "shelfNumber": 4, "antennaNo": [ 17, 18 ] },
15486
+ { "shelfNumber": 5, "antennaNo": [ 20, 22 ] },
15487
+ { "shelfNumber": 6, "antennaNo": [ 23, 24 ] },
15488
+ ],
15489
+ },
15490
+ {
15491
+ "fixtureNumber": 4,
15492
+ "wallNumber": 1,
15493
+ "readerId": "a4:e8:a3:91:7f:01",
15494
+ "storageBoxAntennaNo": [ 5, 6, 9, 13 ],
15495
+ "shelfConfig": [
15496
+ { "shelfNumber": 1, "antennaNo": [ 4 ] },
15497
+ { "shelfNumber": 2, "antennaNo": [ 3 ] },
15498
+ { "shelfNumber": 3, "antennaNo": [ 1, 2 ] },
15499
+ { "shelfNumber": 4, "antennaNo": [ 10, 12 ] },
15500
+ { "shelfNumber": 5, "antennaNo": [ 7, 14 ] },
15501
+ { "shelfNumber": 6, "antennaNo": [ 8 ] },
15502
+ ],
15503
+ },
15504
+ {
15505
+ "fixtureNumber": 5,
15506
+ "readerId": "a4:e8:a3:91:7f:03",
15507
+ "storageBoxAntennaNo": [ 2, 5, 6, 7, 3 ],
15508
+ "shelfConfig": [
15509
+ { "shelfNumber": 1, "antennaNo": [ 10 ] },
15510
+ { "shelfNumber": 2, "antennaNo": [ 11 ] },
15511
+ { "shelfNumber": 3, "antennaNo": [ 9, 16 ] },
15512
+ { "shelfNumber": 4, "antennaNo": [ 20, 21 ] },
15513
+ { "shelfNumber": 5, "antennaNo": [ 18, 19 ] },
15514
+ { "shelfNumber": 6, "antennaNo": [ 25, 30 ] },
15515
+ ],
15516
+ },
15517
+ {
15518
+ "fixtureNumber": 6,
15519
+ "readerId": "a4:e8:a3:91:7f:03",
15520
+ "storageBoxAntennaNo": [ 26, 27, 28, 29, 31 ],
15521
+ "shelfConfig": [
15522
+ { "shelfNumber": 1, "antennaNo": [ 24 ] },
15523
+ { "shelfNumber": 2, "antennaNo": [ 17 ] },
15524
+ { "shelfNumber": 3, "antennaNo": [ 22, 23 ] },
15525
+ { "shelfNumber": 4, "antennaNo": [ 12, 13 ] },
15526
+ { "shelfNumber": 5, "antennaNo": [ 14, 15 ] },
15527
+ { "shelfNumber": 6, "antennaNo": [ 1, 4 ] },
15528
+ ],
15529
+ },
15530
+ {
15531
+ "fixtureNumber": 1,
15532
+ "readerId": "a4:e8:a3:91:7f:00",
15533
+ "storageBoxAntennaNo": [ 18, 19, 20, 21, 22 ],
15534
+ "shelfConfig": [
15535
+ { "shelfNumber": 1, "antennaNo": [ 28 ] },
15536
+ { "shelfNumber": 2, "antennaNo": [ 25 ] },
15537
+ { "shelfNumber": 3, "antennaNo": [ 30, 31 ] },
15538
+ { "shelfNumber": 4, "antennaNo": [ 29, 32 ] },
15539
+ { "shelfNumber": 5, "antennaNo": [ 26, 27 ] },
15540
+ { "shelfNumber": 6, "antennaNo": [ 16, 17 ] },
15541
+ ],
15542
+ },
15543
+ {
15544
+ "fixtureNumber": 2,
15545
+ "wallNumber": 1,
15546
+ "readerId": "a4:e8:a3:91:7f:00",
15547
+ "storageBoxAntennaNo": [ 7, 8, 9, 10, 11 ],
15548
+ "shelfConfig": [
15549
+ { "shelfNumber": 1, "antennaNo": [ 3 ] },
15550
+ { "shelfNumber": 2, "antennaNo": [ 6 ] },
15551
+ { "shelfNumber": 3, "antennaNo": [ 4, 5 ] },
15552
+ { "shelfNumber": 4, "antennaNo": [ 1, 2 ] },
15553
+ { "shelfNumber": 5, "antennaNo": [ 14, 15 ] },
15554
+ { "shelfNumber": 6, "antennaNo": [ 12, 13 ] },
15555
+ ],
15556
+ },
15557
+ {
15558
+ "fixtureNumber": 11,
15559
+ "wallNumber": 3,
15560
+ "readerId": "a4:e8:a3:91:7f:02",
15561
+ "storageBoxAntennaNo": [ 8, 9, 12, 13, 14 ],
15562
+ "shelfConfig": [
15563
+ { "shelfNumber": 1, "antennaNo": [ 15 ] },
15564
+ { "shelfNumber": 2, "antennaNo": [ 7 ] },
15565
+ { "shelfNumber": 3, "antennaNo": [ 3 ] },
15566
+ { "shelfNumber": 4, "antennaNo": [ 2 ] },
15567
+ { "shelfNumber": 5, "antennaNo": [ 1 ] },
15568
+ { "shelfNumber": 6, "antennaNo": [ 6, 7 ] },
15569
+ { "shelfNumber": 7, "antennaNo": [ 5, 4 ] },
15570
+ { "shelfNumber": 8, "antennaNo": [ 10, 11 ] },
15571
+ ],
15572
+ },
15573
+ {
15574
+ "fixtureNumber": 9,
15575
+ "wallNumber": 3,
15576
+ "readerId": "a4:e8:a3:91:7f:04",
15577
+ "storageBoxAntennaNo": [ 17, 18, 19, 20, 21 ],
15578
+ "shelfConfig": [
15579
+ { "shelfNumber": 1, "antennaNo": [ 26 ] },
15580
+ { "shelfNumber": 2, "antennaNo": [ 24 ] },
15581
+ { "shelfNumber": 3, "antennaNo": [ 25 ] },
15582
+ { "shelfNumber": 4, "antennaNo": [ 23 ] },
15583
+ { "shelfNumber": 5, "antennaNo": [ 30 ] },
15584
+ { "shelfNumber": 6, "antennaNo": [ 29 ] },
15585
+ { "shelfNumber": 7, "antennaNo": [ 27, 28 ] },
15586
+ { "shelfNumber": 8, "antennaNo": [ 22, 8 ] },
15587
+ ],
15588
+ },
15589
+ {
15590
+ "fixtureNumber": 10,
15591
+ "readerId": "a4:e8:a3:91:7f:04",
15592
+ "storageBoxAntennaNo": [ 1, 2, 3, 4, 5 ],
15593
+ "shelfConfig": [
15594
+ { "shelfNumber": 1, "antennaNo": [ 13 ] },
15595
+ { "shelfNumber": 2, "antennaNo": [ 14 ] },
15596
+ { "shelfNumber": 3, "antennaNo": [ 15 ] },
15597
+ { "shelfNumber": 4, "antennaNo": [ 16 ] },
15598
+ { "shelfNumber": 5, "antennaNo": [ 12 ] },
15599
+ { "shelfNumber": 6, "antennaNo": [ 9 ] },
15600
+ { "shelfNumber": 7, "antennaNo": [ 10, 11 ] },
15601
+ { "shelfNumber": 8, "antennaNo": [ 6, 7 ] },
15602
+ ],
15603
+ },
15604
+ {
15605
+ "fixtureNumber": 12,
15606
+ "wallNumber": 3,
15607
+ "readerId": "a4:e8:a3:91:7f:04",
15608
+ "storageBoxAntennaNo": [ 14, 15, 16, 17, 18 ],
15609
+ "shelfConfig": [
15610
+ { "shelfNumber": 1, "antennaNo": [ 25 ] },
15611
+ { "shelfNumber": 2, "antennaNo": [ 26 ] },
15612
+ { "shelfNumber": 3, "antennaNo": [ 27 ] },
15613
+ { "shelfNumber": 4, "antennaNo": [ 21 ] },
15614
+ { "shelfNumber": 5, "antennaNo": [ 24 ] },
15615
+ { "shelfNumber": 6, "antennaNo": [ 22 ] },
15616
+ { "shelfNumber": 7, "antennaNo": [ 20 ] },
15617
+ { "shelfNumber": 8, "antennaNo": [ 19 ] },
15618
+ ],
15619
+ },
15620
+ {
15621
+ "fixtureNumber": 13,
15622
+ "wallNumber": 3,
15623
+ "readerId": "a4:e8:a3:91:7f:04",
15624
+ "storageBoxAntennaNo": [ 1, 2, 5, 6, 7 ],
15625
+ "shelfConfig": [
15626
+ { "shelfNumber": 1, "antennaNo": [ 13 ] },
15627
+ { "shelfNumber": 2, "antennaNo": [ 11 ] },
15628
+ { "shelfNumber": 3, "antennaNo": [ 10 ] },
15629
+ { "shelfNumber": 4, "antennaNo": [ 8 ] },
15630
+ { "shelfNumber": 5, "antennaNo": [ 12 ] },
15631
+ { "shelfNumber": 6, "antennaNo": [ 9 ] },
15632
+ { "shelfNumber": 7, "antennaNo": [ 4 ] },
15633
+ { "shelfNumber": 8, "antennaNo": [ 3 ] },
15634
+ ],
15635
+ },
15636
+ {
15637
+ "fixtureNumber": 7,
15638
+ "wallNumber": 2,
15639
+ "readerId": "a4:e8:a3:8e:85:43",
15640
+ "storageBoxAntennaNo": [ 7 ],
15641
+ "shelfConfig": [
15642
+ { "shelfNumber": 1, "antennaNo": [ 6 ] },
15643
+ { "shelfNumber": 2, "antennaNo": [ 8 ] },
15644
+ { "shelfNumber": 3, "antennaNo": [ 5 ] },
15645
+ { "shelfNumber": 4, "antennaNo": [ 4 ] },
15646
+ { "shelfNumber": 5, "antennaNo": [ 3 ] },
15647
+ { "shelfNumber": 6, "antennaNo": [ 2 ] },
15648
+ { "shelfNumber": 7, "antennaNo": [ 1 ] },
15649
+ ],
15650
+ },
15651
+ {
15652
+ "fixtureNumber": 8,
15653
+ "wallNumber": 2,
15654
+ "readerId": "a4:e8:a3:8e:85:43",
15655
+ "storageBoxAntennaNo": [ 9, 10, 11, 12, 13 ],
15656
+ "shelfConfig": [
15657
+ { "shelfNumber": 1, "antennaNo": [ 21 ] },
15658
+ { "shelfNumber": 2, "antennaNo": [ 22 ] },
15659
+ { "shelfNumber": 3, "antennaNo": [ 18, 24 ] },
15660
+ { "shelfNumber": 4, "antennaNo": [ 19, 20 ] },
15661
+ { "shelfNumber": 5, "antennaNo": [ 14, 15 ] },
15662
+ { "shelfNumber": 6, "antennaNo": [ 16, 17 ] },
15663
+ { "shelfNumber": 7, "antennaNo": [] },
15664
+ ],
15665
+ },
15666
+ {
15667
+ "fixtureNumber": 16,
15668
+ "readerId": "A4-E8-A3-91-7E-FC",
15669
+ "storageBoxAntennaNo": [ 11, 14, 8 ],
15670
+ "shelfConfig": [
15671
+ { "shelfNumber": 1, "antennaNo": [ 15 ] },
15672
+ { "shelfNumber": 2, "antennaNo": [ 12, 18 ] },
15673
+ { "shelfNumber": 3, "antennaNo": [ 9, 10 ] },
15674
+ ],
15675
+ },
15676
+ {
15677
+ "fixtureNumber": 17,
15678
+ "readerId": "A4-E8-A3-91-7E-FC",
15679
+ "storageBoxAntennaNo": [ 2, 3, 1 ],
15680
+ "shelfConfig": [
15681
+ { "shelfNumber": 1, "antennaNo": [ 5, 16 ] },
15682
+ { "shelfNumber": 2, "antennaNo": [ 4, 13 ] },
15683
+ { "shelfNumber": 3, "antennaNo": [ 17, 7 ] },
15684
+ ],
15685
+ },
15686
+ {
15687
+ "fixtureNumber": 19,
15688
+ "readerId": "A4-E8-A3-91-7E-FC",
15689
+ "storageBoxAntennaNo": [],
15690
+ "shelfConfig": [
15691
+ { "shelfNumber": 1, "antennaNo": [ 19, 25 ] },
15692
+ { "shelfNumber": 2, "antennaNo": [ 26 ] },
15693
+ ],
15694
+ },
15695
+ {
15696
+ "fixtureNumber": 18,
15697
+ "wallNumber": null,
15698
+ "readerId": "A4-E8-A3-91-7F-05",
15699
+ "storageBoxAntennaNo": [ 17, 18 ],
15700
+ "shelfConfig": [
15701
+ { "shelfNumber": 1, "antennaNo": [ 21, 22 ] },
15702
+ { "shelfNumber": 2, "antennaNo": [ 26 ] },
15703
+ { "shelfNumber": 3, "antennaNo": [ 19, 20 ] },
15704
+ ],
15705
+ },
15706
+ {
15707
+ "fixtureNumber": 20,
15708
+ "wallNumber": null,
15709
+ "readerId": "A4-E8-A3-91-7F-05",
15710
+ "storageBoxAntennaNo": [ 8, 2, 3 ],
15711
+ "shelfConfig": [
15712
+ { "shelfNumber": 1, "antennaNo": [ 10, 11 ] },
15713
+ { "shelfNumber": 2, "antennaNo": [ 7, 15 ] },
15714
+ { "shelfNumber": 3, "antennaNo": [ 5, 16 ] },
15715
+ ],
15716
+ },
15717
+ {
15718
+ "fixtureNumber": 21,
15719
+ "wallNumber": null,
15720
+ "readerId": "A4-E8-A3-91-7F-05",
15721
+ "storageBoxAntennaNo": [],
15722
+ "shelfConfig": [
15723
+ { "shelfNumber": 1, "antennaNo": [ 12 ] },
15724
+ { "shelfNumber": 2, "antennaNo": [ 9, 14 ] },
15725
+ { "shelfNumber": 3, "antennaNo": [ 1, 13 ] },
15726
+ ],
15727
+ },
15728
+
15729
+ ];
15730
+ for ( const mappingData of antennaMapingData ) {
15731
+ try {
15732
+ const { fixtureNumber, readerId, storageBoxAntennaNo, shelfConfig } = mappingData;
15733
+
15734
+ const query = {
15735
+ storeName: storeName,
15736
+ fixtureNumber: fixtureNumber,
15737
+ };
15738
+
15739
+ const fixture = await storeFixtureService.findOne( query );
15740
+
15741
+ if ( !fixture ) {
15742
+ const errorMsg = `Fixture not found for storeName: ${storeName}, fixtureNumber: ${fixtureNumber}`;
15743
+ console.warn( errorMsg );
15744
+ errors.push( errorMsg );
15745
+ errorCount++;
15746
+ continue;
15747
+ }
15748
+
15749
+ const fixtureId = fixture._id;
15750
+
15751
+ if ( readerId ) {
15752
+ await storeFixtureService.updateOne(
15753
+ { _id: fixtureId },
15754
+ { $set: { readerId: readerId } },
15755
+ );
15756
+ console.log( `Updated fixture ${fixtureNumber} readerId:`, readerId );
15757
+ }
15758
+
15759
+ if ( storageBoxAntennaNo && Array.isArray( storageBoxAntennaNo ) && storageBoxAntennaNo.length > 0 ) {
15760
+ await storeFixtureService.updateOne(
15761
+ { _id: fixtureId },
15762
+ { 'footer.antennaNo': storageBoxAntennaNo },
15763
+ );
15764
+ console.log( `Updated fixture ${fixtureNumber} footer.antennaNo:`, storageBoxAntennaNo );
15765
+ }
15766
+
15767
+ if ( shelfConfig && Array.isArray( shelfConfig ) && shelfConfig.length > 0 ) {
15768
+ for ( const shelfMapping of shelfConfig ) {
15769
+ const { shelfNumber, antennaNo } = shelfMapping;
15770
+
15771
+ if ( !shelfNumber || !antennaNo || !Array.isArray( antennaNo ) ) {
15772
+ console.warn( `Invalid shelf config for fixture ${fixtureNumber}, shelf ${shelfNumber}` );
15773
+ continue;
15774
+ }
15775
+
15776
+ const shelf = await fixtureShelfService.findOne( {
15777
+ fixtureId: fixtureId,
15778
+ shelfNumber: shelfNumber,
15779
+ } );
15780
+
15781
+ if ( shelf ) {
15782
+ await fixtureShelfService.updateOne(
15783
+ { _id: shelf._id },
15784
+ { antennaNo: antennaNo },
15785
+ );
15786
+ console.log( `Updated fixture ${fixtureNumber}, shelf ${shelfNumber} with antennaNo:`, antennaNo );
15787
+ } else {
15788
+ const errorMsg = `Shelf not found for fixture ${fixtureNumber}, shelfNumber: ${shelfNumber}`;
15789
+ console.warn( errorMsg );
15790
+ errors.push( errorMsg );
15791
+ }
15792
+ }
15793
+ }
15794
+
15795
+ successCount++;
15796
+ } catch ( error ) {
15797
+ const errorMsg = `Error processing fixture ${mappingData.fixtureNumber}: ${error.message}`;
15798
+ console.error( errorMsg, error );
15799
+ errors.push( errorMsg );
15800
+ errorCount++;
15801
+ }
15802
+ }
15803
+ } catch ( e ) {
15804
+ logger.error( { functionName: 'insertAntennaMappingData', error: e } );
15805
+ return res.sendError( e.message || 'Internal Server Error', 500 );
15806
+ }
15807
+ }
15808
+
15809
+ // insertAntennaMappingData();
@@ -27,6 +27,8 @@ import * as fixtureConfigDuplicateService from '../service/fixtureConfigDuplicat
27
27
  import * as planoVmDuplicateService from '../service/planoVmDuplicate.service.js';
28
28
  import advancedFormat from 'dayjs/plugin/advancedFormat.js';
29
29
  import * as planoRevisionService from '../service/planoRevision.service.js';
30
+ // import xlsx from 'xlsx';
31
+ // import fs from 'fs';
30
32
 
31
33
  dayjs.extend( advancedFormat );
32
34
  dayjs.extend( utc );
@@ -8011,69 +8013,87 @@ export async function updateProductMapping( req, res ) {
8011
8013
  await Promise.all( storeDetails.map( async ( store ) => {
8012
8014
  // let number = Number( store.storeName.replace( /\D/g, '' ) );
8013
8015
  let getLatestData = await fetch( `${JSON.parse( process.env.LAMBDAURL )?.getRFIDDetails}/${store.storeName}`, { method: 'GET' } );
8014
-
8015
8016
  if ( getLatestData.status == 200 ) {
8016
8017
  let response = await getLatestData.json();
8017
- let data = response.mac_details.flatMap( ( ele ) => ele.body );
8018
+ logger.error( { data: response } );
8019
+ // let data = response.mac_details.flatMap( ( ele ) => ele.body );
8018
8020
  let mappingData = [];
8019
8021
  let complianceData = [];
8020
- await Promise.all( data.map( async ( ele ) => {
8021
- if ( ele?.data ) {
8022
- let fixtureDetails = await storeFixtureService.find( { readerId: ele?.data?.MAC } );
8023
- if ( fixtureDetails.length ) {
8024
- let getShelfDetails = await fixtureShelfService.findOne( { fixtureId: { $in: fixtureDetails?.map( ( fixt ) => fixt._id ) }, antennaNo: { $in: [ ele?.data?.antenna ] } } );
8025
- if ( !getShelfDetails ) {
8026
- fixtureDetails = fixtureDetails.find( ( fixt ) => fixt?.footer?.antennaNo?.includes( ele.data.antenna ) );
8027
- if ( fixtureDetails ) {
8028
- getShelfDetails = { shelfType: 'storage' };
8022
+ let excelData = [];
8023
+ for ( let macDetails of response?.mac_details ) {
8024
+ let fixtureDetails = await storeFixtureService.find( { readerId: macDetails?.MAC } );
8025
+ if ( fixtureDetails.length ) {
8026
+ let data = macDetails?.body ?? [];
8027
+ await Promise.all( data.map( async ( ele ) => {
8028
+ if ( ele?.data ) {
8029
+ let getShelfDetails = await fixtureShelfService.findOne( { fixtureId: { $in: fixtureDetails?.map( ( fixt ) => fixt._id ) }, antennaNo: { $in: [ ele?.data?.antenna ] } } );
8030
+ let fixtureShelfDetails;
8031
+ if ( !getShelfDetails ) {
8032
+ logger.error( { data: macDetails?.MAC } );
8033
+ fixtureShelfDetails = fixtureDetails.find( ( fixt ) => fixt?.footer?.antennaNo?.includes( ele.data.antenna ) );
8034
+ if ( fixtureDetails ) {
8035
+ getShelfDetails = { shelfType: 'storage' };
8036
+ }
8037
+ } else {
8038
+ fixtureShelfDetails = fixtureDetails.find( ( fixt ) => fixt._id.toString() == getShelfDetails.fixtureId.toString() );
8029
8039
  }
8030
- } else {
8031
- fixtureDetails = fixtureDetails.find( ( fixt ) => fixt._id.toString() == getShelfDetails.fixtureId.toString() );
8032
- }
8033
- if ( getShelfDetails ) {
8034
- let productDetails = await planoProductService.findOne( { productId: ele.data.idText } );
8035
- if ( productDetails ) {
8036
- let data = {
8037
- clientId: req.body.clientId,
8038
- storeName: fixtureDetails.storeName,
8039
- storeId: fixtureDetails.storeId,
8040
- type: getShelfDetails?.shelfType != 'storage' ? 'product' : 'storageBox',
8041
- productId: productDetails._id,
8042
- pid: productDetails.productId,
8043
- planoId: fixtureDetails.planoId,
8044
- floorId: fixtureDetails.floorId,
8045
- fixtureId: fixtureDetails._id,
8046
- ...( getShelfDetails?.shelfType != 'storage' && { shelfId: getShelfDetails._id } ),
8047
- };
8048
- mappingData.push( data );
8049
-
8050
- // let mappingDetails = await planoMappingService.create( data );
8051
-
8052
- let productData = {
8053
- 'planoMappingId': '',
8054
- 'date': dayjs().format( 'YYYY-MM-DD' ),
8055
- 'clientId': req.body.clientId,
8056
- 'compliance': getShelfDetails?.shelfType != 'storage' ? getShelfDetails.productBrandName.includes( productDetails.brandName ) ? 'proper' : 'misplaced' : '',
8057
- 'fixtureId': fixtureDetails._id,
8058
- 'floorId': fixtureDetails.floorId,
8059
- 'planoId': fixtureDetails.planoId,
8060
- 'productId': productDetails._id,
8061
- 'rfId': ele.data.idHex,
8062
- 'shelfId': getShelfDetails._id,
8063
- 'storeId': fixtureDetails.storeId,
8064
- 'storeName': fixtureDetails.storeName,
8065
- 'type': getShelfDetails?.shelfType != 'storage' ? 'product' : 'storageBox',
8066
- };
8067
- complianceData.push( productData );
8068
-
8069
- // await planoComplianceService.create( productData );
8040
+ logger.error( { data: fixtureShelfDetails, antennaNo: ele.data.antenna, macId: ele?.data?.MAC } );
8041
+ if ( getShelfDetails && fixtureShelfDetails ) {
8042
+ let productDetails = await planoProductService.findOne( { productId: ele.data.idText } );
8043
+ if ( productDetails ) {
8044
+ let data = {
8045
+ clientId: req.body.clientId,
8046
+ storeName: fixtureShelfDetails.storeName,
8047
+ storeId: fixtureShelfDetails.storeId,
8048
+ type: getShelfDetails?.shelfType != 'storage' ? 'product' : 'storageBox',
8049
+ productId: productDetails._id,
8050
+ pid: productDetails.productId,
8051
+ planoId: fixtureShelfDetails.planoId,
8052
+ floorId: fixtureShelfDetails.floorId,
8053
+ fixtureId: fixtureShelfDetails._id,
8054
+ ...( getShelfDetails?.shelfType != 'storage' && { shelfId: getShelfDetails._id } ),
8055
+ };
8056
+ mappingData.push( data );
8057
+
8058
+ // let mappingDetails = await planoMappingService.create( data );
8059
+
8060
+ let productData = {
8061
+ 'planoMappingId': '',
8062
+ 'date': dayjs().format( 'YYYY-MM-DD' ),
8063
+ 'clientId': req.body.clientId,
8064
+ 'compliance': getShelfDetails?.shelfType != 'storage' ? getShelfDetails.productBrandName.includes( productDetails.brandName ) ? 'proper' : 'misplaced' : '',
8065
+ 'fixtureId': fixtureShelfDetails._id,
8066
+ 'floorId': fixtureShelfDetails.floorId,
8067
+ 'planoId': fixtureShelfDetails.planoId,
8068
+ 'productId': productDetails._id,
8069
+ 'rfId': ele.data.idHex,
8070
+ 'shelfId': getShelfDetails._id,
8071
+ 'storeId': fixtureShelfDetails.storeId,
8072
+ 'storeName': fixtureShelfDetails.storeName,
8073
+ 'type': getShelfDetails?.shelfType != 'storage' ? 'product' : 'storageBox',
8074
+ };
8075
+ complianceData.push( productData );
8076
+
8077
+
8078
+ excelData.push( {
8079
+ fixtureId: fixtureShelfDetails._id.toString(),
8080
+ readerId: ele?.data?.MAC,
8081
+ antennaNo: ele.data.antenna,
8082
+ pid: ele.data.idText,
8083
+ productName: productDetails?.brandName,
8084
+ } );
8085
+
8086
+ // await planoComplianceService.create( productData );
8087
+ }
8070
8088
  }
8071
8089
  }
8072
- }
8090
+ } ) );
8073
8091
  }
8074
- } ) );
8092
+ }
8093
+
8094
+ // await Promise.all( response?.mac_details?.map( async ( macDetails ) => {
8095
+ // } ) );
8075
8096
  await planoMappingService.deleteMany( { storeId: store.storeId } );
8076
- console.log( mappingData, '@@mappingData' );
8077
8097
  let mappingInsertData = await planoMappingService.insertMany( mappingData );
8078
8098
  mappingInsertData = new Map( mappingInsertData.map( ( ele, index ) => [ index, ele ] ) );
8079
8099
  let date = dayjs().format();
@@ -8081,8 +8101,12 @@ export async function updateProductMapping( req, res ) {
8081
8101
  compliance.planoMappingId = mappingInsertData.get( index );
8082
8102
  compliance.createdAt = date;
8083
8103
  } );
8084
-
8085
8104
  await planoComplianceService.insertMany( complianceData );
8105
+ // const ws = xlsx.utils.json_to_sheet( excelData );
8106
+ // const wb = xlsx.utils.book_new();
8107
+ // xlsx.utils.book_append_sheet( wb, ws, 'data' );
8108
+ // const buffer = xlsx.write( wb, { type: 'buffer', bookType: 'xlsx' } );
8109
+ // fs.writeFileSync( './items.xlsx', buffer );
8086
8110
  }
8087
8111
  } ) );
8088
8112
  return res.sendSuccess( 'Updated successfully' );