1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
DECLARE @CL_ID int, @MG_ID int, @REL_ID int, @CL_STATUT_OLD varchar(5), @CL_STATUT_NEW varchar(5)
SELECT @CL_STATUT_OLD = CL_STATUT FROM DELETED
SELECT @CL_ID = CL_ID, @CL_STATUT_NEW = CL_STATUT FROM INSERTED
IF NOT UPDATE(CL_STATUT)
RETURN
-- Si le nouveau statut est "SIGN" (pour signé) et que l'ancien statut n'était pas "SIGNE"
-- Le CL vient d'être signé, on exécute donc le trigger
IF ( (@CL_STATUT_OLD != 'SIGN') AND (@CL_STATUT_NEW = 'SIGN') )
BEGIN
-- Sélection des avances MG du contrat
DECLARE CursMG CURSOR FOR
SELECT MG_ID
FROM CALICE_ADAMAU.dbo.AVANCE_MG
WHERE CTR_ID = @CL_ID
OPEN CursMG
FETCH NEXT FROM CursMG INTO @MG_ID
WHILE @@FETCH_STATUS = 0
BEGIN
-- On copie/colle les données des tables LC_MG et LC_MG_RAD dans les tables LC_MG_PROV et LC_MG_RAD_PROV
INSERT INTO CALICE_ADAMAU.dbo.LC_MG_PROV (MG_ID, CDE_NUM_CA, LCDE_NUM_CA, LCDE_NUM_CA_FM, CDE_NUM_LG, LCDE_NUM_LG, CDE_NUM_FM, LCDE_NUM_FM, TRANS, DT_TRANS )
SELECT MG_ID, CDE_NUM_CA, LCDE_NUM_CA, LCDE_NUM_CA_FM, CDE_NUM_LG, LCDE_NUM_LG, CDE_NUM_FM, LCDE_NUM_FM, 'N', '01/01/1900'
FROM CALICE_ADAMAU.dbo.LC_MG
WHERE MG_ID = @MG_ID
INSERT INTO CALICE_ADAMAU.dbo.LC_MG_RAD_PROV (MG_ID, AD_ID, CDE_NUM_RAD, LCDE_NUM_RAD, TRANS, DT_TRANS)
SELECT MG_ID, AD_ID, CDE_NUM_RAD, LCDE_NUM_RAD,'N', '01/01/1900'
FROM CALICE_ADAMAU.dbo.LC_MG_RAD
WHERE MG_ID = @MG_ID
-- On supprime les données des tables LC_MG et LC_MG_RAD
DELETE FROM CALICE_ADAMAU.dbo.LC_MG WHERE MG_ID = @MG_ID
DELETE FROM CALICE_ADAMAU.dbo.LC_MG_RAD WHERE MG_ID = @MG_ID
-- On réinitialise les indicateurs de transmission des avances MG du contrat concerné
UPDATE AVANCE_MG SET AMG_TRANS = 'N', AMG_DATTRANS = '01/01/1900' WHERE AMG_ID = @MG_ID
FETCH NEXT FROM CursMG INTO @MG_ID
END
CLOSE CursMG
DEALLOCATE CursMG
-- Sélection des relevés du contrat
DECLARE CursRel CURSOR FOR
SELECT REL_ID
FROM CALICE_ADAMAU.dbo.RELEVE
WHERE CTR_ID = @CL_ID
OPEN CursRel
FETCH NEXT FROM CursRel INTO @REL_ID
WHILE @@FETCH_STATUS = 0
BEGIN
-- On copie/colle les données des tables LC_REL et LC_REL_RAD dans les tables LC_REL_PROV et LC_REL_RAD_PROV
INSERT INTO CALICE_ADAMAU.dbo.LC_REL_PROV(REL_ID, CDE_NUM_CA, LCDE_NUM_CA, LCDE_NUM_CA_FM, CDE_NUM_LG, LCDE_NUM_LG, CDE_NUM_FM, LCDE_NUM_FM, TRANS, DT_TRANS)
SELECT REL_ID, CDE_NUM_CA, LCDE_NUM_CA, LCDE_NUM_CA_FM, CDE_NUM_LG, LCDE_NUM_LG, CDE_NUM_FM, LCDE_NUM_FM, 'N', '01/01/1900'
FROM CALICE_ADAMAU.dbo.LC_REL
WHERE REL_ID = @REL_ID
INSERT INTO CALICE_ADAMAU.dbo.LC_REL_RAD_PROV(REL_ID, AD_ID, CDE_NUM_RAD, LCDE_NUM_RAD, TRANS, DT_TRANS)
SELECT REL_ID, AD_ID, CDE_NUM_RAD, LCDE_NUM_RAD, 'N', '01/01/1900'
FROM CALICE_ADAMAU.dbo.LC_REL_RAD
WHERE REL_ID = @REL_ID
-- On supprime les données des tables LC_MG et LC_MG_RAD
DELETE FROM CALICE_ADAMAU.dbo.LC_REL WHERE REL_ID = @REL_ID
DELETE FROM CALICE_ADAMAU.dbo.LC_REL_RAD WHERE REL_ID = @REL_ID
-- On réinitialise les indicateurs de transmission des relevés du contrat concerné
UPDATE RELEVE SET REL_TRANS = 'N', REL_DATTRANS = '01/01/1900' WHERE REL_ID = @REL_ID
FETCH NEXT FROM CursRel INTO @REL_ID
END
CLOSE CursRel
DEALLOCATE CursRel
END
-- rollback en cas d'erreur
IF @@Error <> 0
ROLLBACK TRANSACTION |
Partager