Versión inicial de Seguimiento de Impuestos GLM
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
-- Seguimiento de Impuestos GLM
|
||||
-- Actualización para consultar, editar o eliminar eventos desde la app.
|
||||
-- Los eventos quedan bloqueados automáticamente después del primer aviso enviado.
|
||||
-- Ejecutar una sola vez si ya se ejecutó el script completo anteriormente.
|
||||
|
||||
begin;
|
||||
|
||||
create or replace function public.tax_obligation_delivery_status()
|
||||
returns table (
|
||||
obligation_id uuid,
|
||||
has_sent_notification boolean,
|
||||
first_sent_at timestamptz,
|
||||
sent_notification_count bigint
|
||||
)
|
||||
language sql
|
||||
stable
|
||||
security definer
|
||||
set search_path = ''
|
||||
as $$
|
||||
select
|
||||
obligation.id as obligation_id,
|
||||
count(log.id) filter (where log.status = 'sent') > 0 as has_sent_notification,
|
||||
min(log.sent_at) filter (where log.status = 'sent') as first_sent_at,
|
||||
count(log.id) filter (where log.status = 'sent') as sent_notification_count
|
||||
from public.tax_obligations obligation
|
||||
left join public.tax_notification_log log
|
||||
on log.obligation_id = obligation.id
|
||||
where obligation.active = true
|
||||
and public.has_tax_calendar_access()
|
||||
group by obligation.id;
|
||||
$$;
|
||||
|
||||
revoke all on function public.tax_obligation_delivery_status()
|
||||
from public, anon;
|
||||
grant execute on function public.tax_obligation_delivery_status()
|
||||
to authenticated;
|
||||
|
||||
create or replace function public.tax_prevent_sent_obligation_changes()
|
||||
returns trigger
|
||||
language plpgsql
|
||||
security definer
|
||||
set search_path = ''
|
||||
as $$
|
||||
begin
|
||||
if exists (
|
||||
select 1
|
||||
from public.tax_notification_log log
|
||||
where log.obligation_id = old.id
|
||||
and log.status = 'sent'
|
||||
) and (
|
||||
new.due_date is distinct from old.due_date
|
||||
or new.description is distinct from old.description
|
||||
or new.category is distinct from old.category
|
||||
or new.country_id is distinct from old.country_id
|
||||
or new.active is distinct from old.active
|
||||
) then
|
||||
raise exception using
|
||||
errcode = 'P0001',
|
||||
message = 'Esta obligación ya generó avisos y no puede modificarse ni eliminarse.';
|
||||
end if;
|
||||
|
||||
return new;
|
||||
end;
|
||||
$$;
|
||||
|
||||
drop trigger if exists tax_obligations_lock_after_sent_trigger
|
||||
on public.tax_obligations;
|
||||
|
||||
create trigger tax_obligations_lock_after_sent_trigger
|
||||
before update on public.tax_obligations
|
||||
for each row execute function public.tax_prevent_sent_obligation_changes();
|
||||
|
||||
commit;
|
||||
Reference in New Issue
Block a user