Interdiction de modification de facture

Bonjour à tous,

Je suis un novice sur Dolibarr et je me pose une question, est-il possible d’empêcher la modification d’une facture qui a été déjà envoyée à un client sans avoir à la basculer en comptabilité?

En vous remerciant par avance,

André

Salut @Andre.D et bienvenue sur le forum !

Il n’exhiste pas de droit sur cette action à aujourd’hui, je vois deux solutions :

  • ou tu fais coder ça par un prestataire
  • ou tu surveilles le log (inaltérable)

ne te limite pas à mon avis : il y aura peut être d’autres contributions :slight_smile:

1 « J'aime »

Bonjour,
je ne comprends pas la question: si la facture est validée elle ne peut être changée que si on la reouvre (donc une opération bien particulière) et cela est même impossible simplement si elle est payée même en partie. le suivi des opérations sur la facture peut être automatisée dans Dolibarr ainsi que l’envoi de celle-ci si cela est fait par mail
Cordialement

Salut,

même avis que @lamyjl , mais :

PDF/A n’a pas valeur de signature : c’est juste une sécurité d’inalterabilité.

Pour la signature il faut le faire numériquement avec un certificat (et il y a plusieurs niveau de certification du certificat… mais on ne va pas rentrer dans les détails ici ^^)

J’anticipe la question : non, il n’est pour l’instant pas possible de signer numériquement avec un certificat « à la volée » depuis dolibarr : il faut retraiter les PDF.

(pour info : en France aujourd’hui un certificat convenable pour cet emploi c’est environ 100€/an)

Bonjour à tous,

Je partage le même questionnement qu’Andre.

Dans le cadre d’un contrôle ECF (Examen de Conformité Fiscale), notre cabinet comptable demande à ce que notre ERP ne permette pas la modification ou la suppression des factures clients une fois émises (= validées).
Mais il doit malgré tout rester possible de modifier et supprimer des brouillons de factures.

J’ai regardé le paramétrage des permissions avec attention mais n’ai rien vu qui pouvait répondre à ce besoin. Je suis étonnée que personne n’ait remonté ce besoin avant.

Je note l’option « faire coder ça par un prestataire » en espérant que la demande soit jugée recevable par la communauté et intégrée dans le cœur à terme.

Bonjour,

dans les paramètres (accueil->paramètres>autres), il est possible de définir la valeur de INVOICE_DISALLOW_REOPEN sur 1. Cela empêche la réouverture des factures validées. Mais bien sûr, ce paramètre POURRAIT être modifié, ce n’est donc pas une garantie parfaite.

(traduit automatiquement par google)

Merci priojk!

Je vais regarder cela et voir si cette solution suffit à notre cabinet comptable.

Je viens de tester et ça empêche de ré-ouvrir une facture clients réglée mais pas une facture simplement validée.

en parcourant le wiki dolibarr j’ai trouvé le paramètre: INVOICE_CAN_NEVER_BE_REMOVED ► Never allow to delete invoices (except draft invoices). qui répond en partie à mon besoin.

Il manquerait donc juste un paramètre: INVOICE_CAN_NEVER_BE_EDITED ► Never allow to delete invoices (except draft invoices).

Vous avez tout à fait raison, le paramètre n’affecte pas les factures validées mais impayées. C’est peut-être un bogue, mais je n’ai pas suffisamment étudié le code source pour en être sûr.

Nous avons donc besoin soit d’un correctif, soit du nouveau paramètre (je préférerais que le correctif n’ait pas trop de paramètres). Je sais que les exigences allemandes ne permettent pas non plus de modifier une facture, une fois qu’elle a été émise.

Pour information, j’ai trouvé un vieux thread de 2015 (Modification de facture) qui semble indiquer que lors du passage à la version 3.8.2 il n’était plus possible de modifier une facture validée.
Ça semblait un comportement souhaité et défendu.

2 « J'aime »

J’ai pu avancer sur cette question et je viens partager ici le résultat de ces recherches car ça pourrait intéresser d’autre personnes avec le même besoin.

Il est possible d’activer le paramètre : MAIN_USE_ADVANCED_PERMS

Quand c’est fait, de nouvelles permissions peuvent être définis. par exemple:

  • Dé-valider les factures clients: oui/non
  • Rouvrir une facture payée: oui/non
1 « J'aime »

Pour information, j’ai mis en place pour dolibarr un mécanisme de signature sur serveur debian, utilisant iwatch pour observer l’arrivé de factures.

Le script signpdf fait signer le pdf, et renomme les fichiers (l’original s’appelera ‹ …_unsigned.pdf ›).

Fichier: /etc/iwatch/iwatch.xml qui surveille /home/dolibardocs/facture et appelle /home/www-data/signpdf .

<config>
  <guard email="root@localhost" name="IWatch"/>
  <watchlist>
    <title>Dolibar signing</title>
    <contactpoint email="root@localhost" name="Administrator"/>
    <path type="recursive" syslog="on" alert="off" events="close_write" exec="sudo -u www-data /home/www-data/signpdf %f 'Non-modification et Origine du document' >> /home/www-data/pdf.log 2>/home/www-data/pdf2.log">/home/dolibardocs/facture</path>
  </watchlist>
</config>

Le script signpdf. A modifier: certificat, mot de passe, localisation JSignPdf.jar et éventuellement le serveur de temps (comodo ci-dessous).

#!/bin/bash -xv
# Modified from From https://wiki.lyx.org/FAQ/PDF#digitalsignpdf
# Sign PDF file.
# signpdf <inpdf>
#  OR
# signpdf <inpdf> <outpdf>
echo "$*"

# Personalize:
CERT=PATH_TO_YOUR_CERTIFICATE_PFX
PASS=CERTIFICATE PASSWORD
LOCATION="YOUR_CITY_IF_USIGN_SIGN_TEXT"
#Define Signtext if you want a text on the PDF.
#SIGNTEXT='--l2-text "Signee numeriquement par (${signer} le ${timestamp} a ${location}, ${reason}, ${contact})'
#SIGNTEXT2='--l4-text (${signer}, ${timestamp}, ${location}, ${reason}, ${contact})'

INFILE="$1"
OUTFILE="$2"
REASON="$3"

# In case directory was renamed, find other potential file.
if [[ ! -x "${INFILE}" ]] ; then
    FILEDIR=$(dirname "$INFILE")
    FILEDIR=$(dirname "$FILEDIR")
    FILENAME=$(basename "$INFILE")
    INFILE=$(realpath $(echo "${FILEDIR}/*/${FILENAME}"))
    echo Changed to "$INFILE"
fi

if [[ ${INFILE: -4} != '.pdf' ]] ; then
    echo Not a PDF $INFILE
    exit
fi

if [[ ${INFILE: -5} == ').pdf' ]] ; then
    echo Temporary file
    exit
fi

if [[ ${OUTFILE: -5} != ').pdf' ]] ; then
    REASON="$OUTFILE"
    unset OUTFILE
fi

if [[ ${REASON}.'' != '' ]] ; then
    REASON_OPT="-r '$REASON' "
fi


JSP="java -Duser.language=fr -jar /home/www-data/jsignpdf-1.6.3/JSignPdf.jar "
LOCATION="-l '${LOCATION}'"
# set TS=-ts https://freetsa.org/tsr  -ta NONE -tsh SHA512
TS="-ts http://timestamp.comodoca.com/rfc3161 -ta NONE -tsh SHA512"
OCSP=" --ocsp"
V=" -llx 5 -lly 0 -urx 500 -ury 30 -V -fs 8"
CL=" -cl CERTIFIED_NO_CHANGES_ALLOWED"
# CL=" -cl CERTIFIED_FORM_FILLING_AND_ANNOTATIONS"


TMPFILE=$(basename "${INFILE%.pdf}_signed.pdf")
if [[ "$OUTFILE" == "" ]] ; then
    # If target PDF is empty, backup source PDF
    OUTFILE="$INFILE"
    ORGFILE="${INFILE%.pdf}_unsigned.pdf"
fi

WORKDIR=/tmp
TMPFILE="${WORKDIR}/${TMPFILE}"
$JSP -d $WORKDIR -kst PKCS12 -ksf $CERT -ksp $PASS -ha SHA512 $TS $OCSP $V $CL $SIGNTEXT $SIGTEXT2  $INFILE $REASON_OPT 2>/home/www-data/err.log > /home/www-data/p.log

mv "$INFILE" "$ORGFILE"
mv "$TMPFILE" "$OUTFILE"

Jsignpdf: JSignPdf download | SourceForge.net .

Vous aurez aussi besoin d’un Java compatible avec le jsignpdf utilisé.

Puisque c’est du java, cela peut fonctionner sous plusieurs plateformes à condition d’adapter le script ‹ bash ›. Et cela pourrait probablement être intégré sous dolibarr sans trop de difficulté si on autorise un appel à jsignpdf .

Apparemement j’avais déjà écrit à ce sujet: Signature électronique - #9 par le_top .

1 « J'aime »