Advertisement
Guest User

Untitled

a guest
May 26th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.44 KB | None | 0 0
  1. /*
  2.  * pos receipt note
  3.  * filter mandatory : session_id, tenant_id, pos_id
  4.  */
  5. CREATE OR REPLACE FUNCTION r_pos_receipt_note(CHARACTER VARYING, BIGINT, BIGINT)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader              REFCURSOR := 'refHeader';
  10.     pRefDetail              REFCURSOR := 'refDetail';
  11.     pSessionId              ALIAS FOR $1;
  12.     pTenantId               ALIAS FOR $2;
  13.     pPosId                  ALIAS FOR $3;
  14.    
  15.     vEmptyValue             CHARACTER VARYING(1);
  16.     vEmptyId                BIGINT;
  17.     vAllId                  BIGINT;
  18.    
  19. BEGIN
  20.    
  21.     vEmptyValue := ' ';
  22.     vEmptyId := -99;
  23.     vAllId := -99;
  24.    
  25.     DELETE FROM tr_receipt_note_item WHERE session_id = pSessionId;
  26.    
  27.     -- insert semua detail pos item yg dibeli
  28.     INSERT INTO tr_receipt_note_item(
  29.         session_id, tenant_id, pos_item_id, sort_no, group_product_ou_id, group_product_ou_code, group_product_ou_name,
  30.         product_id, product_code, product_name,
  31.         qty, gross_sell_price, discount_amount, nett_amount_item
  32.     )
  33.     SELECT pSessionId, pTenantId, A.pos_item_id, 1, A.group_product_ou_id, C.group_product_ou_code, C.group_product_ou_name,
  34.            A.product_id, B.product_code, B.product_name,
  35.            A.qty, A.gross_sell_price, A.discount_amount, A.nett_amount_item
  36.     FROM p_pos_item A  
  37.     INNER JOIN m_product B ON A.tenant_id = B.tenant_id AND A.product_id = B.product_id
  38.     INNER JOIN m_group_product_ou C ON A.tenant_id = C.tenant_id AND A.group_product_ou_id = C.group_product_ou_id
  39.     WHERE A.tenant_id = pTenantId AND
  40.           A.pos_id = pPosId;
  41.          
  42.     -- insert detail pos item khusus assembly
  43.     INSERT INTO tr_receipt_note_item(
  44.         session_id, tenant_id, pos_item_id, sort_no, group_product_ou_id, group_product_ou_code, group_product_ou_name,
  45.         product_id, product_code, product_name,
  46.         qty, gross_sell_price, discount_amount, nett_amount_item
  47.     )
  48.     SELECT pSessionId, pTenantId, A.pos_item_id, 2, C.group_product_ou_id, D.group_product_ou_code, D.group_product_ou_name,
  49.            A.product_id, B.product_code, B.product_name,
  50.            SUM(A.qty), 0, 0, 0 
  51.     FROM p_pos_assembly_product A
  52.     INNER JOIN m_product B ON A.tenant_id = B.tenant_id AND A.product_id = B.product_id
  53.     INNER JOIN p_pos_item C ON A.tenant_id = C.tenant_id AND A.pos_item_id = C.pos_item_id
  54.     INNER JOIN m_group_product_ou D ON C.tenant_id = D.tenant_id AND C.group_product_ou_id = D.group_product_ou_id
  55.     WHERE A.tenant_id = pTenantId AND
  56.           C.pos_id = pPosId
  57.     GROUP BY A.pos_item_id, A.product_id, B.product_code, B.product_name, C.group_product_ou_id, D.group_product_ou_code, D.group_product_ou_name;
  58.    
  59.     OPEN pRefHeader FOR
  60.     SELECT A.doc_no AS doc_no, A.doc_date AS doc_date, B.partner_name AS salesman_name, A.create_username AS full_name
  61.     FROM p_pos A
  62.     INNER JOIN m_partner B ON A.tenant_id = B.tenant_id AND A.salesman_id = B.partner_id
  63.     WHERE A.tenant_id = pTenantId
  64.     AND A.pos_id = pPosId;
  65.    
  66.     RETURN NEXT pRefHeader;
  67.  
  68.     OPEN pRefDetail FOR
  69.     SELECT A.pos_item_id AS id, A.group_product_ou_name AS dept_code, A.product_code AS product_code, A.product_name AS product_name, A.qty AS qty, A.gross_sell_price AS gross_sell_price, A.discount_amount AS discount_amount, A.nett_amount_item AS sub_total
  70.     FROM tr_receipt_note_item A    
  71.     WHERE A.session_id = pSessionId AND
  72.           A.tenant_id = pTenantId
  73.     ORDER BY A.group_product_ou_code, A.pos_item_id, A.sort_no, A.product_code, A.product_name, A.qty, A.gross_sell_price, A.discount_amount, A.nett_amount_item;
  74.    
  75.     RETURN NEXT pRefDetail;
  76.    
  77.     DELETE FROM tr_receipt_note_item WHERE session_id = pSessionId;
  78.  
  79. END;
  80. $BODY$
  81.   LANGUAGE plpgsql VOLATILE
  82.   COST 100
  83.   ROWS 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement