From cf1e68f11dc0bdd552c1dd9b790b0b800b9e0bfb Mon Sep 17 00:00:00 2001 From: Julius Date: Mon, 30 Dec 2013 14:34:26 +0100 Subject: [PATCH] Allow to edit OrderArticle in Order#receive form --- app/controllers/orders_controller.rb | 6 ++++ app/views/orders/_edit_amount.html.haml | 11 +++++-- app/views/orders/_edit_amounts.html.haml | 5 +++- app/views/orders/receive.html.haml | 15 ++++++++++ .../receive_on_order_article_update.js.erb | 30 +++++++++++++++++++ config/routes.rb | 2 ++ 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/views/orders/receive_on_order_article_update.js.erb diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index 4c476cbe..a9649b8a 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -126,6 +126,12 @@ class OrdersController < ApplicationController redirect_to @order end end + + def receive_on_order_article_update # See publish/subscribe design pattern in /doc. + @order_article = OrderArticle.find(params[:order_article_id]) + + render :layout => false + end protected diff --git a/app/views/orders/_edit_amount.html.haml b/app/views/orders/_edit_amount.html.haml index 2f724753..02fb9505 100644 --- a/app/views/orders/_edit_amount.html.haml +++ b/app/views/orders/_edit_amount.html.haml @@ -1,21 +1,28 @@ +# NOTE: if you modify tiny details here you must also change them in `receive_on_order_article_update.js.erb` = fields_for 'order_articles', order_article, index: order_article.id do |form| - %tr{class: "#{cycle('even', 'odd', name: 'articles')} order-article", valign: "top"} + %tr{id: "order_article_#{order_article.id}", class: "#{cycle('even', 'odd', name: 'articles')} order-article", valign: "top"} - order_title = [] - order_title.append Article.human_attribute_name(:manufacturer)+': ' + order_article.article.manufacturer unless order_article.article.manufacturer.to_s.empty? - order_title.append Article.human_attribute_name(:note)+': ' + order_article.article.note unless order_article.article.note.to_s.empty? - units_expected = (order_article.units_billed or order_article.units_to_order) %td= order_article.article.order_number %td.name{title: order_title.join("\n")}= order_article.article.name - %td #{order_article.article.unit_quantity} × #{order_article.article.unit} + %td.unit= order_article.article.unit %td #{order_article.quantity} + #{order_article.tolerance} %td = order_article.units_to_order %i.package pkg + %span.article_unit_quantity (× #{order_article.article.unit_quantity}) + %td.article_price= number_to_currency order_article.article.price -#%td # TODO implement invoice screen - unless order_article.units_billed.nil? = order_article.units_billed %i.package pkg %td = form.text_field :units_received, class: 'input-nano package', data: {'units-expected' => units_expected} + %span.article_price_unit_quantity (× #{order_article.article_price.unit_quantity}) / TODO add almost invisible text_field for entering single units + %td.article_price_price= number_to_currency order_article.article_price.price %td.units_delta + %td + = link_to t('ui.edit'), edit_finance_order_order_article_path(order_article.order, order_article), remote: true, class: 'btn btn-mini' diff --git a/app/views/orders/_edit_amounts.html.haml b/app/views/orders/_edit_amounts.html.haml index 311d1e8f..e84b998d 100644 --- a/app/views/orders/_edit_amounts.html.haml +++ b/app/views/orders/_edit_amounts.html.haml @@ -74,12 +74,15 @@ %tr %th.sort{:data => {:sort => 'string'}}= heading_helper Article, :order_number, short: true %th.sort{:data => {:sort => 'string'}}= heading_helper Article, :name - %th= heading_helper GroupOrderArticle, :units + %th= heading_helper Article, :unit %th Members %th Ordered + %th= heading_helper Article, :price -#%th Invoice # TODO implement invoice screen %th Received + %th= heading_helper ArticlePrice, :price %th + %th= t 'ui.actions' %tbody#result_table - @order_articles.each do |order_article| = render :partial => 'edit_amount', :locals => {:order_article => order_article} diff --git a/app/views/orders/receive.html.haml b/app/views/orders/receive.html.haml index 6f393225..127a8258 100644 --- a/app/views/orders/receive.html.haml +++ b/app/views/orders/receive.html.haml @@ -1,3 +1,18 @@ +- content_for :javascript do + :javascript + $(function() { + // Subscribe to database changes. + // See publish/subscribe design pattern in /doc. + $(document).on('OrderArticle#update', function(e) { + $.ajax({ + url: '#{receive_on_order_article_update_order_path(@order)}', + type: 'get', + data: {order_article_id: e.order_article_id}, + contentType: 'application/json; charset=UTF-8' + }); + }); + }); + - title "Receiving #{@order.name}" = form_tag(receive_order_path(@order)) do diff --git a/app/views/orders/receive_on_order_article_update.js.erb b/app/views/orders/receive_on_order_article_update.js.erb new file mode 100644 index 00000000..be58e641 --- /dev/null +++ b/app/views/orders/receive_on_order_article_update.js.erb @@ -0,0 +1,30 @@ +// Handle more advanced DOM update after AJAX database manipulation. +// See publish/subscribe design pattern in /doc. +(function(w) { + var order_article_entry = $('#order_article_<%= @order_article.id %>'); + + $('.name', order_article_entry).text( + '<%= j @order_article.article.name %>' + ); + + $('.unit', order_article_entry).text( + '<%= j @order_article.article.unit %>' + ); + + $('.article_unit_quantity', order_article_entry).text( + '(× <%= @order_article.article.unit_quantity %>)' + ); + + $('.article_price', order_article_entry).text( + '<%= j number_to_currency @order_article.article.price %>' + ); + + $('.article_price_unit_quantity', order_article_entry).text( + '(× <%= @order_article.article_price.unit_quantity %>)' + ); + + $('.article_price_price', order_article_entry).text( + '<%= j number_to_currency @order_article.article_price.price %>' + ); +})(window); + diff --git a/config/routes.rb b/config/routes.rb index 2249c654..18d955a1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -42,6 +42,8 @@ Foodsoft::Application.routes.draw do get :receive post :receive get :add_article + + get :receive_on_order_article_update end end