Created
August 20, 2019 09:22
-
-
Save dabonka/94eb0bc979586ee93bbf9545c3a76997 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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