mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-04 15:24:23 +01:00
32 lines
1.4 KiB
Ruby
32 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# AdvancedAccounting enables the various objects to have detailed accounting settings
|
|
class AdvancedAccounting < ApplicationRecord
|
|
belongs_to :accountable, polymorphic: true
|
|
belongs_to :machine, foreign_key: 'accountable_id', inverse_of: :advanced_accounting
|
|
belongs_to :training, foreign_key: 'accountable_id', inverse_of: :advanced_accounting
|
|
belongs_to :space, foreign_key: 'accountable_id', inverse_of: :advanced_accounting
|
|
belongs_to :event, foreign_key: 'accountable_id', inverse_of: :advanced_accounting
|
|
belongs_to :product, foreign_key: 'accountable_id', inverse_of: :advanced_accounting
|
|
belongs_to :plan, foreign_key: 'accountable_id', inverse_of: :advanced_accounting
|
|
|
|
after_save :rebuild_accounting_lines
|
|
|
|
private
|
|
|
|
def rebuild_accounting_lines
|
|
invoices = case accountable_type
|
|
when 'Machine', 'Training', 'Space', 'Event'
|
|
accountable.reservations.map(&:invoice_items).flatten.map(&:invoice).uniq
|
|
when 'Product'
|
|
accountable.order_items.map(&:order).flatten.map(&:invoice).uniq
|
|
when 'Plan'
|
|
accountable.subscriptions.map(&:invoice_items).flatten.map(&:invoice).uniq
|
|
else
|
|
raise TypeError "Unknown accountable_type #{accountable_type}"
|
|
end
|
|
ids = invoices.filter { |i| !i.nil? }.map(&:id)
|
|
AccountingWorker.perform_async(:invoices, ids)
|
|
end
|
|
end
|