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
|