subj_models 0.4.3 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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