Advertisement
congky

script_for_update_stock_webclinic

Jul 21st, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- BEGIN TRANSACTION
  2. BEGIN;
  3.  
  4. -- UPDATE ALL STOCK MENJADI 0
  5. UPDATE in_product_balance_stock A SET
  6.     qty = 0,
  7.     version = A.version + 1,
  8.     update_datetime = to_char(current_timestamp, 'YYYYMMDDHH24MISS'),
  9.     update_username = 'SuperAdmin';
  10.  
  11. -- PREPARE DATA FOR UPDATE STOCK
  12. WITH data_closed_ledger AS (
  13.     SELECT A.record_owner_id, COALESCE(MAX(A.year_month), MIN(A.year_month)) AS year_month_closed,
  14.         to_char((to_date(COALESCE(MAX(A.year_month), MIN(A.year_month)), 'YYYYMM') + interval '1 month'), 'YYYYMM') next_last_closed_ledger
  15.         FROM m_admin_process_ledger A
  16.         WHERE A.status_ledger = '1'
  17.         AND year_month < to_char(current_date, 'YYYYMM')
  18.     GROUP BY A.record_owner_id
  19. ), data_summary_and_data_log_transaksi AS (
  20.     SELECT A.record_owner_id, A.product_balance_id, A.product_id, A.warehouse_id, 'GOOD' AS status,
  21.         A.qty
  22.     FROM in_summary_monthly_qty A
  23.     INNER JOIN data_closed_ledger B ON A.record_owner_id = B.record_owner_id
  24.     WHERE A.year_month = B.next_last_closed_ledger
  25.  
  26.     UNION ALL
  27.    
  28.     SELECT A.record_owner_id, A.product_balance_id, A.product_id, A.warehouse_id, 'GOOD' AS status,
  29.         A.qty
  30.     FROM in_log_product_balance_stock A
  31.     INNER JOIN data_closed_ledger B ON A.record_owner_id = B.record_owner_id
  32.     WHERE A.ref_doc_date BETWEEN B.next_last_closed_ledger||'01' AND to_char(current_date, 'YYYYMMDD')
  33. ), data_for_update AS (
  34.     SELECT A.record_owner_id, B.record_owner_code, A.product_balance_id, A.product_id, A.warehouse_id, A.status, SUM(A.qty) AS qty
  35.     FROM data_summary_and_data_log_transaksi A
  36.     INNER JOIN m_record_owner B ON A.record_owner_id = B.record_owner_id
  37.     GROUP BY A.record_owner_id, B.record_owner_code, A.product_balance_id, A.product_id, A.warehouse_id, A.status
  38.     ORDER BY A.record_owner_id
  39. ), update_data_stock AS (
  40.     -- UPDATE DATA STOCK
  41.     UPDATE in_product_balance_stock A SET
  42.         qty = B.qty,
  43.         version = A.version + 1,
  44.         update_datetime = to_char(current_timestamp, 'YYYYMMDDHH24MISS'),
  45.         update_username = 'SuperAdmin'
  46.     FROM data_for_update B
  47.     WHERE A.record_owner_id = B.record_owner_id
  48.     AND A.product_balance_id = B.product_balance_id
  49.     AND A.product_id = B.product_id
  50.     AND A.warehouse_id = B.warehouse_id
  51.     AND A.product_status = B.status
  52. )
  53. -- INSERT DATA STOCK
  54. INSERT INTO in_product_balance_stock(
  55.     record_owner_id, product_balance_id,
  56.     product_id, warehouse_id, product_status, qty, version, create_datetime,
  57.     create_username, update_datetime, update_username)
  58. SELECT A.record_owner_id, A.product_balance_id,
  59.     A.product_id, A.warehouse_id, 'GOOD', A.qty, 0, to_char(current_timestamp, 'YYYYMMDDHH24MISS'),
  60.     'SuperAdmin', to_char(current_timestamp, 'YYYYMMDDHH24MISS'), 'SuperAdmin'
  61. FROM data_for_update A
  62. WHERE NOT EXISTS (
  63.     SELECT 1 FROM in_product_balance_stock Z
  64.     WHERE Z.record_owner_id = A.record_owner_id
  65.     AND Z.product_balance_id = A.product_balance_id
  66.     AND Z.product_id = A.product_id
  67.     AND Z.warehouse_id = A.warehouse_id
  68.     AND Z.product_status = A.status
  69. );
  70.  
  71. -- END TRANSACTION
  72. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement