subj_models 0.3.8 → 0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/subj_models/access_group.rb +22 -0
- data/lib/subj_models/action.rb +31 -0
- data/lib/subj_models/attribute_value.rb +32 -0
- data/lib/subj_models/brand.rb +5 -5
- data/lib/subj_models/brand_line.rb +2 -2
- data/lib/subj_models/category.rb +36 -0
- data/lib/subj_models/city.rb +31 -0
- data/lib/subj_models/content_block.rb +25 -0
- data/lib/subj_models/event_schedule.rb +4 -4
- data/lib/subj_models/event_type.rb +27 -0
- data/lib/subj_models/faq.rb +55 -0
- data/lib/subj_models/global_notification.rb +16 -0
- data/lib/subj_models/measure_unit.rb +2 -2
- data/lib/subj_models/nomenclature2.rb +157 -0
- data/lib/subj_models/nomenclature_access_group.rb +19 -0
- data/lib/subj_models/nomenclature_attribute.rb +27 -0
- data/lib/subj_models/nomenclature_price.rb +38 -0
- data/lib/subj_models/nomenclature_review.rb +38 -0
- data/lib/subj_models/nomenclature_variety.rb +29 -0
- data/lib/subj_models/office.rb +33 -0
- data/lib/subj_models/office_contact.rb +45 -0
- data/lib/subj_models/order.rb +77 -0
- data/lib/subj_models/order_delivery_courier.rb +31 -0
- data/lib/subj_models/order_delivery_nova_poshta_warhouse.rb +17 -0
- data/lib/subj_models/order_delivery_pickup.rb +28 -0
- data/lib/subj_models/order_delivery_privatbank.rb +30 -0
- data/lib/subj_models/order_delivery_subj_courier.rb +24 -0
- data/lib/subj_models/order_item.rb +55 -0
- data/lib/subj_models/quality.rb +21 -0
- data/lib/subj_models/specialist_activity.rb +33 -0
- data/lib/subj_models/specialist_activity_document_type.rb +29 -0
- data/lib/subj_models/template.rb +2 -0
- data/lib/subj_models/user.rb +10 -9
- data/lib/subj_models/user_card.rb +29 -0
- data/lib/subj_models/user_delivery_address.rb +34 -0
- data/lib/subj_models/user_specialization.rb +24 -0
- data/lib/subj_models/user_work_place.rb +29 -0
- data/lib/subj_models/version.rb +1 -1
- data/lib/subj_models.rb +31 -0
- metadata +33 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 83d942dd044b470133b3d351ae6958dd3ad273b1
         | 
| 4 | 
            +
              data.tar.gz: f0d30f8ba4c5356efd3b3f85a7c82fc42cfd7eac
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a4a1e8d61751a6ddc5fd8a9374936e099e3b6d86c7d82151f20fdc423613e3dd19c263daa0d2eec7fc32255ba864e857fbf2f14d6b9866e7555e65f88383fc4f
         | 
| 7 | 
            +
              data.tar.gz: f838d0cb6b4b771b273891259633249780ad518f79ef00d1fcef7368926ef6d35747d1adf04d92b04fdc81c4374cafde8c827de946cc95a1eed9a029bab5c4e7
         | 
    
        data/.gitignore
    CHANGED
    
    
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module AccessGroup
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_and_belongs_to_many :user_specializations
         | 
| 14 | 
            +
                    has_and_belongs_to_many :nomenclatures, through: :nomenclature_access_groups
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module Action
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_and_belongs_to_many :cities
         | 
| 14 | 
            +
                    has_and_belongs_to_many :nomenclatures
         | 
| 15 | 
            +
                    belongs_to :image, class_name: "DocumentFile"
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    validates :name, :discount_percent, presence: true
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    scope :to_show, -> condition { where(to_show: condition) }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def to_s
         | 
| 26 | 
            +
                  name
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module AttributeValue
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_and_belongs_to_many :nomenclature_varieties
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    belongs_to :nomenclature
         | 
| 16 | 
            +
                    belongs_to :nomenclature_attribute
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    validates :nomenclature_value, :nomenclature_attribute, presence: true
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    scope :nomenclature_id, -> (nomenclature_id) { parent_id_scope("nomenclature", nomenclature_id) }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def to_s
         | 
| 27 | 
            +
                  nomenclature_value
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            end
         | 
    
        data/lib/subj_models/brand.rb
    CHANGED
    
    | @@ -13,12 +13,12 @@ module SubjModels | |
| 13 13 | 
             
                    include SubjModels::ComprisingExternalId
         | 
| 14 14 |  | 
| 15 15 | 
             
                    has_many :brand_lines, dependent: :destroy
         | 
| 16 | 
            -
                     | 
| 17 | 
            -
                     | 
| 16 | 
            +
                    has_many :nomenclatures
         | 
| 17 | 
            +
                    has_many :videos
         | 
| 18 18 |  | 
| 19 | 
            -
                     | 
| 20 | 
            -
                     | 
| 21 | 
            -
                     | 
| 19 | 
            +
                    belongs_to :content_block1, class_name: "ContentBlock"
         | 
| 20 | 
            +
                    belongs_to :content_block2, class_name: "ContentBlock"
         | 
| 21 | 
            +
                    belongs_to :content_block3, class_name: "ContentBlock"
         | 
| 22 22 | 
             
                    belongs_to :document_file
         | 
| 23 23 |  | 
| 24 24 | 
             
                    before_validation :set_first_letter, if: :name_changed?
         | 
| @@ -12,10 +12,10 @@ module SubjModels | |
| 12 12 | 
             
                    include SubjModels::SharedScopes
         | 
| 13 13 | 
             
                    include SubjModels::ComprisingExternalId
         | 
| 14 14 |  | 
| 15 | 
            -
                     | 
| 15 | 
            +
                    belongs_to :brand
         | 
| 16 16 | 
             
                    belongs_to :document_file
         | 
| 17 17 |  | 
| 18 | 
            -
                     | 
| 18 | 
            +
                    has_many :nomenclatures
         | 
| 19 19 |  | 
| 20 20 | 
             
                    validates :name, presence: true
         | 
| 21 21 |  | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module Category
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_many :nomenclatures
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    belongs_to :image, class_name: "DocumentFile"
         | 
| 16 | 
            +
                    belongs_to :image_big, class_name: "DocumentFile"  
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    validates :name, presence: true
         | 
| 19 | 
            +
                    #validates :slug_url, length: { minimum: 4, maximum: 50 }, uniqueness: true, presence: true
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    scope :by_slug_url, -> slug_url { where(slug_url: slug_url) }
         | 
| 22 | 
            +
                    scope :is_public, -> condition { where(is_public: condition) }
         | 
| 23 | 
            +
                    scope :by_id, -> ids { where(id: ids) }
         | 
| 24 | 
            +
                    scope :exclude_by_id, -> ids { where.not(id: ids) }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def to_s
         | 
| 31 | 
            +
                  name
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module City
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_and_belongs_to_many :actions
         | 
| 14 | 
            +
                    has_many :offices
         | 
| 15 | 
            +
                    has_many :users
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    validates :name, presence: true, uniqueness: true
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    scope :with_office, -> { joins(:offices).where("offices.id IS NOT NULL").group(:id) }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def to_s
         | 
| 26 | 
            +
                  name
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module ContentBlock
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    belongs_to :document_file
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def to_s
         | 
| 20 | 
            +
                  id.to_s
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            end
         | 
| @@ -17,11 +17,11 @@ module SubjModels | |
| 17 17 |  | 
| 18 18 | 
             
                    enum event_type: EVENT_TYPES
         | 
| 19 19 |  | 
| 20 | 
            -
                     | 
| 21 | 
            -
                     | 
| 22 | 
            -
                     | 
| 20 | 
            +
                    belongs_to :event
         | 
| 21 | 
            +
                    belongs_to :city
         | 
| 22 | 
            +
                    belongs_to :office
         | 
| 23 23 |  | 
| 24 | 
            -
                     | 
| 24 | 
            +
                    has_many :order_items
         | 
| 25 25 |  | 
| 26 26 | 
             
                    validates :event_type, presence: true, inclusion: { in: event_types.keys }
         | 
| 27 27 | 
             
                    validates :event_date, :event_price, :title, presence: true
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module EventType
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_many :events
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    validates :name, presence: true
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def to_s
         | 
| 22 | 
            +
                  name
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module Faq
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                include SubjModels::TypesSupport::FaqTypes
         | 
| 8 | 
            +
                include SubjModels::ValuesChecker
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def self.included(including_class)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  including_class.class_eval do
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    enum faq_type: FAQ_TYPES
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    after_create :notify_manager
         | 
| 19 | 
            +
                    after_save :notify_user
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    validates :question, presence: true, allow_blank: false,
         | 
| 22 | 
            +
                      uniqueness: { message: 'Простите, такой вопрос уже был задан' }
         | 
| 23 | 
            +
                    validates :faq_type, inclusion: { in: faq_types.keys },
         | 
| 24 | 
            +
                          on: :update
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    scope :with_answer, -> { where.not(answer: nil) }
         | 
| 27 | 
            +
                    scope :without_answer, -> { where(answer: nil) }
         | 
| 28 | 
            +
                    scope :on_site, -> { where(show_on_site: true) }
         | 
| 29 | 
            +
                    scope :type_is, -> (condition) { where(faq_type: condition) }
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def to_s
         | 
| 36 | 
            +
                  question
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def faq_type=(value)
         | 
| 40 | 
            +
                  super(check_string_for_int(value))
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                private
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def notify_manager
         | 
| 46 | 
            +
                  FaqMailer.notify_manager(self).deliver
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def notify_user
         | 
| 50 | 
            +
                  FaqMailer.notify_user(self).deliver if send_to_user
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            end
         | 
| @@ -0,0 +1,157 @@ | |
| 1 | 
            +
            require 'json'
         | 
| 2 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module SubjModels
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              module Nomenclature2
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def self.included(including_class)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  including_class.class_eval do
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    belongs_to :brand_line
         | 
| 15 | 
            +
                    belongs_to :brand
         | 
| 16 | 
            +
                    belongs_to :specialist_activity
         | 
| 17 | 
            +
                    belongs_to :category
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    has_many :nomenclature_varieties, dependent: :destroy
         | 
| 20 | 
            +
                    has_many :nomenclature_photos, dependent: :destroy
         | 
| 21 | 
            +
                    has_many :nomenclature_reviews, dependent: :destroy
         | 
| 22 | 
            +
                    has_many :nomenclature_files, dependent: :destroy
         | 
| 23 | 
            +
                    has_many :events
         | 
| 24 | 
            +
                    has_many :attribute_values, dependent: :destroy
         | 
| 25 | 
            +
                    has_many :nomenclature_prices
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    belongs_to :analog_related_nomenclature, class_name: "Nomenclature"
         | 
| 28 | 
            +
                    has_many :analogs, foreign_key: "analog_related_nomenclature_id", class_name: "Nomenclature"
         | 
| 29 | 
            +
                    belongs_to :bought_together_related_nomenclature, class_name: "Nomenclature"
         | 
| 30 | 
            +
                    has_many :bought_together, foreign_key: "bought_together_related_nomenclature_id", class_name: "Nomenclature"
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    has_and_belongs_to_many :actions
         | 
| 33 | 
            +
                    has_and_belongs_to_many :access_groups, through: :nomenclature_access_groups
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    validates :name, presence: true
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    scope :with_category, -> { where.not(category_id: nil) }
         | 
| 38 | 
            +
                    scope :brand_line_ids, -> (brand_line_id) { where(brand_line_id: brand_line_id) }
         | 
| 39 | 
            +
                    scope :with_action, -> { joins(:actions).distinct }
         | 
| 40 | 
            +
                    scope :is_recommended, -> condition { where(is_recommended: condition) }
         | 
| 41 | 
            +
                    scope :is_stock, -> (condition) do
         | 
| 42 | 
            +
                      nomenclature_prices_join.joins("LEFT OUTER JOIN qualities ON qualities.id = nomenclature_prices.quality_id").where("qualities.is_stock" => condition)
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    scope :bought_together_external_id, -> (ids) do
         | 
| 46 | 
            +
                      order_ids = Order.joins(order_items: [nomenclature_variety: :nomenclature]).where("nomenclatures.external_id IN (?)", ids).uniq.pluck(:id)
         | 
| 47 | 
            +
                      Nomenclature.joins(nomenclature_varieties: [order_items: :order]).where("orders.id" => order_ids).order(:id).uniq
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    scope :is_available, -> (params) do
         | 
| 51 | 
            +
                      is_available = params.first
         | 
| 52 | 
            +
                      return all unless is_available == 'true'
         | 
| 53 | 
            +
                      user = User.find_by(id: params.second.to_i)
         | 
| 54 | 
            +
                      not_professional_ids = Nomenclature.is_professional(false).pluck(:id)
         | 
| 55 | 
            +
                      ids = user ? user.available_nomenclature_ids.concat(not_professional_ids) : []
         | 
| 56 | 
            +
                      where(id: ids)
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    scope :only_promotional, -> do
         | 
| 60 | 
            +
                      joins(:actions).uniq
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    scope :is_professional, -> (condition) {where(is_professional: condition) }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    scope :price, -> (prices) do
         | 
| 66 | 
            +
                      prices = prices.map { |p| p.split(',') }
         | 
| 67 | 
            +
                      nomenclature_prices_join.
         | 
| 68 | 
            +
                      where(
         | 
| 69 | 
            +
                        prices.map do |range|
         | 
| 70 | 
            +
                          if range[0] && range[1]
         | 
| 71 | 
            +
                            '(nomenclature_prices.current_price >= ? AND nomenclature_prices.current_price < ?)'
         | 
| 72 | 
            +
                          elsif range[0]
         | 
| 73 | 
            +
                            '(nomenclature_prices.current_price >= ?)'
         | 
| 74 | 
            +
                          elsif range[1]
         | 
| 75 | 
            +
                            '(nomenclature_prices.current_price < ?)'
         | 
| 76 | 
            +
                          end
         | 
| 77 | 
            +
                        end.join(' OR '),
         | 
| 78 | 
            +
                        *prices.map(&:compact).flatten
         | 
| 79 | 
            +
                      )
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    scope :order_by_name, -> (ordering) do
         | 
| 83 | 
            +
                      ordering = ordering.second.try(:to_sym)
         | 
| 84 | 
            +
                      order(name: ordering)
         | 
| 85 | 
            +
                    end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    scope :order_by_popularity, -> (ordering) do
         | 
| 88 | 
            +
                      ordering = ordering.second.try(:to_sym)
         | 
| 89 | 
            +
                      order(popularity: ordering)
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                    scope :attribute_value_ids, -> (attribute_value_name_strings) do
         | 
| 93 | 
            +
                      query_result = nil
         | 
| 94 | 
            +
                      nomenclature_ids = ids
         | 
| 95 | 
            +
                      attribute_value_name_strings.each do |str|
         | 
| 96 | 
            +
                        attr_names = str.split('/')
         | 
| 97 | 
            +
                        query_result = Nomenclature.joins(:attribute_values).where("attribute_values.nomenclature_value" => attr_names).where(id: nomenclature_ids).uniq
         | 
| 98 | 
            +
                        nomenclature_ids = query_result.pluck(:id)
         | 
| 99 | 
            +
                      end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                      query_result
         | 
| 102 | 
            +
                    end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    scope :nomenclature_prices_join, -> do
         | 
| 105 | 
            +
                      joins(:nomenclature_prices)
         | 
| 106 | 
            +
                      #joins('LEFT OUTER JOIN nomenclature_varieties ON nomenclature_varieties.id = (SELECT innerNomVar.id FROM nomenclature_varieties as innerNomVar WHERE innerNomVar.nomenclature_id = nomenclatures.id LIMIT 1)')
         | 
| 107 | 
            +
                      #.joins('LEFT OUTER JOIN nomenclature_prices on nomenclature_prices.id = (SELECT innerNomPrice.id FROM nomenclature_prices AS innerNomPrice WHERE innerNomPrice.nomenclature_variety_id = nomenclature_varieties.id LIMIT 1)')
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    scope :order_by_price, -> (ordering) do
         | 
