93143c28f2
see https://github.com/foodcoops/foodsoft/pull/907 for reference and original work by viehlieb Co-authored-by: viehlieb <pf@pragma-shift.net> fix PDF Pdf make explicit deposit in invoices work add ordergroupname to invoice file name mark bold sum for vat exempt foodcoops download multiple group order invoice as zip
58 lines
2.2 KiB
Ruby
58 lines
2.2 KiB
Ruby
class GroupOrderInvoice < ApplicationRecord
|
|
belongs_to :group_order
|
|
validates_presence_of :group_order
|
|
validates_uniqueness_of :invoice_number
|
|
validate :tax_number_set
|
|
after_initialize :init, unless: :persisted?
|
|
|
|
def generate_invoice_number(count)
|
|
trailing_number = count.to_s.rjust(4, '0')
|
|
if GroupOrderInvoice.find_by(invoice_number: self.invoice_date.strftime("%Y%m%d") + trailing_number)
|
|
generate_invoice_number(count.to_i + 1)
|
|
else
|
|
self.invoice_date.strftime("%Y%m%d") + trailing_number
|
|
end
|
|
end
|
|
|
|
def tax_number_set
|
|
if FoodsoftConfig[:contact][:tax_number].blank?
|
|
errors.add(:group_order_invoice, "Keine Steuernummer in FoodsoftConfig :contact gesetzt")
|
|
end
|
|
end
|
|
|
|
def init
|
|
self.invoice_date = Time.now unless invoice_date
|
|
self.invoice_number = generate_invoice_number(1) unless self.invoice_number
|
|
self.payment_method = FoodsoftConfig[:group_order_invoices]&.[](:payment_method) || I18n.t('activerecord.attributes.group_order_invoice.payment_method') unless self.payment_method
|
|
end
|
|
|
|
def name
|
|
I18n.t('activerecord.attributes.group_order_invoice.name') + "_#{invoice_number}"
|
|
end
|
|
|
|
def load_data_for_invoice
|
|
invoice_data = {}
|
|
order = group_order.order
|
|
invoice_data[:supplier] = order.supplier.name
|
|
invoice_data[:ordergroup] = group_order.ordergroup
|
|
invoice_data[:group_order] = group_order
|
|
invoice_data[:invoice_number] = invoice_number
|
|
invoice_data[:invoice_date] = invoice_date
|
|
invoice_data[:tax_number] = FoodsoftConfig[:contact][:tax_number]
|
|
invoice_data[:payment_method] = payment_method
|
|
invoice_data[:order_articles] = {}
|
|
group_order.order_articles.each do |order_article|
|
|
# Get the result of last time ordering, if possible
|
|
goa = group_order.group_order_articles.detect { |tmp_goa| tmp_goa.order_article_id == order_article.id }
|
|
|
|
# Build hash with relevant data
|
|
invoice_data[:order_articles][order_article.id] = {
|
|
:price => order_article.article.fc_price,
|
|
:quantity => (goa ? goa.quantity : 0),
|
|
:total_price => (goa ? goa.total_price : 0),
|
|
:tax => order_article.article.tax
|
|
}
|
|
end
|
|
invoice_data
|
|
end
|
|
end
|