Advertisement
widana

Upload Produk

Aug 27th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_upload_product(character varying, bigint)
  2.     RETURNS bigint AS
  3.     $BODY$
  4. DECLARE
  5.  
  6.   pSessionId            ALIAS FOR $1;
  7.   pRecordOwnerId        ALIAS FOR $2;
  8.  
  9.   vEmptyId              bigint := -99;
  10.   vProductId            bigint;
  11.   vUomId                bigint;
  12.   vFindProductId        bigint;
  13.   vResult               bigint;
  14.  
  15.   vFail                 character varying := 'FAIL';
  16.   vOk                   character varying := 'OK';
  17.  
  18.   vYes                  character varying := 'Y';
  19.   vNo                   character varying := 'N';
  20.   vCurrentDateTime      character varying;
  21.   vEmpty                character varying := ' ';
  22.  
  23.   vCursorRow            tt_ul_product%ROWTYPE;
  24.  
  25. BEGIN
  26.  
  27.     SELECT f_datetime((extract(epoch from now())*1000)::bigint) INTO vCurrentDateTime;
  28.    
  29.     -- Validasi produk tidak boleh duplikate saat upload
  30.     WITH duplicateCode AS (
  31.         SELECT product_code, COUNT(product_code)
  32.         FROM tt_ul_product
  33.         WHERE session_id = pSessionId
  34.             AND record_owner_id = pRecordOwnerId
  35.         GROUP BY product_code
  36.         HAVING COUNT(product_code) > 1
  37.     )
  38.     UPDATE tt_ul_product Z
  39.         SET status = vFail, message = concat(Z.message, 'Kode Produk ', A.product_code, ' Duplikat, ')
  40.     FROM tt_ul_product A
  41.     INNER JOIN duplicateCode B ON A.product_code = B.product_code
  42.     WHERE A.session_id = pSessionId
  43.         AND Z.product_code = A.product_code
  44.         AND Z.record_owner_id = pRecordOwnerId;
  45.  
  46.     -- Validasi Kode Kategori Produk tidak ditemukan
  47.     UPDATE tt_ul_product Z
  48.         SET status = vFail, message = concat(Z.message, 'Kode Kategori Produk ', A.product_ctgr_code, ' Tidak ditemukan, ')
  49.     FROM tt_ul_product A
  50.     LEFT JOIN m_product_ctgr B ON A.product_ctgr_code = B.product_ctgr_code
  51.         AND B.product_ctgr_parent_id = vEmptyId
  52.     WHERE A.session_id = pSessionId
  53.         AND Z.product_code = A.product_code
  54.         AND Z.record_owner_id = A.record_owner_id
  55.         AND Z.record_owner_id = pRecordOwnerId
  56.         AND Z.session_id = A.session_id
  57.         AND B.product_ctgr_id IS NULL
  58.  
  59.     -- Validasi Kode Sub Kategori Produk tidak ditemukan
  60.     UPDATE tt_ul_product Z
  61.         SET status = vFail, message = concat(Z.message, 'Kode Sub Kategori Produk ', A.sub_product_ctgr_code, ' Tidak ditemukan, ')
  62.     FROM tt_ul_product A
  63.     LEFT JOIN m_product_ctgr B ON A.sub_product_ctgr_code = B.product_ctgr_code
  64.         AND B.product_ctgr_parent_id <> vEmptyId
  65.     WHERE A.session_id = pSessionId
  66.         AND Z.product_code = A.product_code
  67.         AND Z.record_owner_id = A.record_owner_id
  68.         AND Z.record_owner_id = pRecordOwnerId
  69.         AND Z.session_id = A.session_id
  70.         AND B.product_ctgr_id IS NULL
  71.  
  72.     -- Validasi Kode Uom harus terdaftar di table master
  73.     UPDATE tt_ul_product Z
  74.         SET status = vFail, message = concat(Z.message, 'Kode UOM ', A.uom_code, ' tidak terdaftar, ')
  75.     FROM tt_ul_product A
  76.     WHERE A.session_id = pSessionId
  77.         AND Z.session_id = A.session_id
  78.         AND A.product_code = Z.product_code
  79.         AND f_get_uom_id_by_uom_code(A.uom_code, vEmptyId) = -99;
  80.        
  81.     FOR vCursorRow IN
  82.         SELECT *
  83.         FROM tt_ul_product A
  84.         WHERE A.session_id = pSessionId
  85.             AND A.status = vOk
  86.             AND NOT EXISTS (SELECT 1 FROM m_product Z WHERE A.product_code = Z.product_code AND A.record_owner_id = Z.record_owner_id)
  87.     LOOP
  88.         vProductId := nextval('m_product_seq');
  89.        
  90.         SELECT f_get_uom_id_by_uom_code(vCursorRow.uom_code, vEmptyId) INTO vUomId;
  91.    
  92.         INSERT INTO m_product (
  93.             stock_row_id, product_id, record_owner_id, product_code, product_name, product_local_name,
  94.             product_ctgr_id, product_sub_ctgr_id, part_no, brand_name, color,
  95.             style_product, class_product, minimum_stock_level, image_url, version,
  96.             active, active_datetime, non_active_datetime, create_datetime, create_username,
  97.             update_datetime, update_username, uom_id) VALUES (
  98.            
  99.             vEmpty, vProductId, vCursorRow.record_owner_id, vCursorRow.product_code, vCursorRow.product_name, vCursorRow.product_name,
  100.             vEmptyId, vEmptyId, vCursorRow.part_no, vCursorRow.brand_name, vCursorRow.color,
  101.             vCursorRow.style_product, vCursorRow.class_product, vCursorRow.minimum_stock_level, vEmpty, 0,
  102.             vYes, vCurrentDateTime, vEmpty, vCursorRow.create_datetime, vCursorRow.create_username,
  103.             vCursorRow.update_datetime, vCursorRow.update_username, vUomId);
  104.    
  105.         --. Simpan ke table m_product_ctgr_mapping
  106.         INSERT INTO m_product_ctgr_mapping(
  107.             product_id, product_ctgr_id, product_sub_ctgr_id, version, create_username,
  108.             create_datetime, update_username, update_datetime) VALUES (
  109.             vProductId, f_get_product_ctgr_id_by_product_ctgr_code(vCursorRow.product_ctgr_code), f_get_product_ctgr_id_by_product_ctgr_code(vCursorRow.sub_product_ctgr_code), 0, vCursorRow.create_username,
  110.             vCursorRow.update_datetime, vCursorRow.update_username, vCursorRow.update_datetime);
  111.            
  112.         INSERT INTO m_product_dimension(
  113.                 product_id, weight, length, width, height, create_datetime,
  114.                 create_username, update_datetime, update_username
  115.                 ) VALUES
  116.                 (vProductId, vCursorRow.weight, vCursorRow.length, vCursorRow.width, vCursorRow.height, vCursorRow.create_datetime,
  117.                 vCursorRow.create_username, vCursorRow.update_datetime, vCursorRow.update_username);
  118.  
  119.         --. Simpan ke table in_product_balance
  120.         INSERT INTO in_product_balance(
  121.             record_owner_id, product_id, serial_number, lot_number, expired_date,
  122.             year_made, version, create_datetime, create_username, update_datetime, update_username
  123.             ) VALUES
  124.             (vCursorRow.record_owner_id, vProductId, vEmpty, vEmpty, vEmpty,
  125.             vEmpty, 0, vCursorRow.create_datetime, vCursorRow.create_username, vCursorRow.update_datetime, vCursorRow.update_username);
  126.    
  127.     END LOOP;
  128.    
  129.     SELECT COUNT(1) INTO vResult
  130.     FROM tt_ul_product
  131.     WHERE session_id = pSessionId
  132.         AND status = vFail;
  133.    
  134.     RETURN vResult;
  135.    
  136. END;
  137. $BODY$
  138.   LANGUAGE plpgsql VOLATILE
  139.   SET search_path = public, mstr, batch
  140.   COST 100;
  141.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement