Advertisement
widana

r_jurnal_umum

Nov 17th, 2017
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_jurnal_umum(character varying, bigint, character varying)
  2.     RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pSessionId          ALIAS FOR $1;
  6.     pTenantId           ALIAS FOR $2;
  7.     pDateYearMonth      ALIAS FOR $3;
  8.    
  9.     pRefHeader          REFCURSOR := 'refHeader';
  10.     pRefDetail          REFCURSOR := 'refDetail';
  11.    
  12.     vTitle              character varying := 'REPORT JURNAL UMUM';
  13.        
  14.     vCOGSCoaId          bigint;
  15.     vInventoryCoaId     bigint;
  16.     vPPNCoaId           bigint;
  17.    
  18.     vCOGSCoaAcc         character varying;
  19.     vInventoryCoaAcc    character varying;
  20.     vPPNCoaAcc          character varying;
  21.    
  22.     vCOGSCoaDesc        character varying;
  23.     vInventoryCoaDesc   character varying;
  24.     vPPNCoaDesc         character varying;
  25.  
  26.     vYes                character varying := 'Y';
  27.     vNo                 character varying := 'N';
  28.     vOuId               bigint;
  29.  
  30. BEGIN
  31.    
  32.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'OU.GRAZIA.INDONESIA') INTO vOuId;   
  33.  
  34.     -- Get Coa main_acc.sub_acc and desc (DEBET)
  35.     SELECT f_get_system_coa_by_group_coa(pTenantId, 'HargaPokokPenjualan') INTO vCOGSCoaId;
  36.     SELECT main_acc || '.' || sub_acc, coa_desc INTO vCOGSCoaAcc, vCOGSCoaDesc FROM m_coa WHERE coa_id = vCOGSCoaId;
  37.  
  38.     -- Get Coa main_acc.sub_acc and desc (KREDIT)
  39.     SELECT coa_id FROM m_group_product WHERE group_product_code = 'FG' INTO vInventoryCoaId;
  40.     SELECT main_acc || '.' || sub_acc, coa_desc INTO vInventoryCoaAcc, vInventoryCoaDesc FROM m_coa WHERE coa_id = vInventoryCoaId;
  41.    
  42.     SELECT f_get_system_coa_by_group_coa(pTenantId, 'PajakPertambahanNilaiKeluaran') INTO vPPNCoaId;
  43.     SELECT main_acc || '.' || sub_acc, coa_desc INTO vPPNCoaAcc, vPPNCoaDesc FROM m_coa WHERE coa_id = vPPNCoaId;
  44.  
  45.  
  46.     INSERT INTO tt_jurnal_umum_dn_ar(
  47.             session_id, invoice_ar_id, recap_sales_department_store_id)
  48.     WITH temp AS (
  49.         SELECT recap_sales_department_store_id, date_year_month, outlet_id
  50.         FROM i_recap_sales_department_store
  51.         WHERE date_year_month = pDateYearMonth
  52.     )
  53.     SELECT pSessionId AS session_id, B.invoice_ar_id, A.recap_sales_department_store_id
  54.     FROM fi_invoice_ar_recap_sales_department_store B
  55.     INNER JOIN temp A
  56.     ON A.recap_sales_department_store_id = B.recap_sales_department_store_id;
  57.  
  58.    
  59.    
  60.     -- Insert COGS
  61.     INSERT INTO tt_jurnal_umum(
  62.             session_id, outlet_id, outlet_name, partner_id, partner_name, brand_id,
  63.             brand_code, coa_acc, coa_desc, debet, kredit)
  64.     SELECT pSessionId AS session_id, B.outlet_id, B.outlet_name, C.partner_id, C.partner_name, D.brand_id,
  65.            COALESCE(E.brand_code,''), vCOGSCoaAcc AS coa_acc, vCOGSCoaDesc AS coa_desc, SUM(A.qty_verified * COALESCE(F.purch_price, 0)) AS debet, 0 AS kredit
  66.     FROM i_trx_mobile_pos_item_balance A
  67.     INNER JOIN i_outlet B
  68.     ON A.outlet_id = B.outlet_id
  69.     INNER JOIN m_partner C
  70.     ON B.partner_id = C.partner_id
  71.     INNER JOIN i_outlet_brand D
  72.     ON A.outlet_id = D.outlet_id
  73.     LEFT JOIN m_brand E
  74.     ON D.brand_id = E.brand_id
  75.     LEFT JOIN m_purch_price_product F
  76.     ON A.tenant_id = F.tenant_id
  77.     AND F.ou_id = vOuId
  78.     AND pDateYearMonth || '01' between F.date_from AND F.date_to
  79.     AND A.product_id = F.product_id
  80.     WHERE A.tenant_id = pTenantId
  81.     AND SUBSTR(A.doc_date , 1, 6) = pDateYearMonth
  82.     AND A.status_item = vYes
  83.     AND A.flg_unused = vNo
  84.     GROUP BY B.outlet_id, B.outlet_name, C.partner_id, C.partner_name, D.brand_id, COALESCE(E.brand_code,'')
  85.     ORDER BY B.outlet_name, C.partner_code, COALESCE(E.brand_code,'');
  86.  
  87.  
  88. --      -- Insert Piutang
  89. --  INSERT INTO tt_jurnal_umum(
  90. --            session_id, outlet_id, outlet_name, partner_id, partner_name, brand_id,
  91. --            brand_code, coa_acc, coa_desc, debet, kredit)
  92. --  WITH temp AS(
  93. --      SELECT C.outlet_id, A.partner_id, C.amount
  94. --      FROM fi_invoice_ar A
  95. --      INNER JOIN fi_invoice_ar_cost B
  96. --      ON A.invoice_ar_id = B.invoice_ar_id
  97. --      INNER JOIN fi_invoice_ar_cost_ext C
  98. --      ON B.invoice_ar_cost_id = C.invoice_ar_cost_id
  99. --      WHERE A.tenant_id = pTenantId
  100. --      AND SUBSTR(A.doc_date , 1, 6) = pDateYearMonth
  101. --      UNION ALL
  102. --      SELECT C.outlet_id, A.partner_id, C.amount
  103. --      FROM fi_invoice_ar A
  104. --      INNER JOIN fi_invoice_ar_tax B
  105. --      ON A.invoice_ar_id = B.invoice_ar_id
  106. --      INNER JOIN fi_invoice_ar_tax_ext C
  107. --      ON B.invoice_ar_tax_id = C.invoice_ar_tax_id
  108. --      WHERE A.tenant_id = pTenantId
  109. --      AND SUBSTR(A.doc_date , 1, 6) = pDateYearMonth
  110. --  )
  111. --  SELECT pSessionId AS session_id, A.outlet_id, C.outlet_name, A.partner_id, B.partner_name, E.brand_id,
  112. --       E.brand_code, H.main_acc || '.' || H.sub_acc AS  coa_acc, H.coa_desc AS coa_desc, SUM(A.amount) AS debet, 0 AS kredit
  113. --  FROM temp A
  114. --  INNER JOIN m_partner B
  115. --  ON A.partner_id = B.partner_id
  116. --  INNER JOIN i_outlet C
  117. --  ON A.outlet_id = C.outlet_id
  118. --  INNER JOIN i_outlet_brand D
  119. --  ON C.outlet_id = D.outlet_id
  120. --  INNER JOIN m_brand E
  121. --  ON D.brand_id = E.brand_id
  122. --  INNER JOIN m_partner_type F
  123. --  ON B.partner_id = F.partner_id
  124. --  INNER JOIN m_type_partner G
  125. --  ON F.type_partner_id = G.type_partner_id
  126. --  INNER JOIN m_coa H
  127. --  ON G.coa_id = H.coa_id 
  128. --  GROUP BY A.outlet_id, C.outlet_name, A.partner_id, B.partner_name, E.brand_id,  
  129. --       E.brand_code, coa_acc, coa_desc;
  130.  
  131.    
  132.     -- Insert Piutang
  133.     INSERT INTO tt_jurnal_umum(
  134.             session_id, outlet_id, outlet_name, partner_id, partner_name, brand_id,
  135.             brand_code, coa_acc, coa_desc, debet, kredit)
  136.     WITH temp AS(
  137.         SELECT D.outlet_id, A.partner_id, D.amount
  138.         FROM fi_invoice_ar A
  139.         INNER JOIN tt_jurnal_umum_dn_ar B
  140.         ON A.invoice_ar_id = B.invoice_ar_id
  141.         INNER JOIN fi_invoice_ar_cost C
  142.         ON B.invoice_ar_id = C.invoice_ar_id
  143.         INNER JOIN fi_invoice_ar_cost_ext D
  144.         ON C.invoice_ar_cost_id = D.invoice_ar_cost_id
  145.         WHERE A.tenant_id = pTenantId
  146.         UNION ALL
  147.         SELECT D.outlet_id, A.partner_id, D.amount
  148.         FROM fi_invoice_ar A
  149.         INNER JOIN tt_jurnal_umum_dn_ar B
  150.         ON A.invoice_ar_id = B.invoice_ar_id
  151.         INNER JOIN fi_invoice_ar_tax C
  152.         ON B.invoice_ar_id = C.invoice_ar_id
  153.         INNER JOIN fi_invoice_ar_tax_ext D
  154.         ON C.invoice_ar_tax_id = D.invoice_ar_tax_id
  155.         WHERE A.tenant_id = pTenantId
  156.     )
  157.     SELECT pSessionId AS session_id, A.outlet_id, C.outlet_name, A.partner_id, B.partner_name, D.brand_id,
  158.          COALESCE(E.brand_code,''), H.main_acc || '.' || H.sub_acc AS  coa_acc, H.coa_desc AS coa_desc, SUM(A.amount) AS debet, 0 AS kredit
  159.     FROM temp A
  160.     INNER JOIN m_partner B
  161.     ON A.partner_id = B.partner_id
  162.     INNER JOIN i_outlet C
  163.     ON A.outlet_id = C.outlet_id
  164.     INNER JOIN i_outlet_brand D
  165.     ON C.outlet_id = D.outlet_id
  166.     LEFT JOIN m_brand E
  167.     ON D.brand_id = E.brand_id
  168.     INNER JOIN m_partner_type F
  169.     ON B.partner_id = F.partner_id
  170.     INNER JOIN m_type_partner G
  171.     ON F.type_partner_id = G.type_partner_id
  172.     INNER JOIN m_coa H
  173.     ON G.coa_id = H.coa_id 
  174.     GROUP BY A.outlet_id, C.outlet_name, A.partner_id, B.partner_name, D.brand_id,  
  175.          COALESCE(E.brand_code,''), coa_acc, coa_desc;
  176.                
  177.    
  178.     -- Insert Discount dan Penjualan
  179.     INSERT INTO tt_jurnal_umum(
  180.             session_id, outlet_id, outlet_name, partner_id, partner_name, brand_id,
  181.             brand_code, coa_acc, coa_desc, debet, kredit)
  182.     SELECT pSessionId AS session_id, F.outlet_id, F.outlet_name, E.partner_id, E.partner_name, G.brand_id,
  183.            COALESCE(H.brand_code,''), J.main_acc || '.' || J.sub_acc AS coa_acc, J.coa_desc AS coa_desc,
  184.            (CASE WHEN J.sign_coa = 'D' AND D.amount > 0 THEN D.amount
  185.                  WHEN J.sign_coa = 'C' AND D.amount < 0 THEN (D.amount * -1) ELSE 0 END) AS debet,
  186.            (CASE WHEN J.sign_coa = 'C' AND D.amount > 0 THEN D.amount
  187.                  WHEN J.sign_coa = 'D' AND D.amount < 0 THEN (D.amount * -1) ELSE 0 END) AS kredit
  188.     FROM fi_invoice_ar A
  189.     INNER JOIN tt_jurnal_umum_dn_ar B
  190.     ON A.invoice_ar_id = B.invoice_ar_id
  191.     INNER JOIN fi_invoice_ar_cost C
  192.     ON B.invoice_ar_id = C.invoice_ar_id
  193.     INNER JOIN fi_invoice_ar_cost_ext D
  194.     ON C.invoice_ar_cost_id = D.invoice_ar_cost_id
  195.     INNER JOIN m_partner E
  196.     ON A.partner_id = E.partner_id
  197.     INNER JOIN i_outlet F
  198.     ON D.outlet_id = F.outlet_id
  199.     INNER JOIN i_outlet_brand G
  200.     ON F.outlet_id = G.outlet_id
  201.     LEFT JOIN m_brand H
  202.     ON G.brand_id = H.brand_id
  203.     INNER JOIN m_activity_gl I
  204.     ON C.activity_gl_id = I.activity_gl_id
  205.     INNER JOIN m_coa J
  206.     ON I.coa_id = J.coa_id
  207.     WHERE A.tenant_id = pTenantId;
  208.    
  209.     -- Insert Inventory
  210.     INSERT INTO tt_jurnal_umum(
  211.             session_id, outlet_id, outlet_name, partner_id, partner_name, brand_id,
  212.             brand_code, coa_acc, coa_desc, debet, kredit)
  213.     SELECT pSessionId AS session_id, B.outlet_id, B.outlet_name, C.partner_id, C.partner_name, D.brand_id,
  214.            COALESCE(E.brand_code,''), vInventoryCoaAcc AS coa_acc, vInventoryCoaDesc AS coa_desc, 0 AS debet, SUM(A.qty_verified * COALESCE(F.purch_price, 0)) AS kredit
  215.     FROM i_trx_mobile_pos_item_balance A
  216.     INNER JOIN i_outlet B
  217.     ON A.outlet_id = B.outlet_id
  218.     INNER JOIN m_partner C
  219.     ON B.partner_id = C.partner_id
  220.     INNER JOIN i_outlet_brand D
  221.     ON A.outlet_id = D.outlet_id
  222.     LEFT JOIN m_brand E
  223.     ON D.brand_id = E.brand_id
  224.     LEFT JOIN m_purch_price_product F
  225.     ON A.tenant_id = F.tenant_id
  226.     AND F.ou_id = vOuId
  227.     AND pDateYearMonth || '01' BETWEEN F.date_from AND F.date_to
  228.     AND A.product_id = F.product_id
  229.     WHERE A.tenant_id = pTenantId
  230.     AND SUBSTR(A.doc_date , 1, 6) = pDateYearMonth
  231.     AND A.status_item = vYes
  232.     AND A.flg_unused = vNo
  233.     GROUP BY B.outlet_id, B.outlet_name, C.partner_id, C.partner_name, D.brand_id, COALESCE(E.brand_code,'')
  234.     ORDER BY B.outlet_name, C.partner_code, COALESCE(E.brand_code,'');
  235.    
  236.    
  237. --  -- Insert PPN
  238. --  INSERT INTO tt_jurnal_umum(
  239. --            session_id, outlet_id, outlet_name, partner_id, partner_name, brand_id,
  240. --            brand_code, coa_acc, coa_desc, debet, kredit)
  241. --  SELECT pSessionId AS session_id, E.outlet_id, E.outlet_name, D.partner_id, D.partner_name, G.brand_id,
  242. --         G.brand_code, vPPNCoaAcc AS coa_acc, vPPNCoaDesc AS coa_desc, 0 AS debet, SUM (A.tax_amount) AS kredit
  243. --  FROM fi_invoice_ar A
  244. --  INNER JOIN fi_invoice_ar_tax B
  245. --  ON A.invoice_ar_id = B.invoice_ar_id
  246. --  INNER JOIN fi_invoice_ar_tax_ext C
  247. --  ON B.invoice_ar_tax_id = C.invoice_ar_tax_id
  248. --  INNER JOIN m_partner D
  249. --  ON A.partner_id = D.partner_id
  250. --  INNER JOIN i_outlet E
  251. --  ON C.outlet_id = E.outlet_id
  252. --  INNER JOIN i_outlet_brand F
  253. --  ON E.outlet_id = F.outlet_id
  254. --  INNER JOIN m_brand G
  255. --  ON F.brand_id = G.brand_id
  256. --  WHERE A.tenant_id = pTenantId
  257. --  AND SUBSTR(A.doc_date , 1, 6) = pDateYearMonth
  258. --  GROUP BY E.outlet_id, E.outlet_name, D.partner_id, D.partner_name, G.brand_id, G.brand_code
  259. --  ORDER BY E.outlet_name, D.partner_code, G.brand_code;  
  260.    
  261.    
  262.     OPEN pRefHeader FOR
  263.         SELECT vTitle AS report_title,
  264.         pDateYearMonth AS date_year_month;
  265.     RETURN NEXT pRefHeader;
  266.    
  267.     OPEN pRefDetail FOR
  268.         SELECT outlet_name, partner_name, brand_code, coa_acc, coa_desc, debet, kredit
  269.         FROM tt_jurnal_umum
  270.         ORDER BY partner_name, brand_code, outlet_name, coa_desc;
  271.     RETURN NEXT pRefDetail;
  272.    
  273.     DELETE FROM tt_jurnal_umum WHERE session_id = pSessionId;
  274.     DELETE FROM tt_jurnal_umum_dn_ar WHERE session_id = pSessionId;
  275.    
  276. END;
  277. $BODY$
  278.     LANGUAGE plpgsql VOLATILE
  279.     COST 100
  280.     ROWS 1000;
  281. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement