2024-01-15 11:31:03 +00:00
DELIMITER $ $
CREATE OR REPLACE DEFINER = ` root ` @ ` localhost ` PROCEDURE ` vn ` . ` buy_recalcPrices ` ( )
BEGIN
/* *
2024-09-04 10:23:01 +00:00
* Recalcula los precios para las compras insertadas en tmp . buyRecalc .
2024-01-15 11:31:03 +00:00
*
* @ param tmp . buyRecalc ( id )
* /
DECLARE vLanded DATE ;
DECLARE vWarehouseFk INT ;
DECLARE vIsWarehouseFloramondo BOOL ;
2024-09-04 10:23:01 +00:00
DECLARE vDone BOOL ;
DECLARE vTravels CURSOR FOR
SELECT t . landed , t . warehouseInFk , ( w . code = ' flm ' )
FROM tmp . buyRecalc br
JOIN buy b ON b . id = br . id
JOIN entry e ON e . id = b . entryFk
JOIN travel t ON t . id = e . travelFk
JOIN warehouse w ON w . id = t . warehouseInFk
2024-09-04 10:41:44 +00:00
GROUP BY t . landed , t . warehouseInFk ;
2024-01-15 11:31:03 +00:00
2024-09-04 10:23:01 +00:00
DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE ;
2024-01-15 11:31:03 +00:00
2024-09-04 10:23:01 +00:00
OPEN vTravels ;
l : LOOP
SET vDone = FALSE ;
FETCH vTravels INTO vLanded , vWarehouseFk , vIsWarehouseFloramondo ;
2024-01-15 11:31:03 +00:00
2024-09-04 10:23:01 +00:00
IF vDone THEN
LEAVE l ;
END IF ;
2024-01-15 11:31:03 +00:00
2024-09-04 10:23:01 +00:00
CALL rate_getPrices ( vLanded , vWarehouseFk ) ;
2024-01-15 11:31:03 +00:00
2024-09-04 10:23:01 +00:00
UPDATE buy b
JOIN tmp . buyRecalc br ON br . id = b . id AND ( @ buyId : = b . id )
LEFT JOIN packaging p ON p . id = b . packagingFk
JOIN item i ON i . id = b . itemFk
JOIN entry e ON e . id = b . entryFk
JOIN itemType it ON it . id = i . typeFk
JOIN travel tr ON tr . id = e . travelFk
JOIN agencyMode am ON am . id = tr . agencyModeFk
JOIN tmp . rate r
JOIN volumeConfig vc
SET b . freightValue = @ PF : = IFNULL ( ( ( am . m3 * @ m3 : = item_getVolume ( b . itemFk , b . packagingFk ) / 1000000 )
/ b . packing ) * IF ( am . hasWeightVolumetric , GREATEST ( b . weight / @ m3 / vc . aerealVolumetricDensity , 1 ) , 1 ) , 0 ) ,
b . comissionValue = @ CF : = ROUND ( IFNULL ( e . commission * b . buyingValue / 100 , 0 ) , 3 ) ,
b . packageValue = @ EF : = IF ( vIsWarehouseFloramondo , 0 , IFNULL ( ROUND ( IF ( p . isPackageReturnable , p . returnCost / b . packing , p . ` value ` / b . packing ) , 3 ) , 0 ) ) ,
b . price3 = @ t3 : = IF ( r . rate3 = 0 , b . buyingValue , ROUND ( ( b . buyingValue + @ CF + @ EF + @ PF ) / ( ( 100 - r . rate3 - it . promo ) / 100 ) , 2 ) ) , -- He añadido que el coste sea igual a tarifa3 si t3 = 0
b . price2 = @ t2 : = round ( @ t3 * ( 1 + ( ( r . rate2 - r . rate3 ) / 100 ) ) , 2 ) ,
2024-09-04 10:41:44 +00:00
b . price2 = @ t2 : = IF ( @ t2 < = @ t3 , @ t3 , @ t2 )
2024-09-04 10:45:33 +00:00
WHERE tr . landed = vLanded
AND tr . warehouseInFk = vWarehouseFk ;
2024-09-04 10:23:01 +00:00
DROP TEMPORARY TABLE tmp . rate ;
END LOOP ;
CLOSE vTravels ;
2024-01-15 11:31:03 +00:00
END $ $
DELIMITER ;