widana

sl_submit_cancel_so_from_webclinic

Dec 17th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION sl_submit_cancel_so_from_webclinic(character varying, bigint, bigint, bigint, character varying)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pSessionId          ALIAS FOR $1;
  6.     pTenantId           ALIAS FOR $2;
  7.     pCancelSoId         ALIAS FOR $3;
  8.     pUserId             ALIAS FOR $4;
  9.     pDatetime           ALIAS FOR $5;
  10.  
  11.     vStatusRelease  character varying(1);
  12.     vStatusCancel   character varying(1);
  13.     vStatusFinal    character varying(1);  
  14.     vEmptyId        bigint;
  15.     vSoId           bigint;
  16.     vUnfinishedItem     numeric;   
  17.  
  18.     pUserIdForGenerateDoc   BIGINT;
  19.     vRoleIdForGenerateDoc   BIGINT;
  20.     vSchema                 CHARACTER VARYING := 'FA02';
  21.     vYes                    character varying := 'Y';
  22.     vWorkflowStatus         CHARACTER VARYING := 'APPROVED';
  23.     vParamUserIdForGenerateDoc  CHARACTER VARYING := 'created.user.document.for.webclinic';
  24.     vParamRoleIdForGenerateDoc  CHARACTER VARYING := 'created.role.document.for.webclinic';
  25.     vFlowId                 BIGINT;
  26.     vFlgUserRole            CHARACTER VARYING := 'R';
  27.     vCurrentDateTime        character varying;
  28.    
  29. BEGIN
  30.    
  31.     vStatusRelease := 'R';
  32.     vStatusCancel := 'C';
  33.     vStatusFinal := 'F';
  34.     vEmptyId := -99;
  35.     vUnfinishedItem := 0;
  36.  
  37.     -- Set user id from sysconfig
  38.     SELECT f_get_value_system_config_by_param_code(pTenantId, vParamUserIdForGenerateDoc)::bigint INTO pUserIdForGenerateDoc;
  39.  
  40.     -- Set role id from sysconfig
  41.     SELECT f_get_value_system_config_by_param_code(pTenantId, vParamRoleIdForGenerateDoc)::bigint INTO vRoleIdForGenerateDoc;
  42.  
  43.     SELECT f_datetime((extract(epoch from now())*1000)::bigint) INTO vCurrentDateTime;
  44.    
  45.     SELECT so_id INTO vSoId
  46.     FROM sl_manage_so A
  47.     WHERE manage_so_id = pCancelSoId;
  48.        
  49. /*
  50.  * 1.update status item balance SO
  51.  * 2.update status doc sl so, jika seluruh balance item sudah tidak ada yg release
  52.  * 3.insert sl log balance item SO
  53.  * 4.update workflow status manage SO
  54.  * 5.update qty cancel dan status item balance PO terhadap SO
  55.  */
  56.     UPDATE sl_so_balance_item A SET status_item = vStatusCancel,
  57.            qty_cancel = B.qty_so,
  58.            qty_cancel_int = B.qty_int,
  59.            update_datetime = vDatetime,
  60.            update_user_id = vUserId
  61.     FROM sl_manage_so_item B
  62.     WHERE A.so_item_id = B.so_item_id AND
  63.         B.manage_so_id = vCancelSoId;
  64.    
  65.     SELECT COUNT(1) INTO vUnfinishedItem
  66.     FROM sl_so_balance_item A, sl_so_item B
  67.     WHERE A.so_item_id = B.so_item_id AND
  68.         B.so_id = vSoId AND
  69.         A.status_item = vStatusRelease;
  70.        
  71.     IF vUnfinishedItem = 0 THEN
  72.         UPDATE sl_so SET status_doc = vStatusFinal, update_datetime = pDatetime, update_user_id = pUserId, version = version+1
  73.         WHERE so_id = vSoId;
  74.     ELSE
  75.         UPDATE sl_so SET status_doc = vStatusRelease, update_datetime = pDatetime, update_user_id = pUserId, version = version+1
  76.         WHERE so_id = vSoId;   
  77.     END IF;
  78.        
  79.     INSERT INTO sl_log_so_balance_item
  80.     (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
  81.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  82.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  83.     SELECT A.tenant_id, A.so_id, B.so_item_id, A.doc_type_id, A.manage_so_id, B.manage_so_item_id,
  84.         -1 * B.qty_so, B.so_uom_id, -1 * B.qty_int, B.base_uom_id, A.remark,
  85.         0, pDatetime, pUserId, pDatetime, pUserId
  86.     FROM sl_manage_so A, sl_manage_so_item B
  87.     WHERE A.manage_so_id = pCancelSoId AND
  88.         A.manage_so_id = B.manage_so_id;
  89.    
  90.     UPDATE sl_manage_so SET status_doc = vStatusRelease, update_datetime = pDatetime, update_user_id = pUserId
  91.     WHERE manage_so_id = pCancelSoId;
  92.    
  93.     -- WTC, 20141227, update qty cancel dan status item balance PO terhadap SO
  94.     -- TODO: insert to sl_log_so_po_balance_item
  95.     UPDATE sl_so_po_balance_item A SET status_item = vStatusCancel, update_datetime = pDatetime, update_user_id = pUserId, version = A.version + 1
  96.     FROM sl_manage_so_item B
  97.     WHERE A.so_item_id = B.so_item_id AND
  98.         B.manage_so_id = pCancelSoId;
  99.  
  100.     -- Mendapatkan default approval flow ID so
  101.     SELECT awe_flow_id INTO vFlowId
  102.     FROM awe_flow
  103.     WHERE scheme = vSchema AND
  104.         flg_validate = vYes AND
  105.         active = vYes;
  106.        
  107.     -- Generate data awe_currdoc_status so
  108.     INSERT INTO awe_currdoc_status(
  109.         req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  110.         remark, current_user_id, current_role_id, flg_user_role, label,
  111.         data, flow_id, create_datetime, create_user_id, create_role_id,
  112.         update_datetime, update_user_id, update_role_id, version)
  113.     SELECT A.manage_so_id||'_'||A.doc_no, A.tenant_id, vSchema, A.manage_so_id, A.doc_no, A.doc_date, vWorkflowStatus,
  114.         A.remark, pUserIdForGenerateDoc, vRoleIdForGenerateDoc, vFlgUserRole, 'Delivery Order Receipt '||A.doc_no,
  115.         '{}', vFlowId, vCurrentDateTime, pUserIdForGenerateDoc, vRoleIdForGenerateDoc,
  116.         vCurrentDateTime, pUserIdForGenerateDoc, vRoleIdForGenerateDoc, 0
  117.     FROM sl_manage_so A
  118.     WHERE A.manage_so_id = pCancelSoId;
  119.  
  120.     -- Generate data awe_historydoc so
  121.     INSERT INTO awe_historydoc(
  122.             tenant_id, req_id, doc_id, scheme, user_id, role_id,
  123.             activity, previous_state, next_state, remark, next_user_id, next_role_id,
  124.             flg_user_role, activity_datetime, version)
  125.     SELECT pTenantId, B.req_id, A.manage_so_id, vSchema, pUserIdForGenerateDoc, vRoleIdForGenerateDoc,
  126.             'AUTO GENERATE', '', '', A.remark, vEmptyId, vEmptyId,
  127.             vFlgUserRole, vCurrentDateTime, 0
  128.     FROM sl_manage_so A
  129.     INNER JOIN awe_currdoc_status B ON B.doc_id = A.manage_so_id AND B.doc_no = A.doc_no AND B.doc_date = A.doc_date
  130.     WHERE A.manage_so_id = pCancelSoId;
  131.        
  132. END;
  133. $BODY$
  134.   LANGUAGE plpgsql VOLATILE
  135.   COST 100;
  136.     /
Add Comment
Please, Sign In to add comment