Advertisement
aadddrr

CANCEL APPROVE MODIFY HEADER SO

Mar 1st, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION sl_cancel_submit_modify_header_so(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pTenantId                           ALIAS FOR $1;
  6.     pSessionId                          ALIAS FOR $2;
  7.     pUserId                             ALIAS FOR $3;
  8.     pDatetime                           ALIAS FOR $4;
  9.     pManageSoId                         ALIAS FOR $5;
  10.     pRemarkApproval                     ALIAS FOR $6;
  11.     pPrevProcessNo                      ALIAS FOR $7;
  12.    
  13.     vEmptyId                            bigint;
  14.     vManageSoHeaderDocTypeId            bigint;
  15.     vFlagNo                             character varying(1);
  16.     vRoundingModeNonTax                 character varying(5);
  17.     vStatusRelease                      character varying(1);
  18.     vOuStructure                        OU_BU_STRUCTURE%ROWTYPE;
  19.     RESULT                              RECORD;
  20.    
  21.     vFunctionSubmit                     character varying;
  22.     vStatusDraft                        character varying;
  23.     vStatusInProgress                   character varying;
  24.     vWorkflowStatusDraft                character varying;
  25.     vSoId                               bigint;
  26.     vOldSoValue                         json;
  27.     vZero                               bigint;
  28.     vTypeDataHeader                     character varying;
  29.     vTypeDataFinance                    character varying;
  30.    
  31.     vDoDocDate                          character varying;
  32.     vDoReceiptDocDate                   character varying;
  33.     vOuId                               bigint;
  34.     vLedgerCode                         character varying;
  35.     vStatusLedgerNotDone                character varying;
  36.     vEmpty                              character varying;
  37.     vScheme                             character varying;
  38.     vDocNo                              character varying;
  39.    
  40. BEGIN
  41.    
  42.     vEmptyId := -99;
  43.     vStatusRelease := 'R';
  44.     vFlagNo := 'N';
  45.     vManageSoHeaderDocTypeId := 303;
  46.    
  47.     vFunctionSubmit := 'sl_submit_modify_header_so';   
  48.     vStatusDraft := 'D';
  49.     vStatusInProgress = 'I';
  50.     vWorkflowStatusDraft := 'DRAFT';
  51.     vZero := 0;
  52.     vTypeDataHeader := 'header';
  53.     vTypeDataFinance := 'finance';
  54.    
  55.     vLedgerCode := 'INV';
  56.     vStatusLedgerNotDone := '0';
  57.    
  58.     vEmpty := '';
  59.    
  60.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  61.    
  62.     --RAISE EXCEPTION 'Function Submit For Document Modify Header SO';
  63.    
  64.     -- get data
  65.     select f_get_ou_bu_structure(A.ou_id) AS ou, B.old_data_value,
  66.         A.ou_id, A.doc_date,
  67.         COALESCE(C.doc_date, '') AS do_doc_date, COALESCE(D.doc_date, '') AS do_receipt_doc_date,
  68.         A.doc_no, E.scheme
  69.     FROM sl_manage_so A
  70.     INNER JOIN sl_manage_so_changes B ON B.manage_so_id = A.manage_so_id
  71.     LEFT JOIN sl_do C ON C.ref_id = A.so_id
  72.     LEFT JOIN in_do_receipt D ON D.ref_id = C.do_id
  73.     INNER JOIN m_document E ON E.doc_type_id = A.doc_type_id
  74.     WHERE A.manage_so_id = pManageSoId AND
  75.         A.doc_type_id = vManageSoHeaderDocTypeId AND
  76.         B.type_data = vTypeDataHeader AND
  77.         A.status_doc = vStatusRelease INTO RESULT;
  78.        
  79.     IF FOUND THEN
  80.         vOldSoValue := RESULT.old_data_value::json;
  81.         vOuStructure := RESULT.ou;
  82.         vOuId := RESULT.ou_id;
  83.         vDoDocDate := RESULT.do_doc_date;
  84.         vDoReceiptDocDate := RESULT.do_receipt_doc_date;
  85.         vScheme := RESULT.scheme;
  86.         vDocNo := RESULT.doc_no;
  87.        
  88.         -- Cek status ledger not yet closed for DO
  89.         IF ((vDoDocDate = vEmpty) OR EXISTS (
  90.             SELECT 1
  91.             FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  92.             WHERE e.tenant_id = pTenantId
  93.                 AND e.ou_id = f.ou_bu_id
  94.                 AND f.ou_id = vOuId
  95.                 AND e.date_year_month = SUBSTR(vDoDocDate, 1, 6)
  96.                 AND e.ledger_code = vLedgerCode AND
  97.                 f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone
  98.             )) THEN
  99.            
  100.             -- Cek status ledger not yet closed for DO Receipt
  101.             IF ((vDoReceiptDocDate = vEmpty) OR EXISTS (
  102.                 SELECT 1
  103.                 FROM m_admin_process_ledger e, m_ou_structure f, t_ou g
  104.                 WHERE e.tenant_id = pTenantId
  105.                     AND e.ou_id = f.ou_bu_id
  106.                     AND f.ou_id = vOuId
  107.                     AND e.date_year_month = SUBSTR(vDoReceiptDocDate, 1, 6)
  108.                     AND e.ledger_code = vLedgerCode AND
  109.                     f.ou_id = g.ou_id AND e.status_ledger = vStatusLedgerNotDone
  110.                 )) THEN
  111.        
  112.                 /*
  113.                  * validasi so tidak sedang digunakan
  114.                  */
  115.                 IF NOT EXISTS (
  116.                     SELECT (1)
  117.                     FROM sl_so A, sl_manage_so_header B, sl_manage_so C
  118.                     WHERE B.manage_so_id = pManageSoId
  119.                         AND B.manage_so_id = C.manage_so_id
  120.                         AND A.so_id = C.so_id
  121.                         AND A.status_doc <> vStatusRelease
  122.                     ) THEN
  123.                
  124.                     DELETE FROM tt_sl_so_tax_for_modify_so WHERE session_id = pSessionId;
  125.                    
  126.                     SELECT A.so_id INTO vSoId FROM sl_manage_so A WHERE A.manage_so_id = pManageSoId;
  127.                    
  128.                     UPDATE sl_so SET
  129.                         partner_id = CAST(vOldSoValue->>'partnerId' AS bigint),
  130.                         partner_cp_id = CAST(vOldSoValue->>'partnerCpId' AS bigint),
  131.                         partner_bill_to_id = CAST(vOldSoValue->>'partnerBillToId' AS bigint),
  132.                         partner_ship_to_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  133.                         partner_ship_address_id = CAST(vOldSoValue->>'partnerShipAddressId' AS bigint),
  134.                         partner_ship_cp_id = CAST(vOldSoValue->>'partnerShipCpId' AS bigint),
  135.                         partner_ship_cp_name = vOldSoValue->>'partnerShipCpName',
  136.                         partner_ship_cp_phone1 = vOldSoValue->>'partnerShipCpPhone1',
  137.                         partner_ship_cp_phone2 = vOldSoValue->>'partnerShipCpPhone2',
  138.                         doc_date = vOldSoValue->>'docDate',
  139.                         ext_doc_no = vOldSoValue->>'extDocNo',
  140.                         ext_doc_date = vOldSoValue->>'extDocDate',
  141.                         curr_code = vOldSoValue->>'currCode',
  142.                         flg_top_type = vOldSoValue->>'flgTopType',
  143.                         update_datetime = pDatetime,
  144.                         update_user_id = pUserId,
  145.                         version = sl_so.version + 1,
  146.                         status_doc = vStatusInProgress
  147.                     FROM sl_manage_so_header A, sl_manage_so B
  148.                     WHERE A.manage_so_id = pManageSoId
  149.                         AND A.manage_so_id = B.manage_so_id
  150.                         AND sl_so.so_id = B.so_id
  151.                         AND sl_so.status_doc = vStatusRelease;
  152.                        
  153.                     UPDATE sl_so_item SET
  154.                         partner_ship_to_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  155.                         partner_ship_address_id = CAST(vOldSoValue->>'partnerShipAddressId' AS bigint),
  156.                         curr_code = vOldSoValue->>'currCode',
  157.                         update_datetime = pDatetime,
  158.                         update_user_id = pUserId,
  159.                         version = sl_so_item.version + 1
  160.                     FROM sl_manage_so_header A, sl_manage_so B
  161.                     WHERE A.manage_so_id = pManageSoId
  162.                         AND A.manage_so_id = B.manage_so_id
  163.                         AND sl_so_item.so_id = B.so_id;
  164.                        
  165.                     UPDATE sl_do SET
  166.                         ext_doc_no = vOldSoValue->>'extDocNo',
  167.                         ext_doc_date = vOldSoValue->>'extDocDate',
  168.                         partner_ship_to_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  169.                         partner_ship_address_id = CAST(vOldSoValue->>'partnerShipAddressId' AS bigint),
  170.                         update_datetime = pDatetime,
  171.                         update_user_id = pUserId,
  172.                         version = sl_do.version + 1
  173.                     FROM sl_manage_so_header A, sl_manage_so B
  174.                     WHERE A.manage_so_id = pManageSoId
  175.                         AND A.manage_so_id = B.manage_so_id
  176.                         AND sl_do.ref_id = B.so_id;
  177.                    
  178.                     UPDATE sl_so_balance_invoice SET
  179.                         curr_code = vOldSoValue->>'currCode',
  180.                         partner_id = CAST(vOldSoValue->>'partnerBillToId' AS bigint),
  181.                         update_datetime = pDatetime,
  182.                         update_user_id = pUserId,
  183.                         flg_invoice = vFlagNo,
  184.                         version = sl_so_balance_invoice.version + 1
  185.                     FROM sl_manage_so_header A, sl_manage_so B
  186.                     WHERE A.manage_so_id = pManageSoId
  187.                         AND A.manage_so_id = B.manage_so_id
  188.                         AND sl_so_balance_invoice.so_id = B.so_id;
  189.                        
  190.                     UPDATE sl_so_balance_invoice_tax SET
  191.                         curr_code = vOldSoValue->>'currCode',  
  192.                         partner_id = CAST(vOldSoValue->>'partnerBillToId' AS bigint),
  193.                         flg_invoice = vFlagNo,
  194.                         update_datetime = pDatetime,
  195.                         update_user_id = pUserId,
  196.                         version = sl_so_balance_invoice_tax.version + 1
  197.                     FROM sl_manage_so_header A, sl_manage_so B
  198.                     WHERE A.manage_so_id = pManageSoId
  199.                         AND A.manage_so_id = B.manage_so_id
  200.                         AND sl_so_balance_invoice_tax.so_id = B.so_id;
  201.                    
  202.                     UPDATE in_balance_do_item SET
  203.                         so_date = vOldSoValue->>'docDate',  
  204.                         partner_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  205.                         update_datetime = pDatetime,
  206.                         update_user_id = pUserId,
  207.                         version = in_balance_do_item.version + 1
  208.                     FROM sl_manage_so_header A, sl_manage_so B
  209.                     WHERE A.manage_so_id = pManageSoId
  210.                     AND A.manage_so_id = B.manage_so_id
  211.                     AND in_balance_do_item.so_id = B.so_id;
  212.                    
  213.                     /** DELIVERY ORDER **/
  214.        
  215.                     UPDATE gl_journal_trx
  216.                     SET curr_code = vOldSoValue->>'currCode',
  217.                         ext_doc_no = vOldSoValue->>'extDocNo',
  218.                         ext_doc_date = vOldSoValue->>'extDocDate',
  219.                         partner_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  220.                         update_datetime = pDatetime,
  221.                         update_user_id = pUserId,
  222.                         version = gl_journal_trx.version + 1
  223.                     FROM sl_manage_so_header A, sl_manage_so B, sl_do C
  224.                     WHERE A.manage_so_id = pManageSoId
  225.                         AND A.manage_so_id = B.manage_so_id
  226.                         AND gl_journal_trx.doc_type_id = C.doc_type_id
  227.                         AND gl_journal_trx.doc_id = C.do_id
  228.                         AND gl_journal_trx.doc_no = C.doc_no
  229.                         AND gl_journal_trx.doc_date = C.doc_date
  230.                         AND gl_journal_trx.tenant_id = C.tenant_id
  231.                         AND gl_journal_trx.ou_bu_id = (vOuStructure).ou_bu_id
  232.                         AND gl_journal_trx.ou_branch_id = (vOuStructure).ou_branch_id
  233.                         AND gl_journal_trx.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  234.                         AND C.ref_id = B.so_id;
  235.                    
  236.                     UPDATE gl_journal_trx_item
  237.                     SET curr_code = vOldSoValue->>'currCode',
  238.                         partner_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  239.                         update_datetime = pDatetime,
  240.                         update_user_id = pUserId,
  241.                         version = gl_journal_trx_item.version + 1
  242.                     FROM sl_manage_so_header A, sl_manage_so B, sl_do C, gl_journal_trx D
  243.                     WHERE A.manage_so_id = pManageSoId
  244.                         AND A.manage_so_id = B.manage_so_id
  245.                         AND gl_journal_trx_item.journal_trx_id = D.journal_trx_id
  246.                         AND D.doc_type_id = C.doc_type_id
  247.                         AND D.doc_id = C.do_id
  248.                         AND D.doc_no = C.doc_no
  249.                         AND D.doc_date = C.doc_date
  250.                         AND D.tenant_id = C.tenant_id
  251.                         AND D.ou_bu_id = (vOuStructure).ou_bu_id
  252.                         AND D.ou_branch_id = (vOuStructure).ou_branch_id
  253.                         AND D.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  254.                         AND C.ref_id = B.so_id;
  255.                        
  256.                     UPDATE gl_journal_trx_mapping
  257.                     SET curr_code = vOldSoValue->>'currCode',
  258.                         update_datetime = pDatetime,
  259.                         update_user_id = pUserId,
  260.                         version = gl_journal_trx_mapping.version + 1
  261.                     FROM sl_manage_so_header A, sl_manage_so B, sl_do C, gl_journal_trx D
  262.                     WHERE A.manage_so_id = pManageSoId
  263.                         AND A.manage_so_id = B.manage_so_id
  264.                         AND gl_journal_trx_mapping.journal_trx_id = D.journal_trx_id
  265.                         AND D.doc_type_id = C.doc_type_id
  266.                         AND D.doc_id = C.do_id
  267.                         AND D.doc_no = C.doc_no
  268.                         AND D.doc_date = C.doc_date
  269.                         AND D.tenant_id = C.tenant_id
  270.                         AND D.ou_bu_id = (vOuStructure).ou_bu_id
  271.                         AND D.ou_branch_id = (vOuStructure).ou_branch_id
  272.                         AND D.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  273.                         AND C.ref_id = B.so_id;
  274.                    
  275.                     /** DELIVERY ORDER **/
  276.                        
  277.                     /** DO RECEIPT **/
  278.                        
  279.                     UPDATE gl_journal_trx
  280.                     SET curr_code = vOldSoValue->>'currCode',
  281.                         update_datetime = pDatetime,
  282.                         partner_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  283.                         update_user_id = pUserId,
  284.                         version = gl_journal_trx.version + 1
  285.                     FROM sl_manage_so_header A, sl_manage_so B, in_do_receipt C, sl_do D
  286.                     WHERE A.manage_so_id = pManageSoId
  287.                     AND A.manage_so_id = B.manage_so_id
  288.                     AND gl_journal_trx.doc_type_id = C.doc_type_id
  289.                     AND gl_journal_trx.doc_id = C.do_receipt_id
  290.                     AND gl_journal_trx.doc_no = C.doc_no
  291.                     AND gl_journal_trx.doc_date = C.doc_date
  292.                     AND gl_journal_trx.tenant_id = C.tenant_id
  293.                     AND gl_journal_trx.ou_bu_id = (vOuStructure).ou_bu_id
  294.                     AND gl_journal_trx.ou_branch_id = (vOuStructure).ou_branch_id
  295.                     AND gl_journal_trx.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  296.                     AND C.ref_doc_type_id = D.doc_type_id
  297.                     AND C.ref_id = D.do_id
  298.                     AND D.ref_id = B.so_id;
  299.                        
  300.                     UPDATE gl_journal_trx_item
  301.                     SET curr_code = vOldSoValue->>'currCode',
  302.                         partner_id = CAST(vOldSoValue->>'partnerShipToId' AS bigint),
  303.                         update_datetime = pDatetime,
  304.                         update_user_id = pUserId,
  305.                         version = gl_journal_trx_item.version + 1
  306.                     FROM sl_manage_so_header A, sl_manage_so B, in_do_receipt C, gl_journal_trx D, sl_do E
  307.                     WHERE A.manage_so_id = pManageSoId
  308.                     AND A.manage_so_id = B.manage_so_id
  309.                     AND gl_journal_trx_item.journal_trx_id = D.journal_trx_id
  310.                     AND D.doc_type_id = C.doc_type_id
  311.                     AND D.doc_id = C.do_receipt_id
  312.                     AND D.doc_no = C.doc_no
  313.                     AND D.doc_date = C.doc_date
  314.                     AND D.tenant_id = C.tenant_id
  315.                     AND D.ou_bu_id = (vOuStructure).ou_bu_id
  316.                     AND D.ou_branch_id = (vOuStructure).ou_branch_id
  317.                     AND D.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  318.                     AND C.ref_doc_type_id = E.doc_type_id
  319.                     AND C.ref_id = E.do_id
  320.                     AND E.ref_id = B.so_id;    
  321.                        
  322.                     UPDATE gl_journal_trx_mapping
  323.                     SET curr_code = vOldSoValue->>'currCode',
  324.                         update_datetime = pDatetime,
  325.                         update_user_id = pUserId,
  326.                         version = gl_journal_trx_mapping.version + 1
  327.                     FROM sl_manage_so_header A, sl_manage_so B, sl_do C, gl_journal_trx D, sl_do E
  328.                     WHERE A.manage_so_id = pManageSoId
  329.                     AND A.manage_so_id = B.manage_so_id
  330.                     AND gl_journal_trx_mapping.journal_trx_id = D.journal_trx_id
  331.                     AND D.doc_type_id = C.doc_type_id
  332.                     AND D.doc_id = C.do_id
  333.                     AND D.doc_no = C.doc_no
  334.                     AND D.doc_date = C.doc_date
  335.                     AND D.tenant_id = C.tenant_id
  336.                     AND D.ou_bu_id = (vOuStructure).ou_bu_id
  337.                     AND D.ou_branch_id = (vOuStructure).ou_branch_id
  338.                     AND D.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  339.                     AND C.ref_doc_type_id = E.doc_type_id
  340.                     AND C.ref_id = E.do_id
  341.                     AND E.ref_id = B.so_id;
  342.                
  343.                     /** DO RECEIPT **/
  344.                
  345.                     INSERT INTO tt_sl_so_tax_for_modify_so
  346.                     (session_id, tenant_id, so_id, tax_id, flg_amount,
  347.                     tax_percentage, base_amount, tax_amount, remark)
  348.                     SELECT pSessionId, A.tenant_id, A.so_id, A.tax_id, B.flg_amount,
  349.                         A.tax_percentage, SUM(f_get_amount_before_tax((A.gross_sell_price - A.discount_amount) * A.qty_so, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vManageSoHeaderDocTypeId, A.curr_code), vRoundingModeNonTax)),
  350.                         f_tax_rounding(A.tenant_id, SUM(f_get_amount_before_tax((A.gross_sell_price - A.discount_amount) * A.qty_so, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vManageSoHeaderDocTypeId, A.curr_code), vRoundingModeNonTax)), A.tax_percentage), B.tax_name
  351.                     FROM sl_so_item A, m_tax B
  352.                     WHERE A.tax_id = B.tax_id AND
  353.                           A.so_id = vSoId AND
  354.                           A.tax_id <> vEmptyId
  355.                     GROUP BY A.tenant_id, A.so_id, A.tax_id, B.flg_amount,
  356.                             A.tax_percentage, B.tax_name;
  357.                            
  358.                     UPDATE sl_so_tax SET base_amount = A.base_amount, tax_amount = A.tax_amount, update_datetime = pDatetime, update_user_id = pUserId, version = sl_so_tax.version + 1
  359.                     FROM tt_sl_so_tax_for_modify_so A
  360.                     WHERE sl_so_tax.tenant_id = A.tenant_id
  361.                         AND A.session_id = pSessionId
  362.                         AND sl_so_tax.so_id = A.so_id
  363.                         AND sl_so_tax.tax_id = A.tax_id;
  364.                            
  365.                     DELETE FROM sl_log_so_balance_item Z
  366.                     WHERE EXISTS (
  367.                         SELECT (1)
  368.                         FROM sl_so_item A
  369.                         WHERE A.so_id = vSoId
  370.                             AND Z.tenant_id = A.tenant_id
  371.                             AND Z.so_id = A.so_id
  372.                             AND Z.so_item_id = A.so_item_id
  373.                             AND Z.ref_doc_type_id = vManageSoHeaderDocTypeId
  374.                             AND Z.ref_id = pManageSoId
  375.                             AND Z.ref_item_id = vEmptyId
  376.                             AND Z.qty_trx = vZero
  377.                             AND Z.trx_uom_id = A.so_uom_id
  378.                             AND Z.qty_int = vZero
  379.                             AND Z.base_uom_id = A.base_uom_id
  380.                             AND Z.remark = A.remark
  381.                     );
  382.                      
  383.                     UPDATE sl_so_balance_item SET status_item = vStatusInProgress
  384.                     FROM sl_manage_so_header A, sl_manage_so B, sl_so_item D
  385.                     WHERE A.manage_so_id = pManageSoId
  386.                         AND A.manage_so_id = B.manage_so_id
  387.                         AND B.so_id = D.so_id
  388.                         AND D.so_item_id = sl_so_balance_item.so_item_id;      
  389.                    
  390.                     -- delete semua data so finance untuk so id tersebut (karena akan diinsert lagi menggunakan data so finance yang lama)
  391.                     DELETE FROM sl_so_finance WHERE so_id = vSoId;
  392.                    
  393.                     INSERT INTO sl_so_finance
  394.                     (so_id, line_no, tenant_id,
  395.                      flg_collection, due_date,
  396.                      curr_code, amount, trx_curr_code, trx_amount,
  397.                      remark, version,
  398.                      create_datetime, create_user_id, update_datetime, update_user_id)
  399.                     SELECT vSoId, CAST(old_data_value::json->>'lineNo' AS bigint), CAST(old_data_value::json->>'tenantId' AS bigint),
  400.                            old_data_value::json->>'flgCollection', old_data_value::json->>'dueDate',
  401.                            old_data_value::json->>'currCode', CAST(old_data_value::json->>'amount' AS numeric), old_data_value::json->>'trxCurrCode', CAST(old_data_value::json->>'trxAmount' AS numeric),
  402.                            old_data_value::json->>'remark', vZero,
  403.                            pDatetime, pUserId, pDatetime, pUserId
  404.                     FROM sl_manage_so_changes A
  405.                     WHERE A.manage_so_id = pManageSoId
  406.                         AND A.type_data = vTypeDataFinance;
  407.                    
  408.                     -- delete data so ext commission dari manage so
  409.                     DELETE FROM sl_so_external_commission WHERE so_id = vSoId;
  410.                        
  411.                     -- insert data so ext commission dari log
  412.                     INSERT INTO sl_so_external_commission(
  413.                         so_id, line_no, tenant_id, partner_name,
  414.                         commission_curr_code, commission_amount, phone_1, phone_2, bank_code,
  415.                         account_no, bank_curr_code, version, create_datetime, create_user_id,
  416.                         update_datetime, update_user_id)
  417.                     SELECT so_id, line_no, tenant_id, partner_name,
  418.                         commission_curr_code, commission_amount, phone_1, phone_2, bank_code,
  419.                         account_no, bank_curr_code, version, create_datetime, create_user_id,
  420.                         update_datetime, update_user_id
  421.                     FROM sl_log_so_external_commission
  422.                     WHERE so_id = vSoId
  423.                         AND update_datetime = (
  424.                             SELECT MAX(update_datetime)
  425.                             FROM sl_log_so_external_commission
  426.                             WHERE so_id = vSoId
  427.                             GROUP BY so_id, line_no
  428.                         );
  429.                    
  430.                     -- delete data so ext commission yang telah di-insert dari log
  431.                     DELETE FROM sl_log_so_external_commission
  432.                     WHERE so_id = vSoId
  433.                         AND update_datetime = (
  434.                             SELECT MAX(update_datetime)
  435.                             FROM sl_log_so_external_commission
  436.                             WHERE so_id = vSoId
  437.                             GROUP BY so_id, line_no
  438.                         );
  439.                    
  440.                     UPDATE sl_manage_so SET status_doc = vStatusDraft, workflow_status = vWorkflowStatusDraft, update_datetime = pDatetime, update_user_id = pUserId, version = version + 1
  441.                     WHERE manage_so_id = pManageSoId
  442.                         AND status_doc = vStatusRelease;
  443.                    
  444.                     DELETE FROM tt_sl_so_tax_for_modify_so WHERE session_id = pSessionId;
  445.                        
  446.                     -- PERFORM f_reset_approval_to_draft
  447.                     PERFORM f_reset_approval_to_draft(pTenantId, pSessionId, vScheme, pManageSoId, vDocNo, pDatetime, pRemarkApproval);
  448.                        
  449.                     -- UPDATE t_process_message
  450.                     UPDATE t_process_message
  451.                     SET process_no = pPrevProcessNo,
  452.                         update_datetime = pDatetime,
  453.                         update_user_id = pUserId,
  454.                         version = version + 1
  455.                     WHERE tenant_id = pTenantId
  456.                         AND process_name = vFunctionSubmit
  457.                         AND process_no = pManageSoId || '_' || vDocNo;     
  458.            
  459.                 ELSE
  460.                     RAISE EXCEPTION 'Sales Order with id % is in use by other documnet', vSoId;
  461.                 END IF;
  462.                
  463.             ELSE
  464.                 RAISE EXCEPTION 'Admin Process Ledger for Inventory in year month % is already closed', SUBSTR(vDoReceiptDocDate, 1, 6);
  465.             END IF;
  466.            
  467.         ELSE
  468.             RAISE EXCEPTION 'Admin Process Ledger for Inventory in year month % is already closed', SUBSTR(vDoDocDate, 1, 6);
  469.         END IF;
  470.        
  471.     ELSE
  472.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pManageSoId;
  473.     END IF;
  474.    
  475. END;
  476. $BODY$
  477.   LANGUAGE plpgsql VOLATILE
  478.   COST 100;
  479.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement