Refactor and improve invoices

- `runner 'Invoice.cancel_overdue_invoices'` in `schedule.rb` is
changed to `rake 'invoices:cancel_overdue'`.
- `invoices.payment_term` database column is removed and its value is
hardcoded in UI.
- `invoices.paid_at` is removed as unused
- `invoices.due_date` column's type is now `date`.
- `Invoice#invoice_items` renamed to `Invoice#items` and `Invoice`
interface to get a list of items is unified.
- Default date format in UI.
- Default translations are used.
- Tests improved.
- Specs converted to tests and removed along with factories.
- Database structure improved.
This commit is contained in:
Artur Beljajev 2018-10-17 12:21:04 +03:00
parent d86ec026e3
commit a97728c0f3
65 changed files with 758 additions and 341 deletions

View file

@ -0,0 +1,33 @@
class OverdueInvoiceCanceller
attr_reader :invoices
attr_reader :delay
def initialize(invoices: Invoice.overdue, delay: self.class.delay)
@invoices = invoices
@delay = delay
end
def self.default_delay
30.days
end
def self.delay
Setting.days_to_keep_overdue_invoices_active&.days || default_delay
end
def cancel
invoices.each do |invoice|
next unless cancellable?(invoice)
invoice.cancel
yield invoice if block_given?
end
end
private
def cancellable?(invoice)
due_date_with_delay = invoice.due_date + delay
due_date_with_delay.past?
end
end