diff --git a/deploy/available_invoice_status.sql b/deploy/available_invoice_status.sql new file mode 100644 index 0000000..c11a59f --- /dev/null +++ b/deploy/available_invoice_status.sql @@ -0,0 +1,28 @@ +-- Deploy numerus:available_invoice_status to pg +-- requires: schema_numerus +-- requires: invoice_status +-- requires: invoice_status_i18n + +begin; + +set search_path to numerus; + +insert into invoice_status (invoice_status, name) +values ('created', 'Created') + , ('sent', 'Sent') + , ('paid', 'Paid') + , ('unpaid', 'Unpaid') +; + +insert into invoice_status_i18n (invoice_status, lang_tag, name) +values ('created', 'ca', 'Creada') + , ('sent', 'ca', 'Enviada') + , ('paid', 'ca', 'Cobrada') + , ('unpaid', 'ca', 'No cobrada') + , ('created', 'es', 'Creada') + , ('sent', 'es', 'Enviada') + , ('paid', 'es', 'Cobrada') + , ('unpaid', 'es', 'No cobrada') +; + +commit; diff --git a/deploy/invoice_status.sql b/deploy/invoice_status.sql new file mode 100644 index 0000000..a831d1f --- /dev/null +++ b/deploy/invoice_status.sql @@ -0,0 +1,16 @@ +-- Deploy numerus:invoice_status to pg +-- requires: schema_numerus + +begin; + +set search_path to numerus, public; + +create table invoice_status ( + invoice_status text primary key, + name text not null +); + +grant select on table invoice_status to invoicer; +grant select on table invoice_status to admin; + +commit; diff --git a/deploy/invoice_status_i18n.sql b/deploy/invoice_status_i18n.sql new file mode 100644 index 0000000..0d813c4 --- /dev/null +++ b/deploy/invoice_status_i18n.sql @@ -0,0 +1,20 @@ +-- Deploy numerus:invoice_status_i18n to pg +-- requires: schema_numerus +-- requires: invoice_status +-- requires: language + +begin; + +set search_path to numerus, public; + +create table invoice_status_i18n ( + invoice_status text not null references invoice_status, + lang_tag text not null references language, + name text not null, + primary key (invoice_status, lang_tag) +); + +grant select on table invoice_status_i18n to invoicer; +grant select on table invoice_status_i18n to admin; + +commit; diff --git a/revert/available_invoice_status.sql b/revert/available_invoice_status.sql new file mode 100644 index 0000000..47121a6 --- /dev/null +++ b/revert/available_invoice_status.sql @@ -0,0 +1,10 @@ +-- Revert numerus:available_invoice_status from pg + +begin; + +set search_path to numerus; + +delete from invoice_status_i18n; +delete from invoice_status; + +commit; diff --git a/revert/invoice_status.sql b/revert/invoice_status.sql new file mode 100644 index 0000000..5c47924 --- /dev/null +++ b/revert/invoice_status.sql @@ -0,0 +1,7 @@ +-- Revert numerus:invoice_status from pg + +begin; + +drop table if exists numerus.invoice_status; + +commit; diff --git a/revert/invoice_status_i18n.sql b/revert/invoice_status_i18n.sql new file mode 100644 index 0000000..3a701e5 --- /dev/null +++ b/revert/invoice_status_i18n.sql @@ -0,0 +1,7 @@ +-- Revert numerus:invoice_status_i18n from pg + +begin; + +drop table if exists numerus.invoice_status_i18n; + +commit; diff --git a/sqitch.plan b/sqitch.plan index 66933bb..4e21bb3 100644 --- a/sqitch.plan +++ b/sqitch.plan @@ -33,7 +33,7 @@ available_currencies [schema_numerus currency] 2023-01-24T14:54:18Z jordi fita m country_code [schema_numerus] 2023-01-27T18:33:26Z jordi fita mas # Add domain for country codes country [schema_numerus country_code] 2023-01-27T18:39:44Z jordi fita mas # Add the relation for countries country_i18n [schema_numerus country_code language country] 2023-01-27T19:20:43Z jordi fita mas # Add table for localization of country names -available_countries [schema_numerus country] 2023-01-27T18:49:28Z jordi fita mas # Add the list of available countries +available_countries [schema_numerus country country_i18n] 2023-01-27T18:49:28Z jordi fita mas # Add the list of available countries company [schema_numerus extension_vat email extension_pg_libphonenumber extension_uri currency_code currency country_code country] 2023-01-24T15:03:15Z jordi fita mas # Add the relation for companies company_user [schema_numerus user company] 2023-01-24T17:50:06Z jordi fita mas # Add the relation of companies and their users tax_rate [schema_numerus] 2023-01-28T11:33:39Z jordi fita mas # Add domain for tax rates @@ -42,3 +42,6 @@ contact [schema_numerus company extension_vat email extension_pg_libphonenumber product [schema_numerus company tax] 2023-02-04T09:17:24Z jordi fita mas # Add relation for products parse_price [schema_public] 2023-02-05T11:04:54Z jordi fita mas # Add function to convert from price to cents to_price [schema_numerus] 2023-02-05T11:46:31Z jordi fita mas # Add function to format cents to prices +invoice_status [schema_numerus] 2023-02-07T14:50:26Z jordi fita mas # A relation of invoice status +invoice_status_i18n [schema_numerus invoice_status language] 2023-02-07T14:56:18Z jordi fita mas # Add relation for invoice status’ translatable texts +available_invoice_status [schema_numerus invoice_status invoice_status_i18n] 2023-02-07T15:07:06Z jordi fita mas # Add the list of available invoice status diff --git a/test/invoice_status.sql b/test/invoice_status.sql new file mode 100644 index 0000000..9bc1800 --- /dev/null +++ b/test/invoice_status.sql @@ -0,0 +1,35 @@ +-- Test invoice_status +set client_min_messages to warning; +create extension if not exists pgtap; +reset client_min_messages; + +begin; + +select plan(15); + +set search_path to numerus, public; + +select has_table('invoice_status'); +select has_pk('invoice_status' ); +select table_privs_are('invoice_status', 'guest', array []::text[]); +select table_privs_are('invoice_status', 'invoicer', array ['SELECT']); +select table_privs_are('invoice_status', 'admin', array ['SELECT']); +select table_privs_are('invoice_status', 'authenticator', array []::text[]); + +select has_column('invoice_status', 'invoice_status'); +select col_is_pk('invoice_status', 'invoice_status'); +select col_type_is('invoice_status', 'invoice_status', 'text'); +select col_not_null('invoice_status', 'invoice_status'); +select col_hasnt_default('invoice_status', 'invoice_status'); + +select has_column('invoice_status', 'name'); +select col_type_is('invoice_status', 'name', 'text'); +select col_not_null('invoice_status', 'name'); +select col_hasnt_default('invoice_status', 'name'); + + +select * +from finish(); + +rollback; + diff --git a/test/invoice_status_i18n.sql b/test/invoice_status_i18n.sql new file mode 100644 index 0000000..1805cb8 --- /dev/null +++ b/test/invoice_status_i18n.sql @@ -0,0 +1,44 @@ +-- Test invoice_status_i18n +set client_min_messages to warning; +create extension if not exists pgtap; +reset client_min_messages; + +begin; + +select plan(23); + +set search_path to numerus, public; + +select has_table('invoice_status_i18n'); +select has_pk('invoice_status_i18n' ); +select col_is_pk('invoice_status_i18n', array['invoice_status', 'lang_tag']); +select table_privs_are('invoice_status_i18n', 'guest', array []::text[]); +select table_privs_are('invoice_status_i18n', 'invoicer', array ['SELECT']); +select table_privs_are('invoice_status_i18n', 'admin', array ['SELECT']); +select table_privs_are('invoice_status_i18n', 'authenticator', array []::text[]); + +select has_column('invoice_status_i18n', 'invoice_status'); +select col_is_fk('invoice_status_i18n', 'invoice_status'); +select fk_ok('invoice_status_i18n', 'invoice_status', 'invoice_status', 'invoice_status'); +select col_type_is('invoice_status_i18n', 'invoice_status', 'text'); +select col_not_null('invoice_status_i18n', 'invoice_status'); +select col_hasnt_default('invoice_status_i18n', 'invoice_status'); + +select has_column('invoice_status_i18n', 'lang_tag'); +select col_is_fk('invoice_status_i18n', 'lang_tag'); +select fk_ok('invoice_status_i18n', 'lang_tag', 'language', 'lang_tag'); +select col_type_is('invoice_status_i18n', 'lang_tag', 'text'); +select col_not_null('invoice_status_i18n', 'lang_tag'); +select col_hasnt_default('invoice_status_i18n', 'lang_tag'); + +select has_column('invoice_status_i18n', 'name'); +select col_type_is('invoice_status_i18n', 'name', 'text'); +select col_not_null('invoice_status_i18n', 'name'); +select col_hasnt_default('invoice_status_i18n', 'name'); + + +select * +from finish(); + +rollback; + diff --git a/verify/available_invoice_status.sql b/verify/available_invoice_status.sql new file mode 100644 index 0000000..cdaafee --- /dev/null +++ b/verify/available_invoice_status.sql @@ -0,0 +1,21 @@ +-- Verify numerus:available_invoice_status on pg + +begin; + +set search_path to numerus; + +select 1 / count(*) from invoice_status where invoice_status = 'created' and name ='Created'; +select 1 / count(*) from invoice_status where invoice_status = 'sent' and name ='Sent'; +select 1 / count(*) from invoice_status where invoice_status = 'paid' and name ='Paid'; +select 1 / count(*) from invoice_status where invoice_status = 'unpaid' and name ='Unpaid'; + +select 1 / count(*) from invoice_status_i18n where invoice_status = 'created' and name ='Creada' and lang_tag = 'ca'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'created' and name ='Creada' and lang_tag = 'es'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'sent' and name ='Enviada' and lang_tag= 'ca'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'sent' and name ='Enviada' and lang_tag= 'es'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'paid' and name ='Cobrada' and lang_tag= 'ca'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'paid' and name ='Cobrada' and lang_tag= 'es'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'unpaid' and name ='No cobrada' and lang_tag= 'ca'; +select 1 / count(*) from invoice_status_i18n where invoice_status = 'unpaid' and name ='No cobrada' and lang_tag= 'es'; + +rollback; diff --git a/verify/invoice_status.sql b/verify/invoice_status.sql new file mode 100644 index 0000000..23c6b6c --- /dev/null +++ b/verify/invoice_status.sql @@ -0,0 +1,10 @@ +-- Verify numerus:invoice_status on pg + +begin; + +select invoice_status + , name +from numerus.invoice_status +where false; + +rollback; diff --git a/verify/invoice_status_i18n.sql b/verify/invoice_status_i18n.sql new file mode 100644 index 0000000..6e76744 --- /dev/null +++ b/verify/invoice_status_i18n.sql @@ -0,0 +1,11 @@ +-- Verify numerus:invoice_status_i18n on pg + +begin; + +select invoice_status + , lang_tag + , name +from numerus.invoice_status_i18n +where false; + +rollback;