return null;
}
+/*
+ Helper for ui drawing functions.
+ Checks whether any of input function parameters has changed or page is called with GET method (first page display).
+ $name - context
+*/
+function check_ui_refresh($name=null)
+{
+ $bt = debug_backtrace();
+ if (!$name)
+ $name = $bt[1]['function'];
+ $old = @$_SESSION['ui_context'][$name];
+ $new = $_SESSION['ui_context'][$name] = $bt[1]['args'];
+ return ($new != $old) || ($_SERVER['REQUEST_METHOD'] == 'GET');
+}
+
//--------------------------------------------------------------------------------------
// Displays currency exchange rate for given date.
// When there is no exrate for today,
// gets it form ECB and stores in local database.
//
-function exchange_rate_display($from_currency, $to_currency, $date_, $edit_rate=false)
+function exchange_rate_display($from_currency, $to_currency, $date_, $force_edit=false)
{
- global $Ajax;
+ global $Ajax, $xr_provider_authoritative;
+
+ $readonly = false;
if ($from_currency != $to_currency)
{
- $comp_currency = get_company_currency();
- if ($from_currency == $comp_currency)
- $currency = $to_currency;
- else
- $currency = $from_currency;
- $rate = 0;
- if ($date_ == Today()) {
- $rate = get_date_exchange_rate($currency, $date_);
- if (!$rate) {
+ $rate = get_post('_ex_rate');
+ if (check_ui_refresh() || !$rate) { // readonly or ui context changed
+ $comp_currency = get_company_currency();
+ if ($from_currency == $comp_currency)
+ $currency = $to_currency;
+ else
+ $currency = $from_currency;
+
+ $rate = get_date_exchange_rate($currency, $date_); // try local
+
+ if ($rate)
+ $readonly = true; // if we have already local exrate keep it unchanged
+
+ if (!$rate) { // retry from remote service
$row = get_currency($currency);
- if ($row['auto_update']) {
- $rate = retrieve_exrate($currency, $date_);
- if ($rate)
- add_exchange_rate($currency, $date_, $rate, $rate);
+
+ if ($row['auto_update']) // autoupdate means use remote service & store exrate on first transaction.
+ {
+ $rate = retrieve_exrate($currency, $date_);
+ if (!$rate)
+ display_warning(sprintf(_("Cannot retrieve exchange rate for currency %s. Please adjust approximate rate if needed."), $currency));
+ elseif ($xr_provider_authoritative) {
+ // if the remote exrate is considered authoritative we can store the rate here,
+ // otherwise exrate will be stored during transaction write
+ $readonly = true;
+ add_new_exchange_rate($currency, $date_, $rate);
+ }
}
}
+ if (!$rate) { // get and edit latest available
+ $rate = get_exchange_rate_from_home_currency($currency, $date_);
+ }
+ if ($from_currency != $comp_currency)
+ $rate = 1 / ($rate / get_exchange_rate_from_home_currency($to_currency, $date_));
+ $Ajax->activate('_ex_rate_span');
}
- if (!$rate)
- $rate = get_exchange_rate_from_home_currency($currency, $date_);
- if ($from_currency != $comp_currency)
- $rate = 1 / ($rate / get_exchange_rate_from_home_currency($to_currency, $date_));
$rate = number_format2($rate, user_exrate_dec());
- if ($edit_rate)
- text_row(_("Exchange Rate:"), '_ex_rate', $rate, 8, 8, null, "", " $from_currency = 1 $to_currency");
- else
- label_row(_("Exchange Rate:"),"<span style='vertical-align:top;' id='_ex_rate'>$rate</span> $from_currency = 1 $to_currency" );
- $Ajax->addUpdate('_ex_rate','_ex_rate', $rate);
+
+ if ($force_edit || !$readonly)
+ $ctrl = "<input type=\"text\" name=\"_ex_rate\" size=\"8\" maxlength=\"8\" value=\"$rate\">";
+ else
+ $ctrl = "<span id=\"_ex_rate\">$rate</span>";
+
+ label_row(_("Exchange Rate:"), $span = "<span style='vertical-align:top;' id='_ex_rate_span'>$ctrl $from_currency = 1 $to_currency</span>" );
+
+ $Ajax->addUpdate('_ex_rate_span', '_ex_rate_span', $span);
}
}
echo "<tr><td colspan=15>";
while ($comment = db_fetch($comments))
{
- echo $comment["memo_"] . "<br>";
+ echo nl2br($comment["memo_"]) . "<br>";
}
echo "</td></tr>";
}
//--------------------------------------------------------------------------------------
-function display_edit_tax_items($taxes, $columns, $tax_included, $leftspan=0)
+function display_edit_tax_items($taxes, $columns, $tax_included, $rightspan=0, $editable=false)
{
$total = 0;
foreach ($taxes as $taxitem)
- {
- if ($taxitem['Value'] != 0) {
- if ($tax_included)
- {
- label_row(_("Included") . " " . $taxitem['tax_type_name']
- . " " . number_format2($taxitem['Value'],user_price_dec()), "", "colspan=$columns align=right", "align=right",$leftspan);
- }
- else
- {
- label_row($taxitem['tax_type_name'],
- number_format2($taxitem['Value'],user_price_dec()), "colspan=$columns align=right", "align=right",$leftspan);
- $total += round2($taxitem['Value'], user_price_dec());
- }
- }
- }
-
- return $total;
+ {
+ $amount = isset($taxitem['Override']) ? $taxitem['Override'] : $taxitem['Value'];
+ if ($taxitem['Value'] != 0){
+ if ($editable) {
+ if (!isset($_POST['mantax['.$taxitem['tax_type_id'].']']))
+ $_POST['mantax['.$taxitem['tax_type_id'].']'] = price_format($amount);
+ start_row();
+ if ($tax_included) {
+ $colspan = $columns-1;
+ label_cell(_("Included") . " " . $taxitem['tax_type_name'].":",
+ "colspan={$colspan} align='right'");
+ amount_cells(null, 'mantax['.$taxitem['tax_type_id'].']',
+ null, "colspan=$columns align=right", '<td></td>', user_price_dec());
+ } else {
+ label_cell($taxitem['tax_type_name'], "colspan=$columns align='right'");
+ amount_cells(null, 'mantax['.$taxitem['tax_type_id'].']',
+ null, "colspan=$columns align=right", null, user_price_dec());
+ $total += round2($amount, user_price_dec());
+ }
+ if ($rightspan)
+ label_cell('', "colspan ='$rightspan'");
+ end_row();
+ } else {
+ $value = number_format2($taxitem['Value'],user_price_dec());
+ if ($tax_included)
+ {
+ label_row(_("Included") . " " . $taxitem['tax_type_name']
+ . " " . $value , "", "colspan=$columns align=right", "align=right", $rightspan);
+ }
+ else
+ {
+ label_row($taxitem['tax_type_name'],
+ $value, "colspan=$columns align=right", "align=right", $rightspan);
+ $total += round2($taxitem['Value'], user_price_dec());
+ }
+ }
+ }
+ }
+ return $total;
}
//--------------------------------------------------------------------------------------
if (!isset($payment_services))
{
$payment_services = array(
- 'PayPal' => "https://www.paypal.com/xclick/business=<company_email>&item_name=<comment>&amount=<amount>¤cy_code=<currency>",
+ 'PayPal' => "https://www.paypal.com/xclick?business=<company_email>&item_name=<comment>&amount=<amount>¤cy_code=<currency>",
);
}
/*