Merge branch 'dev' into 5586-optimizeNegativeBases
gitea/salix/pipeline/pr-dev There was a failure building this commit
Details
gitea/salix/pipeline/pr-dev There was a failure building this commit
Details
This commit is contained in:
commit
256aa76e23
|
@ -1,23 +1,6 @@
|
|||
const models = require('vn-loopback/server/server').models;
|
||||
|
||||
describe('loopback model MailAliasAccount', () => {
|
||||
it('should fail to add a mail Alias if the worker doesnt have ACLs', async() => {
|
||||
const tx = await models.MailAliasAccount.beginTransaction({});
|
||||
let error;
|
||||
|
||||
try {
|
||||
const options = {transaction: tx, accessToken: {userId: 57}};
|
||||
await models.MailAliasAccount.create({mailAlias: 2, account: 5}, options);
|
||||
|
||||
await tx.rollback();
|
||||
} catch (e) {
|
||||
await tx.rollback();
|
||||
error = e;
|
||||
}
|
||||
|
||||
expect(error.message).toEqual('The alias cant be modified');
|
||||
});
|
||||
|
||||
it('should add a mail Alias', async() => {
|
||||
const tx = await models.MailAliasAccount.beginTransaction({});
|
||||
let error;
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"lastPull": "2024-02-15T08:58:24.000Z",
|
||||
"shaSums": {}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
DELETE FROM salix.ACL
|
||||
WHERE model = 'MailAliasAccount'
|
||||
AND property = 'canEditAlias'
|
||||
AND principalType = 'ROLE'
|
||||
AND principalId = 'marketingBoss';
|
|
@ -0,0 +1,13 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`tx_commit`(isTx BOOL)
|
||||
BEGIN
|
||||
/**
|
||||
* Confirma los cambios asociados a una transacción.
|
||||
*
|
||||
* @param isTx es true si existe transacción asociada
|
||||
*/
|
||||
IF isTx THEN
|
||||
COMMIT;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,13 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`tx_rollback`(isTx BOOL)
|
||||
BEGIN
|
||||
/**
|
||||
* Deshace los cambios asociados a una transacción.
|
||||
*
|
||||
* @param isTx es true si existe transacción asociada
|
||||
*/
|
||||
IF isTx THEN
|
||||
ROLLBACK;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -0,0 +1,13 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `util`.`tx_start`(isTx BOOL)
|
||||
BEGIN
|
||||
/**
|
||||
* Inicia una transacción.
|
||||
*
|
||||
* @param isTx es true si existe transacción asociada
|
||||
*/
|
||||
IF isTx THEN
|
||||
START TRANSACTION;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -4,32 +4,25 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`hasAnyNegativeBase`(
|
|||
DETERMINISTIC
|
||||
BEGIN
|
||||
|
||||
/* Calcula si existe alguna base imponible negativa
|
||||
* Requiere la tabla temporal tmp.ticketToInvoice(id)
|
||||
/**
|
||||
* Calcula si existe alguna base imponible negativa
|
||||
* Requiere la tabla temporal tmp.ticketToInvoice(id) para getTaxBases()
|
||||
*
|
||||
* returns BOOLEAN
|
||||
*/
|
||||
|
||||
DECLARE hasAnyNegativeBase BOOLEAN;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.ticket;
|
||||
CREATE TEMPORARY TABLE tmp.ticket
|
||||
(KEY (ticketFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT id ticketFk
|
||||
FROM tmp.ticketToInvoice;
|
||||
CALL getTaxBases();
|
||||
|
||||
CALL ticket_getTax(NULL);
|
||||
SELECT negative INTO hasAnyNegativeBase
|
||||
FROM tmp.taxBases
|
||||
LIMIT 1;
|
||||
|
||||
SELECT COUNT(*) INTO hasAnyNegativeBase
|
||||
FROM(
|
||||
SELECT SUM(taxableBase) as taxableBase
|
||||
FROM tmp.ticketTax
|
||||
GROUP BY pgcFk
|
||||
HAVING taxableBase < 0
|
||||
) t;
|
||||
|
||||
DROP TEMPORARY TABLE tmp.ticketTax;
|
||||
DROP TEMPORARY TABLE tmp.ticket;
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.ticketTax,
|
||||
tmp.ticket,
|
||||
tmp.taxBases;
|
||||
|
||||
RETURN hasAnyNegativeBase;
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`hasAnyPositiveBase`()
|
||||
RETURNS tinyint(1)
|
||||
DETERMINISTIC
|
||||
BEGIN
|
||||
|
||||
/**
|
||||
* Calcula si existe alguna base imponible positiva
|
||||
* Requiere la tabla temporal tmp.ticketToInvoice(id) para getTaxBases()
|
||||
*
|
||||
* returns BOOLEAN
|
||||
*/
|
||||
|
||||
DECLARE hasAnyPositiveBase BOOLEAN;
|
||||
|
||||
CALL getTaxBases();
|
||||
|
||||
SELECT positive INTO hasAnyPositiveBase
|
||||
FROM tmp.taxBases
|
||||
LIMIT 1;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.ticketTax,
|
||||
tmp.ticket,
|
||||
tmp.taxBases;
|
||||
|
||||
RETURN hasAnyPositiveBase;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -9,6 +9,7 @@ BEGIN
|
|||
DECLARE v26Month DATE;
|
||||
DECLARE v3Month DATE;
|
||||
DECLARE vTrashId VARCHAR(15);
|
||||
DECLARE v2Years DATE;
|
||||
DECLARE v5Years DATE;
|
||||
|
||||
SET vDateShort = util.VN_CURDATE() - INTERVAL 2 MONTH;
|
||||
|
@ -18,6 +19,7 @@ BEGIN
|
|||
SET v18Month = util.VN_CURDATE() - INTERVAL 18 MONTH;
|
||||
SET v26Month = util.VN_CURDATE() - INTERVAL 26 MONTH;
|
||||
SET v3Month = util.VN_CURDATE() - INTERVAL 3 MONTH;
|
||||
SET v2Years = util.VN_CURDATE() - INTERVAL 2 YEAR;
|
||||
SET v5Years = util.VN_CURDATE() - INTERVAL 5 YEAR;
|
||||
|
||||
DELETE FROM ticketParking WHERE created < vDateShort;
|
||||
|
@ -163,7 +165,11 @@ BEGIN
|
|||
FROM tmp.duaToDelete tmp
|
||||
JOIN vn.dua d ON d.id = tmp.id;
|
||||
|
||||
DELETE FROM vn.awb WHERE created < TIMESTAMPADD(YEAR,-2,util.VN_CURDATE());
|
||||
DELETE a
|
||||
FROM vn.awb a
|
||||
LEFT JOIN vn.travel t ON t.awbFk = a.id
|
||||
WHERE a.created < v2Years
|
||||
AND t.id IS NULL;
|
||||
|
||||
-- Borra los registros de collection y ticketcollection
|
||||
DELETE FROM vn.collection WHERE created < vDateShort;
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`duaInvoiceInBooking`(vDuaFk INT)
|
||||
BEGIN
|
||||
|
||||
/**
|
||||
* Genera el asiento de un DUA y marca las entradas como confirmadas
|
||||
*
|
||||
* @param vDuaFk Id del dua a recalcular
|
||||
*/
|
||||
DECLARE done BOOL DEFAULT FALSE;
|
||||
DECLARE vInvoiceFk INT;
|
||||
DECLARE vASIEN BIGINT DEFAULT 0;
|
||||
DECLARE vCounter INT DEFAULT 0;
|
||||
|
||||
DECLARE rs CURSOR FOR
|
||||
SELECT e.invoiceInFk
|
||||
SELECT DISTINCT e.invoiceInFk
|
||||
FROM entry e
|
||||
JOIN duaEntry de ON de.entryFk = e.id
|
||||
JOIN invoiceIn ii ON ii.id = e.invoiceInFk
|
||||
|
@ -44,13 +48,13 @@ BEGIN
|
|||
|
||||
IF vCounter > 0 OR vASIEN > 0 THEN
|
||||
|
||||
UPDATE vn.XDiario x
|
||||
JOIN vn.ledgerConfig lc ON lc.lastBookEntry = x.ASIEN
|
||||
UPDATE vn2008.XDiario x
|
||||
JOIN ledgerConfig lc ON lc.lastBookEntry = x.ASIEN
|
||||
SET x.ASIEN = vASIEN;
|
||||
|
||||
ELSE
|
||||
|
||||
SELECT lastBookEntry INTO vASIEN FROM vn.ledgerConfig;
|
||||
SELECT lastBookEntry INTO vASIEN FROM ledgerConfig;
|
||||
|
||||
END IF;
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`getTaxBases`()
|
||||
BEGIN
|
||||
/**
|
||||
* Calcula y devuelve en número de bases imponibles postivas y negativas
|
||||
* Requiere la tabla temporal tmp.ticketToInvoice(id)
|
||||
*
|
||||
* returns tmp.taxBases
|
||||
*/
|
||||
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.ticket
|
||||
(KEY (ticketFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT id ticketFk
|
||||
FROM tmp.ticketToInvoice;
|
||||
|
||||
CALL ticket_getTax(NULL);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.taxBases;
|
||||
CREATE TEMPORARY TABLE tmp.taxBases
|
||||
ENGINE = MEMORY
|
||||
SELECT
|
||||
SUM(taxableBase > 0) as positive,
|
||||
SUM(taxableBase < 0) as negative
|
||||
FROM(
|
||||
SELECT SUM(taxableBase) taxableBase
|
||||
FROM tmp.ticketTax
|
||||
GROUP BY pgcFk
|
||||
) t;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,120 +1,115 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`inventoryMake`(vDate DATE, vWh INT)
|
||||
proc: BEGIN
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`inventoryMake`(vInventoryDate DATE)
|
||||
BEGIN
|
||||
/**
|
||||
* Recalcula los inventarios de todos los almacenes, si vWh = 0
|
||||
* Recalculate the inventories
|
||||
*
|
||||
* @param vDate Fecha de los nuevos inventarios
|
||||
* @param vWh almacen al cual hacer el inventario
|
||||
* @param vInventoryDate date for the new inventory
|
||||
*/
|
||||
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vEntryFk INT;
|
||||
DECLARE vTravelFk INT;
|
||||
DECLARE vDateLastInventory DATE;
|
||||
DECLARE vDateYesterday DATETIME DEFAULT vDate - INTERVAL 1 SECOND;
|
||||
DECLARE vDateYesterday DATETIME DEFAULT vInventoryDate - INTERVAL 1 SECOND;
|
||||
DECLARE vWarehouseOutFkInventory INT;
|
||||
DECLARE vInventorySupplierFk INT;
|
||||
DECLARE vAgencyModeFkInventory INT;
|
||||
DECLARE vMaxRecentInventories INT;
|
||||
DECLARE vWarehouseFk INT;
|
||||
|
||||
DECLARE cWarehouses CURSOR FOR
|
||||
SELECT id
|
||||
FROM warehouse
|
||||
WHERE isInventory
|
||||
AND vWh IN (0,id);
|
||||
WHERE isInventory;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||
|
||||
SELECT inventorySupplierFk INTO vInventorySupplierFk FROM entryConfig LIMIT 1;
|
||||
SELECT inventoried INTO vDateLastInventory FROM config LIMIT 1;
|
||||
SELECT maxRecentInventories,
|
||||
warehouseOutFk,
|
||||
agencyModeFk
|
||||
INTO vMaxRecentInventories,
|
||||
vWarehouseOutFkInventory,
|
||||
vAgencyModeFkInventory
|
||||
FROM inventoryConfig
|
||||
LIMIT 1;
|
||||
|
||||
IF vDateLastInventory IS NULL
|
||||
OR vInventorySupplierFk IS NULL
|
||||
OR vMaxRecentInventories IS NULL
|
||||
OR vInventoryDate IS NULL
|
||||
OR vWarehouseOutFkInventory IS NULL
|
||||
OR vAgencyModeFkInventory IS NULL THEN
|
||||
CALL util.throw('Some config parameters are not set');
|
||||
END IF;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
OPEN cWarehouses;
|
||||
-- Environment variable to disable the triggers of the affected tables
|
||||
SET @isModeInventory := TRUE;
|
||||
l: LOOP
|
||||
|
||||
SET vDone = FALSE;
|
||||
FETCH cWarehouses INTO vWh;
|
||||
SET vEntryFk = NULL;
|
||||
SET vTravelFk = NULL;
|
||||
|
||||
FETCH cWarehouses INTO vWarehouseFk;
|
||||
|
||||
IF vDone THEN
|
||||
LEAVE l;
|
||||
END IF;
|
||||
|
||||
SELECT w.id INTO vWarehouseOutFkInventory
|
||||
FROM warehouse w
|
||||
WHERE w.code = 'inv';
|
||||
|
||||
SELECT inventorySupplierFk INTO vInventorySupplierFk
|
||||
FROM entryConfig;
|
||||
|
||||
SELECT am.id INTO vAgencyModeFkInventory
|
||||
FROM agencyMode am
|
||||
where code = 'inv';
|
||||
|
||||
SELECT MAX(landed) INTO vDateLastInventory
|
||||
FROM travel tr
|
||||
JOIN entry e ON e.travelFk = tr.id
|
||||
JOIN buy b ON b.entryFk = e.id
|
||||
WHERE warehouseOutFk = vWarehouseOutFkInventory
|
||||
AND landed < vDate
|
||||
AND e.supplierFk = vInventorySupplierFk
|
||||
AND warehouseInFk = vWh
|
||||
AND NOT isRaid;
|
||||
|
||||
IF vDateLastInventory IS NULL THEN
|
||||
SELECT inventoried INTO vDateLastInventory FROM config;
|
||||
END IF;
|
||||
|
||||
-- Generamos travel, si no existe.
|
||||
SET vTravelFK = 0;
|
||||
|
||||
-- Generate travel, if it does not exist
|
||||
SELECT id INTO vTravelFk
|
||||
FROM travel
|
||||
WHERE warehouseOutFk = vWarehouseOutFkInventory
|
||||
AND warehouseInFk = vWh
|
||||
AND landed = vDate
|
||||
AND warehouseInFk = vWarehouseFk
|
||||
AND landed = vInventoryDate
|
||||
AND agencyModeFk = vAgencyModeFkInventory
|
||||
AND ref = 'inventario'
|
||||
LIMIT 1;
|
||||
|
||||
IF NOT vTravelFK THEN
|
||||
|
||||
INSERT INTO travel SET
|
||||
warehouseOutFk = vWarehouseOutFkInventory,
|
||||
warehouseInFk = vWh,
|
||||
shipped = vDate,
|
||||
landed = vDate,
|
||||
IF vTravelFk IS NULL THEN
|
||||
INSERT INTO travel
|
||||
SET warehouseOutFk = vWarehouseOutFkInventory,
|
||||
warehouseInFk = vWarehouseFk,
|
||||
shipped = vInventoryDate,
|
||||
landed = vInventoryDate,
|
||||
agencyModeFk = vAgencyModeFkInventory,
|
||||
ref = 'inventario',
|
||||
isDelivered = TRUE,
|
||||
isReceived = TRUE;
|
||||
|
||||
SELECT LAST_INSERT_ID() INTO vTravelFk;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Generamos entrada si no existe, o la vaciamos.
|
||||
SET vEntryFk = 0;
|
||||
|
||||
-- Generate an entry if it does not exist, or we empty it
|
||||
SELECT id INTO vEntryFk
|
||||
FROM entry
|
||||
WHERE supplierFk = vInventorySupplierFk
|
||||
AND travelFk = vTravelFk;
|
||||
|
||||
IF NOT vEntryFk THEN
|
||||
|
||||
INSERT INTO entry SET
|
||||
supplierFk = vInventorySupplierFk,
|
||||
IF vEntryFk IS NULL THEN
|
||||
INSERT INTO entry
|
||||
SET supplierFk = vInventorySupplierFk,
|
||||
isConfirmed = TRUE,
|
||||
isOrdered = TRUE,
|
||||
travelFk = vTravelFk;
|
||||
|
||||
SELECT LAST_INSERT_ID() INTO vEntryFk;
|
||||
|
||||
ELSE
|
||||
|
||||
DELETE FROM buy WHERE entryFk = vEntryFk;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Preparamos tabla auxilar
|
||||
CREATE OR REPLACE TEMPORARY TABLE tmp.inventory (
|
||||
-- Prepare the auxiliary table
|
||||
CREATE OR REPLACE TEMPORARY TABLE tInventory (
|
||||
itemFk INT(11) NOT NULL PRIMARY KEY,
|
||||
quantity int(11) DEFAULT '0',
|
||||
buyingValue decimal(10,4) DEFAULT '0.0000',
|
||||
|
@ -130,53 +125,51 @@ proc: BEGIN
|
|||
price3 decimal(10,2) DEFAULT '0.00',
|
||||
minPrice decimal(10,2) DEFAULT '0.00',
|
||||
producer varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
INDEX (itemFK)) ENGINE = MEMORY;
|
||||
INDEX (itemFK)
|
||||
) ENGINE = MEMORY;
|
||||
|
||||
-- Compras
|
||||
INSERT INTO tmp.inventory(itemFk,quantity)
|
||||
-- Buys
|
||||
INSERT INTO tInventory(itemFk, quantity)
|
||||
SELECT b.itemFk, SUM(b.quantity)
|
||||
FROM buy b
|
||||
JOIN entry e ON e.id = b.entryFk
|
||||
JOIN travel tr ON tr.id = e.travelFk
|
||||
WHERE tr.warehouseInFk = vWh
|
||||
AND tr.landed BETWEEN vDateLastInventory
|
||||
AND vDateYesterday
|
||||
WHERE tr.warehouseInFk = vWarehouseFk
|
||||
AND tr.landed BETWEEN vDateLastInventory AND vDateYesterday
|
||||
AND NOT isRaid
|
||||
GROUP BY b.itemFk;
|
||||
SELECT vDateLastInventory , vDateYesterday;
|
||||
|
||||
-- Traslados
|
||||
INSERT INTO tmp.inventory(itemFk, quantity)
|
||||
-- Transfers
|
||||
INSERT INTO tInventory(itemFk, quantity)
|
||||
SELECT itemFk, quantityOut
|
||||
FROM (
|
||||
SELECT b.itemFk,- SUM(b.quantity) quantityOut
|
||||
FROM buy b
|
||||
JOIN entry e ON e.id = b.entryFk
|
||||
JOIN travel tr ON tr.id = e.travelFk
|
||||
WHERE tr.warehouseOutFk = vWh
|
||||
AND tr.shipped BETWEEN vDateLastInventory
|
||||
AND vDateYesterday
|
||||
WHERE tr.warehouseOutFk = vWarehouseFk
|
||||
AND tr.shipped BETWEEN vDateLastInventory AND vDateYesterday
|
||||
AND NOT isRaid
|
||||
GROUP BY b.itemFk
|
||||
) sub
|
||||
ON DUPLICATE KEY UPDATE quantity = IFNULL(quantity, 0) + sub.quantityOut;
|
||||
|
||||
-- Ventas
|
||||
INSERT INTO tmp.inventory(itemFk,quantity)
|
||||
-- Sales
|
||||
INSERT INTO tInventory(itemFk, quantity)
|
||||
SELECT itemFk, saleOut
|
||||
FROM (
|
||||
SELECT s.itemFk, - SUM(s.quantity) saleOut
|
||||
FROM sale s
|
||||
JOIN ticket t ON t.id = s.ticketFk
|
||||
WHERE t.warehouseFk = vWh
|
||||
WHERE t.warehouseFk = vWarehouseFk
|
||||
AND t.shipped BETWEEN vDateLastInventory AND vDateYesterday
|
||||
GROUP BY s.itemFk
|
||||
) sub
|
||||
ON DUPLICATE KEY UPDATE quantity = IFNULL(quantity,0) + sub.saleOut;
|
||||
|
||||
-- Actualiza valores de la ultima compra
|
||||
UPDATE tmp.inventory inv
|
||||
JOIN cache.last_buy lb ON lb.item_id = inv.itemFk AND lb.warehouse_id = vWh
|
||||
-- Update values of the last purchase
|
||||
UPDATE tInventory inv
|
||||
JOIN cache.last_buy lb ON lb.item_id = inv.itemFk AND lb.warehouse_id = vWarehouseFk
|
||||
JOIN buy b ON b.id = lb.buy_id
|
||||
JOIN item i ON i.id = b.itemFk
|
||||
LEFT JOIN producer p ON p.id = i.producerFk
|
||||
|
@ -194,7 +187,7 @@ proc: BEGIN
|
|||
inv.minPrice = b.minPrice,
|
||||
inv.producer = p.name;
|
||||
|
||||
INSERT INTO buy( itemFk,
|
||||
INSERT INTO buy(itemFk,
|
||||
quantity,
|
||||
buyingValue,
|
||||
freightValue,
|
||||
|
@ -224,42 +217,53 @@ proc: BEGIN
|
|||
price3,
|
||||
minPrice,
|
||||
vEntryFk
|
||||
FROM tmp.inventory;
|
||||
FROM tInventory;
|
||||
|
||||
SELECT vWh, COUNT(*), util.VN_NOW() FROM tmp.inventory;
|
||||
|
||||
-- Actualizamos el campo lastUsed de item
|
||||
-- Update the 'lastUsed' field of the item
|
||||
UPDATE item i
|
||||
JOIN tmp.inventory i2 ON i2.itemFk = i.id
|
||||
JOIN tInventory i2 ON i2.itemFk = i.id
|
||||
SET i.lastUsed = NOW()
|
||||
WHERE i2.quantity;
|
||||
|
||||
-- DROP TEMPORARY TABLE tmp.inventory;
|
||||
DROP TEMPORARY TABLE tInventory;
|
||||
|
||||
END LOOP;
|
||||
|
||||
CLOSE cWarehouses;
|
||||
|
||||
UPDATE config SET inventoried = vDate;
|
||||
UPDATE config SET inventoried = vInventoryDate;
|
||||
|
||||
SET @isModeInventory := FALSE;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete;
|
||||
CREATE TEMPORARY TABLE tmp.entryToDelete
|
||||
(INDEX(entryId) USING BTREE) ENGINE = MEMORY
|
||||
SELECT e.id as entryId,
|
||||
t.id as travelId
|
||||
CREATE OR REPLACE TEMPORARY TABLE tEntryToDelete
|
||||
(INDEX(entryId)) ENGINE = MEMORY
|
||||
SELECT e.id entryId,
|
||||
t.id travelId
|
||||
FROM travel t
|
||||
JOIN `entry` e ON e.travelFk = t.id
|
||||
JOIN (
|
||||
SELECT t.shipped
|
||||
FROM travel t
|
||||
JOIN `entry` e ON e.travelFk = t.id
|
||||
WHERE e.supplierFk = vInventorySupplierFk
|
||||
AND t.shipped <= util.VN_CURDATE() - INTERVAL 12 DAY
|
||||
AND (DAY(t.shipped) <> 1 OR shipped < util.VN_CURDATE() - INTERVAL 12 DAY);
|
||||
AND t.shipped <= vInventoryDate
|
||||
GROUP BY t.shipped
|
||||
ORDER BY t.shipped DESC
|
||||
OFFSET vMaxRecentInventories ROWS
|
||||
) sub
|
||||
WHERE e.supplierFk = vInventorySupplierFk
|
||||
AND t.shipped IN (sub.shipped);
|
||||
|
||||
DELETE e
|
||||
FROM `entry` e
|
||||
JOIN tmp.entryToDelete tmp ON tmp.entryId = e.id;
|
||||
JOIN tEntryToDelete tmp ON tmp.entryId = e.id;
|
||||
|
||||
DELETE IGNORE t
|
||||
FROM travel t
|
||||
JOIN tmp.entryToDelete tmp ON tmp.travelId = t.id;
|
||||
JOIN tEntryToDelete tmp ON tmp.travelId = t.id;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tEntryToDelete;
|
||||
|
||||
COMMIT;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -2,10 +2,11 @@ DELIMITER $$
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`inventoryMakeLauncher`()
|
||||
BEGIN
|
||||
/**
|
||||
* Recalcula los inventarios de todos los almacenes.
|
||||
* Recalculate the inventories of all warehouses
|
||||
*/
|
||||
|
||||
call vn.inventoryMake(TIMESTAMPADD(DAY, -10, util.VN_CURDATE()), 0);
|
||||
|
||||
CALL inventoryMake(
|
||||
util.VN_CURDATE() -
|
||||
INTERVAL (SELECT daysInPastForInventory FROM inventoryConfig LIMIT 1) DAY
|
||||
);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,32 +1,35 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTaxMakeByDua`(vDuaFk INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE done BOOL DEFAULT FALSE;
|
||||
/**
|
||||
* Borra los valores de duaTax y sus vctos. y los vuelve a crear en base a la tabla duaEntry
|
||||
*
|
||||
* @param vDuaFk Id del dua a recalcular
|
||||
*/
|
||||
DECLARE vDone BOOL DEFAULT FALSE;
|
||||
DECLARE vInvoiceInFk INT;
|
||||
|
||||
DECLARE rs CURSOR FOR
|
||||
SELECT invoiceInFk
|
||||
DECLARE vInvoices CURSOR FOR
|
||||
SELECT DISTINCT invoiceInFk
|
||||
FROM entry e
|
||||
JOIN duaEntry de ON de.entryFk = e.id
|
||||
WHERE de.duaFk = vDuaFk;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||
|
||||
OPEN rs;
|
||||
OPEN vInvoices;
|
||||
l: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH vInvoices INTO vInvoiceInFk;
|
||||
|
||||
FETCH rs INTO vInvoiceInFk;
|
||||
|
||||
WHILE NOT done DO
|
||||
IF vDone THEN
|
||||
LEAVE l;
|
||||
END IF;
|
||||
|
||||
CALL vn2008.recibidaIvaInsert(vInvoiceInFk);
|
||||
CALL invoiceInDueDay_recalc(vInvoiceInFk);
|
||||
|
||||
FETCH rs INTO vInvoiceInFk;
|
||||
|
||||
END WHILE;
|
||||
|
||||
CLOSE rs;
|
||||
|
||||
END LOOP;
|
||||
CLOSE vInvoices;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,32 +1,35 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTax_getFromDua`(vDuaFk INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE done BOOL DEFAULT FALSE;
|
||||
/**
|
||||
* Borra los valores de duaTax y sus vctos. y los vuelve a crear en base a la tabla duaEntry
|
||||
*
|
||||
* @param vDuaFk Id del dua a recalcular
|
||||
*/
|
||||
DECLARE vDone BOOL DEFAULT FALSE;
|
||||
DECLARE vInvoiceInFk INT;
|
||||
|
||||
DECLARE rs CURSOR FOR
|
||||
SELECT invoiceInFk
|
||||
DECLARE vInvoices CURSOR FOR
|
||||
SELECT DISTINCT invoiceInFk
|
||||
FROM entry e
|
||||
JOIN duaEntry de ON de.entryFk = e.id
|
||||
WHERE de.duaFk = vDuaFk;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
|
||||
|
||||
OPEN rs;
|
||||
OPEN vInvoices;
|
||||
l: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH vInvoices INTO vInvoiceInFk;
|
||||
|
||||
FETCH rs INTO vInvoiceInFk;
|
||||
|
||||
WHILE NOT done DO
|
||||
IF vDone THEN
|
||||
LEAVE l;
|
||||
END IF;
|
||||
|
||||
CALL invoiceInTax_getFromEntries(vInvoiceInFk);
|
||||
CALL invoiceInDueDay_calculate(vInvoiceInFk);
|
||||
|
||||
FETCH rs INTO vInvoiceInFk;
|
||||
|
||||
END WHILE;
|
||||
|
||||
CLOSE rs;
|
||||
|
||||
END LOOP;
|
||||
CLOSE vInvoices;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -1,13 +1,22 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTax_getFromEntries`(IN vId INT)
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`invoiceInTax_getFromEntries`(IN vInvoiceInFk INT)
|
||||
BEGIN
|
||||
DECLARE vRate DOUBLE DEFAULT 1;
|
||||
DECLARE vDated DATE;
|
||||
DECLARE vExpenseFk VARCHAR(10);
|
||||
DECLARE vIsBooked BOOLEAN DEFAULT FALSE;
|
||||
|
||||
SELECT isBooked INTO vIsBooked
|
||||
FROM invoiceIn ii
|
||||
WHERE id = vInvoiceInFk;
|
||||
|
||||
IF vIsBooked THEN
|
||||
CALL util.throw('A booked invoice cannot be modified');
|
||||
END IF;
|
||||
|
||||
SELECT MAX(rr.dated) INTO vDated
|
||||
FROM referenceRate rr
|
||||
JOIN invoiceIn ii ON ii.id = vId
|
||||
JOIN invoiceIn ii ON ii.id = vInvoiceInFk
|
||||
WHERE rr.dated <= ii.issued
|
||||
AND rr.currencyFk = ii.currencyFk ;
|
||||
|
||||
|
@ -24,7 +33,7 @@ BEGIN
|
|||
LIMIT 1;
|
||||
|
||||
DELETE FROM invoiceInTax
|
||||
WHERE invoiceInFk = vId;
|
||||
WHERE invoiceInFk = vInvoiceInFk;
|
||||
|
||||
INSERT INTO invoiceInTax(invoiceInFk, taxableBase, expenseFk, foreignValue, taxTypeSageFk, transactionTypeSageFk)
|
||||
SELECT ii.id,
|
||||
|
@ -39,7 +48,7 @@ BEGIN
|
|||
JOIN buy b ON b.entryFk = e.id
|
||||
LEFT JOIN referenceRate rr ON rr.currencyFk = ii.currencyFk
|
||||
AND rr.dated = ii.issued
|
||||
WHERE ii.id = vId
|
||||
WHERE ii.id = vInvoiceInFk
|
||||
HAVING taxableBase IS NOT NULL;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -20,20 +20,23 @@ BEGIN
|
|||
DECLARE vCompanyFk INT;
|
||||
DECLARE vAgencyModeFk INT;
|
||||
DECLARE vItemShelvingFk INT;
|
||||
DECLARE vAddressFk INT;
|
||||
|
||||
SELECT c.id,
|
||||
pc.clientSelfConsumptionFk,
|
||||
s.warehouseFk
|
||||
s.warehouseFk,
|
||||
pc.addressSelfConsumptionFk
|
||||
INTO vCompanyFk,
|
||||
vClientFk,
|
||||
vWarehouseFk
|
||||
vWarehouseFk,
|
||||
vAddressFk
|
||||
FROM company c
|
||||
JOIN address a ON a.clientFk = c.clientFk
|
||||
JOIN warehouse w ON w.addressFk = a.id
|
||||
JOIN sector s ON s.warehouseFk = w.id
|
||||
JOIN parking p ON p.sectorFk = s.id
|
||||
JOIN shelving s2 ON s2.parkingFk = p.id
|
||||
JOIN productionConfig pc ON TRUE
|
||||
JOIN productionConfig pc
|
||||
WHERE s2.code = vShelvingFk;
|
||||
|
||||
IF vClientFk IS NULL THEN
|
||||
|
@ -65,7 +68,7 @@ BEGIN
|
|||
vClientFk,
|
||||
vWarehouseFk,
|
||||
CURDATE(),
|
||||
NULL,
|
||||
vAddressFk,
|
||||
vCompanyFk,
|
||||
NULL,
|
||||
vTicketFk
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`test`()
|
||||
BEGIN
|
||||
select 'procedimiento ejecutado con éxito';
|
||||
END$$
|
||||
DELIMITER ;
|
|
@ -1,24 +1,33 @@
|
|||
DELIMITER $$
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_getMovable`(vTicketFk INT, vDatedNew DATETIME, vWarehouseFk INT)
|
||||
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_getMovable`(
|
||||
vTicketFk INT,
|
||||
vNewShipped DATETIME,
|
||||
vWarehouseFk INT
|
||||
)
|
||||
BEGIN
|
||||
/**
|
||||
* Cálcula el stock movible para los artículos de un ticket
|
||||
* vDatedNew debe ser menor que vDatedOld, en los otros casos se
|
||||
* vNewShipped debe ser menor que vOldShipped, en los otros casos se
|
||||
* asume que siempre es posible
|
||||
*
|
||||
* @param vTicketFk -> Ticket
|
||||
* @param vDatedNew -> Nueva fecha
|
||||
* @param vNewShipped -> Nueva fecha
|
||||
* @return Sales con Movible
|
||||
*/
|
||||
DECLARE vDatedOld DATETIME;
|
||||
SET vDatedNew = DATE_ADD(vDatedNew, INTERVAL 1 DAY);
|
||||
DECLARE vOldShipped DATETIME;
|
||||
|
||||
SELECT t.shipped INTO vDatedOld
|
||||
SELECT t.shipped INTO vOldShipped
|
||||
FROM ticket t
|
||||
WHERE t.id = vTicketFk;
|
||||
|
||||
CALL item_getStock(vWarehouseFk, vDatedNew, NULL);
|
||||
CALL item_getMinacum(vWarehouseFk, vDatedNew, DATEDIFF(DATE_SUB(vDatedOld, INTERVAL 1 DAY), vDatedNew), NULL);
|
||||
-- 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_getMinacum(
|
||||
vWarehouseFk,
|
||||
vNewShipped,
|
||||
DATEDIFF(DATE_SUB(vOldShipped, INTERVAL 1 DAY), vNewShipped),
|
||||
NULL
|
||||
);
|
||||
|
||||
SELECT s.id,
|
||||
s.itemFk,
|
||||
|
@ -33,12 +42,14 @@ BEGIN
|
|||
FROM ticket t
|
||||
JOIN sale s ON s.ticketFk = t.id
|
||||
JOIN item i ON i.id = s.itemFk
|
||||
LEFT JOIN tmp.itemMinacum im ON im.itemFk = s.itemFk AND im.warehouseFk = vWarehouseFk
|
||||
LEFT JOIN tmp.itemMinacum im ON im.itemFk = s.itemFk
|
||||
AND im.warehouseFk = vWarehouseFk
|
||||
LEFT JOIN tmp.itemList il ON il.itemFk = s.itemFk
|
||||
WHERE t.id = vTicketFk;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.itemList;
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.itemMinacum;
|
||||
DROP TEMPORARY TABLE IF EXISTS
|
||||
tmp.itemList,
|
||||
tmp.itemMinacum;
|
||||
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -11,11 +11,10 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`travel_cloneWithEnt
|
|||
BEGIN
|
||||
/**
|
||||
* Clona un travel junto con sus entradas y compras
|
||||
*
|
||||
* @param vTravelFk travel plantilla a clonar
|
||||
* @param vDateStart fecha del shipment del nuevo travel
|
||||
* @param vDateEnd fecha del landing del nuevo travel
|
||||
* @param vWarehouseOutFk fecha del salida del nuevo travel
|
||||
* @param vWarehouseOutFk warehouse del salida del nuevo travel
|
||||
* @param vWarehouseInFk warehouse de landing del nuevo travel
|
||||
* @param vRef referencia del nuevo travel
|
||||
* @param vAgencyModeFk del nuevo travel
|
||||
|
@ -25,6 +24,7 @@ BEGIN
|
|||
DECLARE vEvaNotes VARCHAR(255);
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vAuxEntryFk INT;
|
||||
DECLARE vTx BOOLEAN DEFAULT @@in_transaction;
|
||||
DECLARE vRsEntry CURSOR FOR
|
||||
SELECT e.id
|
||||
FROM entry e
|
||||
|
@ -35,11 +35,11 @@ BEGIN
|
|||
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
CALL util.tx_rollback(vTx);
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
START TRANSACTION;
|
||||
CALL util.tx_start(vTx);
|
||||
|
||||
INSERT INTO travel (shipped, landed, warehouseInFk, warehouseOutFk, agencyModeFk, `ref`, isDelivered, isReceived, m3, cargoSupplierFk, kg,clonedFrom)
|
||||
SELECT vDateStart, vDateEnd, vWarehouseInFk, vWarehouseOutFk, vAgencyModeFk, vRef, isDelivered, isReceived, m3,cargoSupplierFk, kg,vTravelFk
|
||||
|
@ -76,6 +76,6 @@ BEGIN
|
|||
SET @isModeInventory = FALSE;
|
||||
CLOSE vRsEntry;
|
||||
|
||||
COMMIT;
|
||||
CALL util.tx_commit(vTx);
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
|
|
@ -28,4 +28,4 @@ FROM (
|
|||
JOIN `vn`.`volumeConfig` `vc`
|
||||
)
|
||||
WHERE `t`.`shipped` > makedate(year(`util`.`VN_CURDATE`()) - 1, 1)
|
||||
AND t.awbFk
|
||||
AND `t`.`awbFk` <> 0
|
||||
|
|
|
@ -9,7 +9,7 @@ AS SELECT `et2`.`description` AS `truck`,
|
|||
`et`.`id` <=> `rm`.`expeditionTruckFk` AS `isMatch`,
|
||||
`t`.`warehouseFk` AS `warehouseFk`,
|
||||
IF(
|
||||
`r`.`created` > util.VN_CURDATE() + INTERVAL 1 DAY,
|
||||
`r`.`created` > `util`.`VN_CURDATE`() + INTERVAL 1 DAY,
|
||||
ucase(dayname(`r`.`created`)),
|
||||
NULL
|
||||
) AS `nombreDia`
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn`.`itemShelvingAvailable`
|
||||
AS SELECT `s`.`id` `saleFk`,
|
||||
AS SELECT `s`.`id` AS `saleFk`,
|
||||
`tst`.`updated` AS `Modificado`,
|
||||
`s`.`ticketFk` AS `ticketFk`,
|
||||
0 AS `isPicked`,
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn`.`ticketStateToday`
|
||||
AS SELECT
|
||||
`ts`.`ticketFk` AS `ticketFk`,
|
||||
AS SELECT `ts`.`ticketFk` AS `ticketFk`,
|
||||
`ts`.`state` AS `state`,
|
||||
`ts`.`productionOrder` AS `productionOrder`,
|
||||
`ts`.`alertLevel` AS `alertLevel`,
|
||||
|
@ -10,6 +9,8 @@ AS SELECT
|
|||
`ts`.`code` AS `code`,
|
||||
`ts`.`updated` AS `updated`,
|
||||
`ts`.`isPicked` AS `isPicked`
|
||||
FROM `ticketState` `ts`
|
||||
JOIN `ticket` `t` ON `t`.`id` = `ts`.`ticketFk`
|
||||
WHERE `t`.`shipped` BETWEEN `util`.`VN_CURDATE`() AND `MIDNIGHT`(`util`.`VN_CURDATE`());
|
||||
FROM (
|
||||
`vn`.`ticketState` `ts`
|
||||
JOIN `vn`.`ticket` `t` ON(`t`.`id` = `ts`.`ticketFk`)
|
||||
)
|
||||
WHERE `t`.`shipped` BETWEEN `util`.`VN_CURDATE`() AND `MIDNIGHT`(`util`.`VN_CURDATE`())
|
||||
|
|
|
@ -1,24 +1,48 @@
|
|||
CREATE OR REPLACE DEFINER=`root`@`localhost`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn`.`zoneEstimatedDelivery`
|
||||
AS SELECT t.zoneFk,
|
||||
zc.`hour` zoneClosureHour,
|
||||
z.`hour` zoneHour,
|
||||
sv.volume volume,
|
||||
al.hasToRecalcPrice,
|
||||
lhp.m3,
|
||||
dl.minSpeed
|
||||
FROM ticket t
|
||||
JOIN ticketStateToday tst ON tst.ticketFk = t.id
|
||||
JOIN state s ON s.id = tst.state
|
||||
JOIN saleVolume sv ON sv.ticketFk = t.id
|
||||
LEFT JOIN lastHourProduction lhp ON lhp.warehouseFk = t.warehouseFk
|
||||
JOIN warehouse w ON w.id = t.warehouseFk
|
||||
STRAIGHT_JOIN `zone` z ON z.id = t.zoneFk
|
||||
LEFT JOIN zoneClosure zc ON zc.zoneFk = t.zoneFk
|
||||
AND zc.dated = util.VN_CURDATE()
|
||||
LEFT JOIN cache.departure_limit dl ON dl.warehouse_id = t.warehouseFk
|
||||
AND dl.fecha = util.VN_CURDATE()
|
||||
JOIN alertLevel al ON al.id = s.alertLevel
|
||||
WHERE w.hasProduction
|
||||
AND DATE(t.shipped) = util.VN_CURDATE()
|
||||
AS SELECT `t`.`zoneFk` AS `zoneFk`,
|
||||
`zc`.`hour` AS `zoneClosureHour`,
|
||||
`z`.`hour` AS `zoneHour`,
|
||||
`sv`.`volume` AS `volume`,
|
||||
`al`.`hasToRecalcPrice` AS `hasToRecalcPrice`,
|
||||
`lhp`.`m3` AS `m3`,
|
||||
`dl`.`minSpeed` AS `minSpeed`
|
||||
FROM (
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
(
|
||||
`vn`.`ticket` `t`
|
||||
JOIN `vn`.`ticketStateToday` `tst` ON(`tst`.`ticketFk` = `t`.`id`)
|
||||
)
|
||||
JOIN `vn`.`state` `s` ON(`s`.`id` = `tst`.`state`)
|
||||
)
|
||||
JOIN `vn`.`saleVolume` `sv` ON(`sv`.`ticketFk` = `t`.`id`)
|
||||
)
|
||||
LEFT JOIN `vn`.`lastHourProduction` `lhp` ON(`lhp`.`warehouseFk` = `t`.`warehouseFk`)
|
||||
)
|
||||
JOIN `vn`.`warehouse` `w` ON(`w`.`id` = `t`.`warehouseFk`)
|
||||
)
|
||||
JOIN `vn`.`warehouseAlias` `wa` ON(`wa`.`id` = `w`.`aliasFk`)
|
||||
) STRAIGHT_JOIN `vn`.`zone` `z` ON(`z`.`id` = `t`.`zoneFk`)
|
||||
)
|
||||
LEFT JOIN `vn`.`zoneClosure` `zc` ON(
|
||||
`zc`.`zoneFk` = `t`.`zoneFk`
|
||||
AND `zc`.`dated` = `util`.`VN_CURDATE`()
|
||||
)
|
||||
)
|
||||
LEFT JOIN `cache`.`departure_limit` `dl` ON(
|
||||
`dl`.`warehouse_id` = `t`.`warehouseFk`
|
||||
AND `dl`.`fecha` = `util`.`VN_CURDATE`()
|
||||
)
|
||||
)
|
||||
JOIN `vn`.`alertLevel` `al` ON(`al`.`id` = `s`.`alertLevel`)
|
||||
)
|
||||
WHERE `w`.`hasProduction` <> 0
|
||||
AND cast(`t`.`shipped` AS date) = `util`.`VN_CURDATE`()
|
||||
|
|
|
@ -27,7 +27,7 @@ BEGIN
|
|||
DECLARE vEvaNotes VARCHAR(255);
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vAuxEntryFk INT;
|
||||
DECLARE vTx BOOLEAN DEFAULT !@@in_transaction;
|
||||
DECLARE vTx BOOLEAN DEFAULT @@in_transaction;
|
||||
DECLARE vRsEntry CURSOR FOR
|
||||
SELECT e.id
|
||||
FROM entry e
|
||||
|
|
|
@ -256,7 +256,7 @@ async function dockerStart() {
|
|||
await myt.run(Start);
|
||||
await myt.deinit();
|
||||
}
|
||||
dockerStart.description = `Starts the salix-db container`;
|
||||
dockerStart.description = `Starts the DB container`;
|
||||
|
||||
async function docker() {
|
||||
const myt = new Myt();
|
||||
|
@ -264,7 +264,7 @@ async function docker() {
|
|||
await myt.run(Run);
|
||||
await myt.deinit();
|
||||
}
|
||||
docker.description = `Runs the salix-db container`;
|
||||
docker.description = `Builds and starts the DB container`;
|
||||
|
||||
module.exports = {
|
||||
default: defaultTask,
|
||||
|
|
|
@ -207,5 +207,7 @@
|
|||
"The notification subscription of this worker cant be modified": "The notification subscription of this worker cant be modified",
|
||||
"Name should be uppercase": "Name should be uppercase",
|
||||
"You cannot update these fields": "You cannot update these fields",
|
||||
"CountryFK cannot be empty": "Country cannot be empty"
|
||||
"CountryFK cannot be empty": "Country cannot be empty",
|
||||
"You are not allowed to modify the alias": "You are not allowed to modify the alias",
|
||||
"You already have the mailAlias": "You already have the mailAlias"
|
||||
}
|
|
@ -139,7 +139,7 @@
|
|||
"Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*",
|
||||
"Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}",
|
||||
"ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto",
|
||||
"Distance must be lesser than 1000": "La distancia debe ser inferior a 1000",
|
||||
"Distance must be lesser than 4000": "La distancia debe ser inferior a 4000",
|
||||
"This ticket is deleted": "Este ticket está eliminado",
|
||||
"Unable to clone this travel": "No ha sido posible clonar este travel",
|
||||
"This thermograph id already exists": "La id del termógrafo ya existe",
|
||||
|
@ -336,12 +336,13 @@
|
|||
"Incorrect pin": "Pin incorrecto",
|
||||
"You already have the mailAlias": "Ya tienes este alias de correo",
|
||||
"The alias cant be modified": "Este alias de correo no puede ser modificado",
|
||||
"No tickets to invoice": "No hay tickets para facturar",
|
||||
"This ticket already has a cmr saved": "Este ticket ya tiene un cmr guardado",
|
||||
"Name should be uppercase": "El nombre debe ir en mayúscula",
|
||||
"Bank entity must be specified": "La entidad bancaria es obligatoria",
|
||||
"An email is necessary": "Es necesario un email",
|
||||
"You cannot update these fields": "No puedes actualizar estos campos",
|
||||
"CountryFK cannot be empty": "El país no puede estar vacío",
|
||||
"Cmr file does not exist": "El archivo del cmr no existe"
|
||||
"Cmr file does not exist": "El archivo del cmr no existe",
|
||||
"You are not allowed to modify the alias": "No estás autorizado a modificar el alias",
|
||||
"No tickets to invoice": "No hay tickets para facturar"
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
const UserError = require('vn-loopback/util/user-error');
|
||||
const ForbiddenError = require('vn-loopback/util/forbiddenError');
|
||||
|
||||
module.exports = Self => {
|
||||
Self.rewriteDbError(function(err) {
|
||||
|
@ -8,38 +8,38 @@ module.exports = Self => {
|
|||
return err;
|
||||
});
|
||||
|
||||
Self.observe('before save', async ctx => {
|
||||
const changes = ctx.currentInstance || ctx.instance;
|
||||
|
||||
await checkModifyPermission(ctx, changes.mailAlias);
|
||||
Self.beforeRemote('create', async function(ctx) {
|
||||
const mailAlias = ctx.args.data?.mailAlias;
|
||||
if (!mailAlias) return;
|
||||
await checkModifyPermission(ctx, mailAlias);
|
||||
});
|
||||
|
||||
Self.observe('before delete', async ctx => {
|
||||
const mailAliasAccount = await Self.findById(ctx.where.id);
|
||||
|
||||
await checkModifyPermission(ctx, mailAliasAccount.mailAlias);
|
||||
Self.beforeRemote('deleteById', async function(ctx) {
|
||||
const instance = await Self.findById(ctx.args.id,
|
||||
{fields: ['mailAlias']}
|
||||
);
|
||||
await checkModifyPermission(ctx, instance.mailAlias);
|
||||
});
|
||||
|
||||
async function checkModifyPermission(ctx, mailAliasFk) {
|
||||
const userId = ctx.options.accessToken.userId;
|
||||
const models = Self.app.models;
|
||||
const userId = ctx.req.accessToken.userId;
|
||||
|
||||
const roles = await models.RoleMapping.find({
|
||||
fields: ['roleId'],
|
||||
where: {principalId: userId}
|
||||
const canEditAlias = await models.ACL.checkAccessAcl(ctx,
|
||||
'MailAliasAccount', 'canEditAlias', 'WRITE');
|
||||
if (canEditAlias) return;
|
||||
|
||||
const allowedRoles = await models.MailAliasAcl.find({
|
||||
fields: ['roleFk'],
|
||||
where: {mailAliasFk}
|
||||
});
|
||||
const nRoles = allowedRoles.length &&
|
||||
await models.RoleMapping.count({
|
||||
principalId: userId,
|
||||
principalType: 'USER',
|
||||
roleId: {inq: allowedRoles.map(x => x.roleFk)}
|
||||
});
|
||||
|
||||
const availableMailAlias = await models.MailAliasAcl.findOne({
|
||||
fields: ['mailAliasFk'],
|
||||
include: {relation: 'mailAlias'},
|
||||
where: {
|
||||
roleFk: {
|
||||
inq: roles.map(role => role.roleId),
|
||||
},
|
||||
mailAliasFk
|
||||
}
|
||||
});
|
||||
|
||||
if (!availableMailAlias) throw new UserError('The alias cant be modified');
|
||||
if (!nRoles)
|
||||
throw new ForbiddenError('You are not allowed to modify the alias');
|
||||
}
|
||||
};
|
||||
|
|
|
@ -71,7 +71,7 @@ class Controller extends Descriptor {
|
|||
const params = {newPassword: this.newPassword};
|
||||
|
||||
if (this.askOldPass) {
|
||||
method = 'changePassword';
|
||||
method = 'change-password';
|
||||
params.oldPassword = this.oldPassword;
|
||||
} else
|
||||
method = 'setPassword';
|
||||
|
|
|
@ -22,16 +22,16 @@ module.exports = Self => {
|
|||
require('../methods/route/getByWorker')(Self);
|
||||
|
||||
Self.validate('kmStart', validateDistance, {
|
||||
message: 'Distance must be lesser than 1000'
|
||||
message: 'Distance must be lesser than 4000'
|
||||
});
|
||||
|
||||
Self.validate('kmEnd', validateDistance, {
|
||||
message: 'Distance must be lesser than 1000'
|
||||
message: 'Distance must be lesser than 4000'
|
||||
});
|
||||
|
||||
function validateDistance(err) {
|
||||
const routeTotalKm = this.kmEnd - this.kmStart;
|
||||
const routeMaxKm = 1000;
|
||||
const routeMaxKm = 4000;
|
||||
if (routeTotalKm > routeMaxKm || this.kmStart > this.kmEnd)
|
||||
err();
|
||||
}
|
||||
|
|
|
@ -27,7 +27,10 @@ describe('Travel cloneWithEntries()', () => {
|
|||
expect(newTravel.warehouseOutFk).toEqual(warehouseThree);
|
||||
expect(newTravel.agencyModeFk).toEqual(agencyModeOne);
|
||||
expect(travelEntries.length).toBeGreaterThan(0);
|
||||
|
||||
await models.Entry.destroyAll({
|
||||
travelFk: newTravelId
|
||||
}, options);
|
||||
await models.Travel.destroyById(newTravelId, options);
|
||||
await tx.rollback();
|
||||
const travelRemoved = await models.Travel.findById(newTravelId, options);
|
||||
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
"mysql": "2.18.1",
|
||||
"node-ssh": "^11.0.0",
|
||||
"object.pick": "^1.3.0",
|
||||
"puppeteer": "^21.10.0",
|
||||
"puppeteer": "^21.11.0",
|
||||
"read-chunk": "^3.2.0",
|
||||
"require-yaml": "0.0.1",
|
||||
"smbhash": "0.0.1",
|
||||
"strong-error-handler": "^2.3.2",
|
||||
|
|
|
@ -6,7 +6,7 @@ module.exports = {
|
|||
init() {
|
||||
if (this.pool) return;
|
||||
Cluster.launch({
|
||||
concurrency: Cluster.CONCURRENCY_CONTEXT,
|
||||
concurrency: Cluster.CONCURRENCY_PAGE,
|
||||
maxConcurrency: cpus().length,
|
||||
puppeteerOptions: {
|
||||
headless: 'new',
|
||||
|
|
|
@ -46,6 +46,9 @@ section.text-area {
|
|||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
background-color: #e5e5e5;
|
||||
& > p {
|
||||
word-break: break-all;
|
||||
}
|
||||
}
|
||||
|
||||
.route-block {
|
||||
|
|
|
@ -5,7 +5,6 @@ module.exports = {
|
|||
mixins: [vnReport],
|
||||
async serverPrefetch() {
|
||||
let ids = this.id;
|
||||
|
||||
const hasMultipleRoutes = String(this.id).includes(',');
|
||||
if (hasMultipleRoutes)
|
||||
ids = this.id.split(',');
|
||||
|
@ -30,7 +29,7 @@ module.exports = {
|
|||
},
|
||||
props: {
|
||||
id: {
|
||||
type: Number,
|
||||
type: String,
|
||||
required: true,
|
||||
description: 'The route id'
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue