feat: improve usability of group order

remove group order panel close buttons

things shouldn't just disapear

order article disabled button should be gray

roup order swap plus and minus buttons

because it's more naturally intuitive like this

group order make order details collapse

group order pull search to the right

group order make 'current orders' more obvious

fix switch menu

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

wip: rework group order details

tried to reduce the amount of informations shown. but needs some user feedback, what information are actually relevant

rework group order show view

dashboard make show edit current order action more precise

group order package indication uses  more color-blind friendly color

group order fix dancing quantity buttons

group order switch menu use show view

group order show window with some explanations

group order edit title more clear

grou order edit show less infos

group order switch view next iteration

grou order index narrower tables

move order details to show again

remove unused stuff
This commit is contained in:
Philipp Rothmann 2023-02-20 18:52:13 +01:00
parent 6f2a3b4f5f
commit 75bb400d0d
13 changed files with 353 additions and 292 deletions

View file

@ -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')
}
}

View file

@ -230,7 +230,7 @@ table {
margin: .5em 0;
input:disabled {
background-color: red; }
background-color: gray; }
}
}
}
@ -278,13 +278,14 @@ tr.order-article .article-info {
display: none;
}
tr.order-article:focus{
background-color: #E4EED6;
}
tr.order-article:focus .article-info {
display: block;
}
tr.order-article:focus {
background-color: #E9E9E9;
}
// ********* Articles
tr.just-updated {

View file

@ -1,11 +1,23 @@
.list .missing-many td, .list .missing-many:hover td {
background-color: #ebbebe;
.missing-many td {
background-color: #ffc590aa;
}
.list .missing-few td, .list .missing-few:hover td {
background-color: #ffee75;
.missing-many:hover td, .missing-many:focus td {
background-color: #ffc590;
}
.list .missing-none td, .list .missing-none:hover td {
background-color: #E4EED6;
.missing-few td {
background-color: #fcf488aa;
}
.missing-few:hover td, .missing-few:focus td {
background-color: #fcf488;
}
.missing-none td {
background-color: #d0f6ffaa;
}
.missing-none:hover td, .missing-none:focus td {
background-color: #d0f6ff;
}

View file

@ -0,0 +1,15 @@
%h4= t '.title'
%hr
%table.table-condensed
%thead
%th= t '.package_fill_level'
%tbody
%tr{class: "missing-none"}
%td= t '.missing_none'
%tr{class: "missing-few"}
%td= t '.missing_few'
%tr{class: "missing-many"}
%td= t '.missing_many'
%hr
%b= t('.tolerance') + ':'
= t '.tolerance_explained'

View file

@ -22,48 +22,35 @@
- title t('.title'), false
.alert.alert-error#balance-alert{style: ('display:none')}
=t 'group_orders.errors.balance_alert'
.row-fluid
.well.pull-left
= close_button :alert
%h2= @order.name
%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.pull-right
= close_button :alert
.span2
.well
= render 'switch_order', current_order: @order
.row-fluid
.well.clear
.form-search
.well
= render 'explanations'
.well.span9
%h2.span9= t '.sub_title', order_name: @order.name
.span3
%table.table-condensed
-if @order.ends
%tr
%td= heading_helper(Order, :ends) + ': '
%td= format_time(@order.ends)
- unless @order.stockit? or @order.supplier.min_order_quantity.blank?
%tr
%td= heading_helper(Supplier, :min_order_quantity)
%td= number_to_currency(@order.supplier.min_order_quantity)
%tr
%td= t('group_orders.form.sum_amount') + ':'
%td= number_to_currency(@order.sum)
%hr
.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
@ -77,6 +64,7 @@
%th{style: 'width:120px'}= heading_helper StockArticle, :supplier
%th{style: "width:13px;"}
%th{style: "width:4.5em;"}= t '.price'
%th{style: "width:4.5em;"}= t '.price_per_base_unit'
%th{style: "width:4.5em;"}= heading_helper Article, :unit
- unless @order.stockit?
%th{style: "width:70px;"}= heading_helper OrderArticle, :missing_units, short: true
@ -100,6 +88,7 @@
%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= price_per_base_unit(article: order_article.article, price: @ordering_data[:order_articles][order_article.id][:price])
%td= order_article.article.unit
%td
- if @order.stockit?
@ -108,15 +97,16 @@
%span{id: "missing_units_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:missing_units]
%td.quantity
.outer{style: "diyplay: inline-block; float: left; width: 50px;"}
%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-increase_quantity' => order_article.id}
%i.icon-plus
%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?)}/
@ -125,10 +115,10 @@
+
%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-increase_tolerance' => order_article.id}
%i.icon-plus
%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])
@ -154,25 +144,7 @@
#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)
= 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}

