diff --git a/demo/demo.sql b/demo/demo.sql index f65aa5b..1943593 100644 --- a/demo/demo.sql +++ b/demo/demo.sql @@ -1487,23 +1487,34 @@ select translate_surroundings_ad(52, 'es', '¡Ven a hacer barranquismo en Sadern select translate_surroundings_ad(52, 'fr', 'Venez faire du canyoning à Sadernes !', 'Réservez votre journée'); alter table booking alter column booking_id restart with 122; - -insert into booking (company_id, campsite_type_id, campsite_id, holder_name, stay, number_dogs, acsi_card, booking_status) -values (52, 72, null, 'Juli Verd', daterange((current_date + interval '23 days')::date, (current_date + interval '25 days')::date), 0, false, 'created') - , (52, 72, null, 'Camèlia Vermella', daterange((current_date + interval '7 days')::date, (current_date + interval '8 days')::date), 0, false, 'created') - , (52, 72, 90, 'Margarita Blanca', daterange((current_date + interval '7 days')::date, (current_date + interval '8 days')::date), 0, false, 'invoiced') - , (52, 72, 90, 'Rosa Blava', daterange((current_date + interval '8 days')::date, (current_date + interval '11 days')::date), 0, false, 'checked-in') - , (52, 72, 90, 'Calèndula Groga', daterange((current_date + interval '14 days')::date, (current_date + interval '21 days')::date), 0, false, 'confirmed') - , (52, 72, 91, 'Jacint Violeta', daterange((current_date + interval '9 days')::date, (current_date + interval '13 days')::date), 0, false, 'checked-in') - , (52, 72, 92, 'Hortènsia Grisa', daterange((current_date + interval '4 days')::date, (current_date + interval '8 days')::date), 0, false, 'invoiced') - , (52, 72, 93, 'Pere Gil', daterange((current_date + interval '9 days')::date, (current_date + interval '19 days')::date), 1, true, 'confirmed') - , (52, 72, 94, 'Juli Verd', daterange((current_date + interval '11 days')::date, (current_date + interval '13 days')::date), 0, false, 'confirmed') - , (52, 72, 94, 'Camèlia Vermella', daterange((current_date + interval '13 days')::date, (current_date + interval '15 days')::date), 0, false, 'confirmed') - , (52, 72, 94, 'Valeriana Rosa', daterange((current_date + interval '15 days')::date, (current_date + interval '17 days')::date), 0, false, 'confirmed') - , (52, 72, null, 'Pere Gil', daterange((current_date + interval '24 days')::date, (current_date + interval '25 days')::date), 1, true, 'cancelled') - , (52, 72, 83, 'Valeriana Rosa', daterange((current_date + interval '3 days')::date, (current_date + interval '8 days')::date), 0, true, 'cancelled') +insert into booking (company_id, campsite_type_id, holder_name, stay, number_dogs, acsi_card, booking_status) +values (52, 72, 'Juli Verd', daterange((current_date + interval '23 days')::date, (current_date + interval '25 days')::date), 0, false, 'created') + , (52, 72, 'Camèlia Vermella', daterange((current_date + interval '7 days')::date, (current_date + interval '8 days')::date), 0, false, 'created') + , (52, 72, 'Margarita Blanca', daterange((current_date + interval '7 days')::date, (current_date + interval '8 days')::date), 0, false, 'invoiced') + , (52, 72, 'Rosa Blava', daterange((current_date + interval '8 days')::date, (current_date + interval '11 days')::date), 0, false, 'checked-in') + , (52, 72, 'Calèndula Groga', daterange((current_date + interval '14 days')::date, (current_date + interval '21 days')::date), 0, false, 'confirmed') + , (52, 72, 'Jacint Violeta', daterange((current_date + interval '9 days')::date, (current_date + interval '13 days')::date), 0, false, 'checked-in') + , (52, 72, 'Hortènsia Grisa', daterange((current_date + interval '4 days')::date, (current_date + interval '8 days')::date), 0, false, 'invoiced') + , (52, 72, 'Pere Gil', daterange((current_date + interval '9 days')::date, (current_date + interval '19 days')::date), 1, true, 'confirmed') + , (52, 72, 'Juli Verd', daterange((current_date + interval '11 days')::date, (current_date + interval '13 days')::date), 0, false, 'confirmed') + , (52, 72, 'Camèlia Vermella', daterange((current_date + interval '13 days')::date, (current_date + interval '15 days')::date), 0, false, 'confirmed') + , (52, 72, 'Valeriana Rosa', daterange((current_date + interval '15 days')::date, (current_date + interval '17 days')::date), 0, false, 'confirmed') + , (52, 72, 'Pere Gil', daterange((current_date + interval '24 days')::date, (current_date + interval '25 days')::date), 1, true, 'cancelled') + , (52, 72, 'Valeriana Rosa', daterange((current_date + interval '3 days')::date, (current_date + interval '8 days')::date), 0, true, 'cancelled') ; +insert into booking_campsite (booking_id, campsite_id, stay) +values (124, 90, daterange((current_date + interval '7 days')::date, (current_date + interval '8 days')::date)) + , (124, 94, daterange((current_date + interval '7 days')::date, (current_date + interval '8 days')::date)) + , (125, 90, daterange((current_date + interval '8 days')::date, (current_date + interval '11 days')::date)) + , (126, 90, daterange((current_date + interval '14 days')::date, (current_date + interval '21 days')::date)) + , (127, 91, daterange((current_date + interval '9 days')::date, (current_date + interval '13 days')::date)) + , (128, 92, daterange((current_date + interval '4 days')::date, (current_date + interval '8 days')::date)) + , (129, 93, daterange((current_date + interval '9 days')::date, (current_date + interval '19 days')::date)) + , (130, 94, daterange((current_date + interval '11 days')::date, (current_date + interval '13 days')::date)) + , (131, 94, daterange((current_date + interval '13 days')::date, (current_date + interval '15 days')::date)) + , (132, 94, daterange((current_date + interval '15 days')::date, (current_date + interval '17 days')::date)) +; alter table amenity alter column amenity_id restart with 132; select add_amenity(52, 'camp-esport', 'Camp Esport', '
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque lorem vestibulum enim sollicitudin ornare. Aliquam egestas pretium porttitor. Donec iaculis tempus est, id lobortis risus semper vel. Maecenas ut imperdiet neque. Donec mattis purus felis, vitae interdum risus egestas pharetra. Vestibulum dui neque, condimentum ultrices erat sed, fringilla pharetra ante. Maecenas hendrerit neque mattis risus consectetur euismod. Cras urna metus, bibendum a neque sed, pharetra commodo magna.
', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque lorem vestibulum enim sollicitudin ornare. Aliquam egestas pretium porttitor. Donec iaculis tempus est, id lobortis risus semper vel. Maecenas ut imperdiet neque. Donec mattis purus felis, vitae interdum risus egestas pharetra. Vestibulum dui neque, condimentum ultrices erat sed, fringilla pharetra ante. Maecenas hendrerit neque mattis risus consectetur euismod. Cras urna metus, bibendum a neque sed, pharetra commodo magna.
'); diff --git a/deploy/booking__campsite_id.sql b/deploy/booking__campsite_id.sql deleted file mode 100644 index e16d9d7..0000000 --- a/deploy/booking__campsite_id.sql +++ /dev/null @@ -1,13 +0,0 @@ --- Deploy camper:booking__campsite_id to pg --- requires: booking - -begin; - -set search_path to camper, public; - -alter table booking - add column campsite_id integer references campsite -, add constraint booking_needs_campsite check ( booking_status in ('created', 'cancelled') or campsite_id is not null ) -; - -commit; diff --git a/deploy/booking_campsite.sql b/deploy/booking_campsite.sql new file mode 100644 index 0000000..d77fc25 --- /dev/null +++ b/deploy/booking_campsite.sql @@ -0,0 +1,25 @@ +-- Deploy camper:booking_campsite to pg +-- requires: roles +-- requires: schema_camper +-- requires: booking +-- requires: campsite +-- requires: extension_btree_gist + +begin; + +set search_path to camper, public; + +create table booking_campsite ( + booking_id integer not null references booking, + campsite_id integer not null references campsite, + stay daterange not null, + primary key (booking_id, campsite_id, stay), + exclude using gist (campsite_id with =, stay with &&) +); + +create index booking_campsite_stay_idx on booking_campsite using gist (stay); + +grant select, insert, update, delete on table booking_campsite to employee; +grant select, insert, update, delete on table booking_campsite to admin; + +commit; diff --git a/pkg/campsite/admin.go b/pkg/campsite/admin.go index 20fd947..214cd68 100644 --- a/pkg/campsite/admin.go +++ b/pkg/campsite/admin.go @@ -139,17 +139,17 @@ func collectBookingEntries(ctx context.Context, company *auth.Company, conn *dat lastDay := to.AddDate(0, 1, 0) rows, err := conn.Query(ctx, ` select campsite.label - , lower(stay * daterange($2::date, $3::date)) + , lower(booking_campsite.stay * daterange($2::date, $3::date)) , holder_name , booking_status - , upper(stay * daterange($2::date, $3::date)) - lower(stay * daterange($2::date, $3::date)) - , stay &> daterange($2::date, $3::date) - , stay &< daterange($2::date, $3::date) - from booking + , upper(booking_campsite.stay * daterange($2::date, $3::date)) - lower(booking_campsite.stay * daterange($2::date, $3::date)) + , booking_campsite.stay &> daterange($2::date, $3::date) + , booking_campsite.stay &< daterange($2::date, $3::date) + from booking_campsite + join booking using (booking_id) join campsite using (campsite_id) where booking.company_id = $1 - and stay && daterange($2::date, $3::date) - and booking_status <> 'cancelled' + and booking_campsite.stay && daterange($2::date, $3::date) order by label`, company.ID, from, lastDay) if err != nil { return err diff --git a/revert/booking__campsite_id.sql b/revert/booking__campsite_id.sql deleted file mode 100644 index 643c945..0000000 --- a/revert/booking__campsite_id.sql +++ /dev/null @@ -1,9 +0,0 @@ --- Revert camper:booking__campsite_id from pg - -begin; - -alter table camper.booking -drop column if exists campsite_id -; - -commit; diff --git a/revert/booking_campsite.sql b/revert/booking_campsite.sql new file mode 100644 index 0000000..b445e82 --- /dev/null +++ b/revert/booking_campsite.sql @@ -0,0 +1,7 @@ +-- Revert camper:booking_campsite from pg + +begin; + +drop table if exists camper.booking_campsite; + +commit; diff --git a/sqitch.plan b/sqitch.plan index ecf415c..21aec99 100644 --- a/sqitch.plan +++ b/sqitch.plan @@ -282,4 +282,4 @@ draft_payment [draft_payment@v6] 2024-03-20T17:11:41Z jordi fita mas