Project

General

Profile

FIX LOI 2.txt

Luc Tran Van, 05/23/2023 09:23 AM

 
1

    
2
ALTER PROCEDURE dbo.ASS_AMORT_Do
3
	@p_EXECUTE_DATE varchar(20) = NULL,  --Mac dinh la ngay hien tai cua he thong, duoc truyen tu UI
4
	@p_MAKER_ID	varchar(100)  = NULL,
5
	@p_CHECKER_ID varchar(15)  = NULL,
6
	@p_ASSET_TYPE VARCHAR(15) = 'TSCD',
7
	@p_BRANCH_ID_LST XML = NULL
8
AS
9
BEGIN TRY
10
	declare @l_AMORT_ID varchar(15), @l_AMORTDT_ID varchar(15)
11
	declare @l_LAST_AMORT_ID varchar(15) = NULL
12
	declare @l_AMORT_TERM nvarchar(50) = ''
13
	
14
	declare @l_ASSET_ID varchar(15)
15
	declare @l_AMORTIZED_AMT decimal(18,0)
16
	declare @l_AMORTIZED_MONTH int
17
	declare @l_AMORT_AMT decimal(18,0)
18
	declare @l_AMORT_MONTH decimal(18,2)
19
	declare @l_AMORT_END_DATE datetime, @l_AMORT_START_DATE datetime
20
	declare @l_FIRST_AMORT_AMT decimal(18,0), @l_MONTHLY_AMORT_AMT decimal(18,0)
21
	declare @l_BRANCH_ID varchar(15)
22
	declare @l_DEP_ID varchar(15)	
23
	declare @l_BRANCH_ID_DO varchar(15) = NULL, @l_BRANCH_TYPE_DO VARCHAR(15)
24
	declare @l_CURR_AMORT_AMT decimal(18,0)
25
	declare @l_TOTAL_AMT decimal(18,0)
26
	declare @l_CURR_AMORT_STATUS nvarchar(100)
27
	declare @l_DESC nvarchar(1000)
28
	DECLARE @ERRORSYS NVARCHAR(15) = '' 
29
	DECLARE @LST_BRANCH TABLE ( BRANCHID VARCHAR(15), BRANCHCODE VARCHAR(15))
30

    
31
BEGIN TRANSACTION	
32

    
33
	--Thieuvq Them gia tri mac dinh
34
	--
35
	declare @l_AmortIdDefault varchar(100) = '',@l_AMORTTERMDefault varchar(100) = '',
36
	@l_TOTALAMTDefault decimal (18,2) = 0,@l_PROCESSSTATUSDefault varchar(100) = '',
37
	@l_ExecDateDefault datetime = null, @l_StatusNameDef varchar(100) = '', @l_NotesDef varchar(100) = ''
38
	--
39

    
40
	declare @sExecDT datetime = convert(datetime, @p_EXECUTE_DATE, 103)
41
	
42
	select @l_LAST_AMORT_ID = AMORT_ID
43
	FROM ASS_AMORT
44
	WHERE IS_LEAF = 'Y'
45

    
46
	SET @l_AMORT_TERM = convert(varchar(2), datepart(month, @sExecDT)) + '/' + convert(varchar(4), datepart(year, @sExecDT))
47

    
48
	--Put valodation here
49

    
50
	--THIEUVQ 11/07/2014
51
	/***********LAY BRANCH_ID CUA USER THUC HIEN CHAY KHAU HAO**************/
52
	SET @l_BRANCH_ID_DO = 'DV0001'
53
	IF @l_BRANCH_ID_DO = '' OR @l_BRANCH_ID_DO IS NULL
54
	BEGIN
55
		SET @ERRORSYS = 'ASS-AMR-0005'	
56
		GOTO THROW_ERR
57
	END
58

    
59
	--THIEUVQ 29092016 - BO DIEU KIEN KHONG CHO PGD CHAY PHAN BO
60
	SELECT @l_BRANCH_TYPE_DO = BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @l_BRANCH_ID_DO
61
	--IF @l_BRANCH_TYPE_DO = 'PGD' OR @l_BRANCH_TYPE_DO IS NULL
62
	--BEGIN
63
	--	SET @ERRORSYS = 'ASS-AMR-1006'	
64
	--	GOTO THROW_ERR
65
	--END
66
	--11/07/2014
67

    
68
	----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
69
			IF @p_BRANCH_ID_LST IS NOT NULL AND @l_BRANCH_TYPE_DO = 'CN'
70
			BEGIN				
71
				Declare @hdoc INT
72
				Exec sp_xml_preparedocument @hdoc Output, @p_BRANCH_ID_LST	
73

    
74
				INSERT INTO @LST_BRANCH
75
				SELECT *
76
				FROM OPENXML(@hdoc,'/Root/BRANCHLIST',2)
77
				WITH 
78
				(					
79
					BRANCH_ID	varchar(15),
80
					BRANCH_CODE	varchar(15)
81
				)				
82
			END
83
	-----------------------------------------------------------------------------------------------
84

    
85
	/******** kiem tra giao dich chua duyet **********************/
86
	IF @p_ASSET_TYPE = 'TSCD'
87
	BEGIN
88
		IF EXISTS(SELECT 1 FROM ASS_PENDING_ITEM A WHERE A.AUTH_STATUS = 'U' AND TYPE_ID = 'TSCD')--THIEUVQ THEM DIEU KIEN KIEM TRA THEO DON VI
89
		BEGIN
90
			SET @ERRORSYS = 'ASS-AMR-0002'	
91
			GOTO THROW_ERR
92
		END
93
	END
94
	ELSE
95
	BEGIN
96
		IF EXISTS(SELECT 1 FROM ASS_PENDING_ITEM A WHERE A.AUTH_STATUS = 'U' AND TYPE_ID = 'CCLD' AND TRAN_TYPE NOT IN ('ASS_ADDNEW','ASS_USE')
97
		AND (BRANCH_CREATE = @l_BRANCH_ID_DO 
98
			OR (@l_BRANCH_TYPE_DO = 'CN' 
99
				--AND BRANCH_CREATE IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))))--THIEUVQ THEM DIEU KIEN KIEM TRA THEO DON VI
100
				AND BRANCH_CREATE IN (SELECT BRANCHID FROM @LST_BRANCH))))--THIEUVQ 29092016 - SUA DIEU KIEN PGD THUOC DANH SACH DA CHON
101
				
102
		BEGIN
103
			SET @ERRORSYS = 'ASS-AMR-0002'	
104
			GOTO THROW_ERR
105
		END
106
	END
107

    
108

    
109
	/*******KIEM TRA KY KHAU HAO DA TRONG THANG DA DUOC TAO HAY CHUA******/
110
	IF @p_ASSET_TYPE = 'TSCD'
111
	BEGIN
112
		IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT)
113
												  AND ASSET_TYPE = 'TSCD')	
114
		BEGIN
115
			SET @ERRORSYS = 'ASS-AMR-0001'
116
			GOTO THROW_ERR
117
		END
118
	END
119
	ELSE
120
	BEGIN		
121
		IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT)
122
												AND ASSET_TYPE = 'CCLD' AND BRANCH_ID = @l_BRANCH_ID_DO)--THIEUVQ THEM DIEU KIEN KIEM TRA THEO LOAI TAI SAN
123
		BEGIN
124
			SET @ERRORSYS = 'ASS-AMR-0006'
125
			GOTO THROW_ERR
126
		END
127
		
128
		----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
129
		IF @l_BRANCH_TYPE_DO = 'CN'
130
		BEGIN
131
			DECLARE @LSTERROR VARCHAR(500) = ''
132
			SELECT @LSTERROR = @LSTERROR + B.BRANCHCODE + ';' 
133
			FROM ASS_AMORT A 
134
			LEFT JOIN @LST_BRANCH B ON B.BRANCHID = A.BRANCH_ID
