DjonathanKrause

usf_cancel_po com erro

Feb 22nd, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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;
Add Comment
Please, Sign In to add comment