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