subj_models 0.4.3 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/subj_models/action.rb +1 -0
- data/lib/subj_models/brand.rb +2 -0
- data/lib/subj_models/brand_line.rb +1 -1
- data/lib/subj_models/document_file.rb +0 -1
- data/lib/subj_models/event.rb +44 -2
- data/lib/subj_models/event_booking.rb +39 -0
- data/lib/subj_models/event_schedule.rb +2 -6
- data/lib/subj_models/manager.rb +1 -0
- data/lib/subj_models/nomenclature.rb +3 -3
- data/lib/subj_models/nomenclature_price.rb +1 -0
- data/lib/subj_models/order.rb +21 -1
- data/lib/subj_models/order_delivery_courier.rb +3 -3
- data/lib/subj_models/order_delivery_nova_poshta_warhouse.rb +2 -0
- data/lib/subj_models/order_delivery_pickup.rb +1 -1
- data/lib/subj_models/order_delivery_privatbank.rb +1 -1
- data/lib/subj_models/order_delivery_subj_courier.rb +1 -1
- data/lib/subj_models/order_item.rb +16 -5
- data/lib/subj_models/quality.rb +4 -0
- data/lib/subj_models/services/types_support.rb +9 -2
- data/lib/subj_models/specialist_activity_document_type.rb +2 -2
- data/lib/subj_models/user.rb +17 -6
- data/lib/subj_models/user_card_delivery.rb +29 -0
- data/lib/subj_models/user_delivery_address.rb +1 -1
- data/lib/subj_models/user_specialization.rb +14 -0
- data/lib/subj_models/user_specialization_approval.rb +2 -2
- data/lib/subj_models/version.rb +1 -1
- data/lib/subj_models.rb +2 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83658738a7ab8465ad59311cc0045293dcd9dafd
|
4
|
+
data.tar.gz: 454ba909f7b04f33c533e5d3dc8379b7ca6fb407
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8aa9974e7dd80d9409e26c6ed2ff2cf0ce3dc2a81d34870e94dd2c4d14357c0f16e011f759e47b22dba605d9e82a2714cbc46fa73045fc05ff6d7634db5a7ea
|
7
|
+
data.tar.gz: beea5614269b216341631d6f8e40ae1372d7db27c3f4c49ce59c854cf9b77c545d598dc053a093b36bf34319fc3e3462a14aa08e9b9b30ee992a384f0fcff358
|
data/lib/subj_models/action.rb
CHANGED
@@ -13,6 +13,7 @@ module SubjModels
|
|
13
13
|
has_and_belongs_to_many :cities
|
14
14
|
has_and_belongs_to_many :nomenclatures
|
15
15
|
belongs_to :image, class_name: "DocumentFile"
|
16
|
+
belongs_to :categories_list_image, class_name: "DocumentFile"
|
16
17
|
|
17
18
|
validates :name, :discount_percent, presence: true
|
18
19
|
|
data/lib/subj_models/brand.rb
CHANGED
@@ -34,7 +34,7 @@ module SubjModels
|
|
34
34
|
|
35
35
|
scope :brand_ids, -> (brand_ids_string) do
|
36
36
|
unless brand_ids_string.blank?
|
37
|
-
joins(:brand
|
37
|
+
joins(:brand).where('brands.id' => brand_ids_string.split(','))
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
data/lib/subj_models/event.rb
CHANGED
@@ -14,10 +14,52 @@ module SubjModels
|
|
14
14
|
belongs_to :event_type
|
15
15
|
belongs_to :nomenclature
|
16
16
|
belongs_to :document_file
|
17
|
+
belongs_to :brand
|
17
18
|
|
18
19
|
has_one :event_schedule
|
20
|
+
has_one :nomenclature_price
|
19
21
|
|
20
|
-
|
22
|
+
has_many :order_items
|
23
|
+
has_many :event_bookings
|
24
|
+
|
25
|
+
has_and_belongs_to_many :user_specializations
|
26
|
+
has_and_belongs_to_many :nomenclatures
|
27
|
+
|
28
|
+
validates :document_file, :title, presence: true
|
29
|
+
|
30
|
+
scope :from_today, -> {
|
31
|
+
joins(:event_schedule).where('event_schedules.event_date >= ?', DateTime.now.beginning_of_day )
|
32
|
+
.order( 'event_schedules.event_date ASC' )
|
33
|
+
# .unscope(:event_schedule)
|
34
|
+
}
|
35
|
+
|
36
|
+
scope :where_nomenclature_ids, -> (ids) do
|
37
|
+
joins(:nomenclatures).where(nomenclatures: {id: ids})
|
38
|
+
end
|
39
|
+
|
40
|
+
scope :office_ids, -> (ids) do
|
41
|
+
joins(event_schedule: [:office]).where(event_schedule: { office: {id: ids}})
|
42
|
+
end
|
43
|
+
|
44
|
+
scope :type_ids, -> (ids) do
|
45
|
+
joins(:event_type).where(event_type: {id: ids})
|
46
|
+
end
|
47
|
+
|
48
|
+
scope :brand_ids, -> (ids) do
|
49
|
+
joins(:brand).where(brand: { id: ids})
|
50
|
+
end
|
51
|
+
|
52
|
+
scope :only_free, -> do
|
53
|
+
joins(:event_schedule).where(event_schedule: { is_free: true } )
|
54
|
+
end
|
55
|
+
|
56
|
+
scope :specialities_ids, -> (ids) do
|
57
|
+
joins(:user_specializations).where(user_specializations: { id: ids})
|
58
|
+
end
|
59
|
+
|
60
|
+
scope :date_range, -> (date) do
|
61
|
+
joins(:event_schedule).where(event_schedule: { event_date: DateTime.parse(date['from']).beginning_of_day..DateTime.parse(date['to']).end_of_day } )
|
62
|
+
end
|
21
63
|
|
22
64
|
scope :today_events, -> {
|
23
65
|
includes(:event_schedule).where(event_schedule: { event_date: DateTime.now.beginning_of_day..DateTime.now.end_of_day } )
|
@@ -29,7 +71,7 @@ module SubjModels
|
|
29
71
|
end
|
30
72
|
|
31
73
|
def to_s
|
32
|
-
|
74
|
+
title.to_s
|
33
75
|
end
|
34
76
|
|
35
77
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'subj_models/concerns/comprising_external_id'
|
2
|
+
|
3
|
+
module SubjModels
|
4
|
+
|
5
|
+
module EventBookingModule
|
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 :user
|
15
|
+
belongs_to :event
|
16
|
+
|
17
|
+
validates :user, uniqueness: { scope: :event }
|
18
|
+
|
19
|
+
scope :user_id , -> (user_id) {where(user_id: user_id)}
|
20
|
+
scope :event_id , -> (event_id) {where(event_id: event_id)}
|
21
|
+
scope :only_new, -> (condition) do
|
22
|
+
if condition
|
23
|
+
where(external_id: nil)
|
24
|
+
else
|
25
|
+
all
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_s
|
34
|
+
id.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -18,15 +18,11 @@ module SubjModels
|
|
18
18
|
enum event_type: EVENT_TYPES
|
19
19
|
|
20
20
|
belongs_to :event
|
21
|
-
belongs_to :city
|
22
21
|
belongs_to :office
|
23
22
|
|
24
|
-
|
23
|
+
validates :event_date, presence: true
|
25
24
|
|
26
|
-
|
27
|
-
validates :event_date, :event_price, :title, presence: true
|
28
|
-
|
29
|
-
scope :event_id, -> (event_id) { parent_id_scope("event", event_id) }
|
25
|
+
scope :event_id, -> (event_id) { parent_id_scope(event_id: event_id) }
|
30
26
|
|
31
27
|
end
|
32
28
|
|
data/lib/subj_models/manager.rb
CHANGED
@@ -13,14 +13,13 @@ module SubjModels
|
|
13
13
|
|
14
14
|
belongs_to :brand_line
|
15
15
|
belongs_to :brand
|
16
|
-
belongs_to :
|
16
|
+
belongs_to :user_specialization
|
17
17
|
belongs_to :category
|
18
18
|
|
19
19
|
has_many :nomenclature_varieties, dependent: :destroy
|
20
20
|
has_many :nomenclature_photos, dependent: :destroy
|
21
21
|
has_many :nomenclature_reviews, dependent: :destroy
|
22
22
|
has_many :nomenclature_files, dependent: :destroy
|
23
|
-
has_many :events
|
24
23
|
has_many :attribute_values, dependent: :destroy
|
25
24
|
has_many :nomenclature_prices, dependent: :destroy
|
26
25
|
|
@@ -31,6 +30,7 @@ module SubjModels
|
|
31
30
|
|
32
31
|
has_and_belongs_to_many :actions
|
33
32
|
has_and_belongs_to_many :access_groups, through: :nomenclature_access_groups
|
33
|
+
has_and_belongs_to_many :events
|
34
34
|
|
35
35
|
validates :name, presence: true
|
36
36
|
|
@@ -40,7 +40,7 @@ module SubjModels
|
|
40
40
|
scope :is_recommended, -> condition { where(is_recommended: condition) }
|
41
41
|
scope :in_index_list, -> condition { where(show_on_index: condition) }
|
42
42
|
scope :is_stock, -> (condition) do
|
43
|
-
nomenclature_prices_join.joins("LEFT OUTER JOIN qualities ON qualities.id = nomenclature_prices.quality_id").where("qualities.is_stock" => condition)
|
43
|
+
nomenclature_prices_join.joins("LEFT OUTER JOIN qualities ON qualities.id = nomenclature_prices.quality_id").where("qualities.is_stock" => condition).uniq
|
44
44
|
end
|
45
45
|
|
46
46
|
scope :bought_together_external_id, -> (ids) do
|
data/lib/subj_models/order.rb
CHANGED
@@ -32,6 +32,7 @@ module SubjModels
|
|
32
32
|
has_one :order_delivery_subj_courier
|
33
33
|
has_one :order_delivery_nova_poshta_warhouse
|
34
34
|
has_many :order_items, dependent: :destroy
|
35
|
+
has_many :event_bookings
|
35
36
|
|
36
37
|
validates :order_status, inclusion: { in: order_statuses.keys }, on: :update
|
37
38
|
validates :delivery_type, inclusion: { in: delivery_types.keys }, on: :update
|
@@ -40,14 +41,33 @@ module SubjModels
|
|
40
41
|
|
41
42
|
scope :user_id, -> user { where(user_id: user) }
|
42
43
|
|
44
|
+
scope :with_status, -> (status) do
|
45
|
+
where(order_status: Order.order_statuses[status] || status)
|
46
|
+
end
|
47
|
+
|
43
48
|
scope :last_order, -> (user_id) do
|
44
|
-
Order.joins(:user
|
49
|
+
Order.joins(:user, :order_items)
|
50
|
+
.where("users.id" => user_id)
|
51
|
+
.where(order_items: {item_type: 1})
|
52
|
+
.last
|
45
53
|
end
|
46
54
|
|
47
55
|
end
|
48
56
|
|
49
57
|
end
|
50
58
|
|
59
|
+
def order_status_value
|
60
|
+
self[:order_status]
|
61
|
+
end
|
62
|
+
|
63
|
+
def delivery_type_value
|
64
|
+
self[:delivery_type]
|
65
|
+
end
|
66
|
+
|
67
|
+
def payment_type_value
|
68
|
+
self[:payment_type]
|
69
|
+
end
|
70
|
+
|
51
71
|
def to_s
|
52
72
|
id.to_s # TODO
|
53
73
|
end
|
@@ -13,8 +13,8 @@ module SubjModels
|
|
13
13
|
belongs_to :order
|
14
14
|
belongs_to :city
|
15
15
|
|
16
|
-
validates :
|
17
|
-
:house_number,
|
16
|
+
validates :street_name,:delivery_time_from, :delivery_time_to,
|
17
|
+
:house_number, presence: true
|
18
18
|
|
19
19
|
scope :order_id, -> (order_id) { parent_id_scope("order", order_id) }
|
20
20
|
|
@@ -23,7 +23,7 @@ module SubjModels
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_s
|
26
|
-
|
26
|
+
"#{street_name}, #{house_number}"
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
@@ -20,7 +20,7 @@ module SubjModels
|
|
20
20
|
enum item_type: ITEM_TYPES
|
21
21
|
|
22
22
|
belongs_to :order
|
23
|
-
belongs_to :
|
23
|
+
belongs_to :event
|
24
24
|
belongs_to :nomenclature_variety
|
25
25
|
belongs_to :nomenclature
|
26
26
|
|
@@ -44,10 +44,21 @@ module SubjModels
|
|
44
44
|
private
|
45
45
|
|
46
46
|
def update_nomenclature_popularity
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
if nomenclature
|
48
|
+
current_popularity = (nomenclature.popularity && nomenclature.popularity > 0) ? nomenclature.popularity : 0
|
49
|
+
method = transaction_include_any_action?([:create]) ? :+ : :-
|
50
|
+
new_popularity = current_popularity.send(method, self.item_count)
|
51
|
+
nomenclature.update(popularity: new_popularity)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def add_nomenclature_quality
|
56
|
+
founded_quality_id = if nomenclature_variety
|
57
|
+
nomenclature_variety.nomenclature_price.try(:quality_id)
|
58
|
+
else
|
59
|
+
nomenclature.nomenclature_prices.try(:last).try(:quality_id)
|
60
|
+
end
|
61
|
+
self.quality_id = founded_quality_id if founded_quality_id
|
51
62
|
end
|
52
63
|
|
53
64
|
end
|
data/lib/subj_models/quality.rb
CHANGED
@@ -10,7 +10,12 @@ module SubjModels
|
|
10
10
|
NATURAL_PERSON = 3
|
11
11
|
DISTRIBUTOR = 4
|
12
12
|
|
13
|
-
USER_TYPES = {
|
13
|
+
USER_TYPES = {
|
14
|
+
'админ' => ADMIN,
|
15
|
+
'юридическое лицо' => LEGAL_PERSON,
|
16
|
+
'физическое лицо' => NATURAL_PERSON,
|
17
|
+
'поставщик' => DISTRIBUTOR
|
18
|
+
}
|
14
19
|
end
|
15
20
|
|
16
21
|
module EventTypes
|
@@ -55,12 +60,14 @@ module SubjModels
|
|
55
60
|
PROCESSED = 2
|
56
61
|
EN_ROUTE_EXTERNAL_COURIER = 3
|
57
62
|
EN_ROUTE_INTERNAL_COURIER = 4
|
63
|
+
DELIVERED = 5
|
58
64
|
|
59
65
|
ORDER_STATUSES = {
|
60
66
|
'принят' => RECEIVED,
|
61
67
|
'в обработке' => PROCESSED,
|
62
68
|
'в пути(внешний курьер)' => EN_ROUTE_EXTERNAL_COURIER,
|
63
|
-
'внутренний курьер' => EN_ROUTE_INTERNAL_COURIER
|
69
|
+
'внутренний курьер' => EN_ROUTE_INTERNAL_COURIER,
|
70
|
+
'получен' => DELIVERED
|
64
71
|
}
|
65
72
|
end
|
66
73
|
|
@@ -10,11 +10,11 @@ module SubjModels
|
|
10
10
|
|
11
11
|
include SubjModels::ComprisingExternalId
|
12
12
|
|
13
|
-
belongs_to :
|
13
|
+
belongs_to :user_specialization
|
14
14
|
|
15
15
|
validates :name, presence: true
|
16
16
|
|
17
|
-
scope :
|
17
|
+
scope :user_specialization_id, -> (user_specialization_id) { parent_id_scope("user_specialization", user_specialization_id) }
|
18
18
|
|
19
19
|
end
|
20
20
|
|
data/lib/subj_models/user.rb
CHANGED
@@ -34,7 +34,9 @@ module SubjModels
|
|
34
34
|
has_many :user_specialization_approvals, dependent: :destroy
|
35
35
|
has_many :user_cards, dependent: :destroy
|
36
36
|
has_one :user_work_place, dependent: :destroy
|
37
|
+
has_one :user_card_delivery
|
37
38
|
has_many :user_delivery_addresses, dependent: :destroy
|
39
|
+
has_many :event_bookings, dependent: :destroy
|
38
40
|
|
39
41
|
has_and_belongs_to_many :user_specializations
|
40
42
|
has_and_belongs_to_many :brands
|
@@ -46,12 +48,13 @@ module SubjModels
|
|
46
48
|
validates :first_name, :last_name, presence: true,
|
47
49
|
on: :update,
|
48
50
|
unless: lambda { |user| user.legal_person? || user.skip_validations }
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
51
|
+
# Валидация отключена на время тестирования. После её надо разкоментировать сдесь и в контроллере.
|
52
|
+
# validates :email, uniqueness: { case_sensitive: false }, presence: true,
|
53
|
+
# on: :update,
|
54
|
+
# unless: :skip_validations
|
55
|
+
# validates :phone, uniqueness: { case_sensitive: false }, presence: true,
|
56
|
+
# on: :update,
|
57
|
+
# unless: :skip_validations
|
55
58
|
validates :user_type, inclusion: { in: user_types.keys },
|
56
59
|
on: :update,
|
57
60
|
unless: :skip_validations
|
@@ -62,6 +65,10 @@ module SubjModels
|
|
62
65
|
external_id ? where(external_id: external_id) : User.none
|
63
66
|
end
|
64
67
|
|
68
|
+
scope :internal_users, -> (condition) do
|
69
|
+
joins(:user_card_delivery).where.not(user_card_deliveries: {id: nil} ).where(external_id: nil)
|
70
|
+
end
|
71
|
+
|
65
72
|
end
|
66
73
|
|
67
74
|
end
|
@@ -74,6 +81,10 @@ module SubjModels
|
|
74
81
|
user_type == USER_TYPES.key(LEGAL_PERSON)
|
75
82
|
end
|
76
83
|
|
84
|
+
def user_type_value
|
85
|
+
self[:user_type]
|
86
|
+
end
|
87
|
+
|
77
88
|
def user_type=(value)
|
78
89
|
super(check_string_for_int(value))
|
79
90
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'subj_models/services/types_support'
|
2
|
+
module SubjModels
|
3
|
+
|
4
|
+
module UserCardDeliveryModule
|
5
|
+
|
6
|
+
include SubjModels::TypesSupport::CardReceiveTypes
|
7
|
+
|
8
|
+
def self.included(including_class)
|
9
|
+
|
10
|
+
including_class.class_eval do
|
11
|
+
|
12
|
+
|
13
|
+
# enum delivery_type: CARD_RECEIVE_TYPES
|
14
|
+
|
15
|
+
belongs_to :user
|
16
|
+
|
17
|
+
scope :user_id, -> (user_id) { where(user_id: user_id) }
|
18
|
+
|
19
|
+
|
20
|
+
def delivery_type_value
|
21
|
+
self[:delivery_type]
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -12,9 +12,23 @@ module SubjModels
|
|
12
12
|
|
13
13
|
has_and_belongs_to_many :users
|
14
14
|
has_and_belongs_to_many :access_groups
|
15
|
+
has_and_belongs_to_many :events
|
16
|
+
|
17
|
+
has_many :specialist_activity_document_types, dependent: :destroy
|
18
|
+
has_many :user_specialization_approvals, dependent: :destroy
|
19
|
+
has_many :nomenclatures
|
20
|
+
|
21
|
+
validates :name, presence: true
|
22
|
+
|
15
23
|
|
16
24
|
scope :user_id, -> (user_id) { parent_id_scope("user", user_id) }
|
17
25
|
|
26
|
+
scope :unavailable_for_current_user, -> ids { where.not(id: ids) }
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_s
|
31
|
+
name.to_s
|
18
32
|
end
|
19
33
|
|
20
34
|
end
|
@@ -14,10 +14,10 @@ module SubjModels
|
|
14
14
|
|
15
15
|
belongs_to :document_file
|
16
16
|
belongs_to :user
|
17
|
-
belongs_to :
|
17
|
+
belongs_to :user_specialization
|
18
18
|
belongs_to :specialist_activity_document_type
|
19
19
|
|
20
|
-
scope :user_id, -> (user_id) {
|
20
|
+
scope :user_id, -> (user_id) { where(user_id: user_id) }
|
21
21
|
|
22
22
|
end
|
23
23
|
|
data/lib/subj_models/version.rb
CHANGED
data/lib/subj_models.rb
CHANGED
@@ -5,6 +5,7 @@ require 'subj_models/document_file'
|
|
5
5
|
require 'subj_models/manager'
|
6
6
|
require 'subj_models/event_schedule'
|
7
7
|
require 'subj_models/event'
|
8
|
+
require 'subj_models/event_booking'
|
8
9
|
require 'subj_models/brand_line'
|
9
10
|
require 'subj_models/brand'
|
10
11
|
require 'subj_models/user_specialization_approval'
|
@@ -20,6 +21,7 @@ require 'subj_models/attribute_value'
|
|
20
21
|
require 'subj_models/nomenclature_price'
|
21
22
|
require 'subj_models/order'
|
22
23
|
require 'subj_models/user_card'
|
24
|
+
require 'subj_models/user_card_delivery'
|
23
25
|
require 'subj_models/user_work_place'
|
24
26
|
require 'subj_models/user_delivery_address'
|
25
27
|
require 'subj_models/user_specialization'
|
@@ -42,7 +44,6 @@ require 'subj_models/quality'
|
|
42
44
|
require 'subj_models/nomenclature_access_group'
|
43
45
|
require 'subj_models/faq'
|
44
46
|
require 'subj_models/global_notification'
|
45
|
-
|
46
47
|
module SubjModels
|
47
48
|
|
48
49
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: subj_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denys Dvoriashyn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- lib/subj_models/content_block.rb
|
70
70
|
- lib/subj_models/document_file.rb
|
71
71
|
- lib/subj_models/event.rb
|
72
|
+
- lib/subj_models/event_booking.rb
|
72
73
|
- lib/subj_models/event_schedule.rb
|
73
74
|
- lib/subj_models/event_type.rb
|
74
75
|
- lib/subj_models/faq.rb
|
@@ -100,6 +101,7 @@ files:
|
|
100
101
|
- lib/subj_models/template.rb
|
101
102
|
- lib/subj_models/user.rb
|
102
103
|
- lib/subj_models/user_card.rb
|
104
|
+
- lib/subj_models/user_card_delivery.rb
|
103
105
|
- lib/subj_models/user_delivery_address.rb
|
104
106
|
- lib/subj_models/user_specialization.rb
|
105
107
|
- lib/subj_models/user_specialization_approval.rb
|