| 111 | 
            +
                      ordering = ordering.second.try(:to_sym)
         | 
| 112 | 
            +
                      if [:asc, :desc].include? ordering
         | 
| 113 | 
            +
                        nomenclature_prices_join.
         | 
| 114 | 
            +
                        order("nomenclature_prices.current_price #{ordering}")
         | 
| 115 | 
            +
                      end
         | 
| 116 | 
            +
                    end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    scope :category_id, -> (category_id) do
         | 
| 119 | 
            +
                      return all unless category_id.present?
         | 
| 120 | 
            +
                      where(category_id: category_id)
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    scope :nomenclature_ids, -> (ids) { where(id: ids) }
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                    scope :brand_ids, -> (brand) do
         | 
| 126 | 
            +
                      return all unless brand.present?
         | 
| 127 | 
            +
                      joins(:brand_line).where(brand_lines: { brand_id: brand }) #TODO join brands in two ways
         | 
| 128 | 
            +
                    end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                    scope :brand_line_ids, -> (ids) do
         | 
| 131 | 
            +
                      return all unless ids.present?
         | 
| 132 | 
            +
                      where(brand_line_id: ids)
         | 
| 133 | 
            +
                    end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                def is_bought(user_id)
         | 
| 140 | 
            +
                  Order.joins(order_items: :nomenclature)
         | 
| 141 | 
            +
                  .where("nomenclatures.id IN (?)", self.id)
         | 
| 142 | 
            +
                  .where(user_id: user_id).any?
         | 
| 143 | 
            +
                end
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                def to_s
         | 
| 146 | 
            +
                  id.to_s # TODO
         | 
| 147 | 
            +
                end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                def self.name_field_update(field)
         | 
| 150 | 
            +
                  if field.to_s == 'name' #TODO refactor this
         | 
| 151 | 
            +
                    field = 'name.raw'
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
              end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module NomenclatureAccessGroup
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module NomenclatureAttribute
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    has_many :attribute_values, dependent: :destroy
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    validates :name, presence: true
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def to_s
         | 
| 22 | 
            +
                  name
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module NomenclaturePrice
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    belongs_to :nomenclature, touch: true
         | 
| 14 | 
            +
                    belongs_to :nomenclature_variety
         | 
| 15 | 
            +
                    belongs_to :quality
         | 
| 16 | 
            +
                    belongs_to :measure_unit
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    has_many :order_items
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    validates :current_price, presence: true
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    scope :nomenclature_id, -> (nomenclature_id) { parent_id_scope("nomenclature", nomenclature_id) }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    scope :belongs_to_nomenclature, -> (nomenclature_id) do
         | 
| 25 | 
            +
                      where(nomenclature_id: nomenclature_id).union(joins(:nomenclature_variety).where("nomenclature_varieties.nomenclature_id" => nomenclature_id))
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def to_s
         | 
| 33 | 
            +
                  id.to_s # TODO
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            end
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module NomenclatureReview
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    after_create :notify
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    belongs_to :nomenclature
         | 
| 16 | 
            +
                    belongs_to :user
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    validates :user, :nomenclature, :content, presence: true
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    scope :nomenclature_id, -> nomenclature { where(nomenclature_id: nomenclature) }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    scope :approved, -> { where(review_approved: true) }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    scope :without_approves, -> { where(review_approved: false) }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                private
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def notify
         | 
| 33 | 
            +
                  NomenclatureReviewMailer.notify(self).deliver
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            require 'subj_models/concerns/comprising_external_id'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SubjModels
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module NomenclatureVariety
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def self.included(including_class)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  including_class.class_eval do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    include SubjModels::ComprisingExternalId
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    belongs_to :nomenclature
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    has_many :nomenclature_prices
         | 
| 16 | 
            +
                    has_many :order_items
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    validates :name, presence: true
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    scope :external_id, -> id { where(external_id: id) }
         | 
| 21 | 
            +
                    scope :nomenclature_id, -> (nomenclature_id) { parent_id_scope("nomenclature", nomenclature_id) }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            end
         |