diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 70a51d2f8fd..51acd7d901a 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -1499,7 +1499,7 @@ abstract class CommonObject
$this->updateline($line->id, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->desc, 'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, $line->skip_update_total, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->array_options, $line->ref_fourn);
break;
case 'order_supplier':
- $r = $this->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit);
+ $this->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit);
break;
default:
dol_syslog(get_class($this).'::setMulticurrencyRate no updateline defined', LOG_DEBUG);
diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index 52c35040d2b..6c49ee7dda0 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -31,7 +31,7 @@
*/
include_once DOL_DOCUMENT_ROOT.'/core/class/commoninvoice.class.php';
-
+require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
/**
* Class to manage suppliers invoices
@@ -118,6 +118,14 @@ class FactureFournisseur extends CommonInvoice
var $extraparams=array();
+ // Multicurrency
+ var $fk_multicurrency;
+ var $multicurrency_code;
+ var $multicurrency_tx;
+ var $multicurrency_total_ht;
+ var $multicurrency_total_tva;
+ var $multicurrency_total_ttc;
+
/**
* Constructor
*
@@ -162,6 +170,16 @@ class FactureFournisseur extends CommonInvoice
$amount = $this->amount;
$remise = $this->remise;
+ // 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);
+ else $this->fk_multicurrency = MultiCurrency::getIdFromCode($this->db, $this->multicurrency_code);
+ if (empty($this->fk_multicurrency))
+ {
+ $this->multicurrency_code = $conf->currency;
+ $this->fk_multicurrency = 0;
+ $this->multicurrency_tx = 1;
+ }
+
$this->db->begin();
if (! $remise) $remise = 0 ;
@@ -184,6 +202,9 @@ class FactureFournisseur extends CommonInvoice
$sql.= ", fk_user_author";
$sql.= ", date_lim_reglement";
$sql.= ", fk_incoterms, location_incoterms";
+ $sql.= ", fk_multicurrency";
+ $sql.= ", multicurrency_code";
+ $sql.= ", multicurrency_tx";
$sql.= ")";
$sql.= " VALUES (";
$sql.= "'(PROV)'";
@@ -203,6 +224,9 @@ class FactureFournisseur extends CommonInvoice
$sql.= $this->date_echeance!=''?"'".$this->db->idate($this->date_echeance)."'":"null";
$sql.= ", ".(int) $this->fk_incoterms;
$sql.= ", '".$this->db->escape($this->location_incoterms)."'";
+ $sql.= ", ".(int) $this->fk_multicurrency;
+ $sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
+ $sql.= ", ".(double) $this->multicurrency_tx;
$sql.= ")";
dol_syslog(get_class($this)."::create", LOG_DEBUG);
@@ -375,7 +399,8 @@ class FactureFournisseur extends CommonInvoice
$sql.= " p.code as mode_reglement_code, p.libelle as mode_reglement_libelle,";
$sql.= ' s.nom as socnom, s.rowid as socid,';
$sql.= ' t.fk_incoterms, t.location_incoterms,';
- $sql.= " i.libelle as libelle_incoterms";
+ $sql.= " i.libelle as libelle_incoterms,";
+ $sql.= ' t.fk_multicurrency, t.multicurrency_code, t.multicurrency_tx, t.multicurrency_total_ht, t.multicurrency_total_tva, t.multicurrency_total_ttc';
$sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as t';
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON (t.fk_soc = s.rowid)";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_payment_term as cr ON (t.fk_cond_reglement = cr.rowid)";
@@ -445,6 +470,14 @@ class FactureFournisseur extends CommonInvoice
$this->location_incoterms = $obj->location_incoterms;
$this->libelle_incoterms = $obj->libelle_incoterms;
+ // Multicurrency
+ $this->fk_multicurrency = $obj->fk_multicurrency;
+ $this->multicurrency_code = $obj->multicurrency_code;
+ $this->multicurrency_tx = $obj->multicurrency_tx;
+ $this->multicurrency_total_ht = $obj->multicurrency_total_ht;
+ $this->multicurrency_total_tva = $obj->multicurrency_total_tva;
+ $this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
+
$this->extraparams = (array) json_decode($obj->extraparams, true);
$this->socid = $obj->socid;
@@ -496,6 +529,7 @@ class FactureFournisseur extends CommonInvoice
$sql.= ', f.localtax1_tx, f.localtax2_tx, f.total_localtax1, f.total_localtax2 ';
$sql.= ', f.total_ht, f.tva as total_tva, f.total_ttc, f.fk_product, f.product_type, f.info_bits, f.rang, f.special_code, f.fk_parent_line, f.fk_unit';
$sql.= ', p.rowid as product_id, p.ref as product_ref, p.label as label, p.description as product_desc';
+ $sql.= ', f.fk_multicurrency, f.multicurrency_code, f.multicurrency_subprice, f.multicurrency_total_ht, f.multicurrency_total_tva, f.multicurrency_total_ttc,';
$sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn_det as f';
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON f.fk_product = p.rowid';
$sql.= ' WHERE fk_facture_fourn='.$this->id;
@@ -547,6 +581,14 @@ class FactureFournisseur extends CommonInvoice
$line->rang = $obj->rang;
$line->fk_unit = $obj->fk_unit;
+ // Multicurrency
+ $line->fk_multicurrency = $objp->fk_multicurrency;
+ $line->multicurrency_code = $objp->multicurrency_code;
+ $line->multicurrency_subprice = $objp->multicurrency_subprice;
+ $line->multicurrency_total_ht = $objp->multicurrency_total_ht;
+ $line->multicurrency_total_tva = $objp->multicurrency_total_tva;
+ $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
+
$this->lines[$i] = $line;
$i++;
@@ -1271,7 +1313,7 @@ class FactureFournisseur extends CommonInvoice
$localtaxes_type=getLocalTaxesFromRate($vatrate,0,$mysoc, $this->thirdparty);
$txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate.
- $tabprice = calcul_price_total($qty, $pu, $remise_percent, $vatrate, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type);
+ $tabprice = calcul_price_total($qty, $pu, $remise_percent, $vatrate, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx);
$total_ht = $tabprice[0];
$total_tva = $tabprice[1];
$total_ttc = $tabprice[2];
@@ -1280,6 +1322,12 @@ class FactureFournisseur extends CommonInvoice
$pu_ttc = $tabprice[5];
$total_localtax1 = $tabprice[9];
$total_localtax2 = $tabprice[10];
+
+ // MultiCurrency
+ $multicurrency_total_ht = $tabprice[16];
+ $multicurrency_total_tva = $tabprice[17];
+ $multicurrency_total_ttc = $tabprice[18];
+
if (empty($info_bits)) $info_bits=0;
if ($idproduct)
@@ -1321,6 +1369,12 @@ class FactureFournisseur extends CommonInvoice
$line->fk_unit = $fk_unit;
$line->array_options = $array_options;
+ // Multicurrency
+ $line->multicurrency_subprice = price2num($line->subprice * $this->multicurrency_tx);
+ $line->multicurrency_total_ht = $multicurrency_total_ht;
+ $line->multicurrency_total_tva = $multicurrency_total_tva;
+ $line->multicurrency_total_ttc = $multicurrency_total_ttc;
+
$res = $line->update($notrigger);
if ($res < 1) {
@@ -2163,6 +2217,13 @@ class SupplierInvoiceLine extends CommonObjectLine
$sql.= ", product_type = ".$this->product_type;
$sql.= ", info_bits = ".$this->info_bits;
$sql.= ", fk_unit = ".$fk_unit;
+
+ // Multicurrency
+ $sql.= " , multicurrency_subprice=".price2num($this->multicurrency_subprice)."";
+ $sql.= " , multicurrency_total_ht=".price2num($this->multicurrency_total_ht)."";
+ $sql.= " , multicurrency_total_tva=".price2num($this->multicurrency_total_tva)."";
+ $sql.= " , multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc)."";
+
$sql.= " WHERE rowid = ".$this->id;
dol_syslog(get_class($this)."::update", LOG_DEBUG);
diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php
index 518f09b5316..6860d5b6bb6 100644
--- a/htdocs/fourn/facture/card.php
+++ b/htdocs/fourn/facture/card.php
@@ -261,6 +261,16 @@ if (empty($reshook))
{
$result = $object->setPaymentMethods(GETPOST('mode_reglement_id','int'));
}
+
+ // Multicurrency Code
+ else if ($action == 'setmulticurrencycode' && $user->rights->facture->creer) {
+ $result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha'));
+ }
+
+ // Multicurrency rate
+ else if ($action == 'setmulticurrencyrate' && $user->rights->facture->creer) {
+ $result = $object->setMulticurrencyRate(GETPOST('multicurrency_tx', 'int'));
+ }
// bank account
else if ($action == 'setbankaccount' && $user->rights->fournisseur->facture->creer) {
@@ -368,6 +378,8 @@ if (empty($reshook))
$object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
$object->fk_incoterms = GETPOST('incoterm_id', 'int');
$object->location_incoterms = GETPOST('location_incoterms', 'alpha');
+ $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha');
+ $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int');
// Auto calculation of date due if not filled by user
if(empty($object->date_echeance)) $object->date_echeance = $object->calculate_date_lim_reglement();
@@ -1264,6 +1276,8 @@ if ($action == 'create')
$societe->fetch(GETPOST('socid','int'));
}
+ $currency_code = $conf->currency;
+
if (GETPOST('origin') && GETPOST('originid'))
{
// Parse element/subelement (ex: project_task)
@@ -1308,6 +1322,12 @@ if ($action == 'create')
$remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0));
$dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:'';
+ if (!empty($conf->multicurrency->enabled))
+ {
+ if (!empty($objectsrc->multicurrency_code)) $currency_code = $objectsrc->multicurrency_code;
+ if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) $currency_tx = $objectsrc->multicurrency_tx;
+ }
+
$datetmp=dol_mktime(12,0,0,$_POST['remonth'],$_POST['reday'],$_POST['reyear']);
$dateinvoice=($datetmp==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$datetmp);
$datetmp=dol_mktime(12,0,0,$_POST['echmonth'],$_POST['echday'],$_POST['echyear']);
@@ -1323,6 +1343,8 @@ if ($action == 'create')
$dateinvoice=($datetmp==''?(empty($conf->global->MAIN_AUTOFILL_DATE)?-1:''):$datetmp);
$datetmp=dol_mktime(12,0,0,$_POST['echmonth'],$_POST['echday'],$_POST['echyear']);
$datedue=($datetmp==''?-1:$datetmp);
+
+ if (!empty($conf->multicurrency->enabled) && !empty($soc->multicurrency_code)) $currency_code = $soc->multicurrency_code;
}
@@ -1331,7 +1353,8 @@ if ($action == 'create')
print '';
print '';
print '';
-
+ if (!empty($currency_tx)) print '';
+
dol_fiche_head();
print '
';
@@ -1490,6 +1513,16 @@ if ($action == 'create')
$form->select_comptes($fk_account, 'fk_account', 0, '', 1);
print '';
+ // Multicurrency
+ if (! empty($conf->multicurrency->enabled))
+ {
+ print '';
+ print '| '.fieldLabel('Currency','multicurrency_code').' | ';
+ print '';
+ print $form->selectMultiCurrency($currency_code, 'multicurrency_code');
+ print ' |
';
+ }
+
// Public note
print '| '.$langs->trans('NotePublic').' | ';
print '';
@@ -1555,6 +1588,13 @@ if ($action == 'create')
}
}
print ' |
| '.$langs->trans('TotalTTC').' | '.price($objectsrc->total_ttc)." |
";
+
+ if (!empty($conf->multicurrency->enabled))
+ {
+ print '| ' . $langs->trans('MulticurrencyTotalHT') . ' | ' . price($objectsrc->multicurrency_total_ht) . ' |
';
+ print '| ' . $langs->trans('MulticurrencyTotalVAT') . ' | ' . price($objectsrc->multicurrency_total_tva) . " |
";
+ print '| ' . $langs->trans('MulticurrencyTotalTTC') . ' | ' . price($objectsrc->multicurrency_total_ttc) . " |
";
+ }
}
else
{
@@ -1968,6 +2008,44 @@ else
}
print '';
+ // Multicurrency
+ if (! empty($conf->multicurrency->enabled))
+ {
+ // Multicurrency code
+ print '';
+ print '| ';
+ print '';
+ print ' | ';
+ if ($action == 'editmulticurrencycode') {
+ $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, 'multicurrency_code');
+ } else {
+ $form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, 'none');
+ }
+ print ' |
';
+
+ // Multicurrency rate
+ print '';
+ print '| ';
+ print '';
+ print ' | ';
+ if ($action == 'editmulticurrencyrate') {
+ $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx');
+ } else {
+ $form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none');
+ }
+ print ' |
';
+ }
+
// Bank Account
print '';
print '| ';
@@ -2019,6 +2097,24 @@ else
}
print ' | | '.$langs->trans('AmountTTC').' | '.price($object->total_ttc,1,$langs,0,-1,-1,$conf->currency).' | ';
+ if (!empty($conf->multicurrency->enabled))
+ {
+ // Multicurrency Amount HT
+ print '| ' . fieldLabel('MulticurrencyAmountHT','multicurrency_total_ht') . ' | ';
+ print '' . price($object->multicurrency_total_ht, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)) . ' | ';
+ print ' ';
+
+ // Multicurrency Amount VAT
+ print '| ' . fieldLabel('MulticurrencyAmountVAT','multicurrency_total_tva') . ' | ';
+ print '' . price($object->multicurrency_total_tva, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)) . ' | ';
+ print ' ';
+
+ // Multicurrency Amount TTC
+ print '| ' . fieldLabel('MulticurrencyAmountTTC','multicurrency_total_ttc') . ' | ';
+ print '' . price($object->multicurrency_total_ttc, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)) . ' | ';
+ print ' ';
+ }
+
// Project
if (! empty($conf->projet->enabled))
{
|