ba_spree 1.0.0 → 1.1.0
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/app/controllers/ba_spree/checkout_controller_decorator.rb +15 -0
- data/app/helpers/spree/base_helper_decorator.rb +2 -8
- data/app/models/ba_spree/line_item_decorator.rb +14 -0
- data/app/models/ba_spree/order_decorator.rb +6 -0
- data/app/overrides/keep_bill_address_form_open_on_error.rb +13 -0
- data/config/locales/en.yml +1 -0
- data/config/locales/ja.yml +1 -0
- data/lib/ba_spree/version.rb +1 -1
- data/lib/ba_spree.rb +20 -0
- metadata +33 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 82aeb70ed5e30afcc4c5849eb6daf41f9a311b649e9e3f86adb0ff519feee6c9
|
|
4
|
+
data.tar.gz: 771f95d599301938053a772c997baca793f9237451568b1072ed127be2770f17
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e15809db814b48a2211a17dce5ac0e3e2fcd6dd40aaf0dcf0d7a96f0c43664a71eb33ff718eded86546cef5a6384706a35bc0a2c1361eea5219e12c178720c2
|
|
7
|
+
data.tar.gz: 0a2c180bdf9a3e648affd0f56fe915f87a8ee7c2b790e30d04a80298fbfc52c4f907a511d30ecd0283330bc96e953abad0be333a0625d65e54263bcefa91b75f
|
|
@@ -2,6 +2,7 @@ module BaSpree
|
|
|
2
2
|
module CheckoutControllerDecorator
|
|
3
3
|
def self.prepended(base)
|
|
4
4
|
base.before_action :filter_bill_address_when_use_shipping, only: [ :update ], if: -> { params[:state] == 'payment' }
|
|
5
|
+
base.before_action :ensure_line_item_prices_current, only: [ :edit, :update ]
|
|
5
6
|
end
|
|
6
7
|
|
|
7
8
|
protected
|
|
@@ -94,6 +95,20 @@ module BaSpree
|
|
|
94
95
|
end
|
|
95
96
|
end
|
|
96
97
|
|
|
98
|
+
# チェックアウトを放置している間に商品価格が変わっていたら、住所入力からやり直させる。
|
|
99
|
+
# address から次へ進むときに Spree が明細価格を再計算し、続く配送・支払ステップで
|
|
100
|
+
# 送料・税・支払金額が現在価格で作り直される。
|
|
101
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1392
|
|
102
|
+
def ensure_line_item_prices_current
|
|
103
|
+
# 価格の再計算が走るのは address から次へ進むときだけなので、それより後の state だけ判定する
|
|
104
|
+
return unless %w[delivery payment confirm].include?(@order.state)
|
|
105
|
+
return unless @order.line_item_prices_stale?
|
|
106
|
+
|
|
107
|
+
@order.restart_checkout_flow
|
|
108
|
+
flash[:error] = Spree.t(:line_item_prices_changed)
|
|
109
|
+
redirect_to spree.checkout_state_path(@order.token, 'address')
|
|
110
|
+
end
|
|
111
|
+
|
|
97
112
|
def filter_bill_address_when_use_shipping
|
|
98
113
|
return unless params[:order]&.dig(:bill_address_attributes)
|
|
99
114
|
|
|
@@ -32,14 +32,8 @@ module Spree
|
|
|
32
32
|
class ChildTaxonsSection < SimpleDelegator
|
|
33
33
|
def cache_key
|
|
34
34
|
child_taxon_ids = links.map(&:linkable_id)
|
|
35
|
-
max_updated_at = links.
|
|
36
|
-
"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# ActiveSupport::Cache は cache_key より先にこちらを見るため、
|
|
40
|
-
# 委譲先の実装が使われないよう合わせて上書きする
|
|
41
|
-
def cache_key_with_version
|
|
42
|
-
cache_key
|
|
35
|
+
max_updated_at = links.map(&:linkable).map(&:updated_at).max.to_i
|
|
36
|
+
"#{child_taxon_ids.join('-')}-#{max_updated_at}"
|
|
43
37
|
end
|
|
44
38
|
end
|
|
45
39
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module BaSpree
|
|
2
|
+
module LineItemDecorator
|
|
3
|
+
# 注文に写し取った price が、現在の販売価格(Spree::LineItem#update_price と同じ計算)とずれているか。
|
|
4
|
+
# 価格の再計算は address から次へ進むときにしか走らないため、チェックアウトを長期間放置した注文で
|
|
5
|
+
# 商品価格(予約割引の終了・価格改定)が変わったことを検知するのに使う。
|
|
6
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1392
|
|
7
|
+
def price_stale?
|
|
8
|
+
context = Spree::Pricing::Context.from_order(variant, order, quantity: quantity)
|
|
9
|
+
variant.price_for(context).price_including_vat_for(tax_zone: tax_zone) != price
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Spree::LineItem.prepend(BaSpree::LineItemDecorator)
|
|
@@ -89,6 +89,12 @@ module BaSpree
|
|
|
89
89
|
# (cancel! 内の after_cancel が 'order.canceled' を publish 済みなので、ここは update のみ)
|
|
90
90
|
publish_event('order.updated')
|
|
91
91
|
end
|
|
92
|
+
|
|
93
|
+
# 現在の販売価格とずれている明細が1つでもあるか
|
|
94
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1392
|
|
95
|
+
def line_item_prices_stale?
|
|
96
|
+
line_items.any?(&:price_stale?)
|
|
97
|
+
end
|
|
92
98
|
end
|
|
93
99
|
end
|
|
94
100
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# payment 画面で請求先住所(bill_address)を新規入力して送信し、バリデーションで差し戻された
|
|
2
|
+
# とき、本家は bill_address が new_record? のため「配送先と同じ(use_shipping)」を再びチェック
|
|
3
|
+
# 済みにし、入力したフォームを hidden に戻してしまう。入力欄の直下に出したエラーも一緒に
|
|
4
|
+
# 隠れて、何が悪かったのか分からなくなる。
|
|
5
|
+
#
|
|
6
|
+
# 請求先住所にエラーがあるときは use_shipping を外し、フォームを開いたままにする。
|
|
7
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1397
|
|
8
|
+
Deface::Override.new(
|
|
9
|
+
virtual_path: 'spree/checkout/_payment',
|
|
10
|
+
name: 'keep_bill_address_form_open_on_error',
|
|
11
|
+
replace: "erb[silent]:contains('use_shipping = ')",
|
|
12
|
+
text: "<% use_shipping = (@order.shipping_eq_billing_address? || @order.bill_address.nil? || @order.bill_address.new_record?) && @order.requires_ship_address? && (@order.bill_address.nil? || @order.bill_address.errors.empty?) %>"
|
|
13
|
+
)
|
data/config/locales/en.yml
CHANGED
data/config/locales/ja.yml
CHANGED
data/lib/ba_spree/version.rb
CHANGED
data/lib/ba_spree.rb
CHANGED
|
@@ -16,5 +16,25 @@ require 'spree_materials'
|
|
|
16
16
|
# Spree::Calculator::FlatPercentOrderTotal を参照する。
|
|
17
17
|
# @see https://github.com/be-agile/giga-repeat/issues/1307
|
|
18
18
|
require 'spree_order_total_discount'
|
|
19
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1400
|
|
20
|
+
require 'spree_common_shipping_method_splitter'
|
|
19
21
|
require 'ba_spree/engine'
|
|
20
22
|
require 'ba_spree/version'
|
|
23
|
+
|
|
24
|
+
module BaSpree
|
|
25
|
+
# ba_spree が束ねる engine の gem 名(ba_spree.gemspec の記載順)。
|
|
26
|
+
# 依存のうち be-agile org で公開している gem を engine とみなし、spree 本体や deface は除く。
|
|
27
|
+
def self.bundled_engine_names
|
|
28
|
+
Gem.loaded_specs.fetch('ba_spree').runtime_dependencies.map(&:name).select do |name|
|
|
29
|
+
Gem.loaded_specs[name]&.homepage&.start_with?('https://github.com/be-agile/')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# ba_spree.gemspec が依存する engine を、gemspec の記載順ですべて require する(上で require 済みのものは何も起きない)。
|
|
35
|
+
# Bundler.require は Gemfile に書かれた gem しか require しないため、`gem "ba_spree"` だけを書いた利用者の環境では
|
|
36
|
+
# ここで require しないと engine として登録されない。ba_spree より後にロードするので decorator は ba_spree の外側に重なる。
|
|
37
|
+
# giga-repeat でも Gemfile.basic の先頭の ba_spree がここで全て require するため、本番の engine のロード順も
|
|
38
|
+
# gemspec の記載順で決まる。engine の一覧を gemspec だけに持ち、ここや Gemfile との二重管理を避ける。
|
|
39
|
+
# @see https://github.com/be-agile/giga-repeat/issues/1403
|
|
40
|
+
BaSpree.bundled_engine_names.each { |name| require name }
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ba_spree
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- be agile Co., Ltd.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-09-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: spree
|
|
@@ -95,7 +95,7 @@ dependencies:
|
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
98
|
+
name: ba_spree_loyalty_points
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - ">="
|
|
@@ -109,7 +109,7 @@ dependencies:
|
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
110
|
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
112
|
+
name: spree_materials
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
115
|
- - ">="
|
|
@@ -123,7 +123,7 @@ dependencies:
|
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: '0'
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
|
-
name:
|
|
126
|
+
name: spree_order_total_discount
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
128
128
|
requirements:
|
|
129
129
|
- - ">="
|
|
@@ -137,7 +137,7 @@ dependencies:
|
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '0'
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
140
|
+
name: ba_spree_google_analytics
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
142
142
|
requirements:
|
|
143
143
|
- - ">="
|
|
@@ -151,7 +151,7 @@ dependencies:
|
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '0'
|
|
153
153
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
154
|
+
name: spree_yahoo_ads
|
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
|
156
156
|
requirements:
|
|
157
157
|
- - ">="
|
|
@@ -165,7 +165,7 @@ dependencies:
|
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
166
|
version: '0'
|
|
167
167
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
168
|
+
name: spree_products_payment_methods
|
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
|
170
170
|
requirements:
|
|
171
171
|
- - ">="
|
|
@@ -179,7 +179,7 @@ dependencies:
|
|
|
179
179
|
- !ruby/object:Gem::Version
|
|
180
180
|
version: '0'
|
|
181
181
|
- !ruby/object:Gem::Dependency
|
|
182
|
-
name:
|
|
182
|
+
name: ba_spree_cash_on_delivery
|
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
|
184
184
|
requirements:
|
|
185
185
|
- - ">="
|
|
@@ -193,7 +193,7 @@ dependencies:
|
|
|
193
193
|
- !ruby/object:Gem::Version
|
|
194
194
|
version: '0'
|
|
195
195
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
196
|
+
name: ba_spree_related_products
|
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
|
198
198
|
requirements:
|
|
199
199
|
- - ">="
|
|
@@ -207,7 +207,7 @@ dependencies:
|
|
|
207
207
|
- !ruby/object:Gem::Version
|
|
208
208
|
version: '0'
|
|
209
209
|
- !ruby/object:Gem::Dependency
|
|
210
|
-
name:
|
|
210
|
+
name: spree_np_atobarai
|
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
|
212
212
|
requirements:
|
|
213
213
|
- - ">="
|
|
@@ -221,7 +221,7 @@ dependencies:
|
|
|
221
221
|
- !ruby/object:Gem::Version
|
|
222
222
|
version: '0'
|
|
223
223
|
- !ruby/object:Gem::Dependency
|
|
224
|
-
name:
|
|
224
|
+
name: spree_direct_debit
|
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
|
226
226
|
requirements:
|
|
227
227
|
- - ">="
|
|
@@ -235,7 +235,7 @@ dependencies:
|
|
|
235
235
|
- !ruby/object:Gem::Version
|
|
236
236
|
version: '0'
|
|
237
237
|
- !ruby/object:Gem::Dependency
|
|
238
|
-
name:
|
|
238
|
+
name: spree_zip_autocomplete
|
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
|
240
240
|
requirements:
|
|
241
241
|
- - ">="
|
|
@@ -249,7 +249,7 @@ dependencies:
|
|
|
249
249
|
- !ruby/object:Gem::Version
|
|
250
250
|
version: '0'
|
|
251
251
|
- !ruby/object:Gem::Dependency
|
|
252
|
-
name:
|
|
252
|
+
name: spree_address_format_i18n
|
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|
|
254
254
|
requirements:
|
|
255
255
|
- - ">="
|
|
@@ -263,7 +263,21 @@ dependencies:
|
|
|
263
263
|
- !ruby/object:Gem::Version
|
|
264
264
|
version: '0'
|
|
265
265
|
- !ruby/object:Gem::Dependency
|
|
266
|
-
name:
|
|
266
|
+
name: spree_custom_email
|
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
|
268
|
+
requirements:
|
|
269
|
+
- - ">="
|
|
270
|
+
- !ruby/object:Gem::Version
|
|
271
|
+
version: '0'
|
|
272
|
+
type: :runtime
|
|
273
|
+
prerelease: false
|
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
275
|
+
requirements:
|
|
276
|
+
- - ">="
|
|
277
|
+
- !ruby/object:Gem::Version
|
|
278
|
+
version: '0'
|
|
279
|
+
- !ruby/object:Gem::Dependency
|
|
280
|
+
name: ba_spree_bank_transfer
|
|
267
281
|
requirement: !ruby/object:Gem::Requirement
|
|
268
282
|
requirements:
|
|
269
283
|
- - ">="
|
|
@@ -361,7 +375,7 @@ dependencies:
|
|
|
361
375
|
- !ruby/object:Gem::Version
|
|
362
376
|
version: '0'
|
|
363
377
|
- !ruby/object:Gem::Dependency
|
|
364
|
-
name:
|
|
378
|
+
name: spree_gmo_pg
|
|
365
379
|
requirement: !ruby/object:Gem::Requirement
|
|
366
380
|
requirements:
|
|
367
381
|
- - ">="
|
|
@@ -375,7 +389,7 @@ dependencies:
|
|
|
375
389
|
- !ruby/object:Gem::Version
|
|
376
390
|
version: '0'
|
|
377
391
|
- !ruby/object:Gem::Dependency
|
|
378
|
-
name:
|
|
392
|
+
name: spree_common_shipping_method_splitter
|
|
379
393
|
requirement: !ruby/object:Gem::Requirement
|
|
380
394
|
requirements:
|
|
381
395
|
- - ">="
|
|
@@ -443,6 +457,7 @@ files:
|
|
|
443
457
|
- app/javascript/spree/admin/controllers/slug_form_controller.js
|
|
444
458
|
- app/models/ba_spree/address_decorator.rb
|
|
445
459
|
- app/models/ba_spree/adjustment_decorator.rb
|
|
460
|
+
- app/models/ba_spree/line_item_decorator.rb
|
|
446
461
|
- app/models/ba_spree/order_decorator.rb
|
|
447
462
|
- app/models/ba_spree/order_updater_decorator.rb
|
|
448
463
|
- app/models/ba_spree/payment_method_decorator.rb
|
|
@@ -490,6 +505,7 @@ files:
|
|
|
490
505
|
- app/overrides/fix_coupon_apply_button_layout.rb
|
|
491
506
|
- app/overrides/hide_gift_cards_and_store_credits_from_account_nav.rb
|
|
492
507
|
- app/overrides/hide_shipping_message_for_digital_only_orders.rb
|
|
508
|
+
- app/overrides/keep_bill_address_form_open_on_error.rb
|
|
493
509
|
- app/overrides/localize_apply_button_text.rb
|
|
494
510
|
- app/overrides/localize_newsletter_button_text.rb
|
|
495
511
|
- app/overrides/replace_announcement_bar_text.rb
|