refs #4823 Added supplyLinePackingConfiguration

This commit is contained in:
Guillermo Bonet 2023-05-30 14:18:02 +02:00
parent 9aaf5a9485
commit af488b4cd6
5 changed files with 121 additions and 35 deletions

View File

@ -65,6 +65,7 @@ export default (sequelize) => {
organization, {
timestamps: false,
freezeTableName: true,
comment: 'Contains suppliers',
}
);
};

View File

@ -41,7 +41,8 @@ import warehouse from './warehouse/warehouse.js';
// Supply Line Models
import supplyLine from './supplyLine/supplyLine.js';
import volumePric from './supplyLine/volumePrice.js';
import volumePrice from './supplyLine/volumePrice.js';
import supplyLinePackingConfiguration from './supplyLine/packingConfiguration.js';
import clockPresaleSupply from './supplyLine/clockPresaleSupply.js';
// TradeItem Models
@ -71,7 +72,8 @@ let models = {
photo: photo(sequelize),
seasonalPeriod: seasonalPeriod(sequelize),
supplyLine: supplyLine(sequelize),
volumePrice: volumePric(sequelize),
supplyLinePackingConfiguration: supplyLinePackingConfiguration(sequelize),
volumePrice: volumePrice(sequelize),
clockPresaleSupply: clockPresaleSupply(sequelize),
package: packageModel(sequelize),
};
@ -134,6 +136,10 @@ try {
foreignKey: 'organizationId',
targetKey: 'organizationId',
});
models.supplyLinePackingConfiguration.belongsTo(models.supplyLine, {
foreignKey: 'supplyLineId',
targetKey: 'supplyLineId',
});
models.warehouse.belongsTo(models.organization, {
foreignKey: 'organizationId',
targetKey: 'organizationId',

View File

@ -0,0 +1,55 @@
import { Sequelize } from 'sequelize';
const packingConfiguration = {
packingConfigurationId: {
type: Sequelize.STRING,
primaryKey: true,
},
packageVbnPackageCode: {
type: Sequelize.INTEGER,
},
packageCustomPackageId: {
type: Sequelize.STRING,
},
piecesPerPackage: {
type: Sequelize.INTEGER,
},
bunchesPerPackage: {
type: Sequelize.INTEGER,
},
photoUrl: {
type: Sequelize.STRING,
},
packagesPerLayer: {
type: Sequelize.INTEGER,
},
layersPerLoadCarrier: {
type: Sequelize.INTEGER,
},
transportHeightInCm: {
type: Sequelize.INTEGER,
},
loadCarrierType: {
type: Sequelize.STRING,
},
additionalPricePerPieceCurrency: {
type: Sequelize.STRING,
},
additionalPricePerPieceValue: {
type: Sequelize.INTEGER,
},
isPrimary: {
type: Sequelize.BOOLEAN,
},
};
export default (sequelize) => {
return sequelize.define(
'supplyLinePackingConfiguration',
packingConfiguration,
{
timestamps: false,
freezeTableName: true,
}
);
};

View File

@ -8,25 +8,19 @@ const supplyLine = {
status: {
type: Sequelize.STRING,
},
pricePerPiece_currency: {
type: Sequelize.STRING,
},
pricePerPiece_value: {
type: Sequelize.DECIMAL(10,2),
},
numberOfPieces : {
type: Sequelize.INTEGER,
},
deliveryPeriod_startDateTime: {
deliveryPeriodStartDateTime: {
type: Sequelize.DATE,
},
deliveryPeriod_endDateTime: {
deliveryPeriodEndDateTime: {
type: Sequelize.DATE,
},
orderPeriod_startDateTime: {
orderPeriodStartDateTime: {
type: Sequelize.DATE,
},
orderPeriod_endDateTime: {
orderPeriodEndDateTime: {
type: Sequelize.DATE,
},
warehouseId: {
@ -44,10 +38,10 @@ const supplyLine = {
salesUnit: {
type: Sequelize.STRING,
},
agreementReference_code: {
agreementReferenceCode: {
type: Sequelize.STRING,
},
agreementReference_description: {
agreementReferenceDescription: {
type: Sequelize.STRING,
},
isLimited: {

View File

@ -146,7 +146,7 @@ export async function syncOrganizations(){
const orgs = response.results;
for (let org of orgs) {
spinner.text = `Syncing ${i} organizations, ${maxSequenceNumber - curSequenceNumber} missing...`
if (JSON.parse(env.APPLY_ORG_FILTER) && org.companyGln && !org.endDate) { // Filtro para quitar los que parecen test
if (JSON.parse(env.APPLY_ORG_FILTER) && org.companyGln && !org.endDate) { // Filtro
await insertOrganization(org);
spinner.text = `Syncing ${i++} organizations, ${maxSequenceNumber - curSequenceNumber} missing...`
}
@ -156,7 +156,8 @@ export async function syncOrganizations(){
model: 'organization',
maxSequenceNumber,
});
spinner.text = `Syncing ${i} organizations, 0 missing...`
spinner.text = (i) ? `Syncing ${i} organizations...`
: `Syncing organizations... (Not found)`
spinner.succeed();
}
catch (err) {
@ -232,7 +233,7 @@ export async function syncTradeItems(){
if (!tradeItems.length) continue;
for (let tradeItem of tradeItems) {
await insertItem(tradeItem);
await insertTradeItem(tradeItem);
spinner.text = `Syncing ${i++} trade items of [${x}|${orgs.length}] organizations...`
};
} catch (err) {
@ -291,23 +292,11 @@ export async function syncSupplyLines() {
});
if (!tradeItem) {
let tradeItem = (await vnRequest('GET', `${env.API_URL}/trade-items/${supplyLine.tradeItemId}`, null, null, spinner)).data;
await insertItem(tradeItem);
await insertTradeItem(tradeItem);
}
spinner.text = `Syncing ${i++} supply lines of [${x}|${conOrgs.length}] organizations...`
await models.supplyLine.upsert({
...supplyLine,
organizationId: supplyLine.supplierOrganizationId,
pricePerPiece_currency: supplyLine.pricePerPiece?.currency ?? null,
pricePerPiece_value: supplyLine.pricePerPiece?.value ?? null,
deliveryPeriod_startDateTime: supplyLine.deliveryPeriod?.startDateTime ?? null,
deliveryPeriod_endDateTime: supplyLine.deliveryPeriod?.endDateTime ?? null,
orderPeriod_startDateTime: supplyLine.orderPeriod?.startDateTime ?? null,
orderPeriod_endDateTime: supplyLine.orderPeriod?.endDateTime ?? null,
agreementReference_code: supplyLine.agreementReference?.code ?? null,
agreementReference_description: supplyLine.agreementReference?.description ?? null,
lastSync: moment(),
});
await insertSupplyLine(supplyLine);
for (let volumePrice of supplyLine.volumePrices)
await models.volumePrice.upsert({
@ -362,7 +351,7 @@ export async function syncClockPresalesSupply() {
});
if (!tradeItem) {
let tradeItem = (await vnRequest('GET', `${env.API_URL}/trade-items/${clockPresalesSupply.tradeItemId}`, null, null, spinner)).data;
await insertItem(tradeItem);
await insertTradeItem(tradeItem);
}
await insertClockPresalesSupply(clockPresalesSupply);
@ -381,7 +370,7 @@ export async function syncClockPresalesSupply() {
*
* @param {Array} tradeItem
*/
export async function insertItem(tradeItem) {
export async function insertTradeItem(tradeItem) {
const tx = await models.sequelize.transaction();
try {
// Upsert trade item
@ -506,7 +495,7 @@ export async function insertWarehouse(warehouse) {
location_address_postalCode: warehouse.location.address.postalCode,
location_address_stateOrProvince: warehouse.location.address.stateOrProvince,
lastSync: moment(),
});
}, { transaction: tx });
await tx.commit();
} catch (err) {
await tx.rollback();
@ -526,7 +515,48 @@ export async function insertOrganization(organization) {
...organization,
isConnected: JSON.parse(env.ORGS_ALWAYS_CONN),
lastSync: moment(),
});
}, { transaction: tx });
await tx.commit();
} catch (err) {
await tx.rollback();
throw err;
}
}
/**
* Insert supply line and dependences in the database.
*
* @param {Array} supplyLine
*/
export async function insertSupplyLine(supplyLine) {
const tx = await models.sequelize.transaction();
try {
await models.supplyLine.upsert({
...supplyLine,
organizationId: supplyLine.supplierOrganizationId,
deliveryPeriodStartDateTime: supplyLine.deliveryPeriod?.startDateTime ?? null,
deliveryPeriodEndDateTime: supplyLine.deliveryPeriod?.endDateTime ?? null,
orderPeriodStartDateTime: supplyLine.orderPeriod?.startDateTime ?? null,
orderPeriodEndDateTime: supplyLine.orderPeriod?.endDateTime ?? null,
agreementReference_code: supplyLine.agreementReference?.code ?? null,
agreementReference_description: supplyLine.agreementReference?.description ?? null,
lastSync: moment(),
}, { transaction: tx });
// Upsert packing configurations
if (supplyLine.packingConfigurations.length)
for (const packingConfiguration of supplyLine.packingConfigurations) {
await models.supplyLinePackingConfiguration.upsert({
packingConfigurationId: uuidv4(),
...packingConfiguration,
packageVbnPackageCode: packingConfiguration.package.vbnPackageCode,
packageCustomPackageId: packingConfiguration.package.customPackageId,
additionalPricePerPieceCurrency: packingConfiguration.additionalPricePerPiece.currency,
additionalPricePerPieceValue: packingConfiguration.additionalPricePerPiece.value,
supplyLineId: supplyLine.supplyLineId,
}, { transaction: tx });
}
await tx.commit();
} catch (err) {
await tx.rollback();