This was actually the (first) reason we added the tax classes: to show them in columns on the invoice—without the class we would need a column for each tax rate, even though they are the same tax. The invoice design has the product total with taxes at the last column, above the tax base, that i am not so sure about, but it seems that it has not brought any problem whatsoever so far, so it remains as is. Had to reduce the invoice’s font size to give more space to the table or the columns would be right next to each other. Oriol also told me to add more vertical spacing to the table’s footer.
111 lines
3.4 KiB
PL/PgSQL
111 lines
3.4 KiB
PL/PgSQL
-- Test invoice_product_amount
|
||
set client_min_messages to warning;
|
||
create extension if not exists pgtap;
|
||
reset client_min_messages;
|
||
|
||
begin;
|
||
|
||
select plan(12);
|
||
|
||
set search_path to numerus, auth, public;
|
||
|
||
select has_view('invoice_product_amount');
|
||
select table_privs_are('invoice_product_amount', 'guest', array[]::text[]);
|
||
select table_privs_are('invoice_product_amount', 'invoicer', array['SELECT']);
|
||
select table_privs_are('invoice_product_amount', 'admin', array['SELECT']);
|
||
select table_privs_are('invoice_product_amount', 'authenticator', array[]::text[]);
|
||
|
||
select has_column('invoice_product_amount', 'invoice_product_id');
|
||
select col_type_is('invoice_product_amount', 'invoice_product_id', 'integer');
|
||
|
||
select has_column('invoice_product_amount', 'subtotal');
|
||
select col_type_is('invoice_product_amount', 'subtotal', 'integer');
|
||
|
||
select has_column('invoice_product_amount', 'total');
|
||
select col_type_is('invoice_product_amount', 'total', 'integer');
|
||
|
||
|
||
set client_min_messages to warning;
|
||
truncate invoice_product_tax cascade;
|
||
truncate invoice_product cascade;
|
||
truncate invoice cascade;
|
||
truncate contact cascade;
|
||
truncate product cascade;
|
||
truncate tax cascade;
|
||
truncate tax_class cascade;
|
||
truncate company cascade;
|
||
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)
|
||
values (1, 'Company 1', 'XX123', '', '555-555-555', 'a@a', '', '', '', '', '', 'ES', 'EUR')
|
||
;
|
||
|
||
insert into tax_class (tax_class_id, company_id, name)
|
||
values (11, 1, 'tax')
|
||
;
|
||
|
||
insert into tax (tax_id, company_id, tax_class_id, name, rate)
|
||
values (2, 1, 11, 'IRPF -15 %', -0.15)
|
||
, (3, 1, 11, 'IVA 4 %', 0.04)
|
||
, (4, 1, 11, 'IVA 10 %', 0.10)
|
||
, (5, 1, 11, 'IVA 21 %', 0.21)
|
||
;
|
||
|
||
insert into product (product_id, company_id, name, price)
|
||
values (6, 1, 'Product', 1212)
|
||
;
|
||
|
||
insert into contact (contact_id, company_id, business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, country_code)
|
||
values (7, 1, 'Contact', 'XX555', '', '777-777-777', 'c@c', '', '', '', '', '', 'ES')
|
||
;
|
||
|
||
insert into invoice (invoice_id, company_id, invoice_number, invoice_date, contact_id, currency_code)
|
||
values ( 8, 1, 'I1', current_date, 7, 'EUR')
|
||
, ( 9, 1, 'I2', current_date, 7, 'EUR')
|
||
, (10, 1, 'I3', current_date, 7, 'EUR')
|
||
, (11, 1, 'I4', current_date, 7, 'EUR')
|
||
;
|
||
|
||
insert into invoice_product (invoice_product_id, invoice_id, product_id, name, price, quantity, discount_rate)
|
||
values (12, 8, 6, 'P', 100, 1, 0.0)
|
||
, (13, 8, 6, 'P', 200, 2, 0.1)
|
||
, (14, 9, 6, 'P', 222, 3, 0.0)
|
||
, (15, 9, 6, 'P', 333, 4, 0.2)
|
||
, (16, 10, 6, 'P', 444, 5, 0.0)
|
||
, (17, 10, 6, 'P', 555, 6, 0.1)
|
||
, (18, 11, 6, 'P', 777, 8, 0.0)
|
||
;
|
||
|
||
insert into invoice_product_tax (invoice_product_id, tax_id, tax_rate)
|
||
values (12, 2, -0.15)
|
||
, (12, 5, 0.21)
|
||
, (13, 3, 0.04)
|
||
, (14, 4, 0.10)
|
||
, (14, 5, 0.21)
|
||
, (14, 2, -0.07)
|
||
, (15, 4, 0.10)
|
||
, (16, 4, 0.10)
|
||
, (16, 5, 0.21)
|
||
, (17, 5, 0.21)
|
||
, (17, 3, 0.04)
|
||
;
|
||
|
||
select bag_eq(
|
||
$$ select invoice_product_id, subtotal, total from invoice_product_amount $$,
|
||
$$ values (12, 100, 106)
|
||
, (13, 360, 374)
|
||
, (14, 666, 826)
|
||
, (15, 1066, 1173)
|
||
, (16, 2220, 2908)
|
||
, (17, 2997, 3746)
|
||
, (18, 6216, 6216)
|
||
$$,
|
||
'Should compute the subtotal and total for all products.'
|
||
);
|
||
|
||
|
||
select *
|
||
from finish();
|
||
|
||
rollback;
|