FIX bad bank amount in accounting with multicurrency
This commit is contained in:
parent
37fbe859df
commit
d6860ca41b
@ -117,7 +117,7 @@ if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))
|
|||||||
$date_end = dol_get_last_day($pastmonthyear, $pastmonth, false);
|
$date_end = dol_get_last_day($pastmonthyear, $pastmonth, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type, b.fk_account,";
|
$sql = "SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.amount_main_currency, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type, b.fk_account,";
|
||||||
$sql .= " ba.courant, ba.ref as baref, ba.account_number, ba.fk_accountancy_journal,";
|
$sql .= " ba.courant, ba.ref as baref, ba.account_number, ba.fk_accountancy_journal,";
|
||||||
$sql .= " soc.rowid as socid, soc.nom as name, soc.email as email, bu1.type as typeop_company,";
|
$sql .= " soc.rowid as socid, soc.nom as name, soc.email as email, bu1.type as typeop_company,";
|
||||||
if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
|
if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
|
||||||
@ -142,7 +142,7 @@ if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
|
|||||||
}
|
}
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on bu2.url_id=u.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on bu2.url_id=u.rowid";
|
||||||
$sql .= " WHERE ba.fk_accountancy_journal=".((int) $id_journal);
|
$sql .= " WHERE ba.fk_accountancy_journal=".((int) $id_journal);
|
||||||
$sql .= ' AND b.amount != 0 AND ba.entity IN ('.getEntity('bank_account', 0).')'; // We don't share object for accountancy
|
$sql .= ' AND b.amount <> 0 AND ba.entity IN ('.getEntity('bank_account', 0).')'; // We don't share object for accountancy
|
||||||
if ($date_start && $date_end) {
|
if ($date_start && $date_end) {
|
||||||
$sql .= " AND b.dateo >= '".$db->idate($date_start)."' AND b.dateo <= '".$db->idate($date_end)."'";
|
$sql .= " AND b.dateo >= '".$db->idate($date_start)."' AND b.dateo <= '".$db->idate($date_end)."'";
|
||||||
}
|
}
|
||||||
@ -282,6 +282,7 @@ if ($result) {
|
|||||||
$tabpay[$obj->rowid]["fk_bank"] = $obj->rowid;
|
$tabpay[$obj->rowid]["fk_bank"] = $obj->rowid;
|
||||||
$tabpay[$obj->rowid]["bank_account_ref"] = $obj->baref;
|
$tabpay[$obj->rowid]["bank_account_ref"] = $obj->baref;
|
||||||
$tabpay[$obj->rowid]["fk_bank_account"] = $obj->fk_account;
|
$tabpay[$obj->rowid]["fk_bank_account"] = $obj->fk_account;
|
||||||
|
$reg = array();
|
||||||
if (preg_match('/^\((.*)\)$/i', $obj->label, $reg)) {
|
if (preg_match('/^\((.*)\)$/i', $obj->label, $reg)) {
|
||||||
$tabpay[$obj->rowid]["lib"] = $langs->trans($reg[1]);
|
$tabpay[$obj->rowid]["lib"] = $langs->trans($reg[1]);
|
||||||
} else {
|
} else {
|
||||||
@ -296,6 +297,12 @@ if ($result) {
|
|||||||
$tabtype[$obj->rowid] = 'unknown';
|
$tabtype[$obj->rowid] = 'unknown';
|
||||||
$tabmoreinfo[$obj->rowid] = array();
|
$tabmoreinfo[$obj->rowid] = array();
|
||||||
|
|
||||||
|
$amounttouse = $obj->amount;
|
||||||
|
if (!empty($obj->amount_main_currency)) {
|
||||||
|
// If $obj->amount_main_currency is set, it means that $obj->amount is not in same currency, we must use $obj->amount_main_currency
|
||||||
|
$amounttouse = $obj->amount_main_currency;
|
||||||
|
}
|
||||||
|
|
||||||
// get_url may return -1 which is not traversable
|
// get_url may return -1 which is not traversable
|
||||||
if (is_array($links) && count($links) > 0) {
|
if (is_array($links) && count($links) > 0) {
|
||||||
// Now loop on each link of record in bank (code similar to bankentries_list.php)
|
// Now loop on each link of record in bank (code similar to bankentries_list.php)
|
||||||
@ -334,7 +341,7 @@ if ($result) {
|
|||||||
$societestatic->email = $tabcompany[$obj->rowid]['email'];
|
$societestatic->email = $tabcompany[$obj->rowid]['email'];
|
||||||
$tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30);
|
$tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30);
|
||||||
if ($compta_soc) {
|
if ($compta_soc) {
|
||||||
$tabtp[$obj->rowid][$compta_soc] += $obj->amount;
|
$tabtp[$obj->rowid][$compta_soc] += $amounttouse;
|
||||||
}
|
}
|
||||||
} elseif ($links[$key]['type'] == 'user') {
|
} elseif ($links[$key]['type'] == 'user') {
|
||||||
$userstatic->id = $links[$key]['url_id'];
|
$userstatic->id = $links[$key]['url_id'];
|
||||||
@ -350,7 +357,7 @@ if ($result) {
|
|||||||
$tabpay[$obj->rowid]["soclib"] = '???'; // Should not happen, but happens with old data when id of user was not saved on expense report payment.
|
$tabpay[$obj->rowid]["soclib"] = '???'; // Should not happen, but happens with old data when id of user was not saved on expense report payment.
|
||||||
}
|
}
|
||||||
if ($compta_user) {
|
if ($compta_user) {
|
||||||
$tabtp[$obj->rowid][$compta_user] += $obj->amount;
|
$tabtp[$obj->rowid][$compta_user] += $amounttouse;
|
||||||
}
|
}
|
||||||
} elseif ($links[$key]['type'] == 'sc') {
|
} elseif ($links[$key]['type'] == 'sc') {
|
||||||
$chargestatic->id = $links[$key]['url_id'];
|
$chargestatic->id = $links[$key]['url_id'];
|
||||||
@ -383,7 +390,7 @@ if ($result) {
|
|||||||
$resultmid = $db->query($sqlmid);
|
$resultmid = $db->query($sqlmid);
|
||||||
if ($resultmid) {
|
if ($resultmid) {
|
||||||
$objmid = $db->fetch_object($resultmid);
|
$objmid = $db->fetch_object($resultmid);
|
||||||
$tabtp[$obj->rowid][$objmid->accountancy_code] += $obj->amount;
|
$tabtp[$obj->rowid][$objmid->accountancy_code] += $amounttouse;
|
||||||
}
|
}
|
||||||
} elseif ($links[$key]['type'] == 'payment_donation') {
|
} elseif ($links[$key]['type'] == 'payment_donation') {
|
||||||
$paymentdonstatic->id = $links[$key]['url_id'];
|
$paymentdonstatic->id = $links[$key]['url_id'];
|
||||||
@ -391,7 +398,7 @@ if ($result) {
|
|||||||
$paymentdonstatic->fk_donation = $links[$key]['url_id'];
|
$paymentdonstatic->fk_donation = $links[$key]['url_id'];
|
||||||
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentdonstatic->getNomUrl(2);
|
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentdonstatic->getNomUrl(2);
|
||||||
$tabpay[$obj->rowid]["paymentdonationid"] = $paymentdonstatic->id;
|
$tabpay[$obj->rowid]["paymentdonationid"] = $paymentdonstatic->id;
|
||||||
$tabtp[$obj->rowid][$account_pay_donation] += $obj->amount;
|
$tabtp[$obj->rowid][$account_pay_donation] += $amounttouse;
|
||||||
} elseif ($links[$key]['type'] == 'member') {
|
} elseif ($links[$key]['type'] == 'member') {
|
||||||
$paymentsubscriptionstatic->id = $links[$key]['url_id'];
|
$paymentsubscriptionstatic->id = $links[$key]['url_id'];
|
||||||
$paymentsubscriptionstatic->ref = $links[$key]['url_id'];
|
$paymentsubscriptionstatic->ref = $links[$key]['url_id'];
|
||||||
@ -399,14 +406,14 @@ if ($result) {
|
|||||||
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentsubscriptionstatic->getNomUrl(2);
|
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentsubscriptionstatic->getNomUrl(2);
|
||||||
$tabpay[$obj->rowid]["paymentsubscriptionid"] = $paymentsubscriptionstatic->id;
|
$tabpay[$obj->rowid]["paymentsubscriptionid"] = $paymentsubscriptionstatic->id;
|
||||||
$paymentsubscriptionstatic->fetch($paymentsubscriptionstatic->id);
|
$paymentsubscriptionstatic->fetch($paymentsubscriptionstatic->id);
|
||||||
$tabtp[$obj->rowid][$account_pay_subscription] += $obj->amount;
|
$tabtp[$obj->rowid][$account_pay_subscription] += $amounttouse;
|
||||||
} elseif ($links[$key]['type'] == 'payment_vat') { // Payment VAT
|
} elseif ($links[$key]['type'] == 'payment_vat') { // Payment VAT
|
||||||
$paymentvatstatic->id = $links[$key]['url_id'];
|
$paymentvatstatic->id = $links[$key]['url_id'];
|
||||||
$paymentvatstatic->ref = $links[$key]['url_id'];
|
$paymentvatstatic->ref = $links[$key]['url_id'];
|
||||||
$paymentvatstatic->label = $links[$key]['label'];
|
$paymentvatstatic->label = $links[$key]['label'];
|
||||||
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentvatstatic->getNomUrl(2);
|
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentvatstatic->getNomUrl(2);
|
||||||
$tabpay[$obj->rowid]["paymentvatid"] = $paymentvatstatic->id;
|
$tabpay[$obj->rowid]["paymentvatid"] = $paymentvatstatic->id;
|
||||||
$tabtp[$obj->rowid][$account_pay_vat] += $obj->amount;
|
$tabtp[$obj->rowid][$account_pay_vat] += $amounttouse;
|
||||||
} elseif ($links[$key]['type'] == 'payment_salary') {
|
} elseif ($links[$key]['type'] == 'payment_salary') {
|
||||||
$paymentsalstatic->id = $links[$key]['url_id'];
|
$paymentsalstatic->id = $links[$key]['url_id'];
|
||||||
$paymentsalstatic->ref = $links[$key]['url_id'];
|
$paymentsalstatic->ref = $links[$key]['url_id'];
|
||||||
@ -438,7 +445,7 @@ if ($result) {
|
|||||||
if (empty($obj->typeop_user)) { // Add test to avoid to add amount twice if a link already exists also on user.
|
if (empty($obj->typeop_user)) { // Add test to avoid to add amount twice if a link already exists also on user.
|
||||||
$compta_user = $userstatic->accountancy_code;
|
$compta_user = $userstatic->accountancy_code;
|
||||||
if ($compta_user) {
|
if ($compta_user) {
|
||||||
$tabtp[$obj->rowid][$compta_user] += $obj->amount;
|
$tabtp[$obj->rowid][$compta_user] += $amounttouse;
|
||||||
$tabuser[$obj->rowid] = array(
|
$tabuser[$obj->rowid] = array(
|
||||||
'id' => $userstatic->id,
|
'id' => $userstatic->id,
|
||||||
'name' => dolGetFirstLastname($userstatic->firstname, $userstatic->lastname),
|
'name' => dolGetFirstLastname($userstatic->firstname, $userstatic->lastname),
|
||||||
@ -465,14 +472,14 @@ if ($result) {
|
|||||||
$account_various = (!empty($paymentvariousstatic->accountancy_code) ? $paymentvariousstatic->accountancy_code : 'NotDefined'); // NotDefined is a reserved word
|
$account_various = (!empty($paymentvariousstatic->accountancy_code) ? $paymentvariousstatic->accountancy_code : 'NotDefined'); // NotDefined is a reserved word
|
||||||
$account_subledger = (!empty($paymentvariousstatic->subledger_account) ? $paymentvariousstatic->subledger_account : ''); // NotDefined is a reserved word
|
$account_subledger = (!empty($paymentvariousstatic->subledger_account) ? $paymentvariousstatic->subledger_account : ''); // NotDefined is a reserved word
|
||||||
$tabpay[$obj->rowid]["account_various"] = $account_various;
|
$tabpay[$obj->rowid]["account_various"] = $account_various;
|
||||||
$tabtp[$obj->rowid][$account_subledger] += $obj->amount;
|
$tabtp[$obj->rowid][$account_subledger] += $amounttouse;
|
||||||
} elseif ($links[$key]['type'] == 'payment_loan') {
|
} elseif ($links[$key]['type'] == 'payment_loan') {
|
||||||
$paymentloanstatic->id = $links[$key]['url_id'];
|
$paymentloanstatic->id = $links[$key]['url_id'];
|
||||||
$paymentloanstatic->ref = $links[$key]['url_id'];
|
$paymentloanstatic->ref = $links[$key]['url_id'];
|
||||||
$paymentloanstatic->fk_loan = $links[$key]['url_id'];
|
$paymentloanstatic->fk_loan = $links[$key]['url_id'];
|
||||||
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentloanstatic->getNomUrl(2);
|
$tabpay[$obj->rowid]["lib"] .= ' '.$paymentloanstatic->getNomUrl(2);
|
||||||
$tabpay[$obj->rowid]["paymentloanid"] = $paymentloanstatic->id;
|
$tabpay[$obj->rowid]["paymentloanid"] = $paymentloanstatic->id;
|
||||||
//$tabtp[$obj->rowid][$account_pay_loan] += $obj->amount;
|
//$tabtp[$obj->rowid][$account_pay_loan] += $amounttouse;
|
||||||
$sqlmid = 'SELECT pl.amount_capital, pl.amount_insurance, pl.amount_interest, l.accountancy_account_capital, l.accountancy_account_insurance, l.accountancy_account_interest';
|
$sqlmid = 'SELECT pl.amount_capital, pl.amount_insurance, pl.amount_interest, l.accountancy_account_capital, l.accountancy_account_insurance, l.accountancy_account_interest';
|
||||||
$sqlmid .= ' FROM '.MAIN_DB_PREFIX.'payment_loan as pl, '.MAIN_DB_PREFIX.'loan as l';
|
$sqlmid .= ' FROM '.MAIN_DB_PREFIX.'payment_loan as pl, '.MAIN_DB_PREFIX.'loan as l';
|
||||||
$sqlmid .= ' WHERE l.rowid = pl.fk_loan AND pl.fk_bank = '.((int) $obj->rowid);
|
$sqlmid .= ' WHERE l.rowid = pl.fk_loan AND pl.fk_bank = '.((int) $obj->rowid);
|
||||||
@ -488,14 +495,14 @@ if ($result) {
|
|||||||
} elseif ($links[$key]['type'] == 'banktransfert') {
|
} elseif ($links[$key]['type'] == 'banktransfert') {
|
||||||
$accountLinestatic->fetch($links[$key]['url_id']);
|
$accountLinestatic->fetch($links[$key]['url_id']);
|
||||||
$tabpay[$obj->rowid]["lib"] .= ' '.$langs->trans("BankTransfer").'- '.$accountLinestatic ->getNomUrl(1);
|
$tabpay[$obj->rowid]["lib"] .= ' '.$langs->trans("BankTransfer").'- '.$accountLinestatic ->getNomUrl(1);
|
||||||
$tabtp[$obj->rowid][$account_transfer] += $obj->amount;
|
$tabtp[$obj->rowid][$account_transfer] += $amounttouse;
|
||||||
$bankaccountstatic->fetch($tabpay[$obj->rowid]['fk_bank_account']);
|
$bankaccountstatic->fetch($tabpay[$obj->rowid]['fk_bank_account']);
|
||||||
$tabpay[$obj->rowid]["soclib"] = $bankaccountstatic->getNomUrl(2);
|
$tabpay[$obj->rowid]["soclib"] = $bankaccountstatic->getNomUrl(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$tabbq[$obj->rowid][$compta_bank] += $obj->amount;
|
$tabbq[$obj->rowid][$compta_bank] += $amounttouse;
|
||||||
|
|
||||||
// If no links were found to know the amount on thirdparty, we try to guess it.
|
// If no links were found to know the amount on thirdparty, we try to guess it.
|
||||||
// This may happens on bank entries without the links lines to 'company'.
|
// This may happens on bank entries without the links lines to 'company'.
|
||||||
@ -542,7 +549,7 @@ if ($result) {
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// if($obj->socid)$tabtp[$obj->rowid][$compta_soc] += $obj->amount;
|
// if($obj->socid)$tabtp[$obj->rowid][$compta_soc] += $amounttouse;
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -513,9 +513,10 @@ class Account extends CommonObject
|
|||||||
* @param string $accountancycode When we record a free bank entry, we must provide accounting account if accountancy module is on.
|
* @param string $accountancycode When we record a free bank entry, we must provide accounting account if accountancy module is on.
|
||||||
* @param int $datev Date value
|
* @param int $datev Date value
|
||||||
* @param string $num_releve Label of bank receipt for reconciliation
|
* @param string $num_releve Label of bank receipt for reconciliation
|
||||||
|
* @param float $amount_main_currency Amount
|
||||||
* @return int Rowid of added entry, <0 if KO
|
* @return int Rowid of added entry, <0 if KO
|
||||||
*/
|
*/
|
||||||
public function addline($date, $oper, $label, $amount, $num_chq, $categorie, User $user, $emetteur = '', $banque = '', $accountancycode = '', $datev = null, $num_releve = '')
|
public function addline($date, $oper, $label, $amount, $num_chq, $categorie, User $user, $emetteur = '', $banque = '', $accountancycode = '', $datev = null, $num_releve = '', $amount_main_currency = null)
|
||||||
{
|
{
|
||||||
// Deprecation warning
|
// Deprecation warning
|
||||||
if (is_numeric($oper)) {
|
if (is_numeric($oper)) {
|
||||||
@ -573,6 +574,7 @@ class Account extends CommonObject
|
|||||||
$accline->datev = $datev;
|
$accline->datev = $datev;
|
||||||
$accline->label = $label;
|
$accline->label = $label;
|
||||||
$accline->amount = $amount;
|
$accline->amount = $amount;
|
||||||
|
$accline->amount_main_currency = $amount_main_currency;
|
||||||
$accline->fk_user_author = $user->id;
|
$accline->fk_user_author = $user->id;
|
||||||
$accline->fk_account = $this->id;
|
$accline->fk_account = $this->id;
|
||||||
$accline->fk_type = $oper;
|
$accline->fk_type = $oper;
|
||||||
@ -1789,7 +1791,8 @@ class AccountLine extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public $datev;
|
public $datev;
|
||||||
|
|
||||||
public $amount;
|
public $amount; /* Amount of payment in the bank account currency */
|
||||||
|
public $amount_main_currency; /* Amount in the currency of company if bank account use another currency */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var int ID
|
* @var int ID
|
||||||
@ -1950,6 +1953,7 @@ class AccountLine extends CommonObject
|
|||||||
$sql .= ", datev";
|
$sql .= ", datev";
|
||||||
$sql .= ", label";
|
$sql .= ", label";
|
||||||
$sql .= ", amount";
|
$sql .= ", amount";
|
||||||
|
$sql .= ", amount_main_currency";
|
||||||
$sql .= ", fk_user_author";
|
$sql .= ", fk_user_author";
|
||||||
$sql .= ", num_chq";
|
$sql .= ", num_chq";
|
||||||
$sql .= ", fk_account";
|
$sql .= ", fk_account";
|
||||||
@ -1964,7 +1968,8 @@ class AccountLine extends CommonObject
|
|||||||
$sql .= ", '".$this->db->idate($this->datev)."'";
|
$sql .= ", '".$this->db->idate($this->datev)."'";
|
||||||
$sql .= ", '".$this->db->escape($this->label)."'";
|
$sql .= ", '".$this->db->escape($this->label)."'";
|
||||||
$sql .= ", ".price2num($this->amount);
|
$sql .= ", ".price2num($this->amount);
|
||||||
$sql .= ", ".($this->fk_user_author > 0 ? $this->fk_user_author : "null");
|
$sql .= ", ".(empty($this->amount_main_currency) ? "NULL" : price2num($this->amount_main_currency));
|
||||||
|
$sql .= ", ".($this->fk_user_author > 0 ? ((int) $this->fk_user_author) : "null");
|
||||||
$sql .= ", ".($this->num_chq ? "'".$this->db->escape($this->num_chq)."'" : "null");
|
$sql .= ", ".($this->num_chq ? "'".$this->db->escape($this->num_chq)."'" : "null");
|
||||||
$sql .= ", '".$this->db->escape($this->fk_account)."'";
|
$sql .= ", '".$this->db->escape($this->fk_account)."'";
|
||||||
$sql .= ", '".$this->db->escape($this->fk_type)."'";
|
$sql .= ", '".$this->db->escape($this->fk_type)."'";
|
||||||
|
|||||||
@ -133,7 +133,7 @@ if (empty($reshook)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$formquestion[$i++] = array('type' => 'hidden', 'name' => $key, 'value' => $_POST[$key]);
|
$formquestion[$i++] = array('type' => 'hidden', 'name' => $key, 'value' => GETPOST($key));
|
||||||
} elseif (substr($key, 0, 21) == 'multicurrency_amount_') {
|
} elseif (substr($key, 0, 21) == 'multicurrency_amount_') {
|
||||||
$cursorfacid = substr($key, 21);
|
$cursorfacid = substr($key, 21);
|
||||||
$multicurrency_amounts[$cursorfacid] = price2num(GETPOST($key));
|
$multicurrency_amounts[$cursorfacid] = price2num(GETPOST($key));
|
||||||
@ -190,6 +190,7 @@ if (empty($reshook)) {
|
|||||||
|
|
||||||
// Check if payments in both currency
|
// Check if payments in both currency
|
||||||
if ($totalpayment > 0 && $multicurrency_totalpayment > 0) {
|
if ($totalpayment > 0 && $multicurrency_totalpayment > 0) {
|
||||||
|
$langs->load("errors");
|
||||||
setEventMessages($langs->transnoentities('ErrorPaymentInBothCurrency'), null, 'errors');
|
setEventMessages($langs->transnoentities('ErrorPaymentInBothCurrency'), null, 'errors');
|
||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
@ -220,6 +221,8 @@ if (empty($reshook)) {
|
|||||||
$thirdparty->fetch($socid);
|
$thirdparty->fetch($socid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$multicurrency_code = array();
|
||||||
|
|
||||||
// Clean parameters amount if payment is for a credit note
|
// Clean parameters amount if payment is for a credit note
|
||||||
foreach ($amounts as $key => $value) { // How payment is dispatched
|
foreach ($amounts as $key => $value) { // How payment is dispatched
|
||||||
$tmpinvoice = new Facture($db);
|
$tmpinvoice = new Facture($db);
|
||||||
@ -228,6 +231,7 @@ if (empty($reshook)) {
|
|||||||
$newvalue = price2num($value, 'MT');
|
$newvalue = price2num($value, 'MT');
|
||||||
$amounts[$key] = - abs($newvalue);
|
$amounts[$key] = - abs($newvalue);
|
||||||
}
|
}
|
||||||
|
$multicurrency_code[$key] = $tmpinvoice->multicurrency_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($multicurrency_amounts as $key => $value) { // How payment is dispatched
|
foreach ($multicurrency_amounts as $key => $value) { // How payment is dispatched
|
||||||
@ -237,6 +241,7 @@ if (empty($reshook)) {
|
|||||||
$newvalue = price2num($value, 'MT');
|
$newvalue = price2num($value, 'MT');
|
||||||
$multicurrency_amounts[$key] = - abs($newvalue);
|
$multicurrency_amounts[$key] = - abs($newvalue);
|
||||||
}
|
}
|
||||||
|
$multicurrency_code[$key] = $tmpinvoice->multicurrency_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->banque->enabled)) {
|
if (!empty($conf->banque->enabled)) {
|
||||||
@ -252,13 +257,16 @@ if (empty($reshook)) {
|
|||||||
$paiement->datepaye = $datepaye;
|
$paiement->datepaye = $datepaye;
|
||||||
$paiement->amounts = $amounts; // Array with all payments dispatching with invoice id
|
$paiement->amounts = $amounts; // Array with all payments dispatching with invoice id
|
||||||
$paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching
|
$paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching
|
||||||
|
$paiement->multicurrency_code = $multicurrency_code; // Array with all currency of payments dispatching
|
||||||
$paiement->paiementid = dol_getIdFromCode($db, GETPOST('paiementcode'), 'c_paiement', 'code', 'id', 1);
|
$paiement->paiementid = dol_getIdFromCode($db, GETPOST('paiementcode'), 'c_paiement', 'code', 'id', 1);
|
||||||
$paiement->num_payment = GETPOST('num_paiement', 'alpha');
|
$paiement->num_payment = GETPOST('num_paiement', 'alpha');
|
||||||
$paiement->note_private = GETPOST('comment', 'alpha');
|
$paiement->note_private = GETPOST('comment', 'alpha');
|
||||||
|
$paiement->fk_account = GETPOST('accountid', 'int');
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
// Create payment and update this->multicurrency_amounts if this->amounts filled or
|
// Create payment and update this->multicurrency_amounts if this->amounts filled or
|
||||||
// this->amounts if this->multicurrency_amounts filled.
|
// this->amounts if this->multicurrency_amounts filled.
|
||||||
|
// This also set ->amount and ->multicurrency_amount
|
||||||
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices') == 'on' ? 1 : 0), $thirdparty); // This include closing invoices and regenerating documents
|
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices') == 'on' ? 1 : 0), $thirdparty); // This include closing invoices and regenerating documents
|
||||||
if ($paiement_id < 0) {
|
if ($paiement_id < 0) {
|
||||||
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
||||||
@ -271,7 +279,7 @@ if (empty($reshook)) {
|
|||||||
if (GETPOST('type') == Facture::TYPE_CREDIT_NOTE) {
|
if (GETPOST('type') == Facture::TYPE_CREDIT_NOTE) {
|
||||||
$label = '(CustomerInvoicePaymentBack)'; // Refund of a credit note
|
$label = '(CustomerInvoicePaymentBack)'; // Refund of a credit note
|
||||||
}
|
}
|
||||||
$result = $paiement->addPaymentToBank($user, 'payment', $label, GETPOST('accountid'), GETPOST('chqemetteur'), GETPOST('chqbank'));
|
$result = $paiement->addPaymentToBank($user, 'payment', $label, GETPOST('accountid', 'int'), GETPOST('chqemetteur'), GETPOST('chqbank'));
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
||||||
$error++;
|
$error++;
|
||||||
|
|||||||
@ -72,8 +72,9 @@ class Paiement extends CommonObject
|
|||||||
|
|
||||||
public $amount; // Total amount of payment (in the main currency)
|
public $amount; // Total amount of payment (in the main currency)
|
||||||
public $multicurrency_amount; // Total amount of payment (in the currency of the bank account)
|
public $multicurrency_amount; // Total amount of payment (in the currency of the bank account)
|
||||||
public $amounts = array(); // array: invoice ID => amount for that invoice (in the main currency)>
|
public $amounts = array(); // array: invoice ID => amount for that invoice (in the main currency)
|
||||||
public $multicurrency_amounts = array(); // array: invoice ID => amount for that invoice (in the invoice's currency)>
|
public $multicurrency_amounts = array(); // array: invoice ID => amount for that invoice (in the invoice's currency)
|
||||||
|
public $multicurrency_code = array(); // array: invoice ID => currency code for that invoice
|
||||||
|
|
||||||
public $pos_change = 0; // Excess received in TakePOS cash payment
|
public $pos_change = 0; // Excess received in TakePOS cash payment
|
||||||
|
|
||||||
@ -82,12 +83,12 @@ class Paiement extends CommonObject
|
|||||||
public $paiementcode; // Code of payment.
|
public $paiementcode; // Code of payment.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string type libelle
|
* @var string Type of payment label
|
||||||
*/
|
*/
|
||||||
public $type_label;
|
public $type_label;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string type code
|
* @var string Type of payment code (seems duplicate with $paiementcode);
|
||||||
*/
|
*/
|
||||||
public $type_code;
|
public $type_code;
|
||||||
|
|
||||||
@ -230,7 +231,7 @@ class Paiement extends CommonObject
|
|||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
|
|
||||||
$error = 0;
|
$error = 0;
|
||||||
$way = $this->getWay();
|
$way = $this->getWay(); // 'dolibarr' to use amount, 'customer' to use foreign multicurrency amount
|
||||||
|
|
||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
|
|
||||||
@ -239,16 +240,37 @@ class Paiement extends CommonObject
|
|||||||
$totalamount_converted = 0;
|
$totalamount_converted = 0;
|
||||||
$atleastonepaymentnotnull = 0;
|
$atleastonepaymentnotnull = 0;
|
||||||
|
|
||||||
if ($way == 'dolibarr') {
|
if ($way == 'dolibarr') { // Payments were entered into the column of main currency
|
||||||
$amounts = &$this->amounts;
|
$amounts = &$this->amounts;
|
||||||
$amounts_to_update = &$this->multicurrency_amounts;
|
$amounts_to_update = &$this->multicurrency_amounts;
|
||||||
} else {
|
} else { // Payments were entered into the column of foreign currency
|
||||||
$amounts = &$this->multicurrency_amounts;
|
$amounts = &$this->multicurrency_amounts;
|
||||||
$amounts_to_update = &$this->amounts;
|
$amounts_to_update = &$this->amounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$currencyofpayment = '';
|
||||||
|
|
||||||
foreach ($amounts as $key => $value) { // How payment is dispatch
|
foreach ($amounts as $key => $value) { // How payment is dispatch
|
||||||
|
if (empty($value)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// $key is id of invoice, $value is amount, $way is a 'dolibarr' if amount is in main currency, 'customer' if in foreign currency
|
||||||
$value_converted = Multicurrency::getAmountConversionFromInvoiceRate($key, $value, $way);
|
$value_converted = Multicurrency::getAmountConversionFromInvoiceRate($key, $value, $way);
|
||||||
|
// Add controls of input validity
|
||||||
|
if ($value_converted === false) {
|
||||||
|
// We failed to find the conversion for one invoice
|
||||||
|
$this->error = 'FailedToFoundTheConversionRateForInvoice';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (empty($currencyofpayment)) {
|
||||||
|
$currencyofpayment = $this->multicurrency_code[$key];
|
||||||
|
}
|
||||||
|
if ($currencyofpayment != $this->multicurrency_code[$key]) {
|
||||||
|
// If we have invoices with different currencies in the payment, we stop here
|
||||||
|
$this->error = 'ErrorYouTryToPayInvoicesWithDifferentCurrenciesInSamePayment';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
$totalamount_converted += $value_converted;
|
$totalamount_converted += $value_converted;
|
||||||
$amounts_to_update[$key] = price2num($value_converted, 'MT');
|
$amounts_to_update[$key] = price2num($value_converted, 'MT');
|
||||||
|
|
||||||
@ -260,6 +282,19 @@ class Paiement extends CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($currencyofpayment)) {
|
||||||
|
// We must check that the currency of invoices is the same than the currency of the bank
|
||||||
|
$bankaccount = new Account($this->db);
|
||||||
|
$bankaccount->fetch($this->fk_account);
|
||||||
|
$bankcurrencycode = empty($bankaccount->currency_code) ? $conf->currency : $bankaccount->currency_code;
|
||||||
|
if ($currencyofpayment != $bankcurrencycode && $currencyofpayment != $conf->currency && $bankcurrencycode != $conf->currency) {
|
||||||
|
$langs->load("errors");
|
||||||
|
$this->error = $langs->trans('ErrorYouTryToPayInvoicesInACurrencyFromBankWithAnotherCurrency', $currencyofpayment, $bankcurrencycode);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$totalamount = price2num($totalamount);
|
$totalamount = price2num($totalamount);
|
||||||
$totalamount_converted = price2num($totalamount_converted);
|
$totalamount_converted = price2num($totalamount_converted);
|
||||||
|
|
||||||
@ -597,17 +632,22 @@ class Paiement extends CommonObject
|
|||||||
$result = $acc->fetch($this->fk_account);
|
$result = $acc->fetch($this->fk_account);
|
||||||
|
|
||||||
$totalamount = $this->amount;
|
$totalamount = $this->amount;
|
||||||
|
$totalamount_main_currency = null;
|
||||||
if (empty($totalamount)) {
|
if (empty($totalamount)) {
|
||||||
$totalamount = $this->total; // For backward compatibility
|
$totalamount = $this->total; // For backward compatibility
|
||||||
}
|
}
|
||||||
|
|
||||||
// if dolibarr currency != bank currency then we received an amount in customer currency (currently I don't manage the case : my currency is USD, the customer currency is EUR and he paid me in GBP. Seems no sense for me)
|
// if dolibarr currency != bank currency then we received an amount in customer currency (currently I don't manage the case : my currency is USD, the customer currency is EUR and he paid me in GBP. Seems no sense for me)
|
||||||
if (!empty($conf->multicurrency->enabled) && $conf->currency != $acc->currency_code) {
|
if (!empty($conf->multicurrency->enabled) && $conf->currency != $acc->currency_code) {
|
||||||
$totalamount = $this->multicurrency_amount;
|
$totalamount = $this->multicurrency_amount; // We will insert into llx_bank.amount in foreign currency
|
||||||
|
$totalamount_main_currency = $this->amount; // We will also save the amount in main currency into column llx_bank.amount_main_currency
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($mode == 'payment_supplier') {
|
if ($mode == 'payment_supplier') {
|
||||||
$totalamount = -$totalamount;
|
$totalamount = -$totalamount;
|
||||||
|
if (isset($totalamount_main_currency)) {
|
||||||
|
$totalamount_main_currency = -$totalamount_main_currency;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert payment into llx_bank
|
// Insert payment into llx_bank
|
||||||
@ -621,8 +661,11 @@ class Paiement extends CommonObject
|
|||||||
$user,
|
$user,
|
||||||
$emetteur_nom,
|
$emetteur_nom,
|
||||||
$emetteur_banque,
|
$emetteur_banque,
|
||||||
$accountancycode
|
$accountancycode,
|
||||||
);
|
null,
|
||||||
|
'',
|
||||||
|
$totalamount_main_currency
|
||||||
|
);
|
||||||
|
|
||||||
// Mise a jour fk_bank dans llx_paiement
|
// Mise a jour fk_bank dans llx_paiement
|
||||||
// On connait ainsi le paiement qui a genere l'ecriture bancaire
|
// On connait ainsi le paiement qui a genere l'ecriture bancaire
|
||||||
@ -667,7 +710,7 @@ class Paiement extends CommonObject
|
|||||||
DOL_URL_ROOT.'/comm/card.php?socid=',
|
DOL_URL_ROOT.'/comm/card.php?socid=',
|
||||||
$fac->thirdparty->name,
|
$fac->thirdparty->name,
|
||||||
'company'
|
'company'
|
||||||
);
|
);
|
||||||
if ($result <= 0) {
|
if ($result <= 0) {
|
||||||
dol_syslog(get_class($this).'::addPaymentToBank '.$this->db->lasterror());
|
dol_syslog(get_class($this).'::addPaymentToBank '.$this->db->lasterror());
|
||||||
}
|
}
|
||||||
@ -685,7 +728,7 @@ class Paiement extends CommonObject
|
|||||||
DOL_URL_ROOT.'/fourn/card.php?socid=',
|
DOL_URL_ROOT.'/fourn/card.php?socid=',
|
||||||
$fac->thirdparty->name,
|
$fac->thirdparty->name,
|
||||||
'company'
|
'company'
|
||||||
);
|
);
|
||||||
if ($result <= 0) {
|
if ($result <= 0) {
|
||||||
dol_syslog(get_class($this).'::addPaymentToBank '.$this->db->lasterror());
|
dol_syslog(get_class($this).'::addPaymentToBank '.$this->db->lasterror());
|
||||||
}
|
}
|
||||||
@ -703,7 +746,7 @@ class Paiement extends CommonObject
|
|||||||
DOL_URL_ROOT.'/compta/prelevement/card.php?id=',
|
DOL_URL_ROOT.'/compta/prelevement/card.php?id=',
|
||||||
$this->num_payment,
|
$this->num_payment,
|
||||||
'withdraw'
|
'withdraw'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add link 'InvoiceRefused' in bank_url
|
// Add link 'InvoiceRefused' in bank_url
|
||||||
@ -714,7 +757,7 @@ class Paiement extends CommonObject
|
|||||||
DOL_URL_ROOT.'/compta/prelevement/card.php?id=',
|
DOL_URL_ROOT.'/compta/prelevement/card.php?id=',
|
||||||
$this->num_prelevement,
|
$this->num_prelevement,
|
||||||
'withdraw'
|
'withdraw'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error && !$notrigger) {
|
if (!$error && !$notrigger) {
|
||||||
@ -1241,40 +1284,40 @@ class Paiement extends CommonObject
|
|||||||
|
|
||||||
$langs->load('compta');
|
$langs->load('compta');
|
||||||
/*if ($mode == 0)
|
/*if ($mode == 0)
|
||||||
{
|
{
|
||||||
if ($status == 0) return $langs->trans('ToValidate');
|
if ($status == 0) return $langs->trans('ToValidate');
|
||||||
if ($status == 1) return $langs->trans('Validated');
|
if ($status == 1) return $langs->trans('Validated');
|
||||||
}
|
}
|
||||||
if ($mode == 1)
|
if ($mode == 1)
|
||||||
{
|
{
|
||||||
if ($status == 0) return $langs->trans('ToValidate');
|
if ($status == 0) return $langs->trans('ToValidate');
|
||||||
if ($status == 1) return $langs->trans('Validated');
|
if ($status == 1) return $langs->trans('Validated');
|
||||||
}
|
}
|
||||||
if ($mode == 2)
|
if ($mode == 2)
|
||||||
{
|
{
|
||||||
if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut1').' '.$langs->trans('ToValidate');
|
if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut1').' '.$langs->trans('ToValidate');
|
||||||
if ($status == 1) return img_picto($langs->trans('Validated'),'statut4').' '.$langs->trans('Validated');
|
if ($status == 1) return img_picto($langs->trans('Validated'),'statut4').' '.$langs->trans('Validated');
|
||||||
}
|
}
|
||||||
if ($mode == 3)
|
if ($mode == 3)
|
||||||
{
|
{
|
||||||
if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut1');
|
if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut1');
|
||||||
if ($status == 1) return img_picto($langs->trans('Validated'),'statut4');
|
if ($status == 1) return img_picto($langs->trans('Validated'),'statut4');
|
||||||
}
|
}
|
||||||
if ($mode == 4)
|
if ($mode == 4)
|
||||||
{
|
{
|
||||||
if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut1').' '.$langs->trans('ToValidate');
|
if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut1').' '.$langs->trans('ToValidate');
|
||||||
if ($status == 1) return img_picto($langs->trans('Validated'),'statut4').' '.$langs->trans('Validated');
|
if ($status == 1) return img_picto($langs->trans('Validated'),'statut4').' '.$langs->trans('Validated');
|
||||||
}
|
}
|
||||||
if ($mode == 5)
|
if ($mode == 5)
|
||||||
{
|
{
|
||||||
if ($status == 0) return $langs->trans('ToValidate').' '.img_picto($langs->trans('ToValidate'),'statut1');
|
if ($status == 0) return $langs->trans('ToValidate').' '.img_picto($langs->trans('ToValidate'),'statut1');
|
||||||
if ($status == 1) return $langs->trans('Validated').' '.img_picto($langs->trans('Validated'),'statut4');
|
if ($status == 1) return $langs->trans('Validated').' '.img_picto($langs->trans('Validated'),'statut4');
|
||||||
}
|
}
|
||||||
if ($mode == 6)
|
if ($mode == 6)
|
||||||
{
|
{
|
||||||
if ($status == 0) return $langs->trans('ToValidate').' '.img_picto($langs->trans('ToValidate'),'statut1');
|
if ($status == 0) return $langs->trans('ToValidate').' '.img_picto($langs->trans('ToValidate'),'statut1');
|
||||||
if ($status == 1) return $langs->trans('Validated').' '.img_picto($langs->trans('Validated'),'statut4');
|
if ($status == 1) return $langs->trans('Validated').' '.img_picto($langs->trans('Validated'),'statut4');
|
||||||
}*/
|
}*/
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -160,11 +160,12 @@ class PaiementFourn extends Paiement
|
|||||||
$error = 0;
|
$error = 0;
|
||||||
$way = $this->getWay();
|
$way = $this->getWay();
|
||||||
|
|
||||||
|
$now = dol_now();
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
$totalamount = 0;
|
$totalamount = 0;
|
||||||
$totalamount_converted = 0;
|
$totalamount_converted = 0;
|
||||||
|
$atleastonepaymentnotnull = 0;
|
||||||
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
|
||||||
|
|
||||||
if ($way == 'dolibarr') {
|
if ($way == 'dolibarr') {
|
||||||
$amounts = &$this->amounts;
|
$amounts = &$this->amounts;
|
||||||
@ -174,23 +175,62 @@ class PaiementFourn extends Paiement
|
|||||||
$amounts_to_update = &$this->amounts;
|
$amounts_to_update = &$this->amounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$currencyofpayment = '';
|
||||||
|
|
||||||
foreach ($amounts as $key => $value) {
|
foreach ($amounts as $key => $value) {
|
||||||
|
if (empty($value)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// $key is id of invoice, $value is amount, $way is a 'dolibarr' if amount is in main currency, 'customer' if in foreign currency
|
||||||
$value_converted = Multicurrency::getAmountConversionFromInvoiceRate($key, $value ? $value : 0, $way, 'facture_fourn');
|
$value_converted = Multicurrency::getAmountConversionFromInvoiceRate($key, $value ? $value : 0, $way, 'facture_fourn');
|
||||||
|
// Add controls of input validity
|
||||||
|
if ($value_converted === false) {
|
||||||
|
// We failed to find the conversion for one invoice
|
||||||
|
$this->error = 'FailedToFoundTheConversionRateForInvoice';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (empty($currencyofpayment)) {
|
||||||
|
$currencyofpayment = $this->multicurrency_code[$key];
|
||||||
|
}
|
||||||
|
if ($currencyofpayment != $this->multicurrency_code[$key]) {
|
||||||
|
// If we have invoices with different currencies in the payment, we stop here
|
||||||
|
$this->error = 'ErrorYouTryToPayInvoicesWithDifferentCurrenciesInSamePayment';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
$totalamount_converted += $value_converted;
|
$totalamount_converted += $value_converted;
|
||||||
$amounts_to_update[$key] = price2num($value_converted, 'MT');
|
$amounts_to_update[$key] = price2num($value_converted, 'MT');
|
||||||
|
|
||||||
$newvalue = price2num($value, 'MT');
|
$newvalue = price2num($value, 'MT');
|
||||||
$amounts[$key] = $newvalue;
|
$amounts[$key] = $newvalue;
|
||||||
$totalamount += $newvalue;
|
$totalamount += $newvalue;
|
||||||
|
if (!empty($newvalue)) {
|
||||||
|
$atleastonepaymentnotnull++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($currencyofpayment)) {
|
||||||
|
// We must check that the currency of invoices is the same than the currency of the bank
|
||||||
|
$bankaccount = new Account($this->db);
|
||||||
|
$bankaccount->fetch($this->fk_account);
|
||||||
|
$bankcurrencycode = empty($bankaccount->currency_code) ? $conf->currency : $bankaccount->currency_code;
|
||||||
|
if ($currencyofpayment != $bankcurrencycode && $currencyofpayment != $conf->currency && $bankcurrencycode != $conf->currency) {
|
||||||
|
$langs->load("errors");
|
||||||
|
$this->error = $langs->trans('ErrorYouTryToPayInvoicesInACurrencyFromBankWithAnotherCurrency', $currencyofpayment, $bankcurrencycode);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$totalamount = price2num($totalamount);
|
$totalamount = price2num($totalamount);
|
||||||
$totalamount_converted = price2num($totalamount_converted);
|
$totalamount_converted = price2num($totalamount_converted);
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
if ($totalamount <> 0) { // On accepte les montants negatifs
|
if ($totalamount <> 0) { // On accepte les montants negatifs
|
||||||
$ref = $this->getNextNumRef(is_object($thirdparty) ? $thirdparty : '');
|
$ref = $this->getNextNumRef(is_object($thirdparty) ? $thirdparty : '');
|
||||||
$now = dol_now();
|
|
||||||
|
|
||||||
if ($way == 'dolibarr') {
|
if ($way == 'dolibarr') {
|
||||||
$total = $totalamount;
|
$total = $totalamount;
|
||||||
@ -346,7 +386,7 @@ class PaiementFourn extends Paiement
|
|||||||
$this->total = $total;
|
$this->total = $total;
|
||||||
$this->multicurrency_amount = $mtotal;
|
$this->multicurrency_amount = $mtotal;
|
||||||
$this->db->commit();
|
$this->db->commit();
|
||||||
dol_syslog('PaiementFourn::Create Ok Total = '.$this->total);
|
dol_syslog('PaiementFourn::Create Ok Total = '.$this->amount.', Total currency = '.$this->multicurrency_amount);
|
||||||
return $this->id;
|
return $this->id;
|
||||||
} else {
|
} else {
|
||||||
$this->db->rollback();
|
$this->db->rollback();
|
||||||
|
|||||||
@ -252,6 +252,8 @@ if (empty($reshook)) {
|
|||||||
|
|
||||||
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
|
$datepaye = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
|
||||||
|
|
||||||
|
$multicurrency_code = array();
|
||||||
|
|
||||||
// Clean parameters amount if payment is for a credit note
|
// Clean parameters amount if payment is for a credit note
|
||||||
foreach ($amounts as $key => $value) { // How payment is dispatched
|
foreach ($amounts as $key => $value) { // How payment is dispatched
|
||||||
$tmpinvoice = new FactureFournisseur($db);
|
$tmpinvoice = new FactureFournisseur($db);
|
||||||
@ -260,6 +262,7 @@ if (empty($reshook)) {
|
|||||||
$newvalue = price2num($value, 'MT');
|
$newvalue = price2num($value, 'MT');
|
||||||
$amounts[$key] = - abs($newvalue);
|
$amounts[$key] = - abs($newvalue);
|
||||||
}
|
}
|
||||||
|
$multicurrency_code[$key] = $tmpinvoice->multicurrency_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($multicurrency_amounts as $key => $value) { // How payment is dispatched
|
foreach ($multicurrency_amounts as $key => $value) { // How payment is dispatched
|
||||||
@ -269,6 +272,7 @@ if (empty($reshook)) {
|
|||||||
$newvalue = price2num($value, 'MT');
|
$newvalue = price2num($value, 'MT');
|
||||||
$multicurrency_amounts[$key] = - abs($newvalue);
|
$multicurrency_amounts[$key] = - abs($newvalue);
|
||||||
}
|
}
|
||||||
|
$multicurrency_code[$key] = $tmpinvoice->multicurrency_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
//var_dump($amounts);
|
//var_dump($amounts);
|
||||||
@ -288,12 +292,16 @@ if (empty($reshook)) {
|
|||||||
$paiement->datepaye = $datepaye;
|
$paiement->datepaye = $datepaye;
|
||||||
$paiement->amounts = $amounts; // Array of amounts
|
$paiement->amounts = $amounts; // Array of amounts
|
||||||
$paiement->multicurrency_amounts = $multicurrency_amounts;
|
$paiement->multicurrency_amounts = $multicurrency_amounts;
|
||||||
|
$paiement->multicurrency_code = $multicurrency_code; // Array with all currency of payments dispatching
|
||||||
$paiement->paiementid = GETPOST('paiementid', 'int');
|
$paiement->paiementid = GETPOST('paiementid', 'int');
|
||||||
|
|
||||||
$paiement->num_payment = GETPOST('num_paiement', 'alphanohtml');
|
$paiement->num_payment = GETPOST('num_paiement', 'alphanohtml');
|
||||||
$paiement->note_private = GETPOST('comment', 'alpha');
|
$paiement->note_private = GETPOST('comment', 'alpha');
|
||||||
|
$paiement->fk_account = GETPOST('accountid', 'int');
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
|
// Create payment and update this->multicurrency_amounts if this->amounts filled or
|
||||||
|
// this->amounts if this->multicurrency_amounts filled.
|
||||||
|
// This also set ->amount and ->multicurrency_amount
|
||||||
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices') == 'on' ? 1 : 0), $thirdparty);
|
$paiement_id = $paiement->create($user, (GETPOST('closepaidinvoices') == 'on' ? 1 : 0), $thirdparty);
|
||||||
if ($paiement_id < 0) {
|
if ($paiement_id < 0) {
|
||||||
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
||||||
@ -302,7 +310,7 @@ if (empty($reshook)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$result = $paiement->addPaymentToBank($user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, '', '');
|
$result = $paiement->addPaymentToBank($user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, GETPOST('chqemetteur'), GETPOST('chqbank'));
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
setEventMessages($paiement->error, $paiement->errors, 'errors');
|
||||||
$error++;
|
$error++;
|
||||||
|
|||||||
@ -509,3 +509,8 @@ INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) value
|
|||||||
|
|
||||||
-- VMYSQL4.3 ALTER TABLE llx_user MODIFY COLUMN fk_soc integer NULL;
|
-- VMYSQL4.3 ALTER TABLE llx_user MODIFY COLUMN fk_soc integer NULL;
|
||||||
-- VPGSQL8.2 ALTER TABLE llx_user ALTER COLUMN fk_soc DROP NOT NULL;
|
-- VPGSQL8.2 ALTER TABLE llx_user ALTER COLUMN fk_soc DROP NOT NULL;
|
||||||
|
|
||||||
|
-- Add column to help to fix a very critical bug when transferring into accounting bank record of a bank account into another currency.
|
||||||
|
-- Idea is to update this column manually in v15 with value in currency of company for bank that are not into the main currency and the transfer
|
||||||
|
-- into accounting will use it in priority if value is not null.
|
||||||
|
ALTER TABLE llx_bank ADD COLUMN amount_main_currency double(24,8) NULL;
|
||||||
|
|||||||
@ -557,3 +557,8 @@ UPDATE llx_facturedet SET situation_percent = 100 WHERE situation_percent IS NUL
|
|||||||
|
|
||||||
DELETE FROM llx_rights_def WHERE module = 'hrm' AND perms = 'employee';
|
DELETE FROM llx_rights_def WHERE module = 'hrm' AND perms = 'employee';
|
||||||
|
|
||||||
|
|
||||||
|
-- Sequence to fix the content of llx_bank.amount_main_currency
|
||||||
|
-- DROP TABLE tmp_bank;
|
||||||
|
-- CREATE TABLE tmp_bank SELECT b.rowid, b.amount, p.rowid as pid, p.amount as pamount, p.multicurrency_amount as pmulticurrencyamount FROM llx_bank as b INNER JOIN llx_bank_url as bu ON bu.fk_bank=b.rowid AND bu.type = 'payment' INNER JOIN llx_paiement as p ON bu.url_id = p.rowid WHERE p.multicurrency_amount <> 0 AND p.multicurrency_amount <> p.amount;
|
||||||
|
-- UPDATE llx_bank as b SET b.amount_main_currency = (SELECT tb.pamount FROM tmp_bank as tb WHERE tb.rowid = b.rowid) WHERE b.amount_main_currency IS NULL;
|
||||||
|
|||||||
@ -24,7 +24,8 @@ create table llx_bank
|
|||||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
datev date, -- date de valeur
|
datev date, -- date de valeur
|
||||||
dateo date, -- date operation
|
dateo date, -- date operation
|
||||||
amount double(24,8) NOT NULL default 0,
|
amount double(24,8) NOT NULL default 0, -- amount in the currency of the bank account
|
||||||
|
amount_main_currency double(24,8) NULL, -- amount in the main currency of the company
|
||||||
label varchar(255),
|
label varchar(255),
|
||||||
fk_account integer,
|
fk_account integer,
|
||||||
fk_user_author integer,
|
fk_user_author integer,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user