135
			WHERE A.AMORT_TERM = @l_AMORT_TERM AND A.BRANCH_ID IN (SELECT BRANCHID FROM @LST_BRANCH)
136
			
137
			IF LEN(@LSTERROR) > 0	
138
			BEGIN
139
				SELECT '-1' Result, N'PGD sau đã tự chạy phân bổ: ' + @LSTERROR ErrorDesc, @l_AmortIdDefault as AMORT_ID, @l_AMORTTERMDefault as AMORT_TERM, 
140
					@l_TOTALAMTDefault as TOTAL_AMT, @l_PROCESSSTATUSDefault as PROCESS_STATUS ,@l_StatusNameDef as STATUS_NAME, 
141
					@l_ExecDateDefault AS EXECUTE_DT,@l_NotesDef AS NOTES
142

    
143
				IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
144
				RETURN '0'
145
			END			
146
		END
147
		ELSE 
148
		BEGIN				
149
			IF @l_BRANCH_TYPE_DO = 'PGD'
150
			BEGIN			
151
				IF EXISTS(SELECT 1 FROM ASS_AMORT_BRN A WHERE A.AMORT_TERM = @l_AMORT_TERM AND A.BRANCH_ID = @l_BRANCH_ID_DO)
152
				BEGIN
153
					SET @ERRORSYS = 'ASS-AMR-0007'
154
					GOTO THROW_ERR
155
				END
156
			END
157
		END
158
	END
159

    
160
	/***** Ngay thuc thi khau hao phai lon hon ngay chay cuoi cung da chay *****/
161
	--IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE convert(date,A.EXECUTE_DT) > convert(date,@sExecDT))
162
	--BEGIN
163
	--	SET @ERRORSYS = 'ASS-AMR-0004'
164
	--	GOTO THROW_ERR
165
	--END		
166
	/************ Kiem tra cac tai khoan hach toan trong bang ASS_GROUP ******/
167
	IF EXISTS(SELECT * 
168
				FROM ASS_GROUP A 
169
				WHERE 1=1
170
					AND A.IS_LEAF='Y' 
171
					AND ISNULL(A.ASSET_ACCTNO,'') = '' 
172
					AND ISNULL(A.AMORT_ACCTNO,'') = ''
173
					AND ISNULL(A.EXP_ACCTNO,'') = ''
174
					AND ISNULL(A.INC_ACCTNO,'') = ''
175
					AND ISNULL(A.LIQ_ACCTNO,'') = ''
176
					AND A.TYPE_ID = @p_ASSET_TYPE)
177
	BEGIN					
178
		SET @ERRORSYS = 'ASS-AMR-0003'
179
		GOTO THROW_ERR
180
	END
181
		
182
THROW_ERR:			
183
	IF @ERRORSYS <> '' 
184
	BEGIN
185

    
186
		SELECT ErrorCode Result, ErrorDesc ErrorDesc, @l_AmortIdDefault as AMORT_ID, @l_AMORTTERMDefault as AMORT_TERM, 
187
					@l_TOTALAMTDefault as TOTAL_AMT, @l_PROCESSSTATUSDefault as PROCESS_STATUS ,@l_StatusNameDef as STATUS_NAME, 
188
					@l_ExecDateDefault AS EXECUTE_DT,@l_NotesDef AS NOTES
189
		FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
190

    
191
		IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
192
		RETURN '0'
193
	END	
194

    
195
	--oepn cursor
196
	declare pCur cursor for
197
		 SELECT A.ASSET_ID, A.AMORTIZED_AMT, A.AMORTIZED_MONTH,
198
				A.AMORT_AMT,  A.AMORT_MONTH, A.AMORT_END_DATE, A.AMORT_START_DATE,
199
				A.FIRST_AMORT_AMT, A.MONTHLY_AMORT_AMT, A.BRANCH_ID, A.DEPT_ID
200
		 FROM ASS_MASTER A
201
		 WHERE A.AMORT_STATUS IN ('CKH','DKH')
