This commit is contained in:
parent
4c0f59399b
commit
8ae5a0de0f
|
@ -0,0 +1,27 @@
|
|||
CREATE TABLE `vn`.`buyConfig` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`showLastBuy` int(11) NOT NULL DEFAULT 6 COMMENT 'Meses desde la última compra',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||
|
||||
CREATE TABLE `vn`.`travelConfig` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`warehouseInFk` smallint(6) unsigned NOT NULL DEFAULT 8 COMMENT 'Warehouse de origen',
|
||||
`warehouseOutFk` smallint(6) unsigned NOT NULL DEFAULT 60 COMMENT 'Warehouse destino',
|
||||
`agencyFk` int(11) NOT NULL DEFAULT 1378 COMMENT 'Agencia por defecto',
|
||||
`companyFk` smallint(5) unsigned NOT NULL DEFAULT 442 COMMENT 'Compañía por defecto',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `travelConfig_FK` (`warehouseInFk`),
|
||||
KEY `travelConfig_FK_1` (`warehouseOutFk`),
|
||||
KEY `travelConfig_FK_2` (`agencyFk`),
|
||||
KEY `travelConfig_FK_3` (`companyFk`),
|
||||
CONSTRAINT `travelConfig_FK` FOREIGN KEY (`warehouseInFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT `travelConfig_FK_1` FOREIGN KEY (`warehouseOutFk`) REFERENCES `warehouse` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT `travelConfig_FK_2` FOREIGN KEY (`agencyFk`) REFERENCES `agencyMode` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT `travelConfig_FK_3` FOREIGN KEY (`companyFk`) REFERENCES `company` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||
|
||||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
||||
VALUES
|
||||
('Entry', 'addFromPackaging', 'WRITE', 'ALLOW', 'ROLE', 'production'),
|
||||
('Supplier', 'getItemsPackaging', 'READ', 'ALLOW', 'ROLE', 'production');
|
|
@ -0,0 +1,72 @@
|
|||
module.exports = Self => {
|
||||
Self.remoteMethodCtx('addFromPackaging', {
|
||||
description: 'Create a receipt or return entry for a supplier with a specific travel',
|
||||
accessType: 'WRITE',
|
||||
accepts: [{
|
||||
arg: 'supplier',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'The supplier id',
|
||||
},
|
||||
{
|
||||
arg: 'isTravelReception',
|
||||
type: 'boolean',
|
||||
required: true,
|
||||
description: 'Indicates if the travel associated with the entry is a return or receipt travel'
|
||||
}],
|
||||
returns: {
|
||||
type: 'object',
|
||||
root: true
|
||||
},
|
||||
http: {
|
||||
path: `/addFromPackaging`,
|
||||
verb: 'POST'
|
||||
}
|
||||
});
|
||||
|
||||
Self.addFromPackaging = async(ctx, options) => {
|
||||
const args = ctx.args;
|
||||
const models = Self.app.models;
|
||||
let tx;
|
||||
const myOptions = {};
|
||||
|
||||
if (typeof options == 'object')
|
||||
Object.assign(myOptions, options);
|
||||
|
||||
if (!myOptions.transaction) {
|
||||
tx = await Self.beginTransaction({});
|
||||
myOptions.transaction = tx;
|
||||
}
|
||||
|
||||
try {
|
||||
const travelConfig = await models.TravelConfig.findOne({}, myOptions);
|
||||
|
||||
const today = new Date();
|
||||
const yesterday = new Date(today);
|
||||
yesterday.setDate(today.getDate() - 1);
|
||||
const tomorrow = new Date(today);
|
||||
tomorrow.setDate(today.getDate() + 1);
|
||||
|
||||
const travel = await models.Travel.create({
|
||||
shipmentHour: args.isTravelReception ? yesterday : today,
|
||||
landingHour: args.isTravelReception ? today : tomorrow,
|
||||
agencyFk: travelConfig.agencyFk,
|
||||
warehouseInFk: travelConfig.warehouseOutFk,
|
||||
warehouseOutFk: travelConfig.warehouseInFk
|
||||
}, myOptions);
|
||||
|
||||
const entry = await models.Entry.create({
|
||||
supplierFk: args.supplier,
|
||||
travelFk: travel.id,
|
||||
companyFk: travelConfig.companyFk
|
||||
}, myOptions);
|
||||
|
||||
if (tx) await tx.commit();
|
||||
|
||||
return {travel, entry};
|
||||
} catch (e) {
|
||||
if (tx) await tx.rollback();
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
};
|
|
@ -5,6 +5,9 @@
|
|||
"Buy": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"BuyConfig": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"ItemMatchProperties": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "BuyConfig",
|
||||
"base": "VnModel",
|
||||
"options": {
|
||||
"mysql": {
|
||||
"table": "buyConfig"
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "number",
|
||||
"id": true
|
||||
},
|
||||
"showLastBuy": {
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ module.exports = Self => {
|
|||
require('../methods/entry/importBuysPreview')(Self);
|
||||
require('../methods/entry/lastItemBuys')(Self);
|
||||
require('../methods/entry/entryOrderPdf')(Self);
|
||||
require('../methods/entry/addFromPackaging')(Self);
|
||||
|
||||
Self.observe('before save', async function(ctx, options) {
|
||||
if (ctx.isNewInstance) return;
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
module.exports = Self => {
|
||||
Self.remoteMethod('getItemsPackaging', {
|
||||
description: 'Returns the list of items from the supplier of type packing',
|
||||
accessType: 'READ',
|
||||
accepts: [{
|
||||
arg: 'id',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'The supplier id',
|
||||
http: {source: 'path'}
|
||||
}, {
|
||||
arg: 'entry',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'The entry id',
|
||||
}],
|
||||
returns: {
|
||||
type: 'object',
|
||||
root: true
|
||||
},
|
||||
http: {
|
||||
path: `/:id/getItemsPackaging`,
|
||||
verb: 'GET'
|
||||
}
|
||||
});
|
||||
Self.getItemsPackaging = async(id, entry) => {
|
||||
const [result] = await Self.rawSql(`
|
||||
WITH entryTmp AS(
|
||||
SELECT i.id, SUM(b.quantity) quantity
|
||||
FROM vn.entry e
|
||||
JOIN vn.buy b ON b.entryFk = e.id
|
||||
JOIN vn.supplier s ON s.id = e.supplierFk
|
||||
JOIN vn.item i ON i.id = b.itemFk
|
||||
WHERE e.id = ? AND e.supplierFk = ?
|
||||
GROUP BY i.id
|
||||
) SELECT i.id, i.name, et.quantity, SUM(b.quantity) quantityTotal
|
||||
FROM vn.buy b
|
||||
JOIN vn.item i ON i.id = b.itemFk
|
||||
JOIN vn.entry e ON e.id = b.entryFk
|
||||
JOIN vn.supplier s ON s.id = e.supplierFk
|
||||
JOIN vn.buyConfig bc ON bc.showLastBuy
|
||||
JOIN vn.travel t ON t.id = e.travelFk
|
||||
LEFT JOIN entryTmp et ON et.id = i.id
|
||||
WHERE e.supplierFk = ?
|
||||
AND (i.family ='EMB' OR i.family = 'CONT')
|
||||
AND b.created > (CURRENT_DATE() - INTERVAL bc.showLastBuy MONTH)
|
||||
GROUP BY b.itemFk
|
||||
ORDER BY et.quantity DESC, quantityTotal DESC`, [entry, id, id]);
|
||||
return result;
|
||||
};
|
||||
};
|
|
@ -11,6 +11,7 @@ module.exports = Self => {
|
|||
require('../methods/supplier/campaignMetricsPdf')(Self);
|
||||
require('../methods/supplier/campaignMetricsEmail')(Self);
|
||||
require('../methods/supplier/newSupplier')(Self);
|
||||
require('../methods/supplier/getItemsPackaging')(Self);
|
||||
|
||||
Self.validatesPresenceOf('name', {
|
||||
message: 'The social name cannot be empty'
|
||||
|
|
|
@ -14,6 +14,9 @@
|
|||
"TravelThermograph": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"TravelConfig": {
|
||||
"dataSource": "vn"
|
||||
},
|
||||
"Temperature": {
|
||||
"dataSource": "vn"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"name": "TravelConfig",
|
||||
"base": "VnModel",
|
||||
"options": {
|
||||
"mysql": {
|
||||
"table": "travelConfig"
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "number",
|
||||
"id": true
|
||||
},
|
||||
"warehouseInFk": {
|
||||
"type": "number"
|
||||
},
|
||||
"warehouseOutFk": {
|
||||
"type": "number"
|
||||
},
|
||||
"agencyFk": {
|
||||
"type": "number"
|
||||
},
|
||||
"companyFk": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"relations": {
|
||||
"warehouseIn": {
|
||||
"type": "belongsTo",
|
||||
"model": "Warehouse",
|
||||
"foreignKey": "warehouseInFk"
|
||||
},
|
||||
"warehouseOut": {
|
||||
"type": "belongsTo",
|
||||
"model": "Warehouse",
|
||||
"foreignKey": "warehouseOutFk"
|
||||
},
|
||||
"agency": {
|
||||
"type": "belongsTo",
|
||||
"model": "AgencyMode",
|
||||
"foreignKey": "agencyFk"
|
||||
},
|
||||
"company": {
|
||||
"type": "belongsTo",
|
||||
"model": "Company",
|
||||
"foreignKey": "companyFk"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue