Skip to content

Instantly share code, notes, and snippets.

@dabonka
Created August 20, 2019 09:22
Show Gist options
  • Save dabonka/94eb0bc979586ee93bbf9545c3a76997 to your computer and use it in GitHub Desktop.
Save dabonka/94eb0bc979586ee93bbf9545c3a76997 to your computer and use it in GitHub Desktop.
class StoreSerializer < ActiveModel::Serializer
attributes :id, :name, :logo, :about, :lat, :lng, :facebook_link, :twitter_link, :instagram_link, :pinterest_link, :youtube_link,
:address, :country, :state, :city, :zip, :email, :website, :work_time, :phone, :assign_admins,
:loyalty_cards_count, :balance, :reviews_count, :average, :paid, :slides, :pictures, :resipient_pop_up, :reward_bonus, :review_bonus, :front_badge_template, :tag_list, :price_range
belongs_to :category
has_many :menus
has_many :services
has_one :store_referral
has_one :company
def email
object.email.try(:strip)
end
def tag_list
object.tag_list
end
def resipient_pop_up
instance_options[:recipient_pop_up]
end
def paid
object.company.full
end
def slides
object.slides.order('appearance_order asc').map { |slide| {id: slide.id, appearance_order: slide.appearance_order, url: slide.image.url}}
end
def pictures
object.pictures.order('appearance_order asc').map { |picture| {id: picture.id, appearance_order: picture.appearance_order, url: picture.image.url}}
end
def logo
{ url: object.logo.url }
end
def front_badge_template
{ url: object.front_badge_template.url }
end
def assign_admins
if current_user.class.name == 'Admin'
object.admins.ids
end
end
def loyalty_cards_count
amount = 0
loyalty_cards = object.loyalty_cards.where('active = ?', true)
company_user = CompanyUser.where('company_id = ? AND profile_id = ?', object.company_id, current_user.id).first
amount += company_user.blank? || company_user.punch_cards.blank? ? loyalty_cards.where('actable_type = ?', 'PunchCard').count : PunchCardCompanyUser.joins({punch_card: :loyalty_card}).where('loyalty_cards.id in (?) and punch_card_company_users.company_user_id = ?', loyalty_cards.ids, company_user.id).size +
(loyalty_cards.where.not('actable_id in (?)', company_user.punch_card_company_users.pluck(:punch_card_id)).where('actable_type = ?', 'PunchCard')).size
amount += company_user.blank? || company_user.credit_punch_cards.blank? ? loyalty_cards.where('actable_type = ?', 'CreditPunchCard').count : CreditPunchCardCompanyUser.joins({credit_punch_card: :loyalty_card}).where('loyalty_cards.id in (?) and credit_punch_card_company_users.company_user_id = ?', loyalty_cards.ids, company_user.id).size +
(loyalty_cards.where.not('actable_id in (?)', company_user.credit_punch_card_company_users.pluck(:credit_punch_card_id)).where('actable_type = ?', 'CreditPunchCard')).count
amount += company_user.blank? || company_user.credit_cards.blank? ? loyalty_cards.where('actable_type = ?', 'CreditCard').count : CreditCardCompanyUser.joins({credit_card: :loyalty_card}).where('loyalty_cards.id in (?) and credit_card_company_users.company_user_id = ?', loyalty_cards.ids, company_user.id).size +
(loyalty_cards.where.not('actable_id in (?)', company_user.credit_card_company_users.pluck(:credit_card_id)).where('actable_type = ?', 'CreditCard')).count
amount += company_user.blank? || company_user.memberships.blank? ? loyalty_cards.where('actable_type = ?', 'Membership').count : MembershipCompanyUser.joins({membership: :loyalty_card}).where('loyalty_cards.id in (?) and membership_company_users.company_user_id = ?', loyalty_cards.ids, company_user.id).size +
(loyalty_cards.where.not('actable_id in (?)', company_user.membership_company_users.pluck(:membership_id)).where('actable_type = ?', 'Membership')).count
amount += company_user.blank? || company_user.membership_prepaids.blank? ? loyalty_cards.where('actable_type = ?', 'MembershipPrepaid').count : MembershipPrepaidCompanyUser.joins({membership_prepaid: :loyalty_card}).where('loyalty_cards.id in (?) and membership_prepaid_company_users.company_user_id = ?', loyalty_cards.ids, company_user.id).size +
(loyalty_cards.where.not('actable_id in (?)', company_user.membership_prepaid_company_users.pluck(:membership_prepaid_id)).where('actable_type = ?', 'MembershipPrepaid')).count
amount
end
def balance
if current_user.class.name == 'Profile'
gift_card = GiftCard.single_store(current_user.id, object.id).sum(:amount)
store_credit = StoreCredit.single_store(current_user.id, object.id).sum(:amount)
(store_credit + gift_card)
end
end
def reviews_count
object.reviews.where('active = ?', true).count
end
def average
object.reviews.where('active = ?', true).average(:rating).to_f.round(2)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment