2024-01-31 22:06:45 +00:00
|
|
|
-- Deploy camper:set_campsite_type_cost to pg
|
|
|
|
-- requires: roles
|
|
|
|
-- requires: schema_camper
|
|
|
|
-- requires: campsite_type_cost
|
|
|
|
-- requires: parse_price
|
2023-10-01 19:14:39 +00:00
|
|
|
|
|
|
|
begin;
|
|
|
|
|
2024-01-31 22:06:45 +00:00
|
|
|
set search_path to camper, public;
|
|
|
|
|
Compute and show the “cart” for the booking form
I have to ask number and age ranges of hosts of guests for all campsite
types, not only those that have price options for adults, children, etc.
because i must compute the tourist tax for adults. These numbers will
be used to generate de rows for guests when actually creating the
booking, which is not done already.
To satisfy the campsite types that do have a price per guest, not only
per night, i had to add the prices for each range in the
campsite_type_cost relation. If a campsite type does not have price
per person, then that should be zero; the website then does not display
the price.
The minimal price for any campsite type is one adult for one night,
thus to compute the price i need at least the campsite type, the dates,
and the number of adults, that has a minimum of one. I changed the
order of the form to ask for these values first, so i can compute the
initial price as soon as possible. To help further, i show the
<fieldset>s progressively when visitors select options.
2024-02-04 05:37:25 +00:00
|
|
|
drop function if exists set_campsite_type_cost(uuid, integer, text, text, text, text);
|
2024-01-31 22:06:45 +00:00
|
|
|
|
|
|
|
create or replace function set_campsite_type_cost(slug uuid, season_id integer, min_nights integer, cost_per_night text, decimal_places integer default 2) returns void as
|
|
|
|
$$
|
|
|
|
insert into campsite_type_cost (campsite_type_id, season_id, min_nights, cost_per_night)
|
|
|
|
select campsite_type_id, season_id, min_nights, parse_price(cost_per_night, decimal_places)
|
|
|
|
from campsite_type
|
|
|
|
where campsite_type.slug = set_campsite_type_cost.slug
|
|
|
|
on conflict (campsite_type_id, season_id) do update
|
|
|
|
set min_nights = excluded.min_nights
|
|
|
|
, cost_per_night = excluded.cost_per_night
|
|
|
|
;
|
|
|
|
$$
|
|
|
|
language sql
|
|
|
|
;
|
|
|
|
|
|
|
|
revoke execute on function set_campsite_type_cost(uuid, integer, integer, text, integer) from public;
|
|
|
|
grant execute on function set_campsite_type_cost(uuid, integer, integer, text, integer) to admin;
|
2023-10-01 19:14:39 +00:00
|
|
|
|
|
|
|
commit;
|