Call next_invoice_number from add_invoice

This commit is contained in:
jordi fita mas 2023-02-18 14:49:02 +01:00
parent 880c4f53b2
commit 697f821310
3 changed files with 37 additions and 12 deletions

View File

@ -8,6 +8,7 @@
-- requires: tax -- requires: tax
-- requires: invoice_product -- requires: invoice_product
-- requires: invoice_product_tax -- requires: invoice_product_tax
-- requires: next_invoice_number
begin; begin;
@ -22,6 +23,10 @@ declare
ccode text; ccode text;
ipid integer; ipid integer;
begin begin
if invoice_number is null or length(trim(invoice_number)) = 0 then
invoice_number = next_invoice_number(company_id, invoice_date);
end if;
insert into invoice (company_id, invoice_number, invoice_date, contact_id, notes, currency_code) insert into invoice (company_id, invoice_number, invoice_date, contact_id, notes, currency_code)
select company.company_id select company.company_id
, invoice_number , invoice_number

View File

@ -53,6 +53,6 @@ add_product [schema_numerus product product_tax parse_price company currency] 20
edit_product [schema_numerus product product_tax parse_price company currency] 2023-02-14T11:06:03Z jordi fita mas <jordi@tandem.blog> # Add function to edit products edit_product [schema_numerus product product_tax parse_price company currency] 2023-02-14T11:06:03Z jordi fita mas <jordi@tandem.blog> # Add function to edit products
invoice_product_tax [schema_numerus invoice_product tax tax_rate] 2023-02-15T13:20:30Z jordi fita mas <jordi@tandem.blog> # Add relation for taxes in invoice products invoice_product_tax [schema_numerus invoice_product tax tax_rate] 2023-02-15T13:20:30Z jordi fita mas <jordi@tandem.blog> # Add relation for taxes in invoice products
new_invoice_product [schema_numerus] 2023-02-16T21:06:01Z jordi fita mas <jordi@tandem.blog> # Add type for passing products to new invoices new_invoice_product [schema_numerus] 2023-02-16T21:06:01Z jordi fita mas <jordi@tandem.blog> # Add type for passing products to new invoices
add_invoice [schema_numerus invoice company currency parse_price new_invoice_product tax invoice_product invoice_product_tax] 2023-02-16T21:12:46Z jordi fita mas <jordi@tandem.blog> # Add function to create new invoices
invoice_number_counter [schema_numerus company] 2023-02-17T13:04:48Z jordi fita mas <jordi@tandem.blog> # Add relation to count invoice numbers invoice_number_counter [schema_numerus company] 2023-02-17T13:04:48Z jordi fita mas <jordi@tandem.blog> # Add relation to count invoice numbers
next_invoice_number [schema_numerus invoice_number_counter] 2023-02-17T13:21:48Z jordi fita mas <jordi@tandem.blog> # Add function to retrieve the next invoice number next_invoice_number [schema_numerus invoice_number_counter] 2023-02-17T13:21:48Z jordi fita mas <jordi@tandem.blog> # Add function to retrieve the next invoice number
add_invoice [schema_numerus invoice company currency parse_price new_invoice_product tax invoice_product invoice_product_tax next_invoice_number] 2023-02-16T21:12:46Z jordi fita mas <jordi@tandem.blog> # Add function to create new invoices

View File

@ -5,7 +5,7 @@ reset client_min_messages;
begin; begin;
select plan(15); select plan(17);
set search_path to auth, numerus, public; set search_path to auth, numerus, public;
@ -21,6 +21,7 @@ select function_privs_are('numerus', 'add_invoice', array ['integer', 'text', 'd
set client_min_messages to warning; set client_min_messages to warning;
truncate invoice_number_counter cascade;
truncate invoice_product_tax cascade; truncate invoice_product_tax cascade;
truncate invoice_product cascade; truncate invoice_product cascade;
truncate invoice cascade; truncate invoice cascade;
@ -30,9 +31,14 @@ truncate tax cascade;
truncate company cascade; truncate company cascade;
reset client_min_messages; reset client_min_messages;
insert into company (company_id, business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, country_code, currency_code) insert into company (company_id, business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, country_code, currency_code, invoice_number_format)
values (1, 'Company 2', 'XX123', '', '555-555-555', 'a@a', '', '', '', '', '', 'ES', 'EUR') values (1, 'Company 2', 'XX123', '', '555-555-555', 'a@a', '', '', '', '', '', 'ES', 'EUR', '"F"YYYY0000')
, (2, 'Company 4', 'XX234', '', '666-666-666', 'b@b', '', '', '', '', '', 'FR', 'USD') , (2, 'Company 4', 'XX234', '', '666-666-666', 'b@b', '', '', '', '', '', 'FR', 'USD', '"INV"000-YY')
;
insert into invoice_number_counter (company_id, year, currval)
values (1, 2023, '5')
, (2, 2023, '55')
; ;
insert into tax (tax_id, company_id, name, rate) insert into tax (tax_id, company_id, name, rate)
@ -73,11 +79,23 @@ select lives_ok(
'Should be able to insert an invoice for the second company with a product' 'Should be able to insert an invoice for the second company with a product'
); );
select lives_ok(
$$ select add_invoice(1, NULL, '2023-03-15', 13, '', '{"(7,PA1,DA1,44.33,1,0.50,{})"}') $$,
'Should be able to insert an invoice with an autogenerated number'
);
select lives_ok(
$$ select add_invoice(2, ' ', '2023-04-16', 14, '', '{"(11,PA2,DA2,55.33,10,0.75,{})"}') $$,
'Should consider non-null, but otherwise empty numbers the same as null and autogenerate it'
);
select bag_eq( select bag_eq(
$$ select company_id, invoice_number, invoice_date, contact_id, invoice_status, notes, currency_code, created_at from invoice $$, $$ select company_id, invoice_number, invoice_date, contact_id, invoice_status, notes, currency_code, created_at from invoice $$,
$$ values (1, 'INV001', '2023-02-15'::date, 12, 'created', 'Notes 1', 'EUR', current_timestamp) $$ values (1, 'INV001', '2023-02-15'::date, 12, 'created', 'Notes 1', 'EUR', current_timestamp)
, (1, 'INV002', '2023-02-16'::date, 13, 'created', 'Notes 2', 'EUR', current_timestamp) , (1, 'INV002', '2023-02-16'::date, 13, 'created', 'Notes 2', 'EUR', current_timestamp)
, (2, 'INV101', '2023-02-14'::date, 15, 'created', 'Notes 3', 'USD', current_timestamp) , (2, 'INV101', '2023-02-14'::date, 15, 'created', 'Notes 3', 'USD', current_timestamp)
, (1, 'F20230006', '2023-03-15'::date, 13, 'created', '', 'EUR', current_timestamp)
, (2, 'INV056-23', '2023-04-16'::date, 14, 'created', '', 'USD', current_timestamp)
$$, $$,
'Should have created all invoices' 'Should have created all invoices'
); );
@ -88,6 +106,8 @@ select bag_eq(
, ('INV002', 7, 'Product 1 bis', 'Description 1 bis', 3333, 1, 0.50) , ('INV002', 7, 'Product 1 bis', 'Description 1 bis', 3333, 1, 0.50)
, ('INV002', 8, 'Product 2', 'Description 2', 2400, 3, 0.75) , ('INV002', 8, 'Product 2', 'Description 2', 2400, 3, 0.75)
, ('INV101', 11, 'Product 4.3', '', 1111, 1, 0.0) , ('INV101', 11, 'Product 4.3', '', 1111, 1, 0.0)
, ('F20230006', 7, 'PA1', 'DA1', 4433, 1, 0.50)
, ('INV056-23', 11, 'PA2', 'DA2', 5533, 10, 0.75)
$$, $$,
'Should have created all invoice products' 'Should have created all invoice products'
); );