1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-11 22:24:21 +01:00
fab-manager/app/models/cart_item/training_reservation.rb

55 lines
1.6 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
# A training reservation added to the shopping cart
class CartItem::TrainingReservation < CartItem::Reservation
2022-12-28 17:51:27 +01:00
has_many :cart_item_reservation_slots, class_name: 'CartItem::ReservationSlot', dependent: :destroy, inverse_of: :cart_item,
2023-02-24 17:26:55 +01:00
foreign_type: 'cart_item_type', as: :cart_item
2022-12-28 17:51:27 +01:00
accepts_nested_attributes_for :cart_item_reservation_slots
belongs_to :operator_profile, class_name: 'InvoicingProfile'
belongs_to :customer_profile, class_name: 'InvoicingProfile'
belongs_to :reservable, polymorphic: true
belongs_to :plan
2023-07-20 16:55:22 +02:00
belongs_to :reservation_context
def price
2022-12-28 17:51:27 +01:00
base_amount = reservable&.amount_by_group(customer.group_id)&.amount
is_privileged = operator.admin? || (operator.manager? && operator.id != customer.id)
elements = { slots: [] }
amount = 0
hours_available = credits
2022-12-28 17:51:27 +01:00
cart_item_reservation_slots.each do |sr|
amount += get_slot_price(base_amount,
2022-12-28 17:51:27 +01:00
sr,
is_privileged,
elements: elements,
2022-12-28 17:51:27 +01:00
has_credits: (customer.training_credits.size < hours_available),
is_division: false)
end
{ elements: elements, amount: amount }
end
def type
'training'
end
protected
def credits
2022-12-28 17:51:27 +01:00
return 0 if plan.nil?
2022-12-28 17:51:27 +01:00
is_creditable = plan&.training_credits&.select { |credit| credit.creditable_id == reservable&.id }&.any?
is_creditable ? plan&.training_credit_nb : 0
end
def reservation_deadline_minutes
Setting.get('training_reservation_deadline').to_i
end
end