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.
- 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
|