diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 50453f61f..cde439c70 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -35,7 +35,7 @@ class Invoice < ActiveRecord::Base attribute :vat_rate, ::Type::VATRate.new def set_invoice_number - last_no = Invoice.order(number: :desc).where('number IS NOT NULL').limit(1).pluck(:number).first + last_no = Invoice.order(number: :desc).limit(1).pluck(:number).first if last_no && last_no >= Setting.invoice_number_min.to_i self.number = last_no + 1 diff --git a/db/migrate/20190811195814_change_invoices_number_to_not_null.rb b/db/migrate/20190811195814_change_invoices_number_to_not_null.rb new file mode 100644 index 000000000..122e27572 --- /dev/null +++ b/db/migrate/20190811195814_change_invoices_number_to_not_null.rb @@ -0,0 +1,5 @@ +class ChangeInvoicesNumberToNotNull < ActiveRecord::Migration + def change + change_column_null :invoices, :number, false + end +end diff --git a/db/migrate/20190811202042_add_invoices_number_uniq_constraint.rb b/db/migrate/20190811202042_add_invoices_number_uniq_constraint.rb new file mode 100644 index 000000000..423214355 --- /dev/null +++ b/db/migrate/20190811202042_add_invoices_number_uniq_constraint.rb @@ -0,0 +1,13 @@ +class AddInvoicesNumberUniqConstraint < ActiveRecord::Migration + def up + execute <<-SQL + ALTER TABLE invoices ADD CONSTRAINT unique_number UNIQUE (number) + SQL + end + + def down + execute <<-SQL + ALTER TABLE invoices DROP CONSTRAINT unique_number + SQL + end +end diff --git a/db/migrate/20190811202347_add_invoices_buyer_id_fk.rb b/db/migrate/20190811202347_add_invoices_buyer_id_fk.rb new file mode 100644 index 000000000..de2a82fcd --- /dev/null +++ b/db/migrate/20190811202347_add_invoices_buyer_id_fk.rb @@ -0,0 +1,5 @@ +class AddInvoicesBuyerIdFk < ActiveRecord::Migration + def change + add_foreign_key :invoices, :registrars, column: :buyer_id + end +end diff --git a/db/migrate/20190811202711_change_invoices_required_columns_to_not_null.rb b/db/migrate/20190811202711_change_invoices_required_columns_to_not_null.rb new file mode 100644 index 000000000..fc8f0f895 --- /dev/null +++ b/db/migrate/20190811202711_change_invoices_required_columns_to_not_null.rb @@ -0,0 +1,15 @@ +class ChangeInvoicesRequiredColumnsToNotNull < ActiveRecord::Migration + def change + change_column_null :invoices, :buyer_id, false + change_column_null :invoices, :seller_reg_no, false + change_column_null :invoices, :seller_bank, false + change_column_null :invoices, :seller_swift, false + change_column_null :invoices, :seller_country_code, false + change_column_null :invoices, :seller_street, false + change_column_null :invoices, :seller_city, false + change_column_null :invoices, :buyer_reg_no, false + change_column_null :invoices, :buyer_country_code, false + change_column_null :invoices, :buyer_street, false + change_column_null :invoices, :buyer_city, false + end +end diff --git a/db/migrate/20190811205406_change_invoices_required_columns_to_not_null_part2.rb b/db/migrate/20190811205406_change_invoices_required_columns_to_not_null_part2.rb new file mode 100644 index 000000000..57e9d7d9b --- /dev/null +++ b/db/migrate/20190811205406_change_invoices_required_columns_to_not_null_part2.rb @@ -0,0 +1,7 @@ +class ChangeInvoicesRequiredColumnsToNotNullPart2 < ActiveRecord::Migration + def change + change_column_null :invoices, :seller_email, false + change_column_null :invoices, :seller_contact_name, false + change_column_null :invoices, :buyer_email, false + end +end diff --git a/db/structure.sql b/db/structure.sql index a3d9fb481..0dcb19643 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -936,34 +936,34 @@ CREATE TABLE public.invoices ( reference_no character varying NOT NULL, vat_rate numeric(4,3) NOT NULL, seller_name character varying NOT NULL, - seller_reg_no character varying, + seller_reg_no character varying NOT NULL, seller_iban character varying NOT NULL, - seller_bank character varying, - seller_swift character varying, + seller_bank character varying NOT NULL, + seller_swift character varying NOT NULL, seller_vat_no character varying, - seller_country_code character varying, + seller_country_code character varying NOT NULL, seller_state character varying, - seller_street character varying, - seller_city character varying, + seller_street character varying NOT NULL, + seller_city character varying NOT NULL, seller_zip character varying, seller_phone character varying, seller_url character varying, - seller_email character varying, - seller_contact_name character varying, - buyer_id integer, + seller_email character varying NOT NULL, + seller_contact_name character varying NOT NULL, + buyer_id integer NOT NULL, buyer_name character varying NOT NULL, - buyer_reg_no character varying, - buyer_country_code character varying, + buyer_reg_no character varying NOT NULL, + buyer_country_code character varying NOT NULL, buyer_state character varying, - buyer_street character varying, - buyer_city character varying, + buyer_street character varying NOT NULL, + buyer_city character varying NOT NULL, buyer_zip character varying, buyer_phone character varying, buyer_url character varying, - buyer_email character varying, + buyer_email character varying NOT NULL, creator_str character varying, updator_str character varying, - number integer, + number integer NOT NULL, cancelled_at timestamp without time zone, total numeric(10,2) NOT NULL, in_directo boolean DEFAULT false, @@ -3198,6 +3198,14 @@ ALTER TABLE ONLY public.registrars ADD CONSTRAINT unique_name UNIQUE (name); +-- +-- Name: unique_number; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: +-- + +ALTER TABLE ONLY public.invoices + ADD CONSTRAINT unique_number UNIQUE (number); + + -- -- Name: unique_reference_no; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace: -- @@ -3905,6 +3913,14 @@ ALTER TABLE ONLY public.domains ADD CONSTRAINT domains_registrar_id_fk FOREIGN KEY (registrar_id) REFERENCES public.registrars(id); +-- +-- Name: fk_rails_242b91538b; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.invoices + ADD CONSTRAINT fk_rails_242b91538b FOREIGN KEY (buyer_id) REFERENCES public.registrars(id); + + -- -- Name: fk_rails_59c422f73d; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -4811,3 +4827,13 @@ INSERT INTO schema_migrations (version) VALUES ('20190620084334'); INSERT INTO schema_migrations (version) VALUES ('20190811184334'); +INSERT INTO schema_migrations (version) VALUES ('20190811195814'); + +INSERT INTO schema_migrations (version) VALUES ('20190811202042'); + +INSERT INTO schema_migrations (version) VALUES ('20190811202347'); + +INSERT INTO schema_migrations (version) VALUES ('20190811202711'); + +INSERT INTO schema_migrations (version) VALUES ('20190811205406'); + diff --git a/test/fixtures/invoices.yml b/test/fixtures/invoices.yml index c3e3bac79..3fe18b4b2 100644 --- a/test/fixtures/invoices.yml +++ b/test/fixtures/invoices.yml @@ -3,9 +3,22 @@ one: due_date: <%= Date.parse '2010-07-06' %> currency: EUR seller_name: Seller Ltd + seller_reg_no: 1234 seller_iban: US75512108001245126199 + seller_bank: Main Bank + seller_swift: swift + seller_email: info@seller.test + seller_country_code: US + seller_street: Main Street 1 + seller_city: New York + seller_contact_name: John Doe buyer: bestnames buyer_name: Buyer Ltd + buyer_reg_no: 12345 + buyer_email: info@buyer.test + buyer_country_code: GB + buyer_street: Main Street 2 + buyer_city: London vat_rate: 0.1 total: 16.50 reference_no: 13