1
|
|
2
|
ALTER PROCEDURE [dbo].[TR_PO_MASTER_App]
|
3
|
@P_PO_ID VARCHAR(15),
|
4
|
@P_AUTH_STATUS VARCHAR(1),
|
5
|
@P_CHECKER_ID VARCHAR(12),
|
6
|
@P_APPROVE_DT VARCHAR(20)
|
7
|
|
8
|
AS
|
9
|
--Validation is here
|
10
|
DECLARE @ERRORSYS NVARCHAR(15) = ''
|
11
|
IF ( NOT EXISTS ( SELECT * FROM TR_PO_MASTER WHERE PO_ID = @P_PO_ID))
|
12
|
SET @ERRORSYS = 'PO-00001'
|
13
|
IF @ERRORSYS <> ''
|
14
|
BEGIN
|
15
|
SELECT ErrorCode Result, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
|
16
|
RETURN '0'
|
17
|
END
|
18
|
|
19
|
BEGIN TRANSACTION
|
20
|
DECLARE @ROLE_ID VARCHAR(50)
|
21
|
SET @ROLE_ID =(SELECT RoleName FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
|
22
|
SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
|
23
|
IF(@ROLE_ID IS NOT NULL AND @ROLE_ID <>'' AND @ROLE_ID IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC','PPGD'))
|
24
|
BEGIN
|
25
|
PRINT @ROLE_ID
|
26
|
END
|
27
|
ELSE
|
28
|
BEGIN
|
29
|
SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_CHECKER_ID)
|
30
|
IF(@ROLE_ID IS NULL OR @ROLE_ID ='')
|
31
|
BEGIN
|
32
|
SET @ROLE_ID =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID))
|
33
|
END
|
34
|
END
|
35
|
IF(@ROLE_ID NOT IN ('TPGD','PPGD','PP','TP','GDDV','PGD','KTT','TP','PP','TPTC','TC','GDK'))
|
36
|
BEGIN
|
37
|
ROLLBACK TRANSACTION
|
38
|
SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không nằm trong nhóm quyền được phép phê duyệt hợp đồng' ErrorDesc
|
39
|
RETURN '-1'
|
40
|
END
|
41
|
IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@P_PO_ID AND AUTH_STATUS ='R'))
|
42
|
BEGIN
|
43
|
ROLLBACK TRANSACTION
|
44
|
SELECT '-1' as Result, N'PO đang bị trả về! Vui lòng đợi nhân viên xử lý và gửi phê duyệt lại' ErrorDesc
|
45
|
RETURN '-1'
|
46
|
END
|
47
|
IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@P_PO_ID AND AUTH_STATUS ='E'))
|
48
|
BEGIN
|
49
|
ROLLBACK TRANSACTION
|
50
|
SELECT '-1' as Result, N'PO đang trong tình trạng lưu nháp! Vui lòng đợi nhân viên xử lý và gửi phê duyệt lại' ErrorDesc
|
51
|
RETURN '-1'
|
52
|
END
|
53
|
IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@P_PO_ID AND AUTH_STATUS ='A'))
|
54
|
BEGIN
|
55
|
ROLLBACK TRANSACTION
|
56
|
SELECT '-1' as Result, N'PO này đã được phê duyệt trước đó. Bạn không được phê duyệt lại' ErrorDesc
|
57
|
RETURN '-1'
|
58
|
END
|
59
|
IF((SELECT MAKER_ID FROM TR_PO_MASTER WHERE CONTRACT_ID =@P_PO_ID)=@p_CHECKER_ID AND @ROLE_ID NOT IN ('TPGD','PPGD','PP','TP','GDDV','PGD','KTT','TP','PP','TPTC','TC','GDK'))
|
60
|
BEGIN
|
61
|
ROLLBACK TRANSACTION
|
62
|
SELECT '-1' as Result, N'Người duyệt PO phải khác người tạo PO' ErrorDesc
|
63
|
RETURN '-1'
|
64
|
END
|
65
|
|
66
|
UPDATE TR_PO_MASTER SET AUTH_STATUS = @P_AUTH_STATUS, CHECKER_ID = @P_CHECKER_ID, APPROVE_DT = CONVERT(DATETIME,@P_APPROVE_DT,103)
|
67
|
WHERE PO_ID = @P_PO_ID
|
68
|
IF @@Error <> 0 GOTO ABORT
|
69
|
DECLARE @L_TRADE_ID VARCHAR(15),
|
70
|
@L_QUANTITY INT,
|
71
|
@L_PRICE DECIMAL(18,0), @CONTRACT_DT VARCHAR(15)
|
72
|
DECLARE @L_PLAN_ID VARCHAR(15)
|
73
|
|
74
|
DECLARE @l_SUMQUANTITY DECIMAL(10,0), @l_SUMAMT DECIMAL(10,0)
|
75
|
DECLARE @lst_PLANID TABLE(PLAN_ID VARCHAR(15))
|
76
|
|
77
|
DECLARE TRADE_CURSOR CURSOR FOR
|
78
|
SELECT A.TRADE_ID,A.PLAN_ID,A.QUANTITY,A.PRICE, A.CONTRACT_DT
|
79
|
FROM TR_PO_DETAIL A WHERE A.PO_ID = @P_PO_ID
|
80
|
|
81
|
OPEN TRADE_CURSOR
|
82
|
PRINT 'DETAIL'
|
83
|
FETCH NEXT FROM TRADE_CURSOR INTO @L_TRADE_ID,@L_PLAN_ID,@L_QUANTITY,@L_PRICE,@CONTRACT_DT
|
84
|
WHILE @@FETCH_STATUS = 0
|
85
|
BEGIN
|
86
|
|
87
|
IF @L_TRADE_ID IS NOT NULL AND LEN(@L_TRADE_ID) <> 0
|
88
|
BEGIN
|
89
|
PRINT 'UPDATE_TRADE'
|
90
|
--DAO THEM DIEU KIEN RECORD STATUS CHO TH HUY PO
|
91
|
SELECT @l_SUMQUANTITY = SUM(ISNULL(QUANTITY,0))
|
92
|
FROM TR_PO_DETAIL WHERE PLAN_ID = @L_PLAN_ID AND TRADE_ID = @L_TRADE_ID AND RECORD_STATUS='1'
|
93
|
--UPDATE PL_TRADEDETAIL SET QUANTITY_EXE = (QUANTITY_EXE + CONVERT(INT,@L_QUANTITY)) WHERE TRADE_ID = @L_TRADE_ID
|
94
|
--UPDATE PL_TRADEDETAIL SET QUANTITY_EXE = @l_SUMQUANTITY WHERE TRADE_ID = @L_TRADE_ID
|
95
|
END
|
96
|
|
97
|
--CAP NHAT SO LUONG DA MUA TRONG HOP DONG THIEUVQ 14092016
|
98
|
IF @CONTRACT_DT <> '' AND @CONTRACT_DT IS NOT NULL
|
99
|
BEGIN
|
100
|
UPDATE TR_CONTRACT_DT SET QUANTITY_USE = (SELECT SUM(A.QUANTITY) FROM TR_PO_DETAIL A WHERE A.CONTRACT_DT = @CONTRACT_DT AND RECORD_STATUS='1')
|
101
|
WHERE CD_ID = @CONTRACT_DT
|
102
|
END
|
103
|
|
104
|
--LUU LAI DANH SACH CAC KE HOACH DUOC GOI TRONG PO
|
105
|
IF NOT EXISTS(SELECT * FROM @lst_PLANID WHERE PLAN_ID = @L_PLAN_ID)
|
106
|
INSERT INTO @lst_PLANID VALUES(@L_PLAN_ID)
|
107
|
|
108
|
-- TRU TIEN CHO KE HOACH
|
109
|
--PRINT @L_PLAN_ID
|
110
|
--PRINT @L_QUANTITY
|
111
|
----UPDATE PL_MASTER SET TOTAL_AMT = (TOTAL_AMT - CONVERT(INT,@L_QUANTITY) * @L_PRICE) WHERE PLAN_ID = @L_PLAN_ID
|
112
|
--UPDATE PL_MASTER SET TOTAL_AMT = (TOTAL_AMT - CONVERT(INT,@L_QUANTITY) * @L_PRICE) WHERE PLAN_ID = @L_PLAN_ID
|
113
|
--IF @@Error <> 0 GOTO ABORT
|
114
|
FETCH NEXT FROM TRADE_CURSOR INTO @L_TRADE_ID,@L_PLAN_ID,@L_QUANTITY,@L_PRICE, @CONTRACT_DT
|
115
|
END
|
116
|
CLOSE TRADE_CURSOR
|
117
|
DEALLOCATE TRADE_CURSOR
|
118
|
|
119
|
--TINH TONG TIEN DA THUC HIEN TREN KE HOACH TRONG PO
|
120
|
SET @L_PLAN_ID = '';
|
121
|
DECLARE PLCUR CURSOR FOR SELECT * FROM @lst_PLANID
|
122
|
OPEN PLCUR
|
123
|
FETCH NEXT FROM PLCUR INTO @L_PLAN_ID
|
124
|
WHILE @@FETCH_STATUS = 0
|
125
|
BEGIN
|
126
|
--UPDATE PL_MASTER SET TOTAL_AMT = (SELECT SUM(ISNULL(QUANTITY,0)*ISNULL(PRICE,0))
|
127
|
--FROM TR_PO_DETAIL WHERE PLAN_ID = @L_PLAN_ID AND RECORD_STATUS='1')
|
128
|
--WHERE PLAN_ID = @L_PLAN_ID
|
129
|
|
130
|
FETCH NEXT FROM PLCUR INTO @L_PLAN_ID
|
131
|
END
|
132
|
CLOSE PLCUR
|
133
|
DEALLOCATE PLCUR
|
134
|
-- TRU SO LUONG TRONG CHI TIET KE HOACH
|
135
|
-- INSERT VAO LOG
|
136
|
INSERT INTO dbo.PL_PROCESS
|
137
|
(
|
138
|
REQ_ID,
|
139
|
PROCESS_ID,
|
140
|
CHECKER_ID,
|
141
|
APPROVE_DT,
|
142
|
PROCESS_DESC,NOTES
|
143
|
)
|
144
|
VALUES
|
145
|
( @p_PO_ID, -- REQ_ID - varchar(15)
|
146
|
'APP', -- PROCESS_ID - varchar(10)
|
147
|
@P_CHECKER_ID, -- CHECKER_ID - varchar(15)
|
148
|
GETDATE(), -- APPROVE_DT - datetime
|
149
|
N'Phê duyệt phiếu thành công' ,N'Phê duyệt PO')
|
150
|
COMMIT TRANSACTION
|
151
|
SELECT '0' as Result, N'PO số: '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID =@P_PO_ID)+N' đã được phê duyệt thành công. Bạn có thể thực hiện thanh toán hoặc tạm ứng cho PO' ErrorDesc
|
152
|
RETURN '0'
|
153
|
ABORT:
|
154
|
BEGIN
|
155
|
PRINT 'ERROR'
|
156
|
ROLLBACK TRANSACTION
|
157
|
CLOSE TRADE_CURSOR
|
158
|
DEALLOCATE TRADE_CURSOR
|
159
|
SELECT '-1' as Result, '' ErrorDesc
|
160
|
RETURN '-1'
|
161
|
End
|
162
|
|
163
|
|
164
|
|
165
|
|
166
|
|
167
|
|