202
			AND (convert(date, A.AMORT_START_DATE) <= convert(date, @sExecDT) OR ( dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(A.AMORT_START_DATE)))
203
			AND ISNULL(A.AMORTIZED_AMT,0) < A.AMORT_AMT
204
			AND A.RECORD_STATUS = '1'
205
			AND A.AUTH_STATUS = 'A'
206
			AND A.TYPE_ID = @p_ASSET_TYPE--THIEUVQ	
207
--			AND (A.BRANCH_ID = @l_BRANCH_ID_DO 
208
--				OR (@p_ASSET_TYPE = 'TSCD')
209
--				OR (@l_BRANCH_TYPE_DO = 'CN' --NEU LA CN THI PHAN BO LUON CHO PGD THUOC CHI NHANH DO
210
--					--AND A.BRANCH_ID IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))) --THIEUVQ
211
--					AND A.BRANCH_ID IN (SELECT BRANCHID FROM @LST_BRANCH))) --THIEUVQ CHINH SUA 28092016
212

    
213
	open pCur
214
		
215
	--Update ky khau hao truoc khong con la nut la
216
	IF @l_LAST_AMORT_ID IS NOT NULL 
217
	BEGIN
218
		UPDATE ASS_AMORT 
219
		SET IS_LEAF = 'N'
220
		WHERE AMORT_ID = @l_LAST_AMORT_ID
221
	END	
222

    
223
	--set dien giai
224
	IF @p_ASSET_TYPE = 'TSCD'
225
		SET @l_DESC = N'Khấu hao kỳ ' + @l_AMORT_TERM
226
	ELSE
227
		SET @l_DESC = N'Phân bổ kỳ ' + @l_AMORT_TERM
228
 
229
	--Insert ky khau hao moi
230
	EXEC SYS_CodeMasters_Gen 'ASS_AMORT', @l_AMORT_ID out
231
	
232
	INSERT INTO ASS_AMORT
233
	(
234
		AMORT_ID,
235
		AMORT_TERM,
236
		EXECUTE_DT,
237
		TOTAL_AMT,
238
		IS_LEAF,
239
		PARENT_ID,
240
		NOTES,
241
		PROCESS_STATUS,
242
		[RECORD_STATUS],
243
		[MAKER_ID],
244
		[CREATE_DT],
245
		[AUTH_STATUS],
246
		[CHECKER_ID],
247
		[APPROVE_DT],
248
		[BRANCH_ID],
249
		[ASSET_TYPE]
250
	)
251
	VALUES
252
	(
253
		@l_AMORT_ID,
254
		@l_AMORT_TERM,
255
		CONVERT(datetime, @p_EXECUTE_DATE, 103),
256
		0,
257
		'Y',
258
		@l_LAST_AMORT_ID,
259
		@l_DESC,--N'Khấu hao kỳ ' + @l_AMORT_TERM,
260
		'P', --Pending cho chay khau hao
261
		'1',
262
		@p_MAKER_ID,
263
		GETDATE(),
264
		'A',
265
		@p_CHECKER_ID,
266
		GETDATE(),
267
		@l_BRANCH_ID_DO,
268
		@p_ASSET_TYPE
269
	)	
270
 
271
	----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
272
	IF @l_BRANCH_TYPE_DO = 'CN'
273
	BEGIN
274
		INSERT INTO ASS_AMORT_BRN SELECT @l_AMORT_ID, @l_AMORT_TERM, BRANCHID FROM @LST_BRANCH
275
	END
276
	-----------------------------------------------------------------------------------------------
277
	SET @l_TOTAL_AMT = 0	
278
 
279
	--Tinh khau hao cho tung tai san
280
	FETCH NEXT FROM pCur INTO  @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH,
281
				@l_AMORT_AMT,  @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE,
282
				@l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID
283
	
284
	WHILE @@FETCH_STATUS = 0	
285
	BEGIN
286
		--SET @l_DESC = N'Khấu hao kỳ ' + @l_AMORT_TERM
287
	
