Advertisement
samuel025

Function Generate Sales Invoice

Jul 13th, 2021
1,023
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  CREATE OR REPLACE FUNCTION f_generate_jurnal_sales_invoice(character varying,bigint,character varying,character varying,
  2.     bigint,character varying)
  3.   RETURNS void AS
  4. $BODY$
  5. DECLARE
  6.     pSessionId          ALIAS FOR $1;
  7.     pTenantId           ALIAS FOR $2;
  8.     pDateForm           ALIAS FOR $3;
  9.     pDateTo             ALIAS FOR $4;
  10.     pUserId             ALIAS FOR $5;
  11.     pDatetime           ALIAS FOR $6;
  12.  
  13.     -- For Journal
  14.     vEmptyId                bigint;
  15.     vSignDebt               character varying(1);
  16.     vSignCredit             character varying(1);
  17.     vTypeRate               character varying(5);
  18.     vStatusDraft            character varying(1);
  19.  
  20.  
  21.     vProcessId              bigint;
  22.     vSalesInvoiceId         bigint;
  23.     vSalesInvoiceTempId     bigint;
  24.     vInvoiceArBalanceId     bigint;
  25.     vUserId                 bigint;
  26.     vDatetime               character varying(14);
  27.     vFlagInvoice            character varying(1);
  28.     vFlagPayment            character varying(1);
  29.     vEmptyId                bigint;
  30.     vStatusRelease          character varying(1);
  31.     vStatusDraft            character varying(1);
  32.     vStatusFinal            character varying(1);
  33.     vEmptyValue             character varying(1);
  34.     vEmptyString            character varying;
  35.     vJournalType            character varying(20);
  36.     vSignDebit              character varying(1);
  37.     vSignCredit             character varying(1);
  38.     vTypeRate               character varying(3);
  39.     vActivityCOA            character varying(10);
  40.     vSystemCOA              character varying(10);
  41.     vTaxCOA                 character varying(10);
  42.     vParentOuId             bigint;
  43.     vJournalTrxId           bigint;
  44.     vOuStructureDo          OU_BU_STRUCTURE%ROWTYPE;
  45.  
  46.     vDocJournal             DOC_JOURNAL%ROWTYPE;
  47.     vOuStructure            OU_BU_STRUCTURE%ROWTYPE;
  48.     result                  RECORD;
  49.     vFakturPajakKeluaran    bigint;
  50.     vInvArBalanceId         bigint;
  51.     vInvTaxArBalanceId      bigint;
  52.     vSalesInvDate           character varying(8);
  53.     vSlsInvTempDocTypeId    bigint;
  54.     vDoDocTypeId            bigint;
  55.     vRegularDiscount        bigint;
  56.     vPromoDiscount          bigint;
  57.     vOuId                   bigint;
  58.     vOuWarehouseId          bigint;
  59.     vCoaIdGIT               bigint;
  60.     vProductCOA             character varying(10);
  61.     vRoundingModeNonTax     character varying(5);
  62.     vDiffAdjRegularDiscAmount       numeric;
  63.     vDiffAdjPromoDiscAmount         numeric;
  64.     vMaxItemAmount          numeric;
  65.     vMaxAdjPromoItemAmount  numeric;
  66.     vInProgress                 character varying(1);
  67.     vYes                        character varying(1);
  68.     vNo                         character varying(1);
  69.     vNol                        numeric;
  70.     vReleased                   character varying(1);
  71.     vFlgGunggung                character varying(1);
  72.  
  73.     vJointDppPpn            character varying(1);
  74.  
  75. BEGIN
  76.  
  77.    vFlagInvoice := 'Y';
  78.     vFlagPayment := 'N';
  79.     vEmptyId := -99;
  80.     vStatusRelease := 'R';
  81.     vStatusDraft := 'D';
  82.     vStatusFinal := 'F';
  83.     vEmptyValue := ' ';
  84.     vSignDebit := 'D';
  85.     vSignCredit := 'C';
  86.     vTypeRate := 'COM';
  87.     vActivityCOA := 'ACTIVITY';
  88.     vSystemCOA := 'SYSTEM';
  89.     vProductCOA := 'PRODUCT';
  90.     vTaxCOA := 'TAX';
  91.     vFakturPajakKeluaran := 281;
  92.     vSlsInvTempDocTypeId := 361;
  93.     vDoDocTypeId := 311;
  94.     vInProgress := 'I';
  95.     vYes := 'Y';
  96.     vNo := 'N';
  97.     vNol := 0;
  98.     vReleased := 'R';
  99.     vJointDppPpn := f_get_value_system_config_by_param_code(pTenantId, 'joint.dpp.ppn.balance');
  100.     vEmptyString := '';
  101.     vCoaIdGIT:=f_get_system_coa_by_group_coa(pTenantId, 'PersediaanInTransit');
  102.  
  103. --
  104. --  SELECT f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc, ref_inv_temp_id as salesInvTempId, A.doc_date
  105. --  FROM sl_invoice A
  106. --  WHERE A.invoice_id = vSalesInvoiceId INTO result;
  107. --
  108. --  vOuStructure := result.ou;
  109. --  vDocJournal := result.doc;
  110. --
  111. --  SELECT A.ou_id, B.ou_id INTO vOuId, vOuWarehouseId
  112. --  FROM sl_do A
  113. --  INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  114. --  WHERE A.do_id = vDoId;
  115. --
  116. --  IF (vOuId <> vOuWarehouseId) THEN
  117. --      SELECT f_get_ou_bu_structure(vOuWarehouseId) as ou_structure INTO result;
  118. --      vOuStructureJournalItem := result.ou_structure;
  119. --  ELSE
  120. --      vOuStructureJournalItem := ROW(-99, -99, -99);
  121. --  END IF;
  122. --
  123. --  DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  124.  
  125.     /*
  126.      * membuat data transaksi jurnal :
  127.      * 1. buat admin
  128.      * 2. buat temlate jurnal
  129.      */
  130. --  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', pDatetime, pUserId)
  131. --  FROM sl_do A
  132. --  WHERE A.do_id = vDoId;
  133.  
  134.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  135.  
  136.     INSERT INTO gl_journal_trx
  137.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  138.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,
  139.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  140.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  141.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.invoice_id, A.doc_no, A.doc_date,
  142.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_id, vEmptyId, vEmptyId, A.ext_doc_no, A.ext_doc_date,
  143.         A.ref_doc_type_id, A.ref_id, A.due_date, A.curr_code, A.remark, vStatusDraft, 'DRAFT',
  144.         0, pDatetime, pUserId, pDatetime, pUserId
  145.     FROM sl_invoice A
  146.     WHERE A.doc_no BETWEEN pDateForm AND pDateTo;
  147.  
  148.  
  149.     INSERT INTO tt_journal_trx_item
  150.     (session_id, tenant_id, journal_trx_id, line_no,
  151.     ref_doc_type_id, ref_id,
  152.     partner_id, product_id, cashbank_id, ou_rc_id,
  153.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  154.     coa_id, curr_code, qty, uom_id,
  155.     amount, journal_date, type_rate,
  156.     numerator_rate, denominator_rate, journal_desc, remark)
  157.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  158.         A.doc_type_id, B.invoice_item_id,
  159.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  160.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  161.         f_get_system_coa_by_group_coa(A.tenant_id, 'PendapatanPenjualan'), A.curr_code, 0, vEmptyId,
  162.         B.ref_item_amount, A.doc_date, vTypeRate,
  163.         1, 1, 'SALES_INCOME', B.remark
  164.     FROM sl_invoice A, sl_invoice_item B
  165.     WHERE A.doc_no BETWEEN pDateForm AND pDateTo
  166.         AND A.invoice_id = B.invoice_id;
  167.  
  168.  
  169.     INSERT INTO gl_journal_trx_item
  170.     (tenant_id, journal_trx_id, line_no,
  171.     ref_doc_type_id, ref_id,
  172.     partner_id, product_id, cashbank_id, ou_rc_id,
  173.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  174.     coa_id, curr_code, qty, uom_id,
  175.     amount, journal_date, type_rate,
  176.     numerator_rate, denominator_rate, journal_desc, remark,
  177.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  178.     ou_branch_id, ou_sub_bu_id)
  179.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  180.             A.ref_doc_type_id, A.ref_id,
  181.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  182.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  183.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  184.             A.amount, A.journal_date, A.type_rate,
  185.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  186.             0, pDatetime, pUserId, pDatetime, pUserId
  187.     FROM(
  188.         SELECT A.tenant_id, A.journal_trx_id,
  189.             A.ref_doc_type_id, A.ref_id,
  190.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  191.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  192.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  193.             A.amount, A.journal_date, A.type_rate,
  194.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  195.             vOuStructure.ou_branch_id AS ou_branch_id, vOuStructure.ou_sub_bu_id AS ou_sub_bu_id
  196.         FROM tt_journal_trx_item A
  197.         WHERE A.session_id = pSessionId AND
  198.             journal_desc IN ('SALES_INCOME','SALES_COST','VAT_OUT','AR_ADVANCE')
  199.         UNION ALL
  200.         -- tambahan jounal cogs
  201.         SELECT A.tenant_id, vJournalTrxId,
  202.             vEmptyId, vEmptyId,
  203.             A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  204.             vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  205.             f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), 0, vEmptyId,
  206.             0, A.doc_date, vTypeRate,
  207.             1, 1, 'COGS', vEmptyString,
  208.             vOuStructureDo.ou_branch_id AS ou_branch_id, vOuStructureDo.ou_sub_bu_id AS ou_sub_bu_id
  209.         FROM sl_invoice A
  210.         WHERE A.doc_no BETWEEN pDateForm AND pDateTo
  211.     ) A;
  212.  
  213.     INSERT INTO gl_journal_trx_mapping
  214.     (tenant_id, journal_trx_id, line_no,
  215.     ref_doc_type_id, ref_id,
  216.     partner_id, product_id, cashbank_id, ou_rc_id,
  217.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  218.     coa_id, curr_code, qty, uom_id,
  219.     amount, journal_date, type_rate,
  220.     numerator_rate, denominator_rate, journal_desc, remark,
  221.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  222.     ou_branch_id, ou_sub_bu_id)
  223.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  224.             A.ref_doc_type_id, A.ref_id,
  225.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  226.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  227.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  228.             A.amount, A.journal_date, A.type_rate,
  229.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  230.             0, pDatetime, pUserId, pDatetime, pUserId
  231.     FROM (
  232.         SELECT A.tenant_id, A.journal_trx_id,
  233.             A.ref_doc_type_id, A.ref_id,
  234.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  235.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  236.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  237.             A.amount, A.journal_date, A.type_rate,
  238.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  239.             vOuStructure.ou_branch_id AS ou_branch_id, vOuStructure.ou_sub_bu_id AS ou_sub_bu_id
  240.         FROM tt_journal_trx_item A
  241.         WHERE A.session_id = pSessionId AND
  242.             journal_desc IN ('AR')
  243.         UNION ALL
  244.         SELECT h.tenant_id, vJournalTrxId,
  245.             g.ref_doc_type_id, g.ref_item_id,
  246.             h.partner_id, C.product_id, vEmptyId, vEmptyId,
  247.             vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  248.             vCoaIdGIT, g.curr_code, SUM(g.qty_dlv_so), g.so_uom_id,
  249.             0, h.doc_date, vTypeRate,
  250.             1, 1, 'PRODUCT_STOCK_IN_TRANSIT', C.remark,
  251.             vOuStructureDo.ou_branch_id AS ou_branch_id, vOuStructureDo.ou_sub_bu_id AS ou_sub_bu_id
  252.         FROM sl_invoice_item a
  253.         INNER JOIN sl_invoice h ON a.tenant_id = h.tenant_id
  254.             AND a.invoice_id = h.invoice_id
  255.         INNER JOIN sl_do b ON a.tenant_id = b.tenant_id
  256.             AND a.ref_id = b.do_id
  257.         INNER JOIN sl_do_item c ON a.tenant_id = c.tenant_id AND a.ref_item_id = c.do_item_id
  258.         INNER JOIN sl_so_balance_invoice g ON a.tenant_id = g.tenant_id
  259.             AND g.ou_id = h.ou_id
  260.             AND g.so_id = b.ref_id
  261.             AND g.ref_item_id = a.ref_item_id
  262.             AND g.ref_doc_type_id = 311
  263.             AND g.ref_id = b.do_id
  264.             AND a.do_receipt_item_id = g.do_receipt_item_id
  265.         WHERE A.doc_no BETWEEN pDateForm AND pDateTo
  266.         GROUP BY h.tenant_id, g.ref_doc_type_id, g.ref_item_id,
  267.                 h.partner_id, C.product_id, g.curr_code,
  268.                 g.so_uom_id, h.doc_date,C.remark
  269.     ) A;
  270.  
  271.  
  272.     INSERT INTO gl_journal_trx_mapping
  273.     (tenant_id, journal_trx_id, line_no,
  274.     ref_doc_type_id, ref_id,
  275.     partner_id, product_id, cashbank_id, ou_rc_id,
  276.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  277.     coa_id, curr_code, qty, uom_id,
  278.     amount, journal_date, type_rate,
  279.     numerator_rate, denominator_rate, journal_desc, remark,
  280.     "version", create_datetime, create_user_id, update_datetime, update_user_id,
  281.     ou_branch_id, ou_sub_bu_id)
  282.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  283.             A.ref_doc_type_id, A.ref_id,
  284.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  285.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  286.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  287.             A.amount, A.journal_date, A.type_rate,
  288.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  289.             0, pDatetime, pUserId, pDatetime, pUserId
  290.     FROM (
  291.         SELECT A.tenant_id, A.journal_trx_id,
  292.             A.ref_doc_type_id, A.ref_id,
  293.             A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  294.             A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  295.             A.coa_id, A.curr_code, A.qty, A.uom_id,
  296.             A.amount, A.journal_date, A.type_rate,
  297.             A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  298.             vOuStructure.ou_branch_id AS ou_branch_id, vOuStructure.ou_sub_bu_id AS ou_sub_bu_id
  299.         FROM tt_journal_trx_item A
  300.         WHERE A.session_id = pSessionId AND
  301.             journal_desc IN ('AR')
  302.         UNION ALL
  303.         SELECT h.tenant_id, vJournalTrxId,
  304.             g.ref_doc_type_id, g.ref_item_id,
  305.             h.partner_id, C.product_id, vEmptyId, vEmptyId,
  306.             vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  307.             vCoaIdGIT, g.curr_code, SUM(g.qty_dlv_so), g.so_uom_id,
  308.             0, h.doc_date, vTypeRate,
  309.             1, 1, 'PRODUCT_STOCK_IN_TRANSIT', C.remark,
  310.             vOuStructureDo.ou_branch_id AS ou_branch_id, vOuStructureDo.ou_sub_bu_id AS ou_sub_bu_id
  311.         FROM sl_invoice_item a
  312.         INNER JOIN sl_invoice h ON a.tenant_id = h.tenant_id
  313.             AND a.invoice_id = h.invoice_id
  314.         INNER JOIN sl_do b ON a.tenant_id = b.tenant_id
  315.             AND a.ref_id = b.do_id
  316.         INNER JOIN sl_do_item c ON a.tenant_id = c.tenant_id AND a.ref_item_id = c.do_item_id
  317.         INNER JOIN sl_so_balance_invoice g ON a.tenant_id = g.tenant_id
  318.             AND g.ou_id = h.ou_id
  319.             AND g.so_id = b.ref_id
  320.             AND g.ref_item_id = a.ref_item_id
  321.             AND g.ref_doc_type_id = 311
  322.             AND g.ref_id = b.do_id
  323.             AND a.do_receipt_item_id = g.do_receipt_item_id
  324.         WHERE A.doc_no BETWEEN pDateForm AND pDateTo
  325.         GROUP BY h.tenant_id, g.ref_doc_type_id, g.ref_item_id,
  326.                 h.partner_id, C.product_id, g.curr_code,
  327.                 g.so_uom_id, h.doc_date,C.remark
  328.     ) A;
  329.  
  330.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  331.  
  332. END;
  333. $BODY$
  334.   LANGUAGE plpgsql VOLATILE
  335.   COST 100;
  336.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement