tango-app-api-store-builder 1.0.0-beta-108 → 1.0.0-beta-110

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.
@@ -20,6 +20,7 @@ import mongoose from 'mongoose';
20
20
  import JSZip from 'jszip';
21
21
  import { signedUrl } from 'tango-app-api-middleware';
22
22
  import fs from 'fs';
23
+ // import https from 'https';
23
24
  import os from 'os';
24
25
  import { fileURLToPath } from 'url';
25
26
  import path from 'path';
@@ -2320,11 +2321,11 @@ export async function updateVmData( req, res ) {
2320
2321
  }
2321
2322
  }
2322
2323
 
2323
- // import https from 'https';
2324
+
2324
2325
  // async function scrapeCrest() {
2325
- // const storeIds = [ 'LKST2567' ];
2326
+ // const storeIds = [ 'LKST682' ];
2326
2327
  // const apiUrl = 'https://api.getcrest.ai/api/ms_shelfsensei/layout/';
2327
- // const bearerToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzQ5MTEyNDYxLCJpYXQiOjE3NDkxMDg4NjEsImp0aSI6ImYzMDhmN2M3YzBlYjQ4NWU5YjVmNTJjZjRjNTkxNTM2IiwidXNlcl9pZCI6MTA4NSwiaWQiOjEwODUsImlzX21lZXNlZWtfYWNjb3VudCI6ZmFsc2UsImN1c3RvbWVyX2dyb3VwIjozOTgsImxpY2VuY2Vfc2NvcGVzIjpbeyJyZXNvdXJjZV9zZXQiOiJwcF9zZXQiLCJzY29wZV9yb2xlIjoiY29udHJpYnV0b3IifSx7InJlc291cmNlX3NldCI6ImRwX3NldCIsInNjb3BlX3JvbGUiOiJjb250cmlidXRvciJ9LHsicmVzb3VyY2Vfc2V0IjoiZGZfc2V0Iiwic2NvcGVfcm9sZSI6ImNvbnRyaWJ1dG9yIn0seyJyZXNvdXJjZV9zZXQiOiJkZWZhdWx0X3NldCIsInNjb3BlX3JvbGUiOiJjb250cmlidXRvciJ9XX0.zXRf9dgtrIhjnUJSKyLqbB8FRnTT0a-hOBos0gvKsJY';
2328
+ // const bearerToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzQ4ODUwMzMyLCJpYXQiOjE3NDg4NDY3MzIsImp0aSI6ImNkNmRmNWZhYTg4ZDRmMjQ4YmZkYzFkMzkzZWYzMTg5IiwidXNlcl9pZCI6MTA4NSwiaWQiOjEwODUsImlzX21lZXNlZWtfYWNjb3VudCI6ZmFsc2UsImN1c3RvbWVyX2dyb3VwIjozOTgsImxpY2VuY2Vfc2NvcGVzIjpbeyJyZXNvdXJjZV9zZXQiOiJwcF9zZXQiLCJzY29wZV9yb2xlIjoiY29udHJpYnV0b3IifSx7InJlc291cmNlX3NldCI6ImRwX3NldCIsInNjb3BlX3JvbGUiOiJjb250cmlidXRvciJ9LHsicmVzb3VyY2Vfc2V0IjoiZGZfc2V0Iiwic2NvcGVfcm9sZSI6ImNvbnRyaWJ1dG9yIn0seyJyZXNvdXJjZV9zZXQiOiJkZWZhdWx0X3NldCIsInNjb3BlX3JvbGUiOiJjb250cmlidXRvciJ9XX0.8fclGcH6koHsKVmtGAQLscS80yNaVqPRkcpLhI3cnsk';
2328
2329
  // const filePath = 'response.json';
2329
2330
  // let allResults = [];
2330
2331
 
@@ -2389,7 +2390,7 @@ export async function updateVmData( req, res ) {
2389
2390
  // }
2390
2391
  // }
2391
2392
 
2392
- // scrapeCrest();
2393
+ // scrapeCrest()
2393
2394
 
2394
2395
  export async function createCrestPlanogram( req, res ) {
2395
2396
  try {
@@ -3443,7 +3444,6 @@ import { Builder } from 'selenium-webdriver';
3443
3444
  import fetch from 'node-fetch';
3444
3445
 
3445
3446
  import fetchCookie from 'fetch-cookie';
3446
- // import { elementIsNotVisible } from 'selenium-webdriver/lib/until.js';
3447
3447
 
3448
3448
 
3449
3449
  // async function downloadCrestImages() {
@@ -7224,6 +7224,32 @@ export async function migrateCrestv1( req, res ) {
7224
7224
  };
7225
7225
 
7226
7226
 
7227
+ async function generateFixtureTemplateName( baseName, fixtureWidth ) {
7228
+ function escapeRegex( str ) {
7229
+ return str.replace( /[.*+?^${}()|[\]\\]/g, '\\$&' );
7230
+ }
7231
+
7232
+ const escapedBase = escapeRegex( baseName );
7233
+ const regexPattern = new RegExp( `^Template-(\\d+)-${escapedBase}$` );
7234
+
7235
+ const existingFixtures = await fixtureConfigService.find( {
7236
+ fixtureName: { $regex: new RegExp( `^Template-(\\d+)-${escapedBase}$` ) },
7237
+ fixtureWidth: fixtureWidth,
7238
+ } );
7239
+
7240
+ const usedNumbers = existingFixtures
7241
+ .map( ( doc ) => {
7242
+ const match = doc.fixtureName.match( regexPattern );
7243
+ return match ? parseInt( match[1], 10 ) : null;
7244
+ } )
7245
+ .filter( ( num ) => num !== null );
7246
+
7247
+ const nextNumber = usedNumbers.length > 0 ? Math.max( ...usedNumbers ) + 1 : 1;
7248
+
7249
+ return `Template-${nextNumber}-${baseName}`;
7250
+ }
7251
+
7252
+
7227
7253
  if ( !req?.body?.storeName ) {
7228
7254
  return res.sendError( 'No store supplied', 200 );
7229
7255
  }
@@ -7239,10 +7265,10 @@ export async function migrateCrestv1( req, res ) {
7239
7265
 
7240
7266
  let storeList = await storeService.find( storeQuery );
7241
7267
 
7242
- // const constantFixtureLength = 1220;
7268
+ const constantFixtureLength = 1220;
7243
7269
  const constantDetailedFixtureLength = 1220;
7244
7270
 
7245
- // const constantFixtureWidth = 610;
7271
+ const constantFixtureWidth = 610;
7246
7272
  const constantDetailedFixtureWidth = 1524;
7247
7273
 
7248
7274
  const mmToFeet = 305;
@@ -7262,15 +7288,15 @@ export async function migrateCrestv1( req, res ) {
7262
7288
 
7263
7289
  const existingPlanogram = await planoService.findOne( { storeName: storeData.storeName } );
7264
7290
 
7265
- // if ( existingPlanogram ) {
7266
- // const checkTaskSubmitted = await planoTaskService.findOne( { planoId: existingPlanogram.toObject()._id } );
7291
+ if ( existingPlanogram ) {
7292
+ const checkTaskSubmitted = await planoTaskService.findOne( { planoId: existingPlanogram.toObject()._id } );
7267
7293
 
7268
- // const checkTaskCreated = await processedTaskService.findOne( { storeName: storeData.storeName, date_string: dayjs().format( 'YYYY-MM-DD' ), isPlano: true } );
7294
+ const checkTaskCreated = await processedTaskService.findOne( { storeName: storeData.storeName, date_string: dayjs().format( 'YYYY-MM-DD' ), isPlano: true } );
7269
7295
 
7270
- // if ( checkTaskSubmitted || checkTaskCreated ) {
7271
- // continue;
7272
- // }
7273
- // }
7296
+ if ( checkTaskSubmitted || checkTaskCreated ) {
7297
+ continue;
7298
+ }
7299
+ }
7274
7300
 
7275
7301
 
7276
7302
  if ( existingPlanogram?.toObject()?._id && mongoose.Types.ObjectId.isValid( existingPlanogram?.toObject()?._id ) ) {
@@ -7347,43 +7373,43 @@ export async function migrateCrestv1( req, res ) {
7347
7373
  floorFixtures = floorFixtures.filter( ( fixture ) => fixture.floor === floorArray[floorIndex] );
7348
7374
  }
7349
7375
 
7350
- // const leftXDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
7376
+ const leftXDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
7351
7377
  const leftXDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( leftFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
7352
7378
 
7353
- // const leftYDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantFixtureWidth / mmToFeet ) ) ) : 0;
7379
+ const leftYDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantFixtureWidth / mmToFeet ) ) ) : 0;
7354
7380
  const leftYDetailedDistanceFeet = leftFixtures.length ? roundToTwo( ( ( constantDetailedFixtureWidth / mmToFeet ) ) ) : 0;
7355
7381
 
7356
- // const rightXDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
7382
+ const rightXDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantFixtureLength / mmToFeet ) ) ) : 0;
7357
7383
  const rightXDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( rightFixtures.length * ( constantDetailedFixtureLength / mmToFeet ) ) ) : 0;
7358
7384
 
7359
- // const rightYDistanceFeet = rightFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
7385
+ const rightYDistanceFeet = rightFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
7360
7386
  const rightYDetailedDistanceFeet = rightFixtures.length ? roundToTwo( ( constantDetailedFixtureWidth / mmToFeet ) ): 0;
7361
7387
 
7362
7388
  const maxFixturesPerRow = floorFixtures.length/2;
7363
7389
  const totalRows = 2;
7364
7390
 
