Refactored ordering part two. Integrated stock order.
This commit is contained in:
parent
eb4705857b
commit
38b5dcba1f
17 changed files with 177 additions and 374 deletions
|
@ -51,47 +51,6 @@ class OrderingController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def stock_order
|
|
||||||
# Load order article data...
|
|
||||||
@articles_grouped_by_category = @order.articles_grouped_by_category
|
|
||||||
# save results of earlier orders in array
|
|
||||||
ordered_articles = Array.new
|
|
||||||
@group_order = @order.group_orders.find(:first,
|
|
||||||
:conditions => "ordergroup_id = #{@ordergroup.id}", :include => :group_order_articles)
|
|
||||||
|
|
||||||
if @group_order
|
|
||||||
# Group has already ordered, so get the results...
|
|
||||||
for goa in @group_order.group_order_articles
|
|
||||||
ordered_articles[goa.order_article_id] = {:quantity => goa.quantity,
|
|
||||||
:tolerance => goa.tolerance,
|
|
||||||
:quantity_result => goa.result(:quantity),
|
|
||||||
:tolerance_result => goa.result(:tolerance)}
|
|
||||||
end
|
|
||||||
@version = @group_order.lock_version
|
|
||||||
@availableFunds = @ordergroup.get_available_funds(@group_order)
|
|
||||||
else
|
|
||||||
@version = 0
|
|
||||||
@availableFunds = @ordergroup.get_available_funds
|
|
||||||
end
|
|
||||||
|
|
||||||
# load prices ....
|
|
||||||
@price = Array.new; @quantity_available = Array.new
|
|
||||||
@others_quantity = Array.new; @quantity = Array.new; @quantity_result = Array.new; @used_quantity = Array.new; @unused_quantity = Array.new
|
|
||||||
i = 0;
|
|
||||||
@articles_grouped_by_category.each do |category_name, order_articles|
|
|
||||||
for order_article in order_articles
|
|
||||||
# price/unit size
|
|
||||||
@price[i] = order_article.article.fc_price
|
|
||||||
@quantity_available[i] = order_article.article.quantity_available(@order)
|
|
||||||
# quantity
|
|
||||||
@quantity[i] = (ordered_articles[order_article.id] ? ordered_articles[order_article.id][:quantity] : 0)
|
|
||||||
@others_quantity[i] = order_article.quantity - @quantity[i]
|
|
||||||
@used_quantity[i] = (ordered_articles[order_article.id] ? ordered_articles[order_article.id][:quantity_result] : 0)
|
|
||||||
i += 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Shows all Orders of the Ordergroup
|
# Shows all Orders of the Ordergroup
|
||||||
# if selected, it shows all orders of the foodcoop
|
# if selected, it shows all orders of the foodcoop
|
||||||
def archive
|
def archive
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
module OrderingHelper
|
module OrderingHelper
|
||||||
def data_to_js(ordering_data)
|
def data_to_js(ordering_data)
|
||||||
ordering_data[:order_articles].map do |id, data|
|
ordering_data[:order_articles].map { |id, data|
|
||||||
if Foodsoft.config[:tolerance_is_costly]
|
[id, data[:price], data[:unit], data[:total_price], data[:others_quantity], data[:others_tolerance], data[:used_quantity], data[:quantity_available]]
|
||||||
[id, data[:price], data[:unit], data[:price] * (data[:tolerance] + data[:quantity]), data[:others_quantity], data[:others_tolerance], data[:used_quantity], 0]
|
}.map { |row|
|
||||||
else
|
"addData(#{row.join(', ')});"
|
||||||
[id, data[:price], data[:unit], data[:price] * data[:quantity], data[:others_quantity], data[:others_tolerance], data[:used_quantity], 0]
|
}.join("\n")
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def link_to_ordering(order)
|
def link_to_ordering(order, options = {})
|
||||||
path = if group_order = order.group_order(current_user.ordergroup)
|
path = if group_order = order.group_order(current_user.ordergroup)
|
||||||
edit_group_order_path(group_order, :order_id => order.id)
|
edit_group_order_path(group_order, :order_id => order.id)
|
||||||
else
|
else
|
||||||
new_group_order_path(:order_id => order.id)
|
new_group_order_path(:order_id => order.id)
|
||||||
end
|
end
|
||||||
link_to order.name, path
|
link_to order.name, path, options
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return css class names for order result table
|
# Return css class names for order result table
|
||||||
|
|
||||||
def order_article_class_name(quantity, tolerance, result)
|
def order_article_class_name(quantity, tolerance, result)
|
||||||
if (quantity + tolerance > 0)
|
if (quantity + tolerance > 0)
|
||||||
result > 0 ? 'success' : 'failed'
|
result > 0 ? 'success' : 'failed'
|
||||||
|
|
|
@ -26,14 +26,17 @@ class GroupOrder < ActiveRecord::Base
|
||||||
# Group has already ordered, so get the results...
|
# Group has already ordered, so get the results...
|
||||||
goas = {}
|
goas = {}
|
||||||
group_order_articles.all.each do |goa|
|
group_order_articles.all.each do |goa|
|
||||||
goas[goa.order_article_id] = {:quantity => goa.quantity,
|
goas[goa.order_article_id] = {
|
||||||
|
:quantity => goa.quantity,
|
||||||
:tolerance => goa.tolerance,
|
:tolerance => goa.tolerance,
|
||||||
:quantity_result => goa.result(:quantity),
|
:quantity_result => goa.result(:quantity),
|
||||||
:tolerance_result => goa.result(:tolerance)}
|
:tolerance_result => goa.result(:tolerance),
|
||||||
|
:total_price => goa.total_price
|
||||||
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# load prices ....
|
# load prices and other stuff....
|
||||||
data[:order_articles] = {}
|
data[:order_articles] = {}
|
||||||
order.order_articles.each do |order_article|
|
order.order_articles.each do |order_article|
|
||||||
data[:order_articles][order_article.id] = {
|
data[:order_articles][order_article.id] = {
|
||||||
|
@ -44,7 +47,10 @@ class GroupOrder < ActiveRecord::Base
|
||||||
:used_quantity => (new_record? ? 0 : goas[order_article.id][:quantity_result]),
|
:used_quantity => (new_record? ? 0 : goas[order_article.id][:quantity_result]),
|
||||||
:tolerance => (new_record? ? 0 : goas[order_article.id][:tolerance]),
|
:tolerance => (new_record? ? 0 : goas[order_article.id][:tolerance]),
|
||||||
:others_tolerance => order_article.tolerance - (new_record? ? 0 : goas[order_article.id][:tolerance]),
|
:others_tolerance => order_article.tolerance - (new_record? ? 0 : goas[order_article.id][:tolerance]),
|
||||||
:used_tolerance => (new_record? ? 0 : goas[order_article.id][:tolerance_result])
|
:used_tolerance => (new_record? ? 0 : goas[order_article.id][:tolerance_result]),
|
||||||
|
:total_price => (new_record? ? 0 : goas[order_article.id][:total_price]),
|
||||||
|
:missing_units => order_article.missing_units,
|
||||||
|
:quantity_available => (order.stockit? ? order_article.article.quantity_available : 0)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,13 @@ class OrderArticle < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Units missing for the next full unit_quantity of the article
|
||||||
|
def missing_units
|
||||||
|
units = article.unit_quantity - ((quantity % article.unit_quantity) + tolerance)
|
||||||
|
units = 0 if units < 0
|
||||||
|
units
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def article_and_price_exist
|
def article_and_price_exist
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
<script>
|
|
||||||
//<![CDATA[
|
|
||||||
$(function() {
|
|
||||||
<% for row in data_to_js(@ordering_data) %>
|
|
||||||
addData(<%= row.join(", ") %>);
|
|
||||||
<% end %>
|
|
||||||
setGroupBalance(<%= @ordering_data[:available_funds] %>);
|
|
||||||
|
|
||||||
// localization
|
|
||||||
setDecimalSeparator(",");
|
|
||||||
|
|
||||||
// configuration
|
|
||||||
setToleranceBehaviour(<%= Foodsoft.config[:tolerance_is_costly] %>);
|
|
||||||
|
|
||||||
// initialize javascript
|
|
||||||
updateBalance();
|
|
||||||
|
|
||||||
// show article info on row hover
|
|
||||||
<%#*$$('tbody tr').observer('hover', function() {%>
|
|
||||||
|
|
||||||
<%#*});%>
|
|
||||||
|
|
||||||
});
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
|
@ -1,23 +0,0 @@
|
||||||
#order-footer
|
|
||||||
#info-box
|
|
||||||
#total-sum
|
|
||||||
%table
|
|
||||||
%tr
|
|
||||||
%td Gesamtbetrag:
|
|
||||||
%td.currency
|
|
||||||
%span#total_price= total
|
|
||||||
€
|
|
||||||
%tr
|
|
||||||
%td Verfügbares Guthaben:
|
|
||||||
%td.currency= number_to_currency(@ordering_data[:available_funds])
|
|
||||||
%tr
|
|
||||||
%td Neuer Kontostand:
|
|
||||||
%td.currency
|
|
||||||
%strong
|
|
||||||
%span#new_balance= @ordergroup.account_balance - total
|
|
||||||
€
|
|
||||||
#order-button
|
|
||||||
= submit_tag( "Bestellung speichern", :id => 'submit_button' )
|
|
||||||
oder #{link_to "abbrechen", :controller => 'ordering'}
|
|
||||||
%input#total_balance{:name => "total_balance", :type => "hidden", :value => @ordergroup.account_balance - total}/
|
|
||||||
%input{:name => "version", :type => "hidden", :value => @version}/
|
|
|
@ -1,9 +1,52 @@
|
||||||
- content_for :head do
|
- content_for :head do
|
||||||
= render 'data'
|
:javascript
|
||||||
|
$(function() {
|
||||||
|
#{data_to_js(@ordering_data)}
|
||||||
|
setGroupBalance(#{@ordering_data[:available_funds]});
|
||||||
|
setDecimalSeparator(",");
|
||||||
|
setToleranceBehaviour(#{Foodsoft.config[:tolerance_is_costly]});
|
||||||
|
setStockit(#{@order.stockit?});
|
||||||
|
});
|
||||||
|
|
||||||
= render :partial => 'order_head'
|
- title "Bestellen"
|
||||||
|
|
||||||
- form_for @group_order do |f|
|
.left_column{:style => "width:49em"}
|
||||||
|
.box_title
|
||||||
|
%h2=h @order.name
|
||||||
|
.column_content
|
||||||
|
%table
|
||||||
|
%tr{:valign => "top"}
|
||||||
|
%td{:width => "60%"}
|
||||||
|
%p
|
||||||
|
%b Lieferantin:
|
||||||
|
=h @order.name
|
||||||
|
%p
|
||||||
|
%b Ende:
|
||||||
|
=h format_time(@order.ends)
|
||||||
|
- if @group_order && @group_order.updated_by
|
||||||
|
%p
|
||||||
|
%b Zuletzt bestellt:
|
||||||
|
=h @group_order.updated_by.nick if @group_order.updated_by
|
||||||
|
= "(#{format_time(@group_order.updated_on)})"
|
||||||
|
%p
|
||||||
|
%b Verfügbares Guthaben:
|
||||||
|
= number_to_currency(@ordering_data[:available_funds])
|
||||||
|
%td
|
||||||
|
- unless @order.note.empty?
|
||||||
|
%p
|
||||||
|
%b Notiz:
|
||||||
|
= simple_format(@order.note)
|
||||||
|
- unless @order.stockit? || @order.supplier.min_order_quantity.blank?
|
||||||
|
%p
|
||||||
|
%b Mindestellmenge:
|
||||||
|
=h @order.supplier.min_order_quantity
|
||||||
|
%p
|
||||||
|
%b Gesamtbestellmenge bisher:
|
||||||
|
= number_to_currency @order.sum
|
||||||
|
|
||||||
|
= render :partial => 'switch_order', :locals => {:current_order => @order}
|
||||||
|
|
||||||
|
= form_for @group_order do |f|
|
||||||
= f.hidden_field :lock_version
|
= f.hidden_field :lock_version
|
||||||
= f.hidden_field :order_id
|
= f.hidden_field :order_id
|
||||||
= f.hidden_field :updated_by_user_id
|
= f.hidden_field :updated_by_user_id
|
||||||
|
@ -19,36 +62,32 @@
|
||||||
%th{:style => "width:13px;"}
|
%th{:style => "width:13px;"}
|
||||||
%th{:style => "width:4.5em;"} Preis
|
%th{:style => "width:4.5em;"} Preis
|
||||||
%th{:style => "width:4.5em;"} Einheit
|
%th{:style => "width:4.5em;"} Einheit
|
||||||
|
- unless @order.stockit?
|
||||||
%th{:style => "width:70px;"} Fehlende Einheiten
|
%th{:style => "width:70px;"} Fehlende Einheiten
|
||||||
%th#col_required Menge
|
%th#col_required Menge
|
||||||
- if not @order.stockit?
|
|
||||||
%th#col_tolerance Toleranz
|
%th#col_tolerance Toleranz
|
||||||
|
- else
|
||||||
|
%th(style="width:20px") Verfügbar
|
||||||
|
%th#col_required Menge
|
||||||
%th{:style => "width:15px;"} Summe
|
%th{:style => "width:15px;"} Summe
|
||||||
%tbody
|
%tbody
|
||||||
- total = 0
|
|
||||||
- @order.articles_grouped_by_category.each do |category, order_articles|
|
- @order.articles_grouped_by_category.each do |category, order_articles|
|
||||||
%tr{:style => "background-color:#EFEFEF"}
|
%tr{:style => "background-color:#EFEFEF"}
|
||||||
%td{:style => "text-align:left"}
|
%td{:style => "text-align:left"}
|
||||||
%b= h category
|
%b= h category
|
||||||
%td{:colspan => "9"}
|
%td{:colspan => "9"}
|
||||||
- order_articles.each do |order_article|
|
- order_articles.each do |order_article|
|
||||||
- if Foodsoft.config[:tolerance_is_costly]
|
|
||||||
- article_total = @ordering_data[:order_articles][order_article.id][:price] * (@ordering_data[:order_articles][order_article.id][:tolerance] + @ordering_data[:order_articles][order_article.id][:quantity])
|
|
||||||
- else
|
|
||||||
- article_total = @ordering_data[:order_articles][order_article.id][:price] * @ordering_data[:order_articles][order_article.id][:quantity]
|
|
||||||
- total += article_total
|
|
||||||
%tr{:class => "#{cycle('even', 'odd', :name => 'articles')} order-article", :valign => "top"}
|
%tr{:class => "#{cycle('even', 'odd', :name => 'articles')} order-article", :valign => "top"}
|
||||||
%td.name= order_article.article.name
|
%td.name= order_article.article.name
|
||||||
%td= h order_article.article.origin
|
%td= h order_article.article.origin
|
||||||
%td= number_to_currency(@ordering_data[:order_articles][order_article.id][:price])
|
%td= number_to_currency(@ordering_data[:order_articles][order_article.id][:price])
|
||||||
%td= order_article.article.unit
|
%td= order_article.article.unit
|
||||||
%td
|
%td
|
||||||
%span{:id => "missing_units_#{order_article.id}"}
|
|
||||||
- if @order.stockit?
|
- if @order.stockit?
|
||||||
- order_article.article.quantity_available
|
= @ordering_data[:order_articles][order_article.id][:quantity_available]
|
||||||
- else
|
- else
|
||||||
- missing_units = @ordering_data[:order_articles][order_article.id][:unit] - (((@ordering_data[:order_articles][order_article.id][:quantity] + @ordering_data[:order_articles][order_article.id][:others_quantity]) % @ordering_data[:order_articles][order_article.id][:unit]) + @ordering_data[:order_articles][order_article.id][:tolerance] + @ordering_data[:order_articles][order_article.id][:others_tolerance])
|
%span{:id => "missing_units_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:missing_units]
|
||||||
- missing_units < 0 ? 0 : missing_units
|
|
||||||
%td.quantity
|
%td.quantity
|
||||||
%input{:id => "q_#{order_article.id}", :name => "group_order[group_order_articles_attributes][#{order_article.id}][quantity]", :size => "2", :type => "hidden", :value => @ordering_data[:order_articles][order_article.id][:quantity]}/
|
%input{:id => "q_#{order_article.id}", :name => "group_order[group_order_articles_attributes][#{order_article.id}][quantity]", :size => "2", :type => "hidden", :value => @ordering_data[:order_articles][order_article.id][:quantity]}/
|
||||||
%span.used{:id => "q_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_quantity]
|
%span.used{:id => "q_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_quantity]
|
||||||
|
@ -56,8 +95,8 @@
|
||||||
%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]
|
%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]
|
||||||
%input{:type => 'button', :value => '+', 'data-increase_quantity' => order_article.id}
|
%input{:type => 'button', :value => '+', 'data-increase_quantity' => order_article.id}
|
||||||
%input{:type => 'button', :value => '-', 'data-decrease_quantity' => order_article.id}
|
%input{:type => 'button', :value => '-', 'data-decrease_quantity' => order_article.id}
|
||||||
- unless @order.stockit?
|
|
||||||
%td.tolerance
|
%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]", :size => "2", :type => "hidden", :value => @ordering_data[:order_articles][order_article.id][:tolerance]}/
|
%input{:id => "t_#{order_article.id}", :name => "group_order[group_order_articles_attributes][#{order_article.id}][tolerance]", :size => "2", :type => "hidden", :value => @ordering_data[:order_articles][order_article.id][:tolerance]}/
|
||||||
- if (@ordering_data[:order_articles][order_article.id][:unit] > 1)
|
- 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.used{:id => "t_used_#{order_article.id}"}= @ordering_data[:order_articles][order_article.id][:used_tolerance]
|
||||||
|
@ -65,8 +104,9 @@
|
||||||
%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]
|
%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]
|
||||||
%input{:type => 'button', :value => '+', 'data-increase_tolerance' => order_article.id}
|
%input{:type => 'button', :value => '+', 'data-increase_tolerance' => order_article.id}
|
||||||
%input{:type => 'button', :value => '-', 'data-decrease_tolerance' => order_article.id}
|
%input{:type => 'button', :value => '-', 'data-decrease_tolerance' => order_article.id}
|
||||||
|
|
||||||
%td{:id => "td_price_#{order_article.id}", :style => "text-align:right; padding-right:10px; width:4em"}
|
%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(article_total, :unit => "")
|
%span{:id => "price_#{order_article.id}_display"}= number_to_currency(@ordering_data[:order_articles][order_article.id][:total_price], :unit => "")
|
||||||
€
|
€
|
||||||
.article-info
|
.article-info
|
||||||
%h3= order_article.article.name
|
%h3= order_article.article.name
|
||||||
|
@ -87,4 +127,26 @@
|
||||||
%br/
|
%br/
|
||||||
Notiz: #{order_article.article.note}
|
Notiz: #{order_article.article.note}
|
||||||
%br/
|
%br/
|
||||||
= render "footer", :total => total
|
#order-footer
|
||||||
|
#info-box
|
||||||
|
#total-sum
|
||||||
|
%table
|
||||||
|
%tr
|
||||||
|
%td Gesamtbetrag:
|
||||||
|
%td.currency
|
||||||
|
%span#total_price= @group_order.price
|
||||||
|
€
|
||||||
|
%tr
|
||||||
|
%td Verfügbares Guthaben:
|
||||||
|
%td.currency= number_to_currency(@ordering_data[:available_funds])
|
||||||
|
%tr
|
||||||
|
%td Neuer Kontostand:
|
||||||
|
%td.currency
|
||||||
|
%strong
|
||||||
|
%span#new_balance= @ordergroup.account_balance - @group_order.price
|
||||||
|
€
|
||||||
|
#order-button
|
||||||
|
= submit_tag( "Bestellung speichern", :id => 'submit_button' )
|
||||||
|
oder #{link_to "abbrechen", :controller => 'ordering'}
|
||||||
|
%input#total_balance{:name => "total_balance", :type => "hidden", :value => @ordergroup.account_balance - @group_order.price}/
|
||||||
|
%input{:name => "version", :type => "hidden", :value => @version}/
|
|
@ -1,25 +0,0 @@
|
||||||
<div id="order-footer">
|
|
||||||
<div id="info-box">
|
|
||||||
</div>
|
|
||||||
<div id="total-sum">
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Gesamtbetrag:</td>
|
|
||||||
<td class="currency"><span id="total_price"><%= total %></span> €</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Verfügbares Guthaben:</td>
|
|
||||||
<td class="currency"><%= number_to_currency(@availableFunds) %></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Neuer Kontostand:</td>
|
|
||||||
<td class="currency"><strong><span id="new_balance"><%= @ordergroup.account_balance - total %></span> €</strong></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<div id="order-button">
|
|
||||||
<%= submit_tag( "Bestellung speichern", :id => 'submit_button' ) %></span> oder <%= link_to "abbrechen", :controller => 'ordering' %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<input type="hidden" id="total_balance" name="total_balance" value="<%= @ordergroup.account_balance - total %>"/>
|
|
||||||
<input type="hidden" name="version" value="<%= @version %>"/>
|
|
|
@ -1,48 +0,0 @@
|
||||||
- title "Bestellen"
|
|
||||||
|
|
||||||
.left_column{:style => "width:49em"}
|
|
||||||
.box_title
|
|
||||||
%h2=h @order.name
|
|
||||||
.column_content
|
|
||||||
%table
|
|
||||||
%tr{:valign => "top"}
|
|
||||||
%td{:width => "60%"}
|
|
||||||
%p
|
|
||||||
%b Lieferantin:
|
|
||||||
=h @order.name
|
|
||||||
%p
|
|
||||||
%b Ende:
|
|
||||||
=h format_time(@order.ends)
|
|
||||||
- if @group_order && @group_order.updated_by
|
|
||||||
%p
|
|
||||||
%b Zuletzt bestellt:
|
|
||||||
=h @group_order.updated_by.nick if @group_order.updated_by
|
|
||||||
= "(#{format_time(@group_order.updated_on)})"
|
|
||||||
%p
|
|
||||||
%b Verfügbares Guthaben:
|
|
||||||
= number_to_currency(@ordering_data[:available_funds])
|
|
||||||
%td
|
|
||||||
- unless @order.note.empty?
|
|
||||||
%p
|
|
||||||
%b Notiz:
|
|
||||||
= simple_format(@order.note)
|
|
||||||
- unless @order.stockit? || @order.supplier.min_order_quantity.blank?
|
|
||||||
%p
|
|
||||||
%b Mindestellmenge:
|
|
||||||
=h @order.supplier.min_order_quantity
|
|
||||||
%p
|
|
||||||
%b Gesamtbestellmenge bisher:
|
|
||||||
= number_to_currency @order.sum
|
|
||||||
|
|
||||||
- orders = Order.open.reject{ |order| order == @order }
|
|
||||||
- unless orders.empty?
|
|
||||||
.right_column{:style => "width:22em"}
|
|
||||||
.box_title
|
|
||||||
%h2 Anderer Bestellungen
|
|
||||||
.column_content
|
|
||||||
%table
|
|
||||||
- for order in orders
|
|
||||||
%tr
|
|
||||||
%td
|
|
||||||
= link_to_function order.name, "if (confirmSwitchOrder()) (window.location = '#{ url_for(:action => 'order', :id => order) }' )"
|
|
||||||
%td= "noch #{time_ago_in_words(order.ends)}" if order.ends
|
|
12
app/views/ordering/_switch_order.html.haml
Normal file
12
app/views/ordering/_switch_order.html.haml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
- orders = Order.open.reject{ |order| order == current_order }
|
||||||
|
- unless orders.empty?
|
||||||
|
.right_column{:style => "width:22em"}
|
||||||
|
.box_title
|
||||||
|
%h2 Laufende Bestellungen
|
||||||
|
.column_content
|
||||||
|
%table
|
||||||
|
- for order in orders
|
||||||
|
%tr
|
||||||
|
%td
|
||||||
|
= link_to_ordering(order, 'data-confirm_switch_order' => true)
|
||||||
|
%td= "noch #{time_ago_in_words(order.ends)}" if order.ends
|
|
@ -35,16 +35,7 @@
|
||||||
= "Abgerechnet von #{@order.updated_by.nick}"
|
= "Abgerechnet von #{@order.updated_by.nick}"
|
||||||
= link_to "Kommentare lesen/schreiben", "#comments"
|
= link_to "Kommentare lesen/schreiben", "#comments"
|
||||||
|
|
||||||
// directly switch to active orders
|
= render :partial => "switch_order", :locals => {:current_order => @order}
|
||||||
.right_column{:style => "width:23em;"}
|
|
||||||
.box_title
|
|
||||||
%h2 Laufende Bestellungen
|
|
||||||
.column_content
|
|
||||||
%table
|
|
||||||
- for order in Order.open
|
|
||||||
%tr
|
|
||||||
%td= link_to_ordering(order)
|
|
||||||
%td= "("+ time_ago_in_words(order.ends) + ")" if order.ends
|
|
||||||
|
|
||||||
// Article box
|
// Article box
|
||||||
.single_column{:style => "clear:both; width:70em;"}
|
.single_column{:style => "clear:both; width:70em;"}
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
= render :partial => 'order_head'
|
|
||||||
|
|
||||||
.single_column{:style => 'clear:both;margin-bottom:7em;'}
|
|
||||||
- form_tag(:action => 'saveOrder', :id => @order) do
|
|
||||||
.box_title
|
|
||||||
%h2 Anderer Bestellungen
|
|
||||||
.column_content
|
|
||||||
%table#order.list
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th Name
|
|
||||||
%th
|
|
||||||
%th Lieferantin
|
|
||||||
%th{:style => "width:5em;"} Einheit
|
|
||||||
%th{:style => "width:4.5em;"} Preis
|
|
||||||
%th(style="width:20px") Verfügbar
|
|
||||||
%th#col_required(style="width:110px") Menge
|
|
||||||
%th Summe
|
|
||||||
%tbody
|
|
||||||
- total = 0
|
|
||||||
- i = 0
|
|
||||||
- for category_name, order_articles in @articles_grouped_by_category
|
|
||||||
%tr{:style => "background-color:#EFEFEF"}
|
|
||||||
%td{:style => "text-align:left"}
|
|
||||||
%b=h category_name
|
|
||||||
%td{:colspan => "9"}
|
|
||||||
- for order_article in order_articles
|
|
||||||
- article_total = @price[i] * @quantity[i]
|
|
||||||
- total += article_total
|
|
||||||
%tr{:class => cycle('even', 'odd', :name => 'articles')+' order-article', :valign => "top"}
|
|
||||||
%td.name= order_article.article.name
|
|
||||||
%td=h order_article.article.origin
|
|
||||||
%td=h truncate order_article.article.supplier.name, :length => 11
|
|
||||||
%td=h order_article.article.unit
|
|
||||||
%td= number_to_currency @price[i]
|
|
||||||
%td= @quantity_available[i]
|
|
||||||
%td{:style => "text-align:right;"}
|
|
||||||
= hidden_field_tag "ordered[#{order_article.id}][quantity]", @quantity[i], :id => "q_#{i}", :size => "2"
|
|
||||||
%span.used{:id => "q_used_#{i}"}= @used_quantity[i]
|
|
||||||
= button_to_function('+', "increaseStockQuantity(#{i})")
|
|
||||||
= button_to_function('-', "decreaseStockQuantity(#{i})")
|
|
||||||
|
|
||||||
%td{:id => "td_price_#{i}", :style => "text-align:right; padding-right:10px; width:4em"}
|
|
||||||
%span{:id => "price_#{i}_display"}= number_to_currency(article_total, :unit => "")
|
|
||||||
€
|
|
||||||
.article-info
|
|
||||||
%h3= order_article.article.name
|
|
||||||
.right
|
|
||||||
Gesamt-Einheiten:
|
|
||||||
%span{:id => "q_total_#{i}"}= @quantity[i] + @others_quantity[i]
|
|
||||||
%br/
|
|
||||||
.left
|
|
||||||
Hersteller:
|
|
||||||
= order_article.article.manufacturer
|
|
||||||
%br/
|
|
||||||
Gebinde:
|
|
||||||
= order_article.article.quantity_available
|
|
||||||
*
|
|
||||||
= order_article.article.unit
|
|
||||||
%br/
|
|
||||||
Notiz:
|
|
||||||
= order_article.article.note
|
|
||||||
%br/
|
|
||||||
- i = i + 1
|
|
||||||
= render "order_footer", :total => total
|
|
||||||
|
|
||||||
%script{:type => "text/" + "javascript"}
|
|
||||||
// preset data
|
|
||||||
- for i in 0...@price.size
|
|
||||||
= "addData(#{@price[i]}, 1, #{@price[i] * @quantity[i]}, #{@others_quantity[i]}, 0, #{@used_quantity[i]}, #{@quantity_available[i]});"
|
|
||||||
= "setGroupBalance(#{@availableFunds});"
|
|
||||||
// localization
|
|
||||||
setDecimalSeparator(",");
|
|
||||||
// initialize javascript
|
|
||||||
updateBalance();
|
|
|
@ -1,7 +1,7 @@
|
||||||
= simple_form_for @order do |f|
|
= simple_form_for @order do |f|
|
||||||
.single_column
|
.single_column
|
||||||
.box_title
|
.box_title
|
||||||
%h2 Bestellung für #{@order.supplier.name}
|
%h2 Bestellung für #{@order.name}
|
||||||
.column_content
|
.column_content
|
||||||
= f.hidden_field :supplier_id
|
= f.hidden_field :supplier_id
|
||||||
= f.input :note
|
= f.input :note
|
||||||
|
@ -40,9 +40,9 @@
|
||||||
/ check if the article is selected
|
/ check if the article is selected
|
||||||
- included = @order.order_articles.detect { |order_article| order_article.article_id == article.id }
|
- included = @order.order_articles.detect { |order_article| order_article.article_id == article.id }
|
||||||
- included_class = included ? ' selected' : ''
|
- included_class = included ? ' selected' : ''
|
||||||
%tr{:class => cycle('even', 'odd') + ' click-me' + included_class, :id => article.id.to_s, :onclick => "checkRow('#{article.id}')"}
|
%tr{:class => cycle('even', 'odd') + included_class, :id => article.id.to_s }
|
||||||
%td= check_box_tag "order[article_ids][]", article.id, included, { :id => "checkbox_#{article.id}", :onclick => "checkRow('#{article.id}')" }
|
%td= check_box_tag "order[article_ids][]", article.id, included, :id => "checkbox_#{article.id}"
|
||||||
%td=h article.name
|
%td.click-me{'data-check-this' => "#checkbox_#{article.id}"}= article.name
|
||||||
%td=h truncate article.note, :length => 25
|
%td=h truncate article.note, :length => 25
|
||||||
- if @order.stockit?
|
- if @order.stockit?
|
||||||
%td= "#{article.quantity_available} * #{article.unit}"
|
%td= "#{article.quantity_available} * #{article.unit}"
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
- title "Neue Bestellung anlegen"
|
- title "Neue Bestellung anlegen"
|
||||||
|
|
||||||
= render :partial => 'form', :locals => { :f => f }
|
= render :partial => 'form'
|
||||||
|
|
|
@ -9,6 +9,7 @@ var modified = false // indicates if anything has been clicked on this page
|
||||||
var groupBalance = 0; // available group money
|
var groupBalance = 0; // available group money
|
||||||
var decimalSeparator = "."; // default decimal separator
|
var decimalSeparator = "."; // default decimal separator
|
||||||
var toleranceIsCostly = true; // default tolerance behaviour
|
var toleranceIsCostly = true; // default tolerance behaviour
|
||||||
|
var isStockit = false; // Wheter the order is from stock oder normal supplier
|
||||||
|
|
||||||
// Article data arrays:
|
// Article data arrays:
|
||||||
var price = new Array();
|
var price = new Array();
|
||||||
|
@ -27,12 +28,16 @@ function setToleranceBehaviour(value) {
|
||||||
toleranceIsCostly = value;
|
toleranceIsCostly = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setStockit(value) {
|
||||||
|
isStockit = value;
|
||||||
|
}
|
||||||
|
|
||||||
function setGroupBalance(amount) {
|
function setGroupBalance(amount) {
|
||||||
groupBalance = amount;
|
groupBalance = amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addData(orderArticleId, itemPrice, itemUnit, itemSubtotal, itemQuantityOthers, itemToleranceOthers, allocated, available) {
|
function addData(orderArticleId, itemPrice, itemUnit, itemSubtotal, itemQuantityOthers, itemToleranceOthers, allocated, available) {
|
||||||
i = orderArticleId;
|
var i = orderArticleId;
|
||||||
price[i] = itemPrice;
|
price[i] = itemPrice;
|
||||||
unit[i] = itemUnit;
|
unit[i] = itemUnit;
|
||||||
itemTotal[i] = itemSubtotal;
|
itemTotal[i] = itemSubtotal;
|
||||||
|
@ -43,24 +48,26 @@ function addData(orderArticleId, itemPrice, itemUnit, itemSubtotal, itemQuantity
|
||||||
}
|
}
|
||||||
|
|
||||||
function increaseQuantity(item) {
|
function increaseQuantity(item) {
|
||||||
value = Number($('#q_' + item).val()) + 1;
|
var value = Number($('#q_' + item).val()) + 1;
|
||||||
|
if (!isStockit || (value <= (quantityAvailable[item] - quantityOthers[item]))) {
|
||||||
update(item, value, $('#t_' + item).val());
|
update(item, value, $('#t_' + item).val());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function decreaseQuantity(item) {
|
function decreaseQuantity(item) {
|
||||||
value = Number($('#q_' + item).val()) - 1;
|
var value = Number($('#q_' + item).val()) - 1;
|
||||||
if (value >= 0) {
|
if (value >= 0) {
|
||||||
update(item, value, $('#t_' + item).val());
|
update(item, value, $('#t_' + item).val());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function increaseTolerance(item) {
|
function increaseTolerance(item) {
|
||||||
value = Number($('#t_' + item).val()) + 1;
|
var value = Number($('#t_' + item).val()) + 1;
|
||||||
update(item, $('#q_' + item).val(), value);
|
update(item, $('#q_' + item).val(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function decreaseTolerance(item) {
|
function decreaseTolerance(item) {
|
||||||
value = Number($('#t_' + item).val()) - 1;
|
var value = Number($('#t_' + item).val()) - 1;
|
||||||
if (value >= 0) {
|
if (value >= 0) {
|
||||||
update(item, $('#q_' + item).val(), value);
|
update(item, $('#q_' + item).val(), value);
|
||||||
}
|
}
|
||||||
|
@ -75,7 +82,7 @@ function update(item, quantity, tolerance) {
|
||||||
$('#t_' + item).val(tolerance);
|
$('#t_' + item).val(tolerance);
|
||||||
|
|
||||||
// calculate how many units would be ordered in total
|
// calculate how many units would be ordered in total
|
||||||
units = calcUnits(unit[item], quantityOthers[item] + Number(quantity), toleranceOthers[item] + Number(tolerance));
|
var units = calcUnits(unit[item], quantityOthers[item] + Number(quantity), toleranceOthers[item] + Number(tolerance));
|
||||||
if (unitCompletedFromTolerance(unit[item], quantityOthers[item] + Number(quantity), toleranceOthers[item] + Number(tolerance))) {
|
if (unitCompletedFromTolerance(unit[item], quantityOthers[item] + Number(quantity), toleranceOthers[item] + Number(tolerance))) {
|
||||||
$('#units_' + item).html('<span style=\"color:grey\">' + String(units) + '</span>');
|
$('#units_' + item).html('<span style=\"color:grey\">' + String(units) + '</span>');
|
||||||
} else {
|
} else {
|
||||||
|
@ -83,8 +90,8 @@ function update(item, quantity, tolerance) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// update used/unused quantity
|
// update used/unused quantity
|
||||||
available = Math.max(0, units * unit[item] - quantityOthers[item]);
|
var available = Math.max(0, units * unit[item] - quantityOthers[item]);
|
||||||
q_used = Math.min(available, quantity);
|
var q_used = Math.min(available, quantity);
|
||||||
// ensure that at least the amout of items this group has already been allocated is used
|
// ensure that at least the amout of items this group has already been allocated is used
|
||||||
if (quantity >= itemsAllocated[item] && q_used < itemsAllocated[item]) {
|
if (quantity >= itemsAllocated[item] && q_used < itemsAllocated[item]) {
|
||||||
q_used = itemsAllocated[item];
|
q_used = itemsAllocated[item];
|
||||||
|
@ -111,7 +118,7 @@ function update(item, quantity, tolerance) {
|
||||||
$('#price_' + item + '_display').html(asMoney(itemTotal[item]));
|
$('#price_' + item + '_display').html(asMoney(itemTotal[item]));
|
||||||
|
|
||||||
// update missing units
|
// update missing units
|
||||||
missing_units = unit[item] - (((quantityOthers[item] + Number(quantity)) % unit[item]) + Number(tolerance) + toleranceOthers[item])
|
var missing_units = unit[item] - (((quantityOthers[item] + Number(quantity)) % unit[item]) + Number(tolerance) + toleranceOthers[item])
|
||||||
if (missing_units < 0) {
|
if (missing_units < 0) {
|
||||||
missing_units = 0;
|
missing_units = 0;
|
||||||
}
|
}
|
||||||
|
@ -121,77 +128,37 @@ function update(item, quantity, tolerance) {
|
||||||
updateBalance();
|
updateBalance();
|
||||||
}
|
}
|
||||||
|
|
||||||
function increaseStockQuantity(item) {
|
|
||||||
value = Number($('#q_' + item).val()) + 1;
|
|
||||||
if (value <= quantityAvailable[item] - quantityOthers[item]) {
|
|
||||||
updateStockQuantity(item, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function decreaseStockQuantity(item) {
|
|
||||||
value = Number($('#q_' + item).val()) - 1;
|
|
||||||
if (value >= 0) {
|
|
||||||
updateStockQuantity(item, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateStockQuantity(item, quantity) {
|
|
||||||
// set modification flag
|
|
||||||
modified = true
|
|
||||||
|
|
||||||
// update hidden input fields
|
|
||||||
$('#q_' + item).val(quantity);
|
|
||||||
|
|
||||||
// update used/unused quantity
|
|
||||||
available = Math.max(0, quantityAvailable[item] - quantityOthers[item]);
|
|
||||||
q_used = Math.min(available, quantity);
|
|
||||||
|
|
||||||
// ensure that at least the amout of items this group has already been allocated is used
|
|
||||||
if (quantity >= itemsAllocated[item] && q_used < itemsAllocated[item]) {
|
|
||||||
q_used = itemsAllocated[item];
|
|
||||||
}
|
|
||||||
$('#q_used_' + item).html(String(q_used));
|
|
||||||
$('#q_total_' + item).html(String(Number(quantity) + quantityOthers[item]));
|
|
||||||
|
|
||||||
// update total price
|
|
||||||
itemTotal[item] = price[item] * (Number(quantity));
|
|
||||||
$('#price_' + item + '_display').html(asMoney(itemTotal[item]));
|
|
||||||
|
|
||||||
// update balance
|
|
||||||
updateBalance();
|
|
||||||
}
|
|
||||||
|
|
||||||
function asMoney(amount) {
|
function asMoney(amount) {
|
||||||
return String(amount.toFixed(2)).replace(/\./, ",");
|
return String(amount.toFixed(2)).replace(/\./, ",");
|
||||||
}
|
}
|
||||||
|
|
||||||
function calcUnits(unitSize, quantity, tolerance) {
|
function calcUnits(unitSize, quantity, tolerance) {
|
||||||
units = Math.floor(quantity / unitSize)
|
var units = Math.floor(quantity / unitSize)
|
||||||
remainder = quantity % unitSize
|
var remainder = quantity % unitSize
|
||||||
return units + ((remainder > 0) && (remainder + tolerance >= unitSize) ? 1 : 0)
|
return units + ((remainder > 0) && (remainder + tolerance >= unitSize) ? 1 : 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
function unitCompletedFromTolerance(unitSize, quantity, tolerance) {
|
function unitCompletedFromTolerance(unitSize, quantity, tolerance) {
|
||||||
remainder = quantity % unitSize
|
var remainder = quantity % unitSize
|
||||||
return (remainder > 0 && (remainder + tolerance >= unitSize));
|
return (remainder > 0 && (remainder + tolerance >= unitSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateBalance() {
|
function updateBalance() {
|
||||||
// update total price and order balance
|
// update total price and order balance
|
||||||
total = 0;
|
var total = 0;
|
||||||
for (i in itemTotal) {
|
for (i in itemTotal) {
|
||||||
total += itemTotal[i];
|
total += itemTotal[i];
|
||||||
}
|
}
|
||||||
$('#total_price').html(asMoney(total));
|
$('#total_price').html(asMoney(total));
|
||||||
balance = groupBalance - total;
|
var balance = groupBalance - total;
|
||||||
$('#new_balance').html(asMoney(balance));
|
$('#new_balance').html(asMoney(balance));
|
||||||
$('#total_balance').val(asMoney(balance));
|
$('#total_balance').val(asMoney(balance));
|
||||||
// determine bgcolor and submit button state according to balance
|
// determine bgcolor and submit button state according to balance
|
||||||
|
var bgcolor = '';
|
||||||
if (balance < 0) {
|
if (balance < 0) {
|
||||||
bgcolor = '#FF0000';
|
bgcolor = '#FF0000';
|
||||||
$('#submit_button').disabled = true;
|
$('#submit_button').disabled = true;
|
||||||
} else {
|
} else {
|
||||||
bgcolor = '';
|
|
||||||
$('#submit_button').disabled = false;
|
$('#submit_button').disabled = false;
|
||||||
}
|
}
|
||||||
// update bgcolor
|
// update bgcolor
|
||||||
|
@ -200,21 +167,21 @@ function updateBalance() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function confirmSwitchOrder() {
|
|
||||||
return (!modified || confirm('Änderungen an dieser Bestellung gehen verloren, wenn zu einer anderen Bestellung gewechselt wird.'))
|
|
||||||
}
|
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$('input[data-increase_quantity]').click(function() {
|
$('input[data-increase_quantity]').click(function() {
|
||||||
increaseQuantity($(this).data('increase_quantity'));
|
increaseQuantity($(this).data('increase_quantity'));
|
||||||
})
|
});
|
||||||
$('input[data-decrease_quantity]').click(function() {
|
$('input[data-decrease_quantity]').click(function() {
|
||||||
decreaseQuantity($(this).data('decrease_quantity'));
|
decreaseQuantity($(this).data('decrease_quantity'));
|
||||||
})
|
});
|
||||||
$('input[data-increase_tolerance]').click(function() {
|
$('input[data-increase_tolerance]').click(function() {
|
||||||
increaseTolerance($(this).data('increase_tolerance'));
|
increaseTolerance($(this).data('increase_tolerance'));
|
||||||
})
|
});
|
||||||
$('input[data-decrease_tolerance]').click(function() {
|
$('input[data-decrease_tolerance]').click(function() {
|
||||||
decreaseTolerance($(this).data('decrease_tolerance'));
|
decreaseTolerance($(this).data('decrease_tolerance'));
|
||||||
})
|
});
|
||||||
})
|
|
||||||
|
$('a[data-confirm_switch_order]').click(function() {
|
||||||
|
return (!modified || confirm('Änderungen an dieser Bestellung gehen verloren, wenn zu einer anderen Bestellung gewechselt wird. Möchtest Du trotzdem wechseln?'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -77,7 +77,7 @@ option {
|
||||||
border-top: 1px solid #d7d7d7;
|
border-top: 1px solid #d7d7d7;
|
||||||
margin: 0.2em 0; }
|
margin: 0.2em 0; }
|
||||||
|
|
||||||
span.click-me {
|
.click-me {
|
||||||
cursor: pointer; }
|
cursor: pointer; }
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
|
@ -245,8 +245,6 @@ table {
|
||||||
color: green; }
|
color: green; }
|
||||||
table tr.selected, table tr.active {
|
table tr.selected, table tr.active {
|
||||||
background-color: #ffffc2; }
|
background-color: #ffffc2; }
|
||||||
table tr.click-me {
|
|
||||||
cursor: pointer; }
|
|
||||||
table tr.ignored {
|
table tr.ignored {
|
||||||
color: grey; }
|
color: grey; }
|
||||||
table tr.success {
|
table tr.success {
|
||||||
|
@ -400,7 +398,7 @@ table#order {
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 3px;
|
||||||
padding: 0; }
|
padding: 0; }
|
||||||
table#order th#col_required, table#order th#col_tolerance {
|
table#order th#col_required, table#order th#col_tolerance {
|
||||||
width: 140px; }
|
width: 145px; }
|
||||||
table#order th#col_packages, table#order th#col_left_units {
|
table#order th#col_packages, table#order th#col_left_units {
|
||||||
width: 50px; }
|
width: 50px; }
|
||||||
table#order td.quantity, table#order td.tolerance {
|
table#order td.quantity, table#order td.tolerance {
|
||||||
|
|
|
@ -88,7 +88,7 @@ option
|
||||||
border-top: 1px solid #D7D7D7
|
border-top: 1px solid #D7D7D7
|
||||||
margin: .2em 0
|
margin: .2em 0
|
||||||
|
|
||||||
span.click-me
|
.click-me
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
.left
|
.left
|
||||||
float: left
|
float: left
|
||||||
|
@ -268,8 +268,6 @@ table
|
||||||
:color #008000
|
:color #008000
|
||||||
tr.selected, tr.active
|
tr.selected, tr.active
|
||||||
:background-color #ffffc2
|
:background-color #ffffc2
|
||||||
tr.click-me
|
|
||||||
:cursor pointer
|
|
||||||
tr.ignored
|
tr.ignored
|
||||||
color: grey
|
color: grey
|
||||||
tr.success
|
tr.success
|
||||||
|
@ -439,7 +437,7 @@ table#order
|
||||||
-webkit-border-radius: 3px
|
-webkit-border-radius: 3px
|
||||||
padding: 0
|
padding: 0
|
||||||
th#col_required, th#col_tolerance
|
th#col_required, th#col_tolerance
|
||||||
:width 140px
|
:width 145px
|
||||||
th#col_packages, th#col_left_units
|
th#col_packages, th#col_left_units
|
||||||
:width 50px
|
:width 50px
|
||||||
td.quantity, td.tolerance
|
td.quantity, td.tolerance
|
||||||
|
|
Loading…
Reference in a new issue