---
# System prepended metadata

title: Spécifications Technique 2.16.0

---

# Spécifications Technique 2.16.0

### ==TMA-155 Ajout des frais de distribution en fiche produit et actualisation composition pack (si existant).==

Travail a faire : 

- Lors de l'intégration d'un CGN, valoriser et stocker la valeur contenue dans les champs tauxDistri et fraiDistri associé à un article si une valeur est différente de "vide".

- Ajouter un nouveau service qui renvoie les frais de distribution ainsi que le montant MLO ALO pour un article Commande donnée en paramètre. 

Ajouter deux nouveaux champs en fiche article : 
**Taux frais de distribution** : XX,XX %
**Montant frais de distribution** : YY,YY €

Par défault les montants seront initialiser a 0.0 pour les deux lignes.

#### **Scénario 1 : visualiser la fiche article depuis le catalogue général**


Conditions **Taux frais de distribution** :
```
Si tauxDistri > 0
    Taux frais de distribution = **tauxDistri** %
Sinon si tauxDistri == 0
    Taux frais de distribution = 0.00 %
Sinon
    Ne pas afficher la ligne
```  
Conditions **Montant frais de distribution** : 
  
```
Si tauxDistri > 0
    Montant frais de distribution = **fraisDistri** %
Sinon si tauxDistri == 0
    Montant frais de distribution = 0.00 €
Sinon
    Ne pas afficher la ligne
```

#### **Scénario 2 : Visualiser la fiche article depuis une commande**

Récupération des deux valeurs auprès d'un nouveau service coté remise qui va envoyer les frais de distrib ET la remise MLO/ALO de l'article du bon de commande. 

Conditions **Taux frais de distribution** : 
```
Si l'article du bon de commande contient une remise de type MLO ou ALO supérieur ou égale à 0 
    - Alors Taux frais de distribution = **taux** (MLO ou ALO) %
Sinon
    - Cacher ligne
```

Conditions **Montant frais de distribution** : 
```
Si une valeur existe dans la colonne frais distribution du bon de commande et que supérieur ou égale à 0
    - Alors Montant frais de distribution = **Frais distribution du bon de commande**.
Sinon
    - Cacher ligne
```

Respecter ce fonctionnement avec les boutons précédant suivant


#### **En addition**

Ajouter deux nouvelles colonnes dans le tableau de l'onglet "Composition du pack" :

**Prix hors FD (En €)**
```
Si tauxDistri > 0
    PrixHorsFD = puht - fraisDistri
Sinon 
    PrixHorsFD = puht
```  
**Frais distrib. (en €)**  
  
```
Si tauxDistri > 0
    FraisDistrib = fraisDistri 
Sinon si tauxDistri == 0
    FraisDistrib = 0
Sinon
    FraisDistrib = vide
```

Renommer la colonne Prix de vente unitaire HT par **Prix Catalogue HT (en €)**

### ==TMA-308 Ordre d'affichage du BDC sur lot2==

Ajouter le champ "ordre" sur les articles des catalogues d'offres. 
Trier les articles en fonction de cette nouvelle valeur dans le BDC, l'export BDC Excel, l'affichage SA et les retours ERP par ordre d'affichage croissant.

Règle de regroupement : 
Si valeur de champ "ordre" consécutive ET si arborescence en commun, alors regrouper l'arborescence (nature/rayon/famille/sous-famille) des articles au maximum,
Sinon répéter les niveaux.

#### **Scénario 1 : Champs "ordre" nul**

Si le champ "ordre" n'existe pas alors on laisse l'ordre existant (aujourd'hui).

#### **Scénario 2 : Tous les articles possèdent un champ "ordre" différent de null**

Trier les articles en fonction de leur valeur "ordre" par ordre croissant ET respecter règle de regroupement.
Si même valeur de champ "ordre" alors on laisse l'ordre existant (aujourd'hui).

#### **Scénario 3 : Seulement une partie des articles possèdent un champ "ordre" non nul**

Si champ "ordre" alors afficher en premier ces articles par ordre croissant ET respecter règle de regroupement puis afficher les autres articles d'ordre existant (aujourd'hui).


:::info
### Risque de regression
Risque de regression au niveau de l'export du bon de commande
Risque de regression sur l'affichage des article MERCURIALE
:::
### ==TMA-127 - Persistance des filtres sur onglet Liste Magasin/Recap Commande pour utilisateur SA==

Ajouter la persistance des filtres pour les onglets : récap commande et Liste magasins
Faire en sorte de mémoriser les filtres "conseiller ALI/NAL/ULF", "plateforme" statut  et BOX/CAM Obligatoire/Vrac

