add specs
This commit is contained in:
parent
e902aa0d5a
commit
45db0575b1
46 changed files with 714 additions and 238 deletions
|
|
@ -6,11 +6,10 @@ class MultiOrder < ApplicationRecord
|
|||
#TODO: diese association lösen
|
||||
has_many :group_orders, through: :multi_group_orders
|
||||
# has_many :ordergroups, through: :group_orders
|
||||
has_many :ordergroup_invoices, through: :group_orders
|
||||
has_many :ordergroup_invoices, through: :multi_group_orders
|
||||
|
||||
#make sure order has no multi_order_id
|
||||
#make sure orders are not in a multi_order
|
||||
before_create :check_orders
|
||||
validate :check_orders
|
||||
after_create :create_multi_group_orders
|
||||
|
||||
def name
|
||||
orders.map(&:name).join(', ')
|
||||
|
|
@ -40,15 +39,38 @@ class MultiOrder < ApplicationRecord
|
|||
end
|
||||
|
||||
private
|
||||
|
||||
def check_orders
|
||||
orders.each do |order|
|
||||
errors.add(:base, "Order #{order.name} is already in a multi order") unless order.multi_order_id.nil?
|
||||
#closed==abgerechnet
|
||||
errors.add(:base, "Order #{order.name} not closed") unless order.closed?
|
||||
unless orders.present?
|
||||
errors.add(:base, "No orders selected")
|
||||
return
|
||||
end
|
||||
if errors.any?
|
||||
errors.add(:base, "Cannot create multi order with unfinished orders")
|
||||
raise ActiveRecord::Rollback
|
||||
orders.each do |order|
|
||||
if order.group_orders.blank?
|
||||
errors.add(:base, "Order #{order.name} has no group orders")
|
||||
end
|
||||
unless order.closed?
|
||||
errors.add(:base, "Order #{order.name} is not closed")
|
||||
end
|
||||
if order.group_orders.any? { |go| go.group_order_invoice.present? }
|
||||
errors.add(:base, "Order #{order.name} has group order invoices")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def create_multi_group_orders
|
||||
return if orders.empty?
|
||||
all_group_orders = orders.flat_map(&:group_orders)
|
||||
grouped_by_ordergroup = all_group_orders.group_by(&:ordergroup_id)
|
||||
|
||||
grouped_by_ordergroup.each do |ordergroup_id, group_orders|
|
||||
multi_group_order = MultiGroupOrder.create!(
|
||||
multi_order: self, group_orders: group_orders
|
||||
)
|
||||
# Now, associate each group_order with the new multi_group_order
|
||||
group_orders.each do |group_order|
|
||||
group_order.update!(multi_group_order: multi_group_order)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue