refactor: refs #6944 Update ticket_setState to improve state change logic and user tracking #3439
|
@ -3,21 +3,25 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_setState`(
|
||||||
vSelf INT,
|
vSelf INT,
|
||||||
vStateCode VARCHAR(255) COLLATE utf8_general_ci
|
vStateCode VARCHAR(255) COLLATE utf8_general_ci
|
||||||
)
|
)
|
||||||
BEGIN
|
proc:BEGIN
|
||||||
/**
|
/**
|
||||||
* Modifica el estado de un ticket si se cumplen las condiciones necesarias.
|
* Modifica el estado de un ticket si se cumplen las condiciones necesarias.
|
||||||
*
|
*
|
||||||
* @param vSelf el id del ticket
|
* @param vSelf el id del ticket
|
||||||
* @param vStateCode estado a modificar del ticket
|
* @param vStateCode estado a modificar del ticket
|
||||||
*/
|
*/
|
||||||
DECLARE vticketAlertLevel INT;
|
DECLARE vTicketAlertLevel INT;
|
||||||
DECLARE vTicketStateCode VARCHAR(255);
|
DECLARE vTicketStateCode VARCHAR(255) COLLATE utf8_general_ci;
|
||||||
DECLARE vCanChangeState BOOL;
|
DECLARE vCanChangeState BOOL;
|
||||||
DECLARE vPackedAlertLevel INT;
|
DECLARE vPackedAlertLevel INT;
|
||||||
DECLARE vZoneFk INT;
|
DECLARE vZoneFk INT;
|
||||||
|
DECLARE vOldWorkerFk INT;
|
||||||
|
DECLARE vNewWorkerFk INT;
|
||||||
|
|
||||||
SELECT s.alertLevel, s.`code`, t.zoneFk
|
SET vNewWorkerFk = account.myUser_getId();
|
||||||
INTO vticketAlertLevel, vTicketStateCode, vZoneFk
|
|
||||||
|
SELECT s.alertLevel, s.`code`, t.zoneFk, tt.userFk
|
||||||
|
INTO vTicketAlertLevel, vTicketStateCode, vZoneFk, vOldWorkerFk
|
||||||
FROM state s
|
FROM state s
|
||||||
JOIN ticketTracking tt ON tt.stateFk = s.id
|
JOIN ticketTracking tt ON tt.stateFk = s.id
|
||||||
JOIN ticket t ON t.id = tt.ticketFk
|
JOIN ticket t ON t.id = tt.ticketFk
|
||||||
|
@ -33,24 +37,27 @@ BEGIN
|
||||||
|
|
||||||
SET vCanChangeState = ((
|
SET vCanChangeState = ((
|
||||||
vStateCode <> 'ON_CHECKING' AND vStateCode <> 'CHECKED') OR
|
vStateCode <> 'ON_CHECKING' AND vStateCode <> 'CHECKED') OR
|
||||||
vticketAlertLevel < vPackedAlertLevel
|
vTicketAlertLevel < vPackedAlertLevel
|
||||||
)AND NOT (
|
) AND NOT (
|
||||||
vTicketStateCode IN ('CHECKED', 'CHECKING')
|
vTicketStateCode IN ('CHECKED', 'CHECKING')
|
||||||
AND vStateCode IN ('PREPARED', 'ON_PREPARATION')
|
AND vStateCode IN ('PREPARED', 'ON_PREPARATION')
|
||||||
);
|
);
|
||||||
|
|
||||||
IF vCanChangeState THEN
|
IF vCanChangeState THEN
|
||||||
INSERT INTO ticketTracking (stateFk, ticketFk, userFk)
|
|
||||||
SELECT id, vSelf, account.myUser_getId()
|
|
||||||
FROM state
|
|
||||||
WHERE `code` = vStateCode COLLATE utf8_unicode_ci;
|
|
||||||
|
|
||||||
IF vStateCode = 'PACKED' THEN
|
IF vStateCode = 'PACKED' THEN
|
||||||
CALL ticket_doCmr(vSelf);
|
CALL ticket_doCmr(vSelf);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
IF vStateCode = vTicketStateCode AND vOldWorkerFk = vNewWorkerFk THEN
|
||||||
|
LEAVE proc;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO ticketTracking (stateFk, ticketFk, userFk)
|
||||||
|
SELECT id, vSelf, vNewWorkerFk
|
||||||
|
FROM state
|
||||||
|
WHERE `code` = vStateCode COLLATE utf8_unicode_ci;
|
||||||
ELSE
|
ELSE
|
||||||
CALL util.throw('INCORRECT_TICKET_STATE');
|
CALL util.throw('INCORRECT_TICKET_STATE');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
Loading…
Reference in New Issue