feat: gestión packing proveedores refs #7143 #2212
|
@ -5,7 +5,9 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [24.18.01] - 2024-05-02
|
||||
## [24.20.01] - 2024-05-14
|
||||
|
||||
## [24.18.01] - 2024-05-07
|
||||
|
||||
## [24.16.01] - 2024-04-18
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ node {
|
|||
FROM_GIT = env.JOB_NAME.startsWith('gitea/')
|
||||
RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT
|
||||
RUN_BUILD = PROTECTED_BRANCH && FROM_GIT
|
||||
env.DEBUG = 'strong-remoting:shared-method'
|
||||
// env.DEBUG = 'strong-remoting:shared-method'
|
||||
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
|
||||
echo "NODE_NAME: ${env.NODE_NAME}"
|
||||
echo "WORKSPACE: ${env.WORKSPACE}"
|
||||
|
|
|
@ -12,8 +12,8 @@ module.exports = Self => {
|
|||
http: {
|
||||
path: `/renewToken`,
|
||||
verb: 'POST'
|
||||
}
|
||||
});
|
||||
},
|
||||
accessScopes: ['DEFAULT', 'read:multimedia']});
|
||||
|
||||
Self.renewToken = async function(ctx) {
|
||||
const {accessToken: token} = ctx.req;
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# EditorConfig helps developers define and maintain consistent
|
||||
# coding styles between different editors and IDEs
|
||||
# http://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
|
@ -527,7 +527,8 @@ INSERT INTO `vn`.`observationType`(`id`,`description`, `code`)
|
|||
(4, 'SalesPerson', 'salesPerson'),
|
||||
(5, 'Administrative', 'administrative'),
|
||||
(6, 'Weight', 'weight'),
|
||||
(7, 'InvoiceOut', 'invoiceOut');
|
||||
(7, 'InvoiceOut', 'invoiceOut'),
|
||||
(8, 'DropOff', 'dropOff');
|
||||
|
||||
INSERT INTO `vn`.`addressObservation`(`id`,`addressFk`,`observationTypeFk`,`description`)
|
||||
VALUES
|
||||
|
@ -2615,16 +2616,32 @@ INSERT INTO `vn`.`invoiceInIntrastat` (`invoiceInFk`, `net`, `intrastatFk`, `amo
|
|||
(2, 16.10, 6021010, 25.00, 80, 5);
|
||||
|
||||
UPDATE `vn`.`invoiceIn`
|
||||
SET isBooked = TRUE
|
||||
WHERE id IN (2, 5, 7, 8, 9, 10);
|
||||
SET isBooked = TRUE
|
||||
WHERE id IN (5, 7, 8, 9, 10);
|
||||
|
||||
INSERT INTO `vn`.`ticketRecalc`(`ticketFk`)
|
||||
SELECT t.id
|
||||
FROM vn.ticket t
|
||||
LEFT JOIN vn.ticketRecalc tr ON tr.ticketFk = t.id
|
||||
WHERE tr.ticketFk IS NULL;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `tmp`.`ticket_recalc`()
|
||||
BEGIN
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vTicketFk INT;
|
||||
|
||||
CALL `vn`.`ticket_doRecalc`();
|
||||
DECLARE cTickets CURSOR FOR SELECT id FROM vn.ticket;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
OPEN cTickets;
|
||||
myLoop: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH cTickets INTO vTicketFk;
|
||||
IF vDone THEN LEAVE myLoop; END IF;
|
||||
CALL vn.ticket_recalc(vTicketFk, NULL);
|
||||
END LOOP;
|
||||
CLOSE cTickets;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
||||
CALL tmp.ticket_recalc;
|
||||
DROP PROCEDURE tmp.ticket_recalc;
|
||||
|
||||
UPDATE `vn`.`ticket`
|
||||
SET refFk = 'T1111111'
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `hedera`.`order_doRecalc`
|
||||
ON SCHEDULE EVERY 10 SECOND
|
||||
STARTS '2019-08-29 14:18:04.000'
|
||||
ON COMPLETION PRESERVE
|
||||
DISABLE
|
||||
DO CALL order_doRecalc$$
|
||||
DELIMITER ;
|
|
@ -1,53 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_doRecalc`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Recalculates modified orders.
|
||||
*/
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vOrderFk INT;
|
||||
|
||||
DECLARE cCur CURSOR FOR
|
||||
SELECT DISTINCT orderFk FROM tOrder;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
DO RELEASE_LOCK('hedera.order_doRecalc');
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF !GET_LOCK('hedera.order_doRecalc', 0) THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tOrder;
|
||||
CREATE TEMPORARY TABLE tOrder
|
||||
ENGINE = MEMORY
|
||||
SELECT id, orderFk FROM orderRecalc;
|
||||
|
||||
OPEN cCur;
|
||||
|
||||
myLoop: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH cCur INTO vOrderFk;
|
||||
|
||||
IF vDone THEN
|
||||
LEAVE myLoop;
|
||||
END IF;
|
||||
|
||||
CALL order_recalc(vOrderFk);
|
||||
END LOOP;
|
||||
|
||||
CLOSE cCur;
|
||||
|
||||
DELETE o FROM orderRecalc o JOIN tOrder t ON t.id = o.id;
|
||||
|
||||
DROP TEMPORARY TABLE tOrder;
|
||||
|
||||
DO RELEASE_LOCK('hedera.order_doRecalc');
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,16 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_requestRecalc`(vSelf INT)
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Adds a request to recalculate the order total.
|
||||
*
|
||||
* @param vSelf The order identifier
|
||||
*/
|
||||
IF vSelf IS NULL THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
-- #4409 Disable order recalc
|
||||
-- INSERT INTO orderRecalc SET orderFk = vSelf;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,9 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterDelete`
|
||||
AFTER DELETE ON `orderRow`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL stock.log_add('orderRow', NULL, OLD.id);
|
||||
CALL order_requestRecalc(OLD.orderFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,9 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterInsert`
|
||||
AFTER INSERT ON `orderRow`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL stock.log_add('orderRow', NEW.id, NULL);
|
||||
CALL order_requestRecalc(NEW.orderFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,10 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`orderRow_afterUpdate`
|
||||
AFTER UPDATE ON `orderRow`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL stock.log_add('orderRow', NEW.id, OLD.id);
|
||||
CALL order_requestRecalc(OLD.orderFk);
|
||||
CALL order_requestRecalc(NEW.orderFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -2,23 +2,15 @@ DELIMITER $$
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `hedera`.`order_afterUpdate`
|
||||
AFTER UPDATE ON `order`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL stock.log_add('order', NEW.id, OLD.id);
|
||||
|
||||
IF !(OLD.address_id <=> NEW.address_id)
|
||||
OR !(OLD.company_id <=> NEW.company_id)
|
||||
OR !(OLD.customer_id <=> NEW.customer_id) THEN
|
||||
CALL order_requestRecalc(NEW.id);
|
||||
END IF;
|
||||
|
||||
IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
|
||||
-- Fallo que se actualiza no se sabe como tickets en este cliente
|
||||
CALL vn.mail_insert(
|
||||
'jgallego@verdnatura.es',
|
||||
'noreply@verdnatura.es',
|
||||
'Actualizada order al address 2850',
|
||||
CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
|
||||
);
|
||||
END IF;
|
||||
BEGIN
|
||||
IF !(OLD.address_id <=> NEW.address_id) AND NEW.address_id = 2850 THEN
|
||||
-- Fallo que se actualiza no se sabe como tickets en este cliente
|
||||
CALL vn.mail_insert(
|
||||
'jgallego@verdnatura.es',
|
||||
'noreply@verdnatura.es',
|
||||
'Actualizada order al address 2850',
|
||||
CONCAT(account.myUser_getName(), ' ha creado la order ',NEW.id)
|
||||
);
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -43,7 +43,7 @@ BEGIN
|
|||
WHERE sub.amountTaxableBase<>sub2.amountTaxableBase
|
||||
AND sub.amountTaxableBase/2 <> sub2.amountTaxableBase
|
||||
UNION ALL
|
||||
SELECT CONCAT('- Factura Duplicada: ', mc.Asiento)
|
||||
SELECT CONCAT('- Factura Duplicada: ', accountingEntryFk)
|
||||
FROM accountingEntryError
|
||||
)sub;
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_addPick`(
|
||||
vSelf INT,
|
||||
vOutboundFk INT,
|
||||
vQuantity INT
|
||||
vOutboundFk INT,
|
||||
vQuantity INT
|
||||
)
|
||||
BEGIN
|
||||
INSERT INTO inboundPick
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_removePick`(
|
||||
vSelf INT,
|
||||
vOutboundFk INT,
|
||||
vQuantity INT,
|
||||
vTotalQuantity INT
|
||||
vOutboundFk INT,
|
||||
vQuantity INT,
|
||||
vTotalQuantity INT
|
||||
)
|
||||
BEGIN
|
||||
IF vQuantity < vTotalQuantity THEN
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`inbound_requestQuantity`(
|
||||
vSelf INT,
|
||||
vRequested INT,
|
||||
vDated DATETIME,
|
||||
OUT vSupplied INT)
|
||||
vRequested INT,
|
||||
vDated DATETIME,
|
||||
OUT vSupplied INT)
|
||||
BEGIN
|
||||
/**
|
||||
* Disassociates inbound picks after the given date until the
|
||||
|
@ -29,7 +29,7 @@ BEGIN
|
|||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
|
||||
SET vSupplied = 0;
|
||||
|
||||
OPEN vPicks;
|
||||
|
@ -45,7 +45,7 @@ BEGIN
|
|||
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
|
||||
SET vSupplied = vSupplied + vPickGranted;
|
||||
CALL inbound_removePick(vSelf, vOutboundFk, vPickGranted, vPickQuantity);
|
||||
|
||||
|
||||
UPDATE outbound
|
||||
SET isSync = FALSE,
|
||||
lack = lack + vPickGranted
|
||||
|
|
|
@ -23,7 +23,7 @@ BEGIN
|
|||
SELECT id, lack, lack < quantity
|
||||
FROM outbound
|
||||
WHERE warehouseFk = vWarehouse
|
||||
AND itemFk = vItem
|
||||
AND itemFk = vItem
|
||||
AND dated >= vDated
|
||||
AND (vExpired IS NULL OR dated < vExpired)
|
||||
ORDER BY dated, created;
|
||||
|
@ -51,8 +51,8 @@ BEGIN
|
|||
END IF;
|
||||
|
||||
SET vSupplied = LEAST(vAvailable, vLack);
|
||||
|
||||
IF vSupplied > 0 THEN
|
||||
|
||||
IF vSupplied > 0 THEN
|
||||
SET vAvailable = vAvailable - vSupplied;
|
||||
UPDATE outbound
|
||||
SET lack = lack - vSupplied
|
||||
|
@ -64,8 +64,8 @@ BEGIN
|
|||
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
||||
SET vAvailable = vAvailable - vSuppliedFromRequest;
|
||||
END IF;
|
||||
|
||||
IF vSupplied > 0 THEN
|
||||
|
||||
IF vSupplied > 0 THEN
|
||||
CALL inbound_addPick(vSelf, vOutboundFk, vSupplied);
|
||||
END IF;
|
||||
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_add`(IN `vTableName` VARCHAR(255), IN `vNewId` VARCHAR(255), IN `vOldId` VARCHAR(255))
|
||||
proc: BEGIN
|
||||
-- XXX: Disabled while testing
|
||||
LEAVE proc;
|
||||
|
||||
IF vOldId IS NOT NULL AND !(vOldId <=> vNewId) THEN
|
||||
INSERT IGNORE INTO `log` SET
|
||||
tableName = vTableName,
|
||||
tableId = vOldId,
|
||||
operation = 'delete';
|
||||
END IF;
|
||||
|
||||
IF vNewId IS NOT NULL THEN
|
||||
INSERT IGNORE INTO `log` SET
|
||||
tableName = vTableName,
|
||||
tableId = vNewId,
|
||||
operation = 'insert';
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -10,7 +10,7 @@ BEGIN
|
|||
DO RELEASE_LOCK('stock.log_sync');
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
|
||||
IF !GET_LOCK('stock.log_sync', 30) THEN
|
||||
CALL util.throw('Lock timeout exceeded');
|
||||
END IF;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshBuy`(
|
||||
`vTableName` VARCHAR(255),
|
||||
`vTableId` INT)
|
||||
`vTableName` VARCHAR(255),
|
||||
`vTableId` INT)
|
||||
BEGIN
|
||||
DROP TEMPORARY TABLE IF EXISTS tValues;
|
||||
CREATE TEMPORARY TABLE tValues
|
||||
|
@ -11,7 +11,7 @@ BEGIN
|
|||
e.id entryFk,
|
||||
t.id travelFk,
|
||||
b.itemFk,
|
||||
e.isRaid,
|
||||
e.isRaid,
|
||||
ADDTIME(t.shipped,
|
||||
IFNULL(t.shipmentHour, '00:00:00')) shipped,
|
||||
t.warehouseOutFk,
|
||||
|
@ -24,7 +24,7 @@ BEGIN
|
|||
ABS(b.quantity) quantity,
|
||||
b.created,
|
||||
b.quantity > 0 isIn,
|
||||
t.shipped < vn.getInventoryDate() lessThanInventory
|
||||
t.shipped < vn.getInventoryDate() lessThanInventory
|
||||
FROM vn.buy b
|
||||
JOIN vn.entry e ON e.id = b.entryFk
|
||||
JOIN vn.travel t ON t.id = e.travelFk
|
||||
|
@ -52,7 +52,7 @@ BEGIN
|
|||
quantity,
|
||||
IF(isIn, isReceived, isDelivered) AND !isRaid
|
||||
FROM tValues
|
||||
WHERE isIn OR !lessThanInventory;
|
||||
WHERE isIn OR !lessThanInventory;
|
||||
|
||||
REPLACE INTO outbound (
|
||||
tableName, tableId, warehouseFk, dated,
|
||||
|
@ -67,7 +67,7 @@ BEGIN
|
|||
quantity,
|
||||
IF(isIn, isDelivered, isReceived) AND !isRaid
|
||||
FROM tValues
|
||||
WHERE !isIn OR !lessThanInventory;
|
||||
WHERE !isIn OR !lessThanInventory;
|
||||
|
||||
DROP TEMPORARY TABLE tValues;
|
||||
END$$
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshOrder`(
|
||||
`vTableName` VARCHAR(255),
|
||||
`vTableId` INT)
|
||||
`vTableName` VARCHAR(255),
|
||||
`vTableId` INT)
|
||||
BEGIN
|
||||
DECLARE vExpireTime INT DEFAULT 20;
|
||||
DECLARE vExpired DATETIME DEFAULT TIMESTAMPADD(MINUTE, -vExpireTime, util.VN_NOW());
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tValues;
|
||||
CREATE TEMPORARY TABLE tValues
|
||||
CREATE TEMPORARY TABLE tValues
|
||||
ENGINE = MEMORY
|
||||
SELECT
|
||||
r.id rowFk,
|
||||
|
@ -23,24 +23,24 @@ BEGIN
|
|||
OR (vTableName = 'order' AND o.id = vTableId)
|
||||
OR (vTableName = 'orderRow' AND r.id = vTableId)
|
||||
)
|
||||
AND !o.confirmed
|
||||
AND r.shipment >= vn.getInventoryDate()
|
||||
AND !o.confirmed
|
||||
AND r.shipment >= vn.getInventoryDate()
|
||||
AND r.created >= vExpired
|
||||
AND r.amount != 0;
|
||||
|
||||
REPLACE INTO outbound (
|
||||
tableName, tableId, warehouseFk, dated,
|
||||
itemFk, created, expired, quantity
|
||||
itemFk, created, expired, quantity
|
||||
)
|
||||
SELECT 'orderRow',
|
||||
SELECT 'orderRow',
|
||||
rowFk,
|
||||
warehouseFk,
|
||||
shipped,
|
||||
itemFk,
|
||||
created,
|
||||
TIMESTAMPADD(MINUTE, vExpireTime, created),
|
||||
TIMESTAMPADD(MINUTE, vExpireTime, created),
|
||||
quantity
|
||||
FROM tValues;
|
||||
FROM tValues;
|
||||
|
||||
DROP TEMPORARY TABLE tValues;
|
||||
END$$
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`log_refreshSale`(
|
||||
`vTableName` VARCHAR(255),
|
||||
`vTableId` INT)
|
||||
`vTableName` VARCHAR(255),
|
||||
`vTableId` INT)
|
||||
BEGIN
|
||||
DROP TEMPORARY TABLE IF EXISTS tValues;
|
||||
CREATE TEMPORARY TABLE tValues
|
||||
CREATE TEMPORARY TABLE tValues
|
||||
ENGINE = MEMORY
|
||||
SELECT
|
||||
m.id saleFk,
|
||||
|
@ -14,7 +14,7 @@ BEGIN
|
|||
t.shipped,
|
||||
ABS(m.quantity) quantity,
|
||||
m.created,
|
||||
TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
|
||||
TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
|
||||
m.quantity < 0 isIn,
|
||||
m.isPicked OR s.alertLevel > 1 isPicked
|
||||
FROM vn.sale m
|
||||
|
@ -32,33 +32,33 @@ BEGIN
|
|||
|
||||
REPLACE INTO inbound (
|
||||
tableName, tableId, warehouseFk, dated,
|
||||
itemFk, expired, quantity, isPicked
|
||||
itemFk, expired, quantity, isPicked
|
||||
)
|
||||
SELECT 'sale',
|
||||
SELECT 'sale',
|
||||
saleFk,
|
||||
warehouseFk,
|
||||
shipped,
|
||||
itemFk,
|
||||
expired,
|
||||
expired,
|
||||
quantity,
|
||||
isPicked
|
||||
FROM tValues
|
||||
WHERE isIn;
|
||||
isPicked
|
||||
FROM tValues
|
||||
WHERE isIn;
|
||||
|
||||
REPLACE INTO outbound (
|
||||
tableName, tableId, warehouseFk, dated,
|
||||
itemFk, created, quantity, isPicked
|
||||
itemFk, created, quantity, isPicked
|
||||
)
|
||||
SELECT 'sale',
|
||||
SELECT 'sale',
|
||||
saleFk,
|
||||
warehouseFk,
|
||||
shipped,
|
||||
itemFk,
|
||||
created,
|
||||
quantity,
|
||||
isPicked
|
||||
FROM tValues
|
||||
WHERE !isIn;
|
||||
isPicked
|
||||
FROM tValues
|
||||
WHERE !isIn;
|
||||
|
||||
DROP TEMPORARY TABLE tValues;
|
||||
END$$
|
||||
|
|
|
@ -7,7 +7,7 @@ BEGIN
|
|||
* @param vSelf The outbound reference
|
||||
*/
|
||||
DECLARE vDated DATETIME;
|
||||
DECLARE vItem INT;
|
||||
DECLARE vItem INT;
|
||||
DECLARE vWarehouse INT;
|
||||
DECLARE vLack INT;
|
||||
DECLARE vSupplied INT;
|
||||
|
@ -21,7 +21,7 @@ BEGIN
|
|||
SELECT id, available, available < quantity
|
||||
FROM inbound
|
||||
WHERE warehouseFk = vWarehouse
|
||||
AND itemFk = vItem
|
||||
AND itemFk = vItem
|
||||
AND dated <= vDated
|
||||
AND (expired IS NULL OR expired > vDated)
|
||||
ORDER BY dated;
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`visible_log`(
|
||||
vIsPicked BOOL,
|
||||
vWarehouseFk INT,
|
||||
vItemFk INT,
|
||||
vQuantity INT
|
||||
vWarehouseFk INT,
|
||||
vItemFk INT,
|
||||
vQuantity INT
|
||||
)
|
||||
proc: BEGIN
|
||||
IF !vIsPicked THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
INSERT INTO visible
|
||||
INSERT INTO visible
|
||||
SET itemFk = vItemFk,
|
||||
warehouseFk = vWarehouseFk,
|
||||
quantity = vQuantity
|
||||
|
|
|
@ -12,11 +12,11 @@ BEGIN
|
|||
DELETE FROM inboundPick
|
||||
WHERE inboundFk = OLD.id;
|
||||
|
||||
CALL visible_log(
|
||||
CALL visible_log(
|
||||
OLD.isPicked,
|
||||
OLD.warehouseFk,
|
||||
OLD.itemFk,
|
||||
-OLD.quantity
|
||||
OLD.warehouseFk,
|
||||
OLD.itemFk,
|
||||
-OLD.quantity
|
||||
);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -4,12 +4,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `stock`.`inbound_beforeInse
|
|||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
|
||||
|
||||
CALL visible_log(
|
||||
|
||||
CALL visible_log(
|
||||
NEW.isPicked,
|
||||
NEW.warehouseFk,
|
||||
NEW.itemFk,
|
||||
NEW.quantity
|
||||
NEW.warehouseFk,
|
||||
NEW.itemFk,
|
||||
NEW.quantity
|
||||
);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -12,11 +12,11 @@ BEGIN
|
|||
DELETE FROM inboundPick
|
||||
WHERE outboundFk = OLD.id;
|
||||
|
||||
CALL visible_log(
|
||||
CALL visible_log(
|
||||
OLD.isPicked,
|
||||
OLD.warehouseFk,
|
||||
OLD.itemFk,
|
||||
OLD.quantity
|
||||
OLD.warehouseFk,
|
||||
OLD.itemFk,
|
||||
OLD.quantity
|
||||
);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -5,12 +5,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `stock`.`outbound_beforeIns
|
|||
BEGIN
|
||||
SET NEW.lack = NEW.quantity;
|
||||
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
|
||||
|
||||
CALL visible_log(
|
||||
|
||||
CALL visible_log(
|
||||
NEW.isPicked,
|
||||
NEW.warehouseFk,
|
||||
NEW.itemFk,
|
||||
-NEW.quantity
|
||||
NEW.warehouseFk,
|
||||
NEW.itemFk,
|
||||
-NEW.quantity
|
||||
);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `util`.`binlogQueue_getDelay`(vCode VARCHAR(255))
|
||||
RETURNS BIGINT
|
||||
READS SQL DATA
|
||||
NOT DETERMINISTIC
|
||||
BEGIN
|
||||
/**
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`ticket_doRecalc`
|
||||
ON SCHEDULE EVERY 10 SECOND
|
||||
STARTS '2022-01-28 09:29:18.000'
|
||||
ON COMPLETION PRESERVE
|
||||
ENABLE
|
||||
DO CALL ticket_doRecalc$$
|
||||
DELIMITER ;
|
|
@ -1,8 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`travel_doRecalc`
|
||||
ON SCHEDULE EVERY 15 SECOND
|
||||
STARTS '2019-05-17 10:52:29.000'
|
||||
ON COMPLETION PRESERVE
|
||||
ENABLE
|
||||
DO CALL travel_doRecalc$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,138 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`available_traslate`(
|
||||
vWarehouseLanding INT,
|
||||
vDated DATE,
|
||||
vWarehouseShipment INT)
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Calcular la disponibilidad dependiendo del almacen
|
||||
* de origen y destino según la fecha.
|
||||
*
|
||||
* @param vWarehouseLanding Almacén de llegada
|
||||
* @param vDated Fecha del calculo para la disponibilidad de articulos
|
||||
* @param vWarehouseShipment Almacén de destino
|
||||
*/
|
||||
DECLARE vDatedFrom DATE;
|
||||
DECLARE vDatedTo DATETIME;
|
||||
DECLARE vDatedReserve DATETIME;
|
||||
DECLARE vDatedInventory DATE;
|
||||
|
||||
IF vDated < util.VN_CURDATE() THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
CALL item_getStock (vWarehouseLanding, vDated, NULL);
|
||||
|
||||
-- Calcula algunos parámetros necesarios.
|
||||
SET vDatedFrom = vDated;
|
||||
SET vDatedTo = util.dayEnd (vDated + INTERVAL 4 DAY);
|
||||
SELECT inventoried INTO vDatedInventory FROM config;
|
||||
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
|
||||
FROM hedera.orderConfig;
|
||||
|
||||
-- Calcula el ultimo dia de vida para cada producto.
|
||||
CREATE OR REPLACE TEMPORARY TABLE tItemRange
|
||||
(PRIMARY KEY (itemFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT c.itemFk, MAX(t.landed) dated
|
||||
FROM buy c
|
||||
JOIN entry e ON c.entryFk = e.id
|
||||
JOIN travel t ON t.id = e.travelFk
|
||||
JOIN warehouse w ON w.id = t.warehouseInFk
|
||||
WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
|
||||
AND t.warehouseInFk = vWarehouseLanding
|
||||
AND NOT e.isExcludedFromAvailable
|
||||
AND NOT e.isRaid
|
||||
GROUP BY c.itemFk;
|
||||
|
||||
-- Tabla con el ultimo dia de last_buy para cada producto
|
||||
-- que hace un replace de la anterior.
|
||||
CALL buyUltimate(vWarehouseShipment, util.VN_CURDATE());
|
||||
|
||||
INSERT INTO tItemRange
|
||||
SELECT t.itemFk, tr.landed
|
||||
FROM tmp.buyUltimate t
|
||||
JOIN buy b ON b.id = t.buyFk
|
||||
JOIN entry e ON e.id = b.entryFk
|
||||
JOIN travel tr ON tr.id = e.travelFk
|
||||
LEFT JOIN tItemRange i ON t.itemFk = i.itemFk
|
||||
WHERE t.warehouseFk = vWarehouseShipment
|
||||
AND NOT e.isRaid
|
||||
ON DUPLICATE KEY UPDATE tItemRange.dated = GREATEST(tItemRange.dated,
|
||||
tr.landed);
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tItemRangeLive
|
||||
(PRIMARY KEY (itemFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT ir.itemFk, util.dayEnd(ir.dated + INTERVAL it.life DAY) dated
|
||||
FROM tItemRange ir
|
||||
JOIN item i ON i.id = ir.itemFk
|
||||
JOIN itemType it ON it.id = i.typeFk
|
||||
HAVING dated >= vDatedFrom OR dated IS NULL;
|
||||
|
||||
-- Calcula el ATP.
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
||||
(INDEX (itemFk,warehouseFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT i.itemFk,
|
||||
vWarehouseLanding warehouseFk,
|
||||
i.shipped dated,
|
||||
i.quantity
|
||||
FROM itemTicketOut i
|
||||
JOIN tItemRangeLive ir ON ir.itemFK = i.itemFk
|
||||
WHERE i.shipped >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
|
||||
AND i.warehouseFk = vWarehouseLanding
|
||||
UNION ALL
|
||||
SELECT b.itemFk,
|
||||
vWarehouseLanding,
|
||||
t.landed,
|
||||
b.quantity
|
||||
FROM buy b
|
||||
JOIN entry e ON b.entryFk = e.id
|
||||
JOIN travel t ON t.id = e.travelFk
|
||||
JOIN tItemRangeLive ir ON ir.itemFk = b.itemFk
|
||||
WHERE NOT e.isExcludedFromAvailable
|
||||
AND b.quantity <> 0
|
||||
AND NOT e.isRaid
|
||||
AND t.warehouseInFk = vWarehouseLanding
|
||||
AND t.landed >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR t.landed <= ir.dated)
|
||||
UNION ALL
|
||||
SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
|
||||
FROM itemEntryOut i
|
||||
JOIN tItemRangeLive ir ON ir.itemFk = i.itemFk
|
||||
WHERE i.shipped >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
|
||||
AND i.warehouseOutFk = vWarehouseLanding
|
||||
UNION ALL
|
||||
SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
|
||||
FROM hedera.order_row r
|
||||
JOIN hedera.`order` o ON o.id = r.order_id
|
||||
JOIN tItemRangeLive ir ON ir.itemFk = r.item_id
|
||||
WHERE r.shipment >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR r.shipment <= ir.dated)
|
||||
AND r.warehouse_id = vWarehouseLanding
|
||||
AND r.created >= vDatedReserve
|
||||
AND NOT o.confirmed;
|
||||
|
||||
CALL item_getAtp(vDated);
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.availableTraslate
|
||||
(PRIMARY KEY (item_id))
|
||||
ENGINE = MEMORY
|
||||
SELECT t.item_id, SUM(stock) available
|
||||
FROM (
|
||||
SELECT ti.itemFk item_id, stock
|
||||
FROM tmp.itemList ti
|
||||
JOIN tItemRange ir ON ir.itemFk = ti.itemFk
|
||||
UNION ALL
|
||||
SELECT itemFk, quantity
|
||||
FROM tmp.itemAtp
|
||||
) t
|
||||
GROUP BY t.item_id
|
||||
HAVING available <> 0;
|
||||
|
||||
DROP TEMPORARY TABLE tmp.itemList, tItemRange, tItemRangeLive;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,217 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`balance_create`(
|
||||
IN vStartingMonth INT,
|
||||
IN vEndingMonth INT,
|
||||
IN vCompany INT,
|
||||
IN vIsConsolidated BOOLEAN,
|
||||
IN vInterGroupSalesIncluded BOOLEAN)
|
||||
BEGIN
|
||||
/**
|
||||
* Crea un balance financiero para una empresa durante
|
||||
* un período de tiempo determinado.
|
||||
*
|
||||
* @param vStartingMonth Mes de inicio del período
|
||||
* @param vEndingMonth Mes de finalización del período
|
||||
* @param vCompany Identificador de la empresa
|
||||
* @param vIsConsolidated Indica si se trata de un balance consolidado
|
||||
* @param vInterGroupSalesIncluded Indica si se incluyen las ventas del grupo
|
||||
*/
|
||||
DECLARE intGAP INT DEFAULT 7;
|
||||
DECLARE vYears INT DEFAULT 2;
|
||||
DECLARE vYear TEXT;
|
||||
DECLARE vOneYearAgo TEXT;
|
||||
DECLARE vTwoYearsAgo TEXT;
|
||||
DECLARE vQuery TEXT;
|
||||
DECLARE vConsolidatedGroup INT;
|
||||
DECLARE vStartingDate DATE DEFAULT '2020-01-01';
|
||||
DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
|
||||
DECLARE vStartingYear INT DEFAULT vCurYear - 2;
|
||||
DECLARE vTable TEXT;
|
||||
|
||||
SET vTable = util.quoteIdentifier('balanceNestTree');
|
||||
SET vYear = util.quoteIdentifier(vCurYear);
|
||||
SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
|
||||
SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
|
||||
|
||||
-- Solicitamos la tabla tmp.nest, como base para el balance.
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.nest;
|
||||
|
||||
EXECUTE IMMEDIATE CONCAT(
|
||||
'CREATE TEMPORARY TABLE tmp.nest
|
||||
SELECT node.id
|
||||
,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1),
|
||||
node.name) name,
|
||||
node.lft,
|
||||
node.rgt,
|
||||
COUNT(parent.id) - 1 depth,
|
||||
CAST((node.rgt - node.lft - 1) / 2 AS DECIMAL) sons
|
||||
FROM ', vTable, ' node,
|
||||
', vTable, ' parent
|
||||
WHERE node.lft BETWEEN parent.lft AND parent.rgt
|
||||
GROUP BY node.id
|
||||
ORDER BY node.lft')
|
||||
USING intGAP;
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.balance
|
||||
SELECT * FROM tmp.nest;
|
||||
|
||||
SELECT companyGroupFk INTO vConsolidatedGroup
|
||||
FROM company
|
||||
WHERE id = vCompany;
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tCompanyReceiving
|
||||
SELECT id companyFk
|
||||
FROM company
|
||||
WHERE id = vCompany
|
||||
OR companyGroupFk = IF(vIsConsolidated, vConsolidatedGroup, NULL);
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tCompanyIssuing
|
||||
SELECT id companyFk
|
||||
FROM supplier p;
|
||||
|
||||
IF NOT vInterGroupSalesIncluded THEN
|
||||
|
||||
DELETE ci
|
||||
FROM tCompanyIssuing ci
|
||||
JOIN company e on e.id = ci.companyFk
|
||||
WHERE e.companyGroupFk = vConsolidatedGroup;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Se calculan las facturas que intervienen,
|
||||
-- para luego poder servir el desglose desde aqui.
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.balanceDetail
|
||||
SELECT cr.companyFk receivingId,
|
||||
ci.companyFk issuingId,
|
||||
YEAR(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `year`,
|
||||
MONTH(IFNULL(r.bookEntried,IFNULL(r.booked, r.issued))) `month`,
|
||||
expenseFk,
|
||||
SUM(taxableBase) amount
|
||||
FROM invoiceIn r
|
||||
JOIN invoiceInTax ri on ri.invoiceInFk = r.id
|
||||
JOIN tCompanyReceiving cr on cr.companyFk = r.companyFk
|
||||
JOIN tCompanyIssuing ci ON ci.companyFk = r.supplierFk
|
||||
WHERE COALESCE(r.bookEntried, r.booked, r.issued) >= vStartingDate
|
||||
AND r.isBooked
|
||||
GROUP BY expenseFk, `year`, `month`, ci.companyFk, cr.companyFk;
|
||||
|
||||
INSERT INTO tmp.balanceDetail(
|
||||
receivingId,
|
||||
issuingId,
|
||||
`year`,
|
||||
`month`,
|
||||
expenseFk,
|
||||
amount)
|
||||
SELECT em.companyFk,
|
||||
em.companyFk,
|
||||
`year`,
|
||||
`month`,
|
||||
expenseFk,
|
||||
SUM(em.amount)
|
||||
FROM expenseManual em
|
||||
JOIN tCompanyReceiving er ON er.companyFk = em.companyFk
|
||||
WHERE `year` >= vStartingYear
|
||||
AND `month` BETWEEN vStartingMonth AND vEndingMonth
|
||||
GROUP BY expenseFk, `year`, `month`, em.companyFk;
|
||||
|
||||
DELETE FROM tmp.balanceDetail
|
||||
WHERE `month` < vStartingMonth
|
||||
OR `month` > vEndingMonth;
|
||||
|
||||
-- Ahora el balance
|
||||
EXECUTE IMMEDIATE CONCAT(
|
||||
'ALTER TABLE tmp.balance
|
||||
ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
|
||||
ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
|
||||
ADD COLUMN ', vYear,' INT(10) NULL ,
|
||||
ADD COLUMN expenseFk VARCHAR(10) NULL,
|
||||
ADD COLUMN expenseName VARCHAR(45) NULL');
|
||||
|
||||
-- Añadimos los gastos, para facilitar el formulario
|
||||
UPDATE tmp.balance b
|
||||
JOIN balanceNestTree bnt on bnt.id = b.id
|
||||
JOIN expense e ON e.id = bnt.expenseFk COLLATE utf8_general_ci
|
||||
SET b.expenseFk = e.id COLLATE utf8_general_ci,
|
||||
b.expenseName = e.name COLLATE utf8_general_ci ;
|
||||
|
||||
-- Rellenamos los valores de primer nivel, los que corresponden
|
||||
-- a los gastos simples.
|
||||
WHILE vYears >= 0 DO
|
||||
SET vQuery = CONCAT(
|
||||
'UPDATE tmp.balance b
|
||||
JOIN (
|
||||
SELECT expenseFk, SUM(amount) amount
|
||||
FROM tmp.balanceDetail
|
||||
WHERE year = ?
|
||||
GROUP BY expenseFk
|
||||
) sub on sub.expenseFk = b.expenseFk COLLATE utf8_general_ci
|
||||
SET ', util.quoteIdentifier(vCurYear - vYears), ' = - amount');
|
||||
|
||||
EXECUTE IMMEDIATE vQuery
|
||||
USING vCurYear - vYears;
|
||||
|
||||
SET vYears = vYears - 1;
|
||||
END WHILE;
|
||||
|
||||
-- Añadimos las ventas.
|
||||
EXECUTE IMMEDIATE CONCAT(
|
||||
'UPDATE tmp.balance b
|
||||
JOIN (
|
||||
SELECT SUM(IF(year = ?, venta, 0)) y2,
|
||||
SUM(IF(year = ?, venta, 0)) y1,
|
||||
SUM(IF(year = ?, venta, 0)) y0,
|
||||
c.Gasto
|
||||
FROM bs.ventas_contables c
|
||||
JOIN tCompanyReceiving cr ON cr.companyFk = c.empresa_id
|
||||
WHERE month BETWEEN ? AND ?
|
||||
GROUP BY c.Gasto
|
||||
) sub ON sub.gasto = b.expenseFk COLLATE utf8_general_ci
|
||||
SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
|
||||
b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
|
||||
b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
|
||||
USING vCurYear-2,
|
||||
vCurYear-1,
|
||||
vCurYear,
|
||||
vStartingMonth,
|
||||
vEndingMonth;
|
||||
|
||||
-- Ventas intra grupo.
|
||||
IF NOT vInterGroupSalesIncluded THEN
|
||||
|
||||
SELECT lft, rgt INTO @groupLft, @groupRgt
|
||||
FROM tmp.balance b
|
||||
WHERE TRIM(b.`name`) = 'Grupo';
|
||||
|
||||
DELETE
|
||||
FROM tmp.balance
|
||||
WHERE lft BETWEEN @groupLft AND @groupRgt;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Rellenamos el valor de los padres con la suma de los hijos.
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.balance_aux
|
||||
SELECT * FROM tmp.balance;
|
||||
|
||||
EXECUTE IMMEDIATE
|
||||
CONCAT('UPDATE tmp.balance b
|
||||
JOIN (
|
||||
SELECT b1.id,
|
||||
b1.name,
|
||||
SUM(b2.', vYear,') thisYear,
|
||||
SUM(b2.', vOneYearAgo,') oneYearAgo,
|
||||
SUM(b2.', vTwoYearsAgo,') twoYearsAgo
|
||||
FROM tmp.nest b1
|
||||
JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
|
||||
GROUP BY b1.id
|
||||
)sub ON sub.id = b.id
|
||||
SET b.', vYear, ' = thisYear,
|
||||
b.', vOneYearAgo, ' = oneYearAgo,
|
||||
b.', vTwoYearsAgo, ' = twoYearsAgo');
|
||||
|
||||
SELECT *, CONCAT('',IFNULL(expenseFk,'')) newgasto
|
||||
FROM tmp.balance;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tCompanyReceiving, tCompanyIssuing;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -19,10 +19,10 @@ BEGIN
|
|||
AND a.hasWeightVolumetric
|
||||
LIMIT 1;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.buysToCheck;
|
||||
DROP TEMPORARY TABLE tmp.buysToCheck;
|
||||
|
||||
IF hasVolumetricAgency THEN
|
||||
CALL util.throw('Some purchase line has an item without size or weight per stem in the volumetric agency.');
|
||||
IF hasVolumetricAgency THEN
|
||||
CALL util.throw('Item lacks size/weight in purchase line at agency');
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,42 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
|
||||
BEGIN
|
||||
/**
|
||||
* Devuelve el riesgo de los clientes que estan asegurados
|
||||
*/
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.clientGetDebt
|
||||
(PRIMARY KEY (clientFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT * FROM (
|
||||
SELECT cc.client clientFk, ci.grade
|
||||
FROM creditClassification cc
|
||||
JOIN creditInsurance ci ON cc.id = ci.creditClassification
|
||||
WHERE dateEnd IS NULL
|
||||
ORDER BY ci.creationDate DESC
|
||||
LIMIT 10000000000000000000) t1
|
||||
GROUP BY clientFk;
|
||||
|
||||
CALL client_getDebt(util.VN_CURDATE());
|
||||
|
||||
SELECT c.id,
|
||||
c.name,
|
||||
c.credit clientCredit,
|
||||
c.creditInsurance solunion,
|
||||
CAST(r.risk AS DECIMAL(10,0)) risk,
|
||||
CAST(c.creditInsurance - r.risk AS DECIMAL(10,0)) riskAlive,
|
||||
cac.invoiced billedAnnually,
|
||||
c.dueDay,
|
||||
cgd.grade,
|
||||
c2.country
|
||||
FROM tmp.clientGetDebt cgd
|
||||
LEFT JOIN tmp.risk r ON r.clientFk = cgd.clientFk
|
||||
JOIN client c ON c.id = cgd.clientFk
|
||||
JOIN bs.clientAnnualConsumption cac ON c.id = cac.clientFk
|
||||
JOIN country c2 ON c2.id = c.countryFk
|
||||
GROUP BY c.id;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.risk,
|
||||
tmp.clientGetDebt;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -15,7 +15,7 @@ BEGIN
|
|||
FROM `entry`
|
||||
WHERE id = vSelf;
|
||||
|
||||
IF vIsBooked AND NOT @isModeInventory THEN
|
||||
IF vIsBooked AND NOT IFNULL(@isModeInventory, FALSE) THEN
|
||||
CALL util.throw('Entry is already booked');
|
||||
END IF;
|
||||
END$$
|
||||
|
|
|
@ -68,19 +68,19 @@ BEGIN
|
|||
AND v.`visible`
|
||||
ON DUPLICATE KEY UPDATE visibleLanding = v.`visible`;
|
||||
|
||||
CALL vn2008.availableTraslate(vWarehouseOut, vDateShipped, NULL);
|
||||
CALL available_traslate(vWarehouseOut, vDateShipped, NULL);
|
||||
|
||||
INSERT INTO tItem(itemFk, available)
|
||||
SELECT a.item_id, a.available
|
||||
FROM vn2008.availableTraslate a
|
||||
FROM tmp.availableTraslate a
|
||||
WHERE a.available
|
||||
ON DUPLICATE KEY UPDATE available = a.available;
|
||||
|
||||
CALL vn2008.availableTraslate(vWarehouseIn, vDateLanded, vWarehouseOut);
|
||||
CALL available_traslate(vWarehouseIn, vDateLanded, vWarehouseOut);
|
||||
|
||||
INSERT INTO tItem(itemFk, availableLanding)
|
||||
SELECT a.item_id, a.available
|
||||
FROM vn2008.availableTraslate a
|
||||
FROM tmp.availableTraslate a
|
||||
WHERE a.available
|
||||
ON DUPLICATE KEY UPDATE availableLanding = a.available;
|
||||
ELSE
|
||||
|
|
|
@ -26,7 +26,7 @@ BEGIN
|
|||
LEAVE l;
|
||||
END IF;
|
||||
|
||||
CALL vn2008.buy_tarifas_entry(vEntryFk);
|
||||
CALL buy_recalcPricesByEntry(vEntryFk);
|
||||
END LOOP;
|
||||
|
||||
CLOSE vCur;
|
||||
|
|
|
@ -9,6 +9,14 @@ BEGIN
|
|||
DECLARE vCurrencyName VARCHAR(25);
|
||||
DECLARE vComission INT;
|
||||
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.recalcEntryCommision
|
||||
SELECT e.id
|
||||
FROM vn.entry e
|
||||
|
@ -28,12 +36,15 @@ BEGIN
|
|||
WHERE id = vCurrency;
|
||||
|
||||
CALL entry_recalc();
|
||||
|
||||
COMMIT;
|
||||
|
||||
SELECT util.notification_send(
|
||||
'entry-update-comission',
|
||||
JSON_OBJECT('currencyName', vCurrencyName, 'referenceCurrent', vComission),
|
||||
NULL
|
||||
);
|
||||
|
||||
DROP TEMPORARY TABLE tmp.recalcEntryCommision;
|
||||
DROP TEMPORARY TABLE tmp.recalcEntryCommision;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -155,27 +155,28 @@ BEGIN
|
|||
SET @currentLineFk := 0;
|
||||
SET @shipped := '';
|
||||
|
||||
SELECT DATE(@shipped:= shipped) shipped,
|
||||
alertLevel,
|
||||
stateName,
|
||||
origin,
|
||||
reference,
|
||||
clientFk,
|
||||
name,
|
||||
`in` invalue,
|
||||
`out`,
|
||||
@a := @a + IFNULL(`in`, 0) - IFNULL(`out`, 0) balance,
|
||||
SELECT DATE(@shipped:= t.shipped) shipped,
|
||||
t.alertLevel,
|
||||
t.stateName,
|
||||
t.origin,
|
||||
t.reference,
|
||||
t.clientFk,
|
||||
t.name,
|
||||
t.`in` invalue,
|
||||
t.`out`,
|
||||
@a := @a + IFNULL(t.`in`, 0) - IFNULL(t.`out`, 0) balance,
|
||||
@currentLineFk := IF (@shipped < util.VN_CURDATE()
|
||||
OR (@shipped = util.VN_CURDATE() AND (isPicked OR a.`code` >= 'ON_PREPARATION')),
|
||||
lineFk,
|
||||
OR (@shipped = util.VN_CURDATE() AND (t.isPicked OR a.`code` >= 'ON_PREPARATION')),
|
||||
t.lineFk,
|
||||
@currentLineFk) lastPreparedLineFk,
|
||||
isTicket,
|
||||
lineFk,
|
||||
isPicked,
|
||||
clientType,
|
||||
claimFk
|
||||
FROM tItemDiary
|
||||
LEFT JOIN alertLevel a ON a.id = tItemDiary.alertLevel;
|
||||
t.isTicket,
|
||||
t.lineFk,
|
||||
t.isPicked,
|
||||
t.clientType,
|
||||
t.claimFk,
|
||||
t.`order`
|
||||
FROM tItemDiary t
|
||||
LEFT JOIN alertLevel a ON a.id = t.alertLevel;
|
||||
|
||||
ELSE
|
||||
SELECT SUM(`in`) - SUM(`out`) INTO @a
|
||||
|
@ -197,7 +198,8 @@ BEGIN
|
|||
0 lineFk,
|
||||
0 isPicked,
|
||||
0 clientType,
|
||||
0 claimFk
|
||||
0 claimFk,
|
||||
NULL `order`
|
||||
UNION ALL
|
||||
SELECT shipped,
|
||||
alertlevel,
|
||||
|
@ -213,7 +215,8 @@ BEGIN
|
|||
lineFk,
|
||||
isPicked,
|
||||
clientType,
|
||||
claimFk
|
||||
claimFk,
|
||||
`order`
|
||||
FROM tItemDiary
|
||||
WHERE shipped >= vDate;
|
||||
END IF;
|
||||
|
|
|
@ -1,74 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`recipe_Cook`(vItemFk INT, vBunchesQuantity INT, vDate DATE)
|
||||
BEGIN
|
||||
|
||||
DECLARE vCalc INT;
|
||||
DECLARE vWarehouseFk INT DEFAULT 1; -- Silla FV
|
||||
|
||||
SET @element := '';
|
||||
SET @counter := 0;
|
||||
|
||||
CALL cache.available_refresh(vCalc, FALSE, vWarehouseFk, vDate);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.recipeCook;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp.recipeCook
|
||||
SELECT *,
|
||||
@counter := IF(@element = element COLLATE utf8_general_ci , @counter + 1, 1) as counter,
|
||||
@element := element COLLATE utf8_general_ci
|
||||
FROM
|
||||
(
|
||||
SELECT i.id itemFk,
|
||||
CONCAT(i.longName, ' (ref: ',i.id,')') longName,
|
||||
i.size,
|
||||
i.inkFk,
|
||||
a.available,
|
||||
r.element,
|
||||
vBunchesQuantity * r.quantity as quantity,
|
||||
r.itemFk as bunchItemFk,
|
||||
IFNULL((i.inkFk = r.inkFk ) ,0)
|
||||
+ IFNULL((i.size = r.size) ,0)
|
||||
+ IFNULL((i.name LIKE CONCAT('%',r.name,'%')) ,0)
|
||||
+ IFNULL((i.longName LIKE CONCAT('%',r.longName,'%')),0)
|
||||
+ IFNULL((i.typeFk = r.typeFk),0) as matches,
|
||||
i.typeFk,
|
||||
rl.previousSelected
|
||||
FROM vn.recipe r
|
||||
JOIN vn.item i ON (IFNULL(i.name LIKE CONCAT('%',r.name,'%'), 0)
|
||||
OR IFNULL(i.longName LIKE CONCAT('%',r.longName,'%'),0))
|
||||
OR i.typeFk <=> r.typeFk
|
||||
JOIN cache.available a ON a.item_id = i.id AND a.calc_id = vCalc
|
||||
LEFT JOIN (SELECT recipe_ItemFk, element as log_element, selected_ItemFk, count(*) as previousSelected
|
||||
FROM vn.recipe_log
|
||||
GROUP BY recipe_ItemFk, element, selected_ItemFk) rl ON rl.recipe_ItemFk = r.itemFk
|
||||
AND rl.log_element = r.element
|
||||
AND rl.selected_ItemFk = i.id
|
||||
WHERE r.itemFk = vItemFk
|
||||
AND a.available > vBunchesQuantity * r.quantity
|
||||
UNION ALL
|
||||
SELECT 100 itemFk,
|
||||
CONCAT('? ',r.element,' ',IFNULL(r.size,''),' ',IFNULL(r.inkFk,'')) as longName,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
r.element,
|
||||
vBunchesQuantity * r.quantity as quantity,
|
||||
r.itemFk as bunchItemFk,
|
||||
-1 as matches,
|
||||
r.typeFk,
|
||||
NULL
|
||||
FROM vn.recipe r
|
||||
WHERE r.itemFk = vItemFk
|
||||
GROUP BY r.element
|
||||
) sub
|
||||
|
||||
ORDER BY element, matches DESC, previousSelected DESC;
|
||||
|
||||
SELECT *
|
||||
FROM tmp.recipeCook
|
||||
WHERE counter < 6
|
||||
OR itemFk = 100
|
||||
;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -8,38 +8,14 @@ BEGIN
|
|||
* @param vDateToAdvance Fecha a cuando se quiere adelantar.
|
||||
* @param vWarehouseFk Almacén
|
||||
*/
|
||||
DECLARE vDateInventory DATE;
|
||||
|
||||
SELECT inventoried INTO vDateInventory FROM config;
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.stock
|
||||
(itemFk INT PRIMARY KEY,
|
||||
amount INT)
|
||||
ENGINE = MEMORY;
|
||||
|
||||
INSERT INTO tmp.stock(itemFk, amount)
|
||||
SELECT itemFk, SUM(quantity) amount FROM
|
||||
(
|
||||
SELECT itemFk, quantity
|
||||
FROM itemTicketOut
|
||||
WHERE shipped >= vDateInventory
|
||||
AND shipped < vDateFuture
|
||||
AND warehouseFk = vWarehouseFk
|
||||
UNION ALL
|
||||
SELECT itemFk, quantity
|
||||
FROM itemEntryIn
|
||||
WHERE landed >= vDateInventory
|
||||
AND landed <= vDateToAdvance
|
||||
AND isVirtualStock = FALSE
|
||||
AND warehouseInFk = vWarehouseFk
|
||||
UNION ALL
|
||||
SELECT itemFk, quantity
|
||||
FROM itemEntryOut
|
||||
WHERE shipped >= vDateInventory
|
||||
AND shipped < vDateFuture
|
||||
AND warehouseOutFk = vWarehouseFk
|
||||
) t
|
||||
GROUP BY itemFk HAVING amount != 0;
|
||||
CALL item_getStock(vWarehouseFk, vDateToAdvance, NULL);
|
||||
CALL item_getMinacum(
|
||||
vWarehouseFk,
|
||||
vDateToAdvance,
|
||||
DATEDIFF(DATE_SUB(vDateFuture, INTERVAL 1 DAY), vDateToAdvance),
|
||||
NULL
|
||||
);
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
||||
(INDEX (id))
|
||||
|
@ -87,7 +63,7 @@ BEGIN
|
|||
count(s.id) futureLines,
|
||||
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
|
||||
CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
|
||||
SUM((s.quantity <= IFNULL(st.amount,0))) hasStock,
|
||||
SUM(s.quantity <= (IFNULL(il.stock,0) + IFNULL(im.amount, 0))) hasStock,
|
||||
z.id futureZoneFk,
|
||||
z.name futureZoneName,
|
||||
st.classColor,
|
||||
|
@ -107,7 +83,9 @@ BEGIN
|
|||
JOIN agencyMode am ON t.agencyModeFk = am.id
|
||||
JOIN zone z ON t.zoneFk = z.id
|
||||
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
|
||||
LEFT JOIN tmp.stock st ON st.itemFk = i.id
|
||||
LEFT JOIN tmp.itemMinacum im ON im.itemFk = i.id
|
||||
AND im.warehouseFk = vWarehouseFk
|
||||
LEFT JOIN tmp.itemList il ON il.itemFk = i.id
|
||||
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
|
||||
AND t.warehouseFk = vWarehouseFk
|
||||
GROUP BY t.id
|
||||
|
@ -146,6 +124,8 @@ BEGIN
|
|||
) dest ON dest.addressFk = origin.addressFk
|
||||
WHERE origin.hasStock;
|
||||
|
||||
DROP TEMPORARY TABLE tmp.stock;
|
||||
DROP TEMPORARY TABLE IF EXISTS
|
||||
tmp.itemList,
|
||||
tmp.itemMinacum;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_doRecalc`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Recalculates modified ticket.
|
||||
*/
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vTicketFk INT;
|
||||
|
||||
DECLARE cCur CURSOR FOR
|
||||
SELECT DISTINCT ticketFk FROM tTicket;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
DO RELEASE_LOCK('vn.ticket_doRecalc');
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF !GET_LOCK('vn.ticket_doRecalc', 0) THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tTicket;
|
||||
CREATE TEMPORARY TABLE tTicket
|
||||
ENGINE = MEMORY
|
||||
SELECT id, ticketFk FROM ticketRecalc;
|
||||
|
||||
OPEN cCur;
|
||||
|
||||
myLoop: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH cCur INTO vTicketFk;
|
||||
|
||||
IF vDone THEN
|
||||
LEAVE myLoop;
|
||||
END IF;
|
||||
|
||||
CALL ticket_recalc(vTicketFk, NULL);
|
||||
END LOOP;
|
||||
|
||||
CLOSE cCur;
|
||||
|
||||
DELETE tr FROM ticketRecalc tr JOIN tTicket t ON tr.id = t.id;
|
||||
|
||||
DROP TEMPORARY TABLE tTicket;
|
||||
|
||||
DO RELEASE_LOCK('vn.ticket_doRecalc');
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -21,7 +21,7 @@ BEGIN
|
|||
WHERE t.id = vTicketFk;
|
||||
|
||||
-- Añadimos un dia más para calcular el stock hasta vNewShipped inclusive
|
||||
CALL item_getStock(vWarehouseFk, DATE_ADD(vNewShipped, INTERVAL 1 DAY), NULL);
|
||||
CALL item_getStock(vWarehouseFk, vNewShipped, NULL);
|
||||
CALL item_getMinacum(
|
||||
vWarehouseFk,
|
||||
vNewShipped,
|
||||
|
@ -38,7 +38,7 @@ BEGIN
|
|||
s.discount,
|
||||
i.image,
|
||||
i.subName,
|
||||
il.stock + IFNULL(im.amount, 0) AS movable
|
||||
IFNULL(il.stock,0) + IFNULL(im.amount, 0) AS movable
|
||||
FROM ticket t
|
||||
JOIN sale s ON s.ticketFk = t.id
|
||||
JOIN item i ON i.id = s.itemFk
|
||||
|
@ -48,8 +48,8 @@ BEGIN
|
|||
WHERE t.id = vTicketFk;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS
|
||||
tmp.itemList,
|
||||
tmp.itemMinacum;
|
||||
tmp.itemList,
|
||||
tmp.itemMinacum;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_recalcByScope`(
|
||||
vScope VARCHAR(255),
|
||||
vId INT
|
||||
)
|
||||
BEGIN
|
||||
/**
|
||||
* Recalculates tickets in an scope.
|
||||
*
|
||||
* @param vScope The scope name
|
||||
* @param vId The scope id
|
||||
*/
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vTicketFk INT;
|
||||
|
||||
DECLARE cTickets CURSOR FOR
|
||||
SELECT id FROM ticket
|
||||
WHERE refFk IS NULL
|
||||
AND ((vScope = 'client' AND clientFk = vId)
|
||||
OR (vScope = 'address' AND addressFk = vId));
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
OPEN cTickets;
|
||||
|
||||
myLoop: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH cTickets INTO vTicketFk;
|
||||
|
||||
IF vDone THEN
|
||||
LEAVE myLoop;
|
||||
END IF;
|
||||
|
||||
CALL ticket_recalc(vTicketFk, NULL);
|
||||
END LOOP;
|
||||
|
||||
CLOSE cTickets;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,15 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_requestRecalc`(vSelf INT)
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Adds a request to recalculate the ticket total.
|
||||
*
|
||||
* @param vSelf The ticket identifier
|
||||
*/
|
||||
IF vSelf IS NULL THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
INSERT INTO ticketRecalc SET ticketFk = vSelf;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,34 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_doRecalc`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Recounts the number of entries of changed travels.
|
||||
*/
|
||||
DECLARE vTravelFk INT;
|
||||
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
DO RELEASE_LOCK('vn.ticket_doRecalc');
|
||||
END;
|
||||
|
||||
IF !GET_LOCK('vn.travel_doRecalc', 0) THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tTravel
|
||||
ENGINE = MEMORY
|
||||
SELECT travelFk FROM travelRecalc;
|
||||
|
||||
UPDATE travel t
|
||||
JOIN tTravel tt ON tt.travelFk = t.id
|
||||
SET t.totalEntries = (
|
||||
SELECT COUNT(e.id)
|
||||
FROM entry e
|
||||
WHERE e.travelFk = t.id
|
||||
);
|
||||
|
||||
DELETE tr FROM travelRecalc tr JOIN tTravel t ON tr.travelFk = t.travelFk;
|
||||
DROP TEMPORARY TABLE tTravel;
|
||||
DO RELEASE_LOCK('vn.travel_doRecalc');
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,17 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_recalc`(vSelf INT)
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Updates the number of entries assigned to the travel.
|
||||
*
|
||||
* @param vSelf The travel id
|
||||
*/
|
||||
UPDATE travel
|
||||
SET totalEntries = (
|
||||
SELECT COUNT(id)
|
||||
FROM entry
|
||||
WHERE travelFk = vSelf
|
||||
)
|
||||
WHERE id = vSelf;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,15 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_requestRecalc`(vSelf INT)
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Adds a request to recount the number of entries for the travel.
|
||||
*
|
||||
* @param vSelf The travel reference
|
||||
*/
|
||||
IF vSelf IS NULL THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
INSERT IGNORE INTO travelRecalc SET travelFk = vSelf;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -5,36 +5,32 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`address_afterUpdate`
|
|||
BEGIN
|
||||
-- Recargos de equivalencia distintos implican facturacion por consignatario
|
||||
IF NEW.isEqualizated != OLD.isEqualizated THEN
|
||||
IF
|
||||
IF
|
||||
(SELECT COUNT(*) FROM
|
||||
(
|
||||
SELECT DISTINCT (isEqualizated = FALSE) as Equ
|
||||
FROM address
|
||||
FROM address
|
||||
WHERE clientFk = NEW.clientFk
|
||||
) t1
|
||||
) > 1
|
||||
THEN
|
||||
UPDATE client
|
||||
THEN
|
||||
UPDATE client
|
||||
SET hasToInvoiceByAddress = TRUE
|
||||
WHERE id = NEW.clientFk;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
IF NEW.isDefaultAddress AND NEW.isActive = FALSE THEN
|
||||
CALL util.throw ('Cannot desactivate the default address');
|
||||
END IF;
|
||||
|
||||
IF NOT (NEW.isEqualizated <=> OLD.isEqualizated) THEN
|
||||
INSERT IGNORE INTO ticketRecalc (ticketFk)
|
||||
SELECT id FROM ticket t
|
||||
WHERE t.addressFk = NEW.id
|
||||
AND t.refFk IS NULL;
|
||||
END IF;
|
||||
|
||||
IF (NEW.clientFk <> OLD.clientFk OR NEW.isActive <> OLD.isActive OR NOT (NEW.provinceFk <=> OLD.provinceFk))
|
||||
AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
|
||||
UPDATE client
|
||||
IF (NEW.clientFk <> OLD.clientFk
|
||||
OR NEW.isActive <> OLD.isActive
|
||||
OR NOT (NEW.provinceFk <=> OLD.provinceFk))
|
||||
AND (SELECT client_hasDifferentCountries(NEW.clientFk)) THEN
|
||||
UPDATE client
|
||||
SET hasToInvoiceByAddress = TRUE
|
||||
WHERE id = NEW.clientFk;
|
||||
END IF;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -3,19 +3,14 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`buy_afterDelete`
|
|||
AFTER DELETE ON `buy`
|
||||
FOR EACH ROW
|
||||
trig: BEGIN
|
||||
DECLARE vValues VARCHAR(255);
|
||||
|
||||
IF @isModeInventory OR @isTriggerDisabled THEN
|
||||
LEAVE trig;
|
||||
END IF;
|
||||
|
||||
CALL stock.log_add('buy', NULL, OLD.id);
|
||||
|
||||
INSERT INTO entryLog
|
||||
SET `action` = 'delete',
|
||||
`changedModel` = 'Buy',
|
||||
`changedModelId` = OLD.id,
|
||||
`userFk` = account.myUser_getId();
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -7,8 +7,6 @@ trig: BEGIN
|
|||
LEAVE trig;
|
||||
END IF;
|
||||
|
||||
CALL stock.log_add('buy', NEW.id, NULL);
|
||||
|
||||
CALL buy_afterUpsert(NEW.id);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -12,14 +12,6 @@ trig: BEGIN
|
|||
LEAVE trig;
|
||||
END IF;
|
||||
|
||||
IF !(NEW.id <=> OLD.id)
|
||||
OR !(NEW.entryFk <=> OLD.entryFk)
|
||||
OR !(NEW.itemFk <=> OLD.itemFk)
|
||||
OR !(NEW.quantity <=> OLD.quantity)
|
||||
OR !(NEW.created <=> OLD.created) THEN
|
||||
CALL stock.log_add('buy', NEW.id, OLD.id);
|
||||
END IF;
|
||||
|
||||
CALL buy_afterUpsert(NEW.id);
|
||||
|
||||
SELECT w.isBuyerToBeEmailed, t.landed
|
||||
|
|
|
@ -4,20 +4,13 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`client_afterUpdate`
|
|||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF !(NEW.defaultAddressFk <=> OLD.defaultAddressFk) THEN
|
||||
UPDATE `address` SET isDefaultAddress = 0
|
||||
UPDATE `address` SET isDefaultAddress = FALSE
|
||||
WHERE clientFk = NEW.id;
|
||||
|
||||
UPDATE `address` SET isDefaultAddress = 1
|
||||
WHERE id = NEW.defaultAddressFk;
|
||||
|
||||
UPDATE `address` SET isDefaultAddress = TRUE
|
||||
WHERE id = NEW.defaultAddressFk;
|
||||
END IF;
|
||||
|
||||
IF NOT (NEW.provinceFk <=> OLD.provinceFk) OR NOT (NEW.isVies <=> OLD.isVies) THEN
|
||||
INSERT IGNORE INTO ticketRecalc (ticketFk)
|
||||
SELECT id FROM ticket t
|
||||
WHERE t.clientFk = NEW.id
|
||||
AND t.refFk IS NULL;
|
||||
END IF;
|
||||
|
||||
IF NOT NEW.isActive THEN
|
||||
UPDATE account.`user`
|
||||
SET active = FALSE
|
||||
|
|
|
@ -8,7 +8,5 @@ BEGIN
|
|||
`changedModel` = 'Entry',
|
||||
`changedModelId` = OLD.id,
|
||||
`userFk` = account.myUser_getId();
|
||||
|
||||
CALL travel_requestRecalc(OLD.travelFk);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_afterInsert`
|
||||
AFTER INSERT ON `entry`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL travel_requestRecalc(NEW.travelFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -3,24 +3,12 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`entry_afterUpdate`
|
|||
AFTER UPDATE ON `entry`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NOT(NEW.id <=> OLD.id)
|
||||
OR NOT(NEW.travelFk <=> OLD.travelFk)
|
||||
OR NOT(NEW.isRaid <=> OLD.isRaid) THEN
|
||||
CALL stock.log_add('entry', NEW.id, OLD.id);
|
||||
END IF;
|
||||
|
||||
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
|
||||
CALL travel_requestRecalc(OLD.travelFk);
|
||||
CALL travel_requestRecalc(NEW.travelFk);
|
||||
END IF;
|
||||
|
||||
|
||||
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
|
||||
SELECT b.id
|
||||
FROM buy b
|
||||
WHERE b.entryFk = NEW.id;
|
||||
|
||||
|
||||
CALL buy_checkItem();
|
||||
END IF;
|
||||
END$$
|
||||
|
|
|
@ -12,9 +12,6 @@ BEGIN
|
|||
`changedModelId` = OLD.id,
|
||||
`userFk` = account.myUser_getId();
|
||||
|
||||
CALL stock.log_add('sale', NULL, OLD.id);
|
||||
CALL ticket_requestRecalc(OLD.ticketFk);
|
||||
|
||||
SELECT account.myUser_getName() INTO vUserRole;
|
||||
SELECT account.user_getMysqlRole(vUserRole) INTO vUserRole;
|
||||
|
||||
|
|
|
@ -7,11 +7,7 @@ BEGIN
|
|||
CALL util.throw('Cannot insert a service item into a ticket');
|
||||
END IF;
|
||||
|
||||
CALL stock.log_add('sale', NEW.id, NULL);
|
||||
CALL ticket_requestRecalc(NEW.ticketFk);
|
||||
|
||||
IF NEW.quantity > 0 THEN
|
||||
|
||||
UPDATE vn.collection c
|
||||
JOIN vn.ticketCollection tc ON tc.collectionFk = c.id
|
||||
AND tc.ticketFk = NEW.ticketFk
|
||||
|
|
|
@ -6,24 +6,6 @@ BEGIN
|
|||
DECLARE vIsToSendMail BOOL;
|
||||
DECLARE vUserRole VARCHAR(255);
|
||||
|
||||
IF !(NEW.id <=> OLD.id)
|
||||
OR !(NEW.ticketFk <=> OLD.ticketFk)
|
||||
OR !(NEW.itemFk <=> OLD.itemFk)
|
||||
OR !(NEW.quantity <=> OLD.quantity)
|
||||
OR !(NEW.created <=> OLD.created)
|
||||
OR !(NEW.isPicked <=> OLD.isPicked) THEN
|
||||
CALL stock.log_add('sale', NEW.id, OLD.id);
|
||||
END IF;
|
||||
|
||||
IF !(NEW.price <=> OLD.price)
|
||||
OR !(NEW.ticketFk <=> OLD.ticketFk)
|
||||
OR !(NEW.itemFk <=> OLD.itemFk)
|
||||
OR !(NEW.quantity <=> OLD.quantity)
|
||||
OR !(NEW.discount <=> OLD.discount) THEN
|
||||
CALL ticket_requestRecalc(NEW.ticketFk);
|
||||
CALL ticket_requestRecalc(OLD.ticketFk);
|
||||
END IF;
|
||||
|
||||
IF !(OLD.ticketFk <=> NEW.ticketFk) THEN
|
||||
UPDATE ticketRequest SET ticketFk = NEW.ticketFk
|
||||
WHERE saleFk = NEW.id;
|
||||
|
|
|
@ -8,8 +8,5 @@ BEGIN
|
|||
`changedModel` = 'TicketService',
|
||||
`changedModelId` = OLD.id,
|
||||
`userFk` = account.myUser_getId();
|
||||
|
||||
CALL ticket_requestRecalc(OLD.ticketFk);
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketService_afterInsert`
|
||||
AFTER INSERT ON `ticketService`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
|
||||
CALL ticket_requestRecalc(NEW.ticketFk);
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,13 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticketService_afterUpdate`
|
||||
AFTER UPDATE ON `ticketService`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF !(NEW.price <=> OLD.price)
|
||||
OR !(NEW.ticketFk <=> OLD.ticketFk)
|
||||
OR !(NEW.quantity <=> OLD.quantity) THEN
|
||||
CALL ticket_requestRecalc(NEW.ticketFk);
|
||||
CALL ticket_requestRecalc(OLD.ticketFk);
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -3,24 +3,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`ticket_afterUpdate`
|
|||
AFTER UPDATE ON `ticket`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
|
||||
IF !(NEW.id <=> OLD.id)
|
||||
OR !(NEW.warehouseFk <=> OLD.warehouseFk)
|
||||
OR !(NEW.shipped <=> OLD.shipped) THEN
|
||||
CALL stock.log_add('ticket', NEW.id, OLD.id);
|
||||
END IF;
|
||||
|
||||
IF !(NEW.clientFk <=> OLD.clientFk)
|
||||
OR !(NEW.addressFk <=> OLD.addressFk)
|
||||
OR !(NEW.companyFk <=> OLD.companyFk) THEN
|
||||
CALL ticket_requestRecalc(NEW.id);
|
||||
END IF;
|
||||
|
||||
IF NEW.routeFk <> OLD.routeFk THEN
|
||||
UPDATE expedition
|
||||
UPDATE expedition
|
||||
SET hasNewRoute = TRUE
|
||||
WHERE ticketFk = NEW.id;
|
||||
END IF;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -3,10 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`travel_afterUpdate`
|
|||
AFTER UPDATE ON `travel`
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL stock.log_add('travel', NEW.id, OLD.id);
|
||||
|
||||
IF NOT(NEW.shipped <=> OLD.shipped) THEN
|
||||
UPDATE entry
|
||||
UPDATE entry
|
||||
SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
|
||||
WHERE travelFk = NEW.id;
|
||||
END IF;
|
||||
|
@ -15,11 +13,11 @@ BEGIN
|
|||
IF (SELECT hasWeightVolumetric FROM agencyMode WHERE id = NEW.agencyModeFk) THEN
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
|
||||
SELECT b.id
|
||||
FROM entry e
|
||||
FROM entry e
|
||||
JOIN buy b ON b.entryFk = e.id
|
||||
JOIN item i ON i.id = b.itemFk
|
||||
WHERE e.travelFk = NEW.id;
|
||||
|
||||
|
||||
CALL buy_checkItem();
|
||||
END IF;
|
||||
END IF;
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article_multiple_buy`(v_date DATETIME, wh INT)
|
||||
BEGIN
|
||||
CALL vn.item_multipleBuy(v_date, wh);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,9 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article_multiple_buy_date`(
|
||||
IN vDated DATETIME,
|
||||
IN vWarehouseFk TINYINT(3)
|
||||
)
|
||||
BEGIN
|
||||
CALL vn.item_multipleBuyByDate(vDated, vWarehouseFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,126 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`availableTraslate`(
|
||||
vWarehouseLanding INT,
|
||||
vDated DATE,
|
||||
vWarehouseShipment INT)
|
||||
proc: BEGIN
|
||||
DECLARE vDatedFrom DATE;
|
||||
DECLARE vDatedTo DATETIME;
|
||||
DECLARE vDatedReserve DATETIME;
|
||||
DECLARE vDatedInventory DATE;
|
||||
|
||||
IF vDated < util.VN_CURDATE() THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
CALL vn.item_getStock (vWarehouseLanding, vDated, NULL);
|
||||
|
||||
-- Calcula algunos parámetros necesarios
|
||||
SET vDatedFrom = TIMESTAMP(vDated, '00:00:00');
|
||||
SET vDatedTo = TIMESTAMP(TIMESTAMPADD(DAY, 4, vDated), '23:59:59');
|
||||
SELECT inventoried INTO vDatedInventory FROM vn.config;
|
||||
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vDatedReserve
|
||||
FROM hedera.orderConfig;
|
||||
|
||||
-- Calcula el ultimo dia de vida para cada producto
|
||||
DROP TEMPORARY TABLE IF EXISTS itemRange;
|
||||
CREATE TEMPORARY TABLE itemRange
|
||||
(PRIMARY KEY (itemFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT c.itemFk, MAX(t.landed) dated
|
||||
FROM vn.buy c
|
||||
JOIN vn.entry e ON c.entryFk = e.id
|
||||
JOIN vn.travel t ON t.id = e.travelFk
|
||||
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
||||
WHERE t.landed BETWEEN vDatedInventory AND vDatedFrom
|
||||
AND t.warehouseInFk = vWarehouseLanding
|
||||
AND NOT e.isExcludedFromAvailable
|
||||
AND NOT e.isRaid
|
||||
GROUP BY c.itemFk;
|
||||
|
||||
-- Tabla con el ultimo dia de last_buy para cada producto que hace un replace de la anterior
|
||||
CALL vn.buyUltimate(vWarehouseShipment, util.VN_CURDATE());
|
||||
|
||||
INSERT INTO itemRange
|
||||
SELECT t.itemFk, tr.landed
|
||||
FROM tmp.buyUltimate t
|
||||
JOIN vn.buy b ON b.id = t.buyFk
|
||||
JOIN vn.entry e ON e.id = b.entryFk
|
||||
JOIN vn.travel tr ON tr.id = e.travelFk
|
||||
LEFT JOIN itemRange i ON t.itemFk = i.itemFk
|
||||
WHERE t.warehouseFk = vWarehouseShipment
|
||||
AND NOT e.isRaid
|
||||
ON DUPLICATE KEY UPDATE itemRange.dated = GREATEST(itemRange.dated, tr.landed);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS itemRangeLive;
|
||||
CREATE TEMPORARY TABLE itemRangeLive
|
||||
(PRIMARY KEY (itemFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT ir.itemFk, TIMESTAMP(TIMESTAMPADD(DAY, it.life, ir.dated), '23:59:59') dated
|
||||
FROM itemRange ir
|
||||
JOIN vn.item i ON i.id = ir.itemFk
|
||||
JOIN vn.itemType it ON it.id = i.typeFk
|
||||
HAVING dated >= vDatedFrom OR dated IS NULL;
|
||||
|
||||
-- Calcula el ATP
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
|
||||
CREATE TEMPORARY TABLE tmp.itemCalc
|
||||
(INDEX (itemFk,warehouseFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT i.itemFk, vWarehouseLanding warehouseFk, i.shipped dated, i.quantity
|
||||
FROM vn.itemTicketOut i
|
||||
JOIN itemRangeLive ir ON ir.itemFK = i.itemFk
|
||||
WHERE i.shipped >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
|
||||
AND i.warehouseFk = vWarehouseLanding
|
||||
UNION ALL
|
||||
SELECT b.itemFk, vWarehouseLanding, t.landed, b.quantity
|
||||
FROM vn.buy b
|
||||
JOIN vn.entry e ON b.entryFk = e.id
|
||||
JOIN vn.travel t ON t.id = e.travelFk
|
||||
JOIN itemRangeLive ir ON ir.itemFk = b.itemFk
|
||||
WHERE NOT e.isExcludedFromAvailable
|
||||
AND b.quantity <> 0
|
||||
AND NOT e.isRaid
|
||||
AND t.warehouseInFk = vWarehouseLanding
|
||||
AND t.landed >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR t.landed <= ir.dated)
|
||||
UNION ALL
|
||||
SELECT i.itemFk, vWarehouseLanding, i.shipped, i.quantity
|
||||
FROM vn.itemEntryOut i
|
||||
JOIN itemRangeLive ir ON ir.itemFk = i.itemFk
|
||||
WHERE i.shipped >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR i.shipped <= ir.dated)
|
||||
AND i.warehouseOutFk = vWarehouseLanding
|
||||
UNION ALL
|
||||
SELECT r.item_id, vWarehouseLanding, r.shipment, -r.amount
|
||||
FROM hedera.order_row r
|
||||
JOIN hedera.`order` o ON o.id = r.order_id
|
||||
JOIN itemRangeLive ir ON ir.itemFk = r.item_id
|
||||
WHERE r.shipment >= vDatedFrom
|
||||
AND (ir.dated IS NULL OR r.shipment <= ir.dated)
|
||||
AND r.warehouse_id = vWarehouseLanding
|
||||
AND r.created >= vDatedReserve
|
||||
AND NOT o.confirmed;
|
||||
|
||||
CALL vn.item_getAtp(vDated);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS availableTraslate;
|
||||
CREATE TEMPORARY TABLE availableTraslate
|
||||
(PRIMARY KEY (item_id))
|
||||
ENGINE = MEMORY
|
||||
SELECT t.item_id, SUM(stock) available
|
||||
FROM (
|
||||
SELECT ti.itemFk item_id, stock
|
||||
FROM tmp.itemList ti
|
||||
JOIN itemRange ir ON ir.itemFk = ti.itemFk
|
||||
UNION ALL
|
||||
SELECT itemFk, quantity
|
||||
FROM tmp.itemAtp
|
||||
) t
|
||||
GROUP BY t.item_id
|
||||
HAVING available <> 0;
|
||||
|
||||
DROP TEMPORARY TABLE tmp.itemList, itemRange, itemRangeLive;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,207 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`balance_create`(
|
||||
IN vStartingMonth INT,
|
||||
IN vEndingMonth INT,
|
||||
IN vCompany INT,
|
||||
IN vIsConsolidated BOOLEAN,
|
||||
IN vInterGroupSalesIncluded BOOLEAN)
|
||||
BEGIN
|
||||
DECLARE intGAP INT DEFAULT 7;
|
||||
DECLARE vYears INT DEFAULT 2;
|
||||
DECLARE vYear TEXT;
|
||||
DECLARE vOneYearAgo TEXT;
|
||||
DECLARE vTwoYearsAgo TEXT;
|
||||
DECLARE vQuery TEXT;
|
||||
DECLARE vConsolidatedGroup INT;
|
||||
DECLARE vStartingDate DATE DEFAULT '2020-01-01';
|
||||
DECLARE vCurYear INT DEFAULT YEAR(util.VN_CURDATE());
|
||||
DECLARE vStartingYear INT DEFAULT vCurYear - 2;
|
||||
DECLARE vTable TEXT;
|
||||
|
||||
SET vTable = util.quoteIdentifier('balance_nest_tree');
|
||||
SET vYear = util.quoteIdentifier(vCurYear);
|
||||
SET vOneYearAgo = util.quoteIdentifier(vCurYear-1);
|
||||
SET vTwoYearsAgo = util.quoteIdentifier(vCurYear-2);
|
||||
|
||||
-- Solicitamos la tabla tmp.nest, como base para el balance
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.nest;
|
||||
|
||||
EXECUTE IMMEDIATE CONCAT(
|
||||
'CREATE TEMPORARY TABLE tmp.nest
|
||||
SELECT node.id
|
||||
,CONCAT( REPEAT(REPEAT(" ",?), COUNT(parent.id) - 1), node.name) AS name
|
||||
,node.lft
|
||||
,node.rgt
|
||||
,COUNT(parent.id) - 1 as depth
|
||||
,cast((node.rgt - node.lft - 1) / 2 as DECIMAL) as sons
|
||||
FROM ', vTable, ' AS node,
|
||||
', vTable, ' AS parent
|
||||
WHERE node.lft BETWEEN parent.lft AND parent.rgt
|
||||
GROUP BY node.id
|
||||
ORDER BY node.lft')
|
||||
USING intGAP;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.balance;
|
||||
CREATE TEMPORARY TABLE tmp.balance
|
||||
SELECT * FROM tmp.nest;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.empresas_receptoras;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.empresas_emisoras;
|
||||
|
||||
SELECT empresa_grupo INTO vConsolidatedGroup
|
||||
FROM empresa
|
||||
WHERE id = vCompany;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp.empresas_receptoras
|
||||
SELECT id as empresa_id
|
||||
FROM vn2008.empresa
|
||||
WHERE id = vCompany
|
||||
OR empresa_grupo = IF(vIsConsolidated, vConsolidatedGroup, NULL);
|
||||
|
||||
CREATE TEMPORARY TABLE tmp.empresas_emisoras
|
||||
SELECT Id_Proveedor as empresa_id FROM vn2008.Proveedores p;
|
||||
|
||||
IF vInterGroupSalesIncluded = FALSE THEN
|
||||
|
||||
DELETE ee.*
|
||||
FROM tmp.empresas_emisoras ee
|
||||
JOIN vn2008.empresa e on e.id = ee.empresa_id
|
||||
WHERE e.empresa_grupo = vConsolidatedGroup;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Se calculan las facturas que intervienen, para luego poder servir el desglose desde aqui
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.balance_desglose;
|
||||
CREATE TEMPORARY TABLE tmp.balance_desglose
|
||||
SELECT er.empresa_id receptora_id,
|
||||
ee.empresa_id emisora_id,
|
||||
year(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `year`,
|
||||
month(IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha))) `month`,
|
||||
gastos_id Id_Gasto,
|
||||
SUM(bi) importe
|
||||
FROM recibida r
|
||||
JOIN recibida_iva ri on ri.recibida_id = r.id
|
||||
JOIN tmp.empresas_receptoras er on er.empresa_id = r.empresa_id
|
||||
JOIN tmp.empresas_emisoras ee ON ee.empresa_id = r.proveedor_id
|
||||
WHERE IFNULL(r.bookEntried,IFNULL(r.dateBooking, r.Fecha)) >= vStartingDate
|
||||
AND r.contabilizada
|
||||
GROUP BY Id_Gasto, year, month, emisora_id, receptora_id;
|
||||
|
||||
INSERT INTO tmp.balance_desglose(
|
||||
receptora_id,
|
||||
emisora_id,
|
||||
year,
|
||||
month,
|
||||
Id_Gasto,
|
||||
importe)
|
||||
SELECT gr.empresa_id,
|
||||
gr.empresa_id,
|
||||
year,
|
||||
month,
|
||||
Id_Gasto,
|
||||
SUM(importe)
|
||||
FROM gastos_resumen gr
|
||||
JOIN tmp.empresas_receptoras er on gr.empresa_id = er.empresa_id
|
||||
WHERE year >= vStartingYear
|
||||
AND month BETWEEN vStartingMonth AND vEndingMonth
|
||||
GROUP BY Id_Gasto, year, month, gr.empresa_id;
|
||||
|
||||
DELETE FROM tmp.balance_desglose
|
||||
WHERE month < vStartingMonth
|
||||
OR month > vEndingMonth;
|
||||
|
||||
-- Ahora el balance
|
||||
EXECUTE IMMEDIATE CONCAT(
|
||||
'ALTER TABLE tmp.balance
|
||||
ADD COLUMN ', vTwoYearsAgo ,' INT(10) NULL ,
|
||||
ADD COLUMN ', vOneYearAgo ,' INT(10) NULL ,
|
||||
ADD COLUMN ', vYear,' INT(10) NULL ,
|
||||
ADD COLUMN Id_Gasto VARCHAR(10) NULL,
|
||||
ADD COLUMN Gasto VARCHAR(45) NULL');
|
||||
|
||||
-- Añadimos los gastos, para facilitar el formulario
|
||||
UPDATE tmp.balance b
|
||||
JOIN vn2008.balance_nest_tree bnt on bnt.id = b.id
|
||||
JOIN (SELECT id Id_Gasto, name Gasto
|
||||
FROM vn.expense
|
||||
GROUP BY id) g ON g.Id_Gasto = bnt.Id_Gasto COLLATE utf8_general_ci
|
||||
SET b.Id_Gasto = g.Id_Gasto COLLATE utf8_general_ci
|
||||
, b.Gasto = g.Gasto COLLATE utf8_general_ci ;
|
||||
|
||||
-- Rellenamos los valores de primer nivel, los que corresponden a los gastos simples
|
||||
WHILE vYears >= 0 DO
|
||||
SET vQuery = CONCAT(
|
||||
'UPDATE tmp.balance b
|
||||
JOIN
|
||||
(SELECT Id_Gasto, SUM(Importe) as Importe
|
||||
FROM tmp.balance_desglose
|
||||
WHERE year = ?
|
||||
GROUP BY Id_Gasto
|
||||
) sub on sub.Id_Gasto = b.Id_Gasto COLLATE utf8_general_ci
|
||||
SET ', util.quoteIdentifier(vCurYear - vYears), ' = - Importe');
|
||||
|
||||
EXECUTE IMMEDIATE vQuery
|
||||
USING vCurYear - vYears;
|
||||
|
||||
SET vYears = vYears - 1;
|
||||
END WHILE;
|
||||
|
||||
-- Añadimos las ventas
|
||||
EXECUTE IMMEDIATE CONCAT(
|
||||
'UPDATE tmp.balance b
|
||||
JOIN (
|
||||
SELECT SUM(IF(year = ?, venta, 0)) y2,
|
||||
SUM(IF(year = ?, venta, 0)) y1,
|
||||
SUM(IF(year = ?, venta, 0)) y0,
|
||||
c.Gasto
|
||||
FROM bs.ventas_contables c
|
||||
JOIN tmp.empresas_receptoras er on er.empresa_id = c.empresa_id
|
||||
WHERE month BETWEEN ? AND ?
|
||||
GROUP BY c.Gasto
|
||||
) sub ON sub.Gasto = b.Id_Gasto COLLATE utf8_general_ci
|
||||
SET b.', vTwoYearsAgo, '= IFNULL(b.', vTwoYearsAgo, ', 0) + sub.y2,
|
||||
b.', vOneYearAgo, '= IFNULL(b.', vOneYearAgo, ', 0) + sub.y1,
|
||||
b.', vYear, '= IFNULL(b.', vYear, ', 0) + sub.y0')
|
||||
USING vCurYear-2,
|
||||
vCurYear-1,
|
||||
vCurYear,
|
||||
vStartingMonth,
|
||||
vEndingMonth;
|
||||
|
||||
-- Ventas intra grupo
|
||||
IF NOT vInterGroupSalesIncluded THEN
|
||||
|
||||
SELECT lft, rgt INTO @grupoLft, @grupoRgt
|
||||
FROM tmp.balance b
|
||||
WHERE TRIM(b.`name`) = 'Grupo';
|
||||
|
||||
DELETE
|
||||
FROM tmp.balance
|
||||
WHERE lft BETWEEN @grupoLft AND @grupoRgt;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Rellenamos el valor de los padres con la suma de los hijos
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.balance_aux;
|
||||
CREATE TEMPORARY TABLE tmp.balance_aux
|
||||
SELECT * FROM tmp.balance;
|
||||
|
||||
EXECUTE IMMEDIATE
|
||||
CONCAT('UPDATE tmp.balance b
|
||||
JOIN (
|
||||
SELECT b1.id,
|
||||
b1.name,
|
||||
SUM(b2.', vYear,') thisYear,
|
||||
SUM(b2.', vOneYearAgo,') oneYearAgo,
|
||||
SUM(b2.', vTwoYearsAgo,') twoYearsAgo
|
||||
FROM tmp.nest b1
|
||||
JOIN tmp.balance_aux b2 on b2.lft BETWEEN b1.lft and b1.rgt
|
||||
GROUP BY b1.id)sub ON sub.id = b.id
|
||||
SET b.', vYear, ' = thisYear,
|
||||
b.', vOneYearAgo, ' = oneYearAgo,
|
||||
b.', vTwoYearsAgo, ' = twoYearsAgo');
|
||||
|
||||
SELECT *, CONCAT('',ifnull(Id_Gasto,'')) newgasto
|
||||
FROM tmp.balance;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,6 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`buy_tarifas`(vBuyFk INT)
|
||||
BEGIN
|
||||
CALL vn.buy_recalcPricesByBuy(vBuyFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,11 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`buy_tarifas_entry`(IN vEntryFk INT(11))
|
||||
BEGIN
|
||||
/**
|
||||
* Recalcula los precios de una entrada
|
||||
*
|
||||
* @param vEntryFk
|
||||
*/
|
||||
CALL vn.buy_recalcPricesByEntry(vEntryFk);
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,7 @@
|
|||
CREATE OR REPLACE PROCEDURE `vn`.`balance_create`() BEGIN END;
|
||||
CREATE OR REPLACE PROCEDURE `vn`.`buy_recalcPricesByEntry`() BEGIN END;
|
||||
CREATE OR REPLACE PROCEDURE `vn`.`buy_recalcPricesByBuy`() BEGIN END;
|
||||
|
||||
GRANT EXECUTE ON PROCEDURE vn.balance_create TO `financialBoss`, `hrBoss`;
|
||||
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByEntry TO `buyer`, `claimManager`, `employee`;
|
||||
GRANT EXECUTE ON PROCEDURE vn.buy_recalcPricesByBuy TO `buyer`, `entryEditor`, `claimManager`, `employee`;
|
|
@ -0,0 +1,4 @@
|
|||
-- Place your SQL code here
|
||||
|
||||
USE vn;
|
||||
INSERT INTO vn.observationType (description,code) VALUES ('Entrega','dropOff');
|
|
@ -2,4 +2,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_getRisk`()
|
|||
BEGIN
|
||||
END;
|
||||
|
||||
GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financialBoss;
|
||||
GRANT EXECUTE ON PROCEDURE vn.client_getRisk TO financial;
|
||||
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`creditInsurance_getRisk`()
|
||||
BEGIN
|
||||
END;
|
||||
|
||||
GRANT EXECUTE ON PROCEDURE vn.creditInsurance_getRisk TO financial;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
DROP TABLE hedera.orderRecalc;
|
|
@ -0,0 +1 @@
|
|||
DROP TABLE vn.ticketRecalc;
|
|
@ -0,0 +1 @@
|
|||
DROP TABLE vn.travelRecalc;
|
|
@ -0,0 +1 @@
|
|||
DROP SCHEMA IF EXISTS rfid;
|
|
@ -0,0 +1,12 @@
|
|||
|
||||
CREATE OR REPLACE TABLE `vn`.`farmingDeliveryNote` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`farmingFk` int(10) unsigned NOT NULL,
|
||||
`deliveryNoteFk` int(11) NOT NULL,
|
||||
`amount` decimal(10,2) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `farmingDeliveryNoteFk_FK` (`deliveryNoteFk`),
|
||||
KEY `farmingDeliveryNoteFk_FK_1` (`farmingFk`),
|
||||
CONSTRAINT `farmingDeliveryNoteFk_FK` FOREIGN KEY (`deliveryNoteFk`) REFERENCES `deliveryNote` (`id`),
|
||||
CONSTRAINT `farmingDeliveryNoteFk_FK_1` FOREIGN KEY (`farmingFk`) REFERENCES `farming` (`id`)
|
||||
);
|
|
@ -76,6 +76,6 @@ describe('Entry basic data path', () => {
|
|||
expect(confirmed).toBe('checked');
|
||||
expect(inventory).toBe('checked');
|
||||
expect(raid).toBe('checked');
|
||||
expect(booked).toBe('checked');
|
||||
expect(booked).toBe('unchecked');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import ngModule from '../module';
|
||||
|
||||
const TOKEN_MULTIMEDIA = 'vnTokenMultimedia';
|
||||
const TOKEN = 'vnToken';
|
||||
/**
|
||||
* Saves and loads the token for the current logged in user.
|
||||
*
|
||||
|
@ -58,8 +59,8 @@ export default class Token {
|
|||
}
|
||||
|
||||
getStorage(storage) {
|
||||
this.token = storage.getItem('vnToken');
|
||||
this.tokenMultimedia = storage.getItem('vnTokenMultimedia');
|
||||
this.token = storage.getItem(TOKEN);
|
||||
this.tokenMultimedia = storage.getItem(TOKEN_MULTIMEDIA);
|
||||
if (!this.token) return;
|
||||
const created = storage.getItem('vnTokenCreated');
|
||||
this.created = created && new Date(created);
|
||||
|
@ -67,15 +68,15 @@ export default class Token {
|
|||
}
|
||||
|
||||
setStorage(storage, token, tokenMultimedia, created, ttl) {
|
||||
storage.setItem('vnTokenMultimedia', tokenMultimedia);
|
||||
storage.setItem('vnToken', token);
|
||||
storage.setItem(TOKEN_MULTIMEDIA, tokenMultimedia);
|
||||
storage.setItem(TOKEN, token);
|
||||
storage.setItem('vnTokenCreated', created.toJSON());
|
||||
storage.setItem('vnTokenTtl', ttl);
|
||||
}
|
||||
|
||||
removeStorage(storage) {
|
||||
storage.removeItem('vnToken');
|
||||
storage.removeItem('vnTokenMultimedia');
|
||||
storage.removeItem(TOKEN);
|
||||
storage.removeItem(TOKEN_MULTIMEDIA);
|
||||
storage.removeItem('vnTokenCreated');
|
||||
storage.removeItem('vnTokenTtl');
|
||||
}
|
||||
|
@ -96,9 +97,9 @@ export default class Token {
|
|||
this.checking = true;
|
||||
const renewPeriod = Math.min(this.ttl, this.renewPeriod) * 1000;
|
||||
const maxDate = this.created.getTime() + renewPeriod;
|
||||
const now = new Date();
|
||||
const now = new Date().getTime();
|
||||
|
||||
if (now.getTime() <= maxDate) {
|
||||
if (now <= maxDate) {
|
||||
this.checking = false;
|
||||
return;
|
||||
}
|
||||
|
@ -106,7 +107,17 @@ export default class Token {
|
|||
this.$http.post('VnUsers/renewToken')
|
||||
.then(res => {
|
||||
const token = res.data;
|
||||
this.set(token.id, now, token.ttl, this.remember);
|
||||
const tokenMultimedia =
|
||||
localStorage.getItem(TOKEN_MULTIMEDIA)
|
||||
?? sessionStorage.getItem(TOKEN_MULTIMEDIA);
|
||||
|
||||
return this.$http.post('VnUsers/renewToken', null, {
|
||||
headers: {Authorization: tokenMultimedia}
|
||||
})
|
||||
.then(({data}) => {
|
||||
const tokenMultimedia = data;
|
||||
this.set(token.id, tokenMultimedia.id, new Date(), token.ttl, this.remember);
|
||||
});
|
||||
})
|
||||
.finally(() => {
|
||||
this.checking = false;
|
||||
|
@ -119,4 +130,4 @@ export default class Token {
|
|||
}
|
||||
Token.$inject = ['vnInterceptor', '$http', '$rootScope'];
|
||||
|
||||
ngModule.service('vnToken', Token);
|
||||
ngModule.service(TOKEN, Token);
|
||||
|
|
|
@ -158,7 +158,7 @@ describe('InvoiceIn filter()', () => {
|
|||
|
||||
const result = await models.InvoiceIn.filter(ctx, {}, options);
|
||||
|
||||
expect(result.length).toEqual(4);
|
||||
expect(result.length).toEqual(5);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
@ -180,7 +180,7 @@ describe('InvoiceIn filter()', () => {
|
|||
|
||||
const result = await models.InvoiceIn.filter(ctx, {}, options);
|
||||
|
||||
expect(result.length).toEqual(6);
|
||||
expect(result.length).toEqual(5);
|
||||
expect(result[0].isBooked).toBeTruthy();
|
||||
|
||||
await tx.rollback();
|
||||
|
|
|
@ -70,7 +70,7 @@ module.exports = Self => {
|
|||
c.hasToInvoice,
|
||||
c.isTaxDataChecked,
|
||||
w.id comercialId,
|
||||
CONCAT(w.firstName, ' ', w.lastName) comercialName
|
||||
u.name workerName
|
||||
FROM vn.ticket t
|
||||
JOIN vn.company co ON co.id = t.companyFk
|
||||
JOIN vn.sale s ON s.ticketFk = t.id
|
||||
|
|
|
@ -15,5 +15,13 @@
|
|||
"description": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"acls": [
|
||||
{
|
||||
"accessType": "READ",
|
||||
"principalType": "ROLE",
|
||||
"principalId": "$everyone",
|
||||
"permission": "ALLOW"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -114,7 +114,7 @@
|
|||
<vn-span
|
||||
class="link"
|
||||
ng-click="workerDescriptor.show($event, client.comercialId)">
|
||||
{{::client.comercialName | dashIfEmpty}}
|
||||
{{::client.workerName | dashIfEmpty}}
|
||||
</vn-span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -33,50 +33,54 @@ module.exports = Self => {
|
|||
|
||||
const stmt = new ParameterizedSQL(
|
||||
`SELECT
|
||||
t.id,
|
||||
t.packages,
|
||||
t.warehouseFk,
|
||||
t.nickname,
|
||||
t.clientFk,
|
||||
t.priority,
|
||||
t.addressFk,
|
||||
st.code ticketStateCode,
|
||||
st.name ticketStateName,
|
||||
wh.name warehouseName,
|
||||
tob.description ticketObservation,
|
||||
a.street,
|
||||
a.postalCode,
|
||||
a.city,
|
||||
am.name agencyModeName,
|
||||
u.nickname userNickname,
|
||||
vn.ticketTotalVolume(t.id) volume,
|
||||
tob.description,
|
||||
GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt,
|
||||
c.phone clientPhone,
|
||||
c.mobile clientMobile,
|
||||
a.phone addressPhone,
|
||||
a.mobile addressMobile,
|
||||
a.longitude,
|
||||
a.latitude,
|
||||
wm.mediaValue salePersonPhone,
|
||||
t.cmrFk,
|
||||
t.isSigned signed
|
||||
FROM vn.route r
|
||||
JOIN ticket t ON t.routeFk = r.id
|
||||
JOIN client c ON t.clientFk = c.id
|
||||
LEFT JOIN vn.sale s ON s.ticketFk = t.id
|
||||
LEFT JOIN vn.item i ON i.id = s.itemFk
|
||||
LEFT JOIN ticketState ts ON ts.ticketFk = t.id
|
||||
LEFT JOIN state st ON st.id = ts.stateFk
|
||||
LEFT JOIN warehouse wh ON wh.id = t.warehouseFk
|
||||
LEFT JOIN observationType ot ON ot.code = 'delivery'
|
||||
LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id
|
||||
AND tob.observationTypeFk = ot.id
|
||||
LEFT JOIN address a ON a.id = t.addressFk
|
||||
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
|
||||
LEFT JOIN account.user u ON u.id = r.workerFk
|
||||
LEFT JOIN vehicle v ON v.id = r.vehicleFk
|
||||
LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk`
|
||||
t.id,
|
||||
t.packages,
|
||||
t.warehouseFk,
|
||||
t.nickname,
|
||||
t.clientFk,
|
||||
t.priority,
|
||||
t.addressFk,
|
||||
st.code ticketStateCode,
|
||||
st.name ticketStateName,
|
||||
wh.name warehouseName,
|
||||
tob.description observationDelivery,
|
||||
tob2.description observationDropOff,
|
||||
tob2.id observationId,
|
||||
a.street,
|
||||
a.postalCode,
|
||||
a.city,
|
||||
am.name agencyModeName,
|
||||
u.nickname userNickname,
|
||||
vn.ticketTotalVolume(t.id) volume,
|
||||
GROUP_CONCAT(DISTINCT i.itemPackingTypeFk ORDER BY i.itemPackingTypeFk) ipt,
|
||||
c.phone clientPhone,
|
||||
c.mobile clientMobile,
|
||||
a.phone addressPhone,
|
||||
a.mobile addressMobile,
|
||||
a.longitude,
|
||||
a.latitude,
|
||||
wm.mediaValue salePersonPhone,
|
||||
t.cmrFk,
|
||||
t.isSigned signed
|
||||
FROM vn.route r
|
||||
JOIN ticket t ON t.routeFk = r.id
|
||||
JOIN client c ON t.clientFk = c.id
|
||||
LEFT JOIN vn.sale s ON s.ticketFk = t.id
|
||||
LEFT JOIN vn.item i ON i.id = s.itemFk
|
||||
LEFT JOIN ticketState ts ON ts.ticketFk = t.id
|
||||
LEFT JOIN state st ON st.id = ts.stateFk
|
||||
LEFT JOIN warehouse wh ON wh.id = t.warehouseFk
|
||||
LEFT JOIN observationType ot ON ot.code = 'delivery'
|
||||
LEFT JOIN ticketObservation tob ON tob.ticketFk = t.id
|
||||
AND tob.observationTypeFk = ot.id
|
||||
LEFT JOIN observationType ot2 ON ot2.code = 'dropOff'
|
||||
LEFT JOIN ticketObservation tob2 ON tob2.ticketFk = t.id
|
||||
AND tob2.observationTypeFk = ot2.id
|
||||
LEFT JOIN address a ON a.id = t.addressFk
|
||||
LEFT JOIN agencyMode am ON am.id = t.agencyModeFk
|
||||
LEFT JOIN account.user u ON u.id = r.workerFk
|
||||
LEFT JOIN vehicle v ON v.id = r.vehicleFk
|
||||
LEFT JOIN workerMedia wm ON wm.workerFk = c.salesPersonFk`
|
||||
);
|
||||
|
||||
if (!filter.where) filter.where = {};
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
|
||||
module.exports = Self => {
|
||||
Self.remoteMethod('addDropOff', {
|
||||
description: 'Add a dropOff note in a ticket',
|
||||
accessType: 'WRITE',
|
||||
accepts: [{
|
||||
arg: 'ticketFk',
|
||||
type: 'number',
|
||||
required: true,
|
||||
description: 'ticket ID'
|
||||
}, {
|
||||
arg: 'note',
|
||||
type: 'string',
|
||||
required: true,
|
||||
description: 'note text'
|
||||
}],
|
||||
|
||||
http: {
|
||||
path: `/addDropOff`,
|
||||
verb: 'post'
|
||||
}
|
||||
});
|
||||
|
||||
Self.addDropOff = async(ticketFk, note, options) => {
|
||||
const models = Self.app.models;
|
||||
const myOptions = {};
|
||||
|
||||
if (typeof options == 'object')
|
||||
Object.assign(myOptions, options);
|
||||
|
||||
const observationTypeDropOff = await models.ObservationType.findOne({
|
||||
where: {code: 'dropOff'}
|
||||
}, myOptions);
|
||||
|
||||
await models.TicketObservation.create({
|
||||
ticketFk: ticketFk,
|
||||
observationTypeFk: observationTypeDropOff.id,
|
||||
description: note
|
||||
|
||||
}, myOptions);
|
||||
};
|
||||
};
|
|
@ -0,0 +1,31 @@
|
|||
const {models} = require('vn-loopback/server/server');
|
||||
|
||||
describe('ticketObservation addDropOff()', () => {
|
||||
const ticketFk = 5;
|
||||
const note = 'DropOff note';
|
||||
const code = 'dropOff';
|
||||
|
||||
it('should return a dropOff note', async() => {
|
||||
const tx = await models.TicketObservation.beginTransaction({});
|
||||
|
||||
try {
|
||||
const options = {transaction: tx};
|
||||
await models.TicketObservation.addDropOff(
|
||||
ticketFk, note, options);
|
||||
|
||||
const observationTypeDropOff = await models.TicketObservation.find({
|
||||
where: {
|
||||
ticketFk,
|
||||
code
|
||||
}
|
||||
}, options);
|
||||
|
||||
expect(observationTypeDropOff.length).toEqual(1);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
await tx.rollback();
|
||||
throw e;
|
||||
}
|
||||
});
|
||||
});
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
|
||||
const buildFilter = require('vn-loopback/util/filter').buildFilter;
|
||||
const mergeFilters = require('vn-loopback/util/filter').mergeFilters;
|
||||
|
@ -135,7 +134,8 @@ module.exports = Self => {
|
|||
tr.requesterFk,
|
||||
tr.isOk,
|
||||
s.quantity saleQuantity,
|
||||
s.itemFk,
|
||||
s.itemFk saleItemFk,
|
||||
i.id itemFk,
|
||||
i.name itemDescription,
|
||||
t.shipped,
|
||||
DATE(t.shipped) shippedDate,
|
||||
|
|
|
@ -150,7 +150,7 @@ module.exports = Self => {
|
|||
const salesNewTicket = salesMovable.filter(sale => (sale.movable ? sale.movable : 0) >= sale.quantity);
|
||||
|
||||
const salesNewTicketLength = salesNewTicket.length;
|
||||
if (salesNewTicketLength && sales.length != salesNewTicketLength) {
|
||||
if (salesNewTicketLength && (args.newTicket || sales.length != salesNewTicketLength)) {
|
||||
const newTicket = await models.Ticket.transferSales(
|
||||
ctx,
|
||||
args.id,
|
||||
|
|
|
@ -118,7 +118,7 @@ module.exports = Self => {
|
|||
const [salesMovable] = await Self.rawSql(query, params, myOptions);
|
||||
|
||||
const itemMovable = new Map();
|
||||
for (sale of salesMovable) {
|
||||
for (let sale of salesMovable) {
|
||||
const saleMovable = sale.movable ? sale.movable : 0;
|
||||
itemMovable.set(sale.id, saleMovable);
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ module.exports = Self => {
|
|||
const [difComponents] = await Self.rawSql(query, params, myOptions);
|
||||
|
||||
const map = new Map();
|
||||
for (difComponent of difComponents)
|
||||
for (let difComponent of difComponents)
|
||||
map.set(difComponent.saleFk, difComponent);
|
||||
|
||||
for (sale of salesObj.items) {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
const models = require('vn-loopback/server/server').models;
|
||||
const UserError = require('vn-loopback/util/user-error');
|
||||
const ForbiddenError = require('vn-loopback/util/forbiddenError');
|
||||
|
||||
describe('sale priceDifference()', () => {
|
||||
|
@ -83,12 +82,10 @@ describe('sale priceDifference()', () => {
|
|||
warehouseId: 1
|
||||
};
|
||||
|
||||
const result = await models.Ticket.priceDifference(ctx, options);
|
||||
const firstItem = result.items[0];
|
||||
const secondtItem = result.items[1];
|
||||
const {items} = await models.Ticket.priceDifference(ctx, options);
|
||||
|
||||
expect(firstItem.movable).toEqual(380);
|
||||
expect(secondtItem.movable).toEqual(1790);
|
||||
expect(items[0].movable).toEqual(410);
|
||||
expect(items[1].movable).toEqual(1810);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const UserError = require('vn-loopback/util/user-error');
|
||||
|
||||
module.exports = Self => {
|
||||
require('../methods/ticket-observation/addDropOff')(Self);
|
||||
Self.rewriteDbError(function(err) {
|
||||
if (err.code === 'ER_DUP_ENTRY')
|
||||
return new UserError(`The observation type can't be repeated`);
|
||||
|
|
|
@ -15,7 +15,6 @@ schemas:
|
|||
- hedera
|
||||
- pbx
|
||||
- psico
|
||||
- rfid
|
||||
- sage
|
||||
- salix
|
||||
- srt
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "salix-back",
|
||||
"version": "24.18.0",
|
||||
"version": "24.20.0",
|
||||
"author": "Verdnatura Levante SL",
|
||||
"description": "Salix backend",
|
||||
"license": "GPL-3.0",
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
SELECT
|
||||
io2.amount,
|
||||
io2.ref,
|
||||
io2.issued,
|
||||
ict.description
|
||||
FROM invoiceOut io
|
||||
JOIN invoiceCorrection ic ON ic.correctingFk = io.id
|
||||
JOIN invoiceOut io2 ON io2.id = ic.correctedFk
|
||||
LEFT JOIN ticket t ON t.refFk = io.ref
|
||||
JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk
|
||||
WHERE io.ref = ?
|
||||
SELECT io2.amount,
|
||||
io2.ref,
|
||||
io2.issued,
|
||||
ict.description
|
||||
FROM invoiceOut io
|
||||
JOIN invoiceCorrection ic ON ic.correctingFk = io.id
|
||||
JOIN invoiceOut io2 ON io2.id = ic.correctedFk
|
||||
JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk
|
||||
WHERE io.ref = ?
|
||||
|
|
Loading…
Reference in New Issue