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
- #badge_percentage ⇒ Object
- #fetch_comemore_payless ⇒ Object
- #have_menu_quantity_limit? ⇒ Boolean
- #prepaid_package? ⇒ Boolean
- #promotion_badge ⇒ Object
- #promotion_text ⇒ Object
- #promotion_type ⇒ Object
- #reservation_duration_for_display ⇒ Object
- #validate_name_and_description ⇒ Object
Instance Method Details
#badge_percentage ⇒ Object
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_payless ⇒ Object
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
85 86 87 88 89 |
# File 'app/models/concerns/hh_package/model_concerns/package_traits.rb', line 85 def return false if package_attr.blank? package_attr..to_i.positive? end |
#prepaid_package? ⇒ 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_badge ⇒ Object
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_text ⇒ Object
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_type ⇒ Object
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_display ⇒ Object
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_description ⇒ Object
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 |