subj_models 0.4.3 → 0.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84241f6129048ebc4734a5b85a99d1ca8dbf02d0
4
- data.tar.gz: f626cdcd3b1d2b5b06f617733b6c4ff97c884d5a
3
+ metadata.gz: 83658738a7ab8465ad59311cc0045293dcd9dafd
4
+ data.tar.gz: 454ba909f7b04f33c533e5d3dc8379b7ca6fb407
5
5
  SHA512:
6
- metadata.gz: 1e182bdd11fee25f45f63acb62500d154679df971a5de1d7da2ef6c317e21c09fb910a584babaaf6c434aef149b972830e39ee8c93ea9f7c25e46f72942b71e6
7
- data.tar.gz: 6455c3d590b45ee561f73114569c59fd620b24491b2e2555ef76b8498c53dcb9d60a1fd40461df7898f15c73b0930a741a0ec6be25501f49ff3f0c3524e9b4c6
6
+ metadata.gz: b8aa9974e7dd80d9409e26c6ed2ff2cf0ce3dc2a81d34870e94dd2c4d14357c0f16e011f759e47b22dba605d9e82a2714cbc46fa73045fc05ff6d7634db5a7ea
7
+ data.tar.gz: beea5614269b216341631d6f8e40ae1372d7db27c3f4c49ce59c854cf9b77c545d598dc053a093b36bf34319fc3e3462a14aa08e9b9b30ee992a384f0fcff358
@@ -13,6 +13,7 @@ module SubjModels
13
13
  has_and_belongs_to_many :cities
14
14
  has_and_belongs_to_many :nomenclatures
15
15
  belongs_to :image, class_name: "DocumentFile"
16
+ belongs_to :categories_list_image, class_name: "DocumentFile"
16
17
 
17
18
  validates :name, :discount_percent, presence: true
18
19
 
@@ -15,6 +15,8 @@ module SubjModels
15
15
  has_many :brand_lines, dependent: :destroy
16
16
  has_many :nomenclatures
17
17
  has_many :videos
18
+ has_many :events
19
+
18
20
  has_and_belongs_to_many :users
19
21
 
20
22
  belongs_to :content_block1, class_name: "ContentBlock"
@@ -34,7 +34,7 @@ module SubjModels
34
34
 
35
35
  scope :brand_ids, -> (brand_ids_string) do
36
36
  unless brand_ids_string.blank?
37
- joins(:brand, nomenclatures: :specialist_activity).where('brands.id' => brand_ids_string.split(','))
37
+ joins(:brand).where('brands.id' => brand_ids_string.split(','))
38
38
  end
39
39
  end
40
40
 
@@ -16,7 +16,6 @@ module SubjModels
16
16
  has_one :user
17
17
  has_one :manager
18
18
  has_one :user_specialization_approval
19
- has_one :event
20
19
 
21
20
  has_many :videos
22
21
  has_many :brands
@@ -14,10 +14,52 @@ module SubjModels
14
14
  belongs_to :event_type
15
15
  belongs_to :nomenclature
16
16
  belongs_to :document_file
17
+ belongs_to :brand
17
18
 
18
19
  has_one :event_schedule
20
+ has_one :nomenclature_price
19
21
 
20
- validates :document_file, presence: true
22
+ has_many :order_items
23
+ has_many :event_bookings
24
+
25
+ has_and_belongs_to_many :user_specializations
26
+ has_and_belongs_to_many :nomenclatures
27
+
28
+ validates :document_file, :title, presence: true
29
+
30
+ scope :from_today, -> {
31
+ joins(:event_schedule).where('event_schedules.event_date >= ?', DateTime.now.beginning_of_day )
32
+ .order( 'event_schedules.event_date ASC' )
33
+ # .unscope(:event_schedule)
34
+ }
35
+
36
+ scope :where_nomenclature_ids, -> (ids) do
37
+ joins(:nomenclatures).where(nomenclatures: {id: ids})
38
+ end
39
+
40
+ scope :office_ids, -> (ids) do
41
+ joins(event_schedule: [:office]).where(event_schedule: { office: {id: ids}})
42
+ end
43
+
44
+ scope :type_ids, -> (ids) do
45
+ joins(:event_type).where(event_type: {id: ids})
46
+ end
47
+
48
+ scope :brand_ids, -> (ids) do
49
+ joins(:brand).where(brand: { id: ids})
50
+ end
51
+
52
+ scope :only_free, -> do
53
+ joins(:event_schedule).where(event_schedule: { is_free: true } )
54
+ end
55
+
56
+ scope :specialities_ids, -> (ids) do
57
+ joins(:user_specializations).where(user_specializations: { id: ids})
58
+ end
59
+
60
+ scope :date_range, -> (date) do
61
+ joins(:event_schedule).where(event_schedule: { event_date: DateTime.parse(date['from']).beginning_of_day..DateTime.parse(date['to']).end_of_day } )
62
+ end
21
63
 
