[b]J’ai enfin trouvé la solution !
Il y a une grosse erreur dans le fichier php qui crée le fichier xml.
En effet, le choix du FIRST ou du RECURRENT se fait en fonction du nombre de factures que contient le prélèvement SEPA (ce qui n’a rien à voir avec le caractère de premier prélèvement ou non).
Il faut donc modifier quelques portions du fichier \compta\prelevement\class\bonprelevement.class.php
Autour de la ligne 1327 :
remplacer :[/b]
$fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $i, $this->total, $CrLf);
par:
$fileEmetteurSection .= $this->EnregEmetteurSEPA($conf, $date_actu, $i, $this->total, $CrLf, $obj->code, $this->db->jdate($obj->datec), $obj->drum);
Autour de la ligne 1680 :
remplacer :
[i]function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf=’\n’)
{ // SEPA INITIALISATION
global $confs;
$dateTime_YMD = dol_print_date($ladate, '%Y%m%d');
$dateTime_ETAD = dol_print_date($ladate, '%Y-%m-%d');
$dateTime_YMDHMS = dol_print_date($ladate, '%Y-%m-%dT%H:%M:%S');
// Récupération info demandeur
$sql = "SELECT rowid, ref";
$sql.= " FROM";
$sql.= " ".MAIN_DB_PREFIX."prelevement_bons as pb";
$sql.= " WHERE pb.rowid = ".$this-\>id;
$resql=$this-\>db-\>query($sql);
if ($resql)
{
$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;
$type = ($nombre == 1) ? 'FRST' : 'RCUR' ;
// SEPA Paiement Information
$XML_SEPA_INFO = '';[/i]
par :
[i] function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf=’\n’, $row_code_client, $row_datec, $row_drum)
{ // SEPA INITIALISATION
global $confs;
$dateTime_YMD = dol_print_date($ladate, '%Y%m%d');
$dateTime_ETAD = dol_print_date($ladate, '%Y-%m-%d');
$dateTime_YMDHMS = dol_print_date($ladate, '%Y-%m-%dT%H:%M:%S');
$Rum = $this-\>buildRumNumber($row_code_client, $row_datec, $row_drum);
// Récupération info demandeur
$sql = "SELECT rowid, ref";
$sql.= " FROM";
$sql.= " ".MAIN_DB_PREFIX."prelevement_bons as pb";
$sql.= " WHERE pb.rowid = ".$this-\>id;
//Récupération des RUM
$sql2 = "SELECT pl.rowid as rowid, soc.code_client as code_client, rib.datec as date_creation, rib.rowid as rowid_rib";
$sql2.= " FROM ".MAIN_DB_PREFIX."prelevement_lignes as pl";
$sql2.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as soc ON pl.fk_soc=soc.rowid";
$sql2.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_rib as rib ON pl.fk_soc=rib.fk_soc";
$sql2.= " WHERE NOT(pl.fk_prelevement_bons=".$this-\>id.")";
$sql2.= " GROUP BY date_creation";
$resql=$this-\>db-\>query($sql);
$resql2=$this-\>db-\>query($sql2);
if ($resql && $resql2)
{
$obj = $this-\>db-\>fetch_object($resql);
$count = 0;
$test=1;
for ($i=0; $test ; $i++) {
$rums[$i]= $this-\>db-\>fetch_object($resql2);
$count++;
if (empty($rums[$i]-\>rowid)) {
$test=0;
unset($rums[$i]);
}
}
// 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;
$nbOfPrlvmnt = 0;
for ($i=0; $i <sizeof($rums) ; $i++) {
if ($this-\>buildRumNumber($rums[$i]-\>code_client,$this-\>db-\>jdate($rums[$i]-\>date_creation),$rums[$i]-\>rowid_rib) == $Rum) {
$nbOfPrlvmnt++;
}
}
$type = ($nbOfPrlvmnt == 0) ? 'FRST' : 'RCUR' ;
// SEPA Paiement Information
$XML_SEPA_INFO = '';[/i]
Je ne suis pas un grand développeur mais plus un petit bidouilleur donc il se peut que le code ne soit pas très propre mais pour moi il marche.