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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/lib/subj_models/access_group.rb +22 -0
  4. data/lib/subj_models/action.rb +31 -0
  5. data/lib/subj_models/attribute_value.rb +32 -0
  6. data/lib/subj_models/brand.rb +5 -5
  7. data/lib/subj_models/brand_line.rb +2 -2
  8. data/lib/subj_models/category.rb +36 -0
  9. data/lib/subj_models/city.rb +31 -0
  10. data/lib/subj_models/content_block.rb +25 -0
  11. data/lib/subj_models/event_schedule.rb +4 -4
  12. data/lib/subj_models/event_type.rb +27 -0
  13. data/lib/subj_models/faq.rb +55 -0
  14. data/lib/subj_models/global_notification.rb +16 -0
  15. data/lib/subj_models/measure_unit.rb +2 -2
  16. data/lib/subj_models/nomenclature2.rb +157 -0
  17. data/lib/subj_models/nomenclature_access_group.rb +19 -0
  18. data/lib/subj_models/nomenclature_attribute.rb +27 -0
  19. data/lib/subj_models/nomenclature_price.rb +38 -0
  20. data/lib/subj_models/nomenclature_review.rb +38 -0
  21. data/lib/subj_models/nomenclature_variety.rb +29 -0
  22. data/lib/subj_models/office.rb +33 -0
  23. data/lib/subj_models/office_contact.rb +45 -0
  24. data/lib/subj_models/order.rb +77 -0
  25. data/lib/subj_models/order_delivery_courier.rb +31 -0
  26. data/lib/subj_models/order_delivery_nova_poshta_warhouse.rb +17 -0
  27. data/lib/subj_models/order_delivery_pickup.rb +28 -0
  28. data/lib/subj_models/order_delivery_privatbank.rb +30 -0
  29. data/lib/subj_models/order_delivery_subj_courier.rb +24 -0
  30. data/lib/subj_models/order_item.rb +55 -0
  31. data/lib/subj_models/quality.rb +21 -0
  32. data/lib/subj_models/specialist_activity.rb +33 -0
  33. data/lib/subj_models/specialist_activity_document_type.rb +29 -0
  34. data/lib/subj_models/template.rb +2 -0
  35. data/lib/subj_models/user.rb +10 -9
  36. data/lib/subj_models/user_card.rb +29 -0
  37. data/lib/subj_models/user_delivery_address.rb +34 -0
  38. data/lib/subj_models/user_specialization.rb +24 -0
  39. data/lib/subj_models/user_work_place.rb +29 -0
  40. data/lib/subj_models/version.rb +1 -1
  41. data/lib/subj_models.rb +31 -0
  42. metadata +33 -2
