diff --git a/app/models/spree/price.rb b/app/models/spree/price.rb index 68d5caf306..710e4ef5c3 100644 --- a/app/models/spree/price.rb +++ b/app/models/spree/price.rb @@ -24,6 +24,10 @@ module Spree amount end + def price_changed? + amount_changed? + end + def price=(price) self[:amount] = parse_price(price) end diff --git a/app/models/spree/variant.rb b/app/models/spree/variant.rb index 528790313b..ea05767a63 100644 --- a/app/models/spree/variant.rb +++ b/app/models/spree/variant.rb @@ -50,7 +50,8 @@ module Spree has_many :prices, class_name: 'Spree::Price', dependent: :destroy - delegate :display_price, :display_amount, :price, :price=, :currency, :currency=, + delegate :display_price, :display_amount, :price, :price_changed?, :price=, + :currency, :currency=, to: :find_or_build_default_price has_many :exchange_variants diff --git a/app/views/admin/products_v3/_table.html.haml b/app/views/admin/products_v3/_table.html.haml index 6be9db6c90..1c24161239 100644 --- a/app/views/admin/products_v3/_table.html.haml +++ b/app/views/admin/products_v3/_table.html.haml @@ -40,10 +40,10 @@ %tr %td.field.align-left.header = product_form.hidden_field :id - = product_form.text_field :name, 'aria-label': t('admin.products_page.columns.name') + = product_form.text_field :name, 'aria-label': t('admin.products_page.columns.name'), class: (product_form.object.name_changed? ? 'changed' : nil) = error_message_on product, :name %td.field - = product_form.text_field :sku, 'aria-label': t('admin.products_page.columns.sku') + = product_form.text_field :sku, 'aria-label': t('admin.products_page.columns.sku'), class: (product_form.object.sku_changed? ? 'changed' : nil) = error_message_on product, :sku %td.align-right .content @@ -69,15 +69,15 @@ %tr.condensed %td.field = variant_form.hidden_field :id - = variant_form.text_field :display_name, 'aria-label': t('admin.products_page.columns.name'), placeholder: product.name + = variant_form.text_field :display_name, 'aria-label': t('admin.products_page.columns.name'), placeholder: product.name, class: (variant_form.object.display_name_changed? ? 'changed' : nil) = error_message_on variant, :display_name %td.field - = variant_form.text_field :sku, 'aria-label': t('admin.products_page.columns.sku') + = variant_form.text_field :sku, 'aria-label': t('admin.products_page.columns.sku'), class: (variant_form.object.sku_changed? ? 'changed' : nil) = error_message_on variant, :sku %td.align-right .content= variant.unit_to_display %td.field - = variant_form.text_field :price, 'aria-label': t('admin.products_page.columns.price'), value: number_to_currency(variant.price, unit: '')&.strip # TODO: add a spec to prove that this formatting is necessary. If so, it should be in a shared form helper for currency inputs + = variant_form.text_field :price, 'aria-label': t('admin.products_page.columns.price'), class: (variant_form.object.price_changed? ? 'changed' : nil), value: number_to_currency(variant.price, unit: '')&.strip # TODO: add a spec to prove that this formatting is necessary. If so, it should be in a shared form helper for currency inputs = error_message_on variant, :price %td.align-right .content= variant.on_hand || 0 #TODO: spec for this according to requirements.