Merge pull request #2485 from internetee/add-overwrite-option-to-monthlies

Added overwrite feature to SendMonthlyInvoicesJob
This commit is contained in:
Timo Võhmar 2022-11-24 16:21:29 +02:00 committed by GitHub
commit e7ff090648
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 5 deletions

View file

@ -2,8 +2,9 @@ class SendMonthlyInvoicesJob < ApplicationJob # rubocop:disable Metrics/ClassLen
queue_as :default queue_as :default
discard_on StandardError discard_on StandardError
def perform(dry: false, months_ago: 1) def perform(dry: false, months_ago: 1, overwrite: false)
@dry = dry @dry = dry
@overwrite = overwrite
@month = Time.zone.now - months_ago.month @month = Time.zone.now - months_ago.month
@directo_data = [] @directo_data = []
@ -48,7 +49,7 @@ class SendMonthlyInvoicesJob < ApplicationJob # rubocop:disable Metrics/ClassLen
def find_or_init_monthly_invoices(invoices: []) def find_or_init_monthly_invoices(invoices: [])
Registrar.with_cash_accounts.find_each do |registrar| Registrar.with_cash_accounts.find_each do |registrar|
invoice = registrar.find_or_init_monthly_invoice(month: @month) invoice = registrar.find_or_init_monthly_invoice(month: @month, overwrite: @overwrite)
invoices << invoice unless invoice.nil? invoices << invoice unless invoice.nil?
end end
invoices invoices

View file

@ -38,14 +38,25 @@ module Registrar::BookKeeping # rubocop:disable Metrics/ModuleLength
lines.as_json lines.as_json
end end
def find_or_init_monthly_invoice(month:) def find_or_init_monthly_invoice(month:, overwrite:)
invoice = invoices.find_by(monthly_invoice: true, issue_date: month.end_of_month.to_date) invoice = invoices.find_by(monthly_invoice: true, issue_date: month.end_of_month.to_date)
return invoice if invoice return invoice if invoice && !overwrite
summary = monthly_summary(month: month) summary = monthly_summary(month: month)
return unless summary return unless summary
init_monthly_invoice(summary) new_invoice = init_monthly_invoice(summary)
return overwrite_invoice(invoice, new_invoice) if invoice && overwrite
new_invoice
end
def overwrite_invoice(original_invoice, new_invoice)
params_to_scrub = %i[created_at updated_at id number sent_at
e_invoice_sent_at in_directo cancelled_at payment_link]
attrs = new_invoice.attributes.with_indifferent_access.except(*params_to_scrub)
original_invoice.update(attrs)
original_invoice
end end
def title_for_summary(date) def title_for_summary(date)