subj_sub_models 0.0.0 → 0.0.1

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