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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
CREATE PROCEDURE [dbo].[Usp_Dev_Devpart_Copy]
@ID_TO_COPY INT,
@ID_DEST INT,
@MODE char(2),
-- FA = Fils ainé
-- FC = Fils cadet
-- GF = Grand Frère
-- PF = Petit frère
@NEW_DPT_ID INT OUTPUT
AS
BEGIN
DECLARE
@ERROR INT,
@ROWCOUNT INT,
@TRANCOUNT INT,
@NBE INT,
@DEV_ID_SRC INT,
@DPT_PID_SRC INT,
@DPT_ORD_SRC INT,
@DPS_ID_SRC INT,
@DEV_ID_DEST INT,
@DPT_PID_DEST INT,
@DPT_ORD_DEST INT,
@DPT_FAMILLE_DEST dbo.D_FAMILLE_ARTICLE,
@DPT_SFAMILLE_DEST dbo.D_FAMILLE_ARTICLE,
@DPS_ID_DEST INT,
@NEW_ORD INT,
@NEW_PID INT;
SELECT @DEV_ID_SRC = DEV_ID, @DPT_PID_SRC = DPT_PID, @DPT_PID_SRC = DPT_ORD FROM dbo.T_DEVPART_DPT
WHERE DPT_ID = @ID_TO_COPY
SELECT @DEV_ID_DEST = DEV_ID, @DPT_PID_DEST = DPT_PID, @DPT_ORD_DEST = DPT_ORD FROM dbo.T_DEVPART_DPT
WHERE DPT_ID = @ID_DEST
SET @ERROR = 0;
SET @ROWCOUNT = 0;
SET @TRANCOUNT = 0;
-- démarrage transaction -------------------
BEGIN TRANSACTION;
SET @TRANCOUNT = 1;
IF @MODE = 'FA'
BEGIN
UPDATE dbo.T_DEVPART_DPT
SET DPT_ORD = DPT_ORD + 1
WHERE DPT_PID = @ID_DEST;
SELECT @ERROR = @@ERROR, @ROWCOUNT = @@ROWCOUNT;
IF @ERROR <> 0 GOTO LBL_ERROR;
SET @NEW_PID = @ID_DEST;
SET @NEW_ORD = 1;
END
IF @MODE = 'FC'
BEGIN
SELECT @NBE = COUNT(*) FROM dbo.T_DEVPART_DPT
WHERE DPT_PID = @ID_DEST;
SET @NEW_PID = @ID_DEST
SET @NEW_ORD = @NBE + 1
END
ELSE IF @MODE = 'GF'
BEGIN
UPDATE dbo.T_DEVPART_DPT
SET DPT_ORD = DPT_ORD + 1
WHERE DPT_PID = @DPT_PID_DEST AND DPT_ORD >= @DPT_ORD_DEST;
SELECT @ERROR = @@ERROR, @ROWCOUNT = @@ROWCOUNT;
IF @ERROR <> 0 GOTO LBL_ERROR;
SET @NEW_PID = @DPT_PID_DEST;
SET @NEW_ORD = @DPT_ORD_DEST;
END
ELSE IF @MODE = 'PF'
BEGIN
UPDATE dbo.T_DEVPART_DPT
SET DPT_ORD = DPT_ORD + 1
WHERE DPT_PID = @DPT_PID_DEST AND DPT_ORD > @DPT_ORD_DEST;
SELECT @ERROR = @@ERROR, @ROWCOUNT = @@ROWCOUNT;
IF @ERROR <> 0 GOTO LBL_ERROR;
SET @NEW_PID = @DPT_PID_DEST;
SET @NEW_ORD = @DPT_ORD_DEST + 1;
END
INSERT INTO dbo.T_DEVPART_DPT
(
DEV_ID,
DPT_PID,
DPT_ORD,
DPS_ID,
DPT_FAMILLE,
DPT_SFAMILLE,
DPT_REF,
DPT_LIBELLE,
DPT_QTE,
UPU_CODE,
DPT_PUA1,
DPT_MT_AJUST,
DPT_TEXTCOM,
DPT_PRN
)
SELECT
@DEV_ID_DEST,
@NEW_PID,
@NEW_ORD,
DPS_ID,
DPT_FAMILLE,
DPT_SFAMILLE,
DPT_REF,
DPT_LIBELLE,
DPT_QTE,
UPU_CODE,
DPT_PUA1,
DPT_MT_AJUST,
DPT_TEXTCOM,
DPT_PRN
FROM dbo.T_DEVPART_DPT
WHERE DPT_ID = @ID_TO_COPY;
SET @NEW_DPT_ID = SCOPE_IDENTITY();
SELECT @ERROR = @@ERROR, @ROWCOUNT = @@ROWCOUNT;
IF @ERROR <> 0 OR @ROWCOUNT = 0 GOTO LBL_ERROR;
SELECT
@DPT_FAMILLE_DEST = DPT_FAMILLE,
@DPT_SFAMILLE_DEST = DPT_SFAMILLE,
@DPS_ID_DEST = DPS_ID
FROM dbo.T_DEVPART_DPT
WHERE DPT_ID = @NEW_DPT_ID
IF @DPS_ID_DEST = 4
BEGIN
SELECT @NBE = COUNT(*) FROM dbo.T_DEV_CALC_DEC
WHERE (DEV_ID = @DEV_ID_DEST) AND
(DEC_FAMILLE = @DPT_FAMILLE_DEST) AND (ISNULL(DEC_SFAMILLE, '+-*') = ISNULL(@DPT_SFAMILLE_DEST,'+-*'));
IF ISNULL(@NBE,0) = 0
BEGIN
INSERT INTO dbo.T_DEV_CALC_DEC (DEV_ID, DEC_FAMILLE, DEC_SFAMILLE)
VALUES (@DEV_ID_DEST , @DPT_FAMILLE_DEST, @DPT_SFAMILLE_DEST);
SELECT @ERROR = @@ERROR, @ROWCOUNT = @@ROWCOUNT;
IF @ERROR <> 0 OR @ROWCOUNT = 0 GOTO LBL_ERROR;
END
END;
UPDATE dbo.T_DEVIS_DEV SET DEV_ISCALC = 0
WHERE DEV_ID = @DEV_ID_DEST;
COMMIT TRANSACTION;
RETURN (0)
LBL_ERROR:
IF @@TRANCOUNT > 1
COMMIT TRANSACTION
IF @TRANCOUNT > 0
ROLLBACK TRANSACTION
IF @ROWCOUNT >= 1
ROLLBACK TRANSACTION
RETURN (-1)
END |
Partager