feat: agregar generación de reportes PDF y recomendaciones para PDVs sin asignar
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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()
|
||||
));
|
||||
Reference in New Issue
Block a user