76 lines
2.0 KiB
PL/PgSQL
76 lines
2.0 KiB
PL/PgSQL
-- Deploy camper:check_in_guests to pg
|
|
-- requires: roles
|
|
-- requires: schema_camper
|
|
-- requires: booking
|
|
-- requires: booking_guest
|
|
-- requires: checked_in_guest
|
|
-- requires: extension_pg_libphonenumber
|
|
|
|
begin;
|
|
|
|
set search_path to camper, public;
|
|
|
|
create or replace function check_in_guests(bid integer, guests checked_in_guest[]) returns void as
|
|
$$
|
|
insert into booking_guest
|
|
( booking_id
|
|
, id_document_type_id
|
|
, id_document_number
|
|
, id_document_issue_date
|
|
, given_name
|
|
, first_surname
|
|
, second_surname
|
|
, sex_id
|
|
, birthdate
|
|
, country_code
|
|
, phone
|
|
, address
|
|
)
|
|
select bid
|
|
, id_document_type_id
|
|
, id_document_number
|
|
, id_document_issue_date
|
|
, given_name
|
|
, first_surname
|
|
, second_surname
|
|
, sex_id
|
|
, birthdate
|
|
, country_code
|
|
, case when phone is null or phone = '' then null else parse_packed_phone_number(phone, country_code) end
|
|
, address
|
|
from unnest(guests) as guest
|
|
on conflict (booking_id, id_document_type_id, id_document_number) do update
|
|
set id_document_type_id = excluded.id_document_type_id
|
|
, id_document_number = excluded.id_document_number
|
|
, id_document_issue_date = excluded.id_document_issue_date
|
|
, given_name = excluded.given_name
|
|
, first_surname = excluded.first_surname
|
|
, second_surname = excluded.second_surname
|
|
, sex_id = excluded.sex_id
|
|
, birthdate = excluded.birthdate
|
|
, country_code = excluded.country_code
|
|
, phone = excluded.phone
|
|
, address = excluded.address
|
|
, updated_at = current_timestamp
|
|
;
|
|
|
|
delete from booking_guest
|
|
where booking_id = bid
|
|
and updated_at < current_timestamp
|
|
;
|
|
|
|
update booking
|
|
set booking_status = 'checked-in'
|
|
where booking_id = bid
|
|
and booking_status in ('created', 'confirmed')
|
|
;
|
|
$$
|
|
language sql
|
|
;
|
|
|
|
revoke execute on function check_in_guests(integer, checked_in_guest[]) from public;
|
|
grant execute on function check_in_guests(integer, checked_in_guest[]) to employee;
|
|
grant execute on function check_in_guests(integer, checked_in_guest[]) to admin;
|
|
|
|
commit;
|