====== API PA - Mise à jour du statut ====== ===== Principe ===== Pour mettre à jour le statut d'un PA, veuillez utiliser l'API suivante, notamment dans le cadre d'une **post-action**. Cette API permet de : * garantir la **traçabilité** de l'action ; * vérifier la **faisabilité du changement de statut** ; * déclencher l'événement permettant de mettre effectivement à jour le statut sur le PA. **Ne modifiez jamais directement les tables ''_paachat'' ou ''_pavente''.** La mise à jour doit obligatoirement passer par l'API ''update_status''. ===== API ===== def update_status( usession, entity, newstatusid: int, tfqn=None, vrsid=None, pa_entity_id=None, remote=True, pa_tstamp=None, motifid=0 ) -> tuple[int, str, int]: ===== Paramètres ===== ^ Paramètre ^ Description ^ | ''usession'' | Session avec une connexion BDD ouverte. | | ''entity'' | Entité concernée : ''"achat"'' ou ''"vente"''. | | ''newstatusid'' | Nouveau **statut principal**. Exemple : ''204'' → ''212''. | | ''tfqn'' | Nom de la table contenant l'entité. À utiliser avec ''vrsid''. | | ''vrsid'' | Identifiant auto-incrémenté de l'entité dans la table ''tfqn''. À utiliser avec ''tfqn''. | | ''pa_entity_id'' | Identifiant auto-incrémenté de l'entité dans la table ''paachat'' ou ''pavente''. Alternative au couple ''tfqn'' + ''vrsid''. | | ''remote'' | Indique si le statut provient du PA. Pour une mise à jour locale, **toujours utiliser ''False''**. | | ''pa_tstamp'' | Timestamp du PA. **Ne pas renseigner** : la date courante sera utilisée automatiquement. | | ''motifid'' | **Statut secondaire / motif**. Exemple : ''21001'', ''21002'', etc. | ===== Identification de l'entité ===== L'entité à mettre à jour peut être identifiée de deux façons. ==== Avec ''tfqn'' + ''vrsid'' ==== Utiliser : tfqn = nom_de_la_table vrsid = identifiant_auto_increment ==== Avec ''pa_entity_id'' ==== Il est également possible de fournir directement l'identifiant auto-incrémenté de l'entité dans : * ''paachat'' pour un achat ; * ''pavente'' pour une vente. Il faut utiliser **soit** le couple ''tfqn'' + ''vrsid'', **soit** ''pa_entity_id''. ===== Paramètre ''remote'' ===== Pour une mise à jour effectuée localement, utilisez toujours : remote=False La valeur ''remote=True'' est réservée aux statuts **reçus du PA**. ===== Paramètre ''pa_tstamp'' ===== Ne renseignez pas le paramètre ''pa_tstamp''. L'API utilisera automatiquement la **date et l'heure courantes**. ===== Exemple ===== ==== Refus d'un achat avec le motif 21002 ==== Dans cet exemple, l'achat passe au statut principal ''210'' avec le motif ''21002''. import common import pa_common vses = common.dbses() retcode, reterror, retlogid = pa_common.update_status( vses, "achat", 210, tfqn="ez_facture_fournisseur", vrsid=345, remote=False, motifid=21002 ) vses.db.disconnect() ===== Retour de l'API ===== L'API retourne un tuple de trois valeurs : (retcode, reterror, retlogid) ^ Valeur ^ Description ^ | ''retcode'' | Code retour de l'opération. | | ''reterror'' | Message d'erreur ou ''"ok"'' si l'opération a réussi. | | ''retlogid'' | Identifiant de l'enregistrement de traçabilité (log). | ==== Exemple de succès ==== 0, "ok", 15487 Dans cet exemple : * ''0'' indique que l'opération a réussi ; * ''"ok"'' indique qu'aucune erreur n'a été rencontrée ; * ''15487'' est l'identifiant du log de traçabilité. ==== Exemple d'erreur ==== -5, "mise a jour de statut impossible pour ce statut : deja en cours de synchronisation", 0 Dans cet exemple, la mise à jour n'a pas été effectuée car le PA est déjà en cours de synchronisation. En cas d'erreur, il convient de vérifier ''retcode'' et ''reterror''. Le ''retlogid'' peut être égal à ''0'' lorsqu'aucune opération de traçabilité n'a été enregistrée. ===== Récapitulatif ===== ^ Élément ^ Valeur / règle ^ | API | ''pa_common.update_status()'' | | Entité | ''"achat"'' ou ''"vente"'' | | Statut principal | ''newstatusid'' | | Motif / statut secondaire | ''motifid'' | | Identification | ''tfqn'' + ''vrsid'' **ou** ''pa_entity_id'' | | Mise à jour locale | ''remote=False'' | | ''pa_tstamp'' | Ne pas renseigner | | Modification directe des tables | **Interdite** | | Retour | ''retcode'', ''reterror'', ''retlogid'' |