----------------------------------------
You can have automatic sales price calculation for items that do not have any prices in Sales Prices entered. This works
-independently from Base Price factor, but if Base Price is set it works together with it.
+independently from the Base Price List setting, but if the factor is set in the other Sales Type Lists it works together with them.
Preparing and operation
-----------------------
Go into Setup tab - Company Setup.
+In the field, Base for auto price calculation, set a Base Price List.
In the field, Add Price from Std cost, enter the % that you want to increase from the average standard costs for the items not
listed in the Item Price List. If this value is empty there are no automatic price calculations. BE aware that an increase value of 0 will
calculate the price to be the same as the Std cost. So to remove the calculation, just empty the field. It will then get an internal value of -1.
$factor = $myrow['factor'];
}
- $sql = "SELECT price
- FROM ".TB_PREF."prices
- WHERE stock_id = '" . $stock_id . "' "
- ." AND sales_type_id = " . $sales_type_id
- ." AND curr_abrev = '$currency'";
-
- $msg = "There was a problem retrieving the pricing information for the part $stock_id for customer";
- $result = db_query($sql, $msg);
-
$add_pct = get_company_pref('add_pct');
- $round_to = get_company_pref('round_to');
- $home_curr = get_company_currency();
-
- if (db_num_rows($result) != 0)
- {
- $myrow = db_fetch_row($result);
- return $myrow[0];
- }
- elseif ($add_pct != -1)
- {
- $price = get_calculated_price($stock_id, $add_pct);
- if ($currency == $home_curr)
- {
- if ($factor != 0)
- $price *= $factor;
- return round_to_nearest($price, $round_to);
- }
- }
- if ($factor == 0) return false; // auto price calculations off
-
$base_id = get_base_sales_type();
- if ($base_id <= 0) return 0; // auto price calculations off
-
- // get all prices which we can use to guess the price.
- // alternative is make up to 2 additional sql queries
+ $home_curr = get_company_currency();
+ // AND (sales_type_id = $sales_type_id OR sales_type_id = $base_id)
$sql = "SELECT price, curr_abrev, sales_type_id
FROM ".TB_PREF."prices
- WHERE stock_id = '" . $stock_id . "' "
- ." AND (sales_type_id = " . $sales_type_id
- ." OR sales_type_id = " . $base_id.")"
- ." AND (curr_abrev = '$currency'"
- ." OR curr_abrev = '$home_curr')";
-
- $result = db_query($sql, $msg);
+ WHERE stock_id = '$stock_id'
+ AND (curr_abrev = '$currency' OR curr_abrev = '$home_curr')";
+ $result = db_query($sql, "There was a problem retrieving the pricing information for the part $stock_id for customer");
+ $num_rows = db_num_rows($result);
+ $rate = round2(get_exchange_rate_from_home_currency($currency, $date),
+ user_exrate_dec());
+ $round_to = get_company_pref('round_to');
$prices = array();
while($myrow = db_fetch($result))
{
$prices[$myrow['sales_type_id']][$myrow['curr_abrev']] = $myrow['price'];
}
- $rate = round(get_exchange_rate_from_home_currency($currency, $date),
- user_exrate_dec());
- if (db_num_rows($result) == 0 && $add_pct != -1)
- {
- if ($factor != 0)
- $price = $price * $factor / $rate;
- else
- $price /= $rate;
- return round_to_nearest($price, $round_to);
- }
-
$price = false;
if (isset($prices[$sales_type_id][$home_curr]))
{
{
$price = $prices[$base_id][$home_curr] * $factor / $rate;
}
+ elseif ($num_rows == 0 && $add_pct != -1)
+ {
+ $price = get_calculated_price($stock_id, $add_pct);
+ if ($currency != $home_curr)
+ $price /= $rate;
+ if ($factor != 0)
+ $price *= $factor;
+ }
if ($price === false)
- return false;
- else if ($round_to != 1)
+ return 0;
+ elseif ($round_to != 1)
return round_to_nearest($price, $round_to);
else
return round2($price, user_price_dec());