View file

@ -1,9 +1,10 @@
- orders = Order.open.started.reject{ |order| order == current_order }
- orders = Order.open.started
- unless orders.empty?
%h2= t '.title'
%ul.unstyled
%ul.nav.nav-pills.nav-stacked
.nav-header= t '.title'
%li= link_to t('ui.overview'), :group_orders
- orders.each do |order|
%li
= link_to_ordering(order, 'data-confirm_switch_order' => true)
- if order.ends
= t '.remaining', remaining: time_ago_in_words(order.ends)
.btn-small.pull-right
=link_to_ordering(order, style: (order == current_order ? 'color: white' : '' ), 'data-confirm_switch_order' => true){ t 'ui.edit' }
%li( class="#{ order == current_order ? 'active' : ''}")
=link_to_ordering(order, show: true, 'data-confirm_switch_order' => true)

View file

@ -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)

View file

@ -18,10 +18,13 @@
%th= heading_helper Ordergroup, :available_funds
%th.numeric= number_to_currency(@ordergroup.get_available_funds)
.row-fluid
.span9
= render :partial => "shared/open_orders", :locals => {:ordergroup => @ordergroup}
// finished orders
- unless @finished_not_closed_orders_including_group_order.empty?
.row-fluid
.span9
%section
%h2= t '.finished_orders.title'
= render partial: 'orders', locals: {orders: @finished_not_closed_orders_including_group_order, pagination: false}
@ -32,6 +35,8 @@
// closed orders
- unless @closed_orders_including_group_order.empty?
.row-fluid
.span9
%section
%h2= t '.closed_orders.title'
= render partial: 'orders', locals: {orders: @closed_orders_including_group_order, pagination: false}

View file

