L'intégration sera effectuée à l'aide des triggers sous SQL-Server pour avoir une mise à jour instantanée des informations.
-
Les ordres de fabrications créés dans SILOG sont créés dans PlanningPME (trigger insert_lctc)
-
Les ordres de fabrications vont être planifiés dans PlanningPME et mis à jour dans SILOG (trigger update_chantier_date)
-
Les ordres de fabrications supprimés dans SILOG sont aussi supprimés dans PlanningPME (trigger delete_lctc)
Attention : l’utilisateur au niveau SQL-Server doit avoir accès aux 2 bases de données PlanningPME et SILOG
BASE SILOG
CREATE TRIGGER [insert_lctc] ON [dbo].[LCTC]
FOR INSERT
AS
/* LCTC */
declare @TempsPoste float
declare @CodeLancement varchar(50)
declare @TypeRubrique varchar(50)
declare @CodeRubrique varchar(50)
declare @Phase varchar(50)
/* LCTE */
declare @NumeroAffaireFils varchar(50)
/* COMC */
declare @DateFinProdPlusTard datetime
declare @CodeArticleprestto varchar(50)
declare @NoCommande varchar(50)
/* COME */
declare @CodeClient varchar(50)
declare @VarAlphaUtil2 varchar(50)
declare @NumeroAffairePere varchar(30)
/* autre variable */
declare @IdxRessourceAPlanifier int
declare @DateHeureDebut datetime
declare @DateHeureFin datetime
declare @HeureDebut datetime
declare @HeureFin datetime
declare @DateDebut datetime
declare @DateFin datetime
declare @IdxChantier int
/* on ne traite que les opérations */
if ( @TypeRubrique <> 'O' )
begin
return
end
select @Phase=inserted.Phase, @TempsPoste=inserted.TempsPoste, @CodeLancement=inserted.CodeLancement, @TypeRubrique=inserted.TypeRubrique, @CodeRubrique=inserted.CodeRubrique From inserted
/* Recherche des infos dans LCTE */
SELECT @NumeroAffaireFils=[NumeroAffaire] FROM [LCTE] WHERE [CodeLancement]=@CodeLancement
if ( @NumeroAffaireFils = '' )
begin
return
end
/* Recherche des infos dans COMC */
SELECT @DateFinProdPlusTard=[DateFinProdPlusTard], @CodeArticleprestto=[CodeArticleprestto], @NoCommande=[NoCommande] FROM [COMC] WHERE [NumeroAffaireFils]=@NumeroAffaireFils
if ( @NoCommande = '' )
begin
return
end
/* Recherche des infos dans COME */
SELECT @CodeClient=[CodeClient], @VarAlphaUtil2=[VarAlphaUtil2], @NumeroAffairePere=[NumeroAffairePere] FROM [COME] WHERE [NoCommande]=@NoCommande
if ( @NumeroAffairePere = '' )
begin
return
end
/* Insert dans CHANTIER */
INSERT PlanningPME.dbo.CHANTIER ([_CODECLIENT], [_VARALPHAUTIL2], [_NUMEROAFFAIREFILS], [_CODEARTICLEPRESTTO], [_CODELANCEMENT], [_NUMEROAFFAIRE], UN_OU_PLS_RESSOURCE,[_DATEFINPRODPLUSTARD], [_TEMPSPOSTE], [_OF], [_CODERUBRIQUE], NOM_CHANTIER, [_PHASE]) VALUES (@CodeClient, @VarAlphaUtil2, @NumeroAffaireFils, @CodeArticleprestto, @CodeLancement, @NumeroAffairePere,1076, @DateFinProdPlusTard, @TempsPoste,1, @CodeRubrique, @CodeRubrique, @Phase)
set @IdxChantier = (SELECT MAX(@@IDENTITY) from PlanningPME.dbo.CHANTIER)
/**/
set @DateDebut=@DateFinProdPlusTard
set @DateFin=@DateFinProdPlusTard
Set @DateFin = DATEADD(day,@TempsPoste/8,@DateDebut)
/**/
set @HeureDebut= '8:00'
Set @HeureFin = '17:00'
/* Calcul des champs date et heure */
/**/
Set @DateHeureDebut = DATEADD(minute,DATEPART(hour,@HeureDebut)*60+DATEPART(minute,@HeureDebut),@DateDebut)
Set @DateHeureFin = DATEADD(minute,DATEPART(hour,@HeureFin)*60+DATEPART(minute,@HeureFin),@DateFin)
/* Insert dans CHANTIER_DATE */
INSERT PlanningPME.dbo.CHANTIER_DATE (IDX_CHANTIER, DATE_DEBUT, DATE_FIN, HEURE_DEBUT, HEURE_FIN, JOURNEE_ENTIERE, DATE_HEURE_DEBUT, DATE_HEURE_FIN, TYPE, DUREE) VALUES (@IdxChantier, @DateDebut, @DateFin, @HeureDebut, @HeureFin, 0, @DateHeureDebut, @DateHeureFin, 1661, @TempsPoste)
/* Idx de la ressource à planifier */
set @IdxRessourceAPlanifier = 26
/* Insert dans CHANTIER_RESSOURCE */
INSERT PlanningPME.dbo.CHANTIER_RESSOURCE (IDX_CHANTIER,IDX_RESSOURCE) VALUES (@IdxChantier, @IdxRessourceAPlanifier)
CREATE TRIGGER delete_lctc ON dbo.LCTC
FOR DELETE
AS
declare @CodeLancement varchar(50)
declare @Phase varchar(50)
declare @CodeRubrique varchar(50)
declare @IDX_CHANTIER int
select @CodeLancement=deleted.[CodeLancement], @Phase=deleted.[Phase], @CodeRubrique=deleted.[CodeRubrique] from deleted
if ( @CodeLancement = '' OR @Phase = '' OR @CodeRubrique='' )
begin
return
end
select @IDX_CHANTIER=IDX_CHANTIER from PlanningPME.dbo.CHANTIER where [_CODELANCEMENT]=@CodeLancement AND [_PHASE]=@Phase AND [_CODERUBRIQUE]=@CodeRubrique
delete from PlanningPME.dbo.CHANTIER where IDX_CHANTIER=@IDX_CHANTIER
delete from PlanningPME.dbo.CHANTIER_DATE where IDX_CHANTIER=@IDX_CHANTIER
delete from PlanningPME.dbo.CHANTIER_RESSOURCE where IDX_CHANTIER=@IDX_CHANTIER
BASE PLANNINGPME
CREATE TRIGGER update_chantier_date ON dbo.CHANTIER_DATE
FOR UPDATE
AS
declare @CodeLancement varchar(50)
declare @Phase varchar(50)
declare @CodeRubrique varchar(50)
declare @INDISPONIBILITE bit
declare @OF bit
declare @DateDebut datetime
declare @HeureDebut datetime
declare @DateFin datetime
declare @HeureFin datetime
declare @IDX_CHANTIER int
select @IDX_CHANTIER=inserted.IDX_CHANTIER, @DateDebut=inserted.DATE_DEBUT, @HeureDebut=inserted.HEURE_DEBUT, @DateFin=inserted.DATE_FIN, @HeureFin=inserted.HEURE_FIN from inserted
select @OF=[_OF], @INDISPONIBILITE=INDISPONIBILITE, @CodeLancement=[_CODELANCEMENT], @Phase=[_PHASE], @CodeRubrique=[_CODERUBRIQUE] from CHANTIER where IDX_CHANTIER=@IDX_CHANTIER
/* on ne s'occupe pas des indispos */
if ( @INDISPONIBILITE = 1 )
begin
return
end
/* on ne s'occupe pas des tâches crées dans PPME */
if ( @OF = 0 )
begin
return
end
if ( @CodeLancement = '' OR @Phase = '' OR @CodeRubrique='' )
begin
return
end
update CEDIPPME.dbo.[LCTC]
set DateDebutPlanifiee = @DateDebut,HeureDebutPlanif = DATEPART(hour,@HeureDebut), MinuteDebutPlanif=DATEPART(minute,@HeureDebut) ,
DateFinPlanifiee = @DateFin, HeureFinPlanif=DATEPART(hour,@HeureFin), MinuteFinPlanif=DATEPART(minute,@HeureFin)
where @CodeLancement=CodeLancement and Phase=@Phase and CodeRubrique=@CodeRubrique