7365
- // const floorXDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantFixtureLength / mmToFeet ) ) ) : 0;
7391
+ const floorXDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantFixtureLength / mmToFeet ) ) ) : 0;
7366
7392
  const floorXDetailedDistanceFeet = floorFixtures.length ? roundToTwo( ( ( floorFixtures.length/2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) ): 0;
7367
7393
 
7368
- // const floorYDistanceFeet = floorFixtures.length ? roundToTwo( ( 2 * ( constantFixtureWidth/ mmToFeet ) ) ): 0;
7394
+ const floorYDistanceFeet = floorFixtures.length ? roundToTwo( ( 2 * ( constantFixtureWidth/ mmToFeet ) ) ): 0;
7369
7395
  const floorYDetailedDistanceFeet = floorFixtures.length ? roundToTwo( 2 * ( constantDetailedFixtureWidth/mmToFeet ) ): 0;
7370
7396
 
7371
- // const backXDistanceFeet = backFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
7397
+ const backXDistanceFeet = backFixtures.length ? roundToTwo( ( constantFixtureWidth / mmToFeet ) ) : 0;
7372
7398
  const backXDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( constantDetailedFixtureLength / mmToFeet ) ) : 0;
7373
7399
 
7374
- // const backYDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantFixtureLength / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantFixtureWidth )/mmToFeet ) ) ) : 0;
7400
+ const backYDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantFixtureLength / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantFixtureWidth )/mmToFeet ) ) ) : 0;
7375
7401
  const backYDetailedDistanceFeet = backFixtures.length ? roundToTwo( ( ( backFixtures.length * ( constantDetailedFixtureWidth / mmToFeet ) ) + ( ( ( leftFixtures.length ? 1 : 0 ) + ( rightFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth )/mmToFeet ) ) ): 0;
7376
7402
 
7377
- // const maxXDistance = Math.max( leftXDistanceFeet, rightXDistanceFeet, floorXDistanceFeet );
7403
+ const maxXDistance = Math.max( leftXDistanceFeet, rightXDistanceFeet, floorXDistanceFeet );
7378
7404
  const maxXDetailedDistance = Math.max( leftXDetailedDistanceFeet, rightXDetailedDistanceFeet, floorXDetailedDistanceFeet );
7379
7405
 
7380
- // const maxYDistance = Math.max( floorYDistanceFeet, backYDistanceFeet );
7406
+ const maxYDistance = Math.max( floorYDistanceFeet, backYDistanceFeet );
7381
7407
  const maxYDetailedDistance = Math.max( floorYDetailedDistanceFeet, backYDetailedDistanceFeet );
7382
7408
 
7383
- // const finalXDistance = roundToTwo( ( maxXDistance < ( backXDistanceFeet + floorXDistanceFeet )? ( ( backXDistanceFeet + floorXDistanceFeet ) + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDistance + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : maxXDistance ) );
7409
+ const finalXDistance = roundToTwo( ( maxXDistance < ( backXDistanceFeet + floorXDistanceFeet )? ( ( backXDistanceFeet + floorXDistanceFeet ) + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDistance + ( ( 2 * constantFixtureLength )/mmToFeet ) ) : maxXDistance ) );
7384
7410
  const finalXDetailedDistance = roundToTwo( ( maxXDetailedDistance < ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet )? ( ( backXDetailedDistanceFeet + floorXDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : ( floorFixtures.length && backFixtures.length ) ? ( maxXDetailedDistance + ( ( 2 * constantDetailedFixtureLength )/mmToFeet ) ) : maxXDetailedDistance ) );
7385
7411
 
7386
- // const finalYDistance = roundToTwo( ( maxYDistance < ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) ? ( ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) + ( ( 2 * constantFixtureWidth )/mmToFeet ) ) : ( maxYDistance + ( ( constantFixtureWidth )/mmToFeet ) ) ) );
7412
+ const finalYDistance = roundToTwo( ( maxYDistance < ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) ? ( ( leftYDistanceFeet + rightYDistanceFeet + floorYDistanceFeet ) + ( ( 2 * constantFixtureWidth )/mmToFeet ) ) : ( maxYDistance + ( ( constantFixtureWidth )/mmToFeet ) ) ) );
7387
7413
  const finalYDetailedDistance = roundToTwo( ( maxYDetailedDistance < ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) ? ( ( leftYDetailedDistanceFeet + rightYDetailedDistanceFeet + floorYDetailedDistanceFeet ) + ( ( 2 * constantDetailedFixtureWidth )/mmToFeet ) ) : ( maxYDetailedDistance + ( ( constantDetailedFixtureWidth )/mmToFeet ) ) ) );
7388
7414
 
7389
7415
 
