Merge branch 'master' into 6861-ItemShelvingSalesgetTickets
gitea/salix/pipeline/pr-master This commit looks good
Details
gitea/salix/pipeline/pr-master This commit looks good
Details
This commit is contained in:
commit
8840d57041
|
@ -39,6 +39,9 @@ module.exports = Self => {
|
||||||
const xmlString = response.data;
|
const xmlString = response.data;
|
||||||
const parser = new DOMParser();
|
const parser = new DOMParser();
|
||||||
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
|
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
|
||||||
|
|
||||||
|
await Self.rawSql('CALL util.debugAdd(?,?);', ['cancelShipment', xmlDoc]);
|
||||||
|
|
||||||
const result = xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
|
const result = xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
|
||||||
return result.toLowerCase().includes('se ha cancelado correctamente');
|
return result.toLowerCase().includes('se ha cancelado correctamente');
|
||||||
};
|
};
|
||||||
|
|
|
@ -127,7 +127,7 @@ BEGIN
|
||||||
LEFT JOIN tItemShelvingStock_byWarehouse issw ON issw.itemFk = i.id
|
LEFT JOIN tItemShelvingStock_byWarehouse issw ON issw.itemFk = i.id
|
||||||
AND issw.warehouseFk = t.warehouseFk
|
AND issw.warehouseFk = t.warehouseFk
|
||||||
WHERE IFNULL(v.visible, 0) < s.quantity
|
WHERE IFNULL(v.visible, 0) < s.quantity
|
||||||
AND IFNULL(av.available, 0) < s.quantity
|
AND IFNULL(av.available, 0) < 0
|
||||||
AND IFNULL(issw.visible, 0) < s.quantity
|
AND IFNULL(issw.visible, 0) < s.quantity
|
||||||
AND NOT s.isPicked
|
AND NOT s.isPicked
|
||||||
AND NOT s.reserved
|
AND NOT s.reserved
|
||||||
|
@ -190,7 +190,7 @@ BEGIN
|
||||||
LEFT JOIN tItemShelvingStock_byWarehouse issw ON issw.itemFk = i.id
|
LEFT JOIN tItemShelvingStock_byWarehouse issw ON issw.itemFk = i.id
|
||||||
AND issw.warehouseFk = t.warehouseFk
|
AND issw.warehouseFk = t.warehouseFk
|
||||||
WHERE IFNULL(v.visible, 0) < s.quantity
|
WHERE IFNULL(v.visible, 0) < s.quantity
|
||||||
AND IFNULL(av.available, 0) >= s.quantity
|
AND IFNULL(av.available, 0) >= 0
|
||||||
AND IFNULL(issw.visible, 0) < s.quantity
|
AND IFNULL(issw.visible, 0) < s.quantity
|
||||||
AND s.quantity > 0
|
AND s.quantity > 0
|
||||||
AND NOT s.isPicked
|
AND NOT s.isPicked
|
||||||
|
|
|
@ -59,7 +59,7 @@ proc: BEGIN
|
||||||
|
|
||||||
INSERT INTO stockBought(workerFk, bought, dated)
|
INSERT INTO stockBought(workerFk, bought, dated)
|
||||||
SELECT tb.workerFk,
|
SELECT tb.workerFk,
|
||||||
ROUND(GREATEST(tb.bought - IFNULL(ts.sold, 0), 0), 1),
|
ROUND(GREATEST(tb.bought - IFNULL(ts.sold, 0), 0), 2),
|
||||||
vDated
|
vDated
|
||||||
FROM tStockBought tb
|
FROM tStockBought tb
|
||||||
LEFT JOIN tStockSold ts ON ts.workerFk = tb.workerFk;
|
LEFT JOIN tStockSold ts ON ts.workerFk = tb.workerFk;
|
||||||
|
|
|
@ -3,62 +3,83 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_splitItemPacki
|
||||||
vSelf INT,
|
vSelf INT,
|
||||||
vOriginalItemPackingTypeFk VARCHAR(1)
|
vOriginalItemPackingTypeFk VARCHAR(1)
|
||||||
)
|
)
|
||||||
proc:BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Clona y reparte las líneas de ventas de un ticket en funcion del tipo de empaquetado.
|
* Clona y reparte las ventas de un ticket en funcion del tipo de empaquetado.
|
||||||
* Respeta el id de ticket original para el tipo de empaquetado propuesto.
|
* Respeta el id inicial para el tipo propuesto.
|
||||||
*
|
*
|
||||||
* @param vSelf Id ticket
|
* @param vSelf Id ticket
|
||||||
* @param vOriginalItemPackingTypeFk Tipo empaquetado que se mantiene el ticket original
|
* @param vOriginalItemPackingTypeFk Tipo para el que se reserva el número de ticket original
|
||||||
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
* @return table tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
*/
|
*/
|
||||||
DECLARE vDone INT DEFAULT FALSE;
|
DECLARE vItemPackingTypeFk VARCHAR(1) DEFAULT 'H';
|
||||||
DECLARE vHasItemPackingType BOOL;
|
|
||||||
DECLARE vItemPackingTypeFk INT;
|
|
||||||
DECLARE vNewTicketFk INT;
|
DECLARE vNewTicketFk INT;
|
||||||
|
DECLARE vPackingTypesToSplit INT;
|
||||||
|
DECLARE vDone INT DEFAULT FALSE;
|
||||||
|
|
||||||
DECLARE vItemPackingTypes CURSOR FOR
|
DECLARE vSaleGroup CURSOR FOR
|
||||||
SELECT DISTINCT itemPackingTypeFk
|
SELECT itemPackingTypeFk
|
||||||
FROM tSalesToMove;
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL
|
||||||
|
ORDER BY (itemPackingTypeFk = vOriginalItemPackingTypeFk) DESC;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||||
|
|
||||||
SELECT COUNT(*) INTO vHasItemPackingType
|
START TRANSACTION;
|
||||||
FROM ticket t
|
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
SELECT id
|
||||||
|
FROM sale
|
||||||
|
WHERE ticketFk = vSelf
|
||||||
|
AND NOT quantity
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
DELETE FROM sale
|
||||||
|
WHERE NOT quantity
|
||||||
|
AND ticketFk = vSelf;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tSale
|
||||||
|
(PRIMARY KEY (id))
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT s.id, i.itemPackingTypeFk, IFNULL(sv.litros, 0) litros
|
||||||
|
FROM sale s
|
||||||
JOIN item i ON i.id = s.itemFk
|
JOIN item i ON i.id = s.itemFk
|
||||||
WHERE t.id = vSelf
|
LEFT JOIN saleVolume sv ON sv.saleFk = s.id
|
||||||
AND i.itemPackingTypeFk = vOriginalItemPackingTypeFk;
|
WHERE s.ticketFk = vSelf;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tSaleGroup
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT itemPackingTypeFk, SUM(litros) totalLitros
|
||||||
|
FROM tSale
|
||||||
|
GROUP BY itemPackingTypeFk;
|
||||||
|
|
||||||
|
SELECT COUNT(*) INTO vPackingTypesToSplit
|
||||||
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
|
CREATE OR REPLACE TEMPORARY TABLE tmp.ticketIPT(
|
||||||
ticketFk INT,
|
ticketFk INT,
|
||||||
itemPackingTypeFk VARCHAR(1)
|
itemPackingTypeFk VARCHAR(1)
|
||||||
) ENGINE=MEMORY
|
|
||||||
SELECT vSelf ticketFk, vOriginalItemPackingTypeFk itemPackingTypeFk;
|
|
||||||
|
|
||||||
IF NOT vHasItemPackingType THEN
|
|
||||||
LEAVE proc;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tSalesToMove (
|
|
||||||
ticketFk INT,
|
|
||||||
saleFk INT,
|
|
||||||
itemPackingTypeFk INT
|
|
||||||
) ENGINE = MEMORY;
|
) ENGINE = MEMORY;
|
||||||
|
|
||||||
INSERT INTO tSalesToMove (saleFk, itemPackingTypeFk)
|
CASE vPackingTypesToSplit
|
||||||
SELECT s.id, i.itemPackingTypeFk
|
WHEN 0 THEN
|
||||||
FROM ticket t
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
JOIN sale s ON s.ticketFk = t.id
|
VALUES(vSelf, vItemPackingTypeFk);
|
||||||
JOIN item i ON i.id = s.itemFk
|
WHEN 1 THEN
|
||||||
WHERE t.id = vSelf
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
AND i.itemPackingTypeFk <> vOriginalItemPackingTypeFk;
|
SELECT vSelf, itemPackingTypeFk
|
||||||
|
FROM tSaleGroup
|
||||||
|
WHERE itemPackingTypeFk IS NOT NULL;
|
||||||
|
ELSE
|
||||||
|
OPEN vSaleGroup;
|
||||||
|
FETCH vSaleGroup INTO vItemPackingTypeFk;
|
||||||
|
|
||||||
OPEN vItemPackingTypes;
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
|
VALUES(vSelf, vItemPackingTypeFk);
|
||||||
|
|
||||||
l: LOOP
|
l: LOOP
|
||||||
SET vDone = FALSE;
|
SET vDone = FALSE;
|
||||||
FETCH vItemPackingTypes INTO vItemPackingTypeFk;
|
FETCH vSaleGroup INTO vItemPackingTypeFk;
|
||||||
|
|
||||||
IF vDone THEN
|
IF vDone THEN
|
||||||
LEAVE l;
|
LEAVE l;
|
||||||
|
@ -66,24 +87,40 @@ proc:BEGIN
|
||||||
|
|
||||||
CALL ticket_Clone(vSelf, vNewTicketFk);
|
CALL ticket_Clone(vSelf, vNewTicketFk);
|
||||||
|
|
||||||
UPDATE tSalesToMove
|
INSERT INTO tmp.ticketIPT(ticketFk, itemPackingTypeFk)
|
||||||
SET ticketFk = vNewTicketFk
|
VALUES(vNewTicketFk, vItemPackingTypeFk);
|
||||||
WHERE itemPackingTypeFk = vItemPackingTypeFk;
|
|
||||||
|
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
CLOSE vItemPackingTypes;
|
CLOSE vSaleGroup;
|
||||||
|
|
||||||
|
SELECT s.id
|
||||||
|
FROM sale s
|
||||||
|
JOIN tSale ts ON ts.id = s.id
|
||||||
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
UPDATE sale s
|
UPDATE sale s
|
||||||
JOIN tSalesToMove stm ON stm.saleFk = s.id
|
JOIN tSale ts ON ts.id = s.id
|
||||||
SET s.ticketFk = stm.ticketFk
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = ts.itemPackingTypeFk
|
||||||
WHERE stm.ticketFk;
|
SET s.ticketFk = t.ticketFk;
|
||||||
|
|
||||||
INSERT INTO tmp.ticketIPT (ticketFk, itemPackingTypeFk)
|
SELECT itemPackingTypeFk INTO vItemPackingTypeFk
|
||||||
SELECT ticketFk, itemPackingTypeFk
|
FROM tSaleGroup sg
|
||||||
FROM tSalesToMove
|
WHERE sg.itemPackingTypeFk IS NOT NULL
|
||||||
GROUP BY ticketFk;
|
ORDER BY sg.itemPackingTypeFk
|
||||||
|
LIMIT 1;
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tSalesToMove;
|
UPDATE sale s
|
||||||
|
JOIN tSale ts ON ts.id = s.id
|
||||||
|
JOIN tmp.ticketIPT t ON t.itemPackingTypeFk = vItemPackingTypeFk
|
||||||
|
SET s.ticketFk = t.ticketFk
|
||||||
|
WHERE ts.itemPackingTypeFk IS NULL;
|
||||||
|
END CASE;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE
|
||||||
|
tSale,
|
||||||
|
tSaleGroup;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
UPDATE vn.sale
|
-- Debido a que tardaba mucho en la subida a master, se ha creado una nueva versión para que el proceso no se vea afectado y se ejecute por la noche.
|
||||||
SET originalQuantity = quantity
|
-- Se crea de nuevo en la versión 11344-grayBamboo
|
||||||
WHERE originalQuantity IS NULL
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
-- ALTER TABLE vn.sale MODIFY COLUMN originalQuantity decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT 'Se utiliza para notificar a través de rocket los cambios de quantity';
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
CREATE TABLE IF NOT EXISTS `vn`.`itemTextureTag` (
|
||||||
|
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(50) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `name_UNIQUE` (`name`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT
|
||||||
|
CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
||||||
|
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Natural y encerado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Natural y esponjoso');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Natural y foam');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Natural y látex');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Arenosa');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Aterciopelado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Engomado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Flocado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Foam');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Gasa');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Goma');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Látex');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Latón');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Mate');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Metálico');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Natural');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Natural y engomado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Plastificado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Plastificado y engomado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Plastificado y rugoso');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Pluma');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Plástico');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Plástico engomado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Poliéster');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Poliéster texturizado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Rugoso');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Rígido');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Seminatural');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Silicona');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Suave');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela con brillo');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela con texturas');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela dura');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela engomada');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela escarchada');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela flocada');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela flocada engomada');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela foam');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela micro peach');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela plastificada');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela plástico engomado');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela poliéster');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela PVC');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela ratan');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela rigida');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela rugosa');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela rústica');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela sintética');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y cristal');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y foam');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y goma');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y látex');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y madera');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y plástico');
|
||||||
|
INSERT IGNORE INTO `vn`.`itemTextureTag` (`name`) VALUES ('Tela y seco');
|
||||||
|
|
||||||
|
UPDATE vn.tag
|
||||||
|
SET isFree=0,
|
||||||
|
sourceTable='itemTextureTag'
|
||||||
|
WHERE name= 'Textura';
|
||||||
|
|
||||||
|
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE vn.itemTextureTag TO logisticAssist;
|
|
@ -0,0 +1,3 @@
|
||||||
|
UPDATE vn.sale
|
||||||
|
SET originalQuantity = quantity
|
||||||
|
WHERE originalQuantity IS NULL
|
|
@ -0,0 +1 @@
|
||||||
|
ALTER TABLE vn.sale MODIFY COLUMN originalQuantity decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT 'Se utiliza para notificar a través de rocket los cambios de quantity';
|
|
@ -6,6 +6,9 @@ module.exports = Self => {
|
||||||
arg: 'workerFk',
|
arg: 'workerFk',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
description: 'The id for a buyer',
|
description: 'The id for a buyer',
|
||||||
|
}, {
|
||||||
|
arg: 'filter',
|
||||||
|
type: 'object',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'dated',
|
arg: 'dated',
|
||||||
|
@ -23,7 +26,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.getStockBought = async(workerFk, dated = Date.vnNew()) => {
|
Self.getStockBought = async(workerFk, filter, dated = Date.vnNew()) => {
|
||||||
const models = Self.app.models;
|
const models = Self.app.models;
|
||||||
const today = Date.vnNew();
|
const today = Date.vnNew();
|
||||||
dated.setHours(0, 0, 0, 0);
|
dated.setHours(0, 0, 0, 0);
|
||||||
|
@ -31,7 +34,7 @@ module.exports = Self => {
|
||||||
|
|
||||||
await models.StockBought.rawSql(`CALL vn.stockBought_calculate(?)`, [dated]);
|
await models.StockBought.rawSql(`CALL vn.stockBought_calculate(?)`, [dated]);
|
||||||
|
|
||||||
const filter = {
|
const defaultFilter = {
|
||||||
where: {dated},
|
where: {dated},
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
|
@ -53,6 +56,6 @@ module.exports = Self => {
|
||||||
|
|
||||||
if (workerFk) filter.where.workerFk = workerFk;
|
if (workerFk) filter.where.workerFk = workerFk;
|
||||||
|
|
||||||
return models.StockBought.find(filter);
|
return models.StockBought.find({...filter, ...defaultFilter});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('getStockBoughtDetail', {
|
Self.remoteMethod('getStockBoughtDetail', {
|
||||||
description: 'Returns the detail of stock bought for a given date and a worker',
|
description: 'Returns the detail of stock bought for a given date and a worker',
|
||||||
|
@ -12,6 +13,9 @@ module.exports = Self => {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
description: 'The date to filter',
|
description: 'The date to filter',
|
||||||
required: true,
|
required: true,
|
||||||
|
}, {
|
||||||
|
arg: 'filter',
|
||||||
|
type: 'object',
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
returns: {
|
returns: {
|
||||||
|
@ -24,11 +28,10 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Self.getStockBoughtDetail = async(workerFk, dated) => {
|
Self.getStockBoughtDetail = async(workerFk, dated, filter, options) => {
|
||||||
const models = Self.app.models;
|
const conn = Self.dataSource.connector;
|
||||||
const myOptions = {};
|
const myOptions = {};
|
||||||
let tx;
|
let tx;
|
||||||
let result;
|
|
||||||
|
|
||||||
if (typeof options == 'object')
|
if (typeof options == 'object')
|
||||||
Object.assign(myOptions, options);
|
Object.assign(myOptions, options);
|
||||||
|
@ -39,8 +42,10 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await models.StockBought.rawSql(`CALL vn.item_calculateStock(?)`, [dated], myOptions);
|
const stmts = [];
|
||||||
result = await Self.rawSql(
|
stmts.push(new ParameterizedSQL(`CALL vn.item_calculateStock(?)`, [dated]));
|
||||||
|
|
||||||
|
const query = new ParameterizedSQL(
|
||||||
`SELECT b.entryFk entryFk,
|
`SELECT b.entryFk entryFk,
|
||||||
i.id itemFk,
|
i.id itemFk,
|
||||||
i.name itemName,
|
i.name itemName,
|
||||||
|
@ -61,11 +66,17 @@ module.exports = Self => {
|
||||||
JOIN volumeConfig vc
|
JOIN volumeConfig vc
|
||||||
WHERE ic.display
|
WHERE ic.display
|
||||||
AND w.id = ?`,
|
AND w.id = ?`,
|
||||||
[workerFk], myOptions
|
[workerFk]
|
||||||
);
|
);
|
||||||
await Self.rawSql(`DROP TEMPORARY TABLE tmp.item, tmp.buyUltimate;`, [], myOptions);
|
|
||||||
|
stmts.push(query.merge(conn.makeSuffix(filter)));
|
||||||
|
|
||||||
|
stmts.push(new ParameterizedSQL(`DROP TEMPORARY TABLE tmp.item, tmp.buyUltimate`));
|
||||||
|
|
||||||
|
const sql = ParameterizedSQL.join(stmts, ';');
|
||||||
|
const result = await conn.executeStmt(sql, myOptions);
|
||||||
if (tx) await tx.commit();
|
if (tx) await tx.commit();
|
||||||
return result;
|
return result[1];
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await tx.rollback();
|
await tx.rollback();
|
||||||
throw e;
|
throw e;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
export * from './module';
|
export * from './module';
|
||||||
|
|
||||||
import './main';
|
import './main';
|
||||||
import './summary';
|
|
||||||
import './descriptor';
|
import './descriptor';
|
||||||
import './descriptor-popover';
|
import './descriptor-popover';
|
||||||
import './descriptor-menu';
|
import './descriptor-menu';
|
||||||
|
import './summary';
|
||||||
|
|
|
@ -34,6 +34,12 @@
|
||||||
"params": {
|
"params": {
|
||||||
"invoice-out": "$ctrl.invoiceOut"
|
"invoice-out": "$ctrl.invoiceOut"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "/:id",
|
||||||
|
"state": "invoiceOut.card",
|
||||||
|
"abstract": true,
|
||||||
|
"component": "vn-invoice-out-card"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ module.exports = Self => {
|
||||||
'name',
|
'name',
|
||||||
'subName',
|
'subName',
|
||||||
'itemPackingTypeFk',
|
'itemPackingTypeFk',
|
||||||
|
'size',
|
||||||
'tag5',
|
'tag5',
|
||||||
'value5',
|
'value5',
|
||||||
'tag6',
|
'tag6',
|
||||||
|
|
Loading…
Reference in New Issue