From 657b3e63bc6a0858cf10f597ceb68e857ee33e34 Mon Sep 17 00:00:00 2001 From: Philipp Rothmann Date: Tue, 21 Feb 2023 15:08:32 +0100 Subject: [PATCH] rework group order edit form * make switch order a menu list * table more slim * alert when balance negative instead of making everything red * search to the right --- app/assets/javascripts/ordering.js | 10 +- app/views/group_orders/_form.html.haml | 256 +++++++++------------ app/views/group_orders/_order_details.haml | 28 +++ app/views/group_orders/_total_sum.haml | 19 ++ config/locales/de.yml | 1 + config/locales/en.yml | 1 + config/locales/nl.yml | 1 + 7 files changed, 159 insertions(+), 157 deletions(-) create mode 100644 app/views/group_orders/_order_details.haml create mode 100644 app/views/group_orders/_total_sum.haml diff --git a/app/assets/javascripts/ordering.js b/app/assets/javascripts/ordering.js index a3dd1050..1097f8a7 100644 --- a/app/assets/javascripts/ordering.js +++ b/app/assets/javascripts/ordering.js @@ -179,17 +179,13 @@ function updateBalance() { var balance = groupBalance - total; $('#new_balance').html(I18n.l("currency", balance)); $('#total_balance').val(I18n.l("currency", balance)); - // determine bgcolor and submit button state according to balance - var bgcolor = ''; if (balance < minimumBalance) { - bgcolor = '#FF0000'; $('#submit_button').attr('disabled', 'disabled') + $('#balance-alert').css('display', 'block') + } else { $('#submit_button').removeAttr('disabled') - } - // update bgcolor - for (i in itemTotal) { - $('#td_price_' + i).css('background-color', bgcolor); + $('#balance-alert').css('display', 'none') } } diff --git a/app/views/group_orders/_form.html.haml b/app/views/group_orders/_form.html.haml index 52879378..f6a31563 100644 --- a/app/views/group_orders/_form.html.haml +++ b/app/views/group_orders/_form.html.haml @@ -11,170 +11,126 @@ var listjsResetPlugin = ['reset', {highlightClass: 'btn-primary'}]; var listjsDelayPlugin = ['delay', {delayedSearchTime: 500}]; new List(document.body, { - valueNames: ['name'], - engine: 'unlist', - plugins: [listjsResetPlugin, listjsDelayPlugin], - // make large pages work too (as we don't have paging - articles may disappear!) - page: 10000, - indexAsync: true + valueNames: ['name'], + engine: 'unlist', + plugins: [listjsResetPlugin, listjsDelayPlugin], + // make large pages work too (as we don't have paging - articles may disappear!) + page: 10000, + indexAsync: true }); }); - title t('.title'), false +.alert.alert-error#balance-alert{style: ('display:none')} + =t 'group_orders.errors.balance_alert' .row-fluid - .well.span9 - %h2= @order.name - %a(href='#tab1' data-toggle="collapse") - Show Details - #tab1.collapse - %dl.dl-horizontal - - unless @order.note.blank? - %dt= heading_helper Order, :note - %dd= @order.note - %dt= heading_helper Order, :created_by - %dd= show_user_link(@order.created_by) - %dt= heading_helper Order, :ends - %dd= format_time(@order.ends) - %dt= heading_helper Order, :pickup - %dd= format_date(@order.pickup) - - unless @order.stockit? or @order.supplier.min_order_quantity.blank? - %dt= heading_helper Supplier, :min_order_quantity, short: true - %dd= @order.supplier.min_order_quantity - %dt= t '.sum_amount' - %dd= number_to_currency @order.sum - - unless @group_order.new_record? - %dt= heading_helper GroupOrder, :updated_by - %dd - = show_user(@group_order.updated_by) - (#{format_time(@group_order.updated_on)}) - %dt= heading_helper Ordergroup, :account_balance - %dd= number_to_currency(@ordering_data[:account_balance]) - - unless FoodsoftConfig[:charge_members_manually] - %dt= heading_helper Ordergroup, :available_funds - %dd= number_to_currency(@ordering_data[:available_funds]) .well.span3 = render 'switch_order', current_order: @order -.row-fluid - .well.span12 + .well.span8 + %h2= @order.name + %a(href='#tab1' data-toggle="collapse") + =t '.details' + #tab1.collapse + = render 'order_details' .form-search.pull-right .input-append = text_field_tag :article, params[:article], placeholder: t('.search_article'), class: 'search-query delayed-search resettable' %button.add-on.btn.reset-search{:type => :button, :title => t('.reset_article_search')} %i.icon.icon-remove - - -= form_for @group_order do |f| - = f.hidden_field :lock_version - = f.hidden_field :order_id - = f.hidden_field :updated_by_user_id - = f.hidden_field :ordergroup_id - %table.table - %thead - %tr - %th= heading_helper Article, :name - - if @order.stockit? - %th{style: 'width:120px'}= heading_helper StockArticle, :supplier - %th{style: "width:13px;"} - %th{style: "width:4.5em;"}= t '.price' - %th{style: "width:4.5em;"}= heading_helper Article, :unit - - unless @order.stockit? - %th{style: "width:70px;"}= heading_helper OrderArticle, :missing_units, short: true - %th#col_required= heading_helper GroupOrderArticle, :quantity - %th#col_tolerance= heading_helper GroupOrderArticle, :tolerance - - else - %th(style="width:20px")= heading_helper StockArticle, :available - %th#col_required= heading_helper GroupOrderArticle, :quantity - %th{style: "width:15px;"}= heading_helper GroupOrderArticle, :total_price - %tbody.list - - @order.articles_grouped_by_category.each do |category, order_articles| - %tr.list-heading.article-category - %td - = category - %i.icon-tag - %td{colspan: "9"} - - order_articles.each do |order_article| - %tr{class: "#{cycle('even', 'odd', name: 'articles')} order-article #{get_missing_units_css_class(@ordering_data[:order_articles][order_article.id][:missing_units])}", valign: "top", tabindex: "0"} - %td.name= order_article.article.name + = form_for @group_order do |f| + = f.hidden_field :lock_version + = f.hidden_field :order_id + = f.hidden_field :updated_by_user_id + = f.hidden_field :ordergroup_id + %table.table + %thead + %tr + %th= heading_helper Article, :name - if @order.stockit? - %td= truncate order_article.article.supplier.name, length: 15 - %td= h order_article.article.origin - %td= number_to_currency(@ordering_data[:order_articles][order_article.id][:price]) - %td= order_article.article.unit - %td - - if @order.stockit? - = @ordering_data[:order_articles][order_article.id][:quantity_available] - - else - %span{id: "missing_units_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:missing_units] + %th{style: 'width:120px'}= heading_helper StockArticle, :supplier + %th{style: "width:13px;"} + %th{style: "width:4.5em;"}= t '.price' + %th{style: "width:4.5em;"}= heading_helper Article, :unit + - unless @order.stockit? + %th{style: "width:70px;"}= heading_helper OrderArticle, :missing_units, short: true + %th#col_required= heading_helper GroupOrderArticle, :quantity + %th#col_tolerance= heading_helper GroupOrderArticle, :tolerance + - else + %th(style="width:20px")= heading_helper StockArticle, :available + %th#col_required= heading_helper GroupOrderArticle, :quantity + %th{style: "width:15px;"}= heading_helper GroupOrderArticle, :total_price + %tbody.list + - @order.articles_grouped_by_category.each do | category, order_articles| + %tr.list-heading.article-category + %td + = category + %i.icon-tag + %td{colspan: "9"} + - order_articles.each do |order_article| + %tr{class: "#{cycle('even', 'odd', name: 'articles')} order-article #{get_missing_units_css_class(@ordering_data[:order_articles][order_article.id][:missing_units])}", valign: "top", tabindex: "0"} + %td.name= order_article.article.name + - if @order.stockit? + %td= truncate order_article.article.supplier.name, length: 15 + %td= h order_article.article.origin + %td= number_to_currency(@ordering_data[:order_articles][order_article.id][:price]) + %td= order_article.article.unit + %td + - if @order.stockit? + = @ordering_data[:order_articles][order_article.id][:quantity_available] + - else + %span{id: "missing_units_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:missing_units] - %td.quantity - %input{id: "q_#{order_article.id}", name: "group_order[group_order_articles_attributes][#{order_article.id}][quantity]", type: "hidden", value: @ordering_data[:order_articles][order_article.id][:quantity], 'data-min' => (@ordering_data[:order_articles][order_article.id][:quantity] if @order.boxfill?), 'data-max' => (@ordering_data[:order_articles][order_article.id][:quantity]+@ordering_data[:order_articles][order_article.id][:missing_units] if @order.boxfill?)}/ - %span.used{id: "q_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_quantity] - + - %span.unused{id: "q_unused_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:quantity] - @ordering_data[:order_articles][order_article.id][:used_quantity] - .btn-group - %a.btn.btn-ordering{'data-decrease_quantity' => order_article.id} - %i.icon-minus - %a.btn.btn-ordering{'data-increase_quantity' => order_article.id} - %i.icon-plus + %td.quantity + %input{id: "q_#{order_article.id}", name: "group_order[group_order_articles_attributes][#{order_article.id}][quantity]", type: "hidden", value: @ordering_data[:order_articles][order_article.id][:quantity], 'data-min' => (@ordering_data[:order_articles][order_article.id][:quantity] if @order.boxfill?), 'data-max' => (@ordering_data[:order_articles][order_article.id][:quantity]+@ordering_data[:order_articles][order_article.id][:missing_units] if @order.boxfill?)}/ + %span.used{id: "q_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_quantity] + + + %span.unused{id: "q_unused_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:quantity] - @ordering_data[:order_articles][order_article.id][:used_quantity] + .btn-group + %a.btn.btn-ordering{'data-decrease_quantity' => order_article.id} + %i.icon-minus + %a.btn.btn-ordering{'data-increase_quantity' => order_article.id} + %i.icon-plus - %td.tolerance{style: ('display:none' if @order.stockit?)} - %input{id: "t_#{order_article.id}", name: "group_order[group_order_articles_attributes][#{order_article.id}][tolerance]", type: "hidden", value: @ordering_data[:order_articles][order_article.id][:tolerance], 'data-min' => (@ordering_data[:order_articles][order_article.id][:tolerance] if @order.boxfill?)}/ - - if (@ordering_data[:order_articles][order_article.id][:unit] > 1) - %span.used{id: "t_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_tolerance] - + - %span.unused{id: "t_unused_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:tolerance] - @ordering_data[:order_articles][order_article.id][:used_tolerance] - .btn-group - %a.btn.btn-ordering{'data-decrease_tolerance' => order_article.id} - %i.icon-minus - %a.btn.btn-ordering{'data-increase_tolerance' => order_article.id} - %i.icon-plus + %td.tolerance{style: ('display:none' if @order.stockit?)} + %input{id: "t_#{order_article.id}", name: "group_order[group_order_articles_attributes][#{order_article.id}][tolerance]", type: "hidden", value: @ordering_data[:order_articles][order_article.id][:tolerance], 'data-min' => (@ordering_data[:order_articles][order_article.id][:tolerance] if @order.boxfill?)}/ + - if (@ordering_data[:order_articles][order_article.id][:unit] > 1) + %span.used{id: "t_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_tolerance] + + + %span.unused{id: "t_unused_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:tolerance] - @ordering_data[:order_articles][order_article.id][:used_tolerance] + .btn-group + %a.btn.btn-ordering{'data-decrease_tolerance' => order_article.id} + %i.icon-minus + %a.btn.btn-ordering{'data-increase_tolerance' => order_article.id} + %i.icon-plus - %td{id: "td_price_#{order_article.id}", style: "text-align:right; padding-right:10px; width:4em"} - %span{id: "price_#{order_article.id}_display"}= number_to_currency(@ordering_data[:order_articles][order_article.id][:total_price]) - .article-info - .article-name= order_article.article.name - .pull-right - = t('.units_full') + ':' - %span{id: "units_#{order_article.id}"}= order_article.units_to_order - %br/ - = t('.units_total') + ':' - %span{id: "q_total_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:quantity] + @ordering_data[:order_articles][order_article.id][:others_quantity] - %br/ - = t('.total_tolerance') + ':' - %span{id: "t_total_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:tolerance] + @ordering_data[:order_articles][order_article.id][:others_tolerance] - %br/ - .pull-left - #{heading_helper Article, :manufacturer}: #{order_article.article.manufacturer} - %br/ - #{heading_helper Article, :units}: #{@order.stockit? ? order_article.article.quantity_available : @ordering_data[:order_articles][order_article.id][:unit]} * #{h order_article.article.unit} - %br/ - #{heading_helper Article, :note}: #{order_article.article.note} - %br/ - #order-footer - #info-box - #total-sum - %table - %tr - %td= t('.total_sum_amount') + ':' - %td.currency - %span#total_price= number_to_currency(@group_order.price) - %tr - - if FoodsoftConfig[:charge_members_manually] - - old_balance = @ordering_data[:account_balance] - %td= heading_helper(Ordergroup, :account_balance) + ':' - %td.currency= number_to_currency(@ordering_data[:account_balance]) - - else - - old_balance = @ordering_data[:available_funds] - %td= heading_helper(Ordergroup, :available_funds) + ':' - %td.currency= number_to_currency(@ordering_data[:available_funds]) - %tr - %td= t('.new_funds') + ':' - %td.currency - %strong - %span#new_balance= number_to_currency(old_balance - @group_order.price) - #order-button - = submit_tag( t('.action_save'), id: 'submit_button', class: 'btn btn-primary' ) - #{link_to t('ui.or_cancel'), group_orders_path} - %input#total_balance{name: "total_balance", type: "hidden", value: @ordergroup.account_balance - @group_order.price}/ - %input{name: "version", type: "hidden", value: @version}/ + %td{id: "td_price_#{order_article.id}", style: "text-align:right; padding-right:10px; width:4em"} + %span{id: "price_#{order_article.id}_display"}= number_to_currency(@ordering_data[:order_articles][order_article.id][:total_price]) + .article-info + .article-name= order_article.article.name + .pull-right + = t('.units_full') + ':' + %span{id: "units_#{order_article.id}"}= order_article.units_to_order + %br/ + = t('.units_total') + ':' + %span{id: "q_total_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:quantity] + @ordering_data[:order_articles][order_article.id][:others_quantity] + %br/ + = t('.total_tolerance') + ':' + %span{id: "t_total_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:tolerance] + @ordering_data[:order_articles][order_article.id][:others_tolerance] + %br/ + .pull-left + #{heading_helper Article, :manufacturer}: #{order_article.article.manufacturer} + %br/ + #{heading_helper Article, :units}: #{@order.stockit? ? order_article.article.quantity_available : @ordering_data[:order_articles][order_article.id][:unit]} * #{h order_article.article.unit} + %br/ + #{heading_helper Article, :note}: #{order_article.article.note} + %br/ + #order-footer + #info-box + #total-sum + = render 'total_sum' + #order-button + = submit_tag( t('.action_save'), id: 'submit_button', class: 'btn btn-primary' ) + #{link_to t('ui.or_cancel'), group_orders_path} + %input#total_balance{name: "total_balance", type: "hidden", value: @ordergroup.account_balance - @group_order.price}/ + %input{name: "version", type: "hidden", value: @version}/ diff --git a/app/views/group_orders/_order_details.haml b/app/views/group_orders/_order_details.haml new file mode 100644 index 00000000..6be2ff2d --- /dev/null +++ b/app/views/group_orders/_order_details.haml @@ -0,0 +1,28 @@ +%a(href='#tab1' data-toggle="collapse") + =t '.details' +#tab1.collapse + %dl.dl-horizontal + - unless @order.note.blank? + %dt= heading_helper Order, :note + %dd= @order.note + %dt= heading_helper Order, :created_by + %dd= show_user_link(@order.created_by) + %dt= heading_helper Order, :ends + %dd= format_time(@order.ends) + %dt= heading_helper Order, :pickup + %dd= format_date(@order.pickup) + - unless @order.stockit? or @order.supplier.min_order_quantity.blank? + %dt= heading_helper Supplier, :min_order_quantity, short: true + %dd= @order.supplier.min_order_quantity + %dt= t 'group_orders.form.sum_amount' + %dd= number_to_currency @order.sum + - unless @group_order.new_record? + %dt= heading_helper GroupOrder, :updated_by + %dd + = show_user(@group_order.updated_by) + (#{format_time(@group_order.updated_on)}) + %dt= heading_helper Ordergroup, :account_balance + %dd= number_to_currency(@ordering_data[:account_balance]) + - unless FoodsoftConfig[:charge_members_manually] + %dt= heading_helper Ordergroup, :available_funds + %dd= number_to_currency(@ordering_data[:available_funds]) \ No newline at end of file diff --git a/app/views/group_orders/_total_sum.haml b/app/views/group_orders/_total_sum.haml new file mode 100644 index 00000000..28911b32 --- /dev/null +++ b/app/views/group_orders/_total_sum.haml @@ -0,0 +1,19 @@ +%table + %tr + %td= t('group_orders.form.total_sum_amount') + ':' + %td.currency + %span#total_price= number_to_currency(@group_order.price) + %tr + - if FoodsoftConfig[:charge_members_manually] + - old_balance = @ordering_data[:account_balance] + %td= heading_helper(Ordergroup, :account_balance) + ':' + %td.currency= number_to_currency(@ordering_data[:account_balance]) + - else + - old_balance = @ordering_data[:available_funds] + %td= heading_helper(Ordergroup, :available_funds) + ':' + %td.currency= number_to_currency(@ordering_data[:available_funds]) + %tr + %td= t('group_orders.form.new_funds') + ':' + %td.currency + %strong + %span#new_balance= number_to_currency(old_balance - @group_order.price) diff --git a/config/locales/de.yml b/config/locales/de.yml index 6af67346..a2cf4008 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1045,6 +1045,7 @@ de: error_stale: In der Zwischenzeit hat jemand anderes auch bestellt, daher konnte die Bestellung nicht aktualisiert werden. notice: Die Bestellung wurde gespeichert. errors: + balance_alert: Kontostand im Minus closed: Diese Bestellung ist bereits abgeschlossen. no_member: Du bist kein Mitglieder einer Bestellgruppe. notfound: Fehlerhafte URL, das ist nicht Deine Bestellung. diff --git a/config/locales/en.yml b/config/locales/en.yml index 92bb3bb2..d7a878fb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1047,6 +1047,7 @@ en: error_stale: Someone else has ordered in the meantime, couldn't update the order. notice: The order was saved. errors: + balance_alert: Negative account balance closed: This order is already closed. no_member: You are not a member of an ordergroup. notfound: Incorrect URL, this is not your order. diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 9c5c44b8..ee9e3fec 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1017,6 +1017,7 @@ nl: error_stale: In de tussentijd heeft iemand anders ook bestelt, daarom kon de bestelling niet bijgewerkt worden. notice: Bestelling opgeslagen. errors: + balance_alert: Accountsaldo in het rood closed: Deze bestelling is al gesloten. no_member: Je bent geen lid van dit huishouden. notfound: Foute URL, dit is niet jouw bestelling.