diff --git a/htdocs/admin/multicurrency.php b/htdocs/admin/multicurrency.php
index de3c2f3965a..f280b7c1735 100644
--- a/htdocs/admin/multicurrency.php
+++ b/htdocs/admin/multicurrency.php
@@ -183,20 +183,19 @@ print '
'.$langs->trans("Parameters").' | '."\n";
print ' | ';
print ''.$langs->trans("Value").' | '."\n";
-/* TODO uncomment when the functionality will integrated
$var=!$var;
print '';
-print '| '.$langs->transnoentitiesnoconv("multicurrency_useRateOnInvoiceDate").' | ';
+print ''.$langs->transnoentitiesnoconv("multicurrency_useRateOnDocumentDate").' | ';
print ' | ';
print '';
print '';
print ' |
';
-*/
+
$var=!$var;
print '';
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index cf42fe3c33f..2111886a517 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -824,7 +824,7 @@ class Propal extends CommonObject
if (empty($this->demand_reason_id)) $this->demand_reason_id=0;
// Multicurrency
- if (!empty($this->multicurrency_code)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code);
+ if (!empty($this->multicurrency_code)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code, $this->date);
if (empty($this->fk_multicurrency))
{
$this->multicurrency_code = $conf->currency;
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 1cd706c1863..50bb9e6a009 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -704,9 +704,12 @@ class Commande extends CommonOrder
// Clean parameters
$this->brouillon = 1; // set command as draft
-
+
+ // $date_commande is deprecated
+ $date = ($this->date_commande ? $this->date_commande : $this->date);
+
// Multicurrency (test on $this->multicurrency_tx because we sould take the default rate only if not using origin rate)
- if (!empty($this->multicurrency_code) && empty($this->multicurrency_tx)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code);
+ if (!empty($this->multicurrency_code) && empty($this->multicurrency_tx)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code, $date);
else $this->fk_multicurrency = MultiCurrency::getIdFromCode($this->db, $this->multicurrency_code);
if (empty($this->fk_multicurrency))
{
@@ -745,9 +748,6 @@ class Commande extends CommonOrder
return -1;
}
- // $date_commande is deprecated
- $date = ($this->date_commande ? $this->date_commande : $this->date);
-
$now=dol_now();
$this->db->begin();
diff --git a/htdocs/multicurrency/class/multicurrency.class.php b/htdocs/multicurrency/class/multicurrency.class.php
index 97d29e3885b..b8ce1995b5a 100644
--- a/htdocs/multicurrency/class/multicurrency.class.php
+++ b/htdocs/multicurrency/class/multicurrency.class.php
@@ -508,22 +508,37 @@ class MultiCurrency extends CommonObject
*
* @param DoliDB $db object db
* @param string $code code value search
+ * @param date $date_document date from document (propal, order, invoice, ...)
*
* @return array [0] => id currency
* [1] => rate
*/
- public static function getIdAndTxFromCode(&$db, $code)
+ public static function getIdAndTxFromCode(&$db, $code, $date_document='')
{
- $sql = 'SELECT m.rowid, mc.rate FROM '.MAIN_DB_PREFIX.'multicurrency m';
- $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'multicurrency_rate mc ON (m.rowid = mc.fk_multicurrency)';
- $sql.= ' WHERE m.code = \''.$db->escape($code).'\'';
- $sql.= " AND m.entity IN (".getEntity('multicurrency', 1).")";
- $sql.= ' ORDER BY mc.date_sync DESC LIMIT 1';
+ global $conf;
+
+ $sql1 = 'SELECT m.rowid, mc.rate FROM '.MAIN_DB_PREFIX.'multicurrency m';
+ $sql1.= ' LEFT JOIN '.MAIN_DB_PREFIX.'multicurrency_rate mc ON (m.rowid = mc.fk_multicurrency)';
+ $sql1.= ' WHERE m.code = \''.$db->escape($code).'\'';
+ $sql1.= " AND m.entity IN (".getEntity('multicurrency', 1).")";
+ $sql2= '';
+ if (!empty($conf->global->MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE) && !empty($date_document)) $sql2.= ' AND DATE_FORMAT(mc.date_sync, "%Y-%m-%d") = "'.date('Y-m-d', $date_document).'"';
+ $sql3.= ' ORDER BY mc.date_sync DESC LIMIT 1';
dol_syslog(__METHOD__,LOG_DEBUG);
- $resql = $db->query($sql);
+ $resql = $db->query($sql1.$sql2.$sql3);
+
if ($resql && $obj = $db->fetch_object($resql)) return array($obj->rowid, $obj->rate);
- else return array(0, 1);
+ else
+ {
+ if (!empty($conf->global->MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE))
+ {
+ $resql = $db->query($sql1.$sql3);
+ if ($resql && $obj = $db->fetch_object($resql)) return array($obj->rowid, $obj->rate);
+ }
+
+ return array(0, 1);
+ }
}
/**