@@ -0,0 +1,33 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module Office
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ belongs_to :city
14
+
15
+ has_many :event_schedules
16
+ has_many :order_delivery_pickups
17
+ has_many :office_contacts, dependent: :destroy
18
+
19
+ validates :name, :address, :lat, :lng, presence: true
20
+
21
+ scope :main, -> { where(is_main: true ) }
22
+
23
+ end
24
+
25
+ end
26
+
27
+ def to_s
28
+ name
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,45 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+ require 'subj_models/services/values_checker'
3
+
4
+ module SubjModels
5
+
6
+ module OfficeContact
7
+
8
+ include SubjModels::TypesSupport::ContactTypes
9
+ include SubjModels::ValuesChecker
10
+
11
+ def self.included(including_class)
12
+
13
+ including_class.class_eval do
14
+
15
+ include SubjModels::ComprisingExternalId
16
+
17
+ enum contact_type: CONTACT_TYPES
18
+
19
+ belongs_to :office
20
+ belongs_to :manager
21
+
22
+ validates :contact_type, inclusion: { in: contact_types.keys }
23
+
24
+ scope :is_phone, -> { where(contact_type: PHONE) }
25
+ scope :is_skype, -> { where(contact_type: SKYPE) }
26
+ scope :is_address, -> { where(contact_type: ADDRESS) }
27
+ scope :is_email, -> { where(contact_type: EMAIL) }
28
+
29
+ scope :office_id, -> (office_id) { parent_id_scope("office", office_id) }
30
+
31
+ end
32
+
33
+ end
34
+
35
+ def to_s
36
+ id.to_s # TODO
37
+ end
38
+
39
+ def contact_type=(value)
40
+ super(check_string_for_int(value))
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,77 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+ require 'subj_models/services/values_checker'
3
+ require 'subj_models/services/types_support'
4
+
5
+ module SubjModels
6
+
7
+ module Order
8
+
9
+ include SubjModels::TypesSupport::OrderStatuses
10
+ include SubjModels::TypesSupport::DeliveryTypes
11
+ include SubjModels::TypesSupport::PaymentTypes
12
+ include SubjModels::ValuesChecker
13
+
14
+ def self.included(including_class)
15
+
16
+ including_class.class_eval do
17
+
18
+ before_create :generate_number
19
+
20
+ include SubjModels::ComprisingExternalId
21
+
22
+ enum order_status: ORDER_STATUSES
23
+ enum delivery_type: DELIVERY_TYPES
24
+ enum payment_type: PAYMENT_TYPES
25
+
26
+ belongs_to :user
27
+ belongs_to :user_delivery_address
28
+
29
+ has_one :order_delivery_courier
30
+ has_one :order_delivery_pickup
31
+ has_one :order_delivery_privatbank
32
+ has_one :order_delivery_subj_courier
33
+ has_one :order_delivery_nova_poshta_warhouse
34
+ has_many :order_items, dependent: :destroy
35
+
36
+ validates :order_status, inclusion: { in: order_statuses.keys }, on: :update
37
+ validates :delivery_type, inclusion: { in: delivery_types.keys }, on: :update
38
+ validates :payment_type, inclusion: { in: payment_types.keys }, on: :update
39
+ validates :total_amount, :order_date, presence: true, on: :update
40
+
41
+ scope :user_id, -> user { where(user_id: user) }
42
+
43
+ scope :last_order, -> (user_id) do
44
+ Order.joins(:user).where("users.id" => user_id).last
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ def to_s
52
+ id.to_s # TODO
53
+ end
54
+
55
+ def order_status=(value)
56
+ super(check_string_for_int(value))
57
+ end
58
+
59
+ def delivery_type=(value)
60
+ super(check_string_for_int(value))
61
+ end
62
+
63
+ def payment_type=(value)
64
+ super(check_string_for_int(value))
65
+ end
66
+
67
+ private
68
+
69
+ def generate_number
70
+ begin
71
+ self.order_number = "#{Time.now.strftime('%m')}-#{Time.now.strftime('%S%L')}#{rand(100..999)}"
72
+ end while self.class.exists?(order_number: order_number)
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -0,0 +1,31 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module OrderDeliveryCourier
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 :city
15
+
16
+ validates :user_first_name, :user_last_name, :delivery_address, :street_name,
17
+ :house_number, :delivery_time, presence: true
18
+
19
+ scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
20
+
21
+ end
22
+
23
+ end
24
+
25
+ def to_s
26
+ id.to_s # TODO
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,17 @@
1
+ module SubjModels
2
+
3
+ module OrderDeliveryNovaPoshtaWarhouse
4
+
5
+ def self.included(including_class)
6
+
7
+ including_class.class_eval do
8
+
9
+ belongs_to :order
10
+
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,28 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module OrderDeliveryPickup
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 :office
15
+
16
+ scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
17
+
18
+ end
19
+
20
+ end
21
+
22
+ def to_s
23
+ id.to_s # TODO
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,30 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module OrderDeliveryPrivatbank
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 :city
15
+
16
+ validates :privat_bank_address, presence: true
17
+
18
+ scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
19
+
20
+ end
21
+
22
+ end
23
+
24
+ def to_s
25
+ id.to_s # TODO
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,24 @@
1
+ module SubjModels
2
+
3
+ module OrderDeliverySubjCourier
4
+
5
+ def self.included(including_class)
6
+
7
+ including_class.class_eval do
8
+
9
+ belongs_to :order
10
+ belongs_to :city
11
+
12
+ scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
13
+
14
+ end
15
+
16
+ end
17
+
18
+ def to_s
19
+ id.to_s # TODO
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,55 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+ require 'subj_models/services/values_checker'
3
+
4
+ module SubjModels
5
+
6
+ module OrderItem
7
+
8
+ include SubjModels::TypesSupport::ItemTypes
9
+ include SubjModels::ValuesChecker
10
+
11
+ def self.included(including_class)
12
+
13
+ including_class.class_eval do
14
+
15
+ include SubjModels::ComprisingExternalId
16
+
17
+ before_destroy :update_nomenclature_popularity
18
+ after_create :update_nomenclature_popularity
19
+
20
+ enum item_type: ITEM_TYPES
21
+
22
+ belongs_to :order
23
+ belongs_to :event_schedule
24
+ belongs_to :nomenclature_variety
25
+ belongs_to :nomenclature
26
+
27
+ validates :item_type, presence: true, inclusion: { in: item_types.keys }
28
+ validates :item_price, :item_count, presence: true
29
+
30
+ scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
31
+
32
+ end
33
+
34
+ end
35
+
36
+ def to_s
37
+ id.to_s # TODO
38
+ end
39
+
40
+ def item_type=(value)
41
+ super(check_string_for_int(value))
42
+ end
43
+
44
+ private
45
+
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)
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,21 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module Quality
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ has_many :nomenclature_prices
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,33 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module SpecialistActivity
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ has_many :specialist_activity_document_types, dependent: :destroy
14
+ has_many :user_specialization_approvals, dependent: :destroy
15
+ has_many :nomenclatures
16
+
17
+ belongs_to :document_file
18
+
19
+ validates :name, presence: true
20
+
21
+ scope :unavailable_for_current_user, -> ids { where.not(id: ids) }
22
+
23
+ end
24
+
25
+ end
26
+
27
+ def to_s
28
+ name
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,29 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module SpecialistActivityDocumentType
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ belongs_to :specialist_activity
14
+
15
+ validates :name, presence: true
16
+
17
+ scope :specialist_activity_id, -> (specialist_activity_id) { parent_id_scope("specialist_activity", specialist_activity_id) }
18
+
19
+ end
20
+
21
+ end
22
+
23
+ def to_s
24
+ name
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -1,3 +1,5 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
1
3
  module SubjModels
