subj_sub_models 0.0.0 → 0.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.idea/modules.xml +1 -1
  4. data/.idea/workspace.xml +5 -5
  5. data/Gemfile +1 -1
  6. data/README.md +3 -3
  7. data/bin/console +1 -1
  8. data/lib/subj_models/access_group.rb +22 -0
  9. data/lib/subj_models/action_banner.rb +37 -0
  10. data/lib/subj_models/attribute_value.rb +32 -0
  11. data/lib/subj_models/brand.rb +74 -0
  12. data/lib/subj_models/brand_line.rb +51 -0
  13. data/lib/subj_models/category.rb +36 -0
  14. data/lib/subj_models/city.rb +31 -0
  15. data/lib/subj_models/concerns/comprising_external_id.rb +37 -0
  16. data/lib/subj_models/concerns/shared_scopes.rb +15 -0
  17. data/lib/subj_models/content_block.rb +28 -0
  18. data/lib/subj_models/document_file.rb +38 -0
  19. data/lib/subj_models/event.rb +79 -0
  20. data/lib/subj_models/event_booking.rb +39 -0
  21. data/lib/subj_models/event_schedule.rb +37 -0
  22. data/lib/subj_models/event_type.rb +27 -0
  23. data/lib/subj_models/faq.rb +46 -0
  24. data/lib/subj_models/global_notification.rb +16 -0
  25. data/lib/subj_models/manager.rb +31 -0
  26. data/lib/subj_models/measure_unit.rb +28 -0
  27. data/lib/subj_models/nomenclature.rb +166 -0
  28. data/lib/subj_models/nomenclature_access_group.rb +19 -0
  29. data/lib/subj_models/nomenclature_attribute.rb +27 -0
  30. data/lib/subj_models/nomenclature_file.rb +44 -0
  31. data/lib/subj_models/nomenclature_photo.rb +36 -0
  32. data/lib/subj_models/nomenclature_price.rb +39 -0
  33. data/lib/subj_models/nomenclature_review.rb +38 -0
  34. data/lib/subj_models/nomenclature_variety.rb +29 -0
  35. data/lib/subj_models/office.rb +40 -0
  36. data/lib/subj_models/office_contact.rb +41 -0
  37. data/lib/subj_models/order.rb +91 -0
  38. data/lib/subj_models/order_delivery_courier.rb +31 -0
  39. data/lib/subj_models/order_delivery_nova_poshta_warhouse.rb +20 -0
  40. data/lib/subj_models/order_delivery_pickup.rb +28 -0
  41. data/lib/subj_models/order_delivery_privatbank.rb +29 -0
  42. data/lib/subj_models/order_delivery_subj_courier.rb +25 -0
  43. data/lib/subj_models/order_item.rb +60 -0
  44. data/lib/subj_models/quality.rb +25 -0
  45. data/lib/subj_models/services/types_support.rb +122 -0
  46. data/lib/subj_models/services/values_checker.rb +11 -0
  47. data/lib/subj_models/specialist_activity.rb +33 -0
  48. data/lib/subj_models/specialist_activity_document_type.rb +29 -0
  49. data/lib/subj_models/template.rb +18 -0
  50. data/lib/subj_models/user.rb +131 -0
  51. data/lib/subj_models/user_card.rb +29 -0
  52. data/lib/subj_models/user_card_delivery.rb +29 -0
  53. data/lib/subj_models/user_delivery_address.rb +34 -0
  54. data/lib/subj_models/user_specialization.rb +38 -0
  55. data/lib/subj_models/user_specialization_approval.rb +33 -0
  56. data/lib/subj_models/user_work_place.rb +29 -0
  57. data/lib/subj_models/version.rb +3 -0
  58. data/lib/subj_models/video.rb +29 -0
  59. data/lib/subj_models.rb +49 -0
  60. data/subj_models.gemspec +33 -0
  61. data/subj_models.iml +9 -0
  62. metadata +56 -2
