diff --git a/app/views/articles/_form.html.haml b/app/views/articles/_form.html.haml
index b63db423..1918b0c4 100644
--- a/app/views/articles/_form.html.haml
+++ b/app/views/articles/_form.html.haml
@@ -7,35 +7,14 @@
.modal-body
= f.input :availability
= f.input :name
- .fold-line
- = f.input :unit_quantity, label: Article.human_attribute_name(:unit),
- input_html: {class: 'input-mini', title: Article.human_attribute_name(:unit_quantity)}
- = f.input :unit, label: '×'.html_safe,
- input_html: {class: 'input-mini', title: Article.human_attribute_name(:unit)}
+
+ = render partial: 'shared/article_fields_units', locals: {f: f}
= f.input :note
= f.association :article_category
/ TODO labels
- .fold-line
- = f.input :price do
- .input-prepend
- %span.add-on= t 'number.currency.format.unit'
- = f.input_field :price, class: 'input-mini'
- = f.input :tax do
- .input-append
- = f.input_field :tax, class: 'input-mini'
- %span.add-on %
- .fold-line
- = f.input :deposit do
- .input-prepend
- %span.add-on= t 'number.currency.format.unit'
- = f.input_field :deposit, class: 'input-mini'
- .control-group
- %label.control-label{for: 'article_fc_price'}
- = Article.human_attribute_name(:fc_price)
- .controls.control-text#article_fc_price
- = number_to_currency(@article.fc_price) rescue nil
+ = render partial: 'shared/article_fields_price', locals: {f: f}
= f.input :origin
= f.input :manufacturer
@@ -44,14 +23,3 @@
= link_to t('ui.close'), '#', class: 'btn', data: {dismiss: 'modal'}
= f.submit class: 'btn btn-primary'
-:javascript
- var form = $('form.edit_article, form.new_article');
- $('#article_price, #article_tax, #article_deposit', form).on('change keyup', function() {
- var price = parseFloat($('#article_price', form).val());
- var tax = parseFloat($('#article_tax', form).val());
- var deposit = parseFloat($('#article_deposit', form).val());
- // Article#gross_price and Article#fc_price
- var gross_price = (price + deposit) * (tax / 100 + 1);
- var fc_price = gross_price * (#{FoodsoftConfig[:price_markup].to_f} / 100 + 1);
- $('#article_fc_price').html($.isNumeric(fc_price) ? I18n.l("currency", fc_price) : '
');
- });
diff --git a/app/views/finance/order_articles/_edit.html.haml b/app/views/finance/order_articles/_edit.html.haml
index 0dddf8cd..e783cfe1 100644
--- a/app/views/finance/order_articles/_edit.html.haml
+++ b/app/views/finance/order_articles/_edit.html.haml
@@ -7,18 +7,16 @@
= simple_fields_for :article, @order_article.article do |f|
= f.input :name
- = f.input :order_number
- = f.input :unit
- - if @order_article.article.is_a?(StockArticle)
- %div.alert= t '.stock_alert'
- - else
- = simple_fields_for :article_price, @order_article.article_price do |f|
- = f.input :unit_quantity
- = f.input :price
- = f.input :tax
- = f.input :deposit
+ - if @order_article.article.is_a?(StockArticle)
+ %div.alert= t '.stock_alert'
+ - else
+ = simple_fields_for :article_price, @order_article.article_price do |fprice|
+ = render partial: 'shared/article_fields_units', locals: {f_unit: f, f_uq: fprice}
+ = render partial: 'shared/article_fields_price', locals: {f: fprice}
+
= form.input :update_current_price, as: :boolean
+ = f.input :order_number
.modal-footer
= link_to t('ui.close'), '#', class: 'btn', data: {dismiss: 'modal'}
= form.submit class: 'btn btn-primary'
diff --git a/app/views/shared/_article_fields_price.html.haml b/app/views/shared/_article_fields_price.html.haml
new file mode 100644
index 00000000..73c5757b
--- /dev/null
+++ b/app/views/shared/_article_fields_price.html.haml
@@ -0,0 +1,34 @@
+.fold-line
+ = f.input :price do
+ .input-prepend
+ %span.add-on= t 'number.currency.format.unit'
+ = f.input_field :price, class: 'input-mini'
+ = f.input :tax do
+ .input-append
+ = f.input_field :tax, class: 'input-mini'
+ %span.add-on %
+.fold-line
+ = f.input :deposit do
+ .input-prepend
+ %span.add-on= t 'number.currency.format.unit'
+ = f.input_field :deposit, class: 'input-mini'
+ .control-group
+ %label.control-label{for: 'article_fc_price'}
+ = Article.human_attribute_name(:fc_price)
+ .controls.control-text#article_fc_price
+ = number_to_currency(f.object.fc_price) rescue nil
+
+-# do this inline, since it's being used in ajax forms only
+- field = f.object.class.model_name.underscore
+:javascript
+ var form = $('#article_fc_price').closest('form');
+ $('##{field}_price, ##{field}_tax, ##{field}_deposit', form).on('change keyup', function() {
+ var price = parseFloat($('##{field}_price', form).val());
+ var tax = parseFloat($('##{field}_tax', form).val());
+ var deposit = parseFloat($('##{field}_deposit', form).val());
+ // Article#gross_price and Article#fc_price
+ var gross_price = (price + deposit) * (tax / 100 + 1);
+ var fc_price = gross_price * (#{FoodsoftConfig[:price_markup].to_f} / 100 + 1);
+ $('#article_fc_price').html($.isNumeric(fc_price) ? I18n.l("currency", fc_price) : '
');
+ });
+
diff --git a/app/views/shared/_article_fields_units.html.haml b/app/views/shared/_article_fields_units.html.haml
new file mode 100644
index 00000000..b9704cef
--- /dev/null
+++ b/app/views/shared/_article_fields_units.html.haml
@@ -0,0 +1,6 @@
+-# use the local 'f', or supply 'f_uq' and 'f_unit' for more control (like in balancing)
+.fold-line
+ = (f_uq rescue f).input :unit_quantity, label: Article.human_attribute_name(:unit),
+ input_html: {class: 'input-mini', title: Article.human_attribute_name(:unit_quantity)}
+ = (f_unit rescue f).input :unit, label: '×'.html_safe,
+ input_html: {class: 'input-mini', title: Article.human_attribute_name(:unit)}