4515-addBuyCheck #1974

Merged
pablone merged 7 commits from 4515-addBuyCheck into dev 2024-02-02 11:59:28 +00:00
6 changed files with 64 additions and 12 deletions

View File

@ -74,6 +74,8 @@ BEGIN
WHERE b.id = vSelf;
END IF;
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT vSelf id;
CALL buy_checkItem();
END$$
DELIMITER ;

View File

@ -0,0 +1,28 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_checkItem`()
BEGIN
/**
* Checks if the item has weightByPiece or size null on any buy.
*
* @param tmp.buysToCheck(id as INT).
*/
DECLARE hasVolumetricAgency INT;
SELECT a.hasWeightVolumetric INTO hasVolumetricAgency
FROM entry e
JOIN travel t ON t.id = e.travelFk
JOIN agencyMode a ON a.id = t.agencyModeFk
JOIN buy b ON b.entryFk = e.id
JOIN item i ON i.id = b.itemFk
JOIN tmp.buysToCheck bt ON bt.id = b.id
WHERE (i.weightByPiece IS NULL OR i.`size` IS NULL)
pablone marked this conversation as resolved
Review

paréntesis se pueden quitar

paréntesis se pueden quitar
AND a.hasWeightVolumetric
pablone marked this conversation as resolved Outdated

estas segur que funciona be?
si el primer registre coincidira que hasWeightVolumetric es false, no miraria la resta.
Estas asumint que totes compres que et pasen son del mateix travel, pero jo posaria el a.hasWeightVolumetric en el where per a asegurar.
Altra cosa, en procesos com l'inventari, açò fara que vaja molt lento? el buy_upsert li tinguerem que posar la variable dentorno per ixe motiu

estas segur que funciona be? si el primer registre coincidira que hasWeightVolumetric es false, no miraria la resta. Estas asumint que totes compres que et pasen son del mateix travel, pero jo posaria el a.hasWeightVolumetric en el where per a asegurar. Altra cosa, en procesos com l'inventari, açò fara que vaja molt lento? el buy_upsert li tinguerem que posar la variable dentorno per ixe motiu

bien visto, estaba realizando las pruebas con 1 sola buy

bien visto, estaba realizando las pruebas con 1 sola buy
LIMIT 1;
DROP TEMPORARY TABLE IF EXISTS tmp.buysToCheck;
IF hasVolumetricAgency THEN
CALL util.throw('Some purchase line has an item without size or weight per stem in the volumetric agency.');
END IF;
END$$
DELIMITER ;

View File

@ -41,8 +41,8 @@ trig:BEGIN
FROM genericAllocation ga
JOIN entry e ON e.id = NEW.entryFk
JOIN travel tr on tr.id = e.travelFk
WHERE ga.itemFk = vGenericFk
AND tr.landed BETWEEN ga.startDated AND ga.endDated;
WHERE ga.itemFk = vGenericFk
AND tr.landed BETWEEN ga.startDated AND ga.endDated;
IF vGenericInDate THEN
SET NEW.itemOriginalFk = NEW.itemFk;
SET NEW.itemFk = vGenericFk;
@ -64,5 +64,12 @@ trig:BEGIN
IF NEW.quantity < 0 THEN
SET NEW.isIgnored = TRUE;
END IF;
IF NOT (NEW.itemFk <=> OLD.itemFk) OR
NOT (OLD.entryFk <=> NEW.entryFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT NEW.id;
CALL buy_checkItem();
END IF;
END$$
DELIMITER ;

View File

@ -13,5 +13,15 @@ BEGIN
CALL travel_requestRecalc(OLD.travelFk);
CALL travel_requestRecalc(NEW.travelFk);
END IF;
IF NOT (NEW.travelFk <=> OLD.travelFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
FROM buy b
WHERE b.entryFk = NEW.id;
CALL buy_checkItem();
END IF;
END$$
DELIMITER ;

View File

@ -10,5 +10,18 @@ BEGIN
SET commission = entry_getCommission(travelFk, currencyFk,supplierFk)
WHERE travelFk = NEW.id;
END IF;
IF NOT (NEW.agencyModeFk <=> OLD.agencyModeFk) THEN
IF (SELECT hasWeightVolumetric FROM agencyMode WHERE id = NEW.agencyModeFk) THEN
CREATE OR REPLACE TEMPORARY TABLE tmp.buysToCheck
SELECT b.id
FROM entry e
JOIN buy b ON b.entryFk = e.id
JOIN item i ON i.id = b.itemFk
WHERE e.travelFk = NEW.id;
CALL buy_checkItem();
END IF;
END IF;
END$$
DELIMITER ;

View File

@ -4,15 +4,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`travel_beforeUpdate`
FOR EACH ROW
BEGIN
SET NEW.editorFk = account.myUser_getId();
/*
IF ((NOT NEW.shipped <=> OLD.shipped )
OR (NOT NEW.landed <=> OLD.landed )
OR (NOT NEW.warehouseInFk <=> OLD.warehouseInFk )
OR (NOT NEW.warehouseOutFk <=> OLD.warehouseOutFk ))
AND (OLD.totalEntries AND OLD.landed < CURDATE()) THEN
CALL util.throw("Cannot past travels with entries");
END IF;
*/
IF NOT (NEW.landed <=> OLD.landed)
OR NOT (NEW.shipped <=> OLD.shipped) THEN
CALL travel_checkDates(NEW.shipped, NEW.landed);