@@ -7398,57 +7424,57 @@ export async function migrateCrestv1( req, res ) {
7398
7424
  layoutPolygon: [
7399
7425
  {
7400
7426
  elementType: 'wall',
7401
- distance: finalXDetailedDistance,
7427
+ distance: finalXDistance,
7402
7428
  unit: 'ft',
7403
7429
  direction: 'right',
7404
7430
  angle: 90,
7405
7431
  elementNumber: 1,
7406
- // detailedDistance: finalXDetailedDistance,
7432
+ detailedDistance: finalXDetailedDistance,
7407
7433
  },
7408
7434
  {
7409
7435
  elementType: 'wall',
7410
- distance: finalYDetailedDistance,
7436
+ distance: finalYDistance,
7411
7437
  unit: 'ft',
7412
7438
  direction: 'down',
7413
7439
  angle: 90,
7414
7440
  elementNumber: 2,
7415
- // detailedDistance: finalYDetailedDistance,
7441
+ detailedDistance: finalYDetailedDistance,
7416
7442
  },
7417
7443
  {
7418
7444
  elementType: 'wall',
7419
- distance: finalXDetailedDistance,
7445
+ distance: finalXDistance,
7420
7446
  unit: 'ft',
7421
7447
  direction: 'left',
7422
7448
  angle: 90,
7423
7449
  elementNumber: 3,
7424
- // detailedDistance: finalXDetailedDistance,
7450
+ detailedDistance: finalXDetailedDistance,
7425
7451
  },
7426
7452
  {
7427
7453
  elementType: 'wall',
7428
- distance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
7454
+ distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
7429
7455
  unit: 'ft',
7430
7456
  direction: 'up',
7431
7457
  angle: 90,
7432
7458
  elementNumber: 4,
7433
- // detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
7459
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
7434
7460
  },
7435
7461
  {
7436
7462
  elementType: 'entrance',
7437
- distance: roundToTwo( ( ( finalYDetailedDistance * 30 ) / 100 ) ),
7463
+ distance: roundToTwo( ( ( finalYDistance * 20 ) / 100 ) ),
7438
7464
  unit: 'ft',
7439
7465
  direction: 'up',
7440
7466
  angle: 90,
7441
7467
  elementNumber: 1,
7442
- // detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 30 ) / 100 ) ),
7468
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 30 ) / 100 ) ),
7443
7469
  },
7444
7470
  {
7445
7471
  elementType: 'wall',
7446
- distance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
7472
+ distance: roundToTwo( ( ( finalYDistance * 40 ) / 100 ) ),
7447
7473
  unit: 'ft',
7448
7474
  direction: 'up',
7449
7475
  angle: 90,
7450
7476
  elementNumber: 5,
7451
- // detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
7477
+ detailedDistance: roundToTwo( ( ( finalYDetailedDistance * 35 ) / 100 ) ),
7452
7478
  },
7453
7479
  ],
7454
7480
  createdBy: new mongoose.Types.ObjectId( '66a78cd82734f4f857cd6db6' ),
@@ -7507,20 +7533,13 @@ export async function migrateCrestv1( req, res ) {
7507
7533
 
7508
7534
  if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
7509
7535
  configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
7536
+ configData.zone = 'stretch';
7510
7537
  }
7511
7538
 
7512
7539
  if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
7513
7540
  configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
7514
7541
  }
7515
7542
 
7516
- if ( configData.vmWidthmm === 905 ) {
7517
- configData.zone = 'stretch';
7518
- }
7519
-
7520
- if ( configData.vmWidthmm === 230 ) {
7521
- configData.zone = 'left';
7522
- }
7523
-
7524
7543
  if ( !configData ) return;
7525
7544
 
7526
7545
  const vmIdentifier = `vm${k+1}=${vm.productName}+${configData.vmHeightmm}+${configData.vmWidthmm}+${configData.startShelf}+${configData.endShelf}+${configData.zone}`;
@@ -7591,7 +7610,7 @@ export async function migrateCrestv1( req, res ) {
7591
7610
 
7592
7611
  const vmDetails = await planoVmService.upsertOne(
7593
7612
  {
7594
- 'vmName': vmInsertData.vmName,
7613
+ 'productName': vmInsertData.vmName,
7595
7614
  },
7596
7615
  vmInsertData,
7597
7616
  );
@@ -7604,23 +7623,8 @@ export async function migrateCrestv1( req, res ) {
7604
7623
  };
7605
7624
  } ) );
7606
7625
 
7607
- const existingTemplateWithMaxIndex = await fixtureConfigService.sortAndFindOne(
7608
- { fixtureCategory: fixtureConfigDoc.fixtureCategory,
7609
- fixtureWidth: fixtureConfigDoc.fixtureWidth }, {}, { templateIndex: -1 } );
7610
-
7611
- let templateIndex = 1;
7612
-
7613
- if ( existingTemplateWithMaxIndex.length ) {
7614
- templateIndex = existingTemplateWithMaxIndex[0].toObject().templateIndex + 1;
7615
- }
7616
-
7617
- let templateName = `Template-${templateIndex}-${fixtureConfigDoc.fixtureCategory}`;
7618
-
7619
- const isTemplateExist = await fixtureConfigService.findOne( { crestMapKey: mapKey } );
7620
- if ( isTemplateExist ) {
7621
- templateIndex = undefined;
7622
- templateName = undefined;
7623
- }
7626
+ const baseFixtureName = `${fixtureConfigDoc.fixtureCategory}`;
7627
+ const uniqueFixtureName = await generateFixtureTemplateName( baseFixtureName, fixtureConfigDoc.fixtureWidth );
7624
7628
 
7625
7629
 
