----------------------------------------------------------------------------- -- -- Logical unit: StockTakingUnit -- -- Purpose: -- -- IFS/Design Template Version 2.2 -- -- Date Sign History -- ------ ---- ----------------------------------------------------------- ----------------------------------------------------------------------------- DEFINE MODULE = INCON DEFINE LU = StockTakingUnit DEFINE TABLE = STOCK_TAKING_UNIT_TAB DEFINE VIEW = STOCK_TAKING_UNIT DEFINE PKG = STOCK_TAKING_UNIT_API DEFINE OBJID = rowid DEFINE OBJVERSION = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))" DEFINE OBJSTATE = rowstate DEFINE OBJEVENTS = substrb(&PKG..Finite_State_Events__(&OBJSTATE),1,253) DEFINE STATE = substrb(&PKG..Finite_State_Decode__(&OBJSTATE),1,253) ----------------------------------------------------------------------------- -------------------- VIEWS FOR SELECTS -------------------------------------- ----------------------------------------------------------------------------- PROMPT Creating &VIEW view CREATE OR REPLACE VIEW &VIEW AS SELECT company company, stock_taking_unit_id stock_taking_unit_id, tgl_stock_taking tgl_stock_taking, tgl_start tgl_start, tgl_selesai tgl_selesai, created_by created_by, created_date created_date, submit_by submit_by, submit_date submit_date, approved_by approved_by, approved_date approved_date, rejected_by rejected_by, rejected_date rejected_date, cabang_id cabang_id, &OBJID objid, &OBJVERSION objversion, &OBJSTATE objstate, &OBJEVENTS objevents, &STATE state FROM stock_taking_unit_tab WITH read only; COMMENT ON TABLE &VIEW IS 'LU=&LU^PROMPT=Stock Taking Unit^MODULE=&MODULE^'; COMMENT ON COLUMN &VIEW..company IS 'FLAGS=PMI--^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Company^REF=Perusahaan^'; COMMENT ON COLUMN &VIEW..stock_taking_unit_id IS 'FLAGS=KMI-L^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Stock Taking Unit Id^'; COMMENT ON COLUMN &VIEW..tgl_stock_taking IS 'FLAGS=AMIUL^DATATYPE=DATE^PROMPT=Tgl Stock Taking^'; COMMENT ON COLUMN &VIEW..tgl_start IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Tgl Start^'; COMMENT ON COLUMN &VIEW..tgl_selesai IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Tgl Selesai^'; COMMENT ON COLUMN &VIEW..created_by IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Created By^'; COMMENT ON COLUMN &VIEW..created_date IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Created Date^'; COMMENT ON COLUMN &VIEW..submit_by IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Submit By^'; COMMENT ON COLUMN &VIEW..submit_date IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Submit Date^'; COMMENT ON COLUMN &VIEW..approved_by IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Approved By^'; COMMENT ON COLUMN &VIEW..approved_date IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Approved Date^'; COMMENT ON COLUMN &VIEW..rejected_by IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Rejected By^'; COMMENT ON COLUMN &VIEW..rejected_date IS 'FLAGS=A-IUL^DATATYPE=DATE^PROMPT=Rejected Date^'; COMMENT ON COLUMN &VIEW..cabang_id IS 'FLAGS=A-IU-^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Cabang Id^REF=Cabang(company)^'; ----------------------------------------------------------------------------- -------------------- PACKAGES FOR METHODS ----------------------------------- ----------------------------------------------------------------------------- PROMPT Creating &PKG implementation CREATE OR REPLACE PACKAGE BODY &PKG IS ----------------------------------------------------------------------------- -------------------- FINITE STATE DECLARATIONS ------------------------------ ----------------------------------------------------------------------------- db_state_list_ CONSTANT VARCHAR2(33) := 'Open^Submitted^Approved^Rejected^'; client_state_list_ CONSTANT VARCHAR2(33) := 'Open^Submitted^Approved^Rejected^'; active_state_list_ VARCHAR2(132) := Language_SYS.Translate_State_(lu_name_, client_state_list_); state_separator_ CONSTANT VARCHAR2(1) := Client_SYS.field_separator_; ----------------------------------------------------------------------------- -------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS --------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------------------- IMPLEMENTATION BASE METHODS ---------------------------- ----------------------------------------------------------------------------- -- Lock_By_Id___ -- Client-support to lock a specific instance of the logical unit. -- -- Lock_By_Keys___ -- Server support to lock a specific instance of the logical unit. -- -- Get_Object_By_Id___ -- Get LU-record from the database with a specified object identity. -- -- Get_Object_By_Keys___ -- Get LU-record from the database with specified key columns. -- -- Check_Exist___ -- Check if a specific LU-instance already exist in the database. -- -- Get_Id_Version_By_Keys___ -- Get the current OBJID and OBJVERSION for a specific LU-instance. ----------------------------------------------------------------------------- FUNCTION Lock_By_Id___ ( objid_ IN VARCHAR2, objversion_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE IS row_changed EXCEPTION; row_deleted EXCEPTION; row_locked EXCEPTION; PRAGMA exception_init(row_locked, -0054); rec_ &TABLE%ROWTYPE; dummy_ NUMBER; CURSOR lock_control IS SELECT * FROM &TABLE WHERE &OBJID = objid_ AND &OBJVERSION = objversion_ FOR UPDATE NOWAIT; CURSOR exist_control IS SELECT 1 FROM &TABLE WHERE &OBJID = objid_; BEGIN OPEN lock_control; FETCH lock_control INTO rec_; IF (lock_control%FOUND) THEN CLOSE lock_control; RETURN rec_; END IF; CLOSE lock_control; OPEN exist_control; FETCH exist_control INTO dummy_; IF (exist_control%FOUND) THEN CLOSE exist_control; RAISE row_changed; ELSE CLOSE exist_control; RAISE row_deleted; END IF; EXCEPTION WHEN row_locked THEN Error_SYS.Record_Locked(lu_name_); WHEN row_changed THEN Error_SYS.Record_Modified(lu_name_); WHEN row_deleted THEN Error_SYS.Record_Removed(lu_name_); END Lock_By_Id___; FUNCTION Lock_By_Keys___ ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE IS row_deleted EXCEPTION; rec_ &TABLE%ROWTYPE; CURSOR lock_control IS SELECT * FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_ FOR UPDATE; BEGIN OPEN lock_control; FETCH lock_control INTO rec_; IF (lock_control%FOUND) THEN CLOSE lock_control; RETURN rec_; ELSE CLOSE lock_control; RAISE row_deleted; END IF; EXCEPTION WHEN row_deleted THEN Error_SYS.Record_Removed(lu_name_); END Lock_By_Keys___; FUNCTION Get_Object_By_Id___ ( objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE IS lu_rec_ &TABLE%ROWTYPE; CURSOR getrec IS SELECT * FROM &TABLE WHERE &OBJID = objid_; BEGIN OPEN getrec; FETCH getrec INTO lu_rec_; IF (getrec%NOTFOUND) THEN CLOSE getrec; Error_SYS.Record_Removed(lu_name_); END IF; CLOSE getrec; RETURN(lu_rec_); END Get_Object_By_Id___; FUNCTION Get_Object_By_Keys___ ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE IS lu_rec_ &TABLE%ROWTYPE; CURSOR getrec IS SELECT * FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN getrec; FETCH getrec INTO lu_rec_; CLOSE getrec; RETURN(lu_rec_); END Get_Object_By_Keys___; FUNCTION Check_Exist___ ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN BOOLEAN IS dummy_ NUMBER; CURSOR exist_control IS SELECT 1 FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN exist_control; FETCH exist_control INTO dummy_; IF (exist_control%FOUND) THEN CLOSE exist_control; RETURN(TRUE); END IF; CLOSE exist_control; RETURN(FALSE); END Check_Exist___; PROCEDURE Get_Id_Version_By_Keys___ ( objid_ IN OUT VARCHAR2, objversion_ IN OUT VARCHAR2, company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS CURSOR get_version IS SELECT &OBJID, &OBJVERSION FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_version; FETCH get_version INTO objid_, objversion_; CLOSE get_version; END Get_Id_Version_By_Keys___; ----------------------------------------------------------------------------- -------------------- IMPLEMENTATION FINITE STATE MACHINE -------------------- ----------------------------------------------------------------------------- -- Finite_State_Set___ -- Updates the finite state indicator for an existing LU-instance. -- -- Finite_State_Machine___ -- Processes an event by: -- 1. Fetching the current state -- 2. Evaluating any conditions for given event at current state -- 3. executing any exit code for the old state -- 4. Performing any action associated with given event -- 5. update the database to the new state -- 6. execute any entry code for the new state -- 7. Executing a state change to the new state -- -- Finite_State_Add_To_Attr___ -- Adds the current state and allowed events to the attribute string. -- -- Finite_State_Init___ -- Sets the initial finite state indicator for an existing LU-instance -- and processes any automatic events. ----------------------------------------------------------------------------- PROCEDURE Finite_State_Set___ ( rec_ IN OUT &TABLE%ROWTYPE, state_ IN VARCHAR2 ) IS BEGIN rec_.rowversion := sysdate; UPDATE stock_taking_unit_tab SET &OBJSTATE = state_, rowversion = rec_.rowversion WHERE company = rec_.company AND stock_taking_unit_id = rec_.stock_taking_unit_id; rec_.rowstate := state_; END Finite_State_Set___; PROCEDURE Finite_State_Machine___ ( rec_ IN OUT &TABLE%ROWTYPE, event_ IN VARCHAR2, attr_ IN OUT VARCHAR2 ) IS state_ VARCHAR2(30); BEGIN state_ := rec_.rowstate; IF (state_ IS NULL) THEN IF (event_ IS NULL) THEN rec_.rowstate := 'Open'; ELSE Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); END IF; ELSIF (state_ = 'Approved') THEN IF (event_ = 'CancelApprove') THEN Finite_State_Set___(rec_, 'Submitted'); ELSE Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); END IF; ELSIF (state_ = 'Open') THEN IF (event_ = 'Submit') THEN Finite_State_Set___(rec_, 'Submitted'); ELSE Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); END IF; ELSIF (state_ = 'Rejected') THEN IF (event_ = 'ReSubmit') THEN Finite_State_Set___(rec_, 'Submitted'); ELSE Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); END IF; ELSIF (state_ = 'Submitted') THEN IF (event_ = 'Approve') THEN Finite_State_Set___(rec_, 'Approved'); ELSIF (event_ = 'CancelSubmit') THEN Finite_State_Set___(rec_, 'Open'); ELSIF (event_ = 'Reject') THEN Finite_State_Set___(rec_, 'Rejected'); ELSE Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_)); END IF; ELSE Error_SYS.State_Not_Exist(lu_name_, Finite_State_Decode__(state_)); END IF; END Finite_State_Machine___; PROCEDURE Finite_State_Add_To_Attr___ ( rec_ IN &TABLE%ROWTYPE, attr_ IN OUT VARCHAR2 ) IS state_ VARCHAR2(30); BEGIN state_ := rec_.rowstate; Client_SYS.Add_To_Attr('__OBJSTATE', state_, attr_); Client_SYS.Add_To_Attr('__OBJEVENTS', Finite_State_Events__(state_), attr_); Client_SYS.Add_To_Attr('STATE', Finite_State_Decode__(state_), attr_); END Finite_State_Add_To_Attr___; PROCEDURE Finite_State_Init___ ( rec_ IN OUT &TABLE%ROWTYPE, attr_ IN OUT VARCHAR2 ) IS state_ VARCHAR2(30); BEGIN Finite_State_Machine___(rec_, NULL, attr_); Finite_State_Add_To_Attr___(rec_, attr_); END Finite_State_Init___; ----------------------------------------------------------------------------- -------------------- PRIVATE FINITE STATE MACHINE --------------------------- ----------------------------------------------------------------------------- -- Finite_State_Decode__ -- Returns the client equivalent for any database representation of -- a state name = objstate. -- -- Enumerate_States__ -- Returns a list of all possible finite states in client terminology. -- -- Finite_State_Events__ -- Returns a list of allowed events for a given state -- NOTE! Regardless of conditions if not otherwize encoded -- -- Enumerate_Events__ -- Returns a list of all possible events. ----------------------------------------------------------------------------- FUNCTION Finite_State_Decode__ ( db_state_ IN VARCHAR2 ) RETURN VARCHAR2 IS BEGIN RETURN(Domain_SYS.Decode_(active_state_list_, db_state_list_, db_state_)); END Finite_State_Decode__; PROCEDURE Enumerate_States__ ( client_values_ OUT VARCHAR2) IS BEGIN client_values_ := Domain_SYS.Enumerate_(active_state_list_); END Enumerate_States__; FUNCTION Finite_State_Events__ ( db_state_ IN VARCHAR2 ) RETURN VARCHAR2 IS BEGIN IF (db_state_ IS NULL) THEN RETURN NULL; ELSIF (db_state_ = 'Approved') THEN RETURN 'CancelApprove^'; ELSIF (db_state_ = 'Open') THEN RETURN 'Submit^'; ELSIF (db_state_ = 'Rejected') THEN RETURN 'ReSubmit^'; ELSIF (db_state_ = 'Submitted') THEN RETURN 'CancelSubmit^Approve^Reject^'; ELSE RETURN NULL; END IF; END Finite_State_Events__; PROCEDURE Enumerate_Events__ ( db_events_ OUT VARCHAR2 ) IS BEGIN db_events_ := 'Submit^CancelSubmit^Approve^Reject^CancelApprove^ReSubmit^'; END Enumerate_Events__; ----------------------------------------------------------------------------- -------------------- IMPLEMENTATION BASE METHODS FOR INSERT ----------------- ----------------------------------------------------------------------------- -- Prepare_Insert___ -- Set all default values for a new instance (ON-NEW-RECORD) of this -- logical unit by calling procedure Add_Attr. -- -- Unpack_Check_Insert___ -- Unpack the attribute list, check all attributes from the client -- and generate all default values before creation of the new object. -- -- Insert___ -- Insert a new LU-instance into the database and return the values -- for OBJID and OBJVERSION. ----------------------------------------------------------------------------- PROCEDURE Prepare_Insert___ ( attr_ IN OUT VARCHAR2 ) IS BEGIN Client_SYS.Clear_Attr(attr_); END Prepare_Insert___; PROCEDURE Unpack_Check_Insert___ ( attr_ IN OUT VARCHAR2, newrec_ IN OUT &TABLE%ROWTYPE ) IS ptr_ NUMBER; name_ VARCHAR2(30); value_ VARCHAR2(2000); BEGIN ptr_ := NULL; WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP IF (name_ = 'COMPANY') THEN newrec_.company := value_; Perusahaan_API.Exist(newrec_.company); ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN newrec_.stock_taking_unit_id := value_; ELSIF (name_ = 'TGL_STOCK_TAKING') THEN newrec_.tgl_stock_taking := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'TGL_START') THEN newrec_.tgl_start := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'TGL_SELESAI') THEN newrec_.tgl_selesai := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'CREATED_BY') THEN newrec_.created_by := value_; ELSIF (name_ = 'CREATED_DATE') THEN newrec_.created_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'SUBMIT_BY') THEN newrec_.submit_by := value_; ELSIF (name_ = 'SUBMIT_DATE') THEN newrec_.submit_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'APPROVED_BY') THEN newrec_.approved_by := value_; ELSIF (name_ = 'APPROVED_DATE') THEN newrec_.approved_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'REJECTED_BY') THEN newrec_.rejected_by := value_; ELSIF (name_ = 'REJECTED_DATE') THEN newrec_.rejected_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'CABANG_ID') THEN newrec_.cabang_id := value_; IF (value_ IS NOT NULL) THEN Cabang_API.Exist(newrec_.company, newrec_.cabang_id); END IF; ELSE Error_SYS.Item_Not_Exist(lu_name_, name_, value_); END IF; END LOOP; Client_SYS.Clear_Attr(attr_); Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company); Error_SYS.Check_Not_Null(lu_name_, 'STOCK_TAKING_UNIT_ID', newrec_.stock_taking_unit_id); Error_SYS.Check_Not_Null(lu_name_, 'TGL_STOCK_TAKING', newrec_.tgl_stock_taking); EXCEPTION WHEN value_error THEN Error_SYS.Item_Format(lu_name_, name_, value_); END Unpack_Check_Insert___; PROCEDURE Insert___ ( objid_ OUT VARCHAR2, objversion_ OUT VARCHAR2, newrec_ IN OUT &TABLE%ROWTYPE, attr_ IN OUT VARCHAR2 ) IS BEGIN newrec_.rowversion := sysdate; objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); INSERT INTO stock_taking_unit_tab ( company, stock_taking_unit_id, tgl_stock_taking, tgl_start, tgl_selesai, created_by, created_date, submit_by, submit_date, approved_by, approved_date, rejected_by, rejected_date, cabang_id, rowversion, rowstate) VALUES ( newrec_.company, newrec_.stock_taking_unit_id, newrec_.tgl_stock_taking, newrec_.tgl_start, newrec_.tgl_selesai, newrec_.created_by, newrec_.created_date, newrec_.submit_by, newrec_.submit_date, newrec_.approved_by, newrec_.approved_date, newrec_.rejected_by, newrec_.rejected_date, newrec_.cabang_id, newrec_.rowversion, 'Open'); Finite_State_Init___(newrec_, attr_); objid_ := DBMS_sql.last_row_id; -- SELECT &OBJID -- INTO objid_ -- FROM &TABLE -- WHERE company = newrec_.company -- AND stock_taking_unit_id = newrec_.stock_taking_unit_id; EXCEPTION WHEN dup_val_on_index THEN Error_SYS.Record_Exist(lu_name_); END Insert___; ----------------------------------------------------------------------------- -------------------- IMPLEMENTATION BASE METHODS FOR UPDATE ----------------- ----------------------------------------------------------------------------- -- Unpack_Check_Update___ -- Unpack the attribute list, check all attributes from the client -- and generate all default values before modifying the object. -- -- Update___ -- Update an existing LU-instance in the database and return the -- the new OBJVERSION. ----------------------------------------------------------------------------- PROCEDURE Unpack_Check_Update___ ( attr_ IN OUT VARCHAR2, newrec_ IN OUT &TABLE%ROWTYPE, objid_ IN VARCHAR2 ) IS ptr_ NUMBER; name_ VARCHAR2(30); value_ VARCHAR2(2000); BEGIN ptr_ := NULL; WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP IF (name_ = 'COMPANY') THEN Error_SYS.Item_Update(lu_name_, 'COMPANY'); ELSIF (name_ = 'STOCK_TAKING_UNIT_ID') THEN Error_SYS.Item_Update(lu_name_, 'STOCK_TAKING_UNIT_ID'); ELSIF (name_ = 'TGL_STOCK_TAKING') THEN newrec_.tgl_stock_taking := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'TGL_START') THEN newrec_.tgl_start := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'TGL_SELESAI') THEN newrec_.tgl_selesai := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'CREATED_BY') THEN newrec_.created_by := value_; ELSIF (name_ = 'CREATED_DATE') THEN newrec_.created_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'SUBMIT_BY') THEN newrec_.submit_by := value_; ELSIF (name_ = 'SUBMIT_DATE') THEN newrec_.submit_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'APPROVED_BY') THEN newrec_.approved_by := value_; ELSIF (name_ = 'APPROVED_DATE') THEN newrec_.approved_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'REJECTED_BY') THEN newrec_.rejected_by := value_; ELSIF (name_ = 'REJECTED_DATE') THEN newrec_.rejected_date := Client_SYS.Attr_Value_To_Date(value_); ELSIF (name_ = 'CABANG_ID') THEN newrec_.cabang_id := value_; IF (value_ IS NOT NULL) THEN Cabang_API.Exist(newrec_.company, newrec_.cabang_id); END IF; ELSE Error_SYS.Item_Not_Exist(lu_name_, name_, value_); END IF; END LOOP; Client_SYS.Clear_Attr(attr_); Error_SYS.Check_Not_Null(lu_name_, 'TGL_STOCK_TAKING', newrec_.tgl_stock_taking); EXCEPTION WHEN value_error THEN Error_SYS.Item_Format(lu_name_, name_, value_); END Unpack_Check_Update___; PROCEDURE Update___ ( objid_ IN VARCHAR2, oldrec_ IN &TABLE%ROWTYPE, newrec_ IN OUT &TABLE%ROWTYPE, attr_ IN OUT VARCHAR2, objversion_ IN OUT VARCHAR2, by_keys_ IN BOOLEAN DEFAULT FALSE ) IS BEGIN newrec_.rowversion := sysdate; objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS'); IF by_keys_ THEN UPDATE stock_taking_unit_tab SET company = newrec_.company, stock_taking_unit_id = newrec_.stock_taking_unit_id, tgl_stock_taking = newrec_.tgl_stock_taking, tgl_start = newrec_.tgl_start, tgl_selesai = newrec_.tgl_selesai, created_by = newrec_.created_by, created_date = newrec_.created_date, submit_by = newrec_.submit_by, submit_date = newrec_.submit_date, approved_by = newrec_.approved_by, approved_date = newrec_.approved_date, rejected_by = newrec_.rejected_by, rejected_date = newrec_.rejected_date, cabang_id = newrec_.cabang_id, rowversion = newrec_.rowversion WHERE company = newrec_.company AND stock_taking_unit_id = newrec_.stock_taking_unit_id; ELSE UPDATE stock_taking_unit_tab SET company = newrec_.company, stock_taking_unit_id = newrec_.stock_taking_unit_id, tgl_stock_taking = newrec_.tgl_stock_taking, tgl_start = newrec_.tgl_start, tgl_selesai = newrec_.tgl_selesai, created_by = newrec_.created_by, created_date = newrec_.created_date, submit_by = newrec_.submit_by, submit_date = newrec_.submit_date, approved_by = newrec_.approved_by, approved_date = newrec_.approved_date, rejected_by = newrec_.rejected_by, rejected_date = newrec_.rejected_date, cabang_id = newrec_.cabang_id, rowversion = newrec_.rowversion WHERE &OBJID = objid_; END IF; EXCEPTION WHEN dup_val_on_index THEN Error_SYS.Record_Exist(lu_name_); END Update___; ----------------------------------------------------------------------------- -------------------- IMPLEMENTATION BASE METHODS FOR DELETE ----------------- ----------------------------------------------------------------------------- -- Check_Delete___ -- Checks whether a specific LU-record may be removed or not. -- The procedure should check business rules like attribute values -- as well as database constraints (defined or not). -- -- Delete___ -- Deletion of the specific LU-object from the database. ----------------------------------------------------------------------------- PROCEDURE Check_Delete___ ( remrec_ IN &TABLE%ROWTYPE ) IS key_ VARCHAR2(2000); BEGIN key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^'; Reference_SYS.Check_Restricted_Delete(lu_name_, key_); END Check_Delete___; PROCEDURE Delete___ ( objid_ IN VARCHAR2, remrec_ IN &TABLE%ROWTYPE ) IS key_ VARCHAR2(2000); BEGIN key_ := remrec_.company || '^' || remrec_.stock_taking_unit_id || '^'; Reference_SYS.Do_Cascade_Delete(lu_name_, key_); DELETE FROM stock_taking_unit_tab WHERE &OBJID = objid_; END Delete___; ----------------------------------------------------------------------------- -------------------- PRIVATE BASE METHODS ----------------------------------- ----------------------------------------------------------------------------- -- Lock__ -- Client-support to lock a specific instance of the logical unit. -- -- New__ -- Client-support interface to create LU instances. -- action_ = 'PREPARE' -- Default values and handle of information to client. -- The default values are set in procedure Prepare_Insert___. -- action_ = 'CHECK' -- Check all attributes before creating new object and handle of -- information to client. The attribute list is unpacked, checked -- and prepared (defaults) in procedure Unpack_Check_Insert___. -- action_ = 'DO' -- Creation of new instances of the logical unit and handle of -- information to client. The attribute list is unpacked, checked -- and prepared (defaults) in procedure Unpack_Check_Insert___ -- before calling procedure Insert___. -- -- Modify__ -- Client-support interface to modify attributes for LU instances. -- action_ = 'CHECK' -- Check all attributes before modifying an existing object and -- handle of information to client. The attribute list is unpacked, -- checked and prepared(defaults) in procedure Unpack_Check_Update___. -- action_ = 'DO' -- Modification of an existing instance of the logical unit. The -- procedure unpacks the attributes, checks all values before -- procedure Update___ is called. -- -- Remove__ -- Client-support interface to remove LU instances. -- action_ = 'CHECK' -- Check whether a specific LU-instance may be removed or not. -- The procedure fetches the complete record by calling procedure -- Get_Object_By_Id___. Then the check is made by calling procedure -- Check_Delete___. -- action_ = 'DO' -- Remove an existing instance of the logical unit. The procedure -- fetches the complete LU-record, checks for a delete and then -- deletes the record by calling procedure Delete___. ----------------------------------------------------------------------------- PROCEDURE Lock__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN VARCHAR2 ) IS dummy_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__'); dummy_ := Lock_By_Id___(objid_, objversion_); info_ := Client_SYS.Get_All_Info; END Lock__; PROCEDURE New__ ( info_ OUT VARCHAR2, objid_ OUT VARCHAR2, objversion_ OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS newrec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'New__'); IF (action_ = 'PREPARE') THEN Prepare_Insert___(attr_); ELSIF (action_ = 'CHECK') THEN Unpack_Check_Insert___(attr_, newrec_); ELSIF (action_ = 'DO') THEN Unpack_Check_Insert___(attr_, newrec_); Insert___(objid_, objversion_, newrec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END New__; PROCEDURE Modify__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS oldrec_ &TABLE%ROWTYPE; newrec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__'); IF (action_ = 'CHECK') THEN newrec_ := Get_Object_By_Id___(objid_); Unpack_Check_Update___(attr_, newrec_, objid_); ELSIF (action_ = 'DO') THEN oldrec_ := Lock_By_Id___(objid_, objversion_); newrec_ := oldrec_; Unpack_Check_Update___(attr_, newrec_, objid_); Update___(objid_, oldrec_, newrec_, attr_, objversion_); END IF; info_ := Client_SYS.Get_All_Info; END Modify__; PROCEDURE Remove__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN VARCHAR2, action_ IN VARCHAR2 ) IS remrec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__'); IF (action_ = 'CHECK') THEN remrec_ := Get_Object_By_Id___(objid_); Check_Delete___(remrec_); ELSIF (action_ = 'DO') THEN remrec_ := Lock_By_Id___(objid_, objversion_); Check_Delete___(remrec_); Delete___(objid_, remrec_); END IF; info_ := Client_SYS.Get_All_Info; END Remove__; ----------------------------------------------------------------------------- -------------------- PUBLIC BASE METHODS ------------------------------------ ----------------------------------------------------------------------------- -- Exist -- Checks if given pointer (e.g. primary key) to an instance of this -- logical unit exists. If not an exception will be raised. ----------------------------------------------------------------------------- PROCEDURE Exist ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) IS BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE); IF (NOT Check_Exist___(company_, stock_taking_unit_id_)) THEN Error_SYS.Record_Not_Exist(lu_name_); END IF; END Exist; ----------------------------------------------------------------------------- -------------------- PUBLIC TRANSLATION METHODS ----------------------------- ----------------------------------------------------------------------------- PROCEDURE Language_Refreshed IS BEGIN active_state_list_ := Language_SYS.Translate_State_(lu_name_, client_state_list_); END Language_Refreshed; ----------------------------------------------------------------------------- -------------------- LU SPECIFIC IMPLEMENTATION METHODS --------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------------------- LU SPECIFIC PRIVATE METHODS ---------------------------- ----------------------------------------------------------------------------- PROCEDURE Submit__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS rec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Submit__'); IF (action_ = 'CHECK') THEN NULL; ELSIF (action_ = 'DO') THEN rec_ := Lock_By_Id___(objid_, objversion_); Finite_State_Machine___(rec_, 'Submit', attr_); objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); Finite_State_Add_To_Attr___(rec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END Submit__; PROCEDURE Cancel_Submit__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS rec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Cancel_Submit__'); IF (action_ = 'CHECK') THEN NULL; ELSIF (action_ = 'DO') THEN rec_ := Lock_By_Id___(objid_, objversion_); Finite_State_Machine___(rec_, 'CancelSubmit', attr_); objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); Finite_State_Add_To_Attr___(rec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END Cancel_Submit__; PROCEDURE Approve__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS rec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Approve__'); IF (action_ = 'CHECK') THEN NULL; ELSIF (action_ = 'DO') THEN rec_ := Lock_By_Id___(objid_, objversion_); Finite_State_Machine___(rec_, 'Approve', attr_); objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); Finite_State_Add_To_Attr___(rec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END Approve__; PROCEDURE Reject__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS rec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Reject__'); IF (action_ = 'CHECK') THEN NULL; ELSIF (action_ = 'DO') THEN rec_ := Lock_By_Id___(objid_, objversion_); Finite_State_Machine___(rec_, 'Reject', attr_); objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); Finite_State_Add_To_Attr___(rec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END Reject__; PROCEDURE Cancel_Approve__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS rec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Cancel_Approve__'); IF (action_ = 'CHECK') THEN NULL; ELSIF (action_ = 'DO') THEN rec_ := Lock_By_Id___(objid_, objversion_); Finite_State_Machine___(rec_, 'CancelApprove', attr_); objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); Finite_State_Add_To_Attr___(rec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END Cancel_Approve__; PROCEDURE Re_Submit__ ( info_ OUT VARCHAR2, objid_ IN VARCHAR2, objversion_ IN OUT VARCHAR2, attr_ IN OUT VARCHAR2, action_ IN VARCHAR2 ) IS rec_ &TABLE%ROWTYPE; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Re_Submit__'); IF (action_ = 'CHECK') THEN NULL; ELSIF (action_ = 'DO') THEN rec_ := Lock_By_Id___(objid_, objversion_); Finite_State_Machine___(rec_, 'ReSubmit', attr_); objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS'); Finite_State_Add_To_Attr___(rec_, attr_); END IF; info_ := Client_SYS.Get_All_Info; END Re_Submit__; ----------------------------------------------------------------------------- -------------------- LU SPECIFIC PROTECTED METHODS -------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- -------------------- LU SPECIFIC PUBLIC METHODS ----------------------------- ----------------------------------------------------------------------------- FUNCTION Get_Tgl_Stock_Taking ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..tgl_stock_taking%TYPE; CURSOR get_attr IS SELECT tgl_stock_taking FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Tgl_Stock_Taking; FUNCTION Get_Tgl_Start ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..tgl_start%TYPE; CURSOR get_attr IS SELECT tgl_start FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Tgl_Start; FUNCTION Get_Tgl_Selesai ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..tgl_selesai%TYPE; CURSOR get_attr IS SELECT tgl_selesai FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Tgl_Selesai; FUNCTION Get_Created_By ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 IS temp_ &TABLE..created_by%TYPE; CURSOR get_attr IS SELECT created_by FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Created_By; FUNCTION Get_Created_Date ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..created_date%TYPE; CURSOR get_attr IS SELECT created_date FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Created_Date; FUNCTION Get_Submit_By ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 IS temp_ &TABLE..submit_by%TYPE; CURSOR get_attr IS SELECT submit_by FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Submit_By; FUNCTION Get_Submit_Date ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..submit_date%TYPE; CURSOR get_attr IS SELECT submit_date FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Submit_Date; FUNCTION Get_Approved_By ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 IS temp_ &TABLE..approved_by%TYPE; CURSOR get_attr IS SELECT approved_by FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Approved_By; FUNCTION Get_Approved_Date ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..approved_date%TYPE; CURSOR get_attr IS SELECT approved_date FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Approved_Date; FUNCTION Get_Rejected_By ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 IS temp_ &TABLE..rejected_by%TYPE; CURSOR get_attr IS SELECT rejected_by FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Rejected_By; FUNCTION Get_Rejected_Date ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN DATE IS temp_ &TABLE..rejected_date%TYPE; CURSOR get_attr IS SELECT rejected_date FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Rejected_Date; FUNCTION Get_Cabang_Id ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN VARCHAR2 IS temp_ &TABLE..cabang_id%TYPE; CURSOR get_attr IS SELECT cabang_id FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get_Cabang_Id; FUNCTION Get ( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2 ) RETURN Public_Rec IS temp_ Public_Rec; CURSOR get_attr IS SELECT tgl_stock_taking, tgl_start, tgl_selesai, created_by, created_date, submit_by, submit_date, approved_by, approved_date, rejected_by, rejected_date, cabang_id FROM &TABLE WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; BEGIN OPEN get_attr; FETCH get_attr INTO temp_; CLOSE get_attr; RETURN temp_; END Get; PROCEDURE Create_Update_Record( company_ IN VARCHAR2, stock_taking_unit_id_ IN OUT VARCHAR2, tgl_stock_taking_ IN DATE, tgl_start_ IN DATE, tgl_selesai_ IN DATE, cabang_id_ IN VARCHAR2) IS attr_ VARCHAR2(2000); objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); CURSOR get_id IS select NVL(max(TO_NUMBER(stock_taking_unit_id)),0) + 1 from &VIEW. where company = company_; temp_ NUMBER; BEGIN General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Update_Record'); Get_Id_Version_By_Keys___ (objid_, objversion_, company_,stock_taking_unit_id_); IF objid_ IS NULL THEN OPEN get_id; FETCH get_id into temp_; CLOSE get_id; stock_taking_unit_id_ := temp_; Client_SYS.Add_To_Attr('COMPANY', company_, attr_); Client_SYS.Add_To_Attr('STOCK_TAKING_UNIT_ID', stock_taking_unit_id_, attr_); END IF; Client_SYS.Add_To_Attr('TGL_STOCK_TAKING', tgl_stock_taking_, attr_); Client_SYS.Add_To_Attr('TGL_START', tgl_start_, attr_); Client_SYS.Add_To_Attr('TGL_SELESAI', tgl_selesai_, attr_); Client_SYS.Add_To_Attr('CABANG_ID', cabang_id_, attr_); IF objid_ IS NULL THEN Client_SYS.Add_To_Attr('CREATED_DATE', sysdate, attr_); Client_SYS.Add_To_Attr('CREATED_BY', Utils_API.Get_Fnd_User, attr_); New__(info_, objid_, objversion_, attr_, 'DO'); ELSE Modify__(info_,objid_,objversion_,attr_,'DO'); END IF; END Create_Update_Record; PROCEDURE Remove_Record( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Remove__(info_, objid_, objversion_, 'DO'); END Remove_Record; PROCEDURE Call_Submit( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); state_ VARCHAR2(100) := Stock_Taking_Unit_API.Get_Status_Stock_Taking(company_,stock_taking_unit_id_); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); IF(state_ = 'Submitted') THEN Error_SYS.Record_General(lu_name_,'This data already submitted'); ELSE Submit__(info_, objid_, objversion_,attr_, 'DO'); END IF; END Call_Submit; PROCEDURE Call_Re_Submit( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Re_Submit__(info_, objid_, objversion_,attr_, 'DO'); END Call_Re_Submit; PROCEDURE Call_Cancel_Submit( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Cancel_Submit__(info_, objid_, objversion_,attr_, 'DO'); END Call_Cancel_Submit; PROCEDURE Call_Approve( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Approve__(info_, objid_, objversion_,attr_, 'DO'); END Call_Approve; PROCEDURE Call_Cancel_Approve( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Cancel_Approve__(info_, objid_, objversion_,attr_, 'DO'); END Call_Cancel_Approve; PROCEDURE Call_Reject( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Approve__(info_, objid_, objversion_,attr_, 'DO'); END Call_Reject; PROCEDURE Update_Tgl_Selesai( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2, tgl_selesai_ IN DATE) IS objid_ VARCHAR2(200); objversion_ VARCHAR2(2000); info_ VARCHAR2(2000); attr_ VARCHAR2(2000); BEGIN Get_Id_Version_By_Keys___ (objid_, objversion_, company_, stock_taking_unit_id_); Client_SYS.Add_To_Attr('TGL_SELESAI', tgl_selesai_, attr_); Modify__(info_,objid_,objversion_,attr_,'DO'); END Update_Tgl_Selesai; FUNCTION Get_Status_Stock_Taking( company_ IN VARCHAR2, stock_taking_unit_id_ IN VARCHAR2) RETURN VARCHAR2 IS CURSOR get_state IS select state from &VIEW. WHERE company = company_ AND stock_taking_unit_id = stock_taking_unit_id_; temp_ VARCHAR2(100); BEGIN OPEN get_state; FETCH get_state INTO temp_; CLOSE get_state; RETURN temp_; END Get_Status_Stock_Taking; ----------------------------------------------------------------------------- -------------------- FOUNDATION1 METHODS ------------------------------------ ----------------------------------------------------------------------------- -- Init -- Dummy procedure that can be called at database startup to ensure that -- this package is loaded into memory for performance reasons only. ----------------------------------------------------------------------------- PROCEDURE Init IS BEGIN NULL; END Init; END &PKG; / SHOW ERROR -----------------------------------------------------------------------------