Advertisement
aadddrr

SL CANCEL SUBMIT SALES INVOICE TEMP

Feb 28th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Adrian, Feb 28, 2017
  2.  
  3. CREATE OR REPLACE FUNCTION sl_cancel_submit_sales_invoice_temp(bigint, character varying, bigint, character varying, bigint, character varying, character varying)
  4.   RETURNS void AS
  5. $BODY$
  6. DECLARE
  7.     pTenantId                           ALIAS FOR $1;
  8.     pSessionId                          ALIAS FOR $2;
  9.     pUserId                             ALIAS FOR $3;
  10.     pDatetime                           ALIAS FOR $4;
  11.     pSalesInvoiceTempId                 ALIAS FOR $5;
  12.     pRemarkApproval                     ALIAS FOR $6;
  13.     pPrevProcessNo                      ALIAS FOR $7;
  14.    
  15.     vSalesInvoiceTempDocTypeId          bigint;
  16.     vFunctionSubmit                     character varying;
  17.     vStatusDocReleased                  character varying;
  18.     vStatusDocDraft                     character varying;
  19.     vStatusDocInProgress                character varying;
  20.     vWorkflowStatusDraft                character varying;
  21.     vEmptyId                            bigint;
  22.     vZero                               bigint;
  23.     vYes                                character varying;
  24.     vNo                                 character varying;
  25.     vDoDocTypeId                        bigint;
  26.     vJointDppPpn                        character varying(1);
  27.    
  28.     vOuId                               bigint;
  29.     vDocNo                              character varying;
  30.     vDocDate                            character varying;
  31.     vScheme                             character varying;
  32.    
  33.     result                              RECORD;
  34.    
  35.     vInvArBalanceId                     bigint;
  36.     vInvTaxArBalanceId                  bigint;
  37.     vDoId                               bigint;
  38.    
  39. BEGIN
  40.  
  41.     vSalesInvoiceTempDocTypeId := 361;
  42.     vFunctionSubmit := 'sl_submit_sales_invoice_temp';
  43.     vStatusDocReleased := 'R';
  44.     vStatusDocDraft := 'D';
  45.     vStatusDocInProgress := 'I';
  46.     vWorkflowStatusDraft := 'DRAFT';
  47.     vEmptyId := -99;
  48.     vZero := 0;
  49.     vYes = 'Y';
  50.     vNo = 'N';
  51.     vDoDocTypeId := 311;
  52.     vJointDppPpn := f_get_value_system_config_by_param_code(pTenantId, 'joint.dpp.ppn.balance');
  53.    
  54.     --RAISE EXCEPTION 'Function Submit For Document Temporary Sales Invoice is not yet Created';
  55.    
  56.     -- get data
  57.     select A.ou_id, A.doc_no, A.doc_date, C.scheme
  58.     FROM sl_invoice_temp A, m_document C
  59.     WHERE A.doc_type_id = C.doc_type_id AND
  60.         A.invoice_temp_id = pSalesInvoiceTempId AND
  61.         A.doc_type_id = vSalesInvoiceTempDocTypeId
  62.         AND A.status_doc = vStatusDocReleased INTO result;
  63.        
  64.     IF FOUND THEN
  65.         vOuId := result.ou_id;
  66.         vDocNo := result.doc_no;
  67.         vDocDate := result.doc_date;
  68.         vScheme := result.scheme;
  69.        
  70.         /*
  71.          * validasi belum digunakan oleh invoice
  72.          */
  73.         IF NOT EXISTS (
  74.             SELECT (1) FROM sl_so_balance_invoice A, sl_invoice_temp B, sl_invoice_temp_item C
  75.             WHERE B.invoice_temp_id = pSalesInvoiceTempId AND
  76.                 B.invoice_temp_id = C.invoice_temp_id AND
  77.                 A.ou_id = B.ou_id AND
  78.                 A.so_id = B.ref_id AND
  79.                 A.ref_doc_type_id = vDoDocTypeId AND
  80.                 A.ref_id = C.ref_id AND
  81.                 A.ref_item_id = C.ref_item_id AND
  82.                 A.do_receipt_item_id = C.do_receipt_item_id AND
  83.                 A.flg_invoice = vYes
  84.             ) THEN
  85.        
  86.             /*
  87.              * validasi belum digunakan oleh invoice
  88.              */
  89.             IF NOT EXISTS (
  90.                 SELECT (1) FROM sl_do_inv A, sl_invoice_temp_item B, sl_do C
  91.                 WHERE B.invoice_temp_id = pSalesInvoiceTempId
  92.                     AND B.ref_id = C.do_id
  93.                     AND A.do_id = C.do_id
  94.                     AND A.flg_invoice = vYes
  95.                 ) THEN
  96.                
  97.                 /*
  98.                  * validasi belum digunakan oleh invoice
  99.                  */
  100.                 IF NOT EXISTS (
  101.                     SELECT (1) FROM sl_so_balance_advance_invoice A, sl_invoice_temp_advance B
  102.                     WHERE B.ref_id = A.ref_id
  103.                         AND B.invoice_temp_id = pSalesInvoiceTempId
  104.                         AND A.flg_invoice = vYes
  105.                     ) THEN
  106.                
  107.                     /*
  108.                      * 1. update status doc sl_invoice_temp
  109.                      * 2. update sl_so_balance_invoice
  110.                      * 3. update sl_so_balance_invoice_tax
  111.                      * 4. delete fi_invoice_ar_balance
  112.                      * 5. delete fi_invoice_tax_ar_balance
  113.                      * 6. delete sl_do_inv
  114.                      */    
  115.                    
  116.                     -- 1. update status doc sl_invoice_temp
  117.                     UPDATE sl_invoice_temp SET status_doc = vStatusDocDraft, workflow_status = vWorkflowStatusDraft,  update_datetime = pDatetime, update_user_id = pUserId
  118.                     WHERE invoice_temp_id = pSalesInvoiceTempId
  119.                         AND status_doc = vStatusDocReleased;
  120.                        
  121.                     -- 2. update sl_so_balance_invoice
  122.                     UPDATE sl_so_balance_invoice A SET flg_invoice_temp = vNo, update_datetime = pDatetime, update_user_id = pUserId
  123.                     FROM sl_invoice_temp B, sl_invoice_temp_item C
  124.                     WHERE B.invoice_temp_id = pSalesInvoiceTempId AND
  125.                         B.invoice_temp_id = C.invoice_temp_id AND
  126.                         A.ou_id = B.ou_id AND
  127.                         A.so_id = B.ref_id AND
  128.                         A.ref_doc_type_id = vDoDocTypeId AND
  129.                         A.ref_id = C.ref_id AND
  130.                         A.ref_item_id = C.ref_item_id AND
  131.                         A.do_receipt_item_id = C.do_receipt_item_id AND
  132.                         A.flg_invoice = vNo AND
  133.                         A.flg_invoice_temp = vYes;
  134.                        
  135.                     -- 3. update sl_so_balance_invoice_tax 
  136.                     UPDATE sl_so_balance_invoice_tax A SET flg_invoice = vNo, update_datetime = pDatetime, update_user_id = pUserId
  137.                     FROM sl_invoice_temp B, sl_invoice_temp_item C
  138.                     WHERE B.invoice_temp_id = pSalesInvoiceTempId AND
  139.                         B.invoice_temp_id = C.invoice_temp_id AND
  140.                         A.ou_id = B.ou_id AND
  141.                         A.so_id = B.ref_id AND
  142.                         A.ref_doc_type_id = vDoDocTypeId AND
  143.                         A.ref_id = C.ref_id AND
  144.                         A.ref_item_id = C.ref_item_id AND
  145.                         A.do_receipt_item_id = C.do_receipt_item_id;
  146.                        
  147.                     -- 4. delete fi_invoice_ar_balance
  148.                     -- 5. delete fi_invoice_tax_ar_balance
  149.                     SELECT invoice_ar_balance_id INTO vInvArBalanceId
  150.                     FROM fi_invoice_ar_balance A, sl_invoice_temp B
  151.                     WHERE A.invoice_ar_id = pSalesInvoiceTempId AND A.doc_type_id = vSalesInvoiceTempDocTypeId;
  152.                    
  153.                     SELECT invoice_tax_ar_balance_id INTO vInvTaxArBalanceId
  154.                     FROM fi_invoice_tax_ar_balance A
  155.                     WHERE A.invoice_ar_balance_id = vInvArBalanceId;
  156.            
  157.                     DELETE FROM fi_invoice_ar_balance_due_date WHERE invoice_ar_balance_id = vInvArBalanceId;
  158.                    
  159.                     DELETE FROM fi_invoice_tax_ar_balance_due_date WHERE invoice_tax_ar_balance_id = vInvTaxArBalanceId;
  160.                    
  161.                     DELETE FROM fi_invoice_ar_balance WHERE invoice_ar_balance_id = vInvArBalanceId;
  162.                    
  163.                     DELETE FROM fi_invoice_tax_ar_balance WHERE invoice_ar_balance_id = vInvArBalanceId;
  164.                
  165.                     -- 6. delete sl_do_inv
  166.                     DELETE FROM sl_do_inv Z
  167.                     WHERE EXISTS (
  168.                         SELECT (1)
  169.                         FROM sl_invoice_temp_item A, sl_do B
  170.                         WHERE A.invoice_temp_id = pSalesInvoiceTempId
  171.                             AND A.ref_id = B.do_id
  172.                             AND Z.do_id = B.do_id
  173.                             AND Z.flg_invoice = vNo
  174.                         );
  175.                        
  176.                     /*
  177.                      * update flg saldo so advance invoice, karena sudah digunakan oleh sales invoice temporer
  178.                      */
  179.                     UPDATE sl_so_balance_advance_invoice
  180.                     SET flg_invoice_temp = vNo, invoice_id = vEmptyId,
  181.                         update_datetime = pDatetime, update_user_id = pUserId,
  182.                         version = sl_so_balance_advance_invoice.version + 1
  183.                     FROM sl_invoice_temp_advance A
  184.                     WHERE A.ref_id = sl_so_balance_advance_invoice.ref_id
  185.                         AND A.invoice_temp_id = pSalesInvoiceTempId;
  186.            
  187.                 ELSE
  188.                     RAISE EXCEPTION 'Document with id % is already used in invoice', pSalesInvoiceTempId;
  189.                 END IF;
  190.            
  191.             ELSE
  192.                 RAISE EXCEPTION 'Document with id % is already used in invoice', pSalesInvoiceTempId;
  193.             END IF;
  194.                
  195.         ELSE
  196.             RAISE EXCEPTION 'Document with id % is already used in invoice', pSalesInvoiceTempId;
  197.         END IF;
  198.            
  199.     ELSE
  200.         RAISE EXCEPTION 'Document with id % is not found or document is on approval progress', pSalesInvoiceTempId;
  201.     END IF;
  202.    
  203. END;
  204. $BODY$
  205.   LANGUAGE plpgsql VOLATILE
  206.   COST 100;
  207.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement