salix/db/routines/vn/procedures/clientGreugeSpray.sql

75 lines
2.0 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`clientGreugeSpray`(
IN vClientFk INT,
IN vIsOnlyForHisOwner BOOL,
IN vDepartmentCode VARCHAR(45),
IN vWithMana BOOLEAN
)
BEGIN
DECLARE vGreuge DECIMAL(10,2);
DECLARE vOwner INT;
DECLARE vTotalSale INT;
DECLARE vGreugeTypeFk INT DEFAULT 5; -- HERENCIA
DECLARE vGreugeTypeMana INT DEFAULT 3;-- Maná
DECLARE vMana DECIMAL(10,2);
SELECT clientGetMana(vClientFk) INTO vMana;
IF vWithMana AND vMana THEN
INSERT INTO greuge
SET clientFk = vClientFk,
description = 'Desasignación',
amount = - vMana,
shipped = util.VN_CURDATE(),
greugeTypeFk = vGreugeTypeMana;
END IF;
SELECT SUM(amount) INTO vGreuge
FROM greuge
WHERE clientFk = vClientFk;
IF vGreuge THEN
IF LENGTH(vDepartmentCode) THEN
SELECT salesDepartmentFk INTO vOwner
FROM client
WHERE id = vClientFk;
ELSE
SELECT id INTO vOwner
FROM department
WHERE code = vDepartmentCode;
END IF;
IF vOwner IS NULL THEN
CALL util.throw('The department is incorrect');
END IF;
INSERT INTO greuge(clientFk, description, amount, shipped, greugeTypeFk)
WITH greuges AS(
SELECT DISTINCT t.clientFk, FLOOR(cr.yearSale / 12) monthSale
FROM vn.ticket t
JOIN vn.client c ON c.id = t.clientFk
JOIN vn.departmentMana dm ON dm.salesDepartmentFk = c.salesDepartmentFk
JOIN vn.claimRatio cr ON cr.clientFk = c.id
WHERE dm.salesDepartmentFk = IF(vIsOnlyForHisOwner, vOwner, dm.salesDepartmentFk)
AND t.shipped >= util.VN_CURDATE() - INTERVAL 1 MONTH
AND c.id <> vClientFk
HAVING monthSale > 100
), totalGreuge AS(
SELECT SUM(monthSale) totalSale FROM greuges
)SELECT g.clientFk,
CONCAT('Cliente: ', vClientFk),
vGreuge * g.monthSale / tgtotalSale,
util.VN_CURDATE(),
vGreugeTypeFk
FROM greuges g
JOIN totalGreuge tg
UNION ALL
SELECT vClientFk,
'Reparto greuge',
-vGreuge,
util.VN_CURDATE(),
vGreugeTypeFk;
END IF;
END$$
DELIMITER ;