103 lines
4.6 KiB
SQL
103 lines
4.6 KiB
SQL
create table if not exists public.rutero_proyecto_empleados (
|
|
id uuid primary key default gen_random_uuid(),
|
|
proyecto_id uuid not null references public.rutero_proyectos(id) on delete cascade,
|
|
employee_code text not null,
|
|
nombre text not null,
|
|
usuario text,
|
|
email text,
|
|
perfil text,
|
|
pais text,
|
|
regional text,
|
|
latitud double precision not null,
|
|
longitud double precision not null,
|
|
horas_por_dia numeric(5,2) not null default 8,
|
|
dias_por_semana integer not null default 5,
|
|
jornada_codigo text not null default 'LUN_VIE_40',
|
|
horas_descanso_por_dia numeric(4,2) not null default 1,
|
|
dias_descanso jsonb not null default '[]'::jsonb,
|
|
visitas_maximas_por_dia integer not null default 3,
|
|
activo boolean not null default true,
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now(),
|
|
unique (proyecto_id, employee_code),
|
|
constraint rutero_proyecto_empleados_jornada_valida check (jornada_codigo in ('LUN_DOM_44', 'LUN_SAB_40', 'LUN_SAB_44', 'LUN_VIE_40')),
|
|
constraint rutero_proyecto_empleados_descanso_valido check (horas_descanso_por_dia >= 0 and horas_descanso_por_dia <= 3),
|
|
constraint rutero_proyecto_empleados_visitas_validas check (visitas_maximas_por_dia > 0)
|
|
);
|
|
|
|
create index if not exists rutero_proyecto_empleados_proyecto_idx
|
|
on public.rutero_proyecto_empleados (proyecto_id);
|
|
|
|
-- Preserve current behavior once: copy the existing global catalog into every
|
|
-- existing project. From this point onward each copy is edited independently.
|
|
insert into public.rutero_proyecto_empleados (
|
|
proyecto_id, employee_code, nombre, usuario, email, perfil, pais, regional,
|
|
latitud, longitud, horas_por_dia, dias_por_semana, jornada_codigo,
|
|
horas_descanso_por_dia, dias_descanso, visitas_maximas_por_dia, activo
|
|
)
|
|
select proyecto.id, empleado.employee_code, empleado.nombre, empleado.usuario,
|
|
empleado.email, empleado.perfil, empleado.pais, empleado.regional,
|
|
empleado.latitud, empleado.longitud, empleado.horas_por_dia,
|
|
empleado.dias_por_semana, empleado.jornada_codigo,
|
|
empleado.horas_descanso_por_dia, empleado.dias_descanso,
|
|
empleado.visitas_maximas_por_dia, empleado.activo
|
|
from public.rutero_proyectos proyecto
|
|
cross join public.rutero_empleados empleado
|
|
on conflict (proyecto_id, employee_code) do nothing;
|
|
|
|
alter table public.rutero_proyecto_empleados enable row level security;
|
|
|
|
drop policy if exists "Consultar empleados de proyectos propios" on public.rutero_proyecto_empleados;
|
|
drop policy if exists "Crear empleados en proyectos propios" on public.rutero_proyecto_empleados;
|
|
drop policy if exists "Editar empleados de proyectos propios" on public.rutero_proyecto_empleados;
|
|
drop policy if exists "Eliminar empleados de proyectos propios" on public.rutero_proyecto_empleados;
|
|
|
|
create policy "Consultar empleados de proyectos propios"
|
|
on public.rutero_proyecto_empleados for select to authenticated
|
|
using (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
));
|
|
|
|
create policy "Crear empleados en proyectos propios"
|
|
on public.rutero_proyecto_empleados for insert to authenticated
|
|
with check (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
));
|
|
|
|
create policy "Editar empleados de proyectos propios"
|
|
on public.rutero_proyecto_empleados for update to authenticated
|
|
using (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
))
|
|
with check (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
));
|
|
|
|
create policy "Eliminar empleados de proyectos propios"
|
|
on public.rutero_proyecto_empleados for delete to authenticated
|
|
using (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
));
|
|
|
|
create unique index if not exists rutero_proyecto_pdvs_proyecto_pdv_idx
|
|
on public.rutero_proyecto_pdvs (proyecto_id, pdv_id);
|
|
|
|
alter table public.rutero_proyecto_pdvs enable row level security;
|
|
|
|
drop policy if exists "Gestionar PDVs de proyectos propios" on public.rutero_proyecto_pdvs;
|
|
create policy "Gestionar PDVs de proyectos propios"
|
|
on public.rutero_proyecto_pdvs for all to authenticated
|
|
using (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
))
|
|
with check (exists (
|
|
select 1 from public.rutero_proyectos proyecto
|
|
where proyecto.id = proyecto_id and proyecto.propietario_id = auth.uid()
|
|
));
|