Advertisement
aadddrr

rr_inv_inquiry_stock_detail_with_serial_number_log_stock_car

May 18th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Modified by Adrian, May 19, 2017
  3.  * Menambahkan remark pada refDetail
  4.  */
  5.  
  6. CREATE OR REPLACE FUNCTION r_inv_inquiry_stock_detail_with_serial_number_log_stock_card(character varying, bigint, bigint, bigint, bigint, character varying, bigint, bigint, character varying, character varying, character varying, character varying)
  7.   RETURNS SETOF refcursor AS
  8. $BODY$
  9.  DECLARE
  10.     pRefHeader                  REFCURSOR := 'refHeader';
  11.     pRefDetail                  REFCURSOR := 'refDetail';
  12.     pRefSummary                 REFCURSOR := 'refSummary';
  13.     pSessionId                  ALIAS FOR $1;
  14.     pTenantId                   ALIAS FOR $2;
  15.     pUserId                     ALIAS FOR $3;
  16.     pRoleId                     ALIAS FOR $4;
  17.     pOuId                       ALIAS FOR $5;
  18.     pDatetime                   ALIAS FOR $6;
  19.     pWarehouseId                ALIAS FOR $7;
  20.     pProductId                  ALIAS FOR $8;
  21.     pPeriodStart                ALIAS FOR $9;
  22.     pPeriodEnd                  ALIAS FOR $10;
  23.     pSerialNumber               ALIAS FOR $11;
  24.     pPeriodStartMinusOneMonth   ALIAS FOR $12;
  25.    
  26.  
  27.     vWarehouseEmpty              bigint      = -99;
  28.     vBeginningQtyFromLastProcess numeric    := 0;
  29.     vBeginningQty                numeric    := 0;
  30.     vRekapQtyTrxPeriod           numeric    := 0;
  31.     vEndQty                      numeric    := 0;
  32.     vRekapQtyForSaldoAwal        numeric    := 0;
  33.     vLastYearMonth                  text    := '';
  34.     vFilterWarehouseId              text    := '';
  35.     vSerialNumber                   text    := '';
  36.     vFilterSerialNumber             text    := '';
  37.     vEmpty                          text    := '';
  38.     vForSerialNumber                text;
  39.    
  40. BEGIN
  41.    
  42.     IF(pSerialNumber <> vEmpty) THEN
  43.         vSerialNumber := 'AND UPPER(C.serial_number) LIKE UPPER(''%' || pSerialNumber || '%'' )';
  44.     END IF;
  45.    
  46.     IF(pSerialNumber <> vEmpty) THEN
  47.  
  48.             SELECT COALESCE(SUM(A.qty), 0) AS qty INTO vRekapQtyForSaldoAwal
  49.             FROM in_log_product_balance_stock AS A
  50.             INNER JOIN in_product_balance B ON A.product_balance_id = B.product_balance_id
  51.             WHERE A.tenant_id = pTenantId
  52.                 AND A.ou_id = pOuId
  53.                 AND A.product_id = pProductId
  54.                 AND A.warehouse_id = pWarehouseId
  55.                 AND UPPER(B.serial_number) LIKE UPPER('%' || pSerialNumber || '%' )
  56.                 AND SUBSTRING(A.doc_date, 1, 6) > vLastYearMonth
  57.                 AND SUBSTRING(A.doc_date, 1, 6) <= pPeriodStartMinusOneMonth;
  58.        
  59.     ELSE
  60.  
  61.             SELECT COALESCE(SUM(A.qty), 0) AS qty INTO vRekapQtyForSaldoAwal
  62.             FROM in_log_product_balance_stock AS A
  63.             INNER JOIN in_product_balance B ON A.product_balance_id = B.product_balance_id
  64.             WHERE A.tenant_id = pTenantId
  65.                 AND A.ou_id = pOuId
  66.                 AND A.product_id = pProductId
  67.                 AND A.warehouse_id = pWarehouseId
  68.                 AND SUBSTRING(A.doc_date, 1, 6) > vLastYearMonth
  69.                 AND SUBSTRING(A.doc_date, 1, 6) <= pPeriodStartMinusOneMonth;
  70.  
  71.     END IF;
  72.    
  73.     IF (pWarehouseId <> vWarehouseEmpty) THEN
  74.         vFilterWarehouseId := ' AND A.warehouse_id =  ' || pWarehouseId;
  75.     END IF;
  76.  
  77.     SELECT COALESCE(MAX(date_year_month), '') INTO vLastYearMonth
  78.     FROM m_admin_process_ledger
  79.     WHERE tenant_id = pTenantId
  80.         AND ou_id = pOuId
  81.         AND ledger_code = 'INV'
  82.         AND status_ledger = '1'
  83.         AND date_year_month < pPeriodStart;
  84.    
  85.         SELECT COALESCE(SUM(A.qty), 0) INTO vBeginningQtyFromLastProcess
  86.         FROM in_summary_monthly_qty AS A
  87.         WHERE A.tenant_id = pTenantId
  88.         AND A.sub_ou_id = pOuId
  89.         AND A.doc_type_id = -99
  90.         AND A.product_id = pProductId
  91.         AND A.warehouse_id = pWarehouseId
  92.         AND A.date_year_month = vLastYearMonth;
  93.    
  94.     IF(pPeriodStartMinusOneMonth = vLastYearMonth) THEN
  95.  
  96.         vBeginningQty := vBeginningQtyFromLastProcess;
  97.    
  98.     ELSE
  99.         vBeginningQty := vBeginningQtyFromLastProcess + vRekapQtyForSaldoAwal;
  100.    
  101.     END IF;
  102.    
  103.     SELECT COALESCE(SUM(A.qty), 0) AS qty INTO vRekapQtyTrxPeriod
  104.     FROM in_log_product_balance_stock A
  105.     INNER JOIN in_product_balance B ON A.product_balance_id = B.product_balance_id
  106.     WHERE A.tenant_id = pTenantId
  107.         AND A.ou_id = pOuId
  108.         AND A.product_id = pProductId
  109.         AND A.warehouse_id = pWarehouseId
  110.         AND UPPER(B.serial_number) LIKE UPPER('%' || pSerialNumber || '%' )
  111.         AND SUBSTRING(A.doc_date, 1, 6) BETWEEN pPeriodStart AND pPeriodEnd;
  112.    
  113.     vEndQty := vBeginningQty + vRekapQtyTrxPeriod;
  114.  
  115.     Open pRefHeader FOR
  116.    
  117.     SELECT f_get_ou_name(pOuId)AS ou_name,
  118.             f_get_warehouse_name(pWarehouseId) AS warehouse_name,f_get_product_name(pProductId) AS product_name,
  119.             CASE WHEN pSerialNumber = vEmpty THEN '(All)' ELSE pSerialNumber END AS serial_number,
  120.             f_get_username(pUserId) AS user_name, f_get_role_name(pRoleId) AS role_name,(pDatetime) AS datetime,
  121.             (pPeriodStart) AS period_start,(pPeriodEnd) AS period_end;
  122.     RETURN NEXT pRefHeader;
  123.        
  124.     Open pRefDetail FOR
  125.     EXECUTE '
  126.    
  127.     SELECT  f_get_doc_desc(A.doc_type_id) AS doc_type_desc, A.doc_no, A.doc_date, COALESCE(B.warehouse_to_id, A.warehouse_id) AS warehouse_id,
  128.             f_get_warehouse_code(COALESCE(B.warehouse_to_id, A.warehouse_id)) AS warehouse_code,
  129.             f_get_warehouse_name(COALESCE(B.warehouse_to_id, A.warehouse_id)) As warehouse_name,A.partner_id,
  130.             f_get_partner_code(A.partner_id) AS partner_code, f_get_partner_name(A.partner_id) AS partner_name,SUM(A.qty) AS qty, A.base_uom_id,
  131.             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, C.serial_number,
  132.             C.product_year_made, C.product_expired_date, COALESCE(D.remark, $7) AS remark
  133.            
  134.     FROM in_log_product_balance_stock AS A
  135.             LEFT OUTER JOIN in_inventory AS B ON A.ref_id = B.inventory_id AND A.doc_type_id = B.doc_type_id
  136.             LEFT OUTER JOIN in_inventory_item AS D ON D.inventory_id = B.inventory_id AND D.product_balance_id = A.product_balance_id
  137.             INNER JOIN in_product_balance AS C ON A.product_balance_id = C.product_balance_id
  138.    
  139.     WHERE A.tenant_id = $1 AND A.ou_id = $2 AND A.product_id = $3 AND A.warehouse_id = $4
  140.     AND SUBSTRING(A.doc_date, 1, 6) BETWEEN $5 AND $6 '|| vSerialNumber ||'
  141.     GROUP BY A.doc_type_id, A.doc_no, A.doc_date, A.warehouse_id, A.partner_id, A.base_uom_id, B.warehouse_to_id, A.update_datetime, C.serial_number, C.product_year_made, C.product_expired_date, D.remark
  142.     ORDER BY A.doc_date, A.update_datetime '
  143.     USING pTenantId, pOuId,pProductId,pWarehouseId,pPeriodStart,pPeriodEnd, vEmpty;
  144.     RETURN NEXT pRefDetail ;
  145.    
  146.     Open pRefSummary FOR
  147.     EXECUTE
  148.     ' 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, '
  149.         || vBeginningQty || ' AS beginning_qty, '
  150.         || vRekapQtyTrxPeriod || ' AS rekap_qty, '
  151.         || vEndQty ||' AS end_qty
  152.         FROM m_product A
  153.         WHERE A.product_id = $1'
  154.     USING pProductId;
  155.     RETURN NEXT pRefSummary;
  156.    
  157. END;
  158. $BODY$
  159.   LANGUAGE plpgsql VOLATILE
  160.   COST 100
  161.   ROWS 1000;
  162. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement