# Mise à jour des catégories en masse

**URL:** https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137
**Category:** User
**Created:** [March 29, 2024, 5:43pm UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137 "2024-03-29T17:43:43Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![jmn](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/jmn/32/2904_2.png) [@jmn](https://discuss.tryton.org/u/jmn)
#### Post date: [March 29, 2024, 5:43pm UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/1 "2024-03-29T17:43:43Z")

</div>

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)](https://www.douane.gouv.fr/actualites/nomenclature-combinee-8-chiffres-nc8-nouveautes-2023) 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:
  - Par exemple, il y a un bogue présent le fichier source que nous avons importé: [Annexe 7 - Liste récapitulative des codes NC en vigueur au titre de l’année 2023 (libellés autosuffisants) (NC « 2023a-FR »)](https://www.douane.gouv.fr/actualites/nomenclature-combinee-8-chiffres-nc8-nouveautes-2023) (l’Europe, c’est plus ce que c’était…):
    - ![image](https://discuss-cdn.tryton.org/uploads/default/original/2X/c/c243c77429f30a5b6ec48e5a713355c4dffbfea6.png)

  - On peut le corriger à la main (et à la marge!), sur chaque service:
    - ![image](https://discuss-cdn.tryton.org/uploads/default/original/2X/5/542629f7e3f5eea059f58d4e7e19fcb7001e8ca1.png)

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](https://www.douane.gouv.fr/sites/default/files/2022-11/23/NC2023_annexe1.xls)
  - **2 - Liste des 23 codes NC supprimés** à compter du 1er janvier 2023 (annexe 2): [NC2023\_annexe2.xls](https://www.douane.gouv.fr/sites/default/files/2022-11/23/NC2023_annexe2.xls)

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [March 29, 2024, 11:11pm UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/2 "2024-03-29T23:11:02Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![jmn](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/jmn/32/2904_2.png) [@jmn](https://discuss.tryton.org/u/jmn)
#### Post date: [March 30, 2024, 1:53am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/3 "2024-03-30T01:53:07Z")

</div>

> [@ced](#):
>
> 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?

---

<div class="post-metadata">

### Author: ![jmn](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/jmn/32/2904_2.png) [@jmn](https://discuss.tryton.org/u/jmn)
#### Post date: [March 30, 2024, 2:05am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/4 "2024-03-30T02:05:23Z")

</div>

> [@jmn](#):
>
> Est-ce que ça pourrait être un truc genre, dans le format CSV:
> 
> 1. si l’ID est renseigné, c’est une mise à jour (comme désactiver un record);
> 2. si l’ID n’est pas renseigné, c’est une création.

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?

---

<div class="post-metadata">

### Author: ![2cadz](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/2cadz/32/130_2.png) [@2cadz](https://discuss.tryton.org/u/2cadz)
#### Post date: [March 30, 2024, 7:19am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/5 "2024-03-30T07:19:56Z")

</div>

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

---

<div class="post-metadata">

### Author: ![SISalp](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/sisalp/32/200_2.png) [@SISalp](https://discuss.tryton.org/u/SISalp)
#### Post date: [March 30, 2024, 6:10pm UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/6 "2024-03-30T18:10:54Z")

</div>

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 ?

---

<div class="post-metadata">

### Author: ![ced](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/ced/32/1237_2.png) [@ced](https://discuss.tryton.org/u/ced)
#### Post date: [March 31, 2024, 1:59am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/7 "2024-03-31T01:59:40Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![jmn](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/jmn/32/2904_2.png) [@jmn](https://discuss.tryton.org/u/jmn)
#### Post date: [March 31, 2024, 8:04am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/8 "2024-03-31T08:04:02Z")

</div>

> [@ced](#):
>
> ç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:

```auto
[...]
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:

```auto
[...]
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… 🙂

---

<div class="post-metadata">

### Author: ![SISalp](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/sisalp/32/200_2.png) [@SISalp](https://discuss.tryton.org/u/SISalp)
#### Post date: [March 31, 2024, 8:22am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/9 "2024-03-31T08:22:07Z")

</div>

> [@ced](#):
>
> Justement si elle évolue si souvent

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..

---

<div class="post-metadata">

### Author: ![SISalp](https://discuss-cdn.tryton.org/user_avatar/discuss.tryton.org/sisalp/32/200_2.png) [@SISalp](https://discuss.tryton.org/u/SISalp)
#### Post date: [March 31, 2024, 8:36am UTC](https://discuss.tryton.org/t/mise-a-jour-des-categories-en-masse/7137/10 "2024-03-31T08:36:46Z")

</div>

> [@jmn](#):
>
> est-ce qu’il faut relancer les scripts

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