# frozen_string_literal: true # == Schema Information # # Table name: service_infos # # id :integer not null, primary key # structure_id :integer # description_translations :hstore default({}) # items_title_translations :hstore default({}) # items_description_translations :hstore default({}) # items_ids :integer default([]) # show_on_main :boolean default(FALSE) # params :hstore default({}) # created_at :datetime # updated_at :datetime # class ServiceInfo < ActiveRecord::Base belongs_to :structure include TranslationCms::WhiteList extend EnumField::EnumeratedAttribute translates :description, :items_title, :items_description, :prices_title, :welcome_description validates :description, presence: true white_list :description has_one :cover, as: :assetable, dependent: :destroy fileuploads :cover enumerated_attribute :badge, class: FeatureBadge def items Structure.visible.sorted.where(id: items_ids) end def related_posts return [] if related_posts_ids.blank? Post.includes(:cover).past.where(id: related_posts_ids).limit(12) end def crm_params params.to_json end def crm_params=(serialized) self.params = ActiveSupport::JSON.decode(serialized) end def service_rate @base_price ||= TranslationCms::Api::Setting.all!.first.base_price (TranslationCms::Api::Rates::Service.find_rate(params).try(:price) || 1) * @base_price || 0.1 end def child_services_rates TranslationCms::Api::Rates::Service.find_rates_by_service(params) end def packages @packages ||= TranslationCms::Api::OrderPackage.all! end def package_price(package) package ||= packages.first base = service_rate if package.price_type base + package.price_type.calc(package.price, base: base) else base end end def extra_features service_id = params['service_id'].to_i return [] unless service_id > 0 TranslationCms::Api::Rates::Feature.all!.select do |f| (f.service_id == service_id) && f.feature_type.extras? end end def crm_service_id @crm_service_id ||= params.try(:[], 'service_id').try(:to_i) end def crm_service Rails.cache.fetch "raw_service_#{crm_service_id}", expires_in: 1.hour do TranslationCms::Api::Service.find(crm_service_id).first end end end