Advertisement
1DanielLee9

Functioin Report Log Stock Card With Invoice

Mar 31st, 2021 (edited)
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: public.r_inv_inquiry_stock_log_stock_card_with_invoice(character varying, bigint, bigint, bigint, character varying, bigint, bigint, bigint, character varying, character varying, character varying)
  2.  
  3. -- DROP FUNCTION public.r_inv_inquiry_stock_log_stock_card_with_invoice(character varying, bigint, bigint, bigint, character varying, bigint, bigint, bigint, character varying, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION public.r_inv_inquiry_stock_log_stock_card_with_invoice(
  6.     character varying,
  7.     bigint,
  8.     bigint,
  9.     bigint,
  10.     character varying,
  11.     bigint,
  12.     bigint,
  13.     bigint,
  14.     character varying,
  15.     character varying,
  16.     character varying)
  17.   RETURNS SETOF refcursor AS
  18. $BODY$
  19. DECLARE
  20.     pRefHeader                      REFCURSOR := 'refHeader';
  21.     pRefDetail_detail               REFCURSOR := 'refDetail_detail';
  22.     pRefDetail_summary              REFCURSOR := 'refDetail_summary';
  23.     pSessionId                      ALIAS FOR $1;
  24.     pTenantId                       ALIAS FOR $2;
  25.     pUserId                         ALIAS FOR $3;
  26.     pRoleId                         ALIAS FOR $4;
  27.     pDatetime                       ALIAS FOR $5;
  28.     pOuId                           ALIAS FOR $6;
  29.     pProductId                      ALIAS FOR $7;
  30.     pWarehouseId                    ALIAS FOR $8;
  31.     pPeriodStart                    ALIAS FOR $9;
  32.     pPeriodEnd                      ALIAS FOR $10;
  33.     pPeriodStartMinusOneMonth       ALIAS FOR $11;
  34.    
  35.     vDocTypeId                      bigint = -99;
  36.     vAdminLedgerCodeInvQty          character varying := 'INV';
  37.     vStatusLedgerDone               character varying := '1';
  38.     vLastYearMonth                  character varying := '';
  39.     vEmptyValue                     character varying := '';
  40.     vBeginningQtyFromLastProcess    numeric := 0;
  41.     vRekapQtyForSaldoAwal           numeric := 0;
  42.     vRekapQtyTrxPeriod              numeric := 0;
  43.     vBeginningQty                   numeric := 0;
  44.     vEndQty                         numeric := 0;
  45.    
  46. BEGIN
  47.  
  48.     SELECT COALESCE(MAX(date_year_month), '') INTO vLastYearMonth
  49.     FROM m_admin_process_ledger
  50.     WHERE tenant_id = pTenantId AND
  51.           ou_id = pOuId AND
  52.           ledger_code = vAdminLedgerCodeInvQty AND
  53.           status_ledger = vStatusLedgerDone AND
  54.           date_year_month < pPeriodStart;
  55.    
  56.     SELECT COALESCE(SUM(A.qty), 0) INTO vBeginningQtyFromLastProcess
  57.     FROM in_summary_monthly_qty A
  58.     WHERE CASE WHEN pWarehouseId <> -99
  59.         THEN
  60.           A.tenant_id = pTenantId AND
  61.           A.doc_type_id = vDocTypeId AND
  62.           A.product_id = pProductId AND
  63.           A.warehouse_id = pWarehouseId AND
  64.           A.date_year_month = vLastYearMonth
  65.         ELSE
  66.           A.tenant_id = pTenantId AND
  67.           A.doc_type_id = vDocTypeId AND
  68.           A.product_id = pProductId AND
  69.           A.date_year_month = vLastYearMonth
  70.         END;
  71.            
  72.     IF (pPeriodStartMinusOneMonth = vLastYearMonth) THEN
  73.         vBeginningQty := vBeginningQtyFromLastProcess;
  74.     ELSE
  75.         SELECT COALESCE(SUM(A.qty), 0) AS qty INTO vRekapQtyForSaldoAwal
  76.         FROM in_log_product_balance_stock A
  77.         WHERE CASE WHEN pWarehouseId <> -99
  78.             THEN
  79.               A.tenant_id = pTenantId AND
  80.               A.product_id = pProductId AND
  81.               A.warehouse_id = pWarehouseId AND
  82.               SUBSTRING(A.doc_date, 1, 6) > vlastYearMonth AND
  83.               SUBSTRING(A.doc_date, 1, 6) <= pPeriodStartMinusOneMonth
  84.             ELSE
  85.               A.tenant_id = pTenantId AND
  86.               A.product_id = pProductId AND
  87.               SUBSTRING(A.doc_date, 1, 6) > vlastYearMonth AND
  88.               SUBSTRING(A.doc_date, 1, 6) <= pPeriodStartMinusOneMonth
  89.             END;
  90.         vBeginningQty := vBeginningQtyFromLastProcess + vRekapQtyForSaldoAwal;
  91.     END IF;
  92.    
  93.          
  94.     SELECT COALESCE(SUM(A.qty), 0) AS qty INTO vRekapQtyTrxPeriod
  95.     FROM in_log_product_balance_stock A
  96.     WHERE CASE WHEN pWarehouseId <> -99
  97.         THEN
  98.           A.tenant_id = pTenantId AND
  99.           A.product_id = pProductId AND
  100.           A.warehouse_id = pWarehouseId AND
  101.           SUBSTRING(A.doc_date, 1, 6) BETWEEN pPeriodStart AND pPeriodEnd
  102.         ELSE
  103.           A.tenant_id = pTenantId AND
  104.           A.product_id = pProductId AND
  105.           SUBSTRING(A.doc_date, 1, 6) BETWEEN pPeriodStart AND pPeriodEnd        
  106.         END;
  107.     vEndQty := vBeginningQty + vRekapQtyTrxPeriod;
  108.    
  109.          
  110.     Open pRefHeader FOR
  111.     SELECT f_get_ou_name(pOuId) AS ou_name,
  112.            f_get_username(pUserId) AS user_name, f_get_role_name(pRoleId) AS role_name,
  113.            pDatetime AS datetime,
  114.            CASE WHEN -99 <> -99 THEN f_get_warehouse_name(-99) ELSE 'All' END AS warehouse_name,
  115.            f_get_product_code(pProductId) AS product_code,
  116.            f_get_product_name(pProductId) AS product_name,
  117.            pPeriodStart AS period_start,
  118.            pPeriodEnd AS period_end;               
  119.     RETURN NEXT pRefHeader;
  120.    
  121.    
  122.     Open pRefDetail_detail FOR
  123.     EXECUTE '
  124.     WITH data AS (
  125.            SELECT f_get_doc_desc(A.doc_type_id) AS doc_type_desc, A.doc_no, A.doc_date,      COALESCE(COALESCE(B2.doc_no,B4.doc_no),$1) AS invoice_doc_no, COALESCE(COALESCE(B2.doc_date,B4.doc_date),$1) AS invoice_doc_date,      COALESCE(B.warehouse_to_id, A.warehouse_id) AS warehouse_id,      f_get_warehouse_code(COALESCE(B.warehouse_to_id, A.warehouse_id)) AS warehouse_code,       f_get_warehouse_name(COALESCE(B.warehouse_to_id, A.warehouse_id)) AS warehouse_name,       f_get_warehouse_code(COALESCE(B.warehouse_from_id, A.warehouse_id)) AS warehouse_from_code,       f_get_warehouse_name(COALESCE(B.warehouse_from_id, A.warehouse_id)) As warehouse_from_name,
  126.              A.partner_id, f_get_partner_code(A.partner_id) AS partner_code,       f_get_partner_name(A.partner_id) AS partner_name,
  127.              SUM(A.qty) AS qty, A.base_uom_id,      f_get_uom_code(A.base_uom_id) AS base_uom_code,       f_get_uom_name(A.base_uom_id) AS base_uom_name,       A.update_datetime, COALESCE(C.remark, $1) AS remark
  128.            FROM in_log_product_balance_stock A
  129.            LEFT JOIN in_inventory B ON A.ref_id = B.inventory_id AND A.doc_type_id = B.doc_type_id
  130.            LEFT JOIN pu_po B1 ON B.ref_id = B1.po_id AND B.ref_doc_type_id = B1.doc_type_id
  131.            LEFT JOIN pu_invoice B2 ON B1.po_id = B2.ref_id AND B1.doc_type_id = B2.ref_doc_type_id
  132.            LEFT JOIN sl_so B3 ON B.ref_id = B3.so_id AND B.ref_doc_type_id = B3.doc_type_id
  133.            LEFT JOIN sl_invoice B4 ON B3.so_id = B4.ref_id AND B3.doc_type_id = B4.ref_doc_type_id
  134.            LEFT JOIN in_inventory_item C ON B.inventory_id = C.inventory_id AND A.product_balance_id = C.product_balance_id
  135.            WHERE CASE WHEN $5 <> -99
  136.              THEN
  137.             A.tenant_id = $2
  138.             AND A.ou_id = $3
  139.             AND A.product_id = $4
  140.             AND A.warehouse_id = $5  
  141.             AND SUBSTRING(A.doc_date, 1, 6) BETWEEN $6 AND $7
  142.               ELSE
  143.             A.tenant_id = $2
  144.             AND A.ou_id = $3
  145.             AND A.product_id = $4
  146.             AND SUBSTRING(A.doc_date, 1, 6) BETWEEN $6 AND $7
  147.               END
  148.            GROUP BY A.doc_type_id, A.doc_no, A.doc_date, B2.doc_no, B2.doc_date, B4.doc_no, B4.doc_date, A.warehouse_id, B.warehouse_from_id, B.warehouse_to_id, A.partner_id, A.base_uom_id, A.update_datetime, C.remark
  149.     ) SELECT A.*, $8 - A.qty + SUM (A.qty) OVER (ORDER BY A.doc_date, A.update_datetime asc rows between unbounded preceding and current row) AS running_qty_begin,
  150.     $8 + SUM (A.qty) OVER (ORDER BY A.doc_date, A.update_datetime asc rows between unbounded preceding and current row) AS running_qty_end
  151.     FROM data A
  152.     ORDER BY A.doc_date, A.update_datetime  '
  153.     USING vEmptyValue, pTenantId, pOuId, pProductId, pWarehouseId, pPeriodStart, pPeriodEnd, vBeginningQty;
  154.     RETURN NEXT pRefDetail_detail ;
  155.    
  156.     Open pRefDetail_summary FOR
  157.     EXECUTE
  158.     ' SELECT a.base_uom_id, f_get_uom_code(a.base_uom_id) AS base_uom_code, f_get_uom_name(a.base_uom_id) AS base_uom_name,  '
  159.     || vBeginningQty || ' AS beginning_qty, '
  160.     || vRekapQtyTrxPeriod || ' AS rekap_qty, '
  161.     || vEndQty ||' AS end_qty
  162.     FROM m_product A
  163.     WHERE A.product_id = $1 '
  164.     USING pProductId;
  165.     RETURN NEXT pRefDetail_summary ;
  166.    
  167. END;
  168. $BODY$
  169.   LANGUAGE plpgsql VOLATILE
  170.   COST 100
  171.   ROWS 1000;
  172. ALTER FUNCTION public.r_inv_inquiry_stock_log_stock_card_with_invoice(character varying, bigint, bigint, bigint, character varying, bigint, bigint, bigint, character varying, character varying, character varying)
  173.   OWNER TO sts;
  174.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement