feat: refs #8057 Added geoFk columns #3204

Merged
guillermo merged 10 commits from 8057-geoFk into dev 2024-11-18 11:47:54 +00:00
9 changed files with 77 additions and 12 deletions
Showing only changes of commit cba1abad68 - Show all commits

View File

@ -0,0 +1,25 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`client_getGeo`(vSelf INT)
RETURNS int(11)
DETERMINISTIC
BEGIN
/**
* Returns the geo for the passed client.
*
* @param vSelf The address id
* @return The geo id
*/
DECLARE vGeoFk INT;
SELECT p.geoFk INTO vGeoFk
FROM client c
JOIN town t ON t.provinceFk = c.provinceFk
JOIN postCode p ON p.townFk = t.id
AND p.`code` = c.postcode
WHERE c.id = vSelf
ORDER BY (c.city SOUNDS LIKE t.`name`) DESC
guillermo marked this conversation as resolved Outdated
Outdated
Review

Puede ser que el cliente no tenga codigo postal. Yo pondria, en lugar de

AND p.code = c.postcode

en el order by pondria

ORDER BY (c.city SOUNDS LIKE t.name) DESC, (p.code = c.postcode) DESC

Puede ser que el cliente no tenga codigo postal. Yo pondria, en lugar de AND p.`code` = c.postcode en el order by pondria ORDER BY (c.city SOUNDS LIKE t.`name`) DESC, (p.`code` = c.postcode) DESC
LIMIT 1;
RETURN vGeoFk;
END$$
DELIMITER ;

View File

@ -0,0 +1,25 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`supplier_getGeo`(vSelf INT)
RETURNS int(11)
DETERMINISTIC
BEGIN
/**
* Returns the geo for the passed supplier.
*
* @param vSelf The address id
* @return The geo id
*/
DECLARE vGeoFk INT;
SELECT p.geoFk INTO vGeoFk
FROM supplier s
JOIN town t ON t.provinceFk = s.provinceFk
JOIN postCode p ON p.townFk = t.id
AND p.`code` = s.postCode
guillermo marked this conversation as resolved Outdated
Outdated
Review

Lo mismo que el caso anterior. Hay 1637 proveedores sin codigo postal

Lo mismo que el caso anterior. Hay 1637 proveedores sin codigo postal
WHERE s.id = vSelf
ORDER BY (s.city SOUNDS LIKE t.`name`) DESC
LIMIT 1;
RETURN vGeoFk;
END$$
DELIMITER ;

View File

@ -6,6 +6,7 @@ BEGIN
DECLARE vIsEqualizated BOOL; DECLARE vIsEqualizated BOOL;
SET NEW.editorFk = account.myUser_getId(); SET NEW.editorFk = account.myUser_getId();
SET NEW.geoFk = address_getGeo(NEW.id);
IF (NEW.phone <> '') THEN IF (NEW.phone <> '') THEN
CALL pbx.phone_isValid(NEW.phone); CALL pbx.phone_isValid(NEW.phone);

View File

@ -3,7 +3,6 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`address_beforeUpdate`
BEFORE UPDATE ON `address` BEFORE UPDATE ON `address`
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
SET NEW.editorFk = account.myUser_getId(); SET NEW.editorFk = account.myUser_getId();
IF !(NEW.phone <=> OLD.phone) AND (NEW.phone <> '') THEN IF !(NEW.phone <=> OLD.phone) AND (NEW.phone <> '') THEN
@ -14,5 +13,10 @@ BEGIN
CALL pbx.phone_isValid(NEW.mobile); CALL pbx.phone_isValid(NEW.mobile);
END IF; END IF;
IF NOT (NEW.provinceFk <=> OLD.provinceFk)
OR (NEW.postalCode <=> OLD.postalCode) THEN
SET NEW.geoFk = address_getGeo(NEW.id);
END IF;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -3,8 +3,10 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`client_beforeInsert`
BEFORE INSERT ON `client` BEFORE INSERT ON `client`
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
SET NEW.editorFk = account.myUser_getId(); SET NEW.editorFk = account.myUser_getId();
SET NEW.accountingAccount = 4300000000 + NEW.id;
SET NEW.lastSalesPersonFk = NEW.salesPersonFk;
SET NEW.geoFk = client_getGeo(NEW.id);
IF (NEW.phone <> '') THEN IF (NEW.phone <> '') THEN
CALL pbx.phone_isValid(NEW.phone); CALL pbx.phone_isValid(NEW.phone);
@ -13,9 +15,5 @@ BEGIN
IF (NEW.mobile <> '') THEN IF (NEW.mobile <> '') THEN
CALL pbx.phone_isValid(NEW.mobile); CALL pbx.phone_isValid(NEW.mobile);
END IF; END IF;
SET NEW.accountingAccount = 4300000000 + NEW.id;
SET NEW.lastSalesPersonFk = NEW.salesPersonFk;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -72,5 +72,11 @@ BEGIN
IF NOT (NEW.businessTypeFk <=> OLD.businessTypeFk) AND (NEW.businessTypeFk = 'individual' OR OLD.businessTypeFk = 'individual') THEN IF NOT (NEW.businessTypeFk <=> OLD.businessTypeFk) AND (NEW.businessTypeFk = 'individual' OR OLD.businessTypeFk = 'individual') THEN
SET NEW.isTaxDataChecked = 0; SET NEW.isTaxDataChecked = 0;
END IF; END IF;
IF NOT (NEW.provinceFk <=> OLD.provinceFk)
OR (NEW.postcode <=> OLD.postcode) THEN
SET NEW.geoFk = client_getGeo(NEW.id);
END IF;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -4,5 +4,6 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `vn`.`supplier_beforeInsert`
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
SET NEW.editorFk = account.myUser_getId(); SET NEW.editorFk = account.myUser_getId();
SET NEW.geoFk = supplier_getGeo(NEW.id);
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -40,5 +40,10 @@ BEGIN
SET NEW.isPayMethodChecked = FALSE; SET NEW.isPayMethodChecked = FALSE;
END IF; END IF;
IF NOT (NEW.provinceFk <=> OLD.provinceFk)
OR (NEW.postcode <=> OLD.postcode) THEN
SET NEW.geoFk = client_getGeo(NEW.id);
END IF;
END$$ END$$
DELIMITER ; DELIMITER ;

View File

@ -8,13 +8,13 @@ ALTER TABLE vn.supplier
CREATE OR REPLACE TEMPORARY TABLE tSupplierGeo CREATE OR REPLACE TEMPORARY TABLE tSupplierGeo
(PRIMARY KEY (id)) (PRIMARY KEY (id))
ENGINE = MEMORY ENGINE = MEMORY
SELECT sa.supplierFk id, p.geoFk SELECT s.id, p.geoFk
FROM supplierAddress sa FROM supplier s
JOIN town t ON t.provinceFk = sa.provinceFk JOIN town t ON t.provinceFk = s.provinceFk
JOIN postCode p ON p.townFk = t.id JOIN postCode p ON p.townFk = t.id
guillermo marked this conversation as resolved
Review

Lo mismo de antes

Lo mismo de antes
AND p.`code` = sa.postalCode AND p.`code` = s.postCode
GROUP BY sa.supplierFk GROUP BY s.id
ORDER BY (sa.city SOUNDS LIKE t.`name`) DESC; ORDER BY (s.city SOUNDS LIKE t.`name`) DESC;
UPDATE supplier s UPDATE supplier s
JOIN tSupplierGeo tsg ON tsg.id = s.id JOIN tSupplierGeo tsg ON tsg.id = s.id