chatwoot-develop/enterprise/app/models/captain/reservation.rb

38 lines
1.5 KiB
Ruby

module Captain
class Reservation < ApplicationRecord
self.table_name = 'captain_reservations'
belongs_to :account
belongs_to :inbox
belongs_to :contact
belongs_to :contact_inbox
belongs_to :conversation, class_name: '::Conversation', optional: true
belongs_to :brand, class_name: 'Captain::Brand', foreign_key: 'captain_brand_id', optional: true
belongs_to :unit, class_name: 'Captain::Unit', foreign_key: 'captain_unit_id', optional: true
belongs_to :current_pix_charge, class_name: 'Captain::PixCharge', optional: true
has_many :reminders, class_name: 'Captain::Reminder', as: :source, dependent: :destroy
enum status: { scheduled: 0, active: 1, completed: 2, cancelled: 3, pending_payment: 4, draft: 5 }
enum payment_status: { pending: 'pending', paid: 'paid', failed: 'failed' }, _prefix: :payment
scope :filter_by_unit, ->(unit_id) { where(captain_unit_id: unit_id) if unit_id.present? }
scope :filter_by_status, ->(status) { where(status: status) if status.present? && status != 'all' }
scope :filter_by_date_range, lambda { |from, to|
if from.present? && to.present?
where(check_in_at: from..to)
elsif from.present?
where('check_in_at >= ?', from)
elsif to.present?
where('check_in_at <= ?', to)
end
}
validates :suite_identifier, presence: true
validates :check_in_at, presence: true
validates :check_out_at, presence: true
delegate :name, :email, :phone_number, to: :contact, prefix: true
end
end