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

95 lines
2.4 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`route_calcCommission`(
vSelf INT
)
BEGIN
/**
* Calcula las comisión para una ruta y guarda los valores
* en la tabla vn.routeCommission.
*
* @param vSelf Id de ruta
*/
DECLARE vIsUpdatable, vIsFreelance BOOL DEFAULT 0;
DECLARE vAgencyModePricePercentage DOUBLE;
SELECT r.created >= rc.cutoffDated INTO vIsUpdatable
FROM route r
JOIN routeConfig rc
WHERE r.id = vSelf;
IF vIsUpdatable THEN
DELETE FROM routeCommission
WHERE routeFk = vSelf;
SELECT w.isFreelance INTO vIsFreelance
FROM route r
JOIN worker w ON w.id = r.workerFk
WHERE r.id = vSelf;
SELECT ampp.percentage INTO vAgencyModePricePercentage
FROM route r
JOIN agencyMode am ON am.id = r.agencyModeFk
JOIN agencyModePricePercentage ampp ON ampp.agencyModeFk = am.id
WHERE r.id = vSelf;
-- Falta calcular el precio, a la espera de saber el/los campo/s exacto/s al que aplicarlo/s
IF vIsFreelance THEN
INSERT INTO routeCommission (
routeFk,
workCenterFk,
freelanceYearlyM3,
cat4m3,
cat5m3
)
SELECT vSelf,
r.commissionWorkCenterFk,
IF(vAgencyModePricePercentage IS NOT NULL,
vAgencyModePricePercentage / 100,
rc.freelanceM3
) *
IF(IFNULL(r.m3, 0) >= rc.freelanceMinM3,
IFNULL(r.m3, 0),
0
),
rc.distributionCat4M3 * IFNULL(r.m3, 0),
rc.distributionCat5M3 * IFNULL(r.m3, 0)
FROM route r
JOIN vehicle v ON v.id = r.vehicleFk
JOIN routeConfig rc
WHERE r.id = vSelf
AND r.workerFk
AND r.commissionWorkCenterFk;
ELSE
INSERT INTO routeCommission (
routeFk,
workCenterFk,
km,
m3,
yearlyKm,
yearlyM3,
cat4m3,
cat5m3
)
SELECT vSelf,
r.commissionWorkCenterFk,
(r.kmEnd - r.kmStart) *
IF(v.isKmTruckRate, rc.kmHeavy, rc.kmLight),
IFNULL(r.m3, 0) *
IF(v.isKmTruckRate, rc.deliveryM3Cat5, rc.deliveryM3Cat4),
(r.kmEnd - r.kmStart) * rc.kmYearly,
IFNULL(r.m3, 0) * rc.m3Yearly,
rc.distributionCat4M3 * IFNULL(r.m3, 0),
rc.distributionCat5M3 * IFNULL(r.m3, 0)
FROM route r
JOIN vehicle v ON v.id = r.vehicleFk
JOIN routeConfig rc
WHERE r.id = vSelf
AND r.kmStart
AND r.kmEnd
AND r.workerFk
AND r.commissionWorkCenterFk;
END IF;
END IF;
END$$
DELIMITER ;