Files
openfoodnetwork/app/services/orders/generate_invoice_service.rb
2024-03-16 19:07:08 +05:00

41 lines
935 B
Ruby

# frozen_string_literal: true
module Orders
class GenerateInvoiceService
def initialize(order)
@order = order
end
def generate_or_update_latest_invoice
if comparator.can_generate_new_invoice?
order.invoices.create!(
date: Time.zone.today,
number: total_invoices_created_by_distributor + 1,
data: invoice_data
)
elsif comparator.can_update_latest_invoice?
order.invoices.latest.update!(
date: Time.zone.today,
data: invoice_data
)
end
end
private
attr_reader :order
def comparator
@comparator ||= Orders::CompareInvoiceService.new(order)
end
def invoice_data
@invoice_data ||= InvoiceDataGenerator.new(order).generate
end
def total_invoices_created_by_distributor
Invoice.joins(:order).where(order: { distributor: order.distributor }).count
end
end
end