# frozen_string_literal: true require 'open_food_network/locking' class EnterpriseGroup < ApplicationRecord include PermalinkGenerator acts_as_list has_and_belongs_to_many :enterprises, join_table: 'enterprise_groups_enterprises' belongs_to :owner, class_name: 'Spree::User', inverse_of: :owned_groups, optional: true belongs_to :address, class_name: 'Spree::Address' accepts_nested_attributes_for :address validates :address, associated: true before_validation :set_undefined_address_fields before_validation :set_unused_address_fields before_validation :sanitize_permalink after_save :unset_undefined_address_fields after_find :unset_undefined_address_fields validates :name, presence: true validates :description, presence: true validates :permalink, uniqueness: true, presence: true delegate :phone, :address1, :address2, :city, :zipcode, :state, :country, to: :address has_one_attached :logo, service: image_service has_one_attached :promo_image, service: image_service validates :logo, processable_image: true, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} validates :promo_image, processable_image: true, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} scope :by_position, -> { order('position ASC') } scope :on_front_page, -> { where(on_front_page: true) } scope :managed_by, lambda { |user| if user.admin? where(nil) else where(owner_id: user.id) end } def set_unused_address_fields return if address.blank? address.firstname = address.lastname = address.company = I18n.t(:unused) end def set_undefined_address_fields return if address.blank? address.phone.present? || address.phone = I18n.t(:undefined) address.address1.present? || address.address1 = I18n.t(:undefined) address.city.present? || address.city = I18n.t(:undefined) address.state.present? || address.state = address.country.states.first address.zipcode.present? || address.zipcode = I18n.t(:undefined) end def unset_undefined_address_fields return if address.blank? address.phone = address.phone.sub(/^#{I18n.t(:undefined)}$/, '') address.address1 = address.address1.sub(/^#{I18n.t(:undefined)}$/, '') address.city = address.city.sub(/^#{I18n.t(:undefined)}$/, '') address.zipcode = address.zipcode.sub(/^#{I18n.t(:undefined)}$/, '') end def to_param permalink end # Remove any unsupported HTML. def long_description=(html) super(HtmlSanitizer.sanitize_and_enforce_link_target_blank(html)) end private def sanitize_permalink return unless permalink.blank? || permalink_changed? requested = permalink.presence || permalink_was.presence || name.presence || 'group' self.permalink = create_unique_permalink(requested.parameterize) end end