comable-core 0.7.0.beta1 → 0.7.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +7 -2
- data/app/controllers/concerns/comable/permitted_attributes.rb +1 -0
- data/app/helpers/comable/application_helper.rb +4 -0
- data/app/models/comable/inventory/adjuster.rb +40 -0
- data/app/models/comable/inventory/coordinator.rb +56 -0
- data/app/models/comable/inventory/package.rb +47 -0
- data/app/models/comable/inventory/packer.rb +25 -0
- data/app/models/comable/inventory/unit.rb +22 -0
- data/app/models/comable/navigation.rb +2 -0
- data/app/models/comable/navigation_item.rb +29 -6
- data/app/models/comable/order/associations.rb +2 -2
- data/app/models/comable/order/deprecated_methods.rb +27 -0
- data/app/models/comable/order/validations.rb +1 -1
- data/app/models/comable/order.rb +25 -11
- data/app/models/comable/order_item.rb +12 -40
- data/app/models/comable/page.rb +3 -3
- data/app/models/comable/payment_method.rb +2 -0
- data/app/models/comable/product.rb +16 -12
- data/app/models/comable/shipment.rb +26 -5
- data/app/models/comable/shipment_item.rb +47 -0
- data/app/models/comable/shipment_method.rb +1 -0
- data/app/models/comable/stock.rb +13 -9
- data/app/models/comable/stock_location.rb +29 -0
- data/app/models/comable/theme.rb +2 -0
- data/app/models/comable/tracker.rb +3 -2
- data/app/models/comable/user.rb +1 -0
- data/app/models/comable/variant/quantifier.rb +27 -0
- data/app/models/comable/variant.rb +25 -12
- data/app/models/concerns/comable/cart_owner.rb +1 -5
- data/app/models/concerns/comable/checkout.rb +4 -7
- data/app/models/concerns/comable/linkable.rb +11 -22
- data/app/models/concerns/comable/product/search.rb +1 -1
- data/app/views/comable/order_mailer/complete.text.erb +2 -3
- data/config/locales/en.yml +14 -0
- data/config/locales/ja.yml +14 -0
- data/db/migrate/20150918065115_add_property_to_comable_products.rb +5 -0
- data/db/migrate/20150924010143_create_comable_stock_locations.rb +11 -0
- data/db/migrate/20150924102640_add_stock_location_id_to_comable_stocks.rb +10 -0
- data/db/migrate/20150924111838_add_stock_location_id_to_comable_shipments.rb +7 -0
- data/db/migrate/20150924114017_set_default_stock_location.rb +28 -0
- data/db/migrate/20151012143215_create_comable_shipment_items.rb +11 -0
- data/db/migrate/20151013082845_remove_null_option_of_shipment_method_id_on_comable_shipments.rb +10 -0
- data/db/migrate/20151013194926_add_guest_token_index_to_comable_orders.rb +5 -0
- metadata +20 -3
@@ -5,7 +5,6 @@ module Comable
|
|
5
5
|
include Comable::Liquidable
|
6
6
|
include Comable::Product::Search
|
7
7
|
include Comable::Product::Csvable
|
8
|
-
include Comable::Linkable
|
9
8
|
|
10
9
|
has_many :variants, class_name: Comable::Variant.name, inverse_of: :product, dependent: :destroy
|
11
10
|
has_many :images, class_name: Comable::Image.name, dependent: :destroy
|
@@ -15,6 +14,7 @@ module Comable
|
|
15
14
|
accepts_nested_attributes_for :images, allow_destroy: true
|
16
15
|
|
17
16
|
scope :published, -> (published_at = nil) { where('published_at <= ?', published_at || Time.now) }
|
17
|
+
scope :by_newest, -> { reorder(created_at: :desc) }
|
18
18
|
|
19
19
|
validates :name, presence: true, length: { maximum: 255 }
|
20
20
|
|
@@ -22,8 +22,6 @@ module Comable
|
|
22
22
|
|
23
23
|
ransack_options attribute_select: { associations: [:variants, :stocks, :option_types] }
|
24
24
|
|
25
|
-
linkable_columns_keys use_index: true
|
26
|
-
|
27
25
|
PREVIEW_SESSION_KEY = :preview_product
|
28
26
|
|
29
27
|
# Add conditions for the images association.
|
@@ -39,7 +37,7 @@ module Comable
|
|
39
37
|
end
|
40
38
|
|
41
39
|
def stocked?
|
42
|
-
|
40
|
+
variants.any?(&:can_supply?)
|
43
41
|
end
|
44
42
|
|
45
43
|
def unstocked?
|
@@ -58,6 +56,10 @@ module Comable
|
|
58
56
|
option_types.empty?
|
59
57
|
end
|
60
58
|
|
59
|
+
def as_json(options = nil)
|
60
|
+
super (options || {}).merge(methods: [:variants])
|
61
|
+
end
|
62
|
+
|
61
63
|
def sku_h_item_name
|
62
64
|
option_types.first.try(:name)
|
63
65
|
end
|
@@ -85,22 +87,24 @@ module Comable
|
|
85
87
|
has_many :stocks, class_name: Comable::Stock.name, through: :variants
|
86
88
|
|
87
89
|
def stocks=(stocks)
|
88
|
-
stocks.map { |stock| variants.build(
|
89
|
-
end
|
90
|
-
|
91
|
-
def build_option_type
|
92
|
-
Comable::OptionType.new
|
90
|
+
stocks.map { |stock| variants.build(stocks: [stock]) }
|
93
91
|
end
|
94
92
|
|
95
93
|
def option_types
|
96
|
-
|
97
|
-
option_types.singleton_class.send(:define_method, :build, -> { Comable::OptionType.new })
|
98
|
-
option_types
|
94
|
+
variants.map { |variant| variant.option_values.map(&:option_type) }.flatten.uniq
|
99
95
|
end
|
100
96
|
|
101
97
|
def option_types_attributes=(_option_types_attributes)
|
102
98
|
end
|
103
99
|
|
100
|
+
def properties
|
101
|
+
parse_property = JSON.parse(property) # propertyに不正な値が入っていた場合に例外発生する
|
102
|
+
return [] unless parse_property.is_a?(Array) && parse_property.all? { |prop| prop.is_a?(Hash) }
|
103
|
+
parse_property
|
104
|
+
rescue
|
105
|
+
[]
|
106
|
+
end
|
107
|
+
|
104
108
|
#
|
105
109
|
# Deprecated methods
|
106
110
|
#
|
@@ -2,18 +2,18 @@ module Comable
|
|
2
2
|
class Shipment < ActiveRecord::Base
|
3
3
|
include Comable::Ransackable
|
4
4
|
|
5
|
-
belongs_to :order, class_name: Comable::Order.name, inverse_of: :
|
5
|
+
belongs_to :order, class_name: Comable::Order.name, inverse_of: :shipments
|
6
6
|
belongs_to :shipment_method, class_name: Comable::ShipmentMethod.name
|
7
|
+
belongs_to :stock_location, class_name: Comable::StockLocation.name
|
8
|
+
has_many :shipment_items, class_name: Comable::ShipmentItem.name, inverse_of: :shipment
|
7
9
|
|
8
10
|
before_validation :copy_attributes_from_shipment_method, unless: :order_completed?
|
9
11
|
|
10
12
|
validates :order, presence: true
|
11
|
-
validates :shipment_method, presence: true
|
13
|
+
validates :shipment_method, presence: true, if: -> { stated?(:pending) && Comable::ShipmentMethod.activated.exists? }
|
12
14
|
validates :fee, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
13
15
|
validates :tracking_number, length: { maximum: 255 }
|
14
16
|
|
15
|
-
delegate :name, to: :shipment_method
|
16
|
-
|
17
17
|
ransack_options ransackable_attributes: { except: [:order_id, :shipment_method_id] }
|
18
18
|
|
19
19
|
# The #state attribute assigns the following values:
|
@@ -47,6 +47,7 @@ module Comable
|
|
47
47
|
transition :canceled => :resumed
|
48
48
|
end
|
49
49
|
|
50
|
+
before_transition to: :ready, do: -> (s) { s.ready! }
|
50
51
|
before_transition to: :completed, do: -> (s) { s.complete! }
|
51
52
|
end
|
52
53
|
|
@@ -66,10 +67,30 @@ module Comable
|
|
66
67
|
completed_at?
|
67
68
|
end
|
68
69
|
|
70
|
+
def ready!
|
71
|
+
shipment_items.each(&:ready!)
|
72
|
+
end
|
73
|
+
|
69
74
|
def complete!
|
70
75
|
touch :completed_at
|
71
76
|
end
|
72
77
|
|
78
|
+
def restock!
|
79
|
+
shipment_items.each(&:restock!)
|
80
|
+
end
|
81
|
+
|
82
|
+
def unstock!
|
83
|
+
shipment_items.each(&:unstock!)
|
84
|
+
end
|
85
|
+
|
86
|
+
def can_ship?
|
87
|
+
ready? && order.paid? && order.completed?
|
88
|
+
end
|
89
|
+
|
90
|
+
def name
|
91
|
+
shipment_method.try(:name) || Comable.t(:normal_shipment)
|
92
|
+
end
|
93
|
+
|
73
94
|
private
|
74
95
|
|
75
96
|
def order_completed?
|
@@ -78,7 +99,7 @@ module Comable
|
|
78
99
|
|
79
100
|
def copy_attributes_from_shipment_method
|
80
101
|
self.attributes = {
|
81
|
-
fee: shipment_method.fee
|
102
|
+
fee: shipment_method.try(:fee) || 0
|
82
103
|
}
|
83
104
|
end
|
84
105
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Comable
|
2
|
+
class ShipmentItem < ActiveRecord::Base
|
3
|
+
belongs_to :shipment, class_name: Comable::Shipment.name, inverse_of: :shipment_items
|
4
|
+
belongs_to :stock, class_name: Comable::Stock.name
|
5
|
+
|
6
|
+
validates :shipment, presence: true
|
7
|
+
validates :stock, presence: true
|
8
|
+
|
9
|
+
attr_accessor :variant
|
10
|
+
|
11
|
+
def ready!
|
12
|
+
decrement_stock!
|
13
|
+
end
|
14
|
+
|
15
|
+
def restock!
|
16
|
+
increment_stock!
|
17
|
+
end
|
18
|
+
|
19
|
+
def unstock!
|
20
|
+
decrement_stock!
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def decrement_stock!
|
26
|
+
change_stock!(-1)
|
27
|
+
end
|
28
|
+
|
29
|
+
def increment_stock!
|
30
|
+
change_stock!(+1)
|
31
|
+
end
|
32
|
+
|
33
|
+
def change_stock!(required)
|
34
|
+
stock.lock!
|
35
|
+
stock.quantity += required
|
36
|
+
stock_save!
|
37
|
+
end
|
38
|
+
|
39
|
+
# Add the error to Order when fails #save! for compatibility
|
40
|
+
def stock_save!
|
41
|
+
stock.save!
|
42
|
+
rescue ActiveRecord::RecordInvalid => e
|
43
|
+
shipment.order.errors.add 'order_items.quantity', Comable.t('errors.messages.out_of_stock', name: stock.name_with_sku)
|
44
|
+
raise e, Comable.t('errors.messages.out_of_stock', name: stock.name_with_sku)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/app/models/comable/stock.rb
CHANGED
@@ -10,7 +10,8 @@ module Comable
|
|
10
10
|
include Comable::Liquidable
|
11
11
|
include Comable::Stock::Csvable
|
12
12
|
|
13
|
-
belongs_to :variant, class_name: Comable::Variant.name, inverse_of: :
|
13
|
+
belongs_to :variant, class_name: Comable::Variant.name, inverse_of: :stocks
|
14
|
+
belongs_to :stock_location, class_name: Comable::StockLocation.name
|
14
15
|
|
15
16
|
#
|
16
17
|
# @!group Scope
|
@@ -24,6 +25,10 @@ module Comable
|
|
24
25
|
# 品切れの在庫インスタンスを返す
|
25
26
|
scope :unstocked, -> { where('quantity <= ?', 0) }
|
26
27
|
|
28
|
+
# @!scope class
|
29
|
+
# returns sorted records by newest.
|
30
|
+
scope :by_newest, -> { reorder(created_at: :desc) }
|
31
|
+
|
27
32
|
#
|
28
33
|
# @!endgroup
|
29
34
|
#
|
@@ -34,11 +39,14 @@ module Comable
|
|
34
39
|
# TODO: Remove the columns for compatible
|
35
40
|
delegate :product, to: :variant
|
36
41
|
delegate :price, to: :variant
|
42
|
+
delegate :name, to: :variant
|
37
43
|
delegate :sku_h_item_name, to: :product
|
38
44
|
delegate :sku_v_item_name, to: :product
|
39
45
|
|
40
46
|
ransack_options attribute_select: { associations: :variant }, ransackable_attributes: { only: :quantity }
|
41
47
|
|
48
|
+
before_validation :set_default_stock_location, unless: :stock_location
|
49
|
+
|
42
50
|
# 在庫の有無を取得する
|
43
51
|
#
|
44
52
|
# @example
|
@@ -65,14 +73,6 @@ module Comable
|
|
65
73
|
!stocked?(quantity: quantity)
|
66
74
|
end
|
67
75
|
|
68
|
-
def name
|
69
|
-
if variant.options.any?
|
70
|
-
"#{variant.product.name} (#{variant.options.map(&:value).join('/')})"
|
71
|
-
else
|
72
|
-
variant.product.name
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
76
|
def sku_h_choice_name
|
77
77
|
variant.option_values.first.try(:name)
|
78
78
|
end
|
@@ -93,6 +93,10 @@ module Comable
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
def set_default_stock_location
|
97
|
+
self.stock_location = Comable::StockLocation.default
|
98
|
+
end
|
99
|
+
|
96
100
|
#
|
97
101
|
# Deprecated methods
|
98
102
|
#
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Comable
|
2
|
+
class StockLocation < ActiveRecord::Base
|
3
|
+
has_many :shipments, class_name: Comable::Shipment.name
|
4
|
+
has_many :stocks, class_name: Comable::Stock.name, dependent: :destroy
|
5
|
+
belongs_to :address, class_name: Comable::Address.name
|
6
|
+
|
7
|
+
accepts_nested_attributes_for :address
|
8
|
+
|
9
|
+
validates :name, presence: true, length: { maximum: 255 }
|
10
|
+
|
11
|
+
scope :active, -> { where(active: true) }
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def default
|
15
|
+
where(default: true).first_or_initialize do |stock_location|
|
16
|
+
stock_location.name = Comable.t(:deafult)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def as_json(_options = {})
|
22
|
+
{ id: id, text: name }
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_stock_item(variant)
|
26
|
+
stocks.find_by(variant: variant)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/app/models/comable/theme.rb
CHANGED
@@ -7,11 +7,12 @@ module Comable
|
|
7
7
|
validates :code, presence: true
|
8
8
|
validates :place, presence: true, length: { maximum: 255 }
|
9
9
|
|
10
|
-
scope :activated, -> { where(activated_flag: true) }
|
11
|
-
|
12
10
|
enumerize :place, in: %i(
|
13
11
|
everywhere
|
14
12
|
checkout
|
15
13
|
), scope: true
|
14
|
+
|
15
|
+
scope :activated, -> { where(activated_flag: true) }
|
16
|
+
scope :by_newest, -> { reorder(created_at: :desc) }
|
16
17
|
end
|
17
18
|
end
|
data/app/models/comable/user.rb
CHANGED
@@ -17,6 +17,7 @@ module Comable
|
|
17
17
|
scope :this_month, -> { where(created_at: Time.now.beginning_of_month..Time.now.end_of_month) }
|
18
18
|
scope :this_week, -> { where(created_at: Time.now.beginning_of_week..Time.now.end_of_week) }
|
19
19
|
scope :last_week, -> { where(created_at: 1.week.ago.beginning_of_week..1.week.ago.end_of_week) }
|
20
|
+
scope :by_newest, -> { reorder(created_at: :desc) }
|
20
21
|
|
21
22
|
validates :email, presence: true, length: { maximum: 255 }
|
22
23
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Comable
|
2
|
+
class Variant < ActiveRecord::Base
|
3
|
+
module Quantifier
|
4
|
+
def total_quantity
|
5
|
+
if track_inventory?
|
6
|
+
stocks.to_a.sum(&:quantity)
|
7
|
+
else
|
8
|
+
Float::INFINITY
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def can_supply?(required = 1)
|
13
|
+
quantity >= required || backorderable?
|
14
|
+
end
|
15
|
+
|
16
|
+
# TODO: Implement
|
17
|
+
def track_inventory?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
# TODO: Implement
|
22
|
+
def backorderable?
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,31 +1,29 @@
|
|
1
1
|
module Comable
|
2
2
|
class Variant < ActiveRecord::Base
|
3
3
|
include Comable::Ransackable
|
4
|
+
include Comable::Variant::Quantifier
|
4
5
|
|
5
6
|
belongs_to :product, class_name: Comable::Product.name, inverse_of: :variants
|
6
|
-
|
7
|
+
has_many :stocks, class_name: Comable::Stock.name, inverse_of: :variant, dependent: :destroy
|
7
8
|
|
8
|
-
has_and_belongs_to_many :option_values, class_name: Comable::OptionValue.name, join_table: :comable_variants_option_values
|
9
|
+
has_and_belongs_to_many :option_values, -> { order(:option_type_id, :created_at, :id) }, class_name: Comable::OptionValue.name, join_table: :comable_variants_option_values
|
9
10
|
|
11
|
+
accepts_nested_attributes_for :stocks, allow_destroy: true
|
10
12
|
accepts_nested_attributes_for :option_values, allow_destroy: true
|
11
|
-
accepts_nested_attributes_for :stock
|
12
13
|
|
13
14
|
validates :product, presence: { message: Comable.t('admin.is_not_exists') }
|
14
15
|
validates :price, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
15
16
|
validates :sku, length: { maximum: 255 }
|
16
17
|
|
17
|
-
ransack_options attribute_select: { associations: [:product, :
|
18
|
+
ransack_options attribute_select: { associations: [:product, :stocks, :option_values] }, ransackable_attributes: { except: :product_id }
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
scope :by_newest, -> { reorder(created_at: :desc) }
|
21
|
+
|
22
|
+
alias_method :quantity, :total_quantity
|
22
23
|
|
23
24
|
def quantity=(quantity)
|
24
|
-
if
|
25
|
-
|
26
|
-
else
|
27
|
-
build_stock(quantity: quantity)
|
28
|
-
end
|
25
|
+
fail 'Stocks are already exists!' if stocks.any?
|
26
|
+
stocks.build(quantity: quantity)
|
29
27
|
end
|
30
28
|
|
31
29
|
def options
|
@@ -42,5 +40,20 @@ module Comable
|
|
42
40
|
Comable::OptionValue.where(name: hash[:value], option_type: option_type).first_or_initialize(&:save!)
|
43
41
|
end
|
44
42
|
end
|
43
|
+
|
44
|
+
def name
|
45
|
+
if options.any?
|
46
|
+
"#{product.name} (#{options.map(&:value).join('/')})"
|
47
|
+
else
|
48
|
+
product.name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def as_json(options = nil)
|
53
|
+
super.merge(
|
54
|
+
'quantity' => quantity,
|
55
|
+
'options' => option_values.map(&:name)
|
56
|
+
)
|
57
|
+
end
|
45
58
|
end
|
46
59
|
end
|
@@ -51,22 +51,18 @@ module Comable
|
|
51
51
|
|
52
52
|
private
|
53
53
|
|
54
|
-
# rubocop:disable Metrics/MethodLength
|
55
54
|
def process_cart_item(obj)
|
56
55
|
case obj
|
57
|
-
when Comable::Product
|
56
|
+
when Comable::Product, Comable::Variant
|
58
57
|
yield obj.stocks.first
|
59
58
|
when Comable::Stock
|
60
59
|
yield obj
|
61
|
-
when Comable::Variant
|
62
|
-
yield obj.stock
|
63
60
|
when Array
|
64
61
|
obj.map { |item| yield item }
|
65
62
|
else
|
66
63
|
fail
|
67
64
|
end
|
68
65
|
end
|
69
|
-
# rubocop:enable Metrics/MethodLength
|
70
66
|
|
71
67
|
def add_stock_to_cart(stock, quantity)
|
72
68
|
cart_item = find_cart_item_by(stock)
|
@@ -36,6 +36,7 @@ module Comable
|
|
36
36
|
transition to: :resumed, from: :canceled
|
37
37
|
end
|
38
38
|
|
39
|
+
before_transition to: :shipment, do: :assign_inventory_units_to_shipments
|
39
40
|
before_transition to: :completed, do: :complete!
|
40
41
|
before_transition to: :canceled, do: [:payment_cancel!, :restock!]
|
41
42
|
before_transition to: :resumed, do: [:payment_resume!, :unstock!]
|
@@ -67,19 +68,15 @@ module Comable
|
|
67
68
|
end
|
68
69
|
|
69
70
|
def shipment_required?
|
70
|
-
Comable::ShipmentMethod.activated.exists? &&
|
71
|
+
Comable::ShipmentMethod.activated.exists? && shipments.empty?
|
71
72
|
end
|
72
73
|
|
73
74
|
def allow_cancel?
|
74
|
-
|
75
|
-
# !shipments.exists?
|
76
|
-
true
|
75
|
+
!shipments.with_state(:completed).exists?
|
77
76
|
end
|
78
77
|
|
79
78
|
def allow_return?
|
80
|
-
|
81
|
-
# shipments.exists?
|
82
|
-
false
|
79
|
+
!allow_cancel?
|
83
80
|
end
|
84
81
|
end
|
85
82
|
end
|
@@ -3,33 +3,22 @@ module Comable
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
module ClassMethods
|
6
|
-
|
7
|
-
if options.present?
|
8
|
-
@_linkable_columns = default_columns_key.merge(options.slice(:name, :id))
|
9
|
-
@use_index = options[:use_index]
|
10
|
-
else
|
11
|
-
@_linkable_columns
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def linkable_columns(*key)
|
16
|
-
(@_linkable_columns || default_columns_key).slice(*key).values
|
17
|
-
end
|
6
|
+
private
|
18
7
|
|
19
|
-
def
|
8
|
+
def calc_linkable_id_options(klass, column_options = {})
|
9
|
+
return [[]] unless klass
|
20
10
|
# HACK: Rails3系のpluckでは複数フィールドを指定できないためselectとmapでカラムを取得する
|
21
|
-
# options = pluck(*linkable_columns(
|
22
|
-
|
23
|
-
records = select(
|
24
|
-
options = records.map(&
|
25
|
-
@use_index ? options.unshift(index_option) : options
|
26
|
-
end
|
11
|
+
# options = klass.pluck(*linkable_columns(column_options))
|
12
|
+
select_columns = linkable_columns(column_options)
|
13
|
+
records = klass.select(select_columns)
|
14
|
+
options = records.map(&select_columns.first).zip(records.map(&select_columns.last))
|
27
15
|
|
28
|
-
|
29
|
-
@use_index || exists?
|
16
|
+
column_options[:use_index] ? options.unshift(index_option) : options
|
30
17
|
end
|
31
18
|
|
32
|
-
|
19
|
+
def linkable_columns(column_keys)
|
20
|
+
default_columns_key.merge(column_keys).slice(:name, :id).values
|
21
|
+
end
|
33
22
|
|
34
23
|
def default_columns_key
|
35
24
|
{
|
@@ -6,9 +6,8 @@
|
|
6
6
|
|
7
7
|
<%= Comable.t('order_mailer.complete.introductions', store_name: current_store.name) %>
|
8
8
|
|
9
|
-
<%-
|
10
|
-
|
11
|
-
<%= @order.class.human_attribute_name(:shipment_method) %>:
|
9
|
+
<%- @order.shipments.select(&:shipment_method).each.with_index(1) do |shipment, index| %>
|
10
|
+
<%= "#{@order.class.human_attribute_name(:shipment_method)} ##{index}" %>:
|
12
11
|
<%= shipment.name %>
|
13
12
|
<%- end %>
|
14
13
|
|
data/config/locales/en.yml
CHANGED
@@ -40,6 +40,8 @@ en:
|
|
40
40
|
sample_subheader: 'This is sample text.'
|
41
41
|
sample_text: 'Please write your message here.'
|
42
42
|
default_store_name: 'K&B style'
|
43
|
+
default: 'Default'
|
44
|
+
normal_shipment: 'Normal shipment'
|
43
45
|
|
44
46
|
price: &price
|
45
47
|
'Price'
|
@@ -170,6 +172,7 @@ en:
|
|
170
172
|
view: 'View'
|
171
173
|
add_variants: 'Add variants'
|
172
174
|
size: 'Size'
|
175
|
+
add_stocks: 'Add stocks'
|
173
176
|
nav:
|
174
177
|
dashboard: 'Dashboard'
|
175
178
|
order: 'Orders'
|
@@ -185,12 +188,15 @@ en:
|
|
185
188
|
payment_method: 'Payment methods'
|
186
189
|
tracker: 'Tracker'
|
187
190
|
theme: 'Theme'
|
191
|
+
stock_location: 'Stock locations'
|
188
192
|
products:
|
189
193
|
detail: 'Product details'
|
190
194
|
list: 'Product list'
|
191
195
|
visibility: 'publishing/closed'
|
192
196
|
published: 'Published'
|
193
197
|
unpublished: 'Unpublished'
|
198
|
+
property: 'Property'
|
199
|
+
add_property: 'Add Property'
|
194
200
|
orders:
|
195
201
|
detail: 'Order details'
|
196
202
|
cart: 'Cart infomation'
|
@@ -358,6 +364,7 @@ en:
|
|
358
364
|
name: 'Name'
|
359
365
|
price: 'Price'
|
360
366
|
caption: 'Caption'
|
367
|
+
property: 'Property'
|
361
368
|
categories: 'Categories'
|
362
369
|
sku_h_item_name: 'SKU Horizontal item name'
|
363
370
|
sku_v_item_name: 'SKU Vertical item name'
|
@@ -461,6 +468,13 @@ en:
|
|
461
468
|
id: 'ID'
|
462
469
|
name: 'Name'
|
463
470
|
<<: *timestamps
|
471
|
+
comable/stock_location:
|
472
|
+
id: 'ID'
|
473
|
+
name: 'Name'
|
474
|
+
address: 'Address'
|
475
|
+
active: 'Active'
|
476
|
+
default: 'Default'
|
477
|
+
<<: *timestamps
|
464
478
|
|
465
479
|
enumerize:
|
466
480
|
comable/user:
|
data/config/locales/ja.yml
CHANGED
@@ -40,6 +40,8 @@ ja:
|
|
40
40
|
sample_subheader: 'これはサンプルテキストです。'
|
41
41
|
sample_text: 'ここにあなたのお好きなメッセージを埋め込むことができます。'
|
42
42
|
default_store_name: 'K&B style'
|
43
|
+
default: 'デフォルト'
|
44
|
+
normal_shipment: '通常配送'
|
43
45
|
|
44
46
|
price: &price
|
45
47
|
'価格'
|
@@ -170,6 +172,7 @@ ja:
|
|
170
172
|
view: '確認する'
|
171
173
|
add_variants: 'バリエーションを追加する'
|
172
174
|
size: 'サイズ'
|
175
|
+
add_stocks: '在庫を追加する'
|
173
176
|
nav:
|
174
177
|
dashboard: ダッシュボード
|
175
178
|
order: 注文管理
|
@@ -185,12 +188,15 @@ ja:
|
|
185
188
|
payment_method: 決済管理
|
186
189
|
tracker: トラッキング情報
|
187
190
|
theme: 'テーマ'
|
191
|
+
stock_location: '倉庫管理'
|
188
192
|
products:
|
189
193
|
detail: 商品詳細
|
190
194
|
list: '商品一覧'
|
191
195
|
visibility: 公開/非公開
|
192
196
|
published: 公開
|
193
197
|
unpublished: 非公開
|
198
|
+
property: プロパティ
|
199
|
+
add_property: プロパティ追加
|
194
200
|
orders:
|
195
201
|
detail: 注文明細
|
196
202
|
cart: カート情報
|
@@ -358,6 +364,7 @@ ja:
|
|
358
364
|
name: 商品名
|
359
365
|
price: 価格
|
360
366
|
caption: キャプション
|
367
|
+
property: プロパティ
|
361
368
|
categories: カテゴリ
|
362
369
|
sku_h_item_name: SKU横軸項目名
|
363
370
|
sku_v_item_name: SKU縦軸項目名
|
@@ -461,6 +468,13 @@ ja:
|
|
461
468
|
id: 'ID'
|
462
469
|
name: '名称'
|
463
470
|
<<: *timestamps
|
471
|
+
comable/stock_location:
|
472
|
+
id: 'ID'
|
473
|
+
name: '倉庫名'
|
474
|
+
address: '住所'
|
475
|
+
active: '有効'
|
476
|
+
default: 'デフォルト'
|
477
|
+
<<: *timestamps
|
464
478
|
|
465
479
|
enumerize:
|
466
480
|
comable/user:
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateComableStockLocations < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :comable_stock_locations do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.boolean :default, null: false, default: false
|
6
|
+
t.boolean :active, null: false, default: true
|
7
|
+
t.references :address
|
8
|
+
t.timestamps null: false
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class AddStockLocationIdToComableStocks < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
change_table :comable_stocks do |t|
|
4
|
+
t.references :stock_location
|
5
|
+
end
|
6
|
+
|
7
|
+
add_index :comable_stocks, :stock_location_id
|
8
|
+
add_index :comable_stocks, [:stock_location_id, :variant_id]
|
9
|
+
end
|
10
|
+
end
|