7626
7630
  const fixtureTemplateData = {
@@ -7628,8 +7632,7 @@ export async function migrateCrestv1( req, res ) {
7628
7632
  'shelfConfig': shelfTemplate,
7629
7633
  'vmConfig': vmTemplate,
7630
7634
  'clientId': fixtureConfigDoc.clientId,
7631
- 'fixtureName': templateName,
7632
- 'templateIndex': templateIndex,
7635
+ 'fixtureName': uniqueFixtureName,
7633
7636
  'header': {
7634
7637
  label: fixture.header ? fixture.header : fixture.fixtureSubname[0],
7635
7638
  isEnabled: true,
@@ -7662,16 +7665,16 @@ export async function migrateCrestv1( req, res ) {
7662
7665
  'associatedElementType': 'wall',
7663
7666
  'associatedElementNumber': 1,
7664
7667
  'relativePosition': {
7665
- 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
7668
+ 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
7666
7669
  'y': 0,
7667
7670
  'unit': 'ft',
7668
7671
  },
7669
7672
  'fixtureNumber': fixtureCounter,
7670
- // 'relativeDetailedPosition': {
7671
- // 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
7672
- // 'y': 0,
7673
- // 'unit': 'ft',
7674
- // },
7673
+ 'relativeDetailedPosition': {
7674
+ 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
7675
+ 'y': 0,
7676
+ 'unit': 'ft',
7677
+ },
7675
7678
  'associatedElementFixtureNumber': index+1,
7676
7679
  'fixtureConfigId': fixtureTemplate.toObject()._id,
7677
7680
  };
@@ -7762,20 +7765,13 @@ export async function migrateCrestv1( req, res ) {
7762
7765
 
7763
7766
  if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
7764
7767
  configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
7768
+ configData.zone = 'stretch';
7765
7769
  }
7766
7770
 
7767
7771
  if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
7768
7772
  configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
7769
7773
  }
7770
7774
 
7771
- if ( configData.vmWidthmm === 905 ) {
7772
- configData.zone = 'stretch';
7773
- }
7774
-
7775
- if ( configData.vmWidthmm === 230 ) {
7776
- configData.zone = 'left';
7777
- }
7778
-
7779
7775
  if ( !configData ) return;
7780
7776
 
7781
7777
  const vmIdentifier = `vm${k+1}=${vm.productName}+${configData.vmHeightmm}+${configData.vmWidthmm}+${configData.startShelf}+${configData.endShelf}+${configData.zone}`;
@@ -7847,7 +7843,7 @@ export async function migrateCrestv1( req, res ) {
7847
7843
 
7848
7844
  const vmDetails = await planoVmService.upsertOne(
7849
7845
  {
7850
- 'vmName': vmInsertData.vmName,
7846
+ 'productName': vmInsertData.vmName,
7851
7847
  },
7852
7848
  vmInsertData,
7853
7849
  );
@@ -7860,31 +7856,16 @@ export async function migrateCrestv1( req, res ) {
7860
7856
  };
7861
7857
  } ) );
7862
7858
 
7863
- const existingTemplateWithMaxIndex = await fixtureConfigService.sortAndFindOne(
7864
- { fixtureCategory: fixtureConfigDoc.fixtureCategory,
7865
- fixtureWidth: fixtureConfigDoc.fixtureWidth }, {}, { templateIndex: -1 } );
7859
+ const baseFixtureName = `${fixtureConfigDoc.fixtureCategory}`;
7860
+ const uniqueFixtureName = await generateFixtureTemplateName( baseFixtureName, fixtureConfigDoc.fixtureWidth );
7866
7861
 
7867
- let templateIndex = 1;
7868
-
7869
- if ( existingTemplateWithMaxIndex.length ) {
7870
- templateIndex = existingTemplateWithMaxIndex[0].toObject().templateIndex + 1;
7871
- }
7872
-
7873
- let templateName = `Template-${templateIndex}-${fixtureConfigDoc.fixtureCategory}`;
7874
-
7875
- const isTemplateExist = await fixtureConfigService.findOne( { crestMapKey: mapKey } );
7876
- if ( isTemplateExist ) {
7877
- templateIndex = undefined;
7878
- templateName = undefined;
7879
- }
7880
7862
 