22
64
  scope :today_events, -> {
23
65
  includes(:event_schedule).where(event_schedule: { event_date: DateTime.now.beginning_of_day..DateTime.now.end_of_day } )
@@ -29,7 +71,7 @@ module SubjModels
29
71
  end
30
72
 
31
73
  def to_s
32
- id.to_s # TODO
74
+ title.to_s
33
75
  end
34
76
 
35
77
  end
@@ -0,0 +1,39 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module EventBookingModule
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ belongs_to :order
14
+ belongs_to :user
15
+ belongs_to :event
16
+
17
+ validates :user, uniqueness: { scope: :event }
18
+
19
+ scope :user_id , -> (user_id) {where(user_id: user_id)}
20
+ scope :event_id , -> (event_id) {where(event_id: event_id)}
21
+ scope :only_new, -> (condition) do
22
+ if condition
23
+ where(external_id: nil)
24
+ else
25
+ all
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ def to_s
34
+ id.to_s
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -18,15 +18,11 @@ module SubjModels
18
18
  enum event_type: EVENT_TYPES
19
19
 
20
20
  belongs_to :event
21
- belongs_to :city
22
21
  belongs_to :office
23
22
 
24
- has_many :order_items
23
+ validates :event_date, presence: true
25
24
 
26
- validates :event_type, presence: true, inclusion: { in: event_types.keys }
27
- validates :event_date, :event_price, :title, presence: true
28
-
29
- scope :event_id, -> (event_id) { parent_id_scope("event", event_id) }
25
+ scope :event_id, -> (event_id) { parent_id_scope(event_id: event_id) }
30
26
 
31
27
  end
32
28
 
@@ -13,6 +13,7 @@ module SubjModels
13
13
  include SubjModels::ComprisingExternalId
14
14
 
15
15
  belongs_to :document_file
16
+ has_many :events
16
17
 
17
18
  validates :email, uniqueness: { case_sensitive: false }
18
19
  validates :first_name, :last_name, :email, :phone, :document_file, presence: true
@@ -13,14 +13,13 @@ module SubjModels
13
13
 
14
14
  belongs_to :brand_line
15
15
  belongs_to :brand
16
- belongs_to :specialist_activity
16
+ belongs_to :user_specialization
17
17
  belongs_to :category
18
18
 
19
19
  has_many :nomenclature_varieties, dependent: :destroy
20
20
  has_many :nomenclature_photos, dependent: :destroy
21
21
  has_many :nomenclature_reviews, dependent: :destroy
22
22
  has_many :nomenclature_files, dependent: :destroy
23
- has_many :events
24
23
  has_many :attribute_values, dependent: :destroy
25
24
  has_many :nomenclature_prices, dependent: :destroy
26
25
 
@@ -31,6 +30,7 @@ module SubjModels
31
30
 
32
31
  has_and_belongs_to_many :actions
33
32
  has_and_belongs_to_many :access_groups, through: :nomenclature_access_groups
33
+ has_and_belongs_to_many :events
34
34
 
35
35
  validates :name, presence: true
36
36
 
@@ -40,7 +40,7 @@ module SubjModels
40
40
  scope :is_recommended, -> condition { where(is_recommended: condition) }
41
41
  scope :in_index_list, -> condition { where(show_on_index: condition) }
42
42
  scope :is_stock, -> (condition) do
43
- nomenclature_prices_join.joins("LEFT OUTER JOIN qualities ON qualities.id = nomenclature_prices.quality_id").where("qualities.is_stock" => condition)
43
+ nomenclature_prices_join.joins("LEFT OUTER JOIN qualities ON qualities.id = nomenclature_prices.quality_id").where("qualities.is_stock" => condition).uniq
44
44
  end
45
45
 
46
46
  scope :bought_together_external_id, -> (ids) do
@@ -14,6 +14,7 @@ module SubjModels
14
14
  belongs_to :nomenclature_variety
15
15
  belongs_to :quality
16
16
  belongs_to :measure_unit
17
+ belongs_to :event
17
18
 
18
19
  has_many :order_items
19
20
 
@@ -32,6 +32,7 @@ module SubjModels
32
32
  has_one :order_delivery_subj_courier
33
33
  has_one :order_delivery_nova_poshta_warhouse
34
34
  has_many :order_items, dependent: :destroy
35
+ has_many :event_bookings
35
36
 
36
37
  validates :order_status, inclusion: { in: order_statuses.keys }, on: :update
37
38
  validates :delivery_type, inclusion: { in: delivery_types.keys }, on: :update
@@ -40,14 +41,33 @@ module SubjModels
40
41
 
41
42
  scope :user_id, -> user { where(user_id: user) }
42
43
 
44
+ scope :with_status, -> (status) do
45
+ where(order_status: Order.order_statuses[status] || status)
46
+ end
47
+
43
48
  scope :last_order, -> (user_id) do
44
- Order.joins(:user).where("users.id" => user_id).last
49
+ Order.joins(:user, :order_items)
50
+ .where("users.id" => user_id)
51
+ .where(order_items: {item_type: 1})
52
+ .last
45
53
  end
46
54
 
47
55
  end
48
56
 
49
57
  end
50
58
 
59
+ def order_status_value
60
+ self[:order_status]
61
+ end
62
+
63
+ def delivery_type_value
64
+ self[:delivery_type]
65
+ end
66
+
67
+ def payment_type_value
68
+ self[:payment_type]
69
+ end
70
+
51
71
  def to_s
52
72
  id.to_s # TODO
53
73
  end
@@ -13,8 +13,8 @@ module SubjModels
13
13
  belongs_to :order
14
14
  belongs_to :city
15
15
 
16
- validates :user_first_name, :user_last_name, :delivery_address, :street_name,
17
- :house_number, :delivery_time, presence: true
16
+ validates :street_name,:delivery_time_from, :delivery_time_to,
17
+ :house_number, presence: true
18
18
 
19
19
  scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
20
20
 
@@ -23,7 +23,7 @@ module SubjModels
23
23
  end
24
24
 
25
25
  def to_s
26
- id.to_s # TODO
26
+ "#{street_name}, #{house_number}"
27
27
  end
28
28
 
29
29
  end
@@ -8,6 +8,8 @@ module SubjModels
8
8
 
9
9
  belongs_to :order
10
10
 
11
+ scope :order_id, -> (order_id) { where(order_id: order_id) }
12
+
11
13
  end
12
14
 
13
15
  end
@@ -13,7 +13,7 @@ module SubjModels
13
13
  belongs_to :order
14
14
  belongs_to :office
15
15
 
16
- scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
16
+ scope :order_id, -> (order_id) { where(order_id: order_id) }
17
17
 
18
18
  end
19
19
 
@@ -15,7 +15,7 @@ module SubjModels
15
15
 
16
16
  validates :privat_bank_address, presence: true
17
17
 
18
- scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
18
+ scope :order_id, -> (order_id) { where(order_id: order_id) }
19
19
 
20
20
  end
21
21
 
@@ -9,7 +9,7 @@ module SubjModels
9
9
  belongs_to :order
10
10
  belongs_to :city
11
11
 
12
- scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
12
+ scope :order_id, -> (order_id) { where(order_id: order_id) }
13
13
 
14
14
  end
15
15
 
@@ -20,7 +20,7 @@ module SubjModels
20
20
  enum item_type: ITEM_TYPES
21
21
 
22
22
  belongs_to :order
23
- belongs_to :event_schedule
23
+ belongs_to :event
24
24
  belongs_to :nomenclature_variety
25
25
  belongs_to :nomenclature
26
26
 
@@ -44,10 +44,21 @@ module SubjModels
44
44
  private
45
45
 
46
46
  def update_nomenclature_popularity
47
- current_popularity = (nomenclature.popularity && nomenclature.popularity > 0) ? nomenclature.popularity : 0
48
- method = transaction_include_any_action?([:create]) ? :+ : :-
49
- new_popularity = current_popularity.send(method, self.item_count)
50
- nomenclature.update(popularity: new_popularity)
47
+ if nomenclature
48
+ current_popularity = (nomenclature.popularity && nomenclature.popularity > 0) ? nomenclature.popularity : 0
49
+ method = transaction_include_any_action?([:create]) ? :+ : :-
50
+ new_popularity = current_popularity.send(method, self.item_count)
51
+ nomenclature.update(popularity: new_popularity)
52
+ end
53
+ end
54
+
55
+ def add_nomenclature_quality
56
+ founded_quality_id = if nomenclature_variety
57
+ nomenclature_variety.nomenclature_price.try(:quality_id)
58
+ else
59
+ nomenclature.nomenclature_prices.try(:last).try(:quality_id)
60
+ end
61
+ self.quality_id = founded_quality_id if founded_quality_id
51
62
  end
52
63
 
53
64
  end
@@ -16,6 +16,10 @@ module SubjModels
16
16
 
17
17
  end
18
18
 
19
+ def to_s
20
+ name
21
+ end
22
+
19
23
  end
20
24
 
21
25
  end
@@ -10,7 +10,12 @@ module SubjModels
10
10
  NATURAL_PERSON = 3
11
11
  DISTRIBUTOR = 4
12
12
 
13
- USER_TYPES = { 'админ' => ADMIN, 'юридическое лицо' => LEGAL_PERSON, 'физическое лицо' => NATURAL_PERSON, 'поставщик' => DISTRIBUTOR }
13
+ USER_TYPES = {
14
+ 'админ' => ADMIN,
15
+ 'юридическое лицо' => LEGAL_PERSON,
16
+ 'физическое лицо' => NATURAL_PERSON,
17
+ 'поставщик' => DISTRIBUTOR
18
+ }
14
19
  end
15
20
 
16
21
  module EventTypes
@@ -55,12 +60,14 @@ module SubjModels
55
60
  PROCESSED = 2
56
61
  EN_ROUTE_EXTERNAL_COURIER = 3
57
62
  EN_ROUTE_INTERNAL_COURIER = 4
63
+ DELIVERED = 5
58
64
 
59
65
  ORDER_STATUSES = {
60
66
  'принят' => RECEIVED,
61
67
  'в обработке' => PROCESSED,
62
68
  'в пути(внешний курьер)' => EN_ROUTE_EXTERNAL_COURIER,
63
- 'внутренний курьер' => EN_ROUTE_INTERNAL_COURIER
69
+ 'внутренний курьер' => EN_ROUTE_INTERNAL_COURIER,
70
+ 'получен' => DELIVERED
64
71
  }
65
72
  end
66
73
 
@@ -10,11 +10,11 @@ module SubjModels
10
10
 
11
11
  include SubjModels::ComprisingExternalId
12
12
 
13
- belongs_to :specialist_activity
13
+ belongs_to :user_specialization
14
14
 
15
15
  validates :name, presence: true
16
16
 
17
- scope :specialist_activity_id, -> (specialist_activity_id) { parent_id_scope("specialist_activity", specialist_activity_id) }
17
+ scope :user_specialization_id, -> (user_specialization_id) { parent_id_scope("user_specialization", user_specialization_id) }
18
18
 
19
19
  end
20
20
 
@@ -34,7 +34,9 @@ module SubjModels
34
34
  has_many :user_specialization_approvals, dependent: :destroy
35
35
  has_many :user_cards, dependent: :destroy
36
36
  has_one :user_work_place, dependent: :destroy
37
+ has_one :user_card_delivery
37
38
  has_many :user_delivery_addresses, dependent: :destroy
39
+ has_many :event_bookings, dependent: :destroy
38
40
 
39
41
  has_and_belongs_to_many :user_specializations
40
42
  has_and_belongs_to_many :brands
@@ -46,12 +48,13 @@ module SubjModels
46
48
  validates :first_name, :last_name, presence: true,
47
49
  on: :update,
48
50
  unless: lambda { |user| user.legal_person? || user.skip_validations }
49
- validates :email, uniqueness: { case_sensitive: false }, presence: true,
50
- on: :update,
51
- unless: :skip_validations
52
- validates :phone, uniqueness: { case_sensitive: false }, presence: true,
53
- on: :update,
54
- unless: :skip_validations
51
+ # Валидация отключена на время тестирования. После её надо разкоментировать сдесь и в контроллере.
52
+ # validates :email, uniqueness: { case_sensitive: false }, presence: true,
53
+ # on: :update,
54
+ # unless: :skip_validations
55
+ # validates :phone, uniqueness: { case_sensitive: false }, presence: true,
56
+ # on: :update,
57
+ # unless: :skip_validations
55
58
  validates :user_type, inclusion: { in: user_types.keys },
56
59
  on: :update,
57
60
  unless: :skip_validations
@@ -62,6 +65,10 @@ module SubjModels
62
65
  external_id ? where(external_id: external_id) : User.none
63
66
  end
64
67
 
68
+ scope :internal_users, -> (condition) do
69
+ joins(:user_card_delivery).where.not(user_card_deliveries: {id: nil} ).where(external_id: nil)
70
+ end
71
+
65
72
  end
66
73
 
67
74
  end
@@ -74,6 +81,10 @@ module SubjModels
74
81
  user_type == USER_TYPES.key(LEGAL_PERSON)
75
82
  end
76
83
 
84
+ def user_type_value
85
+ self[:user_type]
86
+ end
87
+
77
88
  def user_type=(value)
78
89
  super(check_string_for_int(value))
79
90
  end
@@ -0,0 +1,29 @@
1
+ require 'subj_models/services/types_support'
2
+ module SubjModels
3
+
4
+ module UserCardDeliveryModule
5
+
6
+ include SubjModels::TypesSupport::CardReceiveTypes
7
+
8
+ def self.included(including_class)
9
+
10
+ including_class.class_eval do
11
+
12
+
13
+ # enum delivery_type: CARD_RECEIVE_TYPES
14
+
15
+ belongs_to :user
16
+
17
+ scope :user_id, -> (user_id) { where(user_id: user_id) }
18
+
19
+
20
+ def delivery_type_value
21
+ self[:delivery_type]
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -19,7 +19,7 @@ module SubjModels
19
19
 
20
20
  attr_accessor :skip_validations
21
21
 
22
- scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
22
+ scope :user_id, -> (user_id) { where(user_id: user_id) }
23
23
 
24
24
  end
25
25
 
@@ -12,9 +12,23 @@ module SubjModels
12
12
 
13
13
  has_and_belongs_to_many :users
14
14
  has_and_belongs_to_many :access_groups
15
+ has_and_belongs_to_many :events
16
+
17
+ has_many :specialist_activity_document_types, dependent: :destroy
18
+ has_many :user_specialization_approvals, dependent: :destroy
19
+ has_many :nomenclatures
20
+
21
+ validates :name, presence: true
22
+
15
23
 
16
24
  scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
17
25
 
26
+ scope :unavailable_for_current_user, -> ids { where.not(id: ids) }
27
+
28
+ end
29
+
30
+ def to_s
31
+ name.to_s
18
32
  end
19
33
 
20
34
  end
@@ -14,10 +14,10 @@ module SubjModels
14
14
 
15
15
  belongs_to :document_file
16
16
  belongs_to :user
17
- belongs_to :specialist_activity
17
+ belongs_to :user_specialization
18
18
  belongs_to :specialist_activity_document_type
19
19
 
20
- scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
20
+ scope :user_id, -> (user_id) { where(user_id: user_id) }
21
21
 
22
22
  end
23
23
 
@@ -1,3 +1,3 @@
1
1
  module SubjModels
2
- VERSION = "0.4.3"
2
+ VERSION = "0.5.1"
3
3
  end
data/lib/subj_models.rb CHANGED
@@ -5,6 +5,7 @@ require 'subj_models/document_file'
5
5
  require 'subj_models/manager'
6
6
  require 'subj_models/event_schedule'
7
7
  require 'subj_models/event'
8
+ require 'subj_models/event_booking'
8
9
  require 'subj_models/brand_line'
9
10
  require 'subj_models/brand'
10
11
  require 'subj_models/user_specialization_approval'
@@ -20,6 +21,7 @@ require 'subj_models/attribute_value'
20
21
  require 'subj_models/nomenclature_price'
21
22
  require 'subj_models/order'
22
23
  require 'subj_models/user_card'
24
+ require 'subj_models/user_card_delivery'
23
25
  require 'subj_models/user_work_place'
24
26
  require 'subj_models/user_delivery_address'
25
27
  require 'subj_models/user_specialization'
@@ -42,7 +44,6 @@ require 'subj_models/quality'
42
44
  require 'subj_models/nomenclature_access_group'
43
45
  require 'subj_models/faq'
44
46
  require 'subj_models/global_notification'
45
-
46
47
  module SubjModels
47
48
 
48
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subj_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denys Dvoriashyn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-10 00:00:00.000000000 Z
11
+ date: 2016-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,6 +69,7 @@ files:
69
69
  - lib/subj_models/content_block.rb
70
70
  - lib/subj_models/document_file.rb
71
71
  - lib/subj_models/event.rb
72
+ - lib/subj_models/event_booking.rb
72
73
  - lib/subj_models/event_schedule.rb
73
74
  - lib/subj_models/event_type.rb
74
75
  - lib/subj_models/faq.rb
@@ -100,6 +101,7 @@ files:
100
101
  - lib/subj_models/template.rb
101
102
  - lib/subj_models/user.rb
102
103
  - lib/subj_models/user_card.rb
104
+ - lib/subj_models/user_card_delivery.rb
103
105
  - lib/subj_models/user_delivery_address.rb
104
106
  - lib/subj_models/user_specialization.rb
105
107
  - lib/subj_models/user_specialization_approval.rb