diff --git a/app/jobs/send_monthly_invoices_job.rb b/app/jobs/send_monthly_invoices_job.rb index 2c6e34831..c89e71b00 100644 --- a/app/jobs/send_monthly_invoices_job.rb +++ b/app/jobs/send_monthly_invoices_job.rb @@ -2,8 +2,9 @@ class SendMonthlyInvoicesJob < ApplicationJob # rubocop:disable Metrics/ClassLen queue_as :default discard_on StandardError - def perform(dry: false, months_ago: 1) + def perform(dry: false, months_ago: 1, overwrite: false) @dry = dry + @overwrite = overwrite @month = Time.zone.now - months_ago.month @directo_data = [] @@ -48,7 +49,7 @@ class SendMonthlyInvoicesJob < ApplicationJob # rubocop:disable Metrics/ClassLen def find_or_init_monthly_invoices(invoices: []) 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? end invoices diff --git a/app/models/concerns/registrar/book_keeping.rb b/app/models/concerns/registrar/book_keeping.rb index 86eede779..a70b09c08 100644 --- a/app/models/concerns/registrar/book_keeping.rb +++ b/app/models/concerns/registrar/book_keeping.rb @@ -38,14 +38,25 @@ module Registrar::BookKeeping # rubocop:disable Metrics/ModuleLength lines.as_json 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) - return invoice if invoice + return invoice if invoice && !overwrite summary = monthly_summary(month: month) 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 def title_for_summary(date)