@ -7,44 +7,52 @@
- title t('.title', order: @order.name)
.row-fluid
.well.pull-left
// Order summary
.well.span2
= render 'switch_order', current_order: @order
.well.span9
%h2= t '.articles.title'
%dl.dl-horizontal
// Name
%dt= heading_helper Order, :name
%dd= @order.name
%dt= heading_helper Order, :note
%dd= @order.note
// Order Ends
%dt= heading_helper Order, :ends
%dd= format_time(@order.ends)
// Pickup
- unless @order.pickup.blank?
%dt= heading_helper Order, :pickup
%dd= format_date(@order.pickup)
%dt= heading_helper GroupOrder, :price
// Min Order Quantity
- 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
// Group Order Sum Amount
%dt= t 'group_orders.form.sum_amount'
%dd= number_to_currency @order.sum
// Created By
%dt= heading_helper Order, :created_by
%dd= show_user_link(@order.created_by)
// Updated By
- unless @group_order.new_record?
%dt= heading_helper GroupOrder, :updated_by
%dd
- if @group_order
= number_to_currency(@group_order.price)
- else
= t '.not_ordered'
- if @group_order && @group_order.transport
%dt= heading_helper GroupOrder, :transport
%dd= number_to_currency(@group_order.transport)
%dt= heading_helper GroupOrder, :total
%dd= number_to_currency(@group_order.total)
= show_user(@group_order.updated_by)
(#{format_time(@group_order.updated_on)})
// Closed By
- if @order.closed?
%dt= heading_helper Order, :closed_by
%dd= show_user_link @order.updated_by
%p= link_to t('.comment'), "#comments"
.well.pull-right
= close_button :alert
= render 'switch_order', current_order: @order
// Note
- unless @order.note.blank?
%dt= heading_helper Order, :note
%dd= @order.note
// Article box
%section
%h2= t '.articles.title'
.column_content#result
- if @group_order
%p.pull-right= link_to t('.articles.show_hide'), '#', 'data-toggle-this' => 'tr.ignored'
%p= link_to(t('.articles.edit_order'), edit_group_order_path(@group_order, order_id: @order.id), class: 'btn btn-primary') if @order.open?
%p= link_to t('.articles.show_hide'), '#', 'data-toggle-this' => 'tr.ignored'
%table.table.table-hover
%thead
%tr
@ -97,15 +105,15 @@
%th= number_to_currency(@group_order.total)
%br/
= link_to_top
%p.pull-right= link_to(t('.articles.edit_order'), edit_group_order_path(@group_order, order_id: @order.id), class: 'btn btn-primary') if @order.open?
- else
- if @order.open?
= t '.articles.not_ordered_msg'
= link_to t('.articles.order_now'), action: "order", id: @order
- else
= t '.articles.order_closed_msg'
// Comments box
%section
%hr
%h2= t '.comments.title'
#comments
= render 'shared/comments', comments: @order.comments

View file

@ -9,6 +9,7 @@
%thead
%tr
%th= heading_helper Order, :name
%th
%th= heading_helper Order, :pickup
%th= heading_helper Order, :ends
%th= t '.who_ordered'
@ -17,21 +18,23 @@
- total = 0
- orders.each do |order|
%tr
%td= link_to_ordering(order)
%td
= link_to_ordering(order, show: true)
%td
.btn-small= link_to_ordering(order){ t 'ui.edit' }
%td= format_date(order.pickup) unless order.pickup.nil?
%td= format_time(order.ends) unless order.ends.nil?
- if group_order = order.group_order(ordergroup)
- total += group_order.price
%td= "#{show_user group_order.updated_by} (#{format_time(group_order.updated_on)})"
%td.numeric
= link_to_ordering(order, show: true) do
= number_to_currency(group_order.price)
- else
%td{:colspan => 2}
- if total > 0
%tfooter
%tr
%th(colspan="3")
%th(colspan="4")
%th= t('.total_sum') + ':'
%th.numeric= number_to_currency(total)
- else

View file

@ -1046,9 +1046,23 @@ 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.
explanations:
package_fill_level: |
Gebindefüllstand
missing_none: |
Voll
missing_few: |
Wenig fehlt
missing_many: |
Viel fehlt
title: Erklärungen
tolerance_explained: |
Zusätzliche Menge die du bestellen würdest, damit das Gebinde voll wird.
tolerance: Toleranz
form:
action_save: Bestellung speichern
new_funds: Neuer Kontostand
@ -1057,6 +1071,7 @@ de:
search_article: Artikel suchen...
sum_amount: Gesamtbestellmenge bisher
title: Bestellen
sub_title: Bestellung für %{order_name} aufgeben
total_sum_amount: Gesamtbetrag
total_tolerance: Gesamt-Toleranz
units: Gebinde
@ -1100,7 +1115,6 @@ de:
sum: Summe
title: Dein Bestellergebnis für %{order}
switch_order:
remaining: "noch %{remaining}"
title: Laufende Bestellungen
update:
error_general: Die Bestellung konnte nicht aktualisiert werden, da ein Fehler auftrat.

View file

@ -1048,9 +1048,23 @@ 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.
explanations:
title: Explanations
tolerance: Tolerance
package_fill_level: |
Package Fill Level
missing_none: |
No more missing
missing_few: |
Few missing
missing_many: |
Many missing
tolerance_explained: |
Additional amount you would buy to fill a wholesale package
form:
action_save: Save order
new_funds: New account balance
@ -1059,6 +1073,7 @@ en:
search_article: Search for articles...
sum_amount: Current amount
title: Orders
sub_title: Place order for %{order_name}
total_sum_amount: Total amount
total_tolerance: Total tolerance
units: Units
@ -1102,7 +1117,6 @@ en:
sum: Sum
title: Your order result for %{order}
switch_order:
remaining: "%{remaining} remaining"
title: Current orders
update:
error_general: The order couldnt be updated due to a bug.

View file

@ -1018,6 +1018,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.
@ -1029,6 +1030,7 @@ nl:
search_article: Artikelen zoeken...
sum_amount: Huidig totaalbedrag
title: Bestellen
sub_title: Plaats bestelling voor %{order_name}
total_sum_amount: Totalbedrag
total_tolerance: Totale tolerantie
units: Eenheden
@ -1072,7 +1074,6 @@ nl:
sum: Som
title: Jouw bestelling voor %{order}
switch_order:
remaining: "nog %{remaining}"
title: Lopende bestellingen
update:
error_general: Er is een probleem opgetreden, de bestelling kon niet bijgewerkt worden.