aonestar
.public
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
sp_change_departure
Parameters
Name
Type
Mode
register_id
integer
IN
new_departure
date
IN
user_name
text
IN (DEFAULT NULL)
Definition
DECLARE _sqlstate TEXT; _detail TEXT; _hint TEXT; _context TEXT; _msg_text TEXT; _result_code TEXT; _msg_code TEXT; _arrival date; _status char(1); _room_id int; _rateplan_id int; _old_departure date; checkin_data jsonb; verify_result json; BEGIN CALL sp_check_endday_process(); SELECT rg.arrival, rg.departure, rg.status, rg.room_id, rg.rateplan_id FROM registration rg WHERE rg.id = $1 INTO _arrival, _old_departure, _status, _room_id, _rateplan_id; CASE WHEN _old_departure = new_departure THEN RETURN fn_result_error('30132', 'The departure date is already the same'); WHEN _status = 'O' THEN RETURN fn_result_error('30111', 'Guest already checked out'); WHEN _status = 'X' THEN RETURN fn_result_error('30114', 'Check-in is already cancelled'); ELSE END CASE; CALL sp_check_room_activity(_room_id, _arrival, new_departure, register_id => $1); checkin_data := sp_get_guest_inhouse_js($1)::jsonb || '{"keep_original_rate": true}'::jsonb; --checkin_data := jsonb_set(checkin_data, '{keep_original_rate}', to_jsonb(true)); verify_result := sp_verify_rate_and_available($1, _rateplan_id, _room_id, _arrival, new_departure, (checkin_data->>'adult')::int, (checkin_data->>'child')::int, (checkin_data->>'infant')::int, (checkin_data->>'extra_adult')::int, (checkin_data->>'extra_child')::int, (checkin_data->>'extra_infant')::int, checkin_data, true, true ); if verify_result->>'result_code' = '0' then checkin_data := verify_result->'result_data'; UPDATE registration rg SET departure = new_departure, modify_user = $3, modify_time = current_timestamp WHERE rg.id = $1; -- Select result_code, msg_code, result_msg -- from sp_save_registration_rates($1, -- (checkin_data->>'rate_id')::int, -- (checkin_data->>'arrival')::date, -- new_departure, -- checkin_data->'rate_schedule' -- ) -- into _result_code, _msg_code, _msg_text; PERFORM sp_save_registration_rates($1, (checkin_data->>'rate_id')::int, (checkin_data->>'arrival')::date, new_departure, checkin_data->'rate_schedule' ); --if _result_code = '0' then PERFORM sp_log_inhouse($1, 'Change departure', 'Change departure from ' ||to_char(_old_departure, 'dd/MM/yyyy')||' to ' ||to_char(new_departure, 'dd/MM/yyyy'), user_name); RETURN fn_result_success(); --ELSE -- PERFORM sp_raise_error(_msg_code, _msg_text); --END IF; else RETURN verify_result; end if; EXCEPTION WHEN OTHERS THEN GET STACKED DIAGNOSTICS _sqlstate = RETURNED_SQLSTATE, _msg_text = MESSAGE_TEXT, _detail = PG_EXCEPTION_DETAIL, _hint = PG_EXCEPTION_HINT, _context = PG_EXCEPTION_CONTEXT; RETURN fn_handle_error(_sqlstate, _msg_text, _detail, _hint, _context, 'sp_change_departure', jsonb_build_object('register_id',register_id, 'new_departure',new_departure) ); END