2
4
 
3
5
  module
@@ -29,17 +29,17 @@ module SubjModels
29
29
  enum user_type: USER_TYPES
30
30
  enum card_receive_type: CARD_RECEIVE_TYPES
31
31
 
32
- # has_many :orders
33
- # has_many :user_specialization_approvals, dependent: :destroy
34
- # has_many :user_cards, dependent: :destroy
35
- # has_one :user_work_place, dependent: :destroy
36
- # has_many :user_delivery_addresses, dependent: :destroy
32
+ has_many :orders
33
+ has_many :user_specialization_approvals, dependent: :destroy
34
+ has_many :user_cards, dependent: :destroy
35
+ has_one :user_work_place, dependent: :destroy
36
+ has_many :user_delivery_addresses, dependent: :destroy
37
37
 
38
- # has_and_belongs_to_many :user_specializations
38
+ has_and_belongs_to_many :user_specializations
39
39
 
40
- # belongs_to :document_file
41
- # belongs_to :city
42
- # belongs_to :avatar, class_name: "DocumentFile"
40
+ belongs_to :document_file
41
+ belongs_to :city
42
+ belongs_to :avatar, class_name: "DocumentFile"
43
43
 
44
44
  validates :first_name, :last_name, presence: true,
45
45
  on: :update,
@@ -101,6 +101,7 @@ module SubjModels
101
101
  end
102
102
 
103
103
  def available_nomenclature_ids
104
+ binding.pry
104
105
  Nomenclature.joins(access_groups: [user_specializations: :users]).where("users.id" => self.id).uniq.pluck(:id)
105
106
  end
106
107
 
@@ -0,0 +1,29 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module UserCard
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ belongs_to :user
14
+
15
+ validates :first_digits, :last_digits, :expire_number, :expire_year, presence: true
16
+
17
+ scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
18
+
19
+ end
20
+
21
+ end
22
+
23
+ def to_s
24
+ id.to_s # TODO
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,34 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module UserDeliveryAddress
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ belongs_to :user
14
+ belongs_to :city
15
+
16
+ has_many :orders
17
+
18
+ validates :street_name, :house_number, :city, presence: true, unless: :skip_validations
19
+
20
+ attr_accessor :skip_validations
21
+
22
+ scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
23
+
24
+ end
25
+
26
+ def to_s
27
+ id.to_s # TODO
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,24 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module UserSpecialization
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 :users
14
+ has_and_belongs_to_many :access_groups
15
+
16
+ scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
17
+
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,29 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module UserWorkPlace
6
+
7
+ def self.included(including_class)
8
+
9
+ including_class.class_eval do
10
+
11
+ include SubjModels::ComprisingExternalId
12
+
13
+ belongs_to :user
14
+
15
+ validates :work_place_name, presence: true
16
+
17
+ scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
18
+
19
+ end
20
+
21
+ end
22
+
23
+ def to_s
24
+ work_place_name
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -1,3 +1,3 @@
1
1
  module SubjModels
2
- VERSION = "0.3.8"
2
+ VERSION = "0.4"
3
3
  end
data/lib/subj_models.rb CHANGED
@@ -11,6 +11,37 @@ require 'subj_models/user_specialization_approval'
11
11
  require 'subj_models/video'
12
12
  require 'subj_models/nomenclature_file'
13
13
  require 'subj_models/nomenclature_photo'
14
+ require 'subj_models/nomenclature2'
15
+ require 'subj_models/content_block'
16
+ require 'subj_models/city'
17
+ require 'subj_models/office'
18
+ require 'subj_models/order_item'
19
+ require 'subj_models/attribute_value'
20
+ require 'subj_models/nomenclature_price'
21
+ require 'subj_models/order'
22
+ require 'subj_models/user_card'
23
+ require 'subj_models/user_work_place'
24
+ require 'subj_models/user_delivery_address'
25
+ require 'subj_models/user_specialization'
26
+ require 'subj_models/nomenclature_variety'
27
+ require 'subj_models/access_group'
28
+ require 'subj_models/specialist_activity'
29
+ require 'subj_models/specialist_activity_document_type'
30
+ require 'subj_models/nomenclature_attribute'
31
+ require 'subj_models/category'
32
+ require 'subj_models/nomenclature_review'
33
+ require 'subj_models/action'
34
+ require 'subj_models/event_type'
35
+ require 'subj_models/office_contact'
36
+ require 'subj_models/order_delivery_courier'
37
+ require 'subj_models/order_delivery_nova_poshta_warhouse'
38
+ require 'subj_models/order_delivery_pickup'
39
+ require 'subj_models/order_delivery_privatbank'
40
+ require 'subj_models/order_delivery_subj_courier'
41
+ require 'subj_models/quality'
42
+ require 'subj_models/nomenclature_access_group'
43
+ require 'subj_models/faq'
44
+ require 'subj_models/global_notification'
14
45
 
15
46
  module SubjModels
16
47