- Conserver filtres "conseiller ALI/NAL/ULF" tout le temps. (Il n'y a pas de bouton de réinitialisation.
- Ne pas conserver le filtre "Statut", "Plateforme et BOX/CAM Obligatoire/Vrac" lors d'un changement d'offre ni après déconnexion/reconnexion

:::info
### Risque de regression
Risque de régression sur les autres éléments persistant de b2bio
:::
### ==TMA-281 - Ré-import des stocks limités==

#### **Travail a faire :**

- Ajouter un service dédié à Redis au projet BtoBio-Back
    - Service de connection à Redis
    - Implémenter les différentes fonction utiles à la récupération et la modification de données
    - Prévoir l'architecture permettant l'ajout de nouveau service REST dédié à Redis
- Ajouter le champ "stockLimite":  (boolean) à un article du catalogue (true = un article à stock limité sinon false)
- Ajouter le champ "maj" à CatalogueDto (XML OFFRE COM)
- Adapter la fonction d'import d'une offre pour permettre la mise a jour du stock sur les articles associés à une offre 


#### **Architecture Redis**

CLE : 
```
codeOffre#codeProduit // A verifier codeOffre peut pas '#' et codeProduit
```
VALEUR :
```json
{
    "stockCommandee" : number, // NB Articles disponible à la commande
    "stockInitial" : number, // NB articles lors de la premiere intégration
    "stockActuel" : number // Dernier stock initial mit à jour
}
```

:::info
### Attention
En clé, il faut ajouter le code de l'offre et le code produit.
Nous suggérons d'ajouter le symbole '**#**' comme délimiteur.
Cela implique que le code produit ET que le code d'une offre ne pourra jamais contenir le symbole '**#**'.
:::


#### **Algorithme stock restant Integration d'une offre**

Lors de l'intégration d'un Catalogue d'offre

```
Si <maj></maj> est présent ET est égale à "contingentement"
    Mettre a jour les stocks de tous les articles
    Pour chaque article :
        Si contingentement est vide ou absent
            stockLimite = false (L'article n'a pas de stock limité)
        Sinon
            stockLimite = true (L'article à un stock limité)
            Si aucune valeur existe dans redis
                stockInitial = contingentement
                stockActuel = contingentement
                stockCommandee = 0
            Sinon
                Si stockCommandee est vide (exemple : erreur serveur, tout est supprimé pour X raison)
                    stockCommandee = Récupération des quantités déja commandées (sum(qte) articlecommande coté BDD)
            
                Si contingentement >= stockCommandee
                    stockActuel = contingentement (mise à jour du stock)
                Sinon
                    stockActuel = stockCommandee
                    Afficher Warning
```




:::info
### Risque de regression
Risque de régressions sur des incohérences de données
:::

### ==TMA-280 - Gestion des stocks limités==

#### **Travail a faire :**

- Ajouter un nouveau end point permettant de fournir les stocks restant d'une liste d'articles.
- Ajouter une nouvelle ligne 'Stock restant XXX' en dessous de la quantité d'un article en bon de commande et en fiche article et afficher le stock restant associé
- Modifier la requête PATCH permettant l'ajout ou la modification d'une quantité d'un article en vérifiant si la quantité demandée est inférieur ou égale au stock restant.
- Modifier la requête de création d'une commande et vérifier que la quantité de l'article est inférieur ou égale au stock restant.
- Ajuster les erreurs à l'affichage


#### **Algorithme Lecture et Ecriture**

```
// Lecture des stocks pour une commande magasin
Lock de la clé Redis(codeOffre#codeProduit)
    Stocks = Récupération des stock de rédis
    Si(Stocks inexistant){
        Stocks.stockActuel = Récupération du stock actuel de l'article pour l'offre
        Stocks.stockCommandee = Récupération des quantités déja commandées (sum(qte) articlecommande)
        Stocks = Valorisation du stock dans la variable locale
        Mise à jour dans Redis de la clé Redis(codeOffre#codeProduit)
    }
Libération du Lock de la clé Redis(codeOffre#codeProduit)
renvoyer Stocks
```

```
// Mise à jour des stocks pour une commande magasins
Lock de la clé Redis(codeOffre # codeProduit)
    Stocks = Récupération des stock de rédis
    Si(Stocks inexistant){
        Stocks.stockActuel = Récupération du stock actuel de l'article pour l'offre
        Stocks.stockCommandee = Récupération des quantités déja commandées (sum(qte) articlecommande)
        Stocks = Valorisation du stock dans la variable locale
    }
    
    Stocks.stockCommandee = Stocks.stockCommandee + quantités commandées par le magasin
    Stocks.stockRestant = Stocks.stockActuel - Stocks.stockCommandee
    
    Mise à jour dans Redis de la clé Redis(codeOffre#codeProduit)
Libération du Lock de la clé Redis(codeOffre # codeProduit)
```

#### **Scénario 1 : Création d'une commande (bon de commande ou fiche article)**

```
Si la quantité est supérieure au stock restant ALORS
    - Créer commande ET Afficher message
```
#### **Scénario 2 : Modification de commande (Statut Brouillon) (bon de commande ou fiche article)**
  ```  
Si la quantité est supérieure au stock restant ALORS
    - Afficher message erreur
   ``` 
   
#### **Scénario 3 : Click sur "commander"**

```
boolean miseAJourPossible = true
Parcourir chaque article avec stockRestant de la commande
    VERROU
    Si qte <= stockRestant
        Alors ajuster les stocks restant dans redis (stockCommandee +1)
    Sinon
        Renvoyer Erreur de Stock 409
    VERROU
```

#### **Scénario 4 : Modification de commande (Statut Commandé) (bon de commande ou fiche article)**

```
Si modification de la quantité ET QUE click sur enregistrer ou calculerRemise ALORS

    Si augmentation de la quantité ET qu'elle est inférieur au stock restant 
        Parcourir chaque article avec stockRestant de la commande
        VERROU
        Si qte >= stockRestant
            Alors ajuster les stocks restant dans redis (stockCommandee +1)
        Sinon
            Renvoyer Erreur de Stock 409
        VERROU
    Sinon SI diminution de la quantité
        Parcourir chaque article avec stockRestant de la commande
        VERROU
        Si qte >= stockRestant
            Alors ajuster les stocks restant dans redis (stockCommandee +1)
        Sinon
            Renvoyer Erreur de Stock 409
        VERROU
```  

#### **Scénario 5 : Modification d'une quantité coté GESTIONNAIRE (Controle des quantités)**

```
Pour chaque article du tableau
    Si l'Article contient un stock limité
        - Alors griser la colonne + readonly
    Sinon
        - Laisser tel quel
```


:::info
### Risque de regression
Risque de régression sur l'affichage du bon de commande
:::


### ==TMA-161 - Affichage du suivi de commande en magasin==

Modifier l'affichage des offres sur onglet suivi de commande en fonction de leur ancienneté et le leur type

- Offre précommande ferme ou avec réassort

Afficher les offres de type "offre évenementielle" datant de moins de 14 mois après la date de fin d'opération (commandes préco et réassort)
--> Récupérer en base les commandes si finCommande >= dateDuJour - 14 mois puis afficher commande
--> Récupérer en base les commandes si dateFinReassort >= dateDuJour - 14 mois puis afficher commande


Afficher les offres pour tous les autres types datant de moins de 6 mois après date de fin d'opération (commandes préco et réassort)
--> Récupérer en base les commandes si finCommande >= dateDuJour - 6 mois puis afficher commande
--> Récupérer en base les commandes si dateFinReassort >= dateDuJour - 6 mois puis afficher commande

- Offre précommande FEL

Afficher les offres datant de moins de deux mois après la date de fin de précommande
--> Récupérer en base les commandes si dateFinPrecommande >= dateDuJour - 2 mois puis afficher commande

- Offre opération

Afficher les offres de type "FEL" datant de moins de 2 mois après la date de création de commande 
--> Récupérer en base les commandes si dateCreationCommande >= dateDuJour - 2 mois puis afficher commande

Afficher les autres offres datant de moins de 2 mois après la date de création de commande réelle
--> Récupérer en base les commandes si dateCreationCommande >= dateDuJour - 2 mois puis afficher commande


Ajouter 5 nouvelles valeurs en BDD (table paramètres fonctionnels, schéma référentiel) correspondant au critère d'affichage (en nb de mois) : 
- PRECO : 6 
- PRECO_EVENEMENTIEL : 14
- PRECO_FEL : 6
- OPE : 2
- OPE_FEL : 2


### ==TMA-314 - Suppression sur offre en réassort des semaines ou jours affichés en opérations==


#### **Travail a faire :** 

Masquer la colonne 'Sem Jour livraison'
Modifier l'intégration des articles à une commande si l'offre est en période de réassort lors d'un retour ERP.
Modifier l'affichage du recap commande
Ajout d'un nouveau flag pour déterminer que la commande est de type OPE

#### **Ajout d'article à une commande:**

```
Si precommande == NULL ET que la date du jour est supérieur ou égale à la date de debut réassort
    FLAG OPE = true (commande)
    article.commandeSemaine = vide;
    article.typeSemaine = null;
    article.semaineOriginal = null;
    article.semaine = null;
Sinon
    FLAG OPE = false (commande)

```

#### **Retour ERP**

Lors de l'intégration d'une offre sur une commande dont le flag OPE = true, l'intégration se fait uniquement sur **codeArt**

#### **Page récap coté gestionnaire**

Ajout d'une nouvelle colonne "OPE" sur les onglets : 'Contrôle des quantités / engagement / Total'.
Afficher dans cette colonne à  côté de chaque article si la date du jour est superieur ou egale a la periode de réassort. Les quantités correspondent aux commandes dont le flag OPE est égale à TRUE.
Pas de modification de l'export appro et tableau intégration.