288
		IF (@l_AMORTIZED_MONTH = 0) --Khau hao thang dau tien
289
		BEGIN
290
			SET @l_CURR_AMORT_AMT = @l_FIRST_AMORT_AMT
291
			IF(@l_AMORTIZED_AMT>0)
292
        SET  @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT
293
      --SET @l_CURR_AMORT_STATUS = 'DKH'
294
		END
295
		ELSE IF dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(@l_AMORT_END_DATE) --Ky khau hao cuoi cung
296
		BEGIN
297
      IF(@l_AMORT_AMT - @l_AMORTIZED_AMT > @l_MONTHLY_AMORT_AMT )
298
 	        SET @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT
299
      ELSE
300
			  SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
301
			--SET @l_CURR_AMORT_STATUS = 'KHX'	
302
			print 'last amort'	+ @l_ASSET_ID
303
		END
304
		ELSE --tai san dang khau hao binh thuong
305
		BEGIN
306
			SET @l_CURR_AMORT_AMT = @l_MONTHLY_AMORT_AMT
307
			--SET @l_CURR_AMORT_STATUS = 'DKH'
308
			--THIEUVQ THEM DK KHONG KHAU HAO AM 13112017
309
			IF (@l_AMORTIZED_AMT + @l_CURR_AMORT_AMT) > @l_AMORT_AMT
310
				SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
311
		END
312
	
313
		--Insert to bang ASS_AMORT_DT
314
		EXEC SYS_CodeMasters_Gen 'ASS_AMORT_DT', @l_AMORTDT_ID out
315
	
316
		INSERT INTO ASS_AMORT_DT
317
		(
318
			AMORTDT_ID,
319
			AMORT_ID,
320
			AMORT_DT,
321
			CRDR,
322
			BRANCH_ID,
323
			DEP_ID,
324
			ASSET_ID,
325
			AMORT_AMT,
326
			GROUP_ID,
327
			EXECUTED,
328
			TRN_TYPE,
329
			TRN_DESC
330
		)
331
		VALUES
332
		(
333
			@l_AMORTDT_ID,
334
			@l_AMORT_ID,
335
			@sExecDT,
336
			'C',
337
			@l_BRANCH_ID,
338
			@l_DEP_ID,
339
			@l_ASSET_ID,
340
			@l_CURR_AMORT_AMT,
341
			NULL, --Khong chay khau hao theo group
342
			'0',
343
			'AMORT',
344
			@l_DESC
345
		)
346
		
347
		SET @l_TOTAL_AMT = @l_TOTAL_AMT + @l_CURR_AMORT_AMT
348

    
349
		FETCH NEXT FROM pCur INTO  @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH,
350
					@l_AMORT_AMT,  @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE,
351
					@l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID
352
	END
353
	
354
	UPDATE ASS_AMORT
355
	SET TOTAL_AMT = @l_TOTAL_AMT
356
	WHERE AMORT_ID = @l_AMORT_ID
357
	
358
END TRY
359

    
360
BEGIN CATCH	
361
		CLOSE pCur
362
		DEALLOCATE pCur
363

    
364
	IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
365
		SELECT '-1' as Result, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE() ErrorDesc, 
366
		'' AMORT_ID, '' AMORT_TERM, 0 TOTAL_AMT, NULL EXECUTE_DT, '' STATUS_NAME, '' NOTES
367
		
368
	RETURN '-1'	
369

    
370
END CATCH;
371

    
372
	CLOSE pCur
373
	DEALLOCATE pCur
374
	
375
IF @@TRANCOUNT>0 COMMIT TRANSACTION
376

    
377
SELECT '0' as Result, '' ErrorDesc, AMORT_ID, AMORT_TERM, TOTAL_AMT, EXECUTE_DT,
378
		CASE WHEN PROCESS_STATUS='P' THEN N'Chờ thực thi' ELSE N'Đã thực thi' END STATUS_NAME, NOTES
379
		FROM ASS_AMORT WHERE AMORT_ID = @l_AMORT_ID
380
RETURN '0'
381