Advertisement
aadddrr

r_aging_goods_borrowing

Jul 25th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DROP FUNCTION IF EXISTS r_aging_goods_borrowing(character varying,bigint,bigint,character varying,bigint,character varying,character varying,character varying,bigint,character varying);
  2.  
  3. /*Modified by Adrian, Jul 26, 2017,
  4. Mengubah tanggal mulai dan perhitungan qty aging
  5. Menghilangkan inventory_borrow_id pada tipe Summary*/  
  6.  
  7. CREATE OR REPLACE FUNCTION r_aging_goods_borrowing(character varying,bigint,bigint,character varying,bigint,character varying,character varying,character varying,bigint,character varying)
  8.   RETURNS SETOF refcursor AS
  9. $BODY$
  10. DECLARE
  11.     pRefHeader                  REFCURSOR := 'refHeader';
  12.     pRefDetail                  REFCURSOR := 'refDetail';
  13.     pSessionId                  ALIAS FOR $1;
  14.     pTenantId                   ALIAS FOR $2;
  15.     pUserId                     ALIAS FOR $3;
  16.     pDatetime                   ALIAS FOR $4;
  17.     pOuId                       ALIAS FOR $5;
  18.     pProductCodeName            ALIAS FOR $6;
  19.     pStartDate                  ALIAS FOR $7;
  20.     pEndDate                    ALIAS FOR $8;
  21.     pPartnerId                  ALIAS FOR $9;
  22.     pIsType                     ALIAS FOR $10;
  23.    
  24.     vSummary                    CHARACTER VARYING := 'summary';
  25.     vDay                        CHARACTER VARYING := 'day';
  26.     vFormatDate                 CHARACTER VARYING := 'YYYYMMDD';
  27.     vInProgress                 CHARACTER VARYING := 'I';
  28.     vReleased                   CHARACTER VARYING := 'R';
  29.     vPartnerId                  CHARACTER VARYING := '';
  30.     vProductCodeName            CHARACTER VARYING := '';
  31.     vNullLongValue              BIGINT := -99;
  32.     vDocTypeId                  BIGINT := 551;
  33.     vEmptyValue                 CHARACTER VARYING := '';
  34.     vCurrentDate                CHARACTER VARYING := to_char(current_date, vFormatDate);
  35.    
  36. BEGIN
  37.    
  38.     IF pPartnerId <> vNullLongValue THEN
  39.         vPartnerId := ' AND B.partner_id = ' || pPartnerId;
  40.     END IF;
  41.    
  42.     IF pProductCodeName <> vEmptyValue THEN
  43.         vProductCodeName := ' AND ( UPPER(f_get_product_code(C.product_id)) LIKE UPPER(''%'||pProductCodeName||'%'')  OR UPPER(f_get_product_name(C.product_id)) LIKE UPPER(''%'||pProductCodeName||'%'') ) ';
  44.    
  45.     END IF;
  46.    
  47.     OPEN pRefHeader FOR
  48.         SELECT f_get_ou_name(pOuId) AS ou_name,f_get_username(pUserId) AS username,CASE WHEN pPartnerId <> vNullLongValue THEN f_get_partner_name(pPartnerId) ELSE 'All' END AS partner_name,
  49.                 pStartDate AS start_date,pEndDate AS end_date;
  50.     RETURN NEXT pRefHeader;
  51.    
  52.     IF pIsType = vSummary THEN
  53.    
  54.         OPEN pRefDetail FOR
  55.             EXECUTE '
  56.                 SELECT f_get_product_code(C.product_id) AS product_code,f_get_product_name(C.product_id) AS product_name,SUM(D.qty_do) AS qty,
  57.                     f_get_partner_name(B.partner_id) AS partner_name,
  58.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) BETWEEN 0 AND 7 THEN SUM(D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp1,
  59.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) BETWEEN 8 AND 14 THEN SUM(D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp2,
  60.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) BETWEEN 15 AND 21 THEN SUM(D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp3,
  61.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) > 21 THEN SUM(D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp4
  62.                 FROM in_inventory_borrow A
  63.                 INNER JOIN in_inventory B ON A.inventory_id = B.inventory_id
  64.                 INNER JOIN in_inventory_item C ON A.inventory_id = C.inventory_id
  65.                 INNER JOIN in_inventory_borrow_balance_item D ON A.inventory_id = D.inventory_id AND C.inventory_item_id  = D.inventory_item_id
  66.                 WHERE B.tenant_id = $1
  67.                 AND B.ou_from_id = $2
  68.                 AND B.doc_date BETWEEN $3 AND $4
  69.                 AND D.status_item IN ($7,$8)
  70.                 AND B.doc_type_id = $9' || vPartnerId || vProductCodeName ||'
  71.                 GROUP BY C.product_id,D.due_date,B.partner_id,D.base_uom_id
  72.                 '
  73.             USING pTenantId,pOuId,pStartDate,pEndDate,vDay,vFormatDate,vInProgress,vReleased,vDocTypeId,vCurrentDate;
  74.         RETURN NEXT pRefDetail;
  75.  
  76.     ELSE
  77.    
  78.         OPEN pRefDetail FOR
  79.             EXECUTE '
  80.                 SELECT B.doc_no,B.doc_date,B.remark,f_get_product_code(C.product_id) AS product_code,f_get_product_name(C.product_id) AS product_name,D.qty_do AS qty,D.due_date,
  81.                         f_get_partner_name(B.partner_id) AS partner_name,
  82.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) BETWEEN 0 AND 7 THEN (D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp1,
  83.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) BETWEEN 8 AND 14 THEN (D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp2,
  84.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) BETWEEN 15 AND 21 THEN (D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp3,
  85.                     CASE WHEN DATE_PART($5, to_timestamp($10, $6) - to_timestamp(D.due_date, $6)) > 21 THEN (D.qty_do - D.qty_return - D.qty_sales) ELSE 0 END AS temp4
  86.                 FROM in_inventory_borrow A
  87.                 INNER JOIN in_inventory B ON A.inventory_id = B.inventory_id
  88.                 INNER JOIN in_inventory_item C ON A.inventory_id = C.inventory_id
  89.                 INNER JOIN in_inventory_borrow_balance_item D ON A.inventory_id = D.inventory_id AND C.inventory_item_id  = D.inventory_item_id
  90.                 WHERE B.tenant_id = $1
  91.                 AND B.ou_from_id = $2
  92.                 AND B.doc_date BETWEEN $3 AND $4
  93.                 AND D.status_item IN ($7,$8)
  94.                 AND B.doc_type_id = $9' || vPartnerId || vProductCodeName ||'
  95.                 '
  96.             USING pTenantId,pOuId,pStartDate,pEndDate,vDay,vFormatDate,vInProgress,vReleased,vDocTypeId,vCurrentDate;
  97.         RETURN NEXT pRefDetail;
  98.        
  99.     END IF;
  100.    
  101. END;
  102. $BODY$
  103.   LANGUAGE plpgsql VOLATILE
  104.   COST 100
  105.   ROWS 1000;
  106. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement