Comment attacher un fichier à une facture fournisseur Dolibarr

Bonjour à tous,

J’ai créé une facture fournisseur (via API Rest), mais je souhaite y ajouter le fichier pdf de ma banque qui est le document relatif à cette facture crée dans dolibarr.

Sur la capture j’ai entouré joindre le fichier, mais je souhaite pousser le fichier via API Rest

Je parviens à téléverser le fichier voulu via POST

        $facture_fichier = [
          "modulepart" => "supplier_invoice",
          "filename" => $fichier_nom,
          "filecontent" => $fichier_base64,
          "subdir" => '',
          "type" => "file",
          "size" => $fichier_taille,
          "gen_or_uploaded" => "uploaded",
          "overwriteifexists" => "1",
          "src_object_type" => "facture_fourn",
        ];
      }

Celui-ci s’upload dans
documents/fournisseur/monfichier.pdf

Cependant, il manque un lien entre la facture fournisseur de dolibarr et mon fichier pdf.
J’ai remarqué qu’en plaçant monfichier.pdf dans
documents/fournisseur/facture/3/0/\(PROV503\)/
Je le voyais bien en GUI à l’endroit attendu.
Éventuellement, je pourrais donc indiquer ce chemin lors de l’upload mais cela me parait un peu fastidieux.

Mes questions:

  • Quelle est la bonne pratique pour uploader un fichier qui doit être joint à une facture Dolibarr ?
  • N’y a t-il pas une manière permettant à ce que dolibarr place le fichier dans le repertoire approprié, par exemple en indiquant que mon fichier doit être joint à la facture ayant pour id 1234 ?

Merci

Bonjour,

J’ai réussi à trouver la/une solution mais je trouve que la manière dont fonctionne dolibarr n’est pas top.

Lorsque je crée une facture fournisseur dolibarr, le code retour est l’id de la facture fournisseur => un entier positif

par contre,

Lorsque je veux ajouter une pièce jointe, il m’est demandé la ref de la facture pour laquelle je souhaite ajouter le fichier joint => une chaine de caractere type (PROV518)
Alors que « normalement », il faudrait fournir l’id de la facture fournisseur correspondant au code retour de la création de facture.

Qu’en pensez-vous ?

Pour solutionner mon problème, j’ai donc cherché la valeur de ref pour la facture en utilisant l’URL
/api/index.php/supplierinvoices/1234
1234 étant l’id de ma facture

Puis j’ai joins cette ref à mon tableau

        $facture_fichier = [
          "modulepart" => "supplier_invoice",
          "ref" => $ref_facture,
          "filename" => $fichier_nom,
          "filecontent" => $fichier_base64,
          "subdir" => '',
          "type" => "file",
          "size" => $fichier_taille,
          "gen_or_uploaded" => "uploaded",
          "overwriteifexists" => "1",
          "src_object_type" => "facture_fourn",
        ];

hello

déjà le provXXXX correspond à l’id de la facture

j’ai eu un peu le meme soucis, coté facture client et je suis passée par l’upload coté ecm
attention il manquait des choses dans le core et j’ai du pousser un correctif :

ci-joint mon code pour l’envoie


	# on récupère le contenu  DU fichier file
	filecontent = open(file, 'rb').read()
	encoded_string = base64.b64encode(filecontent)
	# récupération du nom du fichier en elevant le chemin
	filename = os.path.basename(file)

	# on transfert le fichier sur le serveur
	url = urlBase + "documents/upload"
	data = {
			"filename": filename, 
			"modulepart": "invoice", 
			"ref": "(PROV" + str(invoiceID) + ")",
			"subdir": "", 
			"filecontent": encoded_string,
			"fileencoding": "base64", 
			"overwriteifexists": "0" 
		}

	r = requests.post(url, headers=headers, json=data)
1 « J'aime »

Bonjour Charlène,

Je n’ai pas tout compris dans ta réponse.
Qu’est-ce que ECM ?

Vis à vis de ta première phrase
déjà le provXXXX correspond à l’id de la facture
Dans l’explorer API l’ID et la Ref sont deux paramètres différents.

[
  {
    "module": null,
    **"id": "821",**
    "entity": "1",
    "import_key": null,
    "array_options": [],
    "array_languages": null,
    "contacts_ids": null,
    "linkedObjectsIds": null,
    "canvas": null,
    "fk_project": null,
    "contact_id": null,
    "user": null,
    "origin_type": null,
    "origin_id": null,
    **"ref": "(PROV821)",**
    "ref_ext": "",

Enfin, en écrivant et consultant ton code je vois que la ref correspond à une concatenation de REF et de l’ID avec les parenthèses qui l’entourent.
Je vais optimiser mon code dans ce sens.

Et donc vis à vis de ma remarque c’est un peu plus simple mais de mon point de vue c’est l’ID qui devrait être la clé ou le pivot pour faire les opérations.

J’ai un deuxième problème.
Mon fichier pdf est bien uploadé mais il est illisible.
As-tu déjà rencontré ce problème ?

Salut, oui, c’est un problème d’encodage, il faut que tu précise ‹ fileencoding ›: ‹ base64 › dans ta requète si c’est un fichier binaire et que tu encode ton fichier en base64

1 « J'aime »

ça ne fonctionne que pour des factures pas encore validées !

1 « J'aime »

ecm c’est le module GED natif de dolibarr
ensuite pour l’encodage, c’est le première ligne de code de mon exemple

Merci d’avoir pointé du doigt la solution.
J’avais raté ce paramètre dans la proposition de code de Charlène.

Merci pour cette précision, en effet j’avais oublié de préciser le fileencoding en base64.
A présent cela fonctionne beaucoup mieux.