They are mostly the same as invoices, but the contact and payment method are optional, thus, like other optionals fields, i created relations to link these that have payment method or contact, to avoid NULL columns in quote. Still missing functions to add and edit quotations, and views to compute their tax and total amount.
49 lines
1.3 KiB
PL/PgSQL
49 lines
1.3 KiB
PL/PgSQL
-- Deploy numerus:quote to pg
|
|
-- requires: roles
|
|
-- requires: schema_numerus
|
|
-- requires: company
|
|
-- requires: quote_status
|
|
-- requires: currency
|
|
-- requires: tag_name
|
|
|
|
begin;
|
|
|
|
set search_path to numerus, public;
|
|
|
|
create table quote (
|
|
quote_id serial primary key,
|
|
company_id integer not null references company,
|
|
slug uuid not null unique default gen_random_uuid(),
|
|
quote_number text not null constraint quote_number_not_empty check(length(trim(quote_number)) > 1),
|
|
quote_date date not null default current_date,
|
|
quote_status text not null default 'created' references quote_status,
|
|
terms_and_conditions text not null default '',
|
|
notes text not null default '',
|
|
tags tag_name[] not null default '{}',
|
|
currency_code text not null references currency,
|
|
created_at timestamptz not null default current_timestamp
|
|
);
|
|
|
|
create index on quote using gin (tags);
|
|
|
|
grant select, insert, update, delete on table quote to invoicer;
|
|
grant select, insert, update, delete on table quote to admin;
|
|
|
|
grant usage on sequence quote_quote_id_seq to invoicer;
|
|
grant usage on sequence quote_quote_id_seq to admin;
|
|
|
|
alter table quote enable row level security;
|
|
|
|
create policy company_policy
|
|
on quote
|
|
using (
|
|
exists(
|
|
select 1
|
|
from company_user
|
|
join user_profile using (user_id)
|
|
where company_user.company_id = quote.company_id
|
|
)
|
|
);
|
|
|
|
commit;
|