Mise à jour des catégories en masse

On ne change pas une équipe qui gagne, alors j’ai une nouvelle question Tryton pour DISTILIBRE (franchement, on est motivés!).

Quelles sont les bonnes pratiques pour mettre à jour les catégories de produits de façon massive (en fermant les yeux) et automatique (en filant des fichiers de mise à jour officiels)?

Le besoin est d’arriver à un truc comme les taux de change des devises ou encore les tarifs des transporteurs qu’on peut mettre à jour (même si je comprends que ça nécessite un service tiers toujours up et disponible pour les données de référence, sinon ça marche pas).

Ici, nous utilisons les catégories douanières et les codes tarifaires pour intégrer la nomenclature combinée à 8 chiffres européenne (NC8) dans DISTILIBRE.

Mais je remarque deux difficultés:

  1. Elle peut contenir des erreurs, et donc nous devons pouvoir la faire évoluer pour tous nos services qui utilisent ces catégories:
  2. La NC8 est mise à jour régulièrement en application du règlement européen en fournissant officiellement les fichiers suivants par exemple:
    • 1 - Liste des 42 NC créées à compter du 1er janvier 2023 (annexe 1): NC2023_annexe1.xls
    • 2 - Liste des 23 codes NC supprimés à compter du 1er janvier 2023 (annexe 2): NC2023_annexe2.xls

Je pense qu’il y a moyen d’utiliser l’import CSV pour une structure aussi simple.
Car l’import CSV peut être utiliser aussi pour mettre à jour si on définit une colonne id. Cette colonne peut contenir le nom du record à mettre à jour. Donc dans cette example le code de la catégorie.
Par contre un import doit soit contenir que des mise à jour soit que des créations. Mais a priori il devrait être possible d’améliorer l’import pour gérer les deux cas d’un coup.

Est-ce que ça pourrait être un truc genre, dans le format CSV:

  • si l’ID est renseigné, c’est une mise à jour (dont désactiver un record);
  • si l’ID n’est pas renseigné, c’est une création.

Par contre, ça veut dire qu’il y a une bijection entre l’ID dans Tryton et l’ID dans le référentiel (ici, c’est facile, le code NC en tant que tel est unique et peut être mis à jour, créé, ou encore rendu obsolete, donc ça marche aussi).

C’est ça?

1 Like

Je complète:

  1. (de façon générique) si l’ID n’est pas renseigné
    • ET que le nom des records ou leurs codes doivent être uniques
      • par exemple, les codes des Produits, s’ils sont renseignés, doivent être uniques;
      • a contrario, ils ne sont pas uniques pour les Locations;
    • ALORS si le nom/code du record est renseigné ET qu’il est unique, c’est une création;
      • sinon c’est une mise à jour…

Un truc comme ça?

Tu as déjà quelque chose de ce type qui fonctionne dans les scripts d’intégration que je t’ai mis a disposition.
Recherche d’un éléments par son ‘_rec_name’ et mise a jour.

mes 2cts

Si ces catégories doivent se mettre à jour selon la réglementation qui évolue annuellement, ne doivent-elles pas être intégrées en xml dans le module pour mise à jour automatique à chaque nouvelle version du module ?

Justement si elle évolue si souvent, les maintenir en standard dans de l’XML ne permettra pas de les mettre à jour si souvent.
Maintenant s’il y a une source structurée ça pourrait se gérer comme l’import de pays ou code postal.

Si je comprends bien ce fonctionnement type (en lisant vite fait le code de ces scripts):

  1. Il y aurait donc un script trytond_import_nc8 dans je ne sais quel module, qui a toutes les données de références structurées, genre:
    [...]
    ORGANIZATIONS = {
        # Founding members has no from date
        'EU': {
            'AT': [(dt.date(1995, 1, 1), None)],
            'BE': [(None, None)],
    [...]
    
  2. Dans chaque script, il y a toute la logique de mise à jour, genre si le record existe déjà on le remplace:
    [...]
    def update_countries(countries):
        [...]
        if code in countries:
            [...]
            if organization_code in organizations and code in members:
    
  3. Lorsque met à jour Tryton, ce script qui est dans le répertoire du module, est à jour également (avec les dernières améliorations).

Mais alors, après avoir mis à jour les modules Tryton, est-ce qu’il faut relancer les scripts trytond_import_countries, trytond_import_postal_codes ou trytond_import_currencies à la main pour mettre à jour leurs données respectives?

En toute logique, je dirai que oui, c’est manuel, mais je ne suis pas sûr… :slight_smile:

Si j’ai bien compris, elles représentent une version de la réglementation qui évolue chaque année, mais pas en cours d’année.
Je crois aussi que l’historique de ces données réglementaires doit accompagner les données d’opération de l’année civile correspondante.
Pas comme les codes postaux. Plutot comme les règles de taxes associées à chaque période historique…

Je trouce que la mise à jour des codes postaux est merdique, mais je suis prêt à écouter des arguments contraires.