Module: HhPackage::ModelConcerns::PackageTraits

Extended by:
ActiveSupport::Concern
Included in:
Package::Ayce, Package::BuffetExtra, Package::Diy, Package::HungryAtHome, Package::HungrySet, Package::PartyPack, Package::SetMenu, Package::Xperience
Defined in:
app/models/concerns/hh_package/model_concerns/package_traits.rb

Instance Method Summary collapse

Instance Method Details

#badge_percentageObject



155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 155

def badge_percentage
  dynamic_pricing_type = package_attr.dynamic_pricing_type
  dynamic_pricings = pricings.where(dynamic_pricing_type: dynamic_pricing_type)

  case dynamic_pricing_type.to_sym
  when :normal
    package_attr&.promotion_badge_percentage.to_i
  else
    query_dynamic_pricings = dynamic_pricings.where.not(promotion_badge_percentage: nil)
    active_or_empty_date = query_dynamic_pricings.where('end_date >= ?', Time.current.to_date).
      or(query_dynamic_pricings.where(end_date: nil))

    active_or_empty_date.order(promotion_badge_percentage: :desc).limit(1).
      pluck(:promotion_badge_percentage).first&.to_i
  end
end

#fetch_comemore_paylessObject



119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 119

def fetch_comemore_payless
  current_date = Time.current.to_date

  package = package_attr&.package
  pricing_groups = package&.pricing_groups
  active_pricing_group = pricing_groups&.where('end_date >= ?', current_date)&.first
  empty_date_pricing_group = pricing_groups&.where('end_date IS NULL')&.exists? || false

  return active_pricing_group if active_pricing_group.present?
  return pricing_groups.first if dynamic_price_comemore_payless? && empty_date_pricing_group

  nil
end

#have_menu_quantity_limit?Boolean

Returns:

  • (Boolean)


85
86
87
88
89
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 85

def have_menu_quantity_limit?
  return false if package_attr.blank?

  package_attr.menu_quantity_limit.to_i.positive?
end

#prepaid_package?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 99

def prepaid_package?
  relative_charge_percent.nonzero? && require_cc?
end

#promotion_badgeObject



103
104
105
106
107
108
109
110
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 103

def promotion_badge
  return { promotion_type: nil, promotion_text: nil } if package_attr.blank? || promotion_text.blank?

  {
    promotion_type: promotion_type,
    promotion_text: promotion_text,
  }
end

#promotion_textObject



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 133

def promotion_text
  comemore_payless = fetch_comemore_payless

  if comemore_payless.present?
    package_type = package_attr.package_type.to_s

    # Use safe_constantize to avoid crashing if the class is missing
    klass = package_type.safe_constantize
    promo_type = klass ? klass::TYPE_SHORT : ''

    return I18n.t("views.package.promo.come_pay_less_dynamic.#{promo_type}",
                  group_size: comemore_payless.group_size,
                  group_size_to_pay: comemore_payless.group_size_to_pay, locale: :en)
  end

  if badge_percentage.to_f.positive?
    return "#{decimal_format(badge_percentage)}% OFF"
  end

  nil
end

#promotion_typeObject



112
113
114
115
116
117
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 112

def promotion_type
  return 'comemore_payless' if fetch_comemore_payless.present?
  return 'percentage_discount' if badge_percentage.to_f.positive?

  nil
end

#reservation_duration_for_displayObject



91
92
93
94
95
96
97
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 91

def reservation_duration_for_display
  if use_custom_display_duration?
    custom_display_duration
  else
    reservation_duration
  end
end

#validate_name_and_descriptionObject



74
75
76
77
78
79
80
81
82
83
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 74

def validate_name_and_description
  MyLocaleManager.available_locales.each do |locale|
    if MyLocaleManager::REQUIRED_TRANSLATIONS.include?(locale)
      %i[name description].each do |attr|
        method = "#{attr}_#{locale}"
        errors.add(method, 'can not be blank') if send(method).blank?
      end
    end
  end
end