From f5bffeb535b97bd5a62dda75037a4fcc58377b15 Mon Sep 17 00:00:00 2001 From: phf Date: Sun, 11 Dec 2016 16:30:01 +0100 Subject: [PATCH] New get multicurrency rate from document date (propal, order) --- htdocs/admin/multicurrency.php | 9 +++--- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/commande/class/commande.class.php | 10 +++--- .../class/multicurrency.class.php | 31 ++++++++++++++----- 4 files changed, 33 insertions(+), 19 deletions(-) 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 ''; -print ''; -print $form->selectyesno("MULTICURRENCY_USE_RATE_ON_INVOICE_DATE",$conf->global->MULTICURRENCY_USE_RATE_ON_INVOICE_DATE,1); +print ''; +print $form->selectyesno("MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE",$conf->global->MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE,1); 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 f10d82fdbfa..017a540e453 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 1f75e6caf74..f8bf39721ab 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..c42b4fc3796 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); + } } /**