Bonjour,
Je viens de passer ma journée sur le code de l’api REST. pour créer des factures, j’ai du modifier un peu le code.
Principalement sur 2 fichiers
dolibarr-3.9.3/htdocs/compta/facture/class/api_invoice.class.php et facture.class.php
sur le premier j’ai du modifier la fonction en gras de l’api_invoice.php.
function post($request_data = NULL)
{
if(! DolibarrApiAccess::$user->rights->facture->creer) {
throw new RestException(401);
}
// Check mandatory fields
$result = $this->_validate($request_data);
// Init date
if(! array_keys($request_data,‹ date ›)) {
$this->invoice->date = dol_now();
}
foreach($request_data as $field => $value) {
if ($field == ‹ lines ›) {
for($i=0; $i<count($value);$i++) {
$lineInvoice = new FactureLigne($this->db);
foreach($value[$i] as $fieldLine => $valueLine) {
$lineInvoice->$fieldLine = $valueLine;
}
$value[$i] = $lineInvoice;
}
}
$this->invoice->$field = $value;
}
if( ! $this->invoice->create(DolibarrApiAccess::$user)) {
throw new RestException(500);
}
return $this->invoice->id;
}
L’explication : sur le fichier facture.class.php ligne 380, au départ je poussais un tableau de lines, sauf que l.424 on appelle pas les lignes par son index mais comme si il s’agissait d’un object type StdClass. Pour éviter de modifier ce fichier, j’ai donc converti mes lignes en FactureLigne pour que la l.424 soit prise en compte.
/*
* Insert lines of invoices into database
*/
if (count($this->lines) && is_object($this->lines[0])) // If this->lines is array on InvoiceLines (preferred mode)
{
J’ai également modifié quelques lignes dans la fonction create de facture.class.php pour mettre ma propre référence (utile quand on veut insérer des factures déjà existantes) et modifier les dates de création et de facturation.
Voici un exemple de facture à pousser dans votre API REST.
$invoice = [
‹ type › => 0, ‹ socid › => $socId, ‹ ref › => $ref,
‹ date › => $date, ‹ date_creation › => $dateCreation, ‹ date_lim_reglement › => $dateLimReglement,
‹ cond_reglement_code › => ‹ RECEP ›, ‹ mode_reglement_code › => ‹ VIR ›,
‹ cond_reglement_id › => 1, ‹ mode_reglement_id › => 2,
‹ product_type › => 1,
‹ lines › => [
[
‹ info_bits › => 0,
‹ product_type › => 1,
‹ desc › => $desc, ‹ qty › => 1, ‹ tva_tx › => $tvaTx, ‹ remise_percent › => 0,
‹ subprice › => $subprice,
‹ total_ht › => $totalHt,
‹ total_tva › => $totalTva,
‹ total_ttc › => $totalTtc
]
]
];
L’API n’est pas encore finalisée, en effet on s’attendrait à ajouter des lignes sur une facture existante. Visiblement le code ne le permet pas.
En tout cas c’est une bonne avancé pour Dolibarr. L’API est jeune mais prometteuse.
Voilà si cela peut faire avancer le projet …