Project

General

Profile

PL_IMPORT_App.txt

Truong Nguyen Vu, 11/25/2020 08:16 AM

 
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