2024-01-15 11:31:03 +00:00
DELIMITER $ $
2024-07-22 09:52:42 +00:00
CREATE OR REPLACE DEFINER = ` vn - admin ` @ ` localhost ` PROCEDURE ` vn ` . ` buy_recalcPrices ` ( )
2024-01-15 11:31:03 +00:00
BEGIN
/* *
* Recalcula los precios para las compras insertadas en tmp . buyRecalc
*
* @ param tmp . buyRecalc ( id )
* /
DECLARE vLanded DATE ;
DECLARE vWarehouseFk INT ;
DECLARE vHasNotPrice BOOL ;
DECLARE vBuyingValue DECIMAL ( 10 , 4 ) ;
DECLARE vPackagingFk VARCHAR ( 10 ) ;
DECLARE vIsWarehouseFloramondo BOOL ;
SELECT t . landed , t . warehouseInFk , ( w . ` name ` = ' Floramondo ' )
INTO vLanded , vWarehouseFk , vIsWarehouseFloramondo
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
LIMIT 1 ;
CALL rate_getPrices ( vLanded , vWarehouseFk ) ;
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 ) ,
b . price2 = @ t2 : = IF ( @ t2 < = @ t3 , @ t3 , @ t2 ) ;
SELECT ( b . buyingValue = b . price2 ) , b . buyingValue , b . packagingFk
INTO vHasNotPrice , vBuyingValue , vPackagingFk
FROM vn . buy b
WHERE b . id = @ buyId AND b . buyingValue < > 0 . 01 ;
DROP TEMPORARY TABLE tmp . rate ;
END $ $
DELIMITER ;