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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
ALTER TRIGGER [dbo].[TE_ISI_C008_UPDATE]
ON [dbo].[TE_ISI_C008]
AFTER INSERT, UPDATE, DELETE
AS
declare @staNo bigint, @repId bigint, @oj_StaNo bigint, @oj_SerNo bigint, @c011_newid bigint;
BEGIN
set nocount on;
if (select count(*) from inserted) > 0 or (select count(*) from deleted) > 0
begin;
-- Lorsque le statut d'un indice change, alors le statut du dossier doit être modifié en conséquence.
-- Le statut de l'affaire doit être modifié en cascade avec les mêmes règles
-- La règle de base est "Le statut du dossier est égal au 'max' du statut des indices".
with dest (id_oj, max_status)
as
(
select C008.ID_OJ, max(
case KA.ExtKey
when 'ETUDE' then 2
when 'COMMANDE' then 3
when 'PERDU' then 0
when 'NON_RETENU' then 1
end
)
from TE_ISI_C008 C008
inner join TE_ISI_KA KA on KA.KatNr = 1056 and KA.Code = C008.F7013 and KA.SpracheNr = 0
where C008.ID_OJ in (
select i.ID_OJ from inserted i
union
select d.ID_OJ from deleted d
)
and C008.DEL = 0
group by C008.ID_OJ
)
update oj
set oj.f7077 = case dest.max_status
when 2 then 1
when 3 then 2
when 0 then 3
when 1 then 4
end
from te_isi_oj oj
inner join dest on dest.id_oj = oj.id
where oj.f7077 <> case dest.max_status
when 2 then 1
when 3 then 2
when 0 then 3
when 1 then 4
end
and oj.Objektart = 2;
-- On applique la même règle à l'affaire
with ori (id, statut)
as
(
select do.ID_OJ, case max(case do.F7077
when 1 then 1
when 2 then 3
when 3 then 2
when 4 then 0
end) when 0 then 8 when 1 then 9 when 2 then 5 when 3 then 4 end
from te_isi_oj do
where do.Objektart = 2 and do.LosKZ = 0
and do.ID_OJ in (
select i.ID_OJ_1 from inserted i
union
select d.ID_OJ_1 from deleted d
)
group by do.ID_OJ
)
update af
set af.F7080 = ori.statut
from te_isi_oj af
inner join ori on ori.id = af.id
where af.F7080 <> ori.statut;
-- Historisation du changement de statut
if (@@rowcount > 0)
begin
--exec [dbo].[TE_ISI_NextId] 'TE_ISI_C011', @c011_newid output;
--insert into TE_ISI_C011 (id, new_dt, upd_dt, new_sno, del, com, id_oj, id_fi, F7007, F7008, F7009, F7010, F7011, F7012_DT)
--select @c011_newid, format(getdate(),'yyyyMMddHHmmssfff'), format(getdate(),'yyyyMMddHHmmssfff'), 1, 0, 0, id, ID_FI_250, F7021, F7078, F7079, F7080, F7081, format(getdate(),'yyyyMMddHHmmssfff')
--from te_isi_oj
--where id in (
-- select i.ID_OJ_1 from inserted i
-- union
-- select d.ID_OJ_1 from deleted d
--);
select 1;
end;
-- Si on vient de passer une étude à "Gagnée", alors on doit mettre à jour Movex
if (select count(*) from inserted) = 1 and (select count(*) from deleted) <= 1
begin
if (select count(*) from inserted C008 inner join te_isi_ka ka on KA.KatNr = 1056 and KA.Code = C008.F7013 and KA.SpracheNr = 0 and ka.extkey = 'COMMANDE') = 1
and (select count(*) from deleted C008 inner join te_isi_ka ka on KA.KatNr = 1056 and KA.Code = C008.F7013 and KA.SpracheNr = 0 and ka.extkey = 'COMMANDE') = 0
begin
select @stano = dbo.IdToStaNo(i.id), @repId = oj.F7151, @oj_StaNo = dbo.IdToStaNo(oj.id), @oj_SerNo = dbo.IdToSerNo(oj.id) from inserted i inner join te_isi_oj oj on oj.id = i.id_oj;
exec dbo.ksp_maj_affaire_movex @stano, @repId, @oj_StaNo, @oj_SerNo;
end;
end;
end;
set nocount off;
end; |
Partager