juanpablo@3490
|
1 |
<?xml version="1.0"?>
|
juanpablo@3490
|
2 |
<database name="FUNCTION M_INOUT_POST">
|
juanpablo@3490
|
3 |
<function name="M_INOUT_POST" type="NULL">
|
juanpablo@3490
|
4 |
<parameter name="p_pinstance_id" type="VARCHAR" mode="in">
|
juanpablo@3490
|
5 |
<default/>
|
juanpablo@3490
|
6 |
</parameter>
|
juanpablo@3490
|
7 |
<parameter name="p_inout_id" type="VARCHAR" mode="in">
|
juanpablo@3490
|
8 |
<default/>
|
juanpablo@3490
|
9 |
</parameter>
|
gorkaion@239
|
10 |
<body><![CDATA[/*************************************************************************
|
juanpablo@771
|
11 |
* The contents of this file are subject to the Compiere Public
|
juanpablo@771
|
12 |
* License 1.1 ("License"); You may not use this file except in
|
juanpablo@771
|
13 |
* compliance with the License. You may obtain a copy of the License in
|
juanpablo@771
|
14 |
* the legal folder of your Openbravo installation.
|
carlos@0
|
15 |
* Software distributed under the License is distributed on an
|
carlos@0
|
16 |
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
carlos@0
|
17 |
* implied. See the License for the specific language governing rights
|
carlos@0
|
18 |
* and limitations under the License.
|
juanpablo@778
|
19 |
* The Original Code is Compiere ERP & Business Solution
|
juanpablo@771
|
20 |
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
|
carlos@0
|
21 |
* Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke,
|
carlos@0
|
22 |
* parts created by ComPiere are Copyright (C) ComPiere, Inc.;
|
carlos@0
|
23 |
* All Rights Reserved.
|
ggi@6702
|
24 |
* Contributor(s): Openbravo SLU
|
pandeeswari@21778
|
25 |
* Contributions are Copyright (C) 2001-2014 Openbravo, S.L.U.
|
juanpablo@771
|
26 |
*
|
juanpablo@771
|
27 |
* Specifically, this derivative work is based upon the following Compiere
|
juanpablo@771
|
28 |
* file and version.
|
carlos@0
|
29 |
*************************************************************************
|
carlos@0
|
30 |
* $Id: M_InOut_Post.sql,v 1.8 2003/09/05 04:58:06 jjanke Exp $
|
carlos@0
|
31 |
***
|
carlos@0
|
32 |
* Title: Post M_InOut_ID
|
carlos@0
|
33 |
* Description:
|
carlos@0
|
34 |
* Action: COmplete
|
carlos@0
|
35 |
* - Create Transaction
|
carlos@0
|
36 |
* (only stocked products)
|
carlos@0
|
37 |
* - Update Inventory (QtyReserved, QtyOnHand)
|
carlos@0
|
38 |
* (only stocked products)
|
carlos@0
|
39 |
* - Update OrderLine (QtyDelivered)
|
carlos@0
|
40 |
*
|
carlos@0
|
41 |
* Action: Reverse Correction
|
carlos@0
|
42 |
* - Create Header and lines with negative Quantities (and header amounts)
|
carlos@0
|
43 |
* - Post it
|
carlos@0
|
44 |
************************************************************************/
|
carlos@0
|
45 |
-- Logistice
|
carlos@0
|
46 |
v_ResultStr VARCHAR2(2000):='';
|
carlos@0
|
47 |
v_Message VARCHAR2(2000):='';
|
gorkaion@18652
|
48 |
v_Message_aux VARCHAR2(2000):='';
|
juanpablo@1605
|
49 |
v_Record_ID VARCHAR2(32);
|
juanpablo@1605
|
50 |
v_User VARCHAR2(32);
|
harikrishnan@7227
|
51 |
v_PUser VARCHAR2(32);
|
javier@21256
|
52 |
v_DocStatus VARCHAR2(60);
|
asier@1929
|
53 |
v_is_included NUMBER:=0;
|
asier@1929
|
54 |
v_DocType_ID VARCHAR2(32);
|
gorkaion@14547
|
55 |
v_isreturndoctype CHAR(1);
|
asier@1929
|
56 |
v_available_period NUMBER:=0;
|
asier@1929
|
57 |
v_is_ready AD_Org.IsReady%TYPE;
|
asier@1929
|
58 |
v_is_tr_allow AD_OrgType.IsTransactionsAllowed%TYPE;
|
asier@1929
|
59 |
v_DateAcct DATE;
|
atul@21884
|
60 |
v_DateDelivered C_OrderLine.DateDelivered%TYPE;
|
victor@3065
|
61 |
v_isacctle AD_OrgType.IsAcctLegalEntity%TYPE;
|
victor@3065
|
62 |
v_org_bule_id AD_Org.AD_Org_ID%TYPE;
|
carlos@0
|
63 |
-- Parameter
|
carlos@0
|
64 |
TYPE RECORD IS REF CURSOR;
|
carlos@0
|
65 |
Cur_Parameter RECORD;
|
carlos@0
|
66 |
--
|
carlos@0
|
67 |
Cur_InOut RECORD;
|
carlos@0
|
68 |
Cur_InOutLine RECORD;
|
gorkaion@3170
|
69 |
Cur_Order RECORD;
|
pandeeswari@21778
|
70 |
Cur_OrderLine RECORD;
|
gaurav@22036
|
71 |
Cur_Lines RECORD;
|
carlos@0
|
72 |
--
|
carlos@0
|
73 |
v_Result NUMBER:=1;
|
juanpablo@1605
|
74 |
v_AD_Org_ID VARCHAR2(32);
|
pandeeswari@21373
|
75 |
v_Warehouse_Org VARCHAR2(32);
|
juanpablo@1605
|
76 |
v_AD_Client_ID VARCHAR2(32);
|
juanpablo@1605
|
77 |
v_NextNo VARCHAR2(32);
|
carlos@0
|
78 |
v_Qty NUMBER;
|
carlos@0
|
79 |
v_QtyPO NUMBER;
|
carlos@0
|
80 |
v_QtySO NUMBER;
|
carlos@0
|
81 |
v_QuantityOrder NUMBER;
|
carlos@0
|
82 |
v_QuantityOrderPO NUMBER;
|
carlos@0
|
83 |
v_QuantityOrderSO NUMBER;
|
carlos@0
|
84 |
v_RDocumentNo VARCHAR2(40) ;
|
juanpablo@1605
|
85 |
v_RInOut_ID VARCHAR2(32);
|
carlos@0
|
86 |
v_IsStocked NUMBER;
|
juanpablo@1605
|
87 |
v_DoctypeReversed_ID VARCHAR2(32);
|
carlos@0
|
88 |
--MODIFIED BY F.IRIAZABAL
|
carlos@0
|
89 |
v_QtyOrder NUMBER;
|
carlos@0
|
90 |
v_ProductUOM NUMBER;
|
asier@2586
|
91 |
v_BreakDown VARCHAR2(60) ;
|
carlos@0
|
92 |
v_ActualQty NUMBER;
|
carlos@0
|
93 |
v_QtyAux NUMBER;
|
carlos@0
|
94 |
v_Count NUMBER:=0;
|
carlos@0
|
95 |
v_Line VARCHAR2(10) ;
|
gorkaion@3170
|
96 |
v_OrderID_old VARCHAR2(32);
|
harikrishnan@7945
|
97 |
Cur_MILines RECORD;
|
carlos@0
|
98 |
FINISH_PROCESS BOOLEAN:=false;
|
harikrishnan@5580
|
99 |
v_Aux NUMBER;
|
pandeeswari@21340
|
100 |
v_isSoTrx CHAR(1);
|
ioritz@17861
|
101 |
v_ProductName M_Product.name%TYPE;
|
gorkaion@18652
|
102 |
v_reservation_id VARCHAR2(32);
|
pandeeswari@21353
|
103 |
v_M_Warehouse_ID VARCHAR2(32);
|
mikel@19131
|
104 |
v_voidmovementdate M_Inout.MovementDate%TYPE;
|
mikel@19131
|
105 |
v_voiddate_acct M_Inout.DateAcct%TYPE;
|
david@19194
|
106 |
v_bpartner_blocked VARCHAR2(1):='N';
|
david@19194
|
107 |
v_goods_blocked VARCHAR2(1):='N';
|
sandra@20002
|
108 |
v_bpartner_name c_bpartner.name%TYPE;
|
david@19194
|
109 |
v_DocAction VARCHAR2(60);
|
gaurav@21852
|
110 |
v_voiddoccount NUMBER:=0;
|
mikel@19131
|
111 |
|
david@22931
|
112 |
v_penqty NUMBER;
|
david@22931
|
113 |
v_qtysumorders NUMBER;
|
david@22931
|
114 |
v_released NUMBER;
|
david@22931
|
115 |
|
carlos@0
|
116 |
BEGIN
|
david@22931
|
117 |
|
carlos@0
|
118 |
IF(p_PInstance_ID IS NOT NULL) THEN
|
carlos@0
|
119 |
-- Update AD_PInstance
|
carlos@0
|
120 |
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Processing ' || p_PInstance_ID) ;
|
carlos@0
|
121 |
v_ResultStr:='PInstanceNotFound';
|
carlos@0
|
122 |
AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'Y', NULL, NULL) ;
|
carlos@0
|
123 |
-- Get Parameters
|
carlos@0
|
124 |
v_ResultStr:='ReadingParameters';
|
carlos@0
|
125 |
FOR Cur_Parameter IN
|
carlos@0
|
126 |
(SELECT i.Record_ID,
|
carlos@0
|
127 |
i.AD_User_ID,
|
carlos@0
|
128 |
p.ParameterName,
|
carlos@0
|
129 |
p.P_String,
|
carlos@0
|
130 |
p.P_Number,
|
carlos@0
|
131 |
p.P_Date
|
carlos@0
|
132 |
FROM AD_PInstance i
|
carlos@0
|
133 |
LEFT JOIN AD_PInstance_Para p
|
carlos@0
|
134 |
ON i.AD_PInstance_ID=p.AD_PInstance_ID
|
carlos@0
|
135 |
WHERE i.AD_PInstance_ID=p_PInstance_ID
|
carlos@0
|
136 |
ORDER BY p.SeqNo
|
carlos@0
|
137 |
)
|
carlos@0
|
138 |
LOOP
|
carlos@0
|
139 |
v_Record_ID:=Cur_Parameter.Record_ID;
|
carlos@0
|
140 |
v_User:=Cur_Parameter.AD_User_ID;
|
mikel@19131
|
141 |
IF (Cur_Parameter.parametername = 'voidedDocumentDate') THEN
|
mikel@19131
|
142 |
v_voidmovementdate := TO_DATE(Cur_Parameter.p_string, 'YYYY-MM-DD');
|
mikel@19131
|
143 |
ELSIF (Cur_Parameter.parametername = 'voidedDocumentAcctDate') THEN
|
mikel@19131
|
144 |
v_voiddate_acct := TO_DATE(Cur_Parameter.p_string, 'YYYY-MM-DD');
|
mikel@19131
|
145 |
END IF;
|
carlos@0
|
146 |
END LOOP; -- Get Parameter
|
carlos@0
|
147 |
DBMS_OUTPUT.PUT_LINE(' Record_ID=' || v_Record_ID) ;
|
carlos@0
|
148 |
ELSE
|
gorkaion@239
|
149 |
DBMS_OUTPUT.PUT_LINE('--<<M_InOut_Post>>') ;
|
carlos@0
|
150 |
v_Record_ID:=p_InOut_ID;
|
harikrishnan@7227
|
151 |
SELECT count(*),updatedby
|
harikrishnan@7227
|
152 |
INTO v_Count,v_User
|
rafael@5825
|
153 |
FROM M_InOut
|
harikrishnan@7227
|
154 |
WHERE M_InOut_ID=v_Record_ID
|
harikrishnan@7227
|
155 |
GROUP BY updatedby;
|
rafael@5825
|
156 |
IF v_Count=0 THEN
|
rafael@5825
|
157 |
FINISH_PROCESS:=true;
|
rafael@5825
|
158 |
END IF;
|
carlos@0
|
159 |
END IF;
|
carlos@0
|
160 |
BEGIN --BODY
|
rafael@5825
|
161 |
IF(NOT FINISH_PROCESS) THEN
|
harikrishnan@7227
|
162 |
v_PUser:=v_User;
|
gaurav@21852
|
163 |
SELECT io.AD_Client_ID, io.AD_Org_ID, io.CreatedBy, io.C_DocType_ID, io.DateAcct, dt.isreturn, io.m_warehouse_id, io.issotrx,docaction
|
gaurav@21852
|
164 |
INTO v_AD_Client_ID, v_AD_Org_ID, v_User, v_DocType_ID, v_DateAcct, v_isreturndoctype, v_M_Warehouse_ID, v_isSoTrx,v_DocAction
|
gorkaion@14547
|
165 |
FROM M_InOut io JOIN c_doctype dt ON io.c_doctype_id = dt.c_doctype_id
|
gorkaion@14547
|
166 |
WHERE io.M_InOut_ID=v_Record_ID;
|
harikrishnan@7227
|
167 |
IF(v_PUser IS NOT NULL) THEN
|
harikrishnan@7227
|
168 |
v_User:=v_PUser;
|
harikrishnan@7227
|
169 |
END IF;
|
carlos@0
|
170 |
SELECT count(*)
|
carlos@0
|
171 |
INTO v_Count
|
rafael@5825
|
172 |
FROM AD_CLIENTINFO
|
rafael@5825
|
173 |
WHERE AD_CLIENT_ID=v_AD_Client_ID
|
rafael@5825
|
174 |
AND CHECKINOUTORG='Y';
|
naiara@19828
|
175 |
IF (v_Count>0) THEN
|
rafael@5825
|
176 |
v_ResultStr:='CheckingRestrictions - M_INOUT ORG IS IN C_BPARTNER ORG TREE';
|
rafael@5825
|
177 |
SELECT count(*)
|
rafael@5825
|
178 |
INTO v_Count
|
rafael@5825
|
179 |
FROM M_InOut m,
|
rafael@5825
|
180 |
C_BPartner bp
|
rafael@5825
|
181 |
WHERE m.M_InOut_ID=v_Record_ID
|
rafael@5825
|
182 |
AND m.C_BPARTNER_ID=bp.C_BPARTNER_ID
|
rafael@5825
|
183 |
AND AD_IsOrgIncluded(m.AD_ORG_ID, bp.AD_ORG_ID, bp.AD_CLIENT_ID)=-1;
|
rafael@5825
|
184 |
IF v_Count>0 THEN
|
rafael@5825
|
185 |
RAISE_APPLICATION_ERROR(-20000, '@NotCorrectOrgBpartnerInout@') ;
|
rafael@5825
|
186 |
END IF;
|
carlos@0
|
187 |
END IF;
|
gaurav@22036
|
188 |
Declare
|
gaurav@22036
|
189 |
v_Message_product VARCHAR(2000) :='';
|
gaurav@22036
|
190 |
Begin
|
gaurav@22036
|
191 |
FOR Cur_Lines IN (
|
gaurav@22036
|
192 |
SELECT M.line
|
gaurav@22036
|
193 |
FROM M_InOut I,
|
gaurav@22036
|
194 |
M_InOutLine M
|
gaurav@22036
|
195 |
WHERE I.M_InOut_ID=M.M_InOut_ID
|
gaurav@22036
|
196 |
AND I.M_INOUT_ID=v_Record_ID
|
gaurav@22036
|
197 |
AND (M.M_PRODUCT_ID IS NULL AND M.MOVEMENTQTY <> 0)
|
gaurav@22036
|
198 |
ORDER BY M.line
|
gaurav@22036
|
199 |
) LOOP
|
gaurav@22036
|
200 |
v_Message_product:=v_Message_product||Cur_Lines.line||', ';
|
gaurav@22036
|
201 |
END LOOP;
|
gaurav@22036
|
202 |
if v_Message_product != '' then
|
gaurav@22036
|
203 |
RAISE_APPLICATION_ERROR(-20000, '@Inline@ '||v_Message_product||' '||'@ProductNullAndMovementQtyGreaterZero@') ;
|
gaurav@22036
|
204 |
end if ;
|
gaurav@22036
|
205 |
End ;
|
gaurav@21852
|
206 |
if(v_isreturndoctype = 'N' AND v_isSoTrx = 'Y' and v_DocAction<>'RC') then
|
pandeeswari@21778
|
207 |
v_message := null;
|
pandeeswari@21778
|
208 |
for Cur_OrderLine in (
|
pandeeswari@21778
|
209 |
select c_orderline_id, line
|
pandeeswari@21778
|
210 |
from m_inoutline
|
pandeeswari@21778
|
211 |
where m_inout_id = v_Record_ID
|
gaurav@22036
|
212 |
and c_orderline_id is not null
|
pandeeswari@21778
|
213 |
order by line
|
pandeeswari@21778
|
214 |
) loop
|
pandeeswari@21778
|
215 |
select COALESCE(sum(movementqty), 0)
|
pandeeswari@21778
|
216 |
into v_qty
|
pandeeswari@21778
|
217 |
from m_inoutline
|
pandeeswari@21778
|
218 |
where m_inout_id = v_Record_ID
|
pandeeswari@21778
|
219 |
and c_orderline_id = Cur_OrderLine.c_orderline_id;
|
pandeeswari@21778
|
220 |
|
pandeeswari@21778
|
221 |
select qtyordered, (coalesce(qtydelivered, 0) + v_qty)
|
pandeeswari@21778
|
222 |
into v_QuantityOrder, v_qty
|
pandeeswari@21778
|
223 |
from c_orderline
|
pandeeswari@21778
|
224 |
where c_orderline_id = Cur_OrderLine.c_orderline_id;
|
pandeeswari@21778
|
225 |
|
pandeeswari@21778
|
226 |
if(v_QuantityOrder < v_qty) then
|
pandeeswari@21778
|
227 |
if v_message is null THEN
|
pandeeswari@21778
|
228 |
v_message := Cur_OrderLine.line;
|
pandeeswari@21778
|
229 |
ELSE
|
pandeeswari@21778
|
230 |
v_message := v_message || ', ' || Cur_OrderLine.line;
|
pandeeswari@21778
|
231 |
END IF;
|
pandeeswari@21778
|
232 |
end if;
|
pandeeswari@21778
|
233 |
end loop;
|
pandeeswari@21778
|
234 |
if v_message is not null then
|
pandeeswari@21778
|
235 |
RAISE_APPLICATION_ERROR(-20000, '@MovementQtyCheck@'||' '||'@Inlines@'||' '||v_message);
|
pandeeswari@21778
|
236 |
end if;
|
pandeeswari@21778
|
237 |
end if;
|
pandeeswari@21778
|
238 |
|
pandeeswari@21353
|
239 |
--Check whether warehouse belongs to the organization.
|
pandeeswari@21353
|
240 |
SELECT count(AD_ORG_ID)
|
pandeeswari@21353
|
241 |
INTO v_count
|
pandeeswari@21353
|
242 |
FROM AD_Org_Warehouse
|
pandeeswari@21353
|
243 |
WHERE M_Warehouse_ID=v_M_Warehouse_ID
|
pandeeswari@21353
|
244 |
AND AD_Org_ID = v_AD_Org_ID;
|
pandeeswari@21353
|
245 |
|
pandeeswari@21340
|
246 |
IF v_count = 0 AND v_isSoTrx = 'Y' THEN
|
pandeeswari@21353
|
247 |
RAISE_APPLICATION_ERROR(-20000,'@WrongWarehouse@');
|
pandeeswari@21353
|
248 |
END IF;
|
pandeeswari@21353
|
249 |
|
pandeeswari@21373
|
250 |
SELECT AD_Org_ID
|
pandeeswari@21373
|
251 |
INTO v_Warehouse_Org
|
pandeeswari@21373
|
252 |
FROM M_Warehouse
|
pandeeswari@21373
|
253 |
WHERE M_Warehouse_ID = v_M_Warehouse_ID;
|
pandeeswari@21373
|
254 |
|
pandeeswari@21373
|
255 |
IF(ad_org_isinnaturaltree(v_Warehouse_Org, v_AD_Org_ID, v_AD_Client_ID) = 'N' AND v_isSoTrx = 'N') THEN
|
pandeeswari@21373
|
256 |
RAISE_APPLICATION_ERROR(-20000,'@WrongWarehouse@');
|
pandeeswari@21373
|
257 |
END IF;
|
pandeeswari@21373
|
258 |
|
david@19194
|
259 |
SELECT CASE WHEN (m.ISSOTRX='Y') THEN customer_blocking ELSE vendor_blocking END, CASE WHEN (m.ISSOTRX='Y')
|
david@19194
|
260 |
THEN so_goods_blocking ELSE po_goods_blocking END, name, DocAction
|
david@19194
|
261 |
INTO v_bpartner_blocked, v_goods_blocked, v_bpartner_name, v_DocAction
|
david@19194
|
262 |
FROM M_InOut m, C_BPartner bp
|
david@19194
|
263 |
WHERE m.c_bpartner_id = bp.c_bpartner_id
|
david@19194
|
264 |
AND m.M_InOut_ID=v_Record_ID
|
david@19194
|
265 |
AND m.C_BPARTNER_ID=bp.C_BPARTNER_ID;
|
david@19194
|
266 |
|
david@19194
|
267 |
IF (v_DocAction = 'CO' AND v_bpartner_blocked = 'Y' AND v_goods_blocked = 'Y' AND v_isreturndoctype='N') THEN
|
david@19194
|
268 |
RAISE_APPLICATION_ERROR(-20000, '@ThebusinessPartner@'||' '|| v_bpartner_name ||' '||'@BusinessPartnerBlocked@');
|
david@19194
|
269 |
END IF;
|
david@19194
|
270 |
|
rafael@5825
|
271 |
v_ResultStr:='CheckingRestrictions';
|
rafael@5825
|
272 |
SELECT COUNT(*)
|
rafael@5825
|
273 |
INTO v_Count
|
rafael@5825
|
274 |
FROM C_DocType,
|
rafael@5825
|
275 |
M_InOut M
|
rafael@5825
|
276 |
WHERE M_Inout_ID = v_Record_ID
|
rafael@5825
|
277 |
AND C_DocType.DocBaseType IN ('MMR', 'MMS')
|
rafael@5825
|
278 |
AND C_DocType.IsSOTrx=M.IsSOTrx
|
rafael@5825
|
279 |
AND AD_ISORGINCLUDED(m.AD_Org_ID,C_DocType.AD_Org_ID, m.AD_Client_ID) <> -1
|
rafael@5825
|
280 |
AND M.C_DOCTYPE_ID=C_DocType.C_DOCTYPE_ID;
|
naiara@19828
|
281 |
IF (v_Count=0) THEN
|
rafael@5825
|
282 |
RAISE_APPLICATION_ERROR(-20000, '@NotCorrectOrgDoctypeShipment@') ;
|
rafael@5825
|
283 |
END IF;
|
rafael@5825
|
284 |
SELECT COUNT(*), MAX(M.line)
|
rafael@5825
|
285 |
INTO v_Count, v_line
|
rafael@5825
|
286 |
FROM M_InOutLine M,
|
rafael@5825
|
287 |
M_Product P
|
rafael@5825
|
288 |
WHERE M.M_PRODUCT_ID=P.M_PRODUCT_ID
|
rafael@5825
|
289 |
AND P.M_ATTRIBUTESET_ID IS NOT NULL
|
rafael@6091
|
290 |
AND (P.ATTRSETVALUETYPE IS NULL OR P.ATTRSETVALUETYPE <> 'F')
|
rafael@6104
|
291 |
AND (SELECT ISONEATTRSETVALREQUIRED FROM M_ATTRIBUTESET WHERE M_ATTRIBUTESET_ID = P.M_ATTRIBUTESET_ID) = 'Y'
|
rafael@5825
|
292 |
AND COALESCE(M.M_ATTRIBUTESETINSTANCE_ID, '0') = '0'
|
rafael@5825
|
293 |
AND M.M_INOUT_ID=v_Record_ID;
|
rafael@5825
|
294 |
IF v_Count<>0 THEN
|
rafael@6091
|
295 |
RAISE_APPLICATION_ERROR(-20000, '@Inline@'||' '||v_line||' '||'@productWithoutAttributeSet@') ;
|
rafael@5825
|
296 |
END IF;
|
rafael@5825
|
297 |
SELECT COUNT(*), MAX(M.line)
|
rafael@5825
|
298 |
INTO v_Count, v_Line
|
rafael@5825
|
299 |
FROM M_InOut I,
|
rafael@5825
|
300 |
M_InOutLine M,
|
rafael@5825
|
301 |
M_AttributeSetInstance P
|
rafael@5825
|
302 |
WHERE I.M_InOut_ID=M.M_InOut_ID
|
rafael@5825
|
303 |
AND M.M_AttributeSetInstance_ID=P.M_AttributeSetInstance_ID
|
rafael@5825
|
304 |
AND P.ISLOCKED='Y'
|
rafael@5825
|
305 |
AND I.ISSOTRX='Y'
|
rafael@5825
|
306 |
AND I.M_INOUT_ID=v_Record_ID;
|
naiara@19828
|
307 |
IF (v_Count<>0) THEN
|
rafael@5825
|
308 |
RAISE_APPLICATION_ERROR(-20000, '@Inline@'||v_line||' '||'@lockedProduct@') ;
|
rafael@5825
|
309 |
END IF;
|
rafael@5825
|
310 |
-- check inout line instance location
|
rafael@5825
|
311 |
SELECT COUNT(*), MAX(M.line)
|
rafael@5825
|
312 |
INTO v_Count, v_Line
|
rafael@5825
|
313 |
FROM M_InOutLine M,
|
rafael@5825
|
314 |
M_Product P
|
rafael@5825
|
315 |
WHERE M.M_InOut_ID=v_Record_ID
|
rafael@5825
|
316 |
AND M.M_Locator_ID IS NULL
|
rafael@5825
|
317 |
AND p.m_product_id = m.m_product_id
|
rafael@5825
|
318 |
AND p.isstocked = 'Y'
|
rafael@5825
|
319 |
AND p.producttype = 'I';
|
naiara@19828
|
320 |
IF (v_Count <> 0) THEN
|
rafael@5825
|
321 |
RAISE_APPLICATION_ERROR(-20000, '@Inline@'||v_line||' '||'@InoutLineWithoutLocator@') ;
|
rafael@5825
|
322 |
END IF;
|
naiara@19828
|
323 |
--check if bom non-stockable is exploded
|
naiara@19828
|
324 |
SELECT COUNT(*), MAX(M.line)
|
naiara@19828
|
325 |
INTO v_Count, v_Line
|
naiara@19828
|
326 |
FROM M_InOutLine M,
|
naiara@19828
|
327 |
M_Product P
|
naiara@19828
|
328 |
WHERE M.M_InOut_ID=v_Record_ID
|
naiara@19828
|
329 |
AND P.isBOM='Y'
|
naiara@19828
|
330 |
AND P.isstocked='N'
|
naiara@19828
|
331 |
AND M.explode='N'
|
naiara@19828
|
332 |
AND p.m_product_id = m.m_product_id;
|
naiara@19828
|
333 |
IF (v_Count <> 0) THEN
|
naiara@19828
|
334 |
RAISE_APPLICATION_ERROR(-20000, '@Inline@'||v_line||' '||'@InoutLineNotExploded@') ;
|
naiara@19828
|
335 |
END IF;
|
gorkaion@14547
|
336 |
--Check negative quantities on return inouts
|
gorkaion@14547
|
337 |
IF (v_isreturndoctype = 'Y') THEN
|
gorkaion@14547
|
338 |
SELECT count(*) INTO v_count
|
gorkaion@14547
|
339 |
FROM m_inoutline iol JOIN c_orderline ol ON iol.c_orderline_id = ol.c_orderline_id
|
gorkaion@14547
|
340 |
WHERE iol.m_inout_id = v_record_id
|
gorkaion@14547
|
341 |
AND iol.movementqty > 0
|
ioritz@15868
|
342 |
AND canceled_inoutline_id IS NULL
|
gorkaion@14547
|
343 |
AND ol.c_order_discount_id IS NULL;
|
gorkaion@14547
|
344 |
IF (v_Count <> 0) THEN
|
gorkaion@14547
|
345 |
RAISE_APPLICATION_ERROR(-20000, '@ReturnInOutNegativeQty@');
|
gorkaion@14547
|
346 |
END IF;
|
gorkaion@14547
|
347 |
END IF;
|
gorkaion@20976
|
348 |
SELECT count(*) INTO v_count
|
gorkaion@20976
|
349 |
FROM dual
|
gorkaion@20976
|
350 |
WHERE EXISTS (
|
gorkaion@20976
|
351 |
SELECT 1
|
gorkaion@20976
|
352 |
FROM m_inoutline il JOIN m_product p ON il.m_product_id = p.m_product_id
|
gorkaion@20976
|
353 |
WHERE il.m_inout_id = v_record_id
|
gorkaion@20976
|
354 |
AND p.isgeneric = 'Y');
|
gorkaion@20944
|
355 |
IF (v_count > 0) THEN
|
gorkaion@20976
|
356 |
SELECT max(p.name) INTO v_productname
|
gorkaion@20976
|
357 |
FROM m_inoutline il JOIN m_product p ON il.m_product_id = p.m_product_id
|
gorkaion@20976
|
358 |
WHERE il.m_inout_id = v_record_id
|
gorkaion@20976
|
359 |
AND p.isgeneric = 'Y';
|
gorkaion@20944
|
360 |
RAISE_APPLICATION_ERROR(-20000, '@CannotUseGenericProduct@ ' || v_productName);
|
gorkaion@20944
|
361 |
END IF;
|
gorkaion@20944
|
362 |
|
rafael@5825
|
363 |
-- Process Shipments
|
pandeeswari@19202
|
364 |
SELECT COUNT(*) INTO v_Aux
|
pandeeswari@19202
|
365 |
FROM M_InOutLine
|
pandeeswari@19202
|
366 |
WHERE M_InOut_ID = v_Record_ID;
|
pandeeswari@19202
|
367 |
|
pandeeswari@19202
|
368 |
IF v_Aux > 0 THEN
|
pandeeswari@19202
|
369 |
SELECT COUNT(*)
|
sandra@19203
|
370 |
INTO v_Count
|
pandeeswari@19202
|
371 |
FROM M_INOUT IO, M_INOUTLINE IOL
|
pandeeswari@19202
|
372 |
WHERE IO.M_INOUT_ID = IOL.M_INOUT_ID
|
eduardo@19387
|
373 |
AND AD_ISORGINCLUDED(IOL.AD_Org_ID, IO.AD_Org_ID, IO.AD_Client_ID) = -1
|
sandra@19203
|
374 |
AND IO.M_INOUT_ID = v_Record_ID;
|
eduardo@19387
|
375 |
IF (v_Count>0) THEN
|
sandra@19203
|
376 |
RAISE_APPLICATION_ERROR(-20000, '@NotCorrectOrgLines@') ;
|
pandeeswari@19202
|
377 |
END IF;
|
pandeeswari@18808
|
378 |
END IF;
|
rafael@5825
|
379 |
|
rafael@5825
|
380 |
-- Check the header belongs to a organization where transactions are posible and ready to use
|
rafael@5825
|
381 |
SELECT AD_Org.IsReady, Ad_OrgType.IsTransactionsAllowed
|
rafael@5825
|
382 |
INTO v_is_ready, v_is_tr_allow
|
rafael@5825
|
383 |
FROM M_INOUT, AD_Org, AD_OrgType
|
rafael@5825
|
384 |
WHERE AD_Org.AD_Org_ID=M_INOUT.AD_Org_ID
|
rafael@5825
|
385 |
AND AD_Org.AD_OrgType_ID=AD_OrgType.AD_OrgType_ID
|
rafael@5825
|
386 |
AND M_INOUT.M_INOUT_ID=v_Record_ID;
|
rafael@5825
|
387 |
IF (v_is_ready='N') THEN
|
rafael@5825
|
388 |
RAISE_APPLICATION_ERROR(-20000, '@OrgHeaderNotReady@');
|
carlos@0
|
389 |
END IF;
|
rafael@5825
|
390 |
IF (v_is_tr_allow='N') THEN
|
rafael@5825
|
391 |
RAISE_APPLICATION_ERROR(-20000, '@OrgHeaderNotTransAllowed@');
|
carlos@0
|
392 |
END IF;
|
rafael@5825
|
393 |
|
rafael@5825
|
394 |
SELECT AD_ORG_CHK_DOCUMENTS('M_INOUT', 'M_INOUTLINE', v_Record_ID, 'M_INOUT_ID', 'M_INOUT_ID') INTO v_is_included FROM dual;
|
rafael@5825
|
395 |
IF (v_is_included=-1) THEN
|
rafael@5825
|
396 |
RAISE_APPLICATION_ERROR(-20000, '@LinesAndHeaderDifferentLEorBU@');
|
carlos@0
|
397 |
END IF;
|
asier@1929
|
398 |
|
rafael@5825
|
399 |
-- Check the period control is opened (only if it is legal entity with accounting)
|
rafael@5825
|
400 |
-- Gets the BU or LE of the document
|
rafael@5825
|
401 |
SELECT AD_GET_DOC_LE_BU('M_INOUT', v_Record_ID, 'M_INOUT_ID', 'LE')
|
rafael@5825
|
402 |
INTO v_org_bule_id
|
victor@3065
|
403 |
FROM DUAL;
|
victor@3065
|
404 |
|
rafael@5825
|
405 |
SELECT AD_OrgType.IsAcctLegalEntity
|
rafael@5825
|
406 |
INTO v_isacctle
|
rafael@5825
|
407 |
FROM AD_OrgType, AD_Org
|
rafael@5825
|
408 |
WHERE AD_Org.AD_OrgType_ID = AD_OrgType.AD_OrgType_ID
|
rafael@5825
|
409 |
AND AD_Org.AD_Org_ID=v_org_bule_id;
|
rafael@5825
|
410 |
|
rafael@5825
|
411 |
IF (v_isacctle='Y') THEN
|
rafael@5825
|
412 |
SELECT C_CHK_OPEN_PERIOD(v_AD_Org_ID, v_DateAcct, NULL, v_DocType_ID)
|
rafael@5825
|
413 |
INTO v_available_period
|
rafael@5825
|
414 |
FROM DUAL;
|
javier@20594
|
415 |
|
rafael@5825
|
416 |
IF (v_available_period<>1) THEN
|
javier@20594
|
417 |
IF (v_docAction <> 'RC') THEN
|
javier@20594
|
418 |
RAISE_APPLICATION_ERROR(-20000, '@PeriodNotAvailable@');
|
javier@20594
|
419 |
END IF;
|
rafael@5825
|
420 |
END IF;
|
rafael@5825
|
421 |
END IF;
|
rafael@5825
|
422 |
|
rafael@5825
|
423 |
FOR Cur_InOut IN
|
rafael@5825
|
424 |
(SELECT *
|
rafael@5825
|
425 |
FROM M_INOUT
|
rafael@5825
|
426 |
WHERE(M_InOut_ID=v_Record_ID
|
rafael@5825
|
427 |
OR(v_Record_ID IS NULL
|
rafael@5825
|
428 |
AND DocAction='CO'))
|
rafael@5825
|
429 |
AND IsActive='Y' FOR UPDATE
|
rafael@5825
|
430 |
)
|
rafael@5825
|
431 |
LOOP
|
rafael@5825
|
432 |
DBMS_OUTPUT.PUT_LINE('Shipment_ID=' || Cur_InOut.M_InOut_ID || ', Doc=' || Cur_InOut.DocumentNo || ', Status=' || Cur_InOut.DocStatus || ', Action=' || Cur_InOut.DocAction) ;
|
rafael@5825
|
433 |
v_ResultStr:='HeaderLoop';
|
rafael@5825
|
434 |
/**
|
rafael@5825
|
435 |
* Shipment not processed
|
rafael@5825
|
436 |
*/
|
rafael@5825
|
437 |
IF(Cur_InOut.Processed='N' AND Cur_InOut.DocStatus='DR' AND Cur_InOut.DocAction='CO') THEN
|
rafael@5825
|
438 |
-- For all active shipment lines
|
rafael@5825
|
439 |
v_ResultStr:='HeaderLoop-1';
|
pandeeswari@19202
|
440 |
|
rafael@5825
|
441 |
IF v_Aux=0 THEN
|
rafael@5825
|
442 |
RAISE_APPLICATION_ERROR(-20000, '@ReceiptWithoutLines@');
|
rafael@5825
|
443 |
END IF;
|
carlos@0
|
444 |
FOR Cur_InOutLine IN
|
carlos@0
|
445 |
(SELECT *
|
carlos@0
|
446 |
FROM M_INOUTLINE
|
carlos@0
|
447 |
WHERE M_InOut_ID=Cur_InOut.M_InOut_ID
|
carlos@0
|
448 |
AND IsActive='Y' FOR UPDATE
|
carlos@0
|
449 |
)
|
carlos@0
|
450 |
LOOP
|
adrian@170
|
451 |
-- Incomming or Outgoing :1:2
|
carlos@0
|
452 |
v_Qty:=Cur_InOutLine.MovementQty;
|
carlos@0
|
453 |
v_QuantityOrder:=Cur_InOutLine.QuantityOrder;
|
carlos@0
|
454 |
IF(SUBSTR(Cur_InOut.MovementType, 2)='-') THEN
|
carlos@0
|
455 |
v_Qty:=- Cur_InOutLine.MovementQty;
|
carlos@0
|
456 |
v_QuantityOrder:=-Cur_InOutLine.QuantityOrder;
|
carlos@0
|
457 |
END IF;
|
carlos@0
|
458 |
IF(Cur_InOut.IsSOTrx='N') THEN
|
carlos@0
|
459 |
v_QtySO:=0;
|
carlos@0
|
460 |
v_QtyPO:=Cur_InOutLine.MovementQty;
|
carlos@0
|
461 |
v_QuantityOrderSO:=0;
|
carlos@0
|
462 |
v_QuantityOrderPO:=Cur_InOutLine.QuantityOrder;
|
carlos@0
|
463 |
ELSE
|
carlos@0
|
464 |
v_QtySO:=Cur_InOutLine.MovementQty;
|
carlos@0
|
465 |
v_QtyPO:=0;
|
carlos@0
|
466 |
v_QuantityOrderSO:=Cur_InOutLine.QuantityOrder;
|
carlos@0
|
467 |
v_QuantityOrderPO:=0;
|
carlos@0
|
468 |
END IF;
|
carlos@0
|
469 |
-- UOM Conversion
|
adrian@170
|
470 |
-- Is it a standard stocked product:3
|
carlos@0
|
471 |
SELECT COUNT(*)
|
carlos@0
|
472 |
INTO v_IsStocked
|
carlos@0
|
473 |
FROM M_PRODUCT
|
carlos@0
|
474 |
WHERE M_Product_ID=Cur_InOutLine.M_Product_ID
|
carlos@0
|
475 |
AND IsStocked='Y'
|
carlos@0
|
476 |
AND ProductType='I';
|
carlos@0
|
477 |
-- Create Transaction for stocked product
|
harikrishnan@8015
|
478 |
IF(Cur_InOutLine.M_Product_ID IS NOT NULL AND v_IsStocked=1 AND Cur_InOutLine.IsDescription <> 'Y') THEN
|
gorkaion@18652
|
479 |
IF (cur_inout.issotrx = 'Y' AND cur_inoutline.c_orderline_id IS NOT NULL AND v_qty < 0 AND cur_inoutline.canceled_inoutline_id IS NULL) THEN
|
gorkaion@18652
|
480 |
-- Manage reservations.
|
gorkaion@18652
|
481 |
SELECT count(*), max(m_reservation_id)
|
gorkaion@18652
|
482 |
INTO v_aux, v_reservation_id
|
gorkaion@18652
|
483 |
FROM m_reservation
|
david@22931
|
484 |
WHERE c_orderline_id = cur_inoutline.c_orderline_id
|
david@22931
|
485 |
AND res_status NOT IN ('DR', 'CL');
|
gorkaion@18652
|
486 |
IF (v_aux > 1) THEN
|
gorkaion@18652
|
487 |
RAISE_APPLICATION_ERROR(-20000, '@SOLineWithMoreThanOneOpenReservation@');
|
gorkaion@18652
|
488 |
ELSIF (v_aux = 1) THEN
|
gorkaion@18652
|
489 |
M_RESERVATION_CONSUMPTION(v_reservation_id, cur_inoutline.m_locator_id, cur_inoutline.m_attributesetinstance_id, cur_inoutline.movementqty, v_user, v_result, v_message);
|
gorkaion@18652
|
490 |
END IF;
|
gorkaion@18706
|
491 |
ELSIF (cur_inout.issotrx = 'Y' AND cur_inoutline.c_orderline_id IS NOT NULL AND v_qty > 0 AND cur_inoutline.canceled_inoutline_id IS NOT NULL) THEN
|
gorkaion@18706
|
492 |
-- Undo reservation
|
gorkaion@18706
|
493 |
DECLARE
|
gorkaion@18706
|
494 |
cur_released_stock RECORD;
|
gorkaion@18706
|
495 |
v_qtyaux NUMBER;
|
gorkaion@18706
|
496 |
v_undoqty NUMBER;
|
gorkaion@18706
|
497 |
BEGIN
|
gorkaion@18706
|
498 |
SELECT count(*), max(m_reservation_id)
|
gorkaion@18706
|
499 |
INTO v_aux, v_reservation_id
|
gorkaion@18706
|
500 |
FROM m_reservation
|
david@22931
|
501 |
WHERE c_orderline_id = cur_inoutline.c_orderline_id
|
david@22931
|
502 |
AND res_status NOT IN ('DR', 'CL');
|
gorkaion@18706
|
503 |
IF (v_aux > 1) THEN
|
gorkaion@18706
|
504 |
RAISE_APPLICATION_ERROR(-20000, '@SOLineWithMoreThanOneOpenReservation@');
|
gorkaion@18706
|
505 |
ELSIF (v_aux = 1) THEN
|
gorkaion@18706
|
506 |
v_qtyaux := v_qty;
|
gorkaion@18706
|
507 |
FOR cur_released_stock IN (
|
gorkaion@18706
|
508 |
SELECT m_reservation_stock_id, quantity, releasedqty
|
gorkaion@18706
|
509 |
FROM m_reservation_stock
|
gorkaion@18706
|
510 |
WHERE m_locator_id = cur_inoutline.m_locator_id
|
gorkaion@18706
|
511 |
AND COALESCE(m_attributesetinstance_id, '0') = COALESCE(cur_inoutline.m_attributesetinstance_id, '0')
|
gorkaion@18706
|
512 |
AND m_reservation_id = v_reservation_id
|
gorkaion@18706
|
513 |
AND COALESCE(releasedqty, 0) > 0
|
gorkaion@18706
|
514 |
ORDER BY CASE isallocated WHEN 'N' THEN 0 ELSE 1 END
|
gorkaion@18706
|
515 |
) LOOP
|
gorkaion@18706
|
516 |
v_undoqty := LEAST(v_qtyaux, cur_released_stock.releasedqty);
|
gorkaion@18706
|
517 |
UPDATE m_reservation_stock
|
gorkaion@18706
|
518 |
SET releasedqty = releasedqty - v_undoqty
|
gorkaion@18706
|
519 |
WHERE m_reservation_stock_id = cur_released_stock.m_reservation_stock_id;
|
gorkaion@18706
|
520 |
v_qtyaux := v_qtyaux - v_undoqty;
|
gorkaion@18706
|
521 |
END LOOP;
|
gorkaion@18706
|
522 |
END IF;
|
gorkaion@18706
|
523 |
END;
|
gorkaion@19377
|
524 |
ELSIF (cur_inout.issotrx = 'N' AND cur_inoutline.canceled_inoutline_id IS NULL) THEN
|
gorkaion@18681
|
525 |
-- Manage pre-reserves
|
gorkaion@18681
|
526 |
DECLARE
|
gorkaion@18681
|
527 |
cur_reserve_stock RECORD;
|
gorkaion@18681
|
528 |
v_pendingqty NUMBER;
|
gorkaion@18681
|
529 |
v_qtyaux NUMBER;
|
gorkaion@18681
|
530 |
v_res_stock_id VARCHAR2(32);
|
gorkaion@18681
|
531 |
BEGIN
|
gorkaion@18681
|
532 |
v_pendingqty := v_qty;
|
gorkaion@18681
|
533 |
FOR cur_reserve_stock IN (
|
gorkaion@18681
|
534 |
SELECT rs.*
|
gorkaion@18681
|
535 |
FROM m_reservation_stock rs JOIN m_reservation r ON rs.m_reservation_id = r.m_reservation_id
|
gorkaion@18681
|
536 |
WHERE rs.c_orderline_id = cur_inoutline.c_orderline_id
|
gorkaion@18681
|
537 |
AND rs.quantity <> COALESCE(rs.releasedqty, 0)
|
gorkaion@18681
|
538 |
AND rs.m_locator_id IS NULL
|
gorkaion@19377
|
539 |
AND r.res_status NOT IN ('DR', 'CL')
|
gorkaion@18681
|
540 |
) LOOP
|
gorkaion@18681
|
541 |
v_qtyaux := LEAST(cur_reserve_stock.quantity - COALESCE(cur_reserve_stock.releasedqty, 0), v_pendingqty);
|
gorkaion@18681
|
542 |
-- Check if exists a reserved stock for the same orderline, attributes and locator in the reservation
|
gorkaion@18681
|
543 |
SELECT count(*), max(m_reservation_stock_id) INTO v_aux, v_res_stock_id
|
gorkaion@18681
|
544 |
FROM m_reservation_stock
|
gorkaion@19377
|
545 |
WHERE c_orderline_id = cur_inoutline.c_orderline_id
|
gorkaion@19377
|
546 |
AND m_locator_id = cur_inoutline.m_locator_id
|
gorkaion@19377
|
547 |
AND m_reservation_id = cur_reserve_stock.m_reservation_id
|
david@22931
|
548 |
AND isallocated = cur_reserve_stock.isallocated
|
gorkaion@19377
|
549 |
AND COALESCE(m_attributesetinstance_id, '0') = COALESCE(Cur_InOutLine.M_AttributeSetInstance_ID, '0');
|
gorkaion@19377
|
550 |
-- Update existing prereserved stock to decrease reserved qty
|
gorkaion@18681
|
551 |
UPDATE m_reservation_stock
|
gorkaion@18681
|
552 |
SET quantity = quantity - v_qtyaux
|
gorkaion@18681
|
553 |
WHERE m_reservation_stock_id = cur_reserve_stock.m_reservation_stock_id;
|
gorkaion@19377
|
554 |
-- Insert or update reserved stock by same quantity
|
gorkaion@18681
|
555 |
IF (v_aux > 0) THEN
|
gorkaion@18681
|
556 |
UPDATE m_reservation_stock
|
gorkaion@18681
|
557 |
SET quantity = quantity + v_qtyaux
|
gorkaion@18681
|
558 |
WHERE m_reservation_stock_id = v_res_stock_id;
|
gorkaion@18681
|
559 |
ELSE
|
gorkaion@18681
|
560 |
INSERT INTO m_reservation_stock(
|
gorkaion@18681
|
561 |
m_reservation_stock_id, ad_client_id, ad_org_id, isactive,
|
gorkaion@18681
|
562 |
created, createdby, updated, updatedby,
|
gorkaion@18681
|
563 |
m_reservation_id, m_attributesetinstance_id, m_locator_id, c_orderline_id,
|
gorkaion@18681
|
564 |
quantity, releasedqty, isallocated
|
gorkaion@18681
|
565 |
) VALUES (
|
gorkaion@18681
|
566 |
get_uuid(), cur_reserve_stock.ad_client_id, cur_reserve_stock.ad_org_id, 'Y',
|
gorkaion@18681
|
567 |
now(), v_user, now(), v_user,
|
gorkaion@18681
|
568 |
cur_reserve_stock.m_reservation_id, cur_inoutline.m_attributesetinstance_id, cur_inoutline.m_locator_id, cur_inoutline.c_orderline_id,
|
david@22931
|
569 |
v_qtyaux, 0, cur_reserve_stock.isallocated
|
gorkaion@18681
|
570 |
);
|
gorkaion@18681
|
571 |
END IF;
|
gorkaion@18681
|
572 |
v_pendingqty := v_pendingqty - v_qtyaux;
|
gorkaion@18681
|
573 |
IF (v_pendingqty <= 0) THEN
|
gorkaion@18681
|
574 |
EXIT;
|
gorkaion@18681
|
575 |
END IF;
|
gorkaion@18681
|
576 |
END LOOP;
|
gorkaion@18681
|
577 |
DELETE FROM m_reservation_stock
|
gorkaion@18681
|
578 |
WHERE c_orderline_id = cur_inoutline.c_orderline_id
|
gorkaion@18681
|
579 |
AND quantity = 0
|
gorkaion@18681
|
580 |
AND COALESCE(releasedqty, 0) = 0;
|
gorkaion@18681
|
581 |
END;
|
gorkaion@19377
|
582 |
ELSIF (cur_inout.issotrx = 'N' AND cur_inoutline.canceled_inoutline_id IS NOT NULL AND v_qty < 0) THEN
|
gorkaion@19377
|
583 |
-- Revert to pre-reservations
|
david@22931
|
584 |
|
david@22931
|
585 |
select sum(iol.movementqty)
|
david@22931
|
586 |
into v_qtysumorders
|
david@22931
|
587 |
from m_inoutline iol
|
david@22931
|
588 |
WHERE iol.c_orderline_id=cur_inoutline.c_orderline_id
|
david@22931
|
589 |
and iol.m_locator_id=cur_inoutline.m_locator_id;
|
david@22931
|
590 |
|
david@22931
|
591 |
select rs.quantity
|
david@22931
|
592 |
into v_released
|
david@22931
|
593 |
from m_reservation_stock rs
|
david@22931
|
594 |
where c_orderline_id=cur_inoutline.c_orderline_id
|
david@22931
|
595 |
and rs.m_locator_id=cur_inoutline.m_locator_id;
|
david@22931
|
596 |
|
david@22931
|
597 |
v_penqty := -v_qty - ((v_qtysumorders+(-cur_inoutline.movementqty))-v_released);
|
david@22931
|
598 |
|
gorkaion@19377
|
599 |
DECLARE
|
gorkaion@19377
|
600 |
cur_reserve_stock RECORD;
|
gorkaion@19377
|
601 |
v_pendingqty NUMBER;
|
gorkaion@19377
|
602 |
v_qtyaux NUMBER;
|
gorkaion@19377
|
603 |
v_res_stock_id VARCHAR2(32);
|
gorkaion@19380
|
604 |
v_aux_released NUMBER:= 0;
|
gorkaion@19377
|
605 |
BEGIN
|
david@22931
|
606 |
v_pendingqty:=v_penqty;
|
gorkaion@19377
|
607 |
FOR cur_reserve_stock IN (
|
gorkaion@19377
|
608 |
SELECT rs.quantity, COALESCE(rs.releasedqty,0) AS releasedqty, rs.m_reservation_stock_id, rs.m_reservation_id,
|
david@22931
|
609 |
rs.ad_org_id, rs.ad_client_id, rs.isallocated
|
gorkaion@19377
|
610 |
FROM m_reservation_stock rs JOIN m_reservation r ON rs.m_reservation_id = r.m_reservation_id
|
gorkaion@19377
|
611 |
WHERE rs.c_orderline_id = cur_inoutline.c_orderline_id
|
gorkaion@19377
|
612 |
AND rs.m_locator_id = cur_inoutline.m_locator_id
|
gorkaion@19377
|
613 |
AND r.res_status NOT IN ('DR', 'CL')
|
gorkaion@19377
|
614 |
) LOOP
|
gorkaion@19377
|
615 |
v_qtyaux := LEAST((cur_reserve_stock.quantity - COALESCE(cur_reserve_stock.releasedqty, 0)), v_pendingqty);
|
gorkaion@19377
|
616 |
v_aux_released := v_aux_released + COALESCE(cur_reserve_stock.releasedqty, 0);
|
gorkaion@20270
|
617 |
IF (cur_reserve_stock.quantity <> COALESCE(cur_reserve_stock.releasedqty, 0)) THEN
|
gorkaion@20270
|
618 |
-- Check if exists a prereservation for the same orderline, attributes and locator in the reservation
|
gorkaion@20270
|
619 |
SELECT count(*), max(m_reservation_stock_id) INTO v_aux, v_res_stock_id
|
gorkaion@20270
|
620 |
FROM m_reservation_stock
|
gorkaion@20270
|
621 |
WHERE c_orderline_id = cur_inoutline.c_orderline_id
|
gorkaion@20270
|
622 |
AND m_locator_id IS NULL
|
gorkaion@20270
|
623 |
AND m_reservation_id = cur_reserve_stock.m_reservation_id;
|
gorkaion@20270
|
624 |
-- Update existing prereserved stock to decrease reserved qty
|
david@22931
|
625 |
|
gorkaion@19377
|
626 |
UPDATE m_reservation_stock
|
gorkaion@20270
|
627 |
SET quantity = quantity - v_qtyaux
|
gorkaion@20270
|
628 |
WHERE m_reservation_stock_id = cur_reserve_stock.m_reservation_stock_id;
|
gorkaion@20270
|
629 |
-- Insert or update reserved stock by same quantity
|
gorkaion@20270
|
630 |
IF (v_aux > 0) THEN
|
gorkaion@20270
|
631 |
UPDATE m_reservation_stock
|
gorkaion@20270
|
632 |
SET quantity = quantity + v_qtyaux
|
gorkaion@20270
|
633 |
WHERE m_reservation_stock_id = v_res_stock_id;
|
gorkaion@20270
|
634 |
ELSE
|
gorkaion@20270
|
635 |
INSERT INTO m_reservation_stock (
|
gorkaion@20270
|
636 |
m_reservation_stock_id, ad_client_id, ad_org_id, isactive,
|
gorkaion@20270
|
637 |
created, createdby, updated, updatedby,
|
gorkaion@20270
|
638 |
m_reservation_id, m_attributesetinstance_id, m_locator_id, c_orderline_id,
|
gorkaion@20270
|
639 |
quantity, releasedqty, isallocated
|
gorkaion@20270
|
640 |
) VALUES (
|
gorkaion@20270
|
641 |
get_uuid(), cur_reserve_stock.ad_client_id, cur_reserve_stock.ad_org_id, 'Y',
|
gorkaion@20270
|
642 |
now(), v_user, now(), v_user,
|
gorkaion@20270
|
643 |
cur_reserve_stock.m_reservation_id, '0', NULL, cur_inoutline.c_orderline_id,
|
david@22931
|
644 |
v_qtyaux, 0, cur_reserve_stock.isallocated
|
gorkaion@20270
|
645 |
);
|
gorkaion@20270
|
646 |
END IF;
|
gorkaion@20270
|
647 |
v_pendingqty := v_pendingqty - v_qtyaux;
|
gorkaion@20270
|
648 |
IF (v_pendingqty <= 0) THEN
|
gorkaion@20270
|
649 |
EXIT;
|
gorkaion@20270
|
650 |
END IF;
|
gorkaion@19377
|
651 |
END IF;
|
gorkaion@19377
|
652 |
END LOOP;
|
gorkaion@19377
|
653 |
IF (v_pendingqty > 0 AND v_aux_released > 0) THEN
|
gorkaion@19377
|
654 |
-- Not all quantity has been reverted to pre-reservation having released quantity.
|
gorkaion@19377
|
655 |
RAISE_APPLICATION_ERROR(-20000, '@ReceiptVoidReleasedQtyFound@');
|
gorkaion@19377
|
656 |
END IF;
|
gorkaion@19377
|
657 |
DELETE FROM m_reservation_stock
|
gorkaion@19377
|
658 |
WHERE c_orderline_id = cur_inoutline.c_orderline_id
|
gorkaion@19377
|
659 |
AND quantity = 0
|
gorkaion@19377
|
660 |
AND COALESCE(releasedqty, 0) = 0;
|
gorkaion@19377
|
661 |
END;
|
david@22931
|
662 |
|
gorkaion@18652
|
663 |
END IF;
|
david@22931
|
664 |
|
carlos@0
|
665 |
v_ResultStr:='CreateTransaction';
|
carlos@0
|
666 |
Ad_Sequence_Next('M_Transaction', Cur_InOutLine.AD_Org_ID, v_NextNo) ;
|
carlos@0
|
667 |
INSERT
|
carlos@0
|
668 |
INTO M_TRANSACTION
|
carlos@0
|
669 |
(
|
carlos@0
|
670 |
M_Transaction_ID, M_InOutLine_ID, AD_Client_ID, AD_Org_ID,
|
carlos@0
|
671 |
IsActive, Created, CreatedBy, Updated,
|
carlos@0
|
672 |
UpdatedBy, MovementType, M_Locator_ID, M_Product_ID,
|
carlos@0
|
673 |
M_AttributeSetInstance_ID, MovementDate, MovementQty, M_Product_UOM_ID,
|
carlos@0
|
674 |
QuantityOrder, C_UOM_ID
|
carlos@0
|
675 |
)
|
carlos@0
|
676 |
VALUES
|
carlos@0
|
677 |
(
|
carlos@0
|
678 |
v_NextNo, Cur_InOutLine.M_InOutLine_ID, Cur_InOutLine.AD_Client_ID, Cur_InOutLine.AD_Org_ID,
|
harikrishnan@7227
|
679 |
'Y', now(), v_User, now(),
|
harikrishnan@7227
|
680 |
v_User, Cur_InOut.MovementType, Cur_InOutLine.M_Locator_ID, Cur_InOutLine.M_Product_ID,
|
juanpablo@1605
|
681 |
COALESCE(Cur_InOutLine.M_AttributeSetInstance_ID, '0'), Cur_InOut.MovementDate, v_Qty, Cur_InOutLine.M_Product_UOM_ID,
|
carlos@0
|
682 |
v_QuantityOrder, Cur_InOutLine.C_UOM_ID
|
carlos@0
|
683 |
)
|
carlos@0
|
684 |
;
|
carlos@0
|
685 |
END IF;
|
carlos@0
|
686 |
-- Create Asset
|
carlos@0
|
687 |
IF(Cur_InOutLine.M_Product_ID IS NOT NULL AND Cur_InOut.IsSOTrx='Y') THEN
|
antonio@735
|
688 |
A_ASSET_CREATE(NULL, Cur_InOutLine.M_InOutLine_ID) ;
|
carlos@0
|
689 |
END IF;
|
carlos@0
|
690 |
v_ResultStr:='UpdateOrderLine';
|
carlos@0
|
691 |
IF(Cur_InOutLine.C_OrderLine_ID IS NOT NULL) THEN
|
atul@21879
|
692 |
if(Cur_InOut.ISSOTRX='Y') THEN
|
atul@21879
|
693 |
-- Sets DateDelivered with the recent shipment date
|
atul@21879
|
694 |
-- of the shipment/s done for the orderline.
|
atul@21879
|
695 |
SELECT MAX(M.MOVEMENTDATE) INTO v_DateDelivered
|
atul@21879
|
696 |
FROM M_INOUTLINE ML, M_INOUT M
|
atul@21879
|
697 |
WHERE ML.C_OrderLine_ID = Cur_InOutLine.C_OrderLine_ID
|
atul@21879
|
698 |
AND ML.M_INOUT_ID = M.M_INOUT_ID
|
atul@21879
|
699 |
AND M.DOCSTATUS='CO';
|
atul@21879
|
700 |
ELSE
|
atul@21879
|
701 |
v_DateDelivered := null;
|
atul@21879
|
702 |
END IF;
|
atul@21879
|
703 |
|
atul@21879
|
704 |
IF(v_QtySO > 0) THEN
|
atul@21879
|
705 |
IF(v_DateDelivered IS NULL OR v_DateDelivered < Cur_InOut.MovementDate ) THEN
|
atul@21879
|
706 |
v_DateDelivered:=Cur_InOut.MovementDate;
|
atul@21879
|
707 |
END IF;
|
atul@21879
|
708 |
END IF;
|
atul@21879
|
709 |
|
carlos@0
|
710 |
-- stocked product
|
carlos@0
|
711 |
IF(Cur_InOutLine.M_Product_ID IS NOT NULL AND v_IsStocked=1) THEN
|
carlos@0
|
712 |
-- Update OrderLine (if C-, Qty is negative)
|
javier@21256
|
713 |
SELECT DOCSTATUS into v_DocStatus
|
javier@21256
|
714 |
FROM C_ORDER
|
javier@21256
|
715 |
WHERE C_ORDER_ID = (SELECT C_ORDER_ID
|
javier@21256
|
716 |
FROM C_ORDERLINE
|
javier@21256
|
717 |
WHERE C_ORDERLINE_ID=Cur_InOutLine.C_OrderLine_ID);
|
javier@21256
|
718 |
IF (v_DocStatus = 'DR') THEN
|
javier@21256
|
719 |
UPDATE C_ORDERLINE
|
javier@21256
|
720 |
SET QtyDelivered=QtyDelivered + v_QtySO,
|
atul@21879
|
721 |
DATEDELIVERED=(CASE WHEN (QtyDelivered + v_QtySO) > 0 THEN v_DateDelivered ELSE NULL END),
|
javier@21256
|
722 |
Updated=now(),
|
javier@21256
|
723 |
UpdatedBy=v_User
|
javier@21256
|
724 |
WHERE C_OrderLine_ID=Cur_InOutLine.C_OrderLine_ID;
|
javier@21256
|
725 |
ELSE
|
javier@21256
|
726 |
UPDATE C_ORDERLINE
|
javier@21256
|
727 |
SET QtyReserved=QtyReserved - v_QtyPO - v_QtySO,
|
atul@21879
|
728 |
DATEDELIVERED=(CASE WHEN (QtyReserved - v_QtyPO - v_QtySO) > 0 THEN v_DateDelivered ELSE NULL END),
|
javier@21256
|
729 |
QtyDelivered=QtyDelivered + v_QtySO,
|
javier@21256
|
730 |
Updated=now(),
|
javier@21256
|
731 |
UpdatedBy=v_User
|
javier@21256
|
732 |
WHERE C_OrderLine_ID=Cur_InOutLine.C_OrderLine_ID;
|
javier@21256
|
733 |
END IF;
|
carlos@0
|
734 |
-- Products not stocked
|
carlos@0
|
735 |
ELSE
|
carlos@0
|
736 |
-- Update OrderLine (if C-, Qty is negative)
|
carlos@0
|
737 |
UPDATE C_ORDERLINE
|
carlos@0
|
738 |
SET QtyDelivered=QtyDelivered + v_QtySO,
|
atul@21879
|
739 |
DATEDELIVERED=(CASE WHEN (QtyDelivered + v_QtySO) > 0 THEN v_DateDelivered ELSE NULL END),
|
harikrishnan@7227
|
740 |
Updated=now(),
|
harikrishnan@7227
|
741 |
UpdatedBy=v_User
|
carlos@0
|
742 |
WHERE C_OrderLine_ID=Cur_InOutLine.C_OrderLine_ID;
|
carlos@0
|
743 |
END IF;
|
carlos@0
|
744 |
END IF;
|
carlos@0
|
745 |
IF(Cur_InOutLine.M_Product_ID IS NOT NULL AND v_IsStocked=1) THEN
|
carlos@0
|
746 |
M_Check_Stock(Cur_InOutLine.M_Product_ID, v_AD_Client_ID, v_AD_Org_ID, v_Result, v_Message) ;
|
carlos@0
|
747 |
IF v_Result=0 THEN
|
ioritz@16496
|
748 |
SELECT name INTO v_ProductName FROM M_Product WHERE M_Product_id = Cur_InOutLine.M_Product_ID;
|
ioritz@16496
|
749 |
RAISE_APPLICATION_ERROR(-20000, v_Message||' '||'@line@'||' '||Cur_InOutLine.line||', '||'@Product@'||' '||v_ProductName) ;
|
carlos@0
|
750 |
END IF;
|
carlos@0
|
751 |
END IF;
|
carlos@0
|
752 |
END LOOP; -- For all InOut Lines
|
carlos@0
|
753 |
/*******************
|
carlos@0
|
754 |
* PO Matching
|
carlos@0
|
755 |
******************/
|
carlos@0
|
756 |
IF(Cur_InOut.IsSOTrx='N') THEN
|
carlos@0
|
757 |
DECLARE
|
carlos@0
|
758 |
Cur_SLines RECORD;
|
carlos@0
|
759 |
Cur_ILines RECORD;
|
carlos@0
|
760 |
v_Qty NUMBER;
|
juanpablo@1605
|
761 |
v_MatchPO_ID VARCHAR2(32) ;
|
juanpablo@1605
|
762 |
v_MatchInv_ID VARCHAR2(32) ;
|
carlos@0
|
763 |
BEGIN
|
carlos@0
|
764 |
v_ResultStr:='MatchPO';
|
carlos@0
|
765 |
FOR Cur_SLines IN
|
carlos@0
|
766 |
(SELECT sl.AD_Client_ID,
|
carlos@0
|
767 |
sl.AD_Org_ID,
|
carlos@0
|
768 |
ol.C_OrderLine_ID,
|
carlos@0
|
769 |
sl.M_InOutLine_ID,
|
carlos@0
|
770 |
sl.M_Product_ID,
|
carlos@0
|
771 |
sl.M_AttributeSetInstance_ID,
|
carlos@0
|
772 |
sl.MovementQty,
|
carlos@0
|
773 |
ol.QtyOrdered
|
carlos@0
|
774 |
FROM M_INOUTLINE sl,
|
carlos@0
|
775 |
C_ORDERLINE ol
|
carlos@0
|
776 |
WHERE sl.C_OrderLine_ID=ol.C_OrderLine_ID
|
carlos@0
|
777 |
AND sl.M_Product_ID=ol.M_Product_ID -- AND sl.M_AttributeSetInstance_ID=ol.M_AttributeSetInstance_ID
|
carlos@0
|
778 |
AND sl.M_InOut_ID=Cur_InOut.M_InOut_ID
|
carlos@0
|
779 |
)
|
david@19206
|
780 |
LOOP
|
david@19010
|
781 |
|
mikel@19201
|
782 |
v_Qty:=Cur_SLines.MovementQty;
|
mikel@19201
|
783 |
--IF (ABS(Cur_SLines.MovementQty) > ABS(Cur_SLines.QtyOrdered)) THEN
|
mikel@19201
|
784 |
-- v_Qty := Cur_SLines.QtyOrdered;
|
mikel@19201
|
785 |
--END IF;
|
david@19010
|
786 |
|
mikel@19201
|
787 |
Ad_Sequence_Next('M_MatchPO', Cur_SLines.AD_Org_ID, v_MatchPO_ID) ;
|
mikel@19201
|
788 |
-- The min qty. Modified by Ismael Ciordia
|
mikel@19201
|
789 |
v_ResultStr:='InsertMatchPO ' || v_MatchPO_ID;
|
mikel@19201
|
790 |
INSERT
|
mikel@19201
|
791 |
INTO M_MATCHPO
|
mikel@19201
|
792 |
(
|
mikel@19201
|
793 |
M_MatchPO_ID, AD_Client_ID, AD_Org_ID, IsActive,
|
mikel@19201
|
794 |
Created, CreatedBy, Updated, UpdatedBy,
|
mikel@19201
|
795 |
M_InOutLine_ID, C_OrderLine_ID, M_Product_ID, DateTrx,
|
mikel@19201
|
796 |
Qty, Processing, Processed, Posted
|
mikel@19201
|
797 |
)
|
mikel@19201
|
798 |
VALUES
|
mikel@19201
|
799 |
(
|
mikel@19201
|
800 |
v_MatchPO_ID, Cur_SLines.AD_Client_ID, Cur_SLines.AD_Org_ID, 'Y',
|
mikel@19201
|
801 |
now(), v_User, now(), v_User,
|
mikel@19201
|
802 |
Cur_SLines.M_InOutLine_ID, Cur_SLines.C_OrderLine_ID, Cur_SLines.M_Product_ID, now(),
|
mikel@19201
|
803 |
v_Qty, 'N', 'Y', 'N'
|
mikel@19201
|
804 |
)
|
mikel@19201
|
805 |
;
|
mikel@19198
|
806 |
|
carlos@0
|
807 |
END LOOP;
|
carlos@0
|
808 |
v_ResultStr:='MatchInv';
|
carlos@0
|
809 |
FOR Cur_ILines IN
|
carlos@0
|
810 |
(SELECT sl.AD_Client_ID,
|
carlos@0
|
811 |
sl.AD_Org_ID,
|
carlos@0
|
812 |
il.C_InvoiceLine_ID,
|
carlos@0
|
813 |
sl.M_InOutLine_ID,
|
carlos@0
|
814 |
sl.M_Product_ID,
|
carlos@0
|
815 |
sl.M_AttributeSetInstance_ID,
|
carlos@0
|
816 |
sl.MovementQty,
|
david@7233
|
817 |
il.QTYINVOICED,
|
david@7233
|
818 |
i.DateAcct
|
carlos@0
|
819 |
FROM M_INOUTLINE sl,
|
david@7233
|
820 |
C_INVOICE i,
|
carlos@0
|
821 |
C_INVOICELINE il
|
carlos@0
|
822 |
WHERE sl.M_InOutLine_ID=il.M_InOutLine_ID
|
carlos@0
|
823 |
AND sl.M_InOut_ID=Cur_InOut.M_InOut_ID
|
david@7233
|
824 |
AND i.C_INVOICE_ID = il.C_INVOICE_ID
|
carlos@0
|
825 |
)
|
carlos@0
|
826 |
LOOP
|
carlos@0
|
827 |
Ad_Sequence_Next('M_MatchInv', Cur_ILines.AD_Org_ID, v_MatchInv_ID) ;
|
carlos@0
|
828 |
-- The min qty. Modified by Ismael Ciordia
|
carlos@0
|
829 |
v_Qty:=Cur_ILines.MovementQty;
|
gorkaion@239
|
830 |
--IF (ABS(Cur_ILines.MovementQty) > ABS(Cur_ILines.QtyInvoiced)) THEN
|
carlos@0
|
831 |
-- v_Qty := Cur_ILines.QtyInvoiced;
|
carlos@0
|
832 |
--END IF;
|
carlos@0
|
833 |
v_ResultStr:='InsertMatchPO ' || v_MatchPO_ID;
|
carlos@0
|
834 |
INSERT
|
carlos@0
|
835 |
INTO M_MATCHINV
|
carlos@0
|
836 |
(
|
carlos@0
|
837 |
M_MATCHINV_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE,
|
carlos@0
|
838 |
CREATED, CREATEDBY, UPDATED, UPDATEDBY,
|
carlos@0
|
839 |
M_INOUTLINE_ID, C_INVOICELINE_ID, M_PRODUCT_ID, DATETRX,
|
carlos@0
|
840 |
QTY, PROCESSING, PROCESSED, POSTED
|
carlos@0
|
841 |
)
|
carlos@0
|
842 |
VALUES
|
carlos@0
|
843 |
(
|
carlos@0
|
844 |
v_MatchInv_ID, Cur_ILines.AD_Client_ID, Cur_ILines.AD_Org_ID, 'Y',
|
harikrishnan@7227
|
845 |
now(), v_User, now(), v_User,
|
david@7233
|
846 |
Cur_ILines.M_InOutLine_ID, Cur_ILines.C_InvoiceLine_ID, Cur_ILines.M_Product_ID, Cur_ILines.DateAcct,
|
carlos@0
|
847 |
v_Qty, 'N', 'Y', 'N'
|
carlos@0
|
848 |
)
|
carlos@0
|
849 |
;
|
carlos@0
|
850 |
END LOOP;
|
carlos@0
|
851 |
END;
|
gorkaion@3170
|
852 |
ELSE
|
gaurav@21852
|
853 |
--Void document is created automatically from main document .
|
gaurav@21852
|
854 |
--during completion of void document , we have to skip delivery rule for void document .
|
gaurav@21852
|
855 |
select COALESCE(instr(M_INOUT.Description,'*R*:'),0)
|
gaurav@21852
|
856 |
into v_voiddoccount
|
gaurav@21852
|
857 |
from M_INOUT
|
gaurav@21852
|
858 |
where M_INOUT.M_INOUT_id =v_Record_ID;
|
gaurav@21852
|
859 |
if v_voiddoccount = 0 then
|
gaurav@21852
|
860 |
v_ResultStr:='Check delivery rule for sales orders';
|
gaurav@21852
|
861 |
v_Message_aux:='';
|
gaurav@21852
|
862 |
v_orderid_old:='0';
|
gaurav@21852
|
863 |
FOR Cur_Order IN
|
gaurav@21852
|
864 |
(SELECT c_order.deliveryrule, m_inoutline.line, c_order.c_order_id,
|
gaurav@21852
|
865 |
c_order.documentno, c_orderline.line as orderline
|
gaurav@21852
|
866 |
FROM M_InOutLine, C_Orderline, C_Order
|
gaurav@21852
|
867 |
WHERE M_Inoutline.c_orderline_id = c_orderline.c_orderline_id
|
gaurav@21852
|
868 |
AND c_orderline.c_order_id = c_order.c_order_id
|
gaurav@21852
|
869 |
AND m_inoutline.m_inout_id = cur_inout.m_inout_id
|
gaurav@21852
|
870 |
AND ((c_order.deliveryrule = 'O'
|
gaurav@21852
|
871 |
AND EXISTS (SELECT 1 FROM C_OrderLine ol
|
gaurav@21852
|
872 |
WHERE ol.C_Order_ID = C_order.c_order_id
|
gaurav@21852
|
873 |
and ol.qtyordered > ol.qtydelivered ))
|
gaurav@21852
|
874 |
OR (c_order.deliveryrule = 'L'
|
gaurav@21852
|
875 |
AND c_orderline.qtyordered > c_orderline.qtydelivered))
|
gaurav@21852
|
876 |
ORDER BY c_order.c_order_id, c_orderline.line) LOOP
|
gaurav@21852
|
877 |
--Order lines not completely delivered with delivery rule O or L
|
gaurav@21852
|
878 |
IF (v_orderid_old <> cur_order.c_order_id OR cur_order.deliveryrule <> 'O' ) THEN
|
gaurav@21852
|
879 |
v_Message_aux := COALESCE(v_Message_aux,'') || '@Shipment@' || ' ' || cur_inout.documentno;
|
gaurav@21852
|
880 |
v_Message_aux := v_Message_aux || ' ' || '@line@' || ' ' || cur_order.line || ': ';
|
gaurav@21852
|
881 |
v_Message_aux := v_Message_aux || '@SalesOrderDocumentno@' || cur_order.documentno;
|
gaurav@21852
|
882 |
IF (cur_order.deliveryrule = 'O') THEN
|
gaurav@21852
|
883 |
v_Message_aux := v_Message_aux || ' ' || '@notCompleteDeliveryRuleOrder@' || '<br>';
|
gaurav@21852
|
884 |
ELSE
|
gaurav@21852
|
885 |
v_Message_aux := v_Message_aux || ' ' || '@line@' || ' ' || cur_order.orderline;
|
gaurav@21852
|
886 |
v_Message_aux := v_Message_aux || ' ' || '@notCompleteDeliveryRuleLine@' || '<br>';
|
gaurav@21852
|
887 |
END IF;
|
gorkaion@3170
|
888 |
END IF;
|
gaurav@21852
|
889 |
v_orderid_old := cur_order.c_order_id;
|
gaurav@21852
|
890 |
END LOOP;
|
gaurav@21852
|
891 |
IF (v_Message_aux IS NOT NULL AND v_Message_aux <> '') THEN
|
gaurav@21852
|
892 |
RAISE_APPLICATION_ERROR(-20000, v_Message_aux);
|
gorkaion@3170
|
893 |
END IF;
|
gorkaion@3170
|
894 |
END IF;
|
carlos@0
|
895 |
END IF;
|
carlos@0
|
896 |
-- Close Shipment
|
carlos@0
|
897 |
v_ResultStr:='CloseShipment';
|
carlos@0
|
898 |
UPDATE M_INOUT
|
carlos@0
|
899 |
SET Processed='Y',
|
carlos@0
|
900 |
DocStatus='CO',
|
carlos@0
|
901 |
DocAction='--',
|
mikel@19150
|
902 |
Process_Goods_Java='--',
|
harikrishnan@7227
|
903 |
Updated=now(),
|
harikrishnan@7227
|
904 |
UpdatedBy=v_User
|
carlos@0
|
905 |
WHERE M_INOUT.M_INOUT_ID=Cur_InOut.M_INOUT_ID;
|
carlos@0
|
906 |
--
|
asier@1027
|
907 |
|
asier@1027
|
908 |
|
carlos@0
|
909 |
-- Not Processed + Complete --
|
carlos@0
|
910 |
/**
|
carlos@0
|
911 |
* Reverse Correction
|
carlos@0
|
912 |
*/
|
carlos@0
|
913 |
ELSIF(Cur_InOut.DocStatus='CO' AND Cur_InOut.DocAction='RC') THEN
|
javier@17645
|
914 |
--Check if the m_inoutlines has an invoice lines related. In this case is not possible to void the m_inout.
|
javier@17645
|
915 |
SELECT COUNT(*)
|
javier@17645
|
916 |
INTO v_count
|
javier@17645
|
917 |
FROM M_INOUTLINE MIOL
|
javier@17645
|
918 |
JOIN C_INVOICELINE CIL ON MIOL.M_INOUTLINE_ID=CIL.M_INOUTLINE_ID
|
javier@17645
|
919 |
JOIN C_INVOICE CI ON CI.C_INVOICE_ID=CIL.C_INVOICE_ID
|
javier@17645
|
920 |
WHERE M_INOUT_ID=Cur_InOut.m_inout_id
|
javier@17645
|
921 |
AND CI.DOCSTATUS <> 'VO';
|
javier@17645
|
922 |
IF (v_count <> 0) THEN
|
javier@17645
|
923 |
RAISE_APPLICATION_ERROR(-20000,'@VoidShipmentWithRelatedInvoice@');
|
javier@17645
|
924 |
END IF;
|
gorkaion@5377
|
925 |
--Check that there isn't any line with an invoice if the order's
|
gorkaion@5377
|
926 |
--invoice rule is after delivery
|
gorkaion@5377
|
927 |
select count(*), max(line) into v_count, v_line
|
gorkaion@5377
|
928 |
from (
|
gorkaion@5377
|
929 |
SELECT m_inoutline.m_inoutline_id, m_inoutline.line
|
gorkaion@5377
|
930 |
from m_inoutline, c_order, c_orderline, c_invoiceline, m_inout, c_invoice
|
gorkaion@5377
|
931 |
where m_inoutline.c_orderline_id = c_orderline.c_orderline_id
|
gorkaion@5377
|
932 |
and c_orderline.c_order_id = c_order.c_order_id
|
gorkaion@5377
|
933 |
and c_orderline.c_orderline_id = c_invoiceline.c_orderline_id
|
gorkaion@5377
|
934 |
and m_inoutline.m_inout_id = m_inout.m_inout_id
|
gorkaion@5377
|
935 |
and c_invoiceline.c_invoice_id = c_invoice.c_invoice_id
|
gorkaion@5377
|
936 |
and m_inout.m_inout_id = Cur_InOut.m_inout_id
|
gorkaion@5377
|
937 |
and m_inout.issotrx = 'Y'
|
gorkaion@5377
|
938 |
and c_order.invoicerule in ('D', 'O', 'S')
|
gorkaion@5377
|
939 |
and c_invoice.processed='Y'
|
gorkaion@5377
|
940 |
group by m_inoutline.m_inoutline_id, m_inoutline.line
|
rafael@5506
|
941 |
having sum(c_invoiceline.qtyinvoiced) <> 0
|
gorkaion@5377
|
942 |
) a;
|
gorkaion@5377
|
943 |
IF (v_count > 0 ) THEN
|
gorkaion@5377
|
944 |
v_Message := '@InoutDocumentno@' || ': ' || Cur_InOut.DocumentNo || ' ' || '@line@' || ': ' || v_line || '. ';
|
gorkaion@5377
|
945 |
v_Message := v_Message || '@VoidShipmentInvoiced@';
|
gorkaion@5377
|
946 |
RAISE_APPLICATION_ERROR(-20000, v_Message);
|
gorkaion@5377
|
947 |
END IF;
|
carlos@0
|
948 |
v_ResultStr:='CreateInOut';
|
carlos@0
|
949 |
SELECT COALESCE(C_DOCTYPE_REVERSED_ID, C_DOCTYPE_ID)
|
carlos@0
|
950 |
INTO v_DoctypeReversed_ID
|
carlos@0
|
951 |
FROM C_DOCTYPE
|
carlos@0
|
952 |
WHERE C_DOCTYPE_ID=Cur_InOut.C_DocType_ID;
|
carlos@0
|
953 |
Ad_Sequence_Next('M_InOut', Cur_InOut.M_InOut_ID, v_RInOut_ID) ; -- Get RInOut_ID
|
carlos@0
|
954 |
Ad_Sequence_Doctype(v_DoctypeReversed_ID, Cur_InOut.M_InOut_ID, 'Y', v_RDocumentNo) ; -- Get RDocumentNo
|
carlos@0
|
955 |
IF(v_RDocumentNo IS NULL) THEN
|
carlos@0
|
956 |
AD_Sequence_Doc('DocumentNo_M_InOut', Cur_InOut.AD_Client_ID, 'Y', v_RDocumentNo) ;
|
carlos@0
|
957 |
END IF;
|
carlos@0
|
958 |
-- Indicate that it is invoiced (i.e. not printed on invoices)
|
carlos@0
|
959 |
v_ResultStr:='SetInvoiced';
|
harikrishnan@7227
|
960 |
UPDATE M_INOUTLINE SET IsInvoiced='Y',Updated=now(),UpdatedBy=v_User WHERE M_InOut_ID=Cur_InOut.M_InOut_ID;
|
carlos@0
|
961 |
--
|
carlos@0
|
962 |
DBMS_OUTPUT.PUT_LINE('Reverse InOut_ID=' || v_RInOut_ID || ' DocumentNo=' || v_RDocumentNo) ;
|
carlos@0
|
963 |
v_ResultStr:='InsertInOut Reverse ' || v_RInOut_ID;
|
carlos@0
|
964 |
INSERT
|
carlos@0
|
965 |
INTO M_INOUT
|
carlos@0
|
966 |
(
|
carlos@0
|
967 |
M_InOut_ID, C_Order_ID, IsSOTrx, AD_Client_ID,
|
carlos@0
|
968 |
AD_Org_ID, IsActive, Created, CreatedBy,
|
carlos@0
|
969 |
Updated, UpdatedBy, DocumentNo, C_DocType_ID,
|
carlos@0
|
970 |
Description, IsPrinted, MovementType, MovementDate,
|
carlos@0
|
971 |
DateAcct, C_BPartner_ID, C_BPartner_Location_ID, AD_User_ID,
|
carlos@0
|
972 |
M_Warehouse_ID, POReference, DateOrdered, DeliveryRule,
|
carlos@0
|
973 |
FreightCostRule, FreightAmt, C_Project_ID, C_Activity_ID,
|
carlos@0
|
974 |
C_Campaign_ID, AD_OrgTrx_ID, User1_ID, User2_ID,
|
eduardo@18857
|
975 |
C_Costcenter_ID, A_Asset_ID,
|
carlos@0
|
976 |
DeliveryViaRule, M_Shipper_ID, C_Charge_ID, ChargeAmt,
|
carlos@0
|
977 |
PriorityRule, DocStatus, DocAction, Processing,
|
mikel@19150
|
978 |
Processed, ISLOGISTIC, salesrep_id, Process_Goods_Java
|
carlos@0
|
979 |
)
|
carlos@0
|
980 |
VALUES
|
carlos@0
|
981 |
(
|
carlos@0
|
982 |
v_RInOut_ID, Cur_InOut.C_Order_ID, Cur_InOut.IsSOTrx, Cur_InOut.AD_Client_ID,
|
harikrishnan@7227
|
983 |
Cur_InOut.AD_Org_ID, 'Y', now(), v_User,
|
harikrishnan@7227
|
984 |
now(), v_User, v_RDocumentNo, v_DoctypeReversed_ID,
|
unai@15382
|
985 |
'(*R*: ' || Cur_InOut.DocumentNo || ') ' || COALESCE(TO_CHAR(Cur_InOut.Description), ''), 'N', Cur_InOut.MovementType, Cur_InOut.MovementDate,
|
carlos@0
|
986 |
Cur_InOut.DateAcct, Cur_InOut.C_BPartner_ID, Cur_InOut.C_BPartner_Location_ID, Cur_InOut.AD_User_ID,
|
carlos@0
|
987 |
Cur_InOut.M_Warehouse_ID, Cur_InOut.POReference, Cur_InOut.DateOrdered, Cur_InOut.DeliveryRule,
|
carlos@0
|
988 |
Cur_InOut.FreightCostRule, Cur_InOut.FreightAmt * -1, Cur_InOut.C_Project_ID, Cur_InOut.C_Activity_ID,
|
carlos@0
|
989 |
Cur_InOut.C_Campaign_ID, Cur_InOut.AD_OrgTrx_ID, Cur_InOut.User1_ID, Cur_InOut.User2_ID,
|
eduardo@18857
|
990 |
Cur_InOut.C_Costcenter_ID, Cur_InOut.A_Asset_ID,
|
carlos@0
|
991 |
Cur_InOut.DeliveryViaRule, Cur_InOut.M_Shipper_ID, Cur_InOut.C_Charge_ID, Cur_InOut.ChargeAmt * -1,
|
carlos@0
|
992 |
Cur_InOut.PriorityRule, 'DR', 'CO', 'N',
|
mikel@19150
|
993 |
'N', Cur_InOut.islogistic, Cur_InOut.salesrep_id, 'CO'
|
carlos@0
|
994 |
)
|
carlos@0
|
995 |
;
|
carlos@0
|
996 |
v_ResultStr:='InsertInOutLine';
|
carlos@0
|
997 |
FOR Cur_InOutLine IN
|
carlos@0
|
998 |
(SELECT *
|
carlos@0
|
999 |
FROM M_INOUTLINE
|
carlos@0
|
1000 |
WHERE M_InOut_ID=Cur_InOut.M_InOut_ID
|
carlos@0
|
1001 |
AND IsActive='Y' FOR UPDATE
|
carlos@0
|
1002 |
)
|
carlos@0
|
1003 |
LOOP
|
carlos@0
|
1004 |
-- Create InOut Line
|
carlos@0
|
1005 |
Ad_Sequence_Next('M_InOutLine', Cur_InOut.M_InOut_ID, v_NextNo) ;
|
carlos@0
|
1006 |
v_ResultStr:='CreateInOutLine';
|
carlos@0
|
1007 |
INSERT
|
carlos@0
|
1008 |
INTO M_INOUTLINE
|
carlos@0
|
1009 |
(
|
carlos@0
|
1010 |
M_InOutLine_ID, Line, M_InOut_ID, C_OrderLine_ID,
|
carlos@0
|
1011 |
AD_Client_ID, AD_Org_ID, IsActive, Created,
|
carlos@0
|
1012 |
CreatedBy, Updated, UpdatedBy, M_Product_ID,
|
carlos@0
|
1013 |
M_AttributeSetInstance_ID, C_UOM_ID, M_Locator_ID, MovementQty,
|
asier@799
|
1014 |
Description, IsInvoiced, --MODIFIED BY F.IRIAZABAL
|
gorkaion@15487
|
1015 |
QuantityOrder, M_Product_UOM_ID, IsDescription,
|
eduardo@18857
|
1016 |
canceled_inoutline_id, A_Asset_ID, C_Project_ID, C_BPartner_ID,
|
naiara@19828
|
1017 |
User1_ID, User2_ID, C_CostCenter_ID,
|
naiara@19828
|
1018 |
explode
|
carlos@0
|
1019 |
)
|
carlos@0
|
1020 |
VALUES
|
carlos@0
|
1021 |
(
|
carlos@0
|
1022 |
v_NextNo, Cur_InOutLine.Line, v_RInOut_ID, Cur_InOutLine.C_OrderLine_ID,
|
carlos@0
|
1023 |
Cur_InOut.AD_Client_ID, Cur_InOut.AD_Org_ID, 'Y', now(),
|
harikrishnan@7227
|
1024 |
v_User, now(), v_User, Cur_InOutLine.M_Product_ID,
|
carlos@0
|
1025 |
Cur_InOutLine.M_AttributeSetInstance_ID, Cur_InOutLine.C_UOM_ID, Cur_InOutLine.M_Locator_ID, Cur_InOutLine.MovementQty * -1,
|
unai@15382
|
1026 |
'*R*: ' || COALESCE(TO_CHAR(Cur_InOutLine.Description), ''), Cur_InOutLine.IsInvoiced, --MODIFIED BY F.IRIAZABAL
|
gorkaion@15487
|
1027 |
Cur_InOutLine.QuantityOrder * -1, Cur_InOutLine.M_PRODUCT_UOM_ID, Cur_InOutLine.IsDescription,
|
eduardo@18857
|
1028 |
Cur_InOutLine.M_InOutLine_ID, Cur_InOutLine.A_Asset_ID, Cur_InOutLine.C_Project_ID, Cur_InOutLine.C_BPartner_ID,
|
naiara@19828
|
1029 |
Cur_InOutLine.User1_ID, Cur_InOutLine.User2_ID, Cur_InOutLine.C_CostCenter_ID,
|
naiara@19828
|
1030 |
Cur_InOutLine.explode
|
carlos@0
|
1031 |
)
|
carlos@0
|
1032 |
;
|
pandeeswari@22049
|
1033 |
|
pandeeswari@22049
|
1034 |
-- Create InOut acctounting dimension
|
pandeeswari@22049
|
1035 |
v_ResultStr:='CreateInOutLineAcctDimension';
|
pandeeswari@22049
|
1036 |
INSERT
|
pandeeswari@22049
|
1037 |
INTO M_INOUTLINE_ACCTDIMENSION
|
pandeeswari@22049
|
1038 |
(
|
pandeeswari@22049
|
1039 |
M_InOutLine_Acctdimension_ID, M_InOutLine_ID, Quantity,
|
pandeeswari@22049
|
1040 |
AD_Client_ID, AD_Org_ID, IsActive, Created,
|
pandeeswari@22049
|
1041 |
CreatedBy, Updated, UpdatedBy, M_Product_ID, C_BPartner_ID,
|
pandeeswari@22049
|
1042 |
C_Project_ID, C_Campaign_ID, C_Activity_ID, A_Asset_ID,
|
pandeeswari@22049
|
1043 |
User1_ID, User2_ID, C_CostCenter_ID
|
pandeeswari@22049
|
1044 |
)
|
pandeeswari@22052
|
1045 |
SELECT
|
pandeeswari@22052
|
1046 |
get_uuid(), v_NextNo, Quantity * -1,
|
pandeeswari@22052
|
1047 |
AD_Client_ID, AD_Org_ID, 'Y', now(),
|
pandeeswari@22052
|
1048 |
v_User, now(), v_User, M_Product_ID, C_BPartner_ID,
|
pandeeswari@22052
|
1049 |
C_Project_ID, C_Campaign_ID, C_Activity_ID , A_Asset_ID,
|
pandeeswari@22052
|
1050 |
User1_ID, User2_ID, C_CostCenter_ID
|
pandeeswari@22052
|
1051 |
FROM M_INOUTLINE_ACCTDIMENSION where M_INOUTLINE_ID=Cur_InOutLine.M_INOUTLINE_ID
|
pandeeswari@22052
|
1052 |
and IsActive = 'Y';
|
pandeeswari@22052
|
1053 |
|
david@7235
|
1054 |
INSERT INTO M_MATCHINV
|
david@7235
|
1055 |
(M_MATCHINV_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY,
|
david@7235
|
1056 |
M_INOUTLINE_ID, C_INVOICELINE_ID, M_PRODUCT_ID, DATETRX, QTY, PROCESSING, PROCESSED, POSTED)
|
david@7235
|
1057 |
SELECT
|
david@7235
|
1058 |
GET_UUID(), MI.AD_CLIENT_ID, MI.AD_ORG_ID, MI.ISACTIVE, now(), '0', now(), '0',
|
david@7240
|
1059 |
v_NextNo, MI.C_INVOICELINE_ID, MI.M_PRODUCT_ID, MI.DATETRX, -MI.QTY, 'N', 'Y', 'N'
|
david@7235
|
1060 |
FROM M_MATCHINV MI
|
david@7235
|
1061 |
WHERE MI.M_INOUTLINE_ID = Cur_InOutLine.M_InOutLine_ID;
|
gorkaion@19377
|
1062 |
|
carlos@0
|
1063 |
END LOOP;
|
carlos@0
|
1064 |
-- Close Order
|
carlos@0
|
1065 |
v_ResultStr:='CloseInOut';
|
carlos@0
|
1066 |
UPDATE M_INOUT
|
carlos@0
|
1067 |
SET Description=COALESCE(TO_CHAR(Description), '') || ' (*R*=' || v_RDocumentNo || ')',
|
carlos@0
|
1068 |
Processed='Y',
|
ainhoa@2454
|
1069 |
DocStatus='VO', -- it IS reversed
|
carlos@0
|
1070 |
DocAction='--',
|
mikel@19150
|
1071 |
Process_Goods_Java='--',
|
carlos@0
|
1072 |
Updated=now(),
|
carlos@0
|
1073 |
UpdatedBy=v_User
|
carlos@0
|
1074 |
WHERE M_INOUT.M_INOUT_ID=Cur_InOut.M_INOUT_ID;
|
unai@15382
|
1075 |
|
unai@15382
|
1076 |
FOR Cur_InOutLine IN
|
unai@15382
|
1077 |
(SELECT *
|
unai@15382
|
1078 |
FROM M_INOUTLINE
|
unai@15382
|
1079 |
WHERE M_InOut_ID=Cur_InOut.M_InOut_ID
|
unai@15382
|
1080 |
AND IsActive='Y' FOR UPDATE
|
unai@15382
|
1081 |
)
|
unai@15382
|
1082 |
LOOP
|
unai@15382
|
1083 |
UPDATE M_INOUTLINE
|
unai@15382
|
1084 |
SET Description=COALESCE(TO_CHAR(Cur_InOutLine.Description), '') || ' : *R*',
|
unai@15382
|
1085 |
Updated=now(),
|
unai@15382
|
1086 |
UpdatedBy=v_User
|
unai@15382
|
1087 |
WHERE M_INOUTLINE.M_INOUTLINE_ID=Cur_InOutLine.M_INOUTLINE_ID;
|
unai@15382
|
1088 |
END LOOP;
|
unai@15382
|
1089 |
|
carlos@0
|
1090 |
-- Post Reversal
|
carlos@0
|
1091 |
v_ResultStr:='PostReversal';
|
mikel@19131
|
1092 |
-- Update reversal goods dates
|
mikel@19131
|
1093 |
IF (v_voidmovementdate IS NOT NULL) THEN
|
mikel@19131
|
1094 |
UPDATE M_INOUT SET MovementDate = v_voidmovementdate WHERE M_INOUT_ID = v_RInOut_ID;
|
mikel@19131
|
1095 |
END IF;
|
mikel@19131
|
1096 |
IF (v_voiddate_acct IS NOT NULL) THEN
|
mikel@19131
|
1097 |
UPDATE M_INOUT SET DateAcct = v_voiddate_acct WHERE M_INOUT_ID = v_RInOut_ID;
|
mikel@19131
|
1098 |
END IF;
|
antonio@735
|
1099 |
M_INOUT_POST(NULL, v_RInOut_ID) ;
|
carlos@0
|
1100 |
-- Indicate as Reversal Transaction
|
carlos@0
|
1101 |
v_ResultStr:='IndicateReversal';
|
carlos@0
|
1102 |
UPDATE M_INOUT
|
carlos@0
|
1103 |
SET Updated=now(),
|
carlos@0
|
1104 |
UpdatedBy=v_User,
|
ainhoa@2454
|
1105 |
DocStatus='VO' -- the reversal transaction
|
carlos@0
|
1106 |
WHERE M_InOut_ID=v_RInOut_ID;
|
carlos@0
|
1107 |
END IF; -- ReverseCorrection
|
adrianromero@7702
|
1108 |
|
adrianromero@7702
|
1109 |
--M_Inout_Post - Finish_Process Extension Point
|
adrianromero@7702
|
1110 |
--Extension point at the end of the M_Inout_Post. It has 5 available parameters Record_ID, DocAction, User, Message and Result
|
adrianromero@7702
|
1111 |
SELECT count(*) INTO v_count
|
adrianromero@7702
|
1112 |
FROM DUAL
|
adrianromero@7702
|
1113 |
where exists (select 1 from ad_ep_procedures where ad_extension_points_id = '5A7C6972321E42C2A5A8E9D6D73E6A7C');
|
adrianromero@7702
|
1114 |
IF (v_count=1) THEN
|
adrianromero@7702
|
1115 |
DECLARE
|
adrianromero@7702
|
1116 |
v_ep_instance VARCHAR2(32);
|
adrianromero@7702
|
1117 |
v_extension_point_id VARCHAR2(32) := '5A7C6972321E42C2A5A8E9D6D73E6A7C';
|
adrianromero@7702
|
1118 |
BEGIN
|
adrianromero@7702
|
1119 |
v_ep_instance := get_uuid();
|
adrianromero@7702
|
1120 |
AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Record_ID',
|
adrianromero@7702
|
1121 |
v_record_id, NULL, NULL, NULL, NULL, NULL, NULL);
|
adrianromero@7702
|
1122 |
AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'DocAction',
|
adrianromero@7702
|
1123 |
Cur_InOut.DocAction, NULL, NULL, NULL, NULL, NULL, NULL);
|
adrianromero@7702
|
1124 |
AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'User',
|
adrianromero@7702
|
1125 |
v_User, NULL, NULL, NULL, NULL, NULL, NULL);
|
adrianromero@7702
|
1126 |
AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Message',
|
adrianromero@7702
|
1127 |
NULL, NULL, NULL, NULL, NULL, NULL, v_Message);
|
adrianromero@7702
|
1128 |
AD_EP_INSTANCE_PARA_INSERT(v_ep_instance, v_extension_point_id, 'Result',
|
adrianromero@7702
|
1129 |
NULL, NULL, v_Result, NULL, NULL, NULL, NULL);
|
adrianromero@7702
|
1130 |
AD_EXTENSION_POINT_HANDLER(v_ep_instance, v_extension_point_id);
|
adrianromero@7702
|
1131 |
SELECT p_number INTO v_Result
|
adrianromero@7702
|
1132 |
FROM ad_ep_instance_para
|
adrianromero@7702
|
1133 |
WHERE ad_ep_instance_id = v_ep_instance
|
adrianromero@7702
|
1134 |
AND parametername LIKE 'Result';
|
adrianromero@7702
|
1135 |
SELECT p_text INTO v_Message
|
adrianromero@7702
|
1136 |
FROM ad_ep_instance_para
|
adrianromero@7702
|
1137 |
WHERE ad_ep_instance_id = v_ep_instance
|
adrianromero@7702
|
1138 |
AND parametername LIKE 'Message';
|
adrianromero@7702
|
1139 |
|
adrianromero@7702
|
1140 |
DELETE FROM ad_ep_instance_para
|
adrianromero@7702
|
1141 |
WHERE ad_ep_instance_id = v_ep_instance;
|
adrianromero@7702
|
1142 |
END;
|
adrianromero@7702
|
1143 |
END IF;
|
adrianromero@7702
|
1144 |
|
carlos@0
|
1145 |
END LOOP; -- InOut Header
|
carlos@0
|
1146 |
/**
|
carlos@0
|
1147 |
* Transaction End
|
carlos@0
|
1148 |
*/
|
carlos@0
|
1149 |
v_ResultStr:='Fini';
|
carlos@0
|
1150 |
END IF; --FINISH_PROCESS
|
gorkaion@239
|
1151 |
--<<FINISH_PROCESS>>
|
carlos@0
|
1152 |
IF(p_PInstance_ID IS NOT NULL) THEN
|
carlos@0
|
1153 |
-- Update AD_PInstance
|
carlos@0
|
1154 |
DBMS_OUTPUT.PUT_LINE('Updating PInstance - Finished ' || v_Message) ;
|
carlos@0
|
1155 |
AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', v_Result, v_Message) ;
|
carlos@0
|
1156 |
ELSE
|
gorkaion@239
|
1157 |
DBMS_OUTPUT.PUT_LINE('--<<M_InOut_Post finished>>') ;
|
carlos@0
|
1158 |
END IF;
|
carlos@0
|
1159 |
RETURN;
|
carlos@0
|
1160 |
END; --BODY
|
carlos@0
|
1161 |
EXCEPTION
|
carlos@0
|
1162 |
WHEN OTHERS THEN
|
carlos@0
|
1163 |
v_ResultStr:= '@ERROR=' || SQLERRM;
|
carlos@0
|
1164 |
DBMS_OUTPUT.PUT_LINE(v_ResultStr) ;
|
carlos@0
|
1165 |
IF(p_PInstance_ID IS NOT NULL) THEN
|
carlos@0
|
1166 |
ROLLBACK;
|
carlos@0
|
1167 |
AD_UPDATE_PINSTANCE(p_PInstance_ID, NULL, 'N', 0, v_ResultStr) ;
|
carlos@0
|
1168 |
ELSE
|
carlos@0
|
1169 |
RAISE;
|
carlos@0
|
1170 |
END IF;
|
carlos@0
|
1171 |
RETURN;
|
antonio@735
|
1172 |
END M_INOUT_POST
|
juanpablo@3490
|
1173 |
]]></body>
|
juanpablo@3490
|
1174 |
</function>
|
juanpablo@3490
|
1175 |
</database>
|