7881
7863
  const fixtureTemplateData = {
7882
7864
  ...fixtureConfigDoc,
7883
7865
  'shelfConfig': shelfTemplate,
7884
7866
  'vmConfig': vmTemplate,
7885
7867
  'clientId': fixtureConfigDoc.clientId,
7886
- 'fixtureName': templateName,
7887
- 'templateIndex': templateIndex,
7868
+ 'fixtureName': uniqueFixtureName,
7888
7869
  'header': {
7889
7870
  label: fixture.header ? fixture.header : fixture.fixtureSubname[0],
7890
7871
  isEnabled: true,
@@ -7917,16 +7898,16 @@ export async function migrateCrestv1( req, res ) {
7917
7898
  'associatedElementType': 'wall',
7918
7899
  'associatedElementNumber': 2,
7919
7900
  'relativePosition': {
7901
+ 'x': roundToTwo( ( finalXDistance - ( constantFixtureWidth/mmToFeet ) ) ),
7902
+ 'y': roundToTwo( ( ( index * ( ( constantFixtureLength/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantFixtureWidth/mmToFeet ) ) ),
7903
+ 'unit': 'ft',
7904
+ },
7905
+ 'fixtureNumber': fixtureCounter,
7906
+ 'relativeDetailedPosition': {
7920
7907
  'x': roundToTwo( ( finalXDetailedDistance - ( constantDetailedFixtureLength/mmToFeet ) ) ),
7921
7908
  'y': roundToTwo( ( ( index * ( ( constantDetailedFixtureWidth/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth/mmToFeet ) ) ),
7922
7909
  'unit': 'ft',
7923
7910
  },
7924
- 'fixtureNumber': fixtureCounter,
7925
- // 'relativeDetailedPosition': {
7926
- // 'x': roundToTwo( ( finalXDetailedDistance - ( constantDetailedFixtureLength/mmToFeet ) ) ),
7927
- // 'y': roundToTwo( ( ( index * ( ( constantDetailedFixtureWidth/mmToFeet ) ) ) + ( ( leftFixtures.length ? 1 : 0 ) * constantDetailedFixtureWidth/mmToFeet ) ) ),
7928
- // 'unit': 'ft',
7929
- // },
7930
7911
  'associatedElementFixtureNumber': index+1,
7931
7912
  'fixtureConfigId': fixtureTemplate.toObject()._id,
7932
7913
  };
@@ -8017,20 +7998,13 @@ export async function migrateCrestv1( req, res ) {
8017
7998
 
8018
7999
  if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' ) {
8019
8000
  configData = vmConfig.find( ( config ) => config.vmWidthmm === 905 );
8001
+ configData.zone = 'stretch';
8020
8002
  }
8021
8003
 
8022
8004
  if ( vm.productName === 'Creatr' && zone.zoneName === 'Mid' && pids.length ) {
8023
8005
  configData = vmConfig.find( ( config ) => config.vmWidthmm === 230 );
8024
8006
  }
8025
8007
 
8026
- if ( configData.vmWidthmm === 905 ) {
8027
- configData.zone = 'stretch';
8028
- }
8029
-
8030
- if ( configData.vmWidthmm === 230 ) {
8031
- configData.zone = 'left';
8032
- }
8033
-
8034
8008
  if ( !configData ) return;
8035
8009
 
8036
8010
  const vmIdentifier = `vm${k+1}=${vm.productName}+${configData.vmHeightmm}+${configData.vmWidthmm}+${configData.startShelf}+${configData.endShelf}+${configData.zone}`;
@@ -8101,7 +8075,7 @@ export async function migrateCrestv1( req, res ) {
8101
8075
 
8102
8076
  const vmDetails = await planoVmService.upsertOne(
8103
8077
  {
8104
- 'vmNameName': vmInsertData.vmName,
8078
+ 'productName': vmInsertData.vmName,
8105
8079
  },
8106
8080
  vmInsertData,
8107
8081
  );
@@ -8114,31 +8088,16 @@ export async function migrateCrestv1( req, res ) {
8114
8088
  };
8115
8089
  } ) );
8116
8090
 
8117
- const existingTemplateWithMaxIndex = await fixtureConfigService.sortAndFindOne(
8118
- { fixtureCategory: fixtureConfigDoc.fixtureCategory,
8119
- fixtureWidth: fixtureConfigDoc.fixtureWidth }, {}, { templateIndex: -1 } );
8120
-
8121
- let templateIndex = 1;
8091
+ const baseFixtureName = `${fixtureConfigDoc.fixtureCategory}`;
8092
+ const uniqueFixtureName = await generateFixtureTemplateName( baseFixtureName, fixtureConfigDoc.fixtureWidth );
8122
8093
 
8123
- if ( existingTemplateWithMaxIndex.length ) {
8124
- templateIndex = existingTemplateWithMaxIndex[0].toObject().templateIndex + 1;
8125
- }
8126
-
8127
- let templateName = `Template-${templateIndex}-${fixtureConfigDoc.fixtureCategory}`;
8128
-
8129
- const isTemplateExist = await fixtureConfigService.findOne( { crestMapKey: mapKey } );
8130
- if ( isTemplateExist ) {
8131
- templateIndex = undefined;
8132
- templateName = undefined;
8133
- }
8134
8094
 
8135
8095
  const fixtureTemplateData = {
8136
8096
  ...fixtureConfigDoc,
8137
8097
  'shelfConfig': shelfTemplate,
8138
8098
  'vmConfig': vmTemplate,
8139
8099
  'clientId': fixtureConfigDoc.clientId,
8140
- 'fixtureName': templateName,
8141
- 'templateIndex': templateIndex,
8100
+ 'fixtureName': uniqueFixtureName,
8142
8101
  'header': {
8143
8102
  label: fixture.header ? fixture.header : fixture.fixtureSubname[0],
8144
8103
  isEnabled: true,
@@ -8171,16 +8130,16 @@ export async function migrateCrestv1( req, res ) {
8171
8130
  'associatedElementType': 'wall',
8172
8131
  'associatedElementNumber': 3,
8173
8132
  'relativePosition': {
8133
+ 'x': roundToTwo( ( index * ( constantFixtureLength / mmToFeet ) ) ),
8134
+ 'y': roundToTwo( ( finalYDistance - ( constantFixtureWidth / mmToFeet ) ) ),
8135
+ 'unit': 'ft',
8136
+ },
8137
+ 'fixtureNumber': fixtureCounter,
8138
+ 'relativeDetailedPosition': {
8174
8139
  'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
8175
8140
  'y': roundToTwo( ( finalYDetailedDistance - ( constantDetailedFixtureWidth / mmToFeet ) ) ),
8176
8141
  'unit': 'ft',
8177
8142
  },
8178
- 'fixtureNumber': fixtureCounter,
8179
- // 'relativeDetailedPosition': {
8180
- // 'x': roundToTwo( ( index * ( constantDetailedFixtureLength / mmToFeet ) ) ),
8181
- // 'y': roundToTwo( ( finalYDetailedDistance - ( constantDetailedFixtureWidth / mmToFeet ) ) ),
8182
- // 'unit': 'ft',
8183
- // },
8184
8143
  'associatedElementFixtureNumber': index+1,
8185
8144
  'fixtureConfigId': fixtureTemplate.toObject()._id,
8186
8145
  };
@@ -8232,17 +8191,17 @@ export async function migrateCrestv1( req, res ) {
8232
8191
 
8233
8192
  const centerRow = Math.floor( totalRows / 2 );
8234
8193
 
8235
- // const startingX = roundToTwo( ( finalXDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantFixtureLength / mmToFeet ) ) );
8194
+ const startingX = roundToTwo( ( finalXDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantFixtureLength / mmToFeet ) ) );
8236
8195
  const detailedStartingX = roundToTwo( ( finalXDetailedDistance / 2 - ( maxFixturesPerRow / 2 ) * ( constantDetailedFixtureLength / mmToFeet ) ) );
8237
8196
 
8238
- // const startingY = finalYDistance / 2 - centerRow * ( constantFixtureWidth / mmToFeet );
8197
+ const startingY = finalYDistance / 2 - centerRow * ( constantFixtureWidth / mmToFeet );
8239
8198
  const detailedStartingY = finalYDetailedDistance / 2 - centerRow * ( constantDetailedFixtureWidth / mmToFeet );
8240
8199
 
8241
8200
  const colIndex = Math.floor( index / 2 );
8242
8201
  const rowIndex = index % 2 === 0 ? 1 : 0;
8243
8202
 
8244
- // const xPos = roundToTwo( startingX + colIndex * ( constantFixtureLength / mmToFeet ) );
8245
- // const yPos = roundToTwo( startingY + rowIndex * ( constantFixtureWidth / mmToFeet ) );
8203
+ const xPos = roundToTwo( startingX + colIndex * ( constantFixtureLength / mmToFeet ) );
8204
+ const yPos = roundToTwo( startingY + rowIndex * ( constantFixtureWidth / mmToFeet ) );
8246
8205
 
8247
8206
  const detailedXPos = roundToTwo( ( detailedStartingX + colIndex * ( constantDetailedFixtureLength / mmToFeet ) ) );
8248
8207
  const detailedYPos = roundToTwo( ( detailedStartingY + rowIndex * ( constantDetailedFixtureWidth / mmToFeet ) ) );
@@ -8251,7 +8210,7 @@ export async function migrateCrestv1( req, res ) {
8251
8210
  if ( !fixtureConfig ) continue;
8252
8211
  const fixtureConfigDoc = fixtureConfig.toObject();
8253
8212
 
8254
- let mapKey = `${fixtureConfigDoc.fixtureCategory}${fixtureConfigDoc.fixtureWidth.value}${fixtureConfigDoc.fixtureWidth.unit},${fixture.centerSubMain}`;
8213
+ let mapKey = `${fixtureConfigDoc.fixtureCategory}${fixtureConfigDoc.fixtureWidth.value}${fixtureConfigDoc.fixtureWidth.unit},${fixture.header}`;
8255
8214
 
8256
8215
  const fixtureProductSubBrandName = new Set();
8257
8216
 
@@ -8259,7 +8218,7 @@ export async function migrateCrestv1( req, res ) {
8259
8218
  const shelfTemplate = fixtureConfigDoc.shelfConfig.map( ( configShelf, j ) => {
8260
8219
  const shelfSection = fixture?.centerSuperSubMain?.find( ( product ) => !product.isVisualMerchandiser );
8261
8220
 
8262
- const shelfIdentifier = `shelf${j + 1}=${fixture.centerSubMain}`;
8221
+ const shelfIdentifier = `shelf${j + 1}=${shelfSection?.productName}`;
8263
8222
 
8264
8223
  mapKey += ','+shelfIdentifier;
8265
8224
 
@@ -8282,7 +8241,7 @@ export async function migrateCrestv1( req, res ) {
8282
8241
  };
8283
8242
  } );
8284
8243
 
8285
- const vmConfig = fixture.centerSuperSubMain?.flatMap( ( vm, k ) => {
8244
+ const vmConfig = fixture.centerSuperSubMain?.flatMap( ( vm ) => {
8286
8245
  if ( !vm?.isVisualMerchandiser ) {
8287
8246
  return [];
8288
8247
  }
@@ -8290,15 +8249,11 @@ export async function migrateCrestv1( req, res ) {
8290
8249
 
8291
8250
  const [ configData1, configData2 ] = [ vmConfig[0], vmConfig[1] ];
8292
8251
 
8293
- const vmIdentifier = `vm${k+1}=${vm.name}+${configData1.vmHeightmm}+${configData1.vmWidthmm}+${configData1.startShelf}+${configData1.endShelf}+${configData1.zone}`;
8294
-
8295
- mapKey += ','+vmIdentifier;
8296
-
8297
8252
  return [
8298
8253
  {
8299
8254
  startYPosition: configData1.startShelf,
8300
8255
  endYPosition: configData1.endShelf,
8301
- xZone: 'left',
8256
+ xZone: configData1.zone,
8302
8257
  vmName: vm.name + ' - 1',
8303
8258
  vmHeight: configData1.vmHeightmm,
8304
8259
  vmWidth: configData1.vmWidthmm,
@@ -8306,7 +8261,7 @@ export async function migrateCrestv1( req, res ) {
8306
8261
  {
8307
8262
  startYPosition: configData2.startShelf,
8308
8263
  endYPosition: configData2.endShelf,
8309
- xZone: 'stretch',
8264
+ xZone: configData2.zone,
8310
8265
  vmName: vm.name + ' - 2',
8311
8266
  vmHeight: configData2.vmHeightmm,
8312
8267
  vmWidth: configData2.vmWidthmm,
@@ -8345,31 +8300,16 @@ export async function migrateCrestv1( req, res ) {
8345
8300
  };
8346
8301
  } ) );
8347
8302
 
8348
- const existingTemplateWithMaxIndex = await fixtureConfigService.sortAndFindOne(
8349
- { fixtureCategory: fixtureConfigDoc.fixtureCategory,
8350
- fixtureWidth: fixtureConfigDoc.fixtureWidth }, {}, { templateIndex: -1 } );
8351
-
8352
- let templateIndex = 1;
8303
+ const baseFixtureName = `${fixtureConfigDoc.fixtureCategory}`;
8304
+ const uniqueFixtureName = await generateFixtureTemplateName( baseFixtureName, fixtureConfigDoc.fixtureWidth );
8353
8305
 
8354
- if ( existingTemplateWithMaxIndex.length ) {
8355
- templateIndex = existingTemplateWithMaxIndex[0].toObject().templateIndex + 1;
8356
- }
8357
-
8358
- let templateName = `Template-${templateIndex}-${fixtureConfigDoc.fixtureCategory}`;
8359
-
8360
- const isTemplateExist = await fixtureConfigService.findOne( { crestMapKey: mapKey } );
8361
- if ( isTemplateExist ) {
8362
- templateIndex = undefined;
8363
- templateName = undefined;
8364
- }
8365
8306
 
8366
8307
  const fixtureTemplateData = {
8367
8308
  ...fixtureConfigDoc,
8368
8309
  'shelfConfig': shelfTemplate,
8369
8310
  'vmConfig': vmTemplate,
8370
8311
  'clientId': fixtureConfigDoc.clientId,
8371
- 'fixtureName': templateName,
8372
- 'templateIndex': templateIndex,
8312
+ 'fixtureName': uniqueFixtureName,
8373
8313
  'header': {
8374
8314
  label: fixture.centerSubMain,
8375
8315
  isEnabled: true,
@@ -8401,16 +8341,16 @@ export async function migrateCrestv1( req, res ) {
8401
8341
  'planoId': layoutDoc.planoId,
8402
8342
  'floorId': layoutDoc._id,
8403
8343
  'relativePosition': {
8344
+ 'x': xPos,
8345
+ 'y': yPos,
8346
+ 'unit': 'ft',
8347
+ },
8348
+ 'fixtureNumber': fixtureCounter,
8349
+ 'relativeDetailedPosition': {
8404
8350
  'x': detailedXPos,
8405
8351
  'y': detailedYPos,
8406
8352
  'unit': 'ft',
8407
8353
  },
8408
- 'fixtureNumber': fixtureCounter,
8409
- // 'relativeDetailedPosition': {
8410
- // 'x': detailedXPos,
8411
- // 'y': detailedYPos,
8412
- // 'unit': 'ft',
8413
- // },
8414
8354
  'associatedElementFixtureNumber': index+1,
8415
8355
  'fixtureConfigId': fixtureTemplate.toObject()._id,
8416
8356
  };
@@ -2728,10 +2728,10 @@ export async function storeFixturesv2( req, res ) {
2728
2728
  } ),
2729
2729
  );
2730
2730
 
2731
- const centerFixtures = await storeFixtureService.findAndSort( {
2731
+ const centerFixtures = await storeFixtureService.find( {
2732
2732
  floorId: floor._id,
2733
2733
  fixtureType: 'floor',
2734
- }, {}, { associatedElementFixtureNumber: 1 } );
2734
+ } );
2735
2735
 
2736
2736
  const centerFixturesWithStatus = await Promise.all(
2737
2737
  centerFixtures.map( async ( fixture ) => {