Advertisement
samuel025

Function Penmabahan Saldo Stock & Master Harga Jual

Nov 3rd, 2021
1,050
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Samuel, Nov 2, 2021
  3.  */
  4.  
  5. CREATE OR REPLACE FUNCTION f_get_balance_stock_and_sell_price_of_list_m_product_rm(bigint, bigint, numeric, numeric, varchar,
  6. varchar, varchar)
  7.   RETURNS void AS
  8. $BODY$
  9. DECLARE
  10.     pTenantId           ALIAS FOR $1;
  11.     pUserId             ALIAS FOR $2;
  12.     pQtyStokAwal        ALIAS FOR $3;
  13.     pGrossSellPrice     ALIAS FOR $4;
  14.     pFlgIncludeTax      ALIAS FOR $5;
  15.     pFlgPpn             ALIAS FOR $6;
  16.     pStartYearMonth     ALIAS FOR $7;
  17.  
  18.     vYes                character varying(1);
  19.     vNo                 character varying(1);
  20.     vSpace              character varying;
  21.     vProductStatus      character varying;
  22.     vPriceLevel         character varying;
  23.  
  24.  
  25. BEGIN
  26.  
  27.     vYes := 'Y';
  28.     vNo := 'N';
  29.     vSpace := ' ';
  30.     vProductStatus := 'GOOD';
  31.     vPriceLevel := 'END USER';
  32.  
  33.     --> Keperluan Penambahan Saldo Stock Barang
  34.     INSERT INTO in_product_balance
  35.     (tenant_id, product_id, serial_number, lot_number, product_expired_date, product_year_made,
  36.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  37.     SELECT A.tenant_id, A.product_id, vSpace, vSpace, vSpace, vSpace, 0, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1
  38.     FROM m_product A
  39.     WHERE NOT EXISTS (SELECT 1 FROM in_product_balance B
  40.                 WHERE A.product_id = B.product_id
  41.                 AND A.tenant_id = B.tenant_id
  42.                 AND B.serial_number = vSpace
  43.                 AND B.lot_number = vSpace
  44.     );
  45.  
  46.     INSERT INTO in_product_balance_stock
  47.     (tenant_id, warehouse_id, product_id, product_balance_id, product_status, base_uom_id, qty, version,
  48.     create_datetime, create_user_id, update_datetime, update_user_id)
  49.     SELECT A.tenant_id, D.warehouse_id, A.product_id, B.product_balance_id, vProductStatus, A.base_uom_id, pQtyStokAwal, 0,
  50.     to_char(NOW(), 'YYYYMMDDHH24MIss'), -1, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1
  51.     FROM m_product A
  52.     INNER JOIN in_product_balance B ON A.product_id = B.product_id
  53.     INNER JOIN i_outlet D ON A.tenant_id = D.tenant_id
  54.     WHERE NOT EXISTS (SELECT 1 FROM in_product_balance_stock C
  55.                 WHERE A.tenant_id = C.tenant_id
  56.                 AND C.warehouse_id = D.warehouse_id
  57.                 AND A.product_id = C.product_id
  58.                 AND B.product_balance_id = C.product_balance_id
  59.                 AND C.product_status = vProductStatus
  60.     );
  61.  
  62.     INSERT INTO in_summary_monthly_qty
  63.     (date_year_month, tenant_id, ou_id, sub_ou_id, doc_type_id, warehouse_id, product_id, product_balance_id, product_status,
  64.     base_uom_id, qty, version, create_datetime, create_user_id, update_datetime, update_user_id)
  65.     SELECT pStartYearMonth, A.tenant_id, D.ou_id, D.ou_id, -99, D.warehouse_id, A.product_id, B.product_balance_id, vProductStatus,
  66.     A.base_uom_id, pQtyStokAwal, 0, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1
  67.     FROM m_product A
  68.     INNER JOIN in_product_balance B ON A.product_id = B.product_id
  69.     INNER JOIN i_outlet D ON A.tenant_id = D.tenant_id
  70.     WHERE NOT EXISTS (SELECT 1 FROM in_summary_monthly_qty C
  71.                 WHERE A.tenant_id = C.tenant_id
  72.                 AND C.date_year_month = pStartYearMonth
  73.                 AND D.ou_id = C.ou_id
  74.                 AND D.ou_id = C.sub_ou_id
  75.                 AND C.doc_type_id = -99
  76.                 AND D.warehouse_id = C.warehouse_id
  77.                 AND A.product_id = C.product_id
  78.                 AND B.product_balance_id = C.product_balance_id
  79.                 AND C.product_status = vProductStatus
  80.     );
  81.  
  82.     --> Keperluan Penambahan Data Master Harga Jual Barang
  83.     --> Kondisi Harga Jual Sudah termasuk PPn
  84.     IF (pFlgIncludeTax = vYes AND pFlgPpn = vYes) THEN
  85.  
  86.         INSERT INTO m_sell_price_product_for_so
  87.         (tenant_id, ou_id, product_id, date_from, date_to, curr_code, gross_sell_price, flg_tax_amount, tax_id,
  88.         tax_amount,
  89.         sell_price,
  90.         min_sell_price, price_level, create_datetime, create_user_id, update_datetime, update_user_id,
  91.         version, active, active_datetime, non_active_datetime)
  92.         SELECT A.tenant_id, B.ou_id, A.product_id, CONCAT(pStartYearMonth,'01'), '30001231', 'IDR', pGrossSellPrice, vYes, D.tax_id,
  93.         CAST(pGrossSellPrice AS numeric) - CEIL(CAST(pGrossSellPrice AS numeric) * 100 / (100 + D.percentage)),
  94.         CEIL(CAST(pGrossSellPrice AS numeric) * 100 / (100 + D.percentage)),
  95.         -1, vPriceLevel, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1,
  96.         0, vYes, to_char(NOW(), 'YYYYMMDDHH24MIss'), ''
  97.         FROM m_product A
  98.         INNER JOIN i_outlet B ON A.tenant_id = B.tenant_id
  99.         INNER JOIN m_tax D ON A.tenant_id = D.tenant_id AND tax_code = 'PPn'
  100.         WHERE NOT EXISTS (SELECT 1 FROM m_sell_price_product_for_so C
  101.                     WHERE A.tenant_id = C.tenant_id
  102.                     AND B.ou_id = C.ou_id
  103.                     AND A.product_id = C.product_id
  104.                     AND C.date_from = CONCAT(pStartYearMonth,'01')
  105.                     AND C.price_level = vPriceLevel
  106.         );
  107.  
  108.     --> Kondisi Harga Jual belum termasuk PPn & ditambah PPn
  109.     ELSIF (pFlgIncludeTax = vNo AND pFlgPpn = vYes) THEN
  110.  
  111.         INSERT INTO m_sell_price_product_for_so
  112.         (tenant_id, ou_id, product_id, date_from, date_to, curr_code, gross_sell_price, flg_tax_amount, tax_id,
  113.         tax_amount,
  114.         sell_price, min_sell_price, price_level, create_datetime, create_user_id, update_datetime, update_user_id,
  115.         version, active, active_datetime, non_active_datetime)
  116.         SELECT A.tenant_id, B.ou_id, A.product_id, CONCAT(pStartYearMonth,'01'), '30001231', 'IDR', pGrossSellPrice, vNo, D.tax_id,
  117.         COALESCE(CAST(pGrossSellPrice AS numeric) * D.percentage / 100, 0),
  118.         pGrossSellPrice, -1, vPriceLevel, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1,
  119.         0, vYes, to_char(NOW(), 'YYYYMMDDHH24MIss'), ''
  120.         FROM m_product A
  121.         INNER JOIN i_outlet B ON A.tenant_id = B.tenant_id
  122.         INNER JOIN m_tax D ON A.tenant_id = D.tenant_id AND tax_code = 'PPn'
  123.         WHERE NOT EXISTS (SELECT 1 FROM m_sell_price_product_for_so C
  124.                     WHERE A.tenant_id = C.tenant_id
  125.                     AND B.ou_id = C.ou_id
  126.                     AND A.product_id = C.product_id
  127.                     AND C.date_from = CONCAT(pStartYearMonth,'01')
  128.                     AND C.price_level = vPriceLevel
  129.         );
  130.  
  131.     --> Kondisi Harga Jual belum termasuk PPn
  132.     ELSE
  133.  
  134.         INSERT INTO m_sell_price_product_for_so
  135.         (tenant_id, ou_id, product_id, date_from, date_to, curr_code, gross_sell_price, flg_tax_amount, tax_id, tax_amount,
  136.         sell_price, min_sell_price, price_level, create_datetime, create_user_id, update_datetime, update_user_id,
  137.         version, active, active_datetime, non_active_datetime)
  138.         SELECT A.tenant_id, B.ou_id, A.product_id, CONCAT(pStartYearMonth,'01'), '30001231', 'IDR', pGrossSellPrice, vNo, D.tax_id, 0,
  139.         pGrossSellPrice, -1, vPriceLevel, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1, to_char(NOW(), 'YYYYMMDDHH24MIss'), -1,
  140.         0, vYes, to_char(NOW(), 'YYYYMMDDHH24MIss'), ''
  141.         FROM m_product A
  142.         INNER JOIN i_outlet B ON A.tenant_id = B.tenant_id
  143.         INNER JOIN m_tax D ON A.tenant_id = D.tenant_id AND tax_code = 'PPn'
  144.         WHERE NOT EXISTS (SELECT 1 FROM m_sell_price_product_for_so C
  145.                     WHERE A.tenant_id = C.tenant_id
  146.                     AND B.ou_id = C.ou_id
  147.                     AND A.product_id = C.product_id
  148.                     AND C.date_from = CONCAT(pStartYearMonth,'01')
  149.                     AND C.price_level = vPriceLevel
  150.         );
  151.  
  152.     END IF;
  153.  
  154.        
  155. END;   
  156. $BODY$
  157.   LANGUAGE plpgsql VOLATILE
  158.   COST 100;
  159.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement