Merge pull request '2238-ticket_summary_invoiceOut' (#255) from 2238-ticket_summary_invoiceOut into dev
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
Reviewed-by: Joan Sanchez <joan@verdnatura.es>
This commit is contained in:
commit
af0d0f1fbe
|
@ -1,3 +0,0 @@
|
|||
ALTER TABLE `vn`.`ticket`
|
||||
ADD COLUMN `zonePrice` DECIMAL(10,2) NULL DEFAULT NULL AFTER `collectionFk`,
|
||||
ADD COLUMN `zoneBonus` DECIMAL(10,2) NULL DEFAULT NULL AFTER `zonePrice`;
|
|
@ -1,96 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `ticketCreateWithUser`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `ticketCreateWithUser`(
|
||||
vClientId INT
|
||||
,vShipped DATE
|
||||
,vWarehouseFk INT
|
||||
,vCompanyFk INT
|
||||
,vAddressFk INT
|
||||
,vAgencyModeFk INT
|
||||
,vRouteFk INT
|
||||
,vlanded DATE
|
||||
,vUserId INT
|
||||
,OUT vNewTicket INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE vZoneFk INT;
|
||||
DECLARE vPrice DECIMAL(10,2);
|
||||
DECLARE vBonus DECIMAL(10,2);
|
||||
|
||||
IF vClientId IS NULL THEN
|
||||
CALL util.throw ('CLIENT_NOT_ESPECIFIED');
|
||||
END IF;
|
||||
|
||||
IF NOT vAddressFk OR vAddressFk IS NULL THEN
|
||||
SELECT id INTO vAddressFk
|
||||
FROM address
|
||||
WHERE clientFk = vClientId AND isDefaultAddress;
|
||||
END IF;
|
||||
|
||||
IF vAgencyModeFk IS NOT NULL THEN
|
||||
|
||||
CALL vn.zone_getShippedWarehouse(vlanded, vAddressFk, vAgencyModeFk);
|
||||
|
||||
SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus
|
||||
FROM tmp.zoneGetShipped
|
||||
WHERE shipped = vShipped AND warehouseFk = vWarehouseFk LIMIT 1;
|
||||
|
||||
IF vZoneFk IS NULL OR vZoneFk = 0 THEN
|
||||
CALL util.throw ('NOT_ZONE_WITH_THIS_PARAMETERS');
|
||||
END IF;
|
||||
END IF;
|
||||
INSERT INTO ticket (
|
||||
clientFk,
|
||||
shipped,
|
||||
addressFk,
|
||||
agencyModeFk,
|
||||
nickname,
|
||||
warehouseFk,
|
||||
routeFk,
|
||||
companyFk,
|
||||
landed,
|
||||
zoneFk,
|
||||
zonePrice,
|
||||
zoneBonus
|
||||
)
|
||||
SELECT
|
||||
vClientId,
|
||||
vShipped,
|
||||
a.id,
|
||||
vAgencyModeFk,
|
||||
a.nickname,
|
||||
vWarehouseFk,
|
||||
IF(vRouteFk,vRouteFk,NULL),
|
||||
vCompanyFk,
|
||||
vlanded,
|
||||
vZoneFk,
|
||||
vPrice,
|
||||
vBonus
|
||||
FROM address a
|
||||
JOIN agencyMode am ON am.id = a.agencyModeFk
|
||||
WHERE a.id = vAddressFk;
|
||||
|
||||
SET vNewTicket = LAST_INSERT_ID();
|
||||
|
||||
INSERT INTO ticketObservation(ticketFk, observationTypeFk, description)
|
||||
SELECT vNewTicket, ao.observationTypeFk, ao.description
|
||||
FROM addressObservation ao
|
||||
JOIN address a ON a.id = ao.addressFk
|
||||
WHERE a.id = vAddressFk;
|
||||
|
||||
INSERT INTO vn.ticketLog
|
||||
SET originFk = vNewTicket, userFk = vUserId, `action` = 'insert', description = CONCAT('Ha creado el ticket:', ' ', vNewTicket);
|
||||
|
||||
IF (SELECT ct.isCreatedAsServed FROM vn.clientType ct JOIN vn.client c ON c.typeFk = ct.code WHERE c.id = vClientId ) <> FALSE THEN
|
||||
INSERT INTO vncontrol.inter(state_id, Id_Ticket, Id_Trabajador)
|
||||
SELECT id, vNewTicket, getWorker()
|
||||
FROM state
|
||||
WHERE `code` = 'DELIVERED';
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `ticket_componentUpdate`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `ticket_componentUpdate`(
|
||||
vTicketFk INT,
|
||||
vClientFk INT,
|
||||
vAgencyModeFk INT,
|
||||
vAddressFk INT,
|
||||
vZoneFk INT,
|
||||
vWarehouseFk TINYINT,
|
||||
vCompanyFk SMALLINT,
|
||||
vShipped DATETIME,
|
||||
vLanded DATE,
|
||||
vIsDeleted BOOLEAN,
|
||||
vHasToBeUnrouted BOOLEAN,
|
||||
vOption INT)
|
||||
BEGIN
|
||||
DECLARE vPrice DECIMAL(10,2);
|
||||
DECLARE vBonus DECIMAL(10,2);
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
IF (SELECT addressFk FROM ticket WHERE id = vTicketFk) <> vAddressFk THEN
|
||||
|
||||
UPDATE ticket t
|
||||
JOIN address a ON a.id = vAddressFk
|
||||
SET t.nickname = a.nickname
|
||||
WHERE t.id = vTicketFk;
|
||||
|
||||
END IF;
|
||||
|
||||
CALL vn.zone_getShippedWarehouse(vlanded, vAddressFk, vAgencyModeFk);
|
||||
|
||||
SELECT zoneFk, price, bonus INTO vZoneFk, vPrice, vBonus
|
||||
FROM tmp.zoneGetShipped
|
||||
WHERE shipped = vShipped AND warehouseFk = vWarehouseFk LIMIT 1;
|
||||
|
||||
UPDATE ticket t
|
||||
SET
|
||||
t.clientFk = vClientFk,
|
||||
t.agencyModeFk = vAgencyModeFk,
|
||||
t.addressFk = vAddressFk,
|
||||
t.zoneFk = vZoneFk,
|
||||
t.zonePrice = vPrice,
|
||||
t.zoneBonus = vBonus,
|
||||
t.warehouseFk = vWarehouseFk,
|
||||
t.companyFk = vCompanyFk,
|
||||
t.landed = vLanded,
|
||||
t.shipped = vShipped,
|
||||
t.isDeleted = vIsDeleted
|
||||
WHERE
|
||||
t.id = vTicketFk;
|
||||
|
||||
IF vHasToBeUnrouted THEN
|
||||
UPDATE ticket t SET t.routeFk = NULL
|
||||
WHERE t.id = vTicketFk;
|
||||
END IF;
|
||||
|
||||
IF vOption <> 8 THEN
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.sale;
|
||||
CREATE TEMPORARY TABLE tmp.sale
|
||||
(PRIMARY KEY (saleFk))
|
||||
ENGINE = MEMORY
|
||||
SELECT id AS saleFk, vWarehouseFk warehouseFk
|
||||
FROM sale s WHERE s.ticketFk = vTicketFk;
|
||||
|
||||
CALL ticketComponentUpdateSale (vOption);
|
||||
|
||||
DROP TEMPORARY TABLE tmp.sale;
|
||||
END IF;
|
||||
COMMIT;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zoneClosure_recalc`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zoneClosure_recalc`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Recalculates the delivery time (hour) for every zone in days + scope in future
|
||||
*/
|
||||
DECLARE vScope INT;
|
||||
DECLARE vCounter INT DEFAULT 0;
|
||||
DECLARE vShipped DATE DEFAULT CURDATE();
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
DO RELEASE_LOCK('vn.zoneClosure_recalc');
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF NOT GET_LOCK('vn.zoneClosure_recalc', 0) THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
SELECT scope INTO vScope
|
||||
FROM zoneConfig;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zone;
|
||||
CREATE TEMPORARY TABLE tmp.zone
|
||||
(INDEX (id))
|
||||
ENGINE = MEMORY
|
||||
SELECT id FROM zone;
|
||||
|
||||
TRUNCATE TABLE zoneClosure;
|
||||
|
||||
WHILE vCounter <= vScope DO
|
||||
CALL zone_getOptionsForShipment(vShipped, TRUE);
|
||||
INSERT INTO zoneClosure(zoneFk, dated, `hour`)
|
||||
SELECT zoneFk, vShipped, `hour` FROM tmp.zoneOption;
|
||||
|
||||
SET vCounter = vCounter + 1;
|
||||
SET vShipped = TIMESTAMPADD(DAY, 1, vShipped);
|
||||
END WHILE;
|
||||
|
||||
DROP TEMPORARY TABLE tmp.zone;
|
||||
DO RELEASE_LOCK('vn.zoneClosure_recalc');
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,62 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_doCalcInitialize`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_doCalcInitialize`()
|
||||
proc: BEGIN
|
||||
/**
|
||||
* Initialize ticket
|
||||
* si en 01-07-20 aun esta este proc, kkear
|
||||
*/
|
||||
DECLARE vDone BOOL;
|
||||
DECLARE vTicketFk INT;
|
||||
DECLARE vLanded DATE;
|
||||
DECLARE vZoneFk INT;
|
||||
|
||||
DECLARE cCur CURSOR FOR
|
||||
SELECT t.id, t.landed, t.zoneFk
|
||||
FROM ticket t
|
||||
WHERE (zonePrice IS NULL OR zoneBonus IS NULL)
|
||||
AND landed >= '2019-01-01' AND shipped >= '2019-01-01'
|
||||
GROUP BY landed, zoneFk;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||
SET vDone = TRUE;
|
||||
|
||||
OPEN cCur;
|
||||
|
||||
myLoop: LOOP
|
||||
SET vDone = FALSE;
|
||||
FETCH cCur INTO vTicketFk, vLanded, vZoneFk;
|
||||
|
||||
IF vDone THEN
|
||||
LEAVE myLoop;
|
||||
END IF;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zone;
|
||||
CREATE TEMPORARY TABLE tmp.zone
|
||||
(INDEX (id))
|
||||
ENGINE = MEMORY
|
||||
SELECT vZoneFk id;
|
||||
|
||||
CALL zone_getOptionsForLanding(vLanded, TRUE);
|
||||
|
||||
UPDATE ticket t
|
||||
LEFT JOIN tmp.zoneOption zo ON TRUE
|
||||
SET zonePrice = zo.price, zoneBonus = zo.bonus
|
||||
WHERE t.zoneFk = vZoneFk AND landed = vLanded;
|
||||
|
||||
UPDATE ticket t
|
||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||
SET zonePrice = z.price, zoneBonus = z.bonus
|
||||
WHERE t.zonePrice IS NULL AND z.id = vZoneFk
|
||||
AND landed >= '2019-01-01' AND shipped >= '2019-01-01';
|
||||
|
||||
END LOOP;
|
||||
|
||||
CLOSE cCur;
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,30 +0,0 @@
|
|||
USE `util`;
|
||||
DROP procedure IF EXISTS `procNoOverlap`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `util`$$
|
||||
CREATE PROCEDURE `procNoOverlap` (procName VARCHAR(255))
|
||||
SQL SECURITY INVOKER
|
||||
proc: BEGIN
|
||||
/**
|
||||
* call procedure without overlap
|
||||
*/
|
||||
DECLARE vIsChanged BOOL;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
DO RELEASE_LOCK(procName);
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
IF !GET_LOCK(procName, 0) THEN
|
||||
LEAVE proc;
|
||||
END IF;
|
||||
|
||||
CALL exec(CONCAT('CALL ', procName));
|
||||
|
||||
DO RELEASE_LOCK(procName);
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_getOptionsForLanding`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getOptionsForLanding`(vLanded DATE, vShowExpiredZones BOOLEAN)
|
||||
BEGIN
|
||||
/**
|
||||
* Gets computed options for the passed zones and delivery date.
|
||||
*
|
||||
* @table tmp.zones(id) The zones ids
|
||||
* @param vLanded The delivery date
|
||||
* @return tmp.zoneOption The computed options
|
||||
*/
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneOption;
|
||||
CREATE TEMPORARY TABLE tmp.zoneOption
|
||||
ENGINE = MEMORY
|
||||
SELECT
|
||||
zoneFk,
|
||||
`hour`,
|
||||
travelingDays,
|
||||
price,
|
||||
bonus,
|
||||
TIMESTAMPADD(DAY, -travelingDays, vLanded) shipped
|
||||
FROM (
|
||||
SELECT t.id zoneFk,
|
||||
TIME(IFNULL(e.`hour`, z.`hour`)) `hour`,
|
||||
IFNULL(e.travelingDays, z.travelingDays) travelingDays,
|
||||
IFNULL(e.price, z.price) price,
|
||||
IFNULL(e.bonus, z.bonus) bonus
|
||||
FROM tmp.zone t
|
||||
JOIN zone z ON z.id = t.id
|
||||
JOIN zoneEvent e ON e.zoneFk = t.id
|
||||
WHERE (
|
||||
e.`type` = 'day'
|
||||
AND e.dated = vLanded
|
||||
) OR (
|
||||
e.`type` != 'day'
|
||||
AND e.weekDays & (1 << WEEKDAY(vLanded))
|
||||
AND (e.`started` IS NULL OR vLanded >= e.`started`)
|
||||
AND (e.`ended` IS NULL OR vLanded <= e.`ended`)
|
||||
)
|
||||
ORDER BY
|
||||
zoneFk,
|
||||
CASE
|
||||
WHEN e.`type` = 'day'
|
||||
THEN 1
|
||||
WHEN e.`type` = 'range'
|
||||
THEN 2
|
||||
ELSE 3
|
||||
END
|
||||
) t
|
||||
GROUP BY zoneFk;
|
||||
|
||||
DELETE t FROM tmp.zoneOption t
|
||||
JOIN zoneExclusion e
|
||||
ON e.zoneFk = t.zoneFk AND e.`dated` = vLanded;
|
||||
|
||||
IF NOT vShowExpiredZones THEN
|
||||
DELETE FROM tmp.zoneOption
|
||||
WHERE shipped < CURDATE()
|
||||
OR (shipped = CURDATE() AND CURTIME() > `hour`);
|
||||
END IF;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,171 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `rutasAnalyze`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `rutasAnalyze`(vYear INT, vMonth INT)
|
||||
BEGIN
|
||||
|
||||
/* Analiza los costes de las rutas de reparto y lo almacena en la tabla Rutas_Master
|
||||
*
|
||||
* PAK 15/4/2019
|
||||
*/
|
||||
|
||||
DELETE FROM bi.rutasBoard
|
||||
WHERE year = vYear AND month = vMonth;
|
||||
|
||||
-- Rellenamos la tabla con los datos de las rutas VOLUMETRICAS, especialmente con los bultos "virtuales"
|
||||
INSERT INTO bi.rutasBoard(year,
|
||||
month,
|
||||
warehouse_id,
|
||||
Id_Ruta,
|
||||
Id_Agencia,
|
||||
km,
|
||||
Dia,
|
||||
Fecha,
|
||||
Bultos,
|
||||
Matricula,
|
||||
Tipo,
|
||||
Terceros)
|
||||
SELECT YEAR(r.created),
|
||||
MONTH(r.created),
|
||||
GREATEST(1,a.warehouseFk),
|
||||
r.id,
|
||||
r.agencyModeFk,
|
||||
r.kmEnd - r.kmStart,
|
||||
DAYNAME(r.created),
|
||||
r.created,
|
||||
SUM(sv.volume / ebv.m3),
|
||||
v.numberPlate,
|
||||
IF(ISNULL(`r`.`cost`), 'P', 'A'),
|
||||
r.cost
|
||||
FROM vn.route r
|
||||
JOIN vn.ticket t ON t.routeFk = r.id
|
||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||
LEFT JOIN vn.agencyMode am ON am.id = r.agencyModeFk
|
||||
LEFT JOIN vn.agency a ON a.id = am.agencyFk
|
||||
LEFT JOIN vn.vehicle v ON v.id = r.vehicleFk
|
||||
JOIN vn.saleVolume sv ON sv.ticketFk = t.id
|
||||
JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = 71
|
||||
WHERE YEAR(r.created) = vYear AND MONTH(r.created) = vMonth
|
||||
AND z.isVolumetric
|
||||
GROUP BY r.id;
|
||||
|
||||
-- Rellenamos la tabla con los datos de las rutas NO VOLUMETRICAS, especialmente con los bultos "virtuales"
|
||||
INSERT INTO bi.rutasBoard(year,
|
||||
month,
|
||||
warehouse_id,
|
||||
Id_Ruta,
|
||||
Id_Agencia,
|
||||
km,
|
||||
Dia,
|
||||
Fecha,
|
||||
Bultos,
|
||||
Matricula,
|
||||
Tipo,
|
||||
Terceros)
|
||||
SELECT YEAR(r.created),
|
||||
MONTH(r.created),
|
||||
GREATEST(1,a.warehouseFk),
|
||||
r.id,
|
||||
r.agencyModeFk,
|
||||
r.kmEnd - r.kmStart,
|
||||
DAYNAME(r.created),
|
||||
r.created,
|
||||
SUM(t.packages),
|
||||
v.numberPlate,
|
||||
IF(ISNULL(`r`.`cost`), 'P', 'A'),
|
||||
r.cost
|
||||
FROM vn.route r
|
||||
JOIN vn.ticket t ON t.routeFk = r.id
|
||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||
LEFT JOIN vn.agencyMode am ON am.id = r.agencyModeFk
|
||||
LEFT JOIN vn.agency a ON a.id = am.agencyFk
|
||||
LEFT JOIN vn.vehicle v ON v.id = r.vehicleFk
|
||||
WHERE YEAR(r.created) = vYear AND MONTH(r.created) = vMonth
|
||||
AND z.isVolumetric = FALSE
|
||||
GROUP BY r.id
|
||||
ON DUPLICATE KEY UPDATE Bultos = Bultos + VALUES(Bultos);
|
||||
|
||||
-- Coste REAL de cada bulto "virtual", de acuerdo con el valor apuntado a mano en la ruta
|
||||
UPDATE bi.rutasBoard r
|
||||
INNER JOIN vn2008.Rutas_Master rm ON rm.año = r.year AND rm.mes = r.month AND rm.warehouse_id = r.warehouse_id
|
||||
SET r.coste_bulto = IF(r.Tipo ='A', r.Terceros, r.km * rm.coste_km ) / r.Bultos
|
||||
WHERE r.Bultos > 0
|
||||
AND rm.año = vYear
|
||||
AND rm.mes = vMonth;
|
||||
|
||||
-- Coste PRACTICO de cada bulto, de acuerdo con los componentes de tipo AGENCIA en cada linea de venta
|
||||
UPDATE bi.rutasBoard r
|
||||
JOIN (
|
||||
SELECT t.routeFk, sum(s.quantity * sc.value) practicoTotal
|
||||
FROM vn.route r
|
||||
JOIN vn.time tm ON tm.dated = r.created
|
||||
JOIN vn.ticket t ON t.routeFk = r.id
|
||||
JOIN vn.sale s ON s.ticketFk = t.id
|
||||
JOIN vn.saleComponent sc ON sc.saleFk = s.id
|
||||
JOIN vn.`component` c ON c.id = sc.componentFk
|
||||
JOIN vn.componentType ct ON ct.id = c.typeFk
|
||||
WHERE ct.type = 'agencia'
|
||||
AND tm.year = vYear
|
||||
AND tm.month = vMonth
|
||||
GROUP BY r.id
|
||||
) sub ON sub.routeFk = r.Id_Ruta
|
||||
SET r.practico = sub.practicoTotal / r.Bultos;
|
||||
|
||||
-- Coste TEORICO de una caja "virtual" para cada ruta, teniendo en cuenta que hay carros, pallets, etc
|
||||
UPDATE bi.rutasBoard r
|
||||
JOIN (
|
||||
SELECT t.routeFk,
|
||||
SUM(t.zonePrice/ ebv.ratio)/ count(*) AS BultoTeoricoMedio
|
||||
FROM vn.ticket t
|
||||
JOIN vn.route r ON r.id = t.routeFk
|
||||
JOIN vn.time tm ON tm.dated = r.created
|
||||
JOIN vn.expedition e ON e.ticketFk = t.id
|
||||
JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.isBox
|
||||
JOIN vn.address ad ON ad.id = t.addressFk
|
||||
JOIN vn.client c ON c.id = ad.clientFk
|
||||
LEFT JOIN vn.zone z ON z.id = t.zoneFk
|
||||
WHERE tm.year = vYear
|
||||
AND tm.month = vMonth
|
||||
AND z.isVolumetric = FALSE
|
||||
GROUP BY t.routeFk) sub ON r.Id_Ruta = sub.routeFk
|
||||
SET r.teorico = sub.BultoTeoricoMedio;
|
||||
|
||||
-- Coste VOLUMETRICO TEORICO de una caja "virtual" para cada ruta
|
||||
UPDATE bi.rutasBoard r
|
||||
JOIN (
|
||||
SELECT t.routeFk,
|
||||
SUM(freight) AS BultoTeoricoMedio
|
||||
FROM vn.ticket t
|
||||
JOIN vn.route r ON r.id = t.routeFk
|
||||
JOIN vn.time tm ON tm.dated = r.created
|
||||
JOIN vn.saleVolume sf ON sf.ticketFk = t.id
|
||||
JOIN vn.client c ON c.id = t.clientFk
|
||||
JOIN vn.zone z ON z.id = t.zoneFk
|
||||
WHERE tm.year = vYear
|
||||
AND tm.month = vMonth
|
||||
AND z.isVolumetric != FALSE
|
||||
GROUP BY t.routeFk) sub ON r.Id_Ruta = sub.routeFk
|
||||
SET r.teorico = sub.BultoTeoricoMedio / r.Bultos;
|
||||
|
||||
-- La diferencia entre el teorico y el practico se deberia de cobrar en greuges, cada noche
|
||||
UPDATE bi.rutasBoard r
|
||||
JOIN (
|
||||
SELECT t.routeFk,
|
||||
Sum(g.amount) AS greuge
|
||||
FROM vn.ticket t
|
||||
JOIN vn.route r ON r.id = t.routeFk
|
||||
JOIN vn.time tm ON tm.dated = r.created
|
||||
JOIN vn.greuge g ON g.ticketFk = t.id
|
||||
JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk
|
||||
WHERE tm.year = vYear
|
||||
AND tm.month = vMonth
|
||||
AND gt.name = 'Diferencia portes'
|
||||
GROUP BY t.routeFk) sub ON r.Id_Ruta = sub.routeFk
|
||||
SET r.greuge = sub.greuge / r.Bultos;
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
USE `vn`;
|
||||
CREATE
|
||||
OR REPLACE ALGORITHM = UNDEFINED
|
||||
DEFINER = `root`@`%`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `saleVolume` AS
|
||||
SELECT
|
||||
`s`.`ticketFk` AS `ticketFk`,
|
||||
`s`.`id` AS `saleFk`,
|
||||
IFNULL(ROUND(((((`i`.`compression` * (GREATEST(`i`.`density`, 167) / 167)) * `ic`.`cm3`) * `s`.`quantity`) / 1000),
|
||||
2),
|
||||
0) AS `litros`,
|
||||
`t`.`routeFk` AS `routeFk`,
|
||||
`t`.`shipped` AS `shipped`,
|
||||
(((`s`.`quantity` * `ic`.`cm3`) * `i`.`compression`) / 1000000) AS `volume`,
|
||||
((((`s`.`quantity` * `ic`.`cm3`) * `i`.`compression`) * (GREATEST(`i`.`density`, 167) / 167)) / 1000000) AS `physicalWeight`,
|
||||
(((`s`.`quantity` * `ic`.`cm3`) * `i`.`density`) / 1000000) AS `weight`,
|
||||
(((`s`.`quantity` * `ic`.`cm3`) * `i`.`compression`) / 1000000) AS `physicalVolume`,
|
||||
((((`s`.`quantity` * `ic`.`cm3`) * `t`.`zonePrice`) * `i`.`compression`) / `cb`.`volume`) AS `freight`
|
||||
FROM
|
||||
((((`sale` `s`
|
||||
JOIN `item` `i` ON ((`i`.`id` = `s`.`itemFk`)))
|
||||
JOIN `ticket` `t` ON ((`t`.`id` = `s`.`ticketFk`)))
|
||||
JOIN `packaging` `cb` ON ((`cb`.`id` = '94')))
|
||||
JOIN `itemCost` `ic` ON (((`ic`.`itemFk` = `s`.`itemFk`)
|
||||
AND (`ic`.`warehouseFk` = `t`.`warehouseFk`))));
|
|
@ -1,24 +0,0 @@
|
|||
DROP VIEW IF EXISTS `vn`.`saleFreight` ;
|
||||
USE `vn`;
|
||||
CREATE
|
||||
OR REPLACE ALGORITHM = UNDEFINED
|
||||
DEFINER = `root`@`%`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `saleFreight__` AS
|
||||
SELECT
|
||||
`s`.`ticketFk` AS `ticketFk`,
|
||||
`t`.`clientFk` AS `clientFk`,
|
||||
`t`.`routeFk` AS `routeFk`,
|
||||
`s`.`id` AS `saleFk`,
|
||||
`t`.`zoneFk` AS `zoneFk`,
|
||||
`t`.`companyFk` AS `companyFk`,
|
||||
`t`.`shipped` AS `shipped`,
|
||||
`t`.`zonePrice` AS `price`,
|
||||
((((`s`.`quantity` * `r`.`cm3`) * `t`.`zonePrice`) * `i`.`compression`) / `cb`.`volume`) AS `freight`
|
||||
FROM
|
||||
((((`vn`.`sale` `s`
|
||||
JOIN `vn`.`item` `i` ON ((`i`.`id` = `s`.`itemFk`)))
|
||||
JOIN `vn`.`ticket` `t` ON ((`t`.`id` = `s`.`ticketFk`)))
|
||||
JOIN `vn`.`packaging` `cb` ON ((`cb`.`id` = '94')))
|
||||
JOIN `bi`.`rotacion` `r` ON (((`r`.`Id_Article` = `s`.`itemFk`)
|
||||
AND (`r`.`warehouse_id` = `t`.`warehouseFk`))));
|
|
@ -1,43 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_getShippedWarehouse`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getShippedWarehouse`(vLanded DATE, vAddressFk INT, vAgencyModeFk INT)
|
||||
BEGIN
|
||||
/**
|
||||
* Devuelve la mÃÂnima fecha de envío para cada warehouse
|
||||
*
|
||||
* @param vLanded La fecha de recepcion
|
||||
* @param vAddressFk Id del consignatario
|
||||
* @param vAgencyModeFk Id de la agencia
|
||||
* @return tmp.zoneGetShipped
|
||||
*/
|
||||
|
||||
CALL zone_getFromGeo(address_getGeo(vAddressFk));
|
||||
CALL zone_getOptionsForLanding(vLanded,TRUE);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetShipped;
|
||||
CREATE TEMPORARY TABLE tmp.zoneGetShipped
|
||||
ENGINE = MEMORY
|
||||
SELECT * FROM (
|
||||
SELECT zo.zoneFk,
|
||||
TIMESTAMPADD(DAY,-zo.travelingDays, vLanded) shipped,
|
||||
zo.`hour`,
|
||||
zw.warehouseFk,
|
||||
z.agencyModeFk,
|
||||
zo.price,
|
||||
zo.bonus
|
||||
FROM tmp.zoneOption zo
|
||||
JOIN zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
|
||||
JOIN zone z ON z.id = zo.zoneFk
|
||||
WHERE z.agencyModeFk = vAgencyModeFk
|
||||
ORDER BY shipped) t
|
||||
GROUP BY warehouseFk;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.zone,
|
||||
tmp.zoneOption;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,42 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_getAgency`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getAgency`(vAddress INT, vLanded DATE)
|
||||
BEGIN
|
||||
/**
|
||||
* Devuelve el listado de agencias disponibles para la fecha
|
||||
* y dirección pasadas.
|
||||
*
|
||||
* @param vAddress Id de dirección de envío, %NULL si es recogida
|
||||
* @param vLanded Fecha de recogida
|
||||
* @select Listado de agencias disponibles
|
||||
*/
|
||||
|
||||
CALL zone_getFromGeo(address_getGeo(vAddress));
|
||||
CALL zone_getOptionsForLanding(vLanded, FALSE);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.zoneGetAgency;
|
||||
CREATE TEMPORARY TABLE tmp.zoneGetAgency
|
||||
(INDEX (agencyModeFk)) ENGINE = MEMORY
|
||||
SELECT am.name agencyMode,
|
||||
am.description,
|
||||
z.agencyModeFk,
|
||||
am.deliveryMethodFk,
|
||||
TIMESTAMPADD(DAY,-zo.travelingDays, vLanded) shipped,
|
||||
TRUE isIncluded,
|
||||
zo.zoneFk
|
||||
FROM tmp.zoneOption zo
|
||||
JOIN zone z ON z.id = zo.zoneFk
|
||||
JOIN agencyMode am ON am.id = z.agencyModeFk
|
||||
GROUP BY agencyModeFk;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.zone,
|
||||
tmp.zoneOption;
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_getAvailable`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getAvailable`(vAddress INT, vLanded DATE)
|
||||
BEGIN
|
||||
CALL zone_getFromGeo(address_getGeo(vAddress));
|
||||
CALL zone_getOptionsForLanding(vLanded, FALSE);
|
||||
|
||||
SELECT * FROM tmp.zoneOption;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.zone,
|
||||
tmp.zoneOption;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,41 +0,0 @@
|
|||
USE `vn`;
|
||||
DROP procedure IF EXISTS `zone_getWarehouse`;
|
||||
|
||||
DELIMITER $$
|
||||
USE `vn`$$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `zone_getWarehouse`(vAddress INT, vLanded DATE, vWarehouse INT)
|
||||
BEGIN
|
||||
/**
|
||||
* Devuelve el listado de agencias disponibles para la fecha,
|
||||
* dirección y almacén pasados.
|
||||
*
|
||||
* @param vAddress
|
||||
* @param vWarehouse warehouse
|
||||
* @param vLanded Fecha de recogida
|
||||
* @select Listado de agencias disponibles
|
||||
*/
|
||||
|
||||
CALL zone_getFromGeo(address_getGeo(vAddress));
|
||||
CALL zone_getOptionsForLanding(vLanded, FALSE);
|
||||
|
||||
SELECT am.id agencyModeFk,
|
||||
am.name agencyMode,
|
||||
am.description,
|
||||
am.deliveryMethodFk,
|
||||
TIMESTAMPADD(DAY, -zo.travelingDays, vLanded) shipped,
|
||||
zw.warehouseFk,
|
||||
z.id zoneFk
|
||||
FROM tmp.zoneOption zo
|
||||
JOIN zone z ON z.id = zo.zoneFk
|
||||
JOIN agencyMode am ON am.id = z.agencyModeFk
|
||||
JOIN zoneWarehouse zw ON zw.zoneFk = zo.zoneFk
|
||||
WHERE zw.warehouseFk
|
||||
GROUP BY z.agencyModeFk
|
||||
ORDER BY agencyMode;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.zone,
|
||||
tmp.zoneOption;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1 +0,0 @@
|
|||
REPLACE INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('CustomsAgent', '*', '*', 'ALLOW', 'ROLE', 'employee');
|
|
@ -1,11 +0,0 @@
|
|||
CREATE TABLE `vn`.`customsAgent` (
|
||||
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||
`fiscalName` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`street` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`nif` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`phone` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`email` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
ALTER TABLE `vn`.`customsAgent`
|
||||
ADD UNIQUE KEY `nif_UNIQUE` (`nif`);
|
|
@ -1,10 +0,0 @@
|
|||
CREATE TABLE `vn`.`incoterms` (
|
||||
`code` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Internacional Commercial Terms';
|
||||
|
||||
ALTER TABLE `vn`.`incoterms`
|
||||
ADD PRIMARY KEY (`code`);
|
||||
|
||||
REPLACE INTO `vn`.`incoterms` (`code`, `name`) VALUES
|
||||
('FAS', 'Free Alongside Ship');
|
|
@ -1,26 +0,0 @@
|
|||
ALTER TABLE `vn`.`address`
|
||||
ADD COLUMN `customsAgentFk` INT NULL DEFAULT NULL AFTER `isEqualizated`;
|
||||
|
||||
ALTER TABLE `vn`.`address`
|
||||
ADD COLUMN `incotermsFk` VARCHAR(3) NULL DEFAULT NULL AFTER `customsAgentFk`;
|
||||
|
||||
|
||||
ALTER TABLE `vn`.`address`
|
||||
ADD INDEX `address_customsAgentFk_idx` (`customsAgentFk` ASC);
|
||||
|
||||
ALTER TABLE `vn`.`address`
|
||||
ADD INDEX `address_incotermsFk_idx` (`incotermsFk` ASC);
|
||||
|
||||
ALTER TABLE `vn`.`address`
|
||||
ADD CONSTRAINT `address_customsAgentFk`
|
||||
FOREIGN KEY (`customsAgentFk`)
|
||||
REFERENCES `vn`.`customsAgent` (`id`)
|
||||
ON DELETE RESTRICT
|
||||
ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE `vn`.`address`
|
||||
ADD CONSTRAINT `address_incotermsFk`
|
||||
FOREIGN KEY (`incotermsFk`)
|
||||
REFERENCES `vn`.`incoterms` (`code`)
|
||||
ON DELETE RESTRICT
|
||||
ON UPDATE CASCADE;
|
|
@ -1,5 +0,0 @@
|
|||
ALTER TABLE `vn`.`ticketUpdateAction`
|
||||
ADD COLUMN `code` VARCHAR(45) NOT NULL AFTER `description`;
|
||||
|
||||
UPDATE `vn`.`ticketUpdateAction` SET `code`='changePrice' WHERE `id`='1';
|
||||
UPDATE `vn`.`ticketUpdateAction` SET `code`='turnInMana' WHERE `id`='3';
|
|
@ -1,2 +0,0 @@
|
|||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
||||
VALUES ('Intrastat', '*', '*', 'ALLOW', 'ROLE', 'buyer');
|
|
@ -1,6 +0,0 @@
|
|||
ALTER TABLE `vn`.`sample`
|
||||
ADD COLUMN `hasPreview` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `hasCompany`,
|
||||
CHANGE COLUMN `isVisible` `isVisible` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' ,
|
||||
CHANGE COLUMN `hasCompany` `hasCompany` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' ;
|
||||
|
||||
UPDATE `vn`.`sample` SET `hasPreview` = '0' WHERE (`id` = '14');
|
|
@ -1,2 +0,0 @@
|
|||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
||||
VALUES ('EntryLog', '*', 'READ', 'ALLOW', 'ROLE', 'buyer');
|
|
@ -1,4 +0,0 @@
|
|||
ALTER TABLE `vn`.`workerDocument`
|
||||
ADD COLUMN `isReadableByWorker` TINYINT(1) NOT NULL DEFAULT 0 AFTER `document`;
|
||||
|
||||
UPDATE `vn`.`workerDocument` SET `isReadableByWorker` = '1' WHERE (`id` = '1');
|
|
@ -1,182 +0,0 @@
|
|||
|
||||
DROP procedure IF EXISTS `vn`.`workerTimeControl_check`;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`workerTimeControl_check`(vUserFk INT, vTabletFk VARCHAR(100), vTimed DATETIME)
|
||||
BEGIN
|
||||
|
||||
/**
|
||||
* Verifica si el empleado puede fichar en el momento actual, si puede fichar llama a vn.workerTimeControlAdd
|
||||
* @param vUserFk Identificador del trabajador
|
||||
* @return Retorna si encuentra un problema 'odd','maxTimeWork','breakDay','breakWeek' ;
|
||||
* En caso de tener algun problema retorna el primero que encuentra
|
||||
*/
|
||||
DECLARE vLastIn DATETIME ;
|
||||
DECLARE vLastOut DATETIME ;
|
||||
DECLARE vDayWorkMax INT;
|
||||
DECLARE vDayBreak INT;
|
||||
DECLARE vWeekBreak INT ;
|
||||
DECLARE vWeekMaxBreak INT;
|
||||
DECLARE vWeekScope INT;
|
||||
DECLARE vWeekMaxScope INT;
|
||||
DECLARE vDayStayMax INT;
|
||||
DECLARE vAskInOut INT;
|
||||
DECLARE vTimedWorked INT;
|
||||
DECLARE vCalendarStateType VARCHAR(20) DEFAULT NULL;
|
||||
DECLARE vDepartmentFk INT;
|
||||
DECLARE vTo VARCHAR(50) DEFAULT NULL;
|
||||
DECLARE vUserName VARCHAR(50) DEFAULT NULL;
|
||||
DECLARE vBody VARCHAR(255) DEFAULT NULL;
|
||||
|
||||
IF (vTimed IS NULL) THEN
|
||||
SET vTimed = NOW();
|
||||
END IF;
|
||||
|
||||
SELECT dayBreak, weekBreak, weekScope, dayWorkMax, dayStayMax, weekMaxBreak, weekMaxScope, askInOut
|
||||
INTO vDayBreak, vWeekBreak, vWeekScope, vDayWorkMax, vDayStayMax, vWeekMaxBreak, vWeekMaxScope, vAskInOut
|
||||
FROM vn.workerTimeControlParams;
|
||||
|
||||
SELECT MAX(timed) INTO vLastIn
|
||||
FROM vn.workerTimeControl
|
||||
WHERE userFk = vUserFk AND
|
||||
direction = 'in';
|
||||
|
||||
SELECT MAX(timed) INTO vLastOut
|
||||
FROM vn.workerTimeControl
|
||||
WHERE userFk = vUserFk AND
|
||||
direction = 'out';
|
||||
|
||||
SELECT email INTO vTo
|
||||
FROM vn.worker w
|
||||
WHERE w.id = (SELECT bossFk FROM vn.worker WHERE id = vUserFk);
|
||||
|
||||
SELECT CONCAT(firstName,' ',lastName) INTO vUserName
|
||||
FROM vn.worker w
|
||||
WHERE w.id = vUserFk;
|
||||
|
||||
-- VERIFICAR CONTRATO EN VIGOR
|
||||
IF (SELECT COUNT(*)
|
||||
FROM postgresql.business b
|
||||
JOIN postgresql.profile pr ON pr.profile_id = b.client_id
|
||||
JOIN postgresql.person p ON p.person_id = pr.person_id
|
||||
JOIN vn.worker w ON w.id = p.id_trabajador
|
||||
WHERE w.userFk = vUserFk AND
|
||||
b.date_start <= CURDATE() AND
|
||||
IFNULL(b.date_end,CURDATE()) >= CURDATE()
|
||||
) = 0 THEN
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"No hay un contrato en vigor") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.throw("No hay un contrato en vigor");
|
||||
END IF;
|
||||
|
||||
-- VERIFICAR DEPARTAMENTO
|
||||
IF vTabletFk IS NOT NULL THEN
|
||||
IF ( SELECT COUNT(*)
|
||||
FROM vn.tabletDepartment td
|
||||
JOIN vn.workerTimeControlUserInfo wtcu ON wtcu.departmentFk = td.departmentFk
|
||||
WHERE td.tabletFk = vTabletFk AND wtcu.userFk = vUserFk
|
||||
) = 0 THEN
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"No perteneces a este departamento.") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.throw("No perteneces a este departamento.");
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
SELECT IFNULL(dayBreak, vDayBreak) INTO vDayBreak
|
||||
FROM postgresql.business b
|
||||
JOIN postgresql.profile pr ON pr.profile_id = b.client_id
|
||||
JOIN postgresql.person p ON p.person_id = pr.person_id
|
||||
JOIN postgresql. business_labour bl ON b.business_id = bl.business_id
|
||||
JOIN postgresql.professional_category pc ON bl.professional_category_id = pc.professional_category_id
|
||||
WHERE p.id_trabajador = vUserFk AND
|
||||
b.date_start <= DATE(vTimed) AND
|
||||
IFNULL(b.date_end, DATE(vTimed)) >= DATE(vTimed);
|
||||
-- VERIFICAR DESCANSO DIARIO
|
||||
-- 12 / 9 horas dependiendo del valor de vDayBreak
|
||||
IF UNIX_TIMESTAMP(vTimed) - UNIX_TIMESTAMP(vLastOut) < vDayBreak THEN
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Descansos ", FORMAT(vDayBreak/3600,0) ," h") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.throw(CONCAT("Descansos ", FORMAT(vDayBreak/3600,0) ," h"));
|
||||
END IF;
|
||||
|
||||
-- VERIFICAR FICHADAS IMPARES DEL ÚLTIMO DÃÂÂA QUE SE FICHÓ
|
||||
IF (SELECT MOD(COUNT(*),2) -- <>0
|
||||
FROM vn.workerTimeControl
|
||||
WHERE userFk = vUserFk AND
|
||||
timed >= vLastIn
|
||||
) THEN
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Dias con fichadas impares") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.throw("Dias con fichadas impares");
|
||||
END IF;
|
||||
-- VERIFICAR VACACIONES
|
||||
SELECT cs.type INTO vCalendarStateType
|
||||
FROM postgresql.calendar_employee ce
|
||||
JOIN postgresql.business b USING(business_id)
|
||||
JOIN postgresql.profile pr ON pr.profile_id = b.client_id
|
||||
JOIN postgresql.person p ON p.person_id = pr.person_id
|
||||
JOIN postgresql.calendar_state cs USING(calendar_state_id)
|
||||
JOIN vn.worker w ON w.id = p.id_trabajador
|
||||
WHERE ce.date = CURDATE() AND
|
||||
cs.isAllowedToWork = FALSE AND
|
||||
w.userFk = vUserFk
|
||||
LIMIT 1;
|
||||
|
||||
IF(LENGTH(vCalendarStateType)) THEN
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Vacaciones") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.throw(vCalendarStateType);
|
||||
END IF;
|
||||
|
||||
-- VERIFICAR DESCANSO SEMANAL
|
||||
SET @vHasBreakWeek:= FALSE;
|
||||
SET @vLastTimed:= UNIX_TIMESTAMP((vTimed - INTERVAL vWeekScope SECOND));
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.trash;
|
||||
CREATE TEMPORARY TABLE tmp.trash
|
||||
SELECT IF(vWeekBreak-(UNIX_TIMESTAMP(timed)-@vLastTimed) <= 0, @vHasBreakWeek:=TRUE, TRUE) alias,
|
||||
@vLastTimed:= UNIX_TIMESTAMP(timed)
|
||||
FROM workerTimeControl
|
||||
WHERE timed>= (vTimed - INTERVAL vWeekScope SECOND) AND
|
||||
userFk= vUserFk AND
|
||||
direction IN ('in','out')
|
||||
ORDER BY timed ASC;
|
||||
|
||||
IF UNIX_TIMESTAMP(vTimed) - UNIX_TIMESTAMP(vLastOut) < vWeekBreak AND @vHasBreakWeek = FALSE THEN -- REVISA SI EL DESCANSO SE HA REALIZADO DESPUÉS DE LA ÚLTIMA FICHADA
|
||||
SET @vHasBreakWeek:= FALSE;
|
||||
SET @vLastTimed:= UNIX_TIMESTAMP((vTimed - INTERVAL vWeekMaxScope SECOND));
|
||||
DROP TEMPORARY TABLE tmp.trash;
|
||||
CREATE TEMPORARY TABLE tmp.trash
|
||||
SELECT IF(vWeekMaxBreak-(UNIX_TIMESTAMP(timed)-@vLastTimed) <= 0, @vHasBreakWeek:=TRUE, TRUE) alias,
|
||||
@vLastTimed:= UNIX_TIMESTAMP(timed)
|
||||
FROM workerTimeControl
|
||||
WHERE timed>= (vTimed - INTERVAL vWeekMaxScope SECOND) AND
|
||||
userFk= vUserFk AND
|
||||
direction IN ('in','out')
|
||||
ORDER BY timed ASC;
|
||||
IF UNIX_TIMESTAMP(vTimed) - UNIX_TIMESTAMP(vLastOut) < vWeekMaxBreak AND @vHasBreakWeek = FALSE THEN -- REVISA SI EL DESCANSO SE HA REALIZADO DESPUÉS DE LA ÚLTIMA FICHADA
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Descansos ", FORMAT(vWeekMaxBreak/3600,0) ," h") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.throw(CONCAT( "Descansos ", FORMAT(vWeekMaxBreak/3600,0) ," h"));
|
||||
END IF;
|
||||
-- ENVIAMOS CORREO AL BOSSFK
|
||||
SELECT CONCAT(vUserName,' No ha podido fichar por el siguiente problema: ',"Descansos ", FORMAT(vWeekBreak/3600,0) ," h") INTO vBody;
|
||||
CALL vn.mail_insert(vTo,vTo,'error al fichar',vBody);
|
||||
CALL util.warn(CONCAT( "Descansos ", FORMAT(vWeekBreak/3600,0) ," h"));
|
||||
END IF;
|
||||
DROP TEMPORARY TABLE tmp.trash;
|
||||
|
||||
-- Preguntar dirección de la fichada
|
||||
IF UNIX_TIMESTAMP(vTimed) - UNIX_TIMESTAMP(vLastIn) >= vAskInOut AND (SELECT MOD(COUNT(*),2)
|
||||
FROM vn.workerTimeControl WHERE userFk = vUserFk AND timed >= vLastIn) THEN
|
||||
CALL util.warn("AskInOut");
|
||||
END IF ;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1 +0,0 @@
|
|||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`) VALUES ('WorkerLog', '*', 'READ', 'ALLOW', 'ROLE', 'hr');
|
|
@ -1,6 +0,0 @@
|
|||
ALTER TABLE `vn`.`workerLog`
|
||||
ADD COLUMN `changedModel` VARCHAR(45) NULL DEFAULT NULL AFTER `description`,
|
||||
ADD COLUMN `oldInstance` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
|
||||
ADD COLUMN `newInstance` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
|
||||
ADD COLUMN `changedModelId` int(11) DEFAULT NULL,
|
||||
ADD COLUMN `changedModelValue` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL;
|
|
@ -1,108 +0,0 @@
|
|||
DROP procedure IF EXISTS `vn`.`collectionPlacement_get`;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`collectionPlacement_get`(vCollectionFk INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE vCalcFk INT;
|
||||
DECLARE vWarehouseFk INT;
|
||||
DECLARE vWarehouseAliasFk INT;
|
||||
|
||||
SELECT t.warehouseFk, w.aliasFk
|
||||
INTO vWarehouseFk, vWarehouseAliasFk
|
||||
FROM vn.ticket t
|
||||
JOIN vn.ticketCollection tc ON tc.ticketFk = t.id
|
||||
JOIN vn.warehouse w ON w.id = t.warehouseFk
|
||||
WHERE tc.collectionFk = vCollectionFk
|
||||
LIMIT 1;
|
||||
|
||||
CALL cache.visible_refresh(vCalcFk,FALSE,vWarehouseFk);
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.parked;
|
||||
CREATE TEMPORARY TABLE tmp.parked
|
||||
ENGINE MEMORY
|
||||
SELECT s.itemFk, 0 as quantity
|
||||
FROM vn.ticketCollection tc
|
||||
JOIN vn.sale s ON s.ticketFk = tc.ticketFk
|
||||
WHERE tc.collectionFk = vCollectionFk;
|
||||
|
||||
UPDATE tmp.parked pk
|
||||
JOIN ( SELECT itemFk, sum(visible) as visible
|
||||
FROM vn.itemShelvingStock iss
|
||||
JOIN vn.warehouse w ON w.id = iss.warehouseFk
|
||||
WHERE w.aliasFk = vWarehouseAliasFk
|
||||
GROUP BY iss.itemFk ) iss ON iss.itemFk = pk.itemFk
|
||||
SET pk.quantity = iss.visible;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.`grouping`;
|
||||
CREATE TEMPORARY TABLE tmp.`grouping`
|
||||
ENGINE MEMORY
|
||||
SELECT itemFk, `grouping`
|
||||
FROM (
|
||||
SELECT itemFk,
|
||||
CASE groupingMode
|
||||
WHEN 0 THEN 1
|
||||
WHEN 2 THEN packing
|
||||
ELSE `grouping`
|
||||
END AS `grouping`
|
||||
FROM buy b
|
||||
JOIN entry e ON e.id = b.entryFk
|
||||
JOIN travel tr ON tr.id = e.travelFk
|
||||
WHERE tr.warehouseInFk = vWarehouseFk
|
||||
AND landed BETWEEN (SELECT inventoried FROM vn.config LIMIT 1) AND CURDATE()
|
||||
AND b.isIgnored = FALSE
|
||||
ORDER BY tr.landed DESC
|
||||
) sub
|
||||
GROUP BY sub.itemFk ;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp.grouping2;
|
||||
CREATE TEMPORARY TABLE tmp.grouping2
|
||||
ENGINE MEMORY
|
||||
SELECT * FROM tmp.`grouping`;
|
||||
|
||||
|
||||
SELECT s.id as saleFk, s.itemFk,
|
||||
p.code COLLATE utf8_general_ci as placement ,
|
||||
sh.code COLLATE utf8_general_ci as shelving,
|
||||
ish.created,
|
||||
ish.visible,
|
||||
0 as `order`,
|
||||
IF(sc.isPreviousPreparedByPacking, ish.packing, g.`grouping`) as `grouping`
|
||||
FROM vn.ticketCollection tc
|
||||
JOIN vn.sale s ON s.ticketFk = tc.ticketFk
|
||||
JOIN vn.itemShelving ish ON ish.itemFk = s.itemFk
|
||||
JOIN vn.shelving sh ON sh.code = ish.shelvingFk
|
||||
JOIN vn.parking p ON p.id = sh.parkingFk
|
||||
JOIN vn.sector sc ON sc.id = p.sectorFk
|
||||
JOIN vn.warehouse w ON w.id = sc.warehouseFk
|
||||
JOIN tmp.`grouping` g ON g.itemFk = s.itemFk
|
||||
WHERE tc.collectionFk = vCollectionFk
|
||||
AND w.aliasFk = vWarehouseAliasFk
|
||||
AND ish.visible > 0
|
||||
UNION ALL
|
||||
SELECT s.id as saleFk, s.itemFk,
|
||||
ip.code COLLATE utf8_general_ci as placement,
|
||||
'' COLLATE latin1_general_ci as shelving,
|
||||
modificationDate as created,
|
||||
v.visible - p.quantity as visible,
|
||||
0 as `order`,
|
||||
g.`grouping`
|
||||
FROM vn.ticketCollection tc
|
||||
JOIN vn.sale s ON s.ticketFk = tc.ticketFk
|
||||
JOIN vn.itemPlacement ip ON ip.itemFk = s.itemFk AND ip.warehouseFk = vWarehouseFk
|
||||
JOIN tmp.parked p ON p.itemFk = s.itemFk
|
||||
JOIN cache.visible v ON v.item_id = s.itemFk AND v.calc_id = vCalcFk
|
||||
LEFT JOIN tmp.grouping2 g ON g.itemFk = s.itemFk
|
||||
WHERE tc.collectionFk = vCollectionFk
|
||||
AND v.visible - p.quantity > 0;
|
||||
|
||||
DROP TEMPORARY TABLE
|
||||
tmp.parked,
|
||||
tmp.`grouping`,
|
||||
tmp.grouping2;
|
||||
END
|
||||
|
||||
|
||||
$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,39 +0,0 @@
|
|||
DROP procedure IF EXISTS `vn`.`collection_faults`;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`collection_faults`(
|
||||
vShelvingFk VARCHAR(10),
|
||||
vQuantity INT,
|
||||
vItemFk INT)
|
||||
BEGIN
|
||||
DECLARE vQuantityTotal INT DEFAULT 0;
|
||||
DECLARE vshelve VARCHAR(2);
|
||||
DECLARE vdeep INT(11);
|
||||
DECLARE vpriority INT(11);
|
||||
DECLARE vgrouping SMALLINT(5);
|
||||
DECLARE vpacking INT(11);
|
||||
DECLARE vpackagingFk VARCHAR(10);
|
||||
DECLARE vlevel VARCHAR(45);
|
||||
DECLARE vuserFk INT(10);
|
||||
|
||||
|
||||
SELECT SUM(quantity),shelve,deep,priority,`grouping`,packing,packagingFk,`level`,userFk
|
||||
INTO vQuantityTotal,vshelve,vdeep,vpriority,vgrouping,vpacking,vpackagingFk,vlevel,vuserFk
|
||||
FROM vn.itemShelving
|
||||
WHERE shelvingFk = vShelvingFk COLLATE utf8mb4_unicode_ci AND itemFk = vItemFk
|
||||
GROUP BY itemFk;
|
||||
|
||||
SELECT vQuantityTotal - vQuantity INTO vQuantityTotal;
|
||||
|
||||
DELETE FROM vn.itemShelving WHERE shelvingFk = vShelvingFk COLLATE utf8mb4_unicode_ci AND itemFk = vItemFk;
|
||||
|
||||
INSERT INTO vn.itemShelving (itemFk, shelvingFk,shelve,deep,quantity,visible,available,priority,`grouping`,packing,packagingFk,`level`,userFk )
|
||||
VALUES (vItemFk,vShelvingFk,vshelve,vdeep,vQuantityTotal,vQuantityTotal,vQuantityTotal,vpriority,vgrouping,vpacking,vpackagingFk,vlevel,vuserFk );
|
||||
|
||||
SELECT * FROM vn.itemShelving
|
||||
WHERE shelvingFk = vShelvingFk COLLATE utf8mb4_unicode_ci AND itemFk = vItemFk;
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,42 +0,0 @@
|
|||
DROP procedure IF EXISTS `vn`.`collection_updateSale`;
|
||||
|
||||
|
||||
DELIMITER $$
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`collection_updateSale`(
|
||||
vSaleFk INT,
|
||||
vOriginalQuantity INT,
|
||||
vWorkerFk INT,
|
||||
vStateFk INT,
|
||||
vTicketFk INT)
|
||||
BEGIN
|
||||
|
||||
DECLARE vNumPrepared INT;
|
||||
DECLARE vNumTotal INT;
|
||||
|
||||
REPLACE INTO vn.saleTracking(saleFk,isChecked, originalQuantity, workerFk, actionFk,stateFk)
|
||||
VALUES(vSaleFk,1,vOriginalQuantity,vWorkerFk,vStateFk,vStateFk);
|
||||
|
||||
UPDATE vn.sale SET isPicked = 1
|
||||
WHERE id = vSaleFk;
|
||||
|
||||
SELECT COUNT(s.id) INTO vNumPrepared
|
||||
FROM vn.sale s
|
||||
WHERE s.ticketFk = vTicketFk AND s.isPicked = 1;
|
||||
|
||||
SELECT COUNT(s.id) INTO vNumTotal
|
||||
FROM vn.sale s
|
||||
WHERE s.ticketFk = vTicketFk;
|
||||
|
||||
IF vNumPrepared = vNumTotal THEN
|
||||
|
||||
INSERT INTO vncontrol.inter
|
||||
SET state_id = vStateFk, Id_Ticket = vTicketFk, Id_Trabajador = vWorkerFk;
|
||||
|
||||
CALL vn.collection_update(vTicketFk);
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,13 +0,0 @@
|
|||
/*DROP view IF EXISTS `vn`.`coolerPathDetail`;
|
||||
|
||||
CREATE
|
||||
ALGORITHM = UNDEFINED
|
||||
DEFINER = `root`@`%`
|
||||
SQL SECURITY DEFINER
|
||||
VIEW `vn`.`coolerPathDetail` AS
|
||||
SELECT
|
||||
`c`.`cooler_path_detail_id` AS `id`,
|
||||
`c`.`cooler_path_id` AS `coolerPathFk`,
|
||||
`c`.`pasillo` AS `hallway`
|
||||
FROM
|
||||
`vn2008`.`cooler_path_detail` `c`*/
|
|
@ -1,15 +0,0 @@
|
|||
DROP procedure IF EXISTS `vn`.`sale_updateOriginalQuantity`;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`sale_updateOriginalQuantity`(vSale INT, vQuantity INT)
|
||||
proc: BEGIN
|
||||
|
||||
UPDATE vn.sale SET originalQuantity = vQuantity
|
||||
WHERE id = vSale;
|
||||
|
||||
SELECT * FROM vn.sale WHERE id = vSale;
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -1,14 +0,0 @@
|
|||
DROP procedure IF EXISTS `vn`.`sector_getWarehouse`;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`sector_getWarehouse`(vSectorFk INT)
|
||||
BEGIN
|
||||
|
||||
SELECT s.warehouseFk
|
||||
FROM vn.sector s
|
||||
WHERE s.id = vSectorFk;
|
||||
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
|
@ -69,8 +69,7 @@ module.exports = Self => {
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
}, {
|
||||
relation: 'address',
|
||||
scope: {
|
||||
fields: ['street', 'city', 'provinceFk', 'phone', 'mobile'],
|
||||
|
@ -81,8 +80,7 @@ module.exports = Self => {
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
}, {
|
||||
relation: 'notes',
|
||||
scope: {
|
||||
fields: ['id', 'observationTypeFk', 'description'],
|
||||
|
@ -91,8 +89,7 @@ module.exports = Self => {
|
|||
fields: ['description']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
}, {
|
||||
relation: 'state',
|
||||
scope: {
|
||||
fields: ['stateFk'],
|
||||
|
@ -101,6 +98,11 @@ module.exports = Self => {
|
|||
fields: ['name']
|
||||
}
|
||||
}
|
||||
}, {
|
||||
relation: 'invoiceOut',
|
||||
scope: {
|
||||
fields: ['id']
|
||||
}
|
||||
}
|
||||
],
|
||||
where: {id: ticketFk}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Tickets",
|
||||
"icon": "icon-ticket",
|
||||
"validations": true,
|
||||
"dependencies": ["worker", "item", "client", "route"],
|
||||
"dependencies": ["worker", "item", "client", "route", "invoiceOut"],
|
||||
"menus": {
|
||||
"main": [
|
||||
{"state": "ticket.index", "icon": "icon-ticket"},
|
||||
|
|
|
@ -37,8 +37,12 @@
|
|||
{{$ctrl.summary.routeFk}}
|
||||
</span>
|
||||
</vn-label-value>
|
||||
<vn-label-value label="Invoice"
|
||||
value="{{$ctrl.summary.refFk}}">
|
||||
<vn-label-value label="Invoice">
|
||||
<span
|
||||
ng-class="{link: $ctrl.summary.refFk}"
|
||||
ng-click="$ctrl.showInvoiceOutDescriptor($event, $ctrl.summary.refFk)">
|
||||
{{$ctrl.summary.refFk | dashIfEmpty}}
|
||||
</span>
|
||||
</vn-label-value>
|
||||
</vn-one>
|
||||
<vn-one>
|
||||
|
@ -235,3 +239,6 @@
|
|||
vn-id="descriptor"
|
||||
quicklinks="$ctrl.quicklinks">
|
||||
</vn-item-descriptor-popover>
|
||||
<vn-invoice-out-descriptor-popover
|
||||
vn-id="invoice-out-descriptor">
|
||||
</vn-invoice-out-descriptor-popover>
|
|
@ -44,6 +44,13 @@ class Controller extends Section {
|
|||
this.$.routeDescriptor.show();
|
||||
}
|
||||
|
||||
showInvoiceOutDescriptor(event, refFk) {
|
||||
if (!refFk) return;
|
||||
this.$.invoiceOutDescriptor.invoiceOutId = this.summary.invoiceOut.id;
|
||||
this.$.invoiceOutDescriptor.parent = event.target;
|
||||
this.$.invoiceOutDescriptor.show();
|
||||
}
|
||||
|
||||
showDescriptor(event, sale) {
|
||||
this.quicklinks = {
|
||||
btnThree: {
|
||||
|
|
Loading…
Reference in New Issue