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
|
CREATE TRIGGER TG_TEST ON [dbo].[TCOM_TOURNEE]
FOR INSERT
AS
DECLARE @NomEchange nvarchar(20), @Ordre nvarchar(20), @TypeEchange nvarchar(20), @Tournee nvarchar(6), @IdComm varchar(12)
DECLARE @LibelTran varchar(21)
DECLARE @dateChar datetime, @cbMarq int
DECLARE @NbTournee int, @idEchange int, @ordreLiv int, @NumLign int
DECLARE @Type int, @Ligne int
DECLARE @Piece varchar(8), @PieceBC varchar(8)
DECLARE @Date datetime, @DateBC datetime
SELECT @idEchange = IDENTIFIANT, @Tournee = TOURNEE, @IdComm = NO_COMMANDE, @NumLign = NO_LIGNE, @ordreLiv = ORDRE_LIVRAISON, @LibelTran = LIBELLE_TRANSPORTEUR, @dateChar = DATE_CHGT FROM INSERTED
-- On regarde si la donnée est à destination de la base SAGE
SELECT @NomEchange = ECH.DESTINATION, @Ordre = ECH.STATUT FROM T_ECHANGES ECH
JOIN INSERTED INS ON INS.IDENTIFIANT=ECH.IDENTIFIANT
IF ( (@NomEchange = 'SAGE') AND (@Ordre = 'PRET' ) ) BEGIN
SELECT @TypeEchange = ACTION_ECHANGE FROM INSERTED
-- Ajout d'une valeur
IF (@TypeEchange = 'A') OR (@TypeEchange = 'M')
BEGIN
-- On va vérifier si la Tournée existe
IF NOT EXISTS(SELECT 1 FROM F_COMPTEA WHERE N_Analytique = 4 AND CA_Num = @Tournee)
-- On ajoute la tournée dans la table F_COMPTEA
INSERT INTO F_COMPTEA ( N_Analytique, CA_Num, CA_INTITULE, CA_Type, CODE_TRANSPORTEUR,DATE_CHARGEMENT,CA_CLASSEMENT) VALUES (4, @Tournee, 'Tournée n°'+@Tournee , 0,@LibelTran, convert(varchar(10), @dateChar, 103), 'Tournée n°'+@Tournee)
-- Traitement d'ajout d'une tournée
-- On va modifier l'entete de la facture
UPDATE F_DOCENTETE SET DO_Type = 2, CA_Num = @Tournee, DO_Piece = 'P'+@Tournee+@ordreLiv, ORDRE_LIVRAI = @ordreLiv, DO_Date = convert(varchar(10),getdate(),103) WHERE DO_Piece = @IdComm AND DO_Type = 1
IF ( @@ROWCOUNT = 0 ) BEGIN
rollback transaction
UPDATE T_ECHANGES SET STATUT = 'Problème pour passer la commande '+@IdComm+' en préparation de livraison' , DATE_TRAITEMENT = getdate() WHERE IDENTIFIANT = @idEchange
END
ELSE BEGIN
-- On créer un curseur contenant l'ensemble des lignes de cette facture
DECLARE ListeLigne CURSOR
FOR SELECT DO_Type, Do_Piece, DL_PieceBC, DO_Date, DL_DateBC, DL_Ligne FROM F_DOCLIGNE
WHERE DO_Piece = @IdComm AND DO_Domaine = 0 AND DO_Type = 1
OPEN ListeLigne
FETCH ListeLigne INTO @Type, @Piece, @PieceBC, @Date, @DateBC, @Ligne
WHILE @@FETCH_STATUS = 0
BEGIN
-- On va modifier la ligne de la facture
UPDATE F_DOCLIGNE SET DO_Type = 2, CA_Num = @Tournee, DL_PieceBC = DO_Piece, DO_Piece = 'P'+@Tournee+@ordreLiv, DL_DateBC = DO_Date, DO_Date = convert(varchar(10),getdate(),103) WHERE DO_Piece = @IdComm AND DO_Type = 1
FETCH NEXT FROM ListeLigne INTO @Type, @Piece, @PieceBC, @Date, @DateBC, @Ligne
END
CLOSE ListeLigne
DEALLOCATE ListeLigne
END
END
ELSE IF (@TypeEchange = 'S')
BEGIN
-- Traitement de suppression d'une tournée
-- On va récupérer le numéro et la date du Bon de Commande avant la transformation
DECLARE @NumBL varchar(8), @DateBL datetime
SELECT @NumBL = DL_PieceBC, @DateBL = DL_DateBC FROM F_DOCLIGNE WHERE DO_Piece = @IdComm AND DO_Domaine = 0 AND DO_Type = 2
-- On va modifier l'entete de la facture
UPDATE F_DOCENTETE SET DO_Type = 1, CA_Num = NULL, DO_Piece = @NumBL, ORDRE_LIVRAI = @ordreLiv, DO_Date = @DateBL WHERE DO_Piece = @IdComm AND DO_Type = 2
IF ( @@ROWCOUNT = 0 ) BEGIN
rollback transaction
UPDATE T_ECHANGES SET STATUT = 'Problème pour passer la commande '+@IdComm+' en Bon de commande' , DATE_TRAITEMENT = getdate() WHERE IDENTIFIANT = @idEchange
END
-- On créer un curseur contenant l'ensemble des lignes de cette facture
DECLARE ListeLigne CURSOR
FOR SELECT DO_Type, Do_Piece, DL_PieceBC, DO_Date, DL_DateBC, DL_Ligne FROM F_DOCLIGNE
WHERE DO_Piece = @IdComm AND DO_Domaine = 0 AND DO_Type = 2
OPEN ListeLigne
FETCH ListeLigne INTO @Type, @Piece, @PieceBC, @Date, @DateBC, @Ligne
WHILE @@FETCH_STATUS = 0
BEGIN
-- On va modifier la ligne de la facture
UPDATE F_DOCLIGNE SET DO_Type = 1, CA_Num = NULL, DL_PieceBC = NULL, DO_Piece = @NumBL, DL_DateBC = NULL, DO_Date = @NumBL WHERE DO_Piece = @IdComm AND DO_Type = 2
FETCH NEXT FROM ListeLigne INTO @Type, @Piece, @PieceBC, @Date, @DateBC, @Ligne
END
CLOSE ListeLigne
DEALLOCATE ListeLigne
END
ELSE
-- Autre cas nom traité
UPDATE T_ECHANGES SET STATUT = 'ERREUR', ERREUR = ' Type d échange : '+@TypeEchange+' non reconnu dans le champs ACTION_ECHANGE de la table TCOM_TOURNEE', DATE_TRAITEMENT = getdate() WHERE IDENTIFIANT = @idEchange
END |
Partager