First try making tolerance not costly.

A new configuration setting was introduced: tolerance_is_costly
If set to false, article tolerance values do not count for total article price as long as the order is not finished.
This reduces the negative effect on using tolerance for the user.
This commit is contained in:
sandoz 2009-08-02 11:00:57 +02:00
parent c7e37fc7b2
commit 0adce9d54c
4 changed files with 38 additions and 9 deletions

View file

@ -29,13 +29,18 @@ class GroupOrder < ActiveRecord::Base
named_scope :finished, lambda { {:conditions => ["order_id IN (?)", Order.finished_not_closed.collect(&:id)]} } named_scope :finished, lambda { {:conditions => ["order_id IN (?)", Order.finished_not_closed.collect(&:id)]} }
# Updates the "price" attribute. # Updates the "price" attribute.
# This will be the maximum value of an open order or # Until the order is finished this will be the maximum price or
# the value depending of the article results. # the minimum price depending on configuration. When the order is finished it
# will be the value depending of the article results.
def update_price! def update_price!
total = 0 total = 0
for article in group_order_articles.find(:all, :include => :order_article) for article in group_order_articles.find(:all, :include => :order_article)
unless order.finished? unless order.finished?
total += article.order_article.article.fc_price * (article.quantity + article.tolerance) if Foodsoft.config[:tolerance_is_costly]
total += article.order_article.article.fc_price * (article.quantity + article.tolerance)
else
total += article.order_article.article.fc_price * article.quantity
end
else else
total += article.order_article.price.fc_price * article.result total += article.order_article.price.fc_price * article.result
end end

View file

@ -78,7 +78,10 @@
- tolerance = goa.tolerance - tolerance = goa.tolerance
- result = goa.result - result = goa.result
- if @order.open? - if @order.open?
- sub_total = oa.price.fc_price * (quantity + tolerance) - if Foodsoft.config[:tolerance_is_costly]
- sub_total = oa.price.fc_price * (quantity + tolerance)
- else
- sub_total = oa.price.fc_price * quantity
- else - else
- sub_total = oa.price.fc_price * result - sub_total = oa.price.fc_price * result
- else - else

View file

@ -32,9 +32,12 @@
</tr> </tr>
<%- <%-
order_articles.each do |order_article| order_articles.each do |order_article|
article_total = @price[i] * (@tolerance[i] + @quantity[i]); if Foodsoft.config[:tolerance_is_costly]
article_total = @price[i] * (@tolerance[i] + @quantity[i])
else
article_total = @price[i] * @quantity[i]
end
total += article_total total += article_total
-%> -%>
<tr class="<%= cycle('even', 'odd', :name => 'articles') %>" valign="top"> <tr class="<%= cycle('even', 'odd', :name => 'articles') %>" valign="top">
<td class="name"> <td class="name">
@ -107,13 +110,22 @@
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[ //<![CDATA[
// preset data // preset data
<% for i in 0...@price.size -%> <% if Foodsoft.config[:tolerance_is_costly]
for i in 0...@price.size -%>
addData(<%= @price[i] %>, <%= @unit[i] %>, <%= @price[i] * (@tolerance[i] + @quantity[i])%>, <%= @others_quantity[i] %>, <%= @others_tolerance[i] %>, <%= @used_quantity[i] %>, 0); addData(<%= @price[i] %>, <%= @unit[i] %>, <%= @price[i] * (@tolerance[i] + @quantity[i])%>, <%= @others_quantity[i] %>, <%= @others_tolerance[i] %>, <%= @used_quantity[i] %>, 0);
<% end -%> <% end
else
for j in 0...@price.size -%>
addData(<%= @price[j] %>, <%= @unit[j] %>, <%= @price[j] * @quantity[j]%>, <%= @others_quantity[j] %>, <%= @others_tolerance[j] %>, <%= @used_quantity[j] %>, 0);
<% end
end%>
setGroupBalance(<%= @availableFunds %>); setGroupBalance(<%= @availableFunds %>);
// localization // localization
setDecimalSeparator(","); setDecimalSeparator(",");
// configuration
setToleranceBehaviour(<%= Foodsoft.config[:tolerance_is_costly] %>);
// initialize javascript // initialize javascript
updateBalance(); updateBalance();

View file

@ -8,6 +8,7 @@
var modified = false // indicates if anything has been clicked on this page 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
// Article data arrays: // Article data arrays:
var price = new Array(); var price = new Array();
@ -22,6 +23,10 @@ function setDecimalSeparator(character) {
decimalSeparator = character; decimalSeparator = character;
} }
function setToleranceBehaviour(value) {
toleranceIsCostly = value;
}
function setGroupBalance(amount) { function setGroupBalance(amount) {
groupBalance = amount; groupBalance = amount;
} }
@ -98,7 +103,11 @@ function update(item, quantity, tolerance) {
} }
// update total price // update total price
itemTotal[item] = price[item] * (Number(quantity) + Number(tolerance)); if(toleranceIsCostly == true) {
itemTotal[item] = price[item] * (Number(quantity) + Number(tolerance));
} else {
itemTotal[item] = price[item] * (Number(quantity));
}
$('price_' + item + '_display').update(asMoney(itemTotal[item])); $('price_' + item + '_display').update(asMoney(itemTotal[item]));
// update balance // update balance