view for showing free beds

This commit is contained in:
Jottyfan
2024-02-23 00:58:37 +01:00
parent a6b09fc88b
commit 47c4a1a446
10 changed files with 393 additions and 83 deletions

View File

@ -11,8 +11,8 @@ create table public.t_camp (
fk_document integer references public.t_document(pk),
lock_sales boolean default false not null,
fk_profile integer not null references public.t_profile(pk),
beds_male integer default 0,
beds_female integer default 0,
blocked_beds_male integer default 0,
blocked_beds_female integer default 0
beds_male integer not null default 0,
beds_female integer not null default 0,
blocked_beds_male integer not null default 0,
blocked_beds_female integer not null default 0
);

View File

@ -0,0 +1,38 @@
alter table camp.t_camp add column beds_male integer not null default 0;
alter table camp.t_camp add column beds_female integer not null default 0;
alter table camp.t_camp add column blocked_beds_male integer not null default 0;
alter table camp.t_camp add column blocked_beds_female integer not null default 0;
create or replace view camp.v_camp as
select c.pk,
(c.depart < now()) as is_over,
c.name,
c.arrive,
c.depart,
date_part('isoyear'::text, c.arrive) as year,
l.name as location_name,
c.min_age,
c.max_age,
l.url,
c.price,
c.countries,
c.fk_document,
c.beds_female,
c.beds_male,
c.blocked_beds_female,
c.blocked_beds_male,
count(mp.pk) as used_beds_male,
count(fp.pk) as used_beds_female
from camp.t_camp c
left join camp.t_location l on c.fk_location = l.pk
left join camp.t_person mp on mp.fk_camp = c.pk
and mp.accept = true
and mp.sex = 'male'::enum_sex
and mp.camprole = 'student'::enum_camprole
left join camp.t_person fp on fp.fk_camp = c.pk
and fp.accept = true
and fp.sex = 'female'::enum_sex
and fp.camprole = 'student'::enum_camprole
group by c.pk, c.depart, c.name, c.arrive, l.name, c.min_age, c.max_age, l.url, c.price, c.countries,
c.fk_document, c.beds_female, c.beds_male, c.blocked_beds_female, c.blocked_beds_male;

View File

@ -1,16 +1,33 @@
create view public.v_camp as
select c.pk,
(c.depart < now()) as is_over,
c.name,
c.arrive,
c.depart,
date_part('isoyear'::text, c.arrive) as year,
l.name as location_name,
c.min_age,
c.max_age,
l.url,
c.price,
c.countries,
c.fk_document
from (public.t_camp c
left join public.t_location l on ((c.fk_location = l.pk)));
select c.pk,
(c.depart < now()) as is_over,
c.name,
c.arrive,
c.depart,
date_part('isoyear'::text, c.arrive) as year,
l.name as location_name,
c.min_age,
c.max_age,
l.url,
c.price,
c.countries,
c.fk_document,
c.beds_female,
c.beds_male,
c.blocked_beds_female,
c.blocked_beds_male,
count(mp.pk) as used_beds_male,
count(fp.pk) as used_beds_female
from public.t_camp c
left join public.t_location l on c.fk_location = l.pk
left join public.t_person mp on mp.fk_camp = c.pk
and mp.accept = true
and mp.sex = 'male'::enum_sex
and mp.camprole = 'student'::enum_camprole
left join public.t_person fp on fp.fk_camp = c.pk
and fp.accept = true
and fp.sex = 'female'::enum_sex
and fp.camprole = 'student'::enum_camprole
group by c.pk, c.depart, c.name, c.arrive, l.name, c.min_age, c.max_age, l.url, c.price, c.countries,
c.fk_document, c.beds_female, c.beds_male, c.blocked_beds_female, c.blocked_beds_male;