camper/deploy/edit_booking_from_payment.sql

93 lines
2.2 KiB
PL/PgSQL

-- Deploy camper:edit_booking_from_payment to pg
-- requires: roles
-- requires: schema_camper
-- requires: booking
-- requires: booking__payment_fields
-- requires: booking__stay
-- requires: booking_option
-- requires: payment
-- requires: payment__acsi_card
-- requires: payment_option
begin;
set search_path to camper, public;
create or replace function edit_booking_from_payment(booking_slug uuid, payment_slug uuid) returns integer as
$$
declare
bid integer;
begin
with p as (
select company_id
, campsite_type_id
, daterange(arrival_date, departure_date) as stay
, subtotal_nights
, number_adults
, subtotal_adults
, number_teenagers
, subtotal_teenagers
, number_children
, subtotal_children
, number_dogs
, subtotal_dogs
, subtotal_tourist_tax
, total
, currency_code
, zone_preferences
, acsi_card
from payment
where payment.slug = payment_slug
)
update booking
set company_id = p.company_id
, campsite_type_id = p.campsite_type_id
, stay = p.stay
, subtotal_nights = p.subtotal_nights
, number_adults = p.number_adults
, subtotal_adults = p.subtotal_adults
, number_teenagers = p.number_teenagers
, subtotal_teenagers = p.subtotal_teenagers
, number_children = p.number_children
, subtotal_children = p.subtotal_children
, number_dogs = p.number_dogs
, subtotal_dogs = p.subtotal_dogs
, subtotal_tourist_tax = p.subtotal_tourist_tax
, total = p.total
, currency_code = p.currency_code
, zone_preferences = p.zone_preferences
, acsi_card = p.acsi_card
from p
where slug = booking_slug
returning booking_id into bid;
delete from booking_option
where booking_id = bid;
insert into booking_option
( booking_id
, campsite_type_option_id
, units
, subtotal
)
select bid
, campsite_type_option_id
, units
, subtotal
from payment_option
join payment using (payment_id)
where payment.slug = payment_slug
;
return bid;
end;
$$
language plpgsql
;
revoke execute on function edit_booking_from_payment(uuid, uuid) from public;
grant execute on function edit_booking_from_payment(uuid, uuid) to employee;
grant execute on function edit_booking_from_payment(uuid, uuid) to admin;
commit;