numerus/deploy/remove_collection.sql

41 lines
1002 B
PL/PgSQL

-- Deploy numerus:remove_collection to pg
-- requires: roles
-- requires: schema_numerus
-- requires: invoice_payment
-- requires: payment
-- requires: payment_attachment
-- requires: update_invoice_collection_status
begin;
set search_path to numerus, public;
create or replace function remove_collection(collection_slug uuid) returns void as
$$
declare
cid integer;
iid integer;
begin
select payment_id into cid from payment where slug = collection_slug;
if not found then
return;
end if;
delete from invoice_payment where payment_id = cid returning invoice_id into iid;
if iid is not null then
perform update_invoice_collection_status(null, iid, 0);
end if;
delete from payment_attachment where payment_id = cid;
delete from payment where payment_id = cid;
end
$$
language plpgsql
;
revoke execute on function remove_collection(uuid) from public;
grant execute on function remove_collection(uuid) to invoicer;
grant execute on function remove_collection(uuid) to admin;
commit;