Advertisement
aadddrr

r_pos_receipt_note_spooring

Aug 29th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * pos receipt note spooring
  3.  * filter mandatory : session_id, tenant_id, ou_id, pos_id, total_payment, cash
  4.  */
  5. CREATE OR REPLACE FUNCTION r_pos_receipt_note_spooring(character varying, bigint, bigint, bigint, double precision, character varying(1))
  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.     pOuId                   ALIAS FOR $3;
  14.     pPosId                  ALIAS FOR $4;
  15.     pTotalPayment           ALIAS FOR $5;
  16.     pCash                   ALIAS FOR $6;
  17.    
  18.     vEmptyValue             character varying(1);
  19.     vEmptyId                bigint;
  20.     vAllId                  bigint;
  21.     vTotalAmount            numeric;
  22.     vRefund                 numeric;
  23.     vTotalItem              numeric;
  24.     vOutletName             character varying;
  25.    
  26. BEGIN
  27.    
  28.     vEmptyValue := ' ';
  29.     vEmptyId := -99;
  30.     vAllId := -99;
  31.     vTotalAmount := 0;
  32.     vRefund := 0;
  33.     vTotalItem := 0;
  34.     vOutletName := ' ';
  35.    
  36.     DELETE FROM tr_receipt_note_item WHERE session_id = pSessionId;
  37.    
  38.     -- get outllet name
  39.     SELECT f_get_ou_name(pOuId) INTO vOutletName;
  40.    
  41.     -- insert semua detail pos item yg dibeli
  42.     INSERT INTO tr_receipt_note_item(
  43.         session_id, tenant_id, pos_item_id, sort_no, group_product_ou_id, group_product_ou_code, group_product_ou_name,
  44.         product_id, product_code, product_name,
  45.         qty, gross_sell_price, discount_amount, nett_amount_item
  46.     )
  47.     SELECT pSessionId, pTenantId, A.pos_item_id, 1, A.group_product_ou_id, C.group_product_ou_code, C.group_product_ou_name,
  48.            A.product_id, B.product_code, B.product_name,
  49.            A.qty, A.gross_sell_price, A.discount_amount, A.nett_amount_item
  50.     FROM p_pos_item A  
  51.     INNER JOIN m_product B ON A.tenant_id = B.tenant_id AND A.product_id = B.product_id
  52.     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
  53.     WHERE A.tenant_id = pTenantId AND
  54.           A.pos_id = pPosId;
  55.          
  56.     -- insert detail pos item khusus assembly
  57.     INSERT INTO tr_receipt_note_item(
  58.         session_id, tenant_id, pos_item_id, sort_no, group_product_ou_id, group_product_ou_code, group_product_ou_name,
  59.         product_id, product_code, product_name,
  60.         qty, gross_sell_price, discount_amount, nett_amount_item
  61.     )
  62.     SELECT pSessionId, pTenantId, A.pos_item_id, 2, C.group_product_ou_id, D.group_product_ou_code, D.group_product_ou_name,
  63.            A.product_id, B.product_code, B.product_name,
  64.            SUM(A.qty), 0, 0, 0 
  65.     FROM p_pos_assembly_product A
  66.     INNER JOIN m_product B ON A.tenant_id = B.tenant_id AND A.product_id = B.product_id
  67.     INNER JOIN p_pos_item C ON A.tenant_id = C.tenant_id AND A.pos_item_id = C.pos_item_id
  68.     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
  69.     WHERE A.tenant_id = pTenantId AND
  70.           C.pos_id = pPosId
  71.     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;
  72.    
  73.     -- insert semua detail pos item nempil yg dibeli
  74.     INSERT INTO tr_receipt_note_item(
  75.         session_id, tenant_id, pos_item_id, sort_no, group_product_ou_id, group_product_ou_code, group_product_ou_name,
  76.         product_id, product_code, product_name,
  77.         qty, gross_sell_price, discount_amount, nett_amount_item
  78.     )
  79.     SELECT pSessionId, pTenantId, A.pos_item_nempil_barang_id, 3, vEmptyId, vEmptyValue, vEmptyValue,
  80.            B.nempil_barang_balance_stock_id, A.product_code, B.product_name,
  81.            A.qty, A.gross_sell_price, 0, A.sell_price
  82.     FROM p_pos_item_nempil_barang A    
  83.     INNER JOIN p_nempil_barang_balance_stock B ON A.tenant_id = B.tenant_id AND A.product_code = B.product_code
  84.     WHERE A.tenant_id = pTenantId AND
  85.           A.pos_id = pPosId;
  86.    
  87.     -- sum total amount
  88.     SELECT SUM(A.nett_amount_item) INTO vTotalAmount
  89.     FROM tr_receipt_note_item A WHERE A.session_id = pSessionId;
  90.    
  91.     -- calculate refund
  92.     vRefund := pTotalPayment - vTotalAmount;
  93.     IF vRefund < 0 THEN
  94.         vRefund := 0;
  95.     END IF;
  96.    
  97.     -- sum total quantity
  98.     SELECT SUM(A.qty) INTO vTotalItem
  99.     FROM tr_receipt_note_item A WHERE A.session_id = pSessionId;
  100.    
  101.     Open pRefHeader FOR
  102.     SELECT A.doc_no AS doc_no, B.partner_name AS salesman_name, A.create_username AS full_name,
  103.            C.partner_name AS partner_name, D.license_number || ' ' || D.owner_name AS license_number,
  104.            C.due_date AS due_date, C.customer_name AS customer_name, CAST(vTotalAmount AS character varying) AS total_amount,
  105.            CAST(vTotalItem AS character varying) AS total_item, CAST(pTotalPayment AS character varying) AS total_payment,
  106.            CAST(vRefund AS character varying) AS refund, pCash AS cash, vOutletName AS outlet_name,
  107.            CAST(COALESCE(E.under_payment_amount, 0) AS character varying) AS under_payment_amount,
  108.            TO_CHAR(TO_DATE(C.due_date, 'YYYYMMDD'), 'DD-Mon-YYYY') AS due_date_lt, CAST(C.vehicle_km AS character varying) AS vehicle_km
  109.     FROM p_pos A
  110.     INNER JOIN m_partner B ON A.tenant_id = B.tenant_id AND A.salesman_id = B.partner_id
  111.     INNER JOIN p_pos_ext C ON A.pos_id = C.pos_id
  112.     INNER JOIN m_vehicle_customer_own D ON C.vehicle_code = D.vehicle_code
  113.     LEFT OUTER JOIN p_pos_termin_payment E ON A.pos_id = E.pos_id
  114.     WHERE A.tenant_id = pTenantId
  115.     AND A.pos_id = pPosId;
  116.    
  117.     RETURN NEXT pRefHeader;
  118.  
  119.     Open pRefDetail FOR
  120.     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, CAST(A.qty AS character varying) AS qty,
  121.     A.nett_amount_item/A.qty AS gross_sell_price,
  122.     CASE WHEN A.discount_amount < 0 THEN '0' ELSE CAST(A.discount_amount AS character varying) END AS discount_amount, 
  123.     CAST(A.nett_amount_item AS character varying) AS sub_total
  124.     FROM tr_receipt_note_item A    
  125.     WHERE A.session_id = pSessionId AND
  126.           A.tenant_id = pTenantId
  127.     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;
  128.    
  129.     RETURN NEXT pRefDetail;
  130.    
  131.     DELETE FROM tr_receipt_note_item WHERE session_id = pSessionId;
  132.  
  133. END;
  134. $BODY$
  135.   LANGUAGE plpgsql VOLATILE
  136.   COST 100
  137.   ROWS 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement