Advertisement
DjonathanKrause

usf_cancel_po com erro

Feb 22nd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.79 KB | None | 0 0
  1. create or replace FUNCTION USF_CANCEL_PO (in_vchwhid VARCHAR2
  2. ,in_vchponumber VARCHAR2
  3. ,in_vchuserid VARCHAR2
  4. ,in_vchobs VARCHAR2)
  5. RETURN VARCHAR2 is
  6. PRAGMA AUTONOMOUS_TRANSACTION;
  7.  
  8. -- Error handling and logging variables.
  9. v_nlogerrornum INT; -- The # that uniquely tags the error message.
  10. v_vcherrormsg VARCHAR2(500 CHAR);
  11. e_genprocerror EXCEPTION;
  12. v_nCount INT;
  13. v_vchOutMsg VARCHAR2(500 CHAR);
  14. v_vchDisplayPONumber VARCHAR2(30 CHAR);
  15. v_vchHostGroupID VARCHAR2(500 CHAR);
  16. V_RECEIPT_ID NUMBER(10);
  17.  
  18. CURSOR C_PO_DETAIL(P_PONUMBER IN VARCHAR2, P_WHID IN VARCHAR2) IS
  19. SELECT MAS.WH_ID,
  20. MAS.PO_NUMBER,
  21. 'P-'||MAS.DISPLAY_PO_NUMBER AS SCAC_CODE,
  22. DET.ITEM_NUMBER,
  23. DET.LINE_NUMBER,
  24. DET.QTY
  25. FROM T_PO_DETAIL DET, T_PO_MASTER MAS
  26. WHERE MAS.PO_NUMBER = P_PONUMBER
  27. AND MAS.PO_NUMBER = DET.PO_NUMBER
  28. AND MAS.WH_ID = DET.WH_ID
  29. AND MAS.WH_ID = P_WHID;
  30.  
  31. BEGIN
  32. -- Verifica se algum item foi recebido
  33. SELECT COUNT(*)
  34. INTO v_nCount
  35. FROM t_receipt
  36. WHERE wh_id = in_vchwhid
  37. AND po_number = in_vchponumber;
  38.  
  39. IF v_nCount <> 0 THEN
  40. v_vchOutMsg := 'OE não foi cancelada pois há itens já recebidos na Ordem de Entrada';
  41. GOTO retorno;
  42. END IF;
  43.  
  44. --Captura infromações para LOG
  45. SELECT display_po_number
  46. INTO v_vchDisplayPONumber
  47. FROM t_po_master
  48. WHERE wh_id = in_vchwhid
  49. AND po_number = in_vchponumber;
  50.  
  51. --Verifica se PO tem mais de uma ordem em aberto
  52. SELECT COUNT(*)
  53. INTO v_nCount
  54. FROM t_po_master
  55. WHERE wh_id = in_vchwhid
  56. AND display_po_number = v_vchDisplayPONumber
  57. AND status = 'O';
  58.  
  59. IF v_nCount > 1 THEN
  60. v_vchOutMsg := 'OE não foi cancelada pois há mais uma de Ordem de Entrada em aberto para a PO';
  61. GOTO retorno;
  62. END IF;
  63.  
  64. -- Verifica se algum item já foi separado
  65. SELECT COUNT(*)
  66. INTO v_nCount
  67. FROM t_pick_detail
  68. WHERE (pick_id) in (SELECT pkd.pick_id
  69. FROM t_pick_detail pkd, t_order orm
  70. WHERE pkd.order_number = orm.order_number
  71. AND pkd.wh_id = orm.wh_id
  72. AND orm.wh_id = in_vchwhid
  73. AND orm.cust_po_number = v_vchDisplayPONumber
  74. AND pkd.picked_quantity > 0);
  75.  
  76. IF v_nCount <> 0 THEN
  77. v_vchOutMsg := 'OE não foi cancelada pois há itens já separados dessa Ordem de Entrada';
  78. GOTO retorno;
  79. END IF;
  80.  
  81. -- Verifica se existem tarefas de separação associada
  82. SELECT COUNT(*)
  83. INTO v_nCount
  84. FROM t_work_q wkq
  85. WHERE (wkq.wh_id, wkq.work_q_id) in
  86. (SELECT pkd.wh_id, pkd.work_q_id
  87. FROM t_pick_detail pkd, t_order orm
  88. WHERE pkd.order_number = orm.order_number
  89. and pkd.wh_id = orm.wh_id
  90. and orm.wh_id = in_vchwhid
  91. and orm.cust_po_number = v_vchDisplayPONumber)
  92. AND wkq.work_status in ('A', 'C');
  93.  
  94. IF v_nCount <> 0 THEN
  95. v_vchOutMsg := 'OE não foi cancelada pois há tarefas de separação atribuídas aos usuários';
  96. GOTO retorno;
  97. END IF;
  98.  
  99. -- Problema 400-892 - Adicionado a validação para verificar se contém ASN para a PO Mencionada.
  100. SELECT COUNT(*)
  101. INTO v_nCount
  102. FROM t_hu_master hum
  103. WHERE hum.wh_id = in_vchwhid
  104. AND hum.hu_id in (SELECT asn.hu_id
  105. FROM t_al_host_transfer_asn asn
  106. WHERE asn.wh_id = hum.wh_id
  107. AND asn.hu_id = hum.hu_id
  108. AND asn.display_po_number = v_vchDisplayPONumber);
  109.  
  110. IF v_nCount <> 0 THEN
  111. v_vchOutMsg := 'OE não foi cancelada, Efetuar primeiramente o cancelamento de ASN para essa PO';
  112. GOTO retorno;
  113. END IF;
  114. -- Fim Problema 400-892
  115.  
  116.  
  117. --- Implementa validacao tipo de PO de importados.
  118. SELECT COUNT(*)
  119. INTO v_nCount
  120. FROM t_po_master mas, v_type tpe
  121. WHERE mas.po_number = in_vchponumber
  122. AND mas.wh_id = in_vchwhid
  123. AND mas.TYPE_ID = tpe.TYPE_ID
  124. and tpe.type = 'IP';
  125.  
  126. IF v_nCount <> 0 THEN
  127. v_vchOutMsg := 'Não é possível cancelar PO de importados.';
  128. GOTO retorno;
  129. END IF;
  130.  
  131. /* ***** Bloco abaixo foi retirado conforme definicoes do PJ00088 - SIM ********* */
  132. /*
  133. DELETE t_po_detail
  134. WHERE wh_id = in_vchwhid
  135. AND po_number = in_vchponumber;
  136.  
  137. DELETE t_po_detail_dest
  138. WHERE wh_id = in_vchwhid
  139. AND po_number = in_vchponumber;
  140.  
  141. DELETE t_po_master
  142. WHERE wh_id = in_vchwhid
  143. AND po_number = in_vchponumber;
  144. */
  145.  
  146. DELETE t_hu_audit
  147. WHERE wh_id = in_vchwhid
  148. AND po_number = in_vchponumber;
  149.  
  150. DELETE t_work_q_assignment
  151. WHERE (wh_id, work_q_id) in (SELECT pkd.wh_id
  152. , pkd.work_q_id
  153. FROM t_pick_detail pkd,
  154. t_order orm
  155. WHERE pkd.order_number = orm.order_number
  156. and pkd.wh_id = orm.wh_id
  157. and orm.wh_id = in_vchwhid
  158. and orm.cust_po_number = v_vchDisplayPONumber
  159. );
  160.  
  161. DELETE t_work_q
  162. WHERE (wh_id, work_q_id) in (SELECT pkd.wh_id
  163. , pkd.work_q_id
  164. FROM t_pick_detail pkd,
  165. t_order orm
  166. WHERE pkd.order_number = orm.order_number
  167. and pkd.wh_id = orm.wh_id
  168. and orm.wh_id = in_vchwhid
  169. and orm.cust_po_number = v_vchDisplayPONumber
  170. );
  171.  
  172. DELETE t_pick_detail
  173. WHERE (pick_id) in (SELECT pkd.pick_id
  174. FROM t_pick_detail pkd,
  175. t_order orm
  176. WHERE pkd.order_number = orm.order_number
  177. AND pkd.wh_id = orm.wh_id
  178. AND orm.wh_id = in_vchwhid
  179. AND orm.cust_po_number = v_vchDisplayPONumber
  180. );
  181.  
  182. DELETE t_order_detail
  183. WHERE (wh_id, order_number) in (SELECT wh_id
  184. , order_number
  185. FROM t_order
  186. WHERE wh_id = in_vchwhid
  187. AND cust_po_number = v_vchDisplayPONumber
  188. );
  189.  
  190. DELETE t_order
  191. WHERE wh_id = in_vchwhid
  192. AND cust_po_number = v_vchDisplayPONumber;
  193.  
  194. --- iNSERE DADOS DA PO NA T_RECEIPT
  195. SELECT next_value
  196. INTO V_RECEIPT_ID
  197. FROM T_CONTROL
  198. WHERE control_type = 'RECEIPT_ID';
  199.  
  200. V_RECEIPT_ID := V_RECEIPT_ID + 1;
  201.  
  202. UPDATE T_CONTROL
  203. SET next_value = V_RECEIPT_ID
  204. WHERE control_type = 'RECEIPT_ID';
  205.  
  206. FOR R_PO_DETAIL IN C_PO_DETAIL(in_vchponumber, in_vchwhid) LOOP
  207.  
  208. INSERT INTO T_RECEIPT
  209. (RECEIPT_ID,
  210. PO_NUMBER,
  211. RECEIPT_DATE,
  212. ITEM_NUMBER,
  213. LINE_NUMBER,
  214. SCHEDULE_NUMBER,
  215. QTY_RECEIVED,
  216. QTY_DAMAGED,
  217. HU_ID,
  218. FORK_ID,
  219. TRAN_STATUS,
  220. WH_ID,
  221. SCAC_CODE)
  222. VALUES
  223. (V_RECEIPT_ID,
  224. R_PO_DETAIL.PO_NUMBER,
  225. TRUNC(SYSDATE),
  226. R_PO_DETAIL.ITEM_NUMBER,
  227. R_PO_DETAIL.LINE_NUMBER,
  228. NULL,
  229. 0, --R_PO_DETAIL.QTY,
  230. NULL,
  231. NULL,
  232. NULL,
  233. 'O',
  234. R_PO_DETAIL.WH_ID,
  235. R_PO_DETAIL.SCAC_CODE);
  236.  
  237. END LOOP;
  238.  
  239. -- Gerando transação 159
  240. insert into t_tran_log_holding
  241. (TRAN_TYPE,
  242. DESCRIPTION,
  243. START_TRAN_DATE,
  244. START_TRAN_TIME,
  245. END_TRAN_DATE,
  246. END_TRAN_TIME,
  247. EMPLOYEE_ID,
  248. CONTROL_NUMBER,
  249. LINE_NUMBER,
  250. CONTROL_NUMBER_2,
  251. OUTSIDE_ID,
  252. WH_ID,
  253. LOCATION_ID,
  254. HU_ID,
  255. NUM_ITEMS,
  256. ITEM_NUMBER,
  257. LOT_NUMBER,
  258. UOM,
  259. TRAN_QTY,
  260. WH_ID_2,
  261. LOCATION_ID_2,
  262. VERIFY_STATUS,
  263. EMPLOYEE_ID_2,
  264. ROUTING_CODE,
  265. HU_ID_2,
  266. RETURN_DISPOSITION,
  267. ELAPSED_TIME,
  268. SOURCE_STORAGE_TYPE,
  269. DESTINATION_STORAGE_TYPE,
  270. GENERIC_ATTRIBUTE_1,
  271. GENERIC_ATTRIBUTE_2,
  272. GENERIC_ATTRIBUTE_3,
  273. GENERIC_ATTRIBUTE_4,
  274. GENERIC_ATTRIBUTE_5,
  275. GENERIC_ATTRIBUTE_6,
  276. GENERIC_ATTRIBUTE_7,
  277. GENERIC_ATTRIBUTE_8,
  278. GENERIC_ATTRIBUTE_9,
  279. GENERIC_ATTRIBUTE_10,
  280. GENERIC_ATTRIBUTE_11)
  281. values (
  282. '159'
  283. , nvl((select description from t_transaction where tran_type = '159'), 'Cancel Web PO')
  284. , trunc(sysdate)
  285. , TO_DATE(TO_CHAR(TRUNC(sysdate, 'MM'), 'DD/MM/YYYY')||' '||TO_CHAR(sysdate,'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS') --START_TRAN_TIME
  286. , trunc(sysdate) --TO_DATE('01/01/1900','MM/DD/YYYY')END_TRAN_DATE
  287. , TO_DATE(TO_CHAR(TRUNC(sysdate, 'MM'), 'DD/MM/YYYY')||' '||TO_CHAR(sysdate,'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS') --END_TRAN_TIME
  288. , in_vchuserid --EMPLOYEE_ID
  289. , in_vchponumber --CONTROL_NUMBER
  290. , NULL --LINE_NUMBER
  291. , v_vchDisplayPONumber --CONTROL_NUMBER_2
  292. , NULL --OUTSIDE_ID
  293. , in_vchwhid --WH_ID
  294. , NULL --LOCATION_ID
  295. , NULL --HU_ID
  296. , NULL --NUM_ITEMS
  297. , NULL --ITEM_NUMBER
  298. , NULL --LOT_NUMBER
  299. , NULL --UOM
  300. , NULL --TRAN_QTY
  301. , NULL --WH_ID_2
  302. , NULL --LOCATION_ID_2
  303. , NULL --VERIFY_STATUS
  304. , NULL --EMPLOYEE_ID_2
  305. , NULL --ROUTING_CODE
  306. , NULL --HU_ID_2
  307. , NULL --RETURN_DISPOSITION
  308. , NULL --ELAPSED_TIME
  309. , NULL --SOURCE_STORAGE_TYPE
  310. , NULL --DESTINATION_STORAGE_TYPE
  311. , substr(in_vchobs, 1, 250) --GENERIC_ATTRIBUTE_1
  312. , NULL --GENERIC_ATTRIBUTE_2
  313. , NULL --GENERIC_ATTRIBUTE_3
  314. , NULL --GENERIC_ATTRIBUTE_4
  315. , NULL --GENERIC_ATTRIBUTE_5
  316. , NULL --GENERIC_ATTRIBUTE_6
  317. , NULL --GENERIC_ATTRIBUTE_7
  318. , NULL --GENERIC_ATTRIBUTE_8
  319. , NULL --GENERIC_ATTRIBUTE_9
  320. , NULL --GENERIC_ATTRIBUTE_10
  321. , NULL --GENERIC_ATTRIBUTE_11
  322. );
  323.  
  324. -- Atualiza o Status da PO
  325. UPDATE t_po_master
  326. SET status = 'X'
  327. WHERE wh_id = in_vchwhid
  328. AND po_number = in_vchponumber;
  329.  
  330. <<retorno>>
  331. COMMIT;
  332. RETURN v_vchoutmsg;
  333. EXCEPTION
  334. WHEN e_genprocerror THEN
  335. v_nlogerrornum := -20001;
  336. v_vchOutMsg := 'Ocorreu um erro ao tentar cancelar a Ordem';
  337. ROLLBACK;
  338. raise_application_error(v_nlogerrornum, v_vcherrormsg);
  339. WHEN OTHERS THEN
  340. v_nlogerrornum := SQLCODE; -- Unknown Error Occured Executing Procedure
  341. v_vcherrormsg := 'Unknown Stored Procedure Error - SQLERRM: '||SQLERRM;
  342. v_vchOutMsg := 'Ocorreu um erro ao tentar cancelar a Ordem';
  343. ROLLBACK;
  344. raise_application_error(v_nlogerrornum, SQLERRM);
  345. END USF_CANCEL_PO;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement