salix/db/routines/hedera/procedures/order_checkConfig.sql

65 lines
1.6 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `hedera`.`order_checkConfig`(vSelf INT)
BEGIN
/**
* Comprueba que la configuración del pedido es correcta.
*
* @param vSelf Identificador del pedido
*/
DECLARE vDeliveryMethod VARCHAR(255);
DECLARE vLanded DATE;
DECLARE vAgencyMode INT;
DECLARE vAddress INT;
DECLARE vIsAvailable BOOL;
DECLARE vIsActive BOOL;
DECLARE vClientFk INT;
DECLARE vConfigured DATETIME;
CALL order_checkEditable(vSelf);
-- Obtiene los datos del pedido
SELECT d.code, o.date_send, o.agency_id, o.address_id, customer_id, configured
INTO vDeliveryMethod, vLanded, vAgencyMode, vAddress, vClientFk, vConfigured
FROM `order` o
JOIN vn.deliveryMethod d ON d.id = o.delivery_method_id
WHERE o.id = vSelf;
-- Comprueba que no ha caducado la configuración
IF vConfigured IS NULL OR vConfigured < TIMESTAMPADD(DAY, -1, util.VN_NOW()) THEN
CALL util.throw('orderOutdated');
END IF;
-- Comprueba que se ha seleccionado una dirección
IF vDeliveryMethod IN ('AGENCY', 'DELIVERY') AND vAddress IS NULL THEN
CALL util.throw ('ORDER_EMPTY_ADDRESS');
END IF;
-- Comprueba que el cliente esté activo
SELECT isActive INTO vIsActive
FROM vn.client
WHERE id = vClientFk;
IF NOT vIsActive THEN
CALL util.throw ('CLIENT_NOT_ACTIVE');
END IF;
-- Comprueba que la agencia es correcta
CALL vn.zone_getAgency(vAddress, vLanded);
SELECT COUNT(*) > 0 INTO vIsAvailable
FROM tmp.zoneGetAgency
WHERE agencyModeFk = vAgencyMode;
IF NOT vIsAvailable THEN
CALL util.throw ('ORDER_INVALID_AGENCY');
END IF;
DROP TEMPORARY TABLE tmp.zoneGetAgency;
END$$
DELIMITER ;