Advertisement
aadddrr

sl_submit_do_PERBAIKAN_FLG_CALCULATE_MARGIN

Jun 4th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Modified by Adrian, May 31, 2018
  2. --Menambahkan insert default flg_calculate_margin pada pu_po_balance_item_consignment_sold_manual
  3.  
  4. CREATE OR REPLACE FUNCTION sl_submit_do(bigint, character varying, character varying)
  5.   RETURNS void AS
  6. $BODY$
  7. DECLARE
  8.     pTenantId           ALIAS FOR $1;
  9.     pSessionId          ALIAS FOR $2;
  10.     pProcessNo          ALIAS FOR $3;
  11.  
  12.     vProcessId                  bigint;
  13.     vDoId                       bigint;
  14.     vUserId                     bigint;
  15.     vDatetime                   character varying(14);
  16.     vFlagInvoice                character varying(1);
  17.     vEmptyId                    bigint;
  18.     vStatusRelease              character varying(1);
  19.     vStatusDraft                character varying(1);  
  20.     vStatusFinal                character varying(1);
  21.     vEmptyValue                 character varying(1);
  22.     vProductStatus              character varying(5);
  23.     vSignDebit                  character varying(1);
  24.     vSignCredit                 character varying(1);
  25.     vTypeRate                   character varying(3);
  26.     vProductCOA                 character varying(10);
  27.     vSystemCOA                  character varying(10);
  28.     vPartnerIdKonsinyasiManual  bigint;
  29.     vSoId                       bigint;
  30.     vUnfinishedItem             bigint;
  31.     vParentOuId                 bigint;
  32.     vJournalTrxId               bigint;    
  33.     vJournalType                character varying(20)
  34.    
  35.     vDocJournal                 DOC_JOURNAL%ROWTYPE;
  36.     vOuStructure                OU_BU_STRUCTURE%ROWTYPE;
  37.     result                      RECORD;
  38.    
  39.     vDeliveryOrderDocTypeId     bigint;
  40.     vSalesOrderDocTypeId        bigint;
  41.     vRoundingModeNonTax         character varying(5);
  42.    
  43.     vFlgCalculateMargin         character varying(2);
  44.    
  45. BEGIN
  46.    
  47.     vFlagInvoice := 'N';
  48.     vEmptyId := -99;
  49.     vStatusRelease := 'R';
  50.     vStatusDraft := 'D';   
  51.     vStatusFinal := 'F';
  52.     vEmptyValue := ' ';
  53.     vProductStatus := 'GOOD';
  54.     vSignDebit := 'D';
  55.     vSignCredit := 'C';
  56.     vTypeRate := 'COM';
  57.     vProductCOA := 'PRODUCT';
  58.     vSystemCOA := 'SYSTEM';
  59.     vUnfinishedItem := 0;
  60.    
  61.     vDeliveryOrderDocTypeId = 311;
  62.     vSalesOrderDocTypeId = 301;
  63.  
  64.     vFlgCalculateMargin := 'SP';
  65.    
  66.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  67.    
  68.    
  69.     SELECT A.process_message_id INTO vProcessId
  70.     FROM t_process_message A
  71.     WHERE A.tenant_id = pTenantId AND
  72.         A.process_name = 'sl_submit_do' AND
  73.         A.process_no = pProcessNo;
  74.        
  75.     SELECT CAST(A.process_parameter_value AS bigint) INTO vDoId
  76.     FROM t_process_parameter A
  77.     WHERE A.process_message_id = vProcessId AND
  78.         A.process_parameter_key = 'doId';
  79.    
  80.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  81.     FROM t_process_parameter A
  82.     WHERE A.process_message_id = vProcessId AND
  83.         A.process_parameter_key = 'userId';
  84.  
  85.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  86.     FROM t_process_parameter A
  87.     WHERE A.process_message_id = vProcessId AND
  88.         A.process_parameter_key = 'datetime';
  89.  
  90.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  91. /*
  92.  * 1. update status doc sl_do
  93.  * 2. add sl_log_so_balance_item
  94.  * 3. add sl_so_balance_invoice
  95.  * 4. add sl_so_balance_invoice_tax
  96.  * 5. add in_log_product_balance_stock
  97.  * 6. add in_balance_do_item
  98.  * 7. update status sl_so_balance_item
  99.  * 8. update status sl_so. Jika seluruh balance item sudah final/cancel, maka status menjadi Final.
  100.  * 9. add gl_journal_trx
  101.  * 10. add gl_journal_trx_item
  102.  * 11. add gl_journal_trx_mapping
  103.  *
  104.  */
  105.  
  106.     SELECT A.ref_id, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
  107.     FROM sl_do A
  108.     WHERE A.do_id = vDoId INTO result;
  109.    
  110.     vSoId := result.ref_id;
  111.     vOuStructure := result.ou;
  112.     vDocJournal := result.doc;
  113.    
  114.     UPDATE sl_do SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
  115.     WHERE do_id = vDoId;
  116.    
  117.     INSERT INTO sl_log_so_balance_item
  118.     (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
  119.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  120.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  121.     SELECT A.tenant_id, C.so_id, C.so_item_id, A.doc_type_id, A.do_id, B.do_item_id,
  122.         B.qty_dlv_so * -1, B.so_uom_id, B.qty_dlv_int  *-1, B.base_uom_id, B.remark,
  123.         0, vDatetime, vUserId, vDatetime, vUserId
  124.     FROM sl_do A, sl_do_item B, sl_so_item C
  125.     WHERE A.do_id = vDoId AND
  126.           A.do_id = B.do_id AND
  127.           B.ref_id = C.so_item_id;
  128.          
  129.     INSERT INTO sl_so_balance_invoice
  130.     (tenant_id, ou_id, partner_id, so_id,
  131.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_dlv_so, so_uom_id,
  132.     curr_code, price_so, item_amount, flg_invoice, invoice_id,
  133.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  134.     SELECT A.tenant_id, A.ou_id, D.partner_bill_to_id, A.ref_id,
  135.         A.doc_type_id, A.do_id, A.doc_no, A.doc_date, B.do_item_id, B.qty_dlv_so, B.so_uom_id,
  136.         C.curr_code, C.nett_sell_price,
  137.         f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocTypeId, C.curr_code), vRoundingModeNonTax),
  138.         vFlagInvoice, vEmptyId,
  139.         0, vDatetime, vUserId, vDatetime, vUserId
  140.     FROM sl_do A, sl_do_item B, sl_so_item C, sl_so D
  141.     WHERE A.do_id = vDoId AND
  142.           A.do_id = B.do_id AND
  143.           B.ref_id = C.so_item_id AND
  144.           C.so_id = D.so_id;
  145.        
  146.     INSERT INTO sl_so_balance_invoice_tax
  147.     (tenant_id, ou_id, partner_id, so_id,
  148.     ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  149.     tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  150.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  151.     SELECT A.tenant_id, A.ou_id, E.partner_bill_to_id, A.ref_id,
  152.         A.doc_type_id, A.do_id, B.do_item_id, C.tax_id, D.flg_amount,
  153.         C.tax_percentage, C.curr_code,
  154.         f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocTypeId, C.curr_code), vRoundingModeNonTax),
  155.         f_tax_rounding(A.tenant_id, f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocTypeId, C.curr_code), vRoundingModeNonTax), C.tax_percentage), vFlagInvoice, vEmptyId,
  156.         0, vDatetime, vUserId, vDatetime, vUserId
  157.     FROM sl_do A, sl_do_item B, sl_so_item C, m_tax D, sl_so E
  158.     WHERE A.do_id = vDoId AND
  159.           A.do_id = B.do_id AND
  160.           B.ref_id = C.so_item_id AND
  161.           C.tax_id = D.tax_id AND
  162.           C.so_id = E.so_id;
  163.          
  164.     /*
  165.      * buat data log product balance stock
  166.      * ref item id = do_product_id
  167.      * NK, 14 Feb 2015
  168.      * untuk product yang tidak beli dengan cara konsinyasi
  169.      */      
  170.     INSERT INTO in_log_product_balance_stock
  171.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  172.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  173.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  174.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  175.         C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id, SUM(C.qty_dlv_int) * -1,
  176.         0, vDatetime, vUserId, vDatetime, vUserId      
  177.     FROM sl_do A, sl_do_item B, sl_do_product C, m_product D, m_product_custom E
  178.     WHERE A.do_id = vDoId AND
  179.         A.do_id = B.do_id AND
  180.         B.do_item_id = C.do_item_id AND
  181.         C.product_id = D.product_id AND
  182.         D.product_id = E.product_id AND
  183.         E.flg_buy_konsinyasi='N'
  184.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  185.             C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id;
  186.  
  187.     /*
  188.      * buat data log product consignment balance stock
  189.      * ref item id = do_product_id
  190.      * NK, 14 Feb 2015
  191.      * untuk product yang beli dengan cara konsinyasi
  192.      */      
  193.     INSERT INTO in_log_product_consignment_balance_stock
  194.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  195.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  196.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  197.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  198.         C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id, SUM(C.qty_dlv_int) * -1,
  199.         0, vDatetime, vUserId, vDatetime, vUserId      
  200.     FROM sl_do A, sl_do_item B, sl_do_product C, m_product D, m_product_custom E
  201.     WHERE A.do_id = vDoId AND
  202.         A.do_id = B.do_id AND
  203.         B.do_item_id = C.do_item_id AND
  204.         C.product_id = D.product_id AND
  205.         D.product_id = E.product_id AND
  206.         E.flg_buy_konsinyasi = 'Y'
  207.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  208.             C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id;
  209.  
  210.     /*
  211.      * add data balance do item yang akan digunakan di inventory untuk pembuatan return note,
  212.      * saat akan membuat return note
  213.      */
  214.     INSERT INTO in_balance_do_item
  215.     (do_item_id, tenant_id, ou_id, do_id, doc_no, doc_date, partner_id,
  216.       so_id, so_no, so_date, so_item_id,
  217.       qty_dlv, qty_return, so_uom_id, qty_dlv_int, 
  218.       qty_return_int, base_uom_id, status_item,
  219.       "version", create_datetime, create_user_id, update_datetime, update_user_id)
  220.     SELECT B.do_item_id, A.tenant_id, A.ou_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  221.             A.ref_id, C.doc_no, C.doc_date, B.ref_id,
  222.             SUM(B.qty_dlv_so), 0, B.so_uom_id, SUM(B.qty_dlv_int),
  223.             0, B.base_uom_id, vStatusRelease,
  224.         0, vDatetime, vUserId, vDatetime, vUserId      
  225.     FROM sl_do A, sl_do_item B, sl_so C
  226.     WHERE A.do_id = vDoId AND
  227.         A.do_id = B.do_id AND
  228.         A.ref_id = C.so_id
  229.     GROUP BY B.do_item_id, A.tenant_id, A.ou_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  230.         A.ref_id, C.doc_no, C.doc_date, B.ref_id, B.so_uom_id, B.base_uom_id;
  231.    
  232.     UPDATE sl_so_balance_item SET status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  233.     FROM sl_do_item A
  234.     WHERE sl_so_balance_item.so_item_id = A.ref_id AND
  235.         sl_so_balance_item.tenant_id = A.tenant_id AND
  236.         A.do_id = vDoId AND
  237.         sl_so_balance_item.qty_so - sl_so_balance_item.qty_cancel + sl_so_balance_item.qty_add - sl_so_balance_item.qty_dlv > 0;
  238.  
  239.     UPDATE sl_so_balance_item SET status_item = vStatusFinal, update_datetime = vDatetime, update_user_id = vUserId
  240.     FROM sl_do_item A
  241.     WHERE sl_so_balance_item.so_item_id = A.ref_id AND
  242.         sl_so_balance_item.tenant_id = A.tenant_id AND
  243.         A.do_id = vDoId AND
  244.         sl_so_balance_item.qty_so - sl_so_balance_item.qty_cancel + sl_so_balance_item.qty_add - sl_so_balance_item.qty_dlv <= 0;
  245.        
  246.     SELECT COUNT(1) INTO vUnfinishedItem
  247.     FROM sl_so_balance_item A, sl_so_item B
  248.     WHERE A.so_item_id = B.so_item_id AND
  249.         B.so_id = vSoId AND
  250.         A.status_item = vStatusRelease;
  251.        
  252.     IF vUnfinishedItem = 0 THEN
  253.         UPDATE sl_so SET status_doc = vStatusFinal
  254.         WHERE so_id = vSoId;
  255.     END IF;
  256.        
  257.     /*
  258.      * NK, 15 Feb 2015
  259.      * mencari data po yang masih release, untuk sebagai catatan ke supplier berapa jumlah barang yang dijual
  260.      */
  261.     /*
  262.      * NK, 16 Feb 2015
  263.      * diubah cara ambil data, karena saat submit so sudah membuat data pu_po_balance_item_consignment_sold
  264.     INSERT INTO tt_do_po_item_consignment
  265.     (session_id, doc_type_id, do_id, do_item_id,
  266.     po_id, po_item_id, remark,
  267.      qty_po, qty_sell, po_uom_id,  
  268.      qty_int_po, qty_int_sell, base_uom_id)
  269.     SELECT pSessionId, A.doc_type_id, A.do_id, B.do_item_id,
  270.         E.po_id, F.po_item_id, B.remark,
  271.         F.qty_po, B.qty_dlv_int * F.qty_po / F.qty_int_po, F.po_uom_id,
  272.         F.qty_int_po, B.qty_dlv_int, F.base_uom_id 
  273.     FROM sl_do A, sl_do_item B, m_product C, m_product_custom D, pu_po_item E, pu_po_balance_item_consignment F
  274.     WHERE A.do_id = vDoId AND
  275.         A.do_id = B.do_id AND
  276.         B.product_id = C.product_id AND
  277.         C.product_id = D.product_id AND
  278.         D.flg_buy_konsinyasi = 'Y' AND
  279.         B.product_id = E.product_id AND
  280.         E.po_item_id = F.po_item_id AND
  281.         F.status_item = vStatusRelease;
  282.      */
  283.    
  284.     INSERT INTO tt_do_po_item_consignment
  285.     (session_id, doc_type_id, do_id, do_item_id,
  286.      po_id, po_item_id, remark,
  287.      qty_po, qty_sell, po_uom_id,  
  288.      qty_int_po, qty_int_sell, base_uom_id)
  289.     SELECT pSessionId, A.doc_type_id, A.do_id, B.do_item_id,
  290.         C.po_id, C.po_item_id, B.remark,
  291.         D.qty_po, B.qty_dlv_int * D.qty_po / D.qty_int_po, D.po_uom_id,
  292.         D.qty_int_po, B.qty_dlv_int, D.base_uom_id         
  293.     FROM sl_do A, sl_do_item B, pu_po_balance_item_consignment_sold C, pu_po_balance_item_consignment D
  294.     WHERE A.do_id = vDoId AND
  295.         A.do_id = B.do_id AND
  296.         A.ref_id = C.so_id AND
  297.         B.ref_id = C.so_item_id AND
  298.         C.po_item_id = D.po_item_id;
  299.                
  300.     UPDATE pu_po_balance_item_consignment B SET  
  301.            qty_int_sell = B.qty_int_sell + A.qty_int_sell, qty_sell = B.qty_sell + A.qty_sell,
  302.            version = B.version + 1, update_datetime = vDatetime, update_user_id = vUserId
  303.     FROM tt_do_po_item_consignment A
  304.     WHERE A.session_id = pSessionId AND
  305.         B.po_item_id = A.po_item_id;
  306.        
  307. --  UPDATE pu_po_balance_item_consignment B SET  
  308. --         update_datetime = vDatetime, update_user_id = vUserId
  309. --  FROM tt_do_po_item_consignment A
  310. --  WHERE A.session_id = pSessionId AND
  311. --      B.po_item_id = A.po_item_id AND
  312. --      B.qty_rcv - B.qty_sell <= 0;
  313.        
  314.     INSERT INTO pu_log_po_balance_item_consignment
  315.     (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  316.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  317.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  318.     SELECT pTenantId, A.po_id, A.po_item_id, A.doc_type_id, A.do_id, A.do_item_id,
  319.         A.qty_sell, A.po_uom_id, A.qty_int_sell, A.base_uom_id, A.remark,
  320.         0, vDatetime, vUserId, vDatetime, vUserId
  321.     FROM tt_do_po_item_consignment A
  322.     WHERE A.session_id = pSessionId;
  323.    
  324.     /*
  325.      * membuat data transaksi jurnal :
  326.      * 1. buat admin
  327.      * 2. buat temlate jurnal
  328.      */
  329.  
  330.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_id, (vDocJournal).journal_type, (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'MONTHLY', vDatetime, vUserId)
  331.     FROM sl_do A
  332.     WHERE A.do_id = vDoId;
  333.    
  334.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  335.    
  336.     INSERT INTO gl_journal_trx
  337.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  338.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  339.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  340.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  341.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.do_id, A.doc_no, A.doc_date,
  342.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_ship_to_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
  343.         A.ref_doc_type_id, A.ref_id, A.doc_date, B.curr_code, A.remark, vStatusDraft, 'DRAFT',
  344.         0, vDatetime, vUserId, vDatetime, vUserId
  345.     FROM sl_do A, sl_so B
  346.     WHERE A.do_id = vDoId AND
  347.         A.ref_doc_type_id = B.doc_type_id AND
  348.         A.ref_id = B.so_id;
  349.    
  350.     INSERT INTO tt_journal_trx_item
  351.     (session_id, tenant_id, journal_trx_id, line_no,
  352.     ref_doc_type_id, ref_id,
  353.     partner_id, product_id, cashbank_id, ou_rc_id,
  354.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  355.     coa_id, curr_code, qty, uom_id,
  356.     amount, journal_date, type_rate,
  357.     numerator_rate, denominator_rate, journal_desc, remark)
  358.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  359.         A.doc_type_id, B.do_item_id,
  360.         A.partner_ship_to_id, B.product_id, vEmptyId, vEmptyId,
  361.         vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  362.         f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_dlv_int, B.base_uom_id,
  363.         0, A.doc_date, vTypeRate,
  364.         1, 1, 'PRODUCT_STOCK', B.remark
  365.     FROM sl_do A, sl_do_item B, sl_so_item C
  366.     WHERE A.do_id = vDoId AND
  367.         A.do_id = B.do_id AND
  368.         B.ref_id = C.so_item_id;
  369.        
  370.     INSERT INTO gl_journal_trx_item
  371.     (tenant_id, journal_trx_id, line_no,
  372.     ref_doc_type_id, ref_id,
  373.     partner_id, product_id, cashbank_id, ou_rc_id,
  374.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  375.     coa_id, curr_code, qty, uom_id,
  376.     amount, journal_date, type_rate,
  377.     numerator_rate, denominator_rate, journal_desc, remark,
  378.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  379.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  380.         A.ref_doc_type_id, A.ref_id,
  381.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  382.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  383.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  384.         A.amount, A.journal_date, A.type_rate,
  385.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  386.         0, vDatetime, vUserId, vDatetime, vUserId
  387.     FROM tt_journal_trx_item A
  388.     WHERE A.session_id = pSessionId;
  389.    
  390.     INSERT INTO gl_journal_trx_mapping
  391.     (tenant_id, journal_trx_id, line_no,
  392.     ref_doc_type_id, ref_id,
  393.     partner_id, product_id, cashbank_id, ou_rc_id,
  394.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  395.     coa_id, curr_code, qty, uom_id,
  396.     amount, journal_date, type_rate,
  397.     numerator_rate, denominator_rate, journal_desc, remark,
  398.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  399.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  400.         vEmptyId, vEmptyId,
  401.         vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  402.         vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  403.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), 0, vEmptyId,
  404.         0, A.journal_date, A.type_rate,
  405.         1, 1, 'COGS', vEmptyValue,
  406.         0, vDatetime, vUserId, vDatetime, vUserId
  407.     FROM tt_journal_trx_item A
  408.     WHERE A.session_id = pSessionId
  409.     GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate;
  410.    
  411.    
  412.     -- insert ke pu_po_balance_item_consignment_sold
  413.     INSERT INTO tt_pu_po_balance_item_consignment_sold(
  414.             session_id, tenant_id, po_id, po_item_id, so_id, so_item_id,
  415.             normal_price, sold_price, discount, margin_internal, margin_supp,
  416.             sold_price_after_margin, qty_so, qty_return)
  417.     SELECT pSessionId, pTenantId, B.po_id, B.po_item_id, C.so_id, C.so_item_id,
  418.       B.gross_price_po, C.gross_sell_price,
  419.       0 as discount,
  420.       0 as margin_internal,
  421.       0 as margin_supp,
  422.       0 as sold_price_after_margin,
  423.       C.qty_so,
  424.       0 as qty_return
  425.       FROM pu_po_balance_item_consignment A
  426.       JOIN pu_po_item B ON  A.po_item_id = B.po_item_id AND A.status_item IN ('R', 'I')
  427.       JOIN pu_po G ON G.po_id = B.po_id
  428.       RIGHT JOIN sl_so_item C ON C.product_id = B.product_id
  429.       JOIN m_product_custom E ON C.product_id = E.product_id
  430.       JOIN m_product F ON F.product_id=C.product_id
  431.       RIGHT JOIN sl_so D ON C.so_id=D.so_id
  432.       WHERE
  433.       C.so_id = vSoId AND
  434.       E.flg_buy_konsinyasi = 'Y' AND
  435.       B.gross_price_po IS NULL;
  436.    
  437.     IF EXISTS ( SELECT 1 FROM tt_pu_po_balance_item_consignment_sold WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId ) THEN
  438.                 DELETE FROM tt_pu_po_balance_item_consignment_sold  WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId;
  439.  
  440.         RAISE EXCEPTION 'Order Magento % cannot be processed ', vSoNo
  441.         USING HINT = 'There is sold product with no purchase data';
  442.     ELSE
  443.                 DELETE FROM tt_pu_po_balance_item_consignment_sold  WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId;
  444.        
  445.     END IF;
  446.    
  447.         INSERT INTO tt_pu_po_balance_item_consignment_sold(
  448.             session_id, tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
  449.             normal_price, sold_price, discount, margin_internal, margin_supp,
  450.             sold_price_after_margin, qty_so, qty_return, remark, do_id, do_item_id)
  451.     SELECT pSessionId, pTenantId, G.partner_id, B.po_id, B.po_item_id, C.so_id, C.so_item_id,
  452.       B.gross_price_po, C.gross_sell_price,
  453.       0 as discount,
  454.       0 as margin_internal,
  455.       0 as margin_supp,
  456.       0 as sold_price_after_margin,
  457.       C.qty_so,
  458.       0 as qty_return,
  459.       '' as remark,
  460.       H.do_id,
  461.       H.do_item_id
  462.       FROM pu_po_balance_item_consignment A
  463.       JOIN pu_po_item B ON  A.po_item_id = B.po_item_id AND A.status_item IN ('R', 'I')
  464.       JOIN pu_po G ON G.po_id = B.po_id
  465.       JOIN sl_so_item C ON C.product_id = B.product_id
  466.       JOIN m_product_custom E ON C.product_id = E.product_id
  467.       JOIN m_product F ON F.product_id=C.product_id
  468.       JOIN sl_so D ON C.so_id=D.so_id
  469.       JOIN sl_do_item H ON H.ref_id = C.so_item_id AND H.do_id = vDoId
  470.       WHERE
  471.       C.so_id = vSoId AND
  472.       E.flg_buy_konsinyasi = 'Y' AND B.gross_price_po IS NOT NULL;
  473.    
  474.  
  475.         UPDATE tt_pu_po_balance_item_consignment_sold
  476.     SET discount = ((normal_price-sold_price)/normal_price)*100
  477.     WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId;
  478.  
  479.         UPDATE tt_pu_po_balance_item_consignment_sold W SET
  480.       margin_internal = Z.internal_percentage,
  481.       margin_supp = Z.supplier_percentage
  482.     FROM
  483.     (select B.session_id, B.tenant_id, B.po_id, B.po_item_id, B.so_item_id, A.internal_percentage, A.supplier_percentage
  484.     from pr_m_margin_sell_price A JOIN tt_pu_po_balance_item_consignment_sold B ON A.partner_id = B.supplier_id
  485.     WHERE discount BETWEEN disc_from AND disc_to ) Z
  486.     WHERE
  487.     W.session_id = Z.session_id
  488.     AND W.tenant_id = Z.tenant_id
  489.     AND W.po_id = Z.po_id
  490.     AND W.po_item_id = Z.po_item_id
  491.     AND W.so_item_id = Z.so_item_id;
  492.  
  493.     UPDATE tt_pu_po_balance_item_consignment_sold SET
  494.       remark = 'MARGIN NOT SET UP'
  495.     WHERE session_id = pSessionId
  496.     AND tenant_id = pTenantId
  497.     AND margin_internal=0
  498.     AND margin_supp=0;
  499.      
  500.  
  501.         UPDATE tt_pu_po_balance_item_consignment_sold SET sold_price_after_margin = margin_supp * 0.01 * sold_price
  502.     WHERE session_id = pSessionId AND tenant_id = pTenantId;
  503.    
  504.     --Cek Partner Id ke Master Partner Konsinyasi Manual
  505.    
  506.     SELECT partner_id INTO vPartnerIdKonsinyasiManual
  507.     FROM sl_so A
  508.     INNER JOIN sl_do b ON a.so_id = b.ref_id
  509.     WHERE b.ref_doc_type_id = vSalesOrderDocTypeId AND b.ref_id = vSoId;
  510.    
  511.     IF EXISTS ( SELECT 1 FROM m_partner_konsinyasi_manual WHERE partner_id = vPartnerIdKonsinyasiManual AND active <> 'N') AND
  512.         EXISTS (SELECT 1 FROM sl_so_ext WHERE so_id = vSoId AND flg_manual_consignment = 'Y') THEN
  513.        
  514.         INSERT INTO pu_po_balance_item_consignment_sold_manual(
  515.             tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
  516.             normal_price, normal_price_correction, sold_price, sold_price_used, discount, margin_internal, margin_supp, margin_supp_correction,
  517.             sold_price_after_margin, qty_so, qty_return, version, create_datetime, create_user_id, update_datetime, update_user_id, remark,
  518.             do_id, do_item_id,
  519.             flg_calculate_margin)
  520.         SELECT tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
  521.         normal_price, normal_price, sold_price, sold_price, discount, margin_internal, margin_supp, margin_supp,
  522.         sold_price_after_margin, qty_so, qty_return, 0, vDatetime, vUserId, vDatetime, vUserId, remark, do_id, do_item_id,
  523.         vFlgCalculateMargin
  524.         FROM tt_pu_po_balance_item_consignment_sold
  525.         WHERE session_id = pSessionId AND tenant_id = pTenantId;
  526.        
  527.     ELSE
  528.           INSERT INTO pu_po_balance_item_consignment_sold(
  529.             tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
  530.             normal_price, normal_price_correction, sold_price, sold_price_used, discount, margin_internal, margin_supp, margin_supp_correction,
  531.             sold_price_after_margin, qty_so, qty_return, version, create_datetime, create_user_id, update_datetime, update_user_id, remark)
  532.         SELECT tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
  533.         normal_price, normal_price, sold_price, sold_price, discount, margin_internal, margin_supp, margin_supp,
  534.         sold_price_after_margin, qty_so, qty_return, 0, vDatetime, vUserId, vDatetime, vUserId, remark
  535.         FROM tt_pu_po_balance_item_consignment_sold
  536.         WHERE session_id = pSessionId AND tenant_id = pTenantId;
  537.  
  538.     END IF;
  539.    
  540.    
  541.      
  542.     DELETE FROM tt_pu_po_balance_item_consignment_sold WHERE session_id = pSessionId AND tenant_id = pTenantId;
  543.        
  544.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  545. END;   
  546. $BODY$
  547.   LANGUAGE plpgsql VOLATILE
  548.   COST 100;
  549.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement