diff --git a/dev/resources/sepa/text.txt b/dev/resources/sepa/text.txt
index e6c05276be2..dbcfeded5a4 100644
--- a/dev/resources/sepa/text.txt
+++ b/dev/resources/sepa/text.txt
@@ -1,2 +1,8 @@
+Spec for credit transfer:
+https://docs.oracle.com/cd/E39124_01/doc.91/e60210/fields_sepa_pay_file_appx.htm#EOAEL00515
+
+To validate a SEPA file:
+xmllint --schema pain.001.001.03.xsd T200801.xml --noout
+
To test a SEPA file:
https://www.mesfluxdepaiement.fr/testez-vos-fichiers-sepa
diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php
index 29c70ba8fab..00a388e31dd 100644
--- a/htdocs/compta/prelevement/class/bonprelevement.class.php
+++ b/htdocs/compta/prelevement/class/bonprelevement.class.php
@@ -1142,7 +1142,7 @@ class BonPrelevement extends CommonObject
if (!$error)
{
/*
- * Create file of direct debit order or credit transfer into a XML file
+ * Create file of type='direct-debit' for direct debit order or type='bank-transfer' for credit transfer into a XML file
*/
dol_syslog(__METHOD__."::Init direct debit or credit transfer file for ".count($factures_prev)." invoices", LOG_DEBUG);
@@ -1569,11 +1569,11 @@ class BonPrelevement extends CommonObject
// Define $fileEmetteurSection. Start of bloc PmtInf. Will contains all $nbtotalDrctDbtTxInf
if ($result != -2)
{
- $fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format);
+ $fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format, $type);
}
/**
- * SECTION CREATION SEPA FILE - CREDTI TRANSFER - ISO200022
+ * SECTION CREATION SEPA FILE - CREDIT TRANSFER - ISO200022
*/
// SEPA File Header
fputs($this->file, '<'.'?xml version="1.0" encoding="UTF-8" standalone="yes"?'.'>'.$CrLf);
@@ -1674,7 +1674,7 @@ class BonPrelevement extends CommonObject
// Define $fileEmetteurSection. Start of bloc PmtInf. Will contains all $nbtotalDrctDbtTxInf
if ($result != -2)
{
- $fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format);
+ $fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $nbtotalDrctDbtTxInf, $this->total, $CrLf, $format, $type);
}
/**
@@ -1794,6 +1794,22 @@ class BonPrelevement extends CommonObject
}
+ /**
+ * Build RUM number for a customer bank account
+ *
+ * @param string $row_code_client Customer code (soc.code_client)
+ * @param int $row_datec Creation date of bank account (rib.datec)
+ * @param string $row_drum Id of customer bank account (rib.rowid)
+ * @return string RUM number
+ */
+ public static function buildRumNumber($row_code_client, $row_datec, $row_drum)
+ {
+ global $langs;
+ $pre = substr(dol_string_nospecial(dol_string_unaccent($langs->transnoentitiesnoconv('RUM'))), 0, 3); // Must always be on 3 char ('RUM' or 'UMR'. This is a protection against bad translation)
+ return $pre.'-'.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec);
+ }
+
+
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Write recipient of request (customer)
@@ -1807,9 +1823,11 @@ class BonPrelevement extends CommonObject
* @param string $ref ref of invoice
* @param int $facid id of invoice
* @param string $rib_dom rib domiciliation
+ * @param string $type 'direct-debit' or 'credit-transfer'
* @return void
+ * @see EnregDestinataireSEPA()
*/
- public function EnregDestinataire($rowid, $client_nom, $rib_banque, $rib_guichet, $rib_number, $amount, $ref, $facid, $rib_dom = '')
+ public function EnregDestinataire($rowid, $client_nom, $rib_banque, $rib_guichet, $rib_number, $amount, $ref, $facid, $rib_dom = '', $type = 'direct-debit')
{
// phpcs:enable
fputs($this->file, "06");
@@ -1866,22 +1884,6 @@ class BonPrelevement extends CommonObject
fputs($this->file, "\n");
}
-
- /**
- * Build RUM number for a customer bank account
- *
- * @param string $row_code_client Customer code (soc.code_client)
- * @param int $row_datec Creation date of bank account (rib.datec)
- * @param string $row_drum Id of customer bank account (rib.rowid)
- * @return string RUM number
- */
- public static function buildRumNumber($row_code_client, $row_datec, $row_drum)
- {
- global $langs;
- $pre = substr(dol_string_nospecial(dol_string_unaccent($langs->transnoentitiesnoconv('RUM'))), 0, 3); // Must always be on 3 char ('RUM' or 'UMR'. This is a protection against bad translation)
- return $pre.'-'.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec);
- }
-
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Write recipient of request (customer)
@@ -1903,9 +1905,11 @@ class BonPrelevement extends CommonObject
* @param string $row_datec rib.datec,
* @param string $row_drum rib.rowid used to generate rum
* @param string $row_rum rib.rum Rum defined on company bank account
+ * @param string $type 'direct-debit' or 'credit-transfer'
* @return string Return string with SEPA part DrctDbtTxInf
+ * @see EnregDestinataire()
*/
- public function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_ref, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum, $row_rum)
+ public function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_ref, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum, $row_rum, $type = 'direct-debit')
{
// phpcs:enable
global $conf;
@@ -1913,7 +1917,7 @@ class BonPrelevement extends CommonObject
include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
$CrLf = "\n";
- $Rowing = sprintf("%06d", $row_idfac);
+ $Rowing = sprintf("%10d", $row_idfac);
// Define value for RUM
// Example: RUMCustomerCode-CustomerBankAccountId-01424448606 (note: Date is date of creation of CustomerBankAccountId)
@@ -1922,57 +1926,108 @@ class BonPrelevement extends CommonObject
// Define date of RUM signature
$DtOfSgntr = dol_print_date($row_datec, '%Y-%m-%d');
- $XML_DEBITOR = '';
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- // $XML_DEBITOR .=' '.('AS-'.dol_trunc($row_ref,20).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters
- $XML_DEBITOR .= ' '.(($conf->global->PRELEVEMENT_END_TO_END != "") ? $conf->global->PRELEVEMENT_END_TO_END : ('AS-'.dol_trunc($row_ref, 20)).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.round($row_somme, 2).''.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$Rum.''.$CrLf;
- $XML_DEBITOR .= ' '.$DtOfSgntr.''.$CrLf;
- $XML_DEBITOR .= ' false'.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$row_bic.''.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.dolEscapeXML(strtoupper(dol_string_unaccent($row_nom))).''.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$row_country_code.''.$CrLf;
- $addressline1 = dol_string_unaccent(strtr($row_address, array(CHR(13) => ", ", CHR(10) => "")));
- $addressline2 = dol_string_unaccent(strtr($row_zip.(($row_zip && $row_town) ? ' ' : ''.$row_town), array(CHR(13) => ", ", CHR(10) => "")));
- if (trim($addressline1)) $XML_DEBITOR .= ' '.dolEscapeXML(dol_trunc($addressline1, 70, 'right', 'UTF-8', true)).''.$CrLf;
- if (trim($addressline2)) $XML_DEBITOR .= ' '.dolEscapeXML(dol_trunc($addressline2, 70, 'right', 'UTF-8', true)).''.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.preg_replace('/\s/', '', $row_iban).''.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- // $XML_DEBITOR .=' '.($row_ref.'/'.$Rowing.'/'.$Rum).''.$CrLf;
- // $XML_DEBITOR .=' '.dol_trunc($row_ref, 135).''.$CrLf; // 140 max
- $XML_DEBITOR .= ' '.(($conf->global->PRELEVEMENT_USTRD != "") ? $conf->global->PRELEVEMENT_USTRD : dol_trunc($row_ref, 135)).''.$CrLf; // 140 max
- $XML_DEBITOR .= ' '.$CrLf;
- $XML_DEBITOR .= ' '.$CrLf;
- return $XML_DEBITOR;
+ if ($type != 'credit-transfer') {
+ // SEPA Paiement Information of buyer for Direct debit
+ $XML_DEBITOR = '';
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ // Add EndToEndId. Must be a unique ID for each payment (for example by including bank, buyer or seller, date, checksum)
+ $XML_DEBITOR .= ' '.(($conf->global->PRELEVEMENT_END_TO_END != "") ? $conf->global->PRELEVEMENT_END_TO_END : ('AS-'.dol_trunc($row_ref, 20)).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.round($row_somme, 2).''.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$Rum.''.$CrLf;
+ $XML_DEBITOR .= ' '.$DtOfSgntr.''.$CrLf;
+ $XML_DEBITOR .= ' false'.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$row_bic.''.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.dolEscapeXML(strtoupper(dol_string_unaccent($row_nom))).''.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$row_country_code.''.$CrLf;
+ $addressline1 = dol_string_unaccent(strtr($row_address, array(CHR(13) => ", ", CHR(10) => "")));
+ $addressline2 = dol_string_unaccent(strtr($row_zip.(($row_zip && $row_town) ? ' ' : ''.$row_town), array(CHR(13) => ", ", CHR(10) => "")));
+ if (trim($addressline1)) $XML_DEBITOR .= ' '.dolEscapeXML(dol_trunc($addressline1, 70, 'right', 'UTF-8', true)).''.$CrLf;
+ if (trim($addressline2)) $XML_DEBITOR .= ' '.dolEscapeXML(dol_trunc($addressline2, 70, 'right', 'UTF-8', true)).''.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.preg_replace('/\s/', '', $row_iban).''.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ // A string with some information on payment - 140 max
+ $XML_DEBITOR .= ' '.(($conf->global->PRELEVEMENT_USTRD != "") ? $conf->global->PRELEVEMENT_USTRD : dol_trunc($row_ref, 135)).''.$CrLf; // 140 max
+ $XML_DEBITOR .= ' '.$CrLf;
+ $XML_DEBITOR .= ' '.$CrLf;
+ return $XML_DEBITOR;
+ } else {
+ // SEPA Paiement Information of seller for Credit Transfer
+ $XML_CREDITOR = '';
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ // Add EndToEndId. Must be a unique ID for each payment (for example by including bank, buyer or seller, date, checksum)
+ $XML_CREDITOR .= ' '.(($conf->global->PRELEVEMENT_END_TO_END != "") ? $conf->global->PRELEVEMENT_END_TO_END : ('AS-'.dol_trunc($row_ref, 20)).'-'.$Rowing).''.$CrLf; // ISO20022 states that EndToEndId has a MaxLength of 35 characters
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.round($row_somme, 2).''.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ /*
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$Rum.''.$CrLf;
+ $XML_CREDITOR .= ' '.$DtOfSgntr.''.$CrLf;
+ $XML_CREDITOR .= ' false'.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ */
+ //$XML_CREDITOR .= ' SLEV'.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$row_bic.''.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.dolEscapeXML(strtoupper(dol_string_unaccent($row_nom))).''.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$row_country_code.''.$CrLf;
+ $addressline1 = dol_string_unaccent(strtr($row_address, array(CHR(13) => ", ", CHR(10) => "")));
+ $addressline2 = dol_string_unaccent(strtr($row_zip.(($row_zip && $row_town) ? ' ' : ''.$row_town), array(CHR(13) => ", ", CHR(10) => "")));
+ if (trim($addressline1)) $XML_CREDITOR .= ' '.dolEscapeXML(dol_trunc($addressline1, 70, 'right', 'UTF-8', true)).''.$CrLf;
+ if (trim($addressline2)) $XML_CREDITOR .= ' '.dolEscapeXML(dol_trunc($addressline2, 70, 'right', 'UTF-8', true)).''.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.preg_replace('/\s/', '', $row_iban).''.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ // A string with some information on payment - 140 max
+ $XML_CREDITOR .= ' '.(($conf->global->PRELEVEMENT_USTRD != "") ? $conf->global->PRELEVEMENT_USTRD : dol_trunc($row_ref, 135)).''.$CrLf; // 140 max
+ $XML_CREDITOR .= ' '.$CrLf;
+ $XML_CREDITOR .= ' '.$CrLf;
+ return $XML_CREDITOR;
+ }
}
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
- * Write sender of request (me)
+ * Write sender of request (me).
*
+ * @param string $type 'direct-debit' or 'credit-transfer'
* @return void
+ * @see EnregEmetteurSEPA()
*/
- public function EnregEmetteur()
+ public function EnregEmetteur($type = 'direct-debit')
{
// phpcs:enable
fputs($this->file, "03");
@@ -2044,9 +2099,11 @@ class BonPrelevement extends CommonObject
* @param float $total Total
* @param string $CrLf End of line character
* @param string $format FRST or RCUR or ALL
+ * @param string $type 'direct-debit' or 'credit-transfer'
* @return string String with SEPA Sender
+ * @see EnregEmetteur()
*/
- public function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf = '\n', $format = 'FRST')
+ public function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf = '\n', $format = 'FRST', $type = 'direct-debit')
{
// phpcs:enable
// SEPA INITIALISATION
@@ -2073,7 +2130,7 @@ class BonPrelevement extends CommonObject
$this->raison_sociale = $account->proprio;
}
- // Récupération info demandeur
+ // Get pending payments
$sql = "SELECT rowid, ref";
$sql .= " FROM";
$sql .= " ".MAIN_DB_PREFIX."prelevement_bons as pb";
@@ -2084,69 +2141,132 @@ class BonPrelevement extends CommonObject
{
$obj = $this->db->fetch_object($resql);
- // DONNEES BRUTES : par la suite Rows['XXX'] de la requete au dessus
$country = explode(':', $configuration->global->MAIN_INFO_SOCIETE_COUNTRY);
$IdBon = sprintf("%05d", $obj->rowid);
$RefBon = $obj->ref;
- // SEPA Paiement Information
- $XML_SEPA_INFO = '';
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.('PREL'.$dateTime_YMD.'/ID'.$IdBon.'-'.$RefBon).''.$CrLf;
- $XML_SEPA_INFO .= ' DD'.$CrLf;
- $XML_SEPA_INFO .= ' '.$nombre.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$total.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' SEPA'.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' CORE'.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$format.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$dateTime_ETAD.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.strtoupper(dol_string_unaccent($this->raison_sociale)).''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf;
- $addressline1 = dol_string_unaccent(strtr($configuration->global->MAIN_INFO_SOCIETE_ADDRESS, array(CHR(13) => ", ", CHR(10) => "")));
- $addressline2 = dol_string_unaccent(strtr($configuration->global->MAIN_INFO_SOCIETE_ZIP.(($configuration->global->MAIN_INFO_SOCIETE_ZIP || ' '.$configuration->global->MAIN_INFO_SOCIETE_TOWN) ? ' ' : '').$configuration->global->MAIN_INFO_SOCIETE_TOWN, array(CHR(13) => ", ", CHR(10) => "")));
- if ($addressline1) $XML_SEPA_INFO .= ' '.$addressline1.''.$CrLf;
- if ($addressline2) $XML_SEPA_INFO .= ' '.$addressline2.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.preg_replace('/\s/', '', $this->emetteur_iban).''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$this->emetteur_bic.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- /* $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$this->raison_sociale.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf;
- $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ADDRESS.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ZIP.' '.$conf->global->MAIN_INFO_SOCIETE_TOWN.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;*/
- $XML_SEPA_INFO .= ' SLEV'.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$this->emetteur_ics.''.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' SEPA'.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
- $XML_SEPA_INFO .= ' '.$CrLf;
+ if ($type != 'credit-transfer') {
+ // SEPA Paiement Information of my company for Direct debit
+ $XML_SEPA_INFO = '';
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.('PREL'.$dateTime_YMD.'/ID'.$IdBon.'-'.$RefBon).''.$CrLf;
+ $XML_SEPA_INFO .= ' DD'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$nombre.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$total.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' SEPA'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' CORE'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$format.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$dateTime_ETAD.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.strtoupper(dol_string_unaccent($this->raison_sociale)).''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf;
+ $addressline1 = dol_string_unaccent(strtr($configuration->global->MAIN_INFO_SOCIETE_ADDRESS, array(CHR(13) => ", ", CHR(10) => "")));
+ $addressline2 = dol_string_unaccent(strtr($configuration->global->MAIN_INFO_SOCIETE_ZIP.(($configuration->global->MAIN_INFO_SOCIETE_ZIP || ' '.$configuration->global->MAIN_INFO_SOCIETE_TOWN) ? ' ' : '').$configuration->global->MAIN_INFO_SOCIETE_TOWN, array(CHR(13) => ", ", CHR(10) => "")));
+ if ($addressline1) $XML_SEPA_INFO .= ' '.$addressline1.''.$CrLf;
+ if ($addressline2) $XML_SEPA_INFO .= ' '.$addressline2.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.preg_replace('/\s/', '', $this->emetteur_iban).''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$this->emetteur_bic.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ /* $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$this->raison_sociale.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ADDRESS.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ZIP.' '.$conf->global->MAIN_INFO_SOCIETE_TOWN.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;*/
+ $XML_SEPA_INFO .= ' SLEV'.$CrLf; // Field "Responsible of fees". Must be SLEV
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$this->emetteur_ics.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' SEPA'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ } else {
+ // SEPA Paiement Information of my company for Credit Transfer
+ $XML_SEPA_INFO = '';
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.('PREL'.$dateTime_YMD.'/ID'.$IdBon.'-'.$RefBon).''.$CrLf;
+ $XML_SEPA_INFO .= ' TRF'.$CrLf;
+ //$XML_SEPA_INFO .= ' False'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$nombre.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$total.''.$CrLf;
+ /*
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' SEPA'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' TRF'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' SECU'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ */
+ $XML_SEPA_INFO .= ' '.dol_print_date($dateTime_ETAD, 'dayrfc').''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.strtoupper(dol_string_unaccent($this->raison_sociale)).''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf;
+ $addressline1 = dol_string_unaccent(strtr($configuration->global->MAIN_INFO_SOCIETE_ADDRESS, array(CHR(13) => ", ", CHR(10) => "")));
+ $addressline2 = dol_string_unaccent(strtr($configuration->global->MAIN_INFO_SOCIETE_ZIP.(($configuration->global->MAIN_INFO_SOCIETE_ZIP || ' '.$configuration->global->MAIN_INFO_SOCIETE_TOWN) ? ' ' : '').$configuration->global->MAIN_INFO_SOCIETE_TOWN, array(CHR(13) => ", ", CHR(10) => "")));
+ if ($addressline1) $XML_SEPA_INFO .= ' '.$addressline1.''.$CrLf;
+ if ($addressline2) $XML_SEPA_INFO .= ' '.$addressline2.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.preg_replace('/\s/', '', $this->emetteur_iban).''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$this->emetteur_bic.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ /* $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$this->raison_sociale.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$country[1].''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ADDRESS.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$conf->global->MAIN_INFO_SOCIETE_ZIP.' '.$conf->global->MAIN_INFO_SOCIETE_TOWN.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;*/
+ $XML_SEPA_INFO .= ' SLEV'.$CrLf; // Field "Responsible of fees". Must be SLEV
+ /*$XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$this->emetteur_ics.''.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' SEPA'.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;
+ $XML_SEPA_INFO .= ' '.$CrLf;*/
+ }
}
else
{
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 57d430fc9e4..bd957f0ca02 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -546,9 +546,9 @@ Module54Desc=Management of contracts (services or recurring subscriptions)
Module55Name=Barcodes
Module55Desc=Barcode management
Module56Name=Payment by credit transfer
-Module56Desc=Management of payment of suppliers by credit transfer orders. It includes generation of SEPA file for European countries.
-Module57Name=Bank Direct Debit payments
-Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
+Module56Desc=Management of payment of suppliers by Credit Transfer orders. It includes generation of SEPA file for European countries.
+Module57Name=Payments by Direct Debit
+Module57Desc=Management of Direct Debit orders. It includes generation of SEPA file for European countries.
Module58Name=ClickToDial
Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
Module59Name=Bookmark4u
diff --git a/htdocs/langs/fr_FR/withdrawals.lang b/htdocs/langs/fr_FR/withdrawals.lang
index 446de9e09d3..d05f2663cfc 100644
--- a/htdocs/langs/fr_FR/withdrawals.lang
+++ b/htdocs/langs/fr_FR/withdrawals.lang
@@ -77,7 +77,7 @@ StatusMotif8=Autre motif
CreateForSepaFRST=Créer fichier de prélèvement (SEPA FRST)
CreateForSepaRCUR=Créer fichier de prélèvement (SEPA RCUR)
CreateAll=Créer le fichier de prélèvement (tout)
-CreateFileForPaymentByBankTransfer=Créer un virement (tout)
+CreateFileForPaymentByBankTransfer=Créer un fichier de virement
CreateSepaFileForPaymentByBankTransfer=Créer un fichier de virement (SEPA)
CreateGuichet=Seulement guichet
CreateBanque=Seulement banque