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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.idea/modules.xml +1 -1
- data/.idea/workspace.xml +5 -5
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/bin/console +1 -1
- data/lib/subj_models/access_group.rb +22 -0
- data/lib/subj_models/action_banner.rb +37 -0
- data/lib/subj_models/attribute_value.rb +32 -0
- data/lib/subj_models/brand.rb +74 -0
- data/lib/subj_models/brand_line.rb +51 -0
- data/lib/subj_models/category.rb +36 -0
- data/lib/subj_models/city.rb +31 -0
- data/lib/subj_models/concerns/comprising_external_id.rb +37 -0
- data/lib/subj_models/concerns/shared_scopes.rb +15 -0
- data/lib/subj_models/content_block.rb +28 -0
- data/lib/subj_models/document_file.rb +38 -0
- data/lib/subj_models/event.rb +79 -0
- data/lib/subj_models/event_booking.rb +39 -0
- data/lib/subj_models/event_schedule.rb +37 -0
- data/lib/subj_models/event_type.rb +27 -0
- data/lib/subj_models/faq.rb +46 -0
- data/lib/subj_models/global_notification.rb +16 -0
- data/lib/subj_models/manager.rb +31 -0
- data/lib/subj_models/measure_unit.rb +28 -0
- data/lib/subj_models/nomenclature.rb +166 -0
- data/lib/subj_models/nomenclature_access_group.rb +19 -0
- data/lib/subj_models/nomenclature_attribute.rb +27 -0
- data/lib/subj_models/nomenclature_file.rb +44 -0
- data/lib/subj_models/nomenclature_photo.rb +36 -0
- data/lib/subj_models/nomenclature_price.rb +39 -0
- data/lib/subj_models/nomenclature_review.rb +38 -0
- data/lib/subj_models/nomenclature_variety.rb +29 -0
- data/lib/subj_models/office.rb +40 -0
- data/lib/subj_models/office_contact.rb +41 -0
- data/lib/subj_models/order.rb +91 -0
- data/lib/subj_models/order_delivery_courier.rb +31 -0
- data/lib/subj_models/order_delivery_nova_poshta_warhouse.rb +20 -0
- data/lib/subj_models/order_delivery_pickup.rb +28 -0
- data/lib/subj_models/order_delivery_privatbank.rb +29 -0
- data/lib/subj_models/order_delivery_subj_courier.rb +25 -0
- data/lib/subj_models/order_item.rb +60 -0
- data/lib/subj_models/quality.rb +25 -0
- data/lib/subj_models/services/types_support.rb +122 -0
- data/lib/subj_models/services/values_checker.rb +11 -0
- data/lib/subj_models/specialist_activity.rb +33 -0
- data/lib/subj_models/specialist_activity_document_type.rb +29 -0
- data/lib/subj_models/template.rb +18 -0
- data/lib/subj_models/user.rb +131 -0
- data/lib/subj_models/user_card.rb +29 -0
- data/lib/subj_models/user_card_delivery.rb +29 -0
- data/lib/subj_models/user_delivery_address.rb +34 -0
- data/lib/subj_models/user_specialization.rb +38 -0
- data/lib/subj_models/user_specialization_approval.rb +33 -0
- data/lib/subj_models/user_work_place.rb +29 -0
- data/lib/subj_models/version.rb +3 -0
- data/lib/subj_models/video.rb +29 -0
- data/lib/subj_models.rb +49 -0
- data/subj_models.gemspec +33 -0
- data/subj_models.iml +9 -0
- 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
|