1
|
|
2
|
|
3
|
ALTER PROCEDURE [dbo].[PL_IMPORT_App]
|
4
|
@P_IMPORT_ID VARCHAR(15),
|
5
|
@P_AUTH_STATUS VARCHAR(1),
|
6
|
@P_CHECKER_ID VARCHAR(12),
|
7
|
@P_APPROVE_DT DATETIME = NULL
|
8
|
AS
|
9
|
|
10
|
BEGIN TRY
|
11
|
BEGIN TRANSACTION;
|
12
|
|
13
|
DECLARE @IS_UPDATE BIT
|
14
|
|
15
|
|
16
|
SET @IS_UPDATE = (SELECT IS_UPDATE FROM dbo.PL_IMPORT WHERE IMPORT_ID=@P_IMPORT_ID )
|
17
|
|
18
|
|
19
|
--VALIDATE dữ liệu
|
20
|
|
21
|
DECLARE @IMPORT_YEAR VARCHAR(4)
|
22
|
|
23
|
SET @IMPORT_YEAR=(SELECT CAST(IMP_YEAR AS VARCHAR(4)) FROM dbo.PL_IMPORT WHERE IMPORT_ID=@P_IMPORT_ID)
|
24
|
|
25
|
IF(@IS_UPDATE=0)
|
26
|
BEGIN
|
27
|
IF(EXISTS(
|
28
|
SELECT DT.TRADE_ID FROM dbo.PL_MASTER PM
|
29
|
LEFT JOIN dbo.PL_TRADEDETAIL DT ON PM.PLAN_ID=DT.PLAN_ID
|
30
|
WHERE PM.YEAR=@IMPORT_YEAR AND (EXISTS(
|
31
|
SELECT Tmp.GOOD_ID FROM PL_IMPORT_DT Tmp WHERE (Tmp.IMP_YEAR=PM.YEAR AND Tmp.PLAN_TYPE_ID=PM.PLAN_TYPE_ID
|
32
|
AND Tmp.COST_ID=PM.COST_ID AND Tmp.BRANCH_ID=PM.BRANCH_ID
|
33
|
AND Tmp.DEP_ID=PM.DEPT_ID AND Tmp.GOOD_ID=DT.GOODS_ID) AND( (Tmp.QTY < ISNULL(DT.QUANTITY_EXE,0) AND ISNULL(DT.QUANTITY_EXE,0) >0) OR (Tmp.TOTAL_AMT< ISNULL(DT.AMT_EXE,0) AND ISNULL(DT.AMT_EXE,0) >0) )
|
34
|
) OR (NOT EXISTS(SELECT Tmp.GOOD_ID FROM PL_IMPORT_DT Tmp WHERE (Tmp.IMP_YEAR=PM.YEAR AND Tmp.PLAN_TYPE_ID=PM.PLAN_TYPE_ID
|
35
|
AND Tmp.COST_ID=PM.COST_ID AND Tmp.BRANCH_ID=PM.BRANCH_ID
|
36
|
AND Tmp.DEP_ID=PM.DEPT_ID AND Tmp.GOOD_ID=DT.GOODS_ID) ) AND( ISNULL(DT.QUANTITY_EXE,0) > 0 OR ISNULL(DT.AMT_EXE,0) >0)
|
37
|
))))
|
38
|
BEGIN
|
39
|
|
40
|
ROLLBACK TRANSACTION
|
41
|
SELECT '-1' as Result, '' IMPORT_ID, N'Hạn mục chỉnh sửa đã sử dụng vượt hạn mức chỉnh sửa' ErrorDesc
|
42
|
RETURN '-1'
|
43
|
END
|
44
|
END
|
45
|
|
46
|
|
47
|
|
48
|
|
49
|
|
50
|
|
51
|
-- Delete dữ liệu ko có trong import hiện tại.
|
52
|
IF(@IS_UPDATE=0)
|
53
|
BEGIN
|
54
|
UPDATE dbo.PL_TRADEDETAIL SET RECORD_STATUS=0 WHERE NOT EXISTS(SELECT DT.IMP_DT_ID FROM dbo.PL_IMPORT_DT DT WHERE DT.TRADE_ID=PL_TRADEDETAIL.TRADE_ID) AND PL_TRADEDETAIL.PLAN_ID IN (SELECT PLAN_ID FROM dbo.PL_MASTER WHERE YEAR=@IMPORT_YEAR)
|
55
|
|
56
|
UPDATE dbo.PL_MASTER SET RECORD_STATUS=0 WHERE YEAR=@IMPORT_YEAR AND NOT EXISTS(SELECT DT.IMP_DT_ID FROM dbo.PL_IMPORT_DT DT WHERE DT.PLAN_ID=PL_MASTER.PLAN_ID)
|
57
|
END
|
58
|
|
59
|
|
60
|
|
61
|
|
62
|
DECLARE @PLAN_CODE VARCHAR(20),
|
63
|
@PLAN_NAME NVARCHAR(200),
|
64
|
@YEAR INT,
|
65
|
@PLAN_TYPE_ID VARCHAR(15),
|
66
|
@COST_ID VARCHAR(15),
|
67
|
@BRANCH_ID VARCHAR(15),
|
68
|
@BRANCH_CODE VARCHAR(15),
|
69
|
@DEP_ID VARCHAR(15),
|
70
|
@DEP_CODE VARCHAR(15),
|
71
|
@GOOD_ID VARCHAR(15),
|
72
|
@QTY INT,
|
73
|
@TOTAL_AMT DECIMAL(18, 2),
|
74
|
@AMT_ETM DECIMAL(18, 2),
|
75
|
@AMT_EXE DECIMAL(18, 2),
|
76
|
@AMT_TF DECIMAL(18, 2),
|
77
|
@AMT_RECIVE_TF DECIMAL(18, 2),
|
78
|
@NOTES NVARCHAR(1000),
|
79
|
@IMP_AMT NUMERIC(18, 2),
|
80
|
@IMP_QTY NUMERIC(18, 0),
|
81
|
@MARKER_ID VARCHAR(15),
|
82
|
@EDIT_DT DATETIME,
|
83
|
@PLAN_ID VARCHAR(15),
|
84
|
@TRADE_ID VARCHAR(15),
|
85
|
@REF_CODE VARCHAR(20),
|
86
|
@REF_NAME NVARCHAR(200),
|
87
|
@IMP_DT_ID VARCHAR(20)
|
88
|
|
89
|
|
90
|
SELECT @MARKER_ID=MAKER_ID,@EDIT_DT=EDIT_DT FROM dbo.PL_IMPORT WHERE IMPORT_ID=@P_IMPORT_ID
|
91
|
|
92
|
|
93
|
DECLARE Plan_Master CURSOR FOR
|
94
|
SELECT IM.PLAN_CODE,IM.IMP_NAME,IM.IMP_YEAR,SUM(ISNULL(IMDT.QTY,0)) AS QTY,SUM(ISNULL(IMDT.TOTAL_AMT,0)) AS AMT, IMDT.PLAN_TYPE_ID, IMDT.COST_ID,IMDT.BRANCH_ID,IMDT.DEP_ID,
|
95
|
IMDT.PLAN_ID,IMDT.BRANCH_CODE,IMDT.DEP_CODE
|
96
|
FROM dbo.PL_IMPORT IM
|
97
|
LEFT JOIN dbo.PL_IMPORT_DT IMDT ON IM.IMPORT_ID=IMDT.IMPORT_ID
|
98
|
WHERE IM.IMPORT_ID = @P_IMPORT_ID AND IMDT.IS_UPDATE=1
|
99
|
GROUP BY IM.PLAN_CODE,IM.IMP_NAME,IM.IMP_YEAR,IMDT.PLAN_TYPE_ID,IMDT.COST_ID,IMDT.BRANCH_ID,IMDT.DEP_ID,IMDT.PLAN_ID,IMDT.BRANCH_CODE,IMDT.DEP_CODE
|
100
|
OPEN Plan_Master;
|
101
|
|
102
|
FETCH NEXT FROM Plan_Master INTO @PLAN_CODE,@PLAN_NAME,@YEAR,@IMP_QTY,@IMP_AMT, @PLAN_TYPE_ID,@COST_ID,@BRANCH_ID,@DEP_ID,@PLAN_ID,@BRANCH_CODE,@DEP_CODE
|
103
|
|
104
|
WHILE @@FETCH_STATUS = 0
|
105
|
BEGIN
|
106
|
|
107
|
SET @PLAN_NAME=N'KẾ HOẠCH NGÂN SÁCH '+ CAST( @YEAR AS VARCHAR(10))
|
108
|
SET @PLAN_CODE= @DEP_CODE+(SELECT RIGHT(CAST( @YEAR AS VARCHAR(10)),2))
|
109
|
|
110
|
IF(@PLAN_ID IS NULL OR @PLAN_ID='' )
|
111
|
BEGIN
|
112
|
EXEC SYS_CodeMasters_Gen 'PL_MASTER', @PLAN_ID out
|
113
|
IF @PLAN_ID='' OR @PLAN_ID IS NULL GOTO ABORT
|
114
|
|
115
|
INSERT INTO dbo.PL_MASTER
|
116
|
(
|
117
|
PLAN_ID, PLAN_CODE,PLAN_NAME,BRANCH_ID,DEPT_ID,EFFECT_DT,PLAN_TYPE,TOTAL_AMT,APPROVE_VALUE,
|
118
|
VERSON,YEAR,STATUS,NOTES,RECORD_STATUS, MAKER_ID,CREATE_DT,AUTH_STATUS,CHECKER_ID,APPROVE_DT,PLAN_TYPE_ID,COST_ID)
|
119
|
VALUES
|
120
|
( @PLAN_ID,@PLAN_CODE,@PLAN_NAME,@BRANCH_ID,@DEP_ID,GETDATE(),'',@IMP_AMT, @IMP_AMT,
|
121
|
1,@YEAR,'1', N'','1', @MARKER_ID,@EDIT_DT,@P_AUTH_STATUS, @P_CHECKER_ID, CAST(@P_APPROVE_DT AS DATE), @PLAN_TYPE_ID,@COST_ID
|
122
|
)
|
123
|
END
|
124
|
ELSE
|
125
|
BEGIN
|
126
|
UPDATE dbo.PL_MASTER SET MAKER_ID=@MARKER_ID,CREATE_DT=@EDIT_DT,AUTH_STATUS=@P_AUTH_STATUS,CHECKER_ID=@P_CHECKER_ID,APPROVE_DT=CAST(@P_APPROVE_DT AS DATE)
|
127
|
,TOTAL_AMT=@IMP_AMT,APPROVE_VALUE=@IMP_AMT,VERSON=VERSON+1,PLAN_CODE=@PLAN_CODE,PLAN_NAME=@PLAN_NAME WHERE PLAN_ID=@PLAN_ID
|
128
|
END
|
129
|
|
130
|
|
131
|
|
132
|
DECLARE Plan_Detail CURSOR FOR
|
133
|
SELECT IMP_DT_ID,GOOD_ID,QTY,TOTAL_AMT,NOTES,TRADE_ID,REF_CODE,REF_NAME,AMT_ETM,AMT_EXE,AMT_TF,AMT_RECEIVE_TF FROM dbo.PL_IMPORT_DT
|
134
|
WHERE IMPORT_ID = @P_IMPORT_ID AND IS_UPDATE=1 AND PLAN_TYPE_ID=@PLAN_TYPE_ID AND ISNULL(COST_ID,'')=ISNULL(@COST_ID,'') AND BRANCH_ID=@BRANCH_ID AND DEP_ID=@DEP_ID
|
135
|
OPEN Plan_Detail
|
136
|
FETCH NEXT FROM Plan_Detail INTO @IMP_DT_ID,@GOOD_ID,@QTY,@TOTAL_AMT,@NOTES,@TRADE_ID,@REF_CODE,@REF_NAME,@AMT_ETM,@AMT_EXE,@AMT_TF,@AMT_RECIVE_TF
|
137
|
WHILE @@FETCH_STATUS = 0
|
138
|
BEGIN
|
139
|
IF(@TRADE_ID IS NULL OR @TRADE_ID='')
|
140
|
BEGIN
|
141
|
EXEC SYS_CodeMasters_Gen 'PL_TRADEDETAIL', @TRADE_ID out
|
142
|
IF @TRADE_ID='' OR @TRADE_ID IS NULL GOTO ABORT
|
143
|
|
144
|
DELETE FROM dbo.PL_TRADE_REF WHERE TRADE_ID=@TRADE_ID
|
145
|
|
146
|
INSERT INTO dbo.PL_TRADEDETAIL
|
147
|
(
|
148
|
TRADE_ID,
|
149
|
PLAN_ID,
|
150
|
GOODS_ID,
|
151
|
QUANTITY,
|
152
|
AMT_APP,
|
153
|
NOTES,
|
154
|
RECORD_STATUS,
|
155
|
MAKER_ID,
|
156
|
CREATE_DT,
|
157
|
AUTH_STATUS,
|
158
|
CHECKER_ID,
|
159
|
APPROVE_DT,
|
160
|
AMT_ETM,
|
161
|
AMT_EXE,
|
162
|
AMT_TF,
|
163
|
AMT_RECEIVE_TF
|
164
|
)
|
165
|
VALUES
|
166
|
( @TRADE_ID, -- TRADE_ID - varchar(15)
|
167
|
@PLAN_ID, -- PLAN_ID - varchar(15)
|
168
|
@GOOD_ID, -- GOODS_ID - varchar(15)
|
169
|
@QTY, -- QUANTITY - decimal(18, 0)
|
170
|
@TOTAL_AMT, -- PRICE - decimal(18, 0)
|
171
|
@NOTES, -- NOTES - nvarchar(1000)
|
172
|
'1', -- RECORD_STATUS - varchar(1)
|
173
|
@MARKER_ID, -- MAKER_ID - varchar(12)
|
174
|
CAST( @EDIT_DT AS DATE), -- CREATE_DT - datetime
|
175
|
@P_AUTH_STATUS, -- AUTH_STATUS - varchar(50)
|
176
|
@P_CHECKER_ID, -- CHECKER_ID - varchar(12)
|
177
|
CAST( @P_APPROVE_DT AS DATE), -- APPROVE_DT - datetime
|
178
|
@AMT_ETM,
|
179
|
@AMT_EXE,
|
180
|
@AMT_TF,
|
181
|
@AMT_RECIVE_TF
|
182
|
)
|
183
|
|
184
|
INSERT INTO dbo.PL_TRADE_REF
|
185
|
(
|
186
|
TRADE_ID,
|
187
|
REF_CODE,
|
188
|
REF_NAME
|
189
|
)
|
190
|
VALUES
|
191
|
( @TRADE_ID, -- TRADE_ID - varchar(15)
|
192
|
@REF_CODE, -- REF_CODE - varchar(50)
|
193
|
@REF_NAME -- REF_NAME - nvarchar(500)
|
194
|
)
|
195
|
|
196
|
END
|
197
|
|
198
|
ELSE
|
199
|
BEGIN
|
200
|
UPDATE dbo.PL_TRADEDETAIL SET
|
201
|
QUANTITY=@QTY,
|
202
|
AMT_APP=@TOTAL_AMT,
|
203
|
NOTES=@NOTES,
|
204
|
MAKER_ID=@MARKER_ID,
|
205
|
CREATE_DT=CAST(@EDIT_DT AS DATE),
|
206
|
AUTH_STATUS=@P_AUTH_STATUS,
|
207
|
CHECKER_ID= @P_CHECKER_ID,
|
208
|
APPROVE_DT=CAST(@P_APPROVE_DT AS DATE)
|
209
|
-- AMT_ETM=@AMT_ETM,
|
210
|
-- AMT_EXE=@AMT_EXE,
|
211
|
-- AMT_TF=@AMT_TF,
|
212
|
-- AMT_RECEIVE_TF=@AMT_RECIVE_TF
|
213
|
WHERE TRADE_ID=@TRADE_ID
|
214
|
END
|
215
|
|
216
|
|
217
|
|
218
|
UPDATE dbo.PL_IMPORT_DT SET PLAN_ID=@PLAN_ID,TRADE_ID=@TRADE_ID WHERE IMP_DT_ID=@IMP_DT_ID
|
219
|
|
220
|
FETCH NEXT FROM Plan_Detail INTO @IMP_DT_ID,@GOOD_ID,@QTY,@TOTAL_AMT,@NOTES,@TRADE_ID,@REF_CODE,@REF_NAME,@AMT_ETM,@AMT_EXE,@AMT_TF,@AMT_RECIVE_TF
|
221
|
END
|
222
|
CLOSE Plan_Detail
|
223
|
DEALLOCATE Plan_Detail
|
224
|
FETCH NEXT FROM Plan_Master INTO @PLAN_CODE,@PLAN_NAME,@YEAR,@IMP_QTY,@IMP_AMT, @PLAN_TYPE_ID,@COST_ID,@BRANCH_ID,@DEP_ID,@PLAN_ID,@BRANCH_CODE,@DEP_CODE
|
225
|
END
|
226
|
CLOSE Plan_Master
|
227
|
DEALLOCATE Plan_Master
|
228
|
|
229
|
UPDATE dbo.PL_IMPORT
|
230
|
SET AUTH_STATUS = @P_AUTH_STATUS,
|
231
|
CHECKER_ID = @P_CHECKER_ID,
|
232
|
APPROVE_DT = CAST( @P_APPROVE_DT AS DATE)
|
233
|
WHERE IMPORT_ID = @P_IMPORT_ID;
|
234
|
|
235
|
UPDATE dbo.PL_IMPORT_LOG SET AUTH_STATUS = @P_AUTH_STATUS,
|
236
|
CHECKER_ID = @P_CHECKER_ID,
|
237
|
APPROVE_DT = CAST( @P_APPROVE_DT AS DATE)
|
238
|
WHERE IMP_ID = @P_IMPORT_ID AND IMP_LOG_CODE= (SELECT TOP (1) IMP_LOG_CODE FROM dbo.PL_IMPORT_LOG WHERE IMP_ID=@P_IMPORT_ID ORDER BY IMP_LOG_ID DESC)
|
239
|
|
240
|
|
241
|
UPDATE dbo.PL_TRADEDETAIL SET PRICE = AMT_APP/ QUANTITY WHERE QUANTITY <> 0 OR QUANTITY IS NULL
|
242
|
UPDATE dbo.PL_TRADEDETAIL SET PRICE = AMT_APP WHERE QUANTITY = 0
|
243
|
|
244
|
UPDATE dbo.LIMIT_ACCUMULATE SET MAX_AMT=ISNULL((
|
245
|
SELECT TEMP.AMT_APP FROM (SELECT CD.DVDM_ID,SUM(ISNULL(PT.AMT_APP,0)) AS AMT_APP FROM dbo.CM_DVDM CD
|
246
|
LEFT JOIN dbo.CM_GOOD_DVDM CGD ON CGD.KHOI_ID=CD.DVDM_ID
|
247
|
LEFT JOIN dbo.PL_TRADEDETAIL PT ON PT.GOODS_ID=CGD.GD_ID
|
248
|
WHERE CD.IS_KHOI=1 AND PT.PLAN_ID IN (SELECT PLAN_ID FROM dbo.PL_MASTER WHERE YEAR=@IMPORT_YEAR)
|
249
|
GROUP BY CD.DVDM_ID
|
250
|
)TEMP WHERE TEMP.DVDM_ID=LIMIT_ACCUMULATE.DVDM_ID
|
251
|
),0) * (SELECT LIMIT_PERCENT FROM dbo.TL_SYSROLE_LIMIT WHERE TL_SYSROLE_LIMIT.ROLE_ID=LIMIT_ACCUMULATE.ROLE_ID AND LIMIT_TYPE='DCNS')/100
|
252
|
|
253
|
|
254
|
COMMIT TRANSACTION;
|
255
|
SELECT '0' AS Result,
|
256
|
'' ErrorDesc;
|
257
|
RETURN '0';
|
258
|
END TRY
|
259
|
BEGIN CATCH
|
260
|
ROLLBACK TRANSACTION;
|
261
|
SELECT '-1' AS Result,
|
262
|
'' ErrorDesc;
|
263
|
RETURN '-1';
|
264
|
END CATCH
|
265
|
ABORT:
|
266
|
BEGIN
|
267
|
ROLLBACK TRANSACTION;
|
268
|
SELECT '-1' AS Result,
|
269
|
'' ErrorDesc;
|
270
|
RETURN '-1';
|
271
|
END;
|
272
|
|
273
|
|
274
|
|
275
|
|
276
|
|
277
|
|
278
|
|