diff --git a/ChangeLog b/ChangeLog index a38c77518759587c8b1bc541eb71909b0db6ca90..ebf41dd05168d23c4d5240397fa323c6716ba0f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -222,6 +222,7 @@ Dolibarr better: - Fix: [ bug #1830 ] Salaries payment only allows checking accounts - Fix: [ bug #1825 ] External agenda: hide/show checkbox doesn't work - Fix: [ bug #1790 ] Email form behaves in an unexpected way when pressing Enter key +- Fix: Bad SEPA xml file creation ***** ChangeLog for 3.6.2 compared to 3.6.1 ***** - Fix: fix ErrorBadValueForParamNotAString error message in price customer multiprice. diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index d8324178f875ae2b614c5e049517b472c3697358..63ad32f9bf9c153bd0cee0d0a7e7dff0d9a78f3c 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1249,14 +1249,29 @@ class BonPrelevement extends CommonObject $fileDebiteurSection = ''; $fileEmetteurSection = ''; $i = 0; + $j = 0; $this->total = 0; /* * section Debiteur (sepa Debiteurs bloc lines) */ - $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,"; - $sql.= " pl.client_nom as name, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; - $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.iban_prefix as iban, rib.bic as bic, rib.datec, rib.rowid as drum"; + + $sql = "SELECT f.facnumber as fac FROM ".MAIN_DB_PREFIX."prelevement_lignes as pl, ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."prelevement_facture as pf, ".MAIN_DB_PREFIX."societe as soc, ".MAIN_DB_PREFIX."c_country as p, ".MAIN_DB_PREFIX."societe_rib as rib WHERE pl.fk_prelevement_bons = ".$this->id." AND pl.rowid = pf.fk_prelevement_lignes AND pf.fk_facture = f.rowid AND soc.fk_pays = p.rowid AND soc.rowid = f.fk_soc AND rib.fk_soc = f.fk_soc AND rib.default_rib = 1"; + $resql=$this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + while ($j < $num) + { + $objfac = $this->db->fetch_object($resql); + $ListOfFactures = $ListOfFactures . $objfac->fac . ","; + $j++; + } + } + + $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, soc.datec, p.code as country_code,"; + $sql.= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; + $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum"; $sql.= " FROM"; $sql.= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql.= " ".MAIN_DB_PREFIX."facture as f,"; @@ -1279,7 +1294,7 @@ class BonPrelevement extends CommonObject while ($i < $num) { $obj = $this->db->fetch_object($resql); - $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->name, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->facnumber, $obj->idfac, $obj->iban, $obj->bic, $obj->datec, $obj->drum); + $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $ListOfFactures , $obj->idfac, $obj->iban, $obj->bic, $obj->datec, $obj->drum); $this->total = $this->total + $obj->somme; $i++; } @@ -1314,13 +1329,14 @@ class BonPrelevement extends CommonObject fputs($this->file, ' <CtrlSum>'.$this->total.'</CtrlSum>'.$CrLf); fputs($this->file, ' <InitgPty>'.$CrLf); fputs($this->file, ' <Nm>'.$this->raison_sociale.'</Nm>'.$CrLf); -/* fputs($this->file, ' <Id>'.$CrLf); - fputs($this->file, ' <Othr>'.$CrLf); - fputs($this->file, ' <Id>0533883248</Id>'.$CrLf); - fputs($this->file, ' <Issr>KBO-BCE</Issr>'.$CrLf); + fputs($this->file, ' <Id>'.$CrLf); + fputs($this->file, ' <PrvtId>'.$CrLf); fputs($this->file, ' <Othr>'.$CrLf); + fputs($this->file, ' <Id>'.$conf->global->PRELEVEMENT_ICS.'</Id>'.$CrLf); + fputs($this->file, ' </Othr>'.$CrLf); + fputs($this->file, ' </PrvtId>'.$CrLf); fputs($this->file, ' </Id>'.$CrLf); -*/ fputs($this->file, ' </InitgPty>'.$CrLf); + fputs($this->file, ' </InitgPty>'.$CrLf); fputs($this->file, ' </GrpHdr>'.$CrLf); // SEPA File Emetteur if ($result != -2) @@ -1509,19 +1525,19 @@ class BonPrelevement extends CommonObject // Define value for RUM // Example: RUMCustomerCode-CustomerBankAccountId-01424448606 (note: Date is date of creation of CustomerBankAccountId) $Date_Rum = strtotime($row_datec); - $pre = ($date_Rum > 1359673200) ? 'RUM' : '++R'; - $Rum = dol_trunc($pre.$row_code_client.'-'.$row_drum.'-0'.date('U', $Date_Rum), 35, 'right', 'UTF-8', 1); - + $DtOfSgntr = dol_print_date($row_datec, '%Y-%m-%d'); + $pre = ($date_Rum > 1359673200) ? 'Rum' : '++R'; + $Rum = $pre.$row_code_client.$row_drum.'-0'.date('U', $Date_Rum); $XML_DEBITOR =''; $XML_DEBITOR .=' <DrctDbtTxInf>'.$CrLf; $XML_DEBITOR .=' <PmtId>'.$CrLf; $XML_DEBITOR .=' <EndToEndId>'.('AS-'.$row_facnumber.'-'.$Rowing).'</EndToEndId>'.$CrLf; $XML_DEBITOR .=' </PmtId>'.$CrLf; - $XML_DEBITOR .=' <InstdAmt Ccy.="EUR">'.round($row_somme, 2).'</InstdAmt>'.$CrLf; + $XML_DEBITOR .=' <InstdAmt Ccy="EUR">'.round($row_somme, 2).'</InstdAmt>'.$CrLf; $XML_DEBITOR .=' <DrctDbtTx>'.$CrLf; $XML_DEBITOR .=' <MndtRltdInf>'.$CrLf; $XML_DEBITOR .=' <MndtId>'.$Rum.'</MndtId>'.$CrLf; - $XML_DEBITOR .=' <DtOfSgntr>'.$row_datec.'</DtOfSgntr>'.$CrLf; + $XML_DEBITOR .=' <DtOfSgntr>'.$DtOfSgntr.'</DtOfSgntr>'.$CrLf; $XML_DEBITOR .=' <AmdmntInd>false</AmdmntInd>'.$CrLf; $XML_DEBITOR .=' </MndtRltdInf>'.$CrLf; $XML_DEBITOR .=' </DrctDbtTx>'.$CrLf; @@ -1534,17 +1550,18 @@ class BonPrelevement extends CommonObject $XML_DEBITOR .=' <Nm>'.strtoupper(dol_string_unaccent($row_nom)).'</Nm>'.$CrLf; $XML_DEBITOR .=' <PstlAdr>'.$CrLf; $XML_DEBITOR .=' <Ctry>'.$row_country_code.'</Ctry>'.$CrLf; - $XML_DEBITOR .=' <AdrLine>'.strtr($row_adr, array(CHR(13) => ", ", CHR(10) => "")).'</AdrLine>'.$CrLf; + $XML_DEBITOR .=' <AdrLine>'.strtr($row_address, array(CHR(13) => ", ", CHR(10) => "")).'</AdrLine>'.$CrLf; $XML_DEBITOR .=' <AdrLine>'.dol_string_unaccent($row_zip.' '.$row_town).'</AdrLine>'.$CrLf; $XML_DEBITOR .=' </PstlAdr>'.$CrLf; $XML_DEBITOR .=' </Dbtr>'.$CrLf; $XML_DEBITOR .=' <DbtrAcct>'.$CrLf; $XML_DEBITOR .=' <Id>'.$CrLf; - $XML_DEBITOR .=' <IBAN>'.$row_iban.'</IBAN>'.$CrLf; + $XML_DEBITOR .=' <IBAN>'.preg_replace('/\s/', '', $row_iban).'</IBAN>'.$CrLf; $XML_DEBITOR .=' </Id>'.$CrLf; $XML_DEBITOR .=' </DbtrAcct>'.$CrLf; $XML_DEBITOR .=' <RmtInf>'.$CrLf; - $XML_DEBITOR .=' <Ustrd>'.($row_facnumber.'/'.$Rowing.'/'.$Rum).'</Ustrd>'.$CrLf; + // $XML_DEBITOR .=' <Ustrd>'.($row_facnumber.'/'.$Rowing.'/'.$Rum).'</Ustrd>'.$CrLf; + $XML_DEBITOR .=' <Ustrd>'.$row_facnumber.'</Ustrd>'.$CrLf; $XML_DEBITOR .=' </RmtInf>'.$CrLf; $XML_DEBITOR .=' </DrctDbtTxInf>'.$CrLf; return $XML_DEBITOR;