@@ -0,0 +1,19 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module NomenclatureAccessGroupModule
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 NomenclatureAttributeModule
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,44 @@
1
+ require 'subj_models/services/values_checker'
2
+ require 'subj_models/services/types_support'
3
+ require 'subj_models/concerns/shared_scopes'
4
+ require 'subj_models/concerns/comprising_external_id'
5
+
6
+ module SubjModels
7
+
8
+ module NomenclatureFileModule
9
+
10
+ include SubjModels::TypesSupport::FileTypes
11
+ include SubjModels::ValuesChecker
12
+
13
+ def self.included(including_class)
14
+
15
+ including_class.class_eval do
16
+
17
+ include SubjModels::SharedScopes
18
+ include SubjModels::ComprisingExternalId
19
+
20
+ enum file_type: FILE_TYPES
21
+
22
+ belongs_to :nomenclature
23
+ belongs_to :document_file
24
+
25
+ validates :file_type, inclusion: { in: file_types.keys }
26
+ validates :name, :document_file, presence: true
27
+
28
+ scope :nomenclature_id, -> (nomenclature_id) { parent_id_scope("nomenclature", nomenclature_id) }
29
+
30
+ end
31
+
32
+ end
33
+
34
+ def to_s
35
+ name.to_s
36
+ end
37
+
38
+ def file_type=(value)
39
+ super(check_string_for_int(value))
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,36 @@
1
+ require 'subj_models/services/types_support'
2
+ require 'subj_models/concerns/shared_scopes'
3
+ require 'subj_models/concerns/comprising_external_id'
4
+
5
+ module SubjModels
6
+
7
+ module NomenclaturePhotoModule
8
+
9
+ include SubjModels::TypesSupport
10
+
11
+ def self.included(including_class)
12
+
13
+ including_class.class_eval do
14
+
15
+ include SubjModels::SharedScopes
16
+ include SubjModels::ComprisingExternalId
17
+
18
+ belongs_to :nomenclature
19
+ belongs_to :document_file
20
+
21
+ validates :document_file, presence: true
22
+
23
+ scope :nomenclature_id, -> (nomenclature_id) { parent_id_scope("nomenclature", nomenclature_id) }
24
+
25
+
26
+ end
27
+
28
+ end
29
+
30
+ def to_s
31
+ id.to_s # TODO
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,39 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module NomenclaturePriceModule
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
+ belongs_to :event
18
+
19
+ has_many :order_items
20
+
21
+ validates :current_price, presence: true
22
+
23
+ scope :nomenclature_id, -> (nomenclature_id) { parent_id_scope("nomenclature", nomenclature_id) }
24
+
25
+ scope :belongs_to_nomenclature, -> (nomenclature_id) do
26
+ where(nomenclature_id: nomenclature_id).union(joins(:nomenclature_variety).where("nomenclature_varieties.nomenclature_id" => nomenclature_id))
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ def to_s
34
+ id.to_s # TODO
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,38 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module NomenclatureReviewModule
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 NomenclatureVarietyModule
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
@@ -0,0 +1,40 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module OfficeModule
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
+ scope :in_offices_list, -> { where(offices_list: true ) }
23
+ scope :in_courier_list, -> { where(courier_list: true ) }
24
+ scope :in_pickup_list, -> { where(pickup_list: true ) }
25
+
26
+ scope :has_events, -> do
27
+ joins(:event_schedules).where('event_schedules.event_date >= ?', DateTime.now.beginning_of_day).uniq
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ def to_s
35
+ name
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,41 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+ require 'subj_models/services/values_checker'
3
+
4
+ module SubjModels
5
+
6
+ module OfficeContactModule
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
+ end
40
+
41
+ end
@@ -0,0 +1,91 @@
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 OrderModule
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
+ has_many :event_bookings
36
+
37
+ validates :order_status, inclusion: { in: order_statuses.keys }, on: :update
38
+ validates :delivery_type, inclusion: { in: delivery_types.keys }, on: :update
39
+ validates :payment_type, inclusion: { in: payment_types.keys }, on: :update
40
+ validates :total_amount, :order_date, presence: true, on: :update
41
+
42
+ scope :user_id, -> user { where(user_id: user) }
43
+
44
+ scope :with_status, -> (status) do
45
+ where(order_status: Order.order_statuses[status] || status)
46
+ end
47
+
48
+
49
+ scope :only_success, -> {where(mail_sended: true)}
50
+
51
+ scope :last_order, -> (user_id) do
52
+ Order.joins(:user, :order_items)
53
+ .where("users.id" => user_id)
54
+ .where(order_items: {item_type: 1})
55
+ .only_success
56
+ .last
57
+ end
58
+
59
+ scope :has_items, -> { joins(:order_items).where.not(order_items: {order_id: nil}).uniq }
60
+
61
+ end
62
+
63
+ end
64
+
65
+ def order_status_value
66
+ self[:order_status]
67
+ end
68
+
69
+ def delivery_type_value
70
+ self[:delivery_type]
71
+ end
72
+
73
+ def payment_type_value
74
+ self[:payment_type]
75
+ end
76
+
77
+ def to_s
78
+ id.to_s # TODO
79
+ end
80
+
81
+ private
82
+
83
+ def generate_number
84
+ begin
85
+ self.order_number = "#{Time.now.strftime('%m')}-#{Time.now.strftime('%S%L')}#{rand(100..999)}"
86
+ end while self.class.exists?(order_number: order_number)
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,31 @@
1
+ require 'subj_models/concerns/comprising_external_id'
2
+
3
+ module SubjModels
4
+
5
+ module OrderDeliveryCourierModule
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 :street_name,:delivery_time_from, :delivery_time_to,
17
+ :house_number, 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
+ "#{street_name}, #{house_number}"
27
+ end
28
+
29
+ end
30
+
31
+ end