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? enum sequence_type: { FRST: "Erst-Lastschrift", RCUR: "Folge-Lastschrift", OOFF: "Einmalige Lastschrift", FNAL: "Letztmalige Lastschrift" } 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 mark_sepa_downloaded self.sepa_downloaded = true self.save end def unmark_sepa_downloaded self.sepa_downloaded = false self.save 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[:pickup] = order.pickup 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