54 lines
1.5 KiB
PL/PgSQL
54 lines
1.5 KiB
PL/PgSQL
-- Deploy numerus:edit_collection to pg
|
|
-- requires: roles
|
|
-- requires: schema_numerus
|
|
-- requires: collection
|
|
-- requires: invoice_collection
|
|
-- requires: currency
|
|
-- requires: parse_price
|
|
-- requires: tag_name
|
|
-- requires: update_invoice_collection_status
|
|
|
|
begin;
|
|
|
|
set search_path to numerus, public;
|
|
|
|
create or replace function edit_collection(collection_slug uuid, collection_date date, payment_account_id integer, description text, amount text, tags tag_name[]) returns uuid as
|
|
$$
|
|
declare
|
|
cid integer;
|
|
iid integer;
|
|
amount_cents integer;
|
|
begin
|
|
update collection
|
|
set collection_date = edit_collection.collection_date
|
|
, payment_account_id = edit_collection.payment_account_id
|
|
, description = edit_collection.description
|
|
, amount = parse_price(edit_collection.amount, decimal_digits)
|
|
, tags = edit_collection.tags
|
|
from currency
|
|
where slug = collection_slug
|
|
and currency.currency_code = collection.currency_code
|
|
returning collection_id, collection.amount
|
|
into cid, amount_cents
|
|
;
|
|
|
|
select invoice_id into iid
|
|
from invoice_collection
|
|
where collection_id = cid;
|
|
|
|
if iid is not null then
|
|
perform update_invoice_collection_status(cid, iid, amount_cents);
|
|
end if;
|
|
|
|
return collection_slug;
|
|
end
|
|
$$
|
|
language plpgsql
|
|
;
|
|
|
|
revoke execute on function edit_collection(uuid, date, integer, text, text, tag_name[]) from public;
|
|
grant execute on function edit_collection(uuid, date, integer, text, text, tag_name[]) to invoicer;
|
|
grant execute on function edit_collection(uuid, date, integer, text, text, tag_name[]) to admin;
|
|
|
|
commit;
|