L’automatisation des inventaires, réaliser l’application

L’automatisation des inventaires, réaliser l’application

Chapitre 3 : réalisation

Introduction

L’objectif de ce chapitre est d’aboutir à une automatisation des inventaires.

Nous avons donc adoptés pour la création et l’exploitation de notre base de données MySQL avec le paquet Wampserver et comme langage de manipulation SQL, ainsi que l’utilisation d’un environnement de programmation « Symfony » permettant un développement rapide d’application.

Nous allons aussi dévoiler le matériel nécessaire pour l’application, enfin nous finirons par suite en montrant les principales interfaces et fenêtres de l’application QR237 pour la gestion d’inventaire.

3.1 Environnement de travail (matériel et logiciel)
3.1.1 Environnement logiciel

* Implémentation de la base de données

** La base de données

Une base de données est composée de données stockées dans des mémoires de masse sous une forme structurée, et accessibles par des applications différentes et des utilisateurs différents.

Une base de données doit pouvoir être utilisée par plusieurs utilisateurs en même temps.

** Système de Gestion de Bases de Données

Un SGBD (Système de Gestion de Bases de Données) est un ensemble de logiciels chargés d’assurer les fonctions minimales suivantes :

-Le maintien de la cohérence des données entre elles.

-Le contrôle d’intégrité des données accédées.

-Les opérations classiques sur les données (consultation, insertion, modification, suppression)

-Les autorisations d’accès aux données.

Et pour la création de notre base de données on a utilisés le logiciel Wampserver.

** WampServer

WampServer est une plateforme de développement Web sous Windows pour des applications web dynamiques à l’aide du serveur Apache2, du langage de scripts PHP et d’une base de données MySQL.

Il vous permettra, entre autres choses :

-de créer et déployer des applications plus sûres, plus puissantes et plus fiables.

-de proposer aux développeurs un environnement de développement riche, souple et moderne permettant de créer des applications de bases de données plus sûres.

-de partager des données entre diverses plates-formes, applications et systèmes pour faciliter les connexions, tant internes qu’externes.

** Langage de Manipulation de Bases de Données

SQL (Structured Query Language) est un langage de manipulation utilisé pour construire des requêtes et pour accéder aux systèmes de base de données, et il permet trois types de manipulations :

-La maintenance des tables : création, suppression, modification des tables.

-La manipulation des données : sélection, modification, suppression d’enregistrements.

-La gestion des droits d’accès aux tables : contrôle des données, droits d’accès, validation des modifications.

* Environnement de développement

logo de Symfony

Figure 28: logo de Symfony ( Google, 2021)

Symfony est un ensemble de composants PHP ainsi qu’un framework MVC libre écrit en PHP. Il fournit des fonctionnalités modulables et adaptables qui permettent de faciliter et d’accélérer le développement d’un site web.

Symfony 1.x, 2.x et 3.x utilisent la version 5 de PHP (PHP ≥ 5.2.4 pour SF1, PHP ≥ 5.3.3 pour SF2 et PHP ≥ 5.5.9 pour SF3).

La version 7 de PHP est quant à elle utilisée pour Symfony 4.x (PHP ≥ 7.1) et Symfony 5.x (PHP ≥ 7.2.5).

Nous avons utilisés Symfony dans sa version 4 pour le développement de QR237.

Page d’accueil de Symfony

Figure 29 : Page d’accueil de Symfony

* Les éditeurs de codes

Les éditeurs de codes

Un éditeur de code source léger offrant la prise en charge intégrée de JavaScript, TypeScript et Node.js, un écosystème d’extensions complet (C++, C#, Java, Python, PHP et Go) et des runtimes (comme .NET et Unity).

C’est l’éditeur de code que nous avons utilisé l’application web du projet.

Android Studio

Android Studio possède de plus en plus de qualité par rapport à ses premières versions et à Eclipse. Ce dernier est de plus en plus critiqué par sa «lourdeur» à l’utilisation et son avenir depuis le rachat d’Oracle.

Donc il est possible que Google décide d’abandonner un jour ADT pour seulement proposer gratuitement Android Studio.

Une autre différence, Gradle qui apporte des fonctionnalités intéressantes :

  • Permet la construction de projet
  • Combine Ant et Maven
  • Permet d’écrire des tâches de construction utilisant le langage Groovy (tests unitaires, …)
  • Facilité d’intégrer des plugins (comme Google l’a fait pour Android Studio)
  • Gestion automatique des dépendances

Ces fonctionnalités sont utiles pour le développement d’application en milieu professionnel. C’est l’éditeur de code que nous avons utilisé pour l’application mobile.

PHP (Personal Home Page)

PHP (Personal Home Page) est un langage de programmation complet, assez proche du

C. Il fournit : des structures de données, des structures de contrôle, des instructions de gestion des entrées/sorties.

Il est diffusé également sous licence libre. Il permet la création de pages web dynamiques.

C’est le langage qui permet à l’utilisateur d’interagir avec le serveur web. Techniquement, à fin d’utiliser symfony 4 sur notre PC, nous avons ajoutés le chemin d’accès aux variables d’environnement php (le dossier www de Wampserver) dans les paramètres de notre système d’exploitation.

Git est un logiciel de gestion de version

Git est un logiciel de gestion de version. Git va nous permettre d’enregistrer les différentes modifications effectuées sur un projet et de pouvoir retourner à une version précédente du projet.

Composer est un logiciel gestionnaire

Composer est un logiciel gestionnaire de dépendances libre écrit en PHP. Il permet à ses utilisateurs de déclarer et d’installer les bibliothèques dont le projet principal a besoin.

Le logiciel WampServer

Le logiciel WampServer est un outil de développement PHP / MySQL avec un serveur Web Apache développé par Romain Bourdon, Hervé Leclerc et Otomatic.

Un des grands avantages de cet outil, c’est qu’on peut passer facilement d’une version de PHP, MySQL ou Apache à l’autre facilement.

diagramme des classes de symfony

Figure 30: diagramme des classes de symfony (Google, 2021)

Framework:

M

Propel

Propel est un Object-Relational Mapping (ORM) open-source pour les bases de données SQL en PHP 5.4. Il vous permet d’accéder à votre base de données à l’aide d’un ensemble d’objets, fournissant une API simple pour stocker et récupérer des données.

Mais non seulement l’ORM simple, mais il fournit également la migration de schéma de base de données, l’ingénierie inverse de la base de données existante et bien plus encore.

Doctrine

La configuration de Doctrine peut être trouvée dans le cadre du fichier de configuration Symfony plus grand dans app/config/config.yml et ressemblerait à ceci : Comme Doctrine est une couche au-dessus de PDO, il est possible d’utiliser n’importe quel système de gestion de base de données pris en charge par PDO (comme MySQL, PostgreSQL, Microsoft SQL, MongoDB et MariaDB).

V

Helpers

Les helpers, que l’on pourrait traduire par assistants, sont des fonctions écrites pour faciliter le travail du développeur.

On en retrouve dans différents domaines, comme pour le traitement des dates, des chaînes de caractères.

Par exemple, le helper strip_links_text, qui provient de la classe TextHelper, remplacera une balise de type lien par son contenu. Utiliser des helpers permet de gagner beaucoup de temps. Il est possible de créer ses propres Helpers.

sfView

La couche View est fournie par la classe sfView, un tas d’helpers et de modèles écrits par le développeur.

C

sfController

La couche Controller est basée sur une chaîne de filtres et des actions définies par le développeur.

sfFilter

Cette façon de faire laisse donc une certaine flexibilité et permet une fois de plus d’avoir un code simple, clair et factorisé. On trouve là tout la puissance de Symfony. Pour ceux qui sont intéressés par d’autres cas d’utilisation de sfFilter vous pouvez bien sûr vous reportez sur le livre. Vous y verrez qu’il est possible grâce aux filters de faire des redirections, ou encore d’ajouter du code sur notre page.

sfAction

Cette classe permet d’exécuter toute la logique de la requête courante. sfConfiguration

La classe sfConfiguration fournit un moyen de configurer et de personnaliser vos applications.

sfContext

La classe sfContext agit comme un registre qui contient des références à tous les objets principaux.

Platform:

sfRequest : The request

Classe qui contient les accesseurs en lecture de symfony. sfLogger

Classe qui gère les messages log ou encore les fichiers de journalisation de la plateforme. sfI18N

Classe qui permet de faire l’internationalisation (traduction en plusieurs langues) de notre application.

sfResponse

Classe qui contient les accesseurs en écriture de symfony. sfYAML

Si l’un de vos projets n’utilise pas symfony, vous pouvez toujours utiliser la classe sfYaml en incluant le chargeur automatique symfony.

sfDatabase

Classe qui contient les paramètres de connexion à la base de données. sfForm

Est une fonction de symfony qui permet au développeur de spécifier exactement quels champs le formulaire doit utiliser et dans quel ordre ils doivent être affichés.

sfEventDispatcher

Le constructeur d’une tâche symfony a comme paramètre d’appel un objet sfEventDispatcher et un objet sfFormatter. Pour appeler d’autres tâches il suffira de leur passer les objets que l’on aura reçu à l’appel.

Par exemple pour sfGuardCreateUser, ce sera: $task = new sfGuardCreateUserTask ($this->dispatcher, $this->formatter);

EventDispatcher est un composant Symfony qui implémente le modèle Mediator de manière simple et efficace pour rendre les projets vraiment extensibles.

sfUser/sfStorage sfUser/sfStorage: The user/session

Le service de stockage réseau fournit un magasin de fichiers et active un nouveau type de montage qui peut être partagé entre différents conteneurs d’applications.

sfCache

Le cache de configuration est composé d’une collection de classes qui optimisent l’utilisation des fichiers de configuration YAML en automatisant leur traduction en code PHP et en écrivant ce code dans le répertoire de cache pour l’exécution.

sfOutputEscaper

Classe qui contient les paramètres d’affichage de la couche View. sfValidator

Le validateur Symfony est un outil puissant qui peut être exploité pour garantir que les données de n’importe quel objet sont « valides ».

La puissance derrière la validation réside dans les « contraintes », qui sont des règles que vous pouvez appliquer aux propriétés ou aux méthodes getter de votre objet.

SfWidget

La classe de base sfWidget : Tous les widgets symfony héritent de la classe de base

sfWidget de base, qui fournit des fonctionnalités disponibles par défaut à tous les widgets.

sfCoreAutoload

Cette classe permet d’effectuer le chargement automatique du coeur du cadre d’application.

Un framework est portable, de par son abstraction de la base de données et de la gestion générique du cache.

Vous l’aurez compris, les temps de développement avec un framework sont réellement plus courts. Tous les outils essentiels sont déjà écrits pour vous.

Avec un framework, vous développez une application facilement sécurisable grâce aux systèmes d’authentification, à la gestion des injections SQL ainsi qu’à la protection CSRF qui est gérée par la plupart des frameworks.

Les frameworks sont des outils communautaires et ont, par conséquent, des forums, des listes de diffusion et des canaux IRC pour les soutenir.

Si vous rencontrez un problème avec un framework, les chances que quelqu’un d’autre ait déjà eu le même problème et ait apporté un correctif sont très grandes, notamment sur les frameworks largement déployés.

Encore une bonne nouvelle, sachez que les membres de la communauté développent régulièrement des plugins et des modules que vous pouvez télécharger et utiliser dans votre application.

L’avantage d’un framework, c’est aussi de pouvoir travailler dans le respect des bonnes pratiques et de réutiliser des méthodologies de conception standardisées. On peut particulièrement citer le design pattern MVC, accronyme de l’expression «Modèle – Vue – Contrôleur».

Un design pattern est traduit par «patron de conception», c’est donc un modèle qui a fait ses preuves et qui s’avère indispensable à connaitre dans le domaine de la programmation. Découpons un peu tout ça :

Modèle :

Le modèle est la partie du code qui se charge d’interagir avec la base de données.

On y retrouve donc les appels SQL que nous aurons définis.

Vue :

La vue est la partie du code qui se charge uniquement d’afficher les données qui lui ont été fournies.

En aucun cas, la vue ne doit effectuer de traitement sur les données, sauf dans le but d’en embellir l’affichage.

Contrôleur :

Le contrôleur est le centre de notre design pattern. Il reçoit la requête HTTP, l’interprète et coordonne le tout.

Il se charge de demander au modèle les données puis effectue plus ou moins de traitements dessus afin d’envoyer à la vue les données à afficher et de retourner une réponse à l’émetteur de la requête.

Schématisation du design pattern MVC

Figure 31: Schématisation du design pattern MVC (Symfony Documentation, 2021)

NB : Documentation officielle du Framework Symfony disponible sur : https://symfony.com/doc/current/index.html

3.1.2 Environnement matériel

Nous avons utilisés deux ordinateurs avec les caractéristiques qui suivent, et un téléphone Android de marque TEKNO :

Tableau 3 : caractéristiques des ordinateurs utilisés pour le développement de QR237

processeurSERAMDD
Intel core i3Windows10, 64bits4Go500Go
msi core i7Windows10, 64bits16Go1To

Remarque : Notons que Android Studio à demander plus de ressources pour pouvoir fonctionner aisément, d’où l’utilisation de la deuxième machine plus puissante que la première pour la suite du développement.

ordinateurs et téléphone mobile

Figure 32: ordinateurs et téléphone mobile (Google, 2021)

* Le QR code [25]

Le QR code stocke des données à la verticale et à l’horizontale. Sa capacité de stockage est bien plus importante que le code barre traditionnel : 7089 caractères numériques contre 10 à 13 caractères. Il peut mémoriser des adresses web, du texte, des numéros de téléphone, des SMS ou autres types de données.

Il est lisible par les téléphones mobiles équipés d’un lecteur de QR code. L’aspect compact de ce pictogramme permet de l’insérer sur tout type d’imprimé sans empiéter les informations déjà présentes.

Le nombre de pixels varie suivant le contenu à coder. La qualité de l’appareil photo détermine la vitesse de lecture.

Enfin, il faut noter que chacun peut créer gratuitement et facilement son propre QR code à partir d’un texte, d’une adresse URL, d’une image, d’un numéro de téléphone ou encore d’un SMS : il suffit d’utiliser un générateur de QR code en ligne comme l’application que nous proposons pour gérer vos stocks.

Notons que techniquement nous avons utilisés Online UIID pour générer des identifiant unique pour tous nos QR code.

QR code de Grenoble INP-Pagora

Figure 33: QR code de Grenoble INP-Pagora (Wikipédia, 2021)

* Imprimante à jet d’encre

L’imprimante à jet d’encre utilise l’encre liquide et autorise des rendus couleurs de qualité quasi photographique. L’impression se fait selon deux techniques :

Le jet en continu, lors duquel des gouttes d’encre sont continuellement éjectées de la tête d’impression et déviées vers le papier par des bobines magnétiques.

Le reste de l’encre est récupéré et recyclé pour un nouveau cycle de jet ; et le jet à la demande, lors duquel n’est éjectée que la quantité d’encre nécessaire à l’impression.

Cette imprimante nous a permis d’imprimer le rapport des étiquettes de QR codes pour tous les produits que nous avons ajoutés.

Une imprimante à jet d'encre de marque Epson

Figure 34: Une imprimante à jet d’encre de marque Epson (Wikipédia, 2021)

* Le téléphone mobile (douchette)

Le téléphone mobile est équipé d’une caméra qui est un capteur d’images, équipé d’un système d’exploitation standard du marché, d’un microprocesseur plus rapide, et de mémoire RAM supplémentaire pour les applications nécessitant plus de ressources.

La capacité accrue de sa mémoire Flash permet de sauvegarder et gérer une grande base de données, tandis qu’un emplacement pour carte SD accessible par l’utilisateur prend en charge jusqu’à 32 Go, ce qui permet en outre l’extension de sa capacité de stockage.

Lecture d’un QR code

Figure 35: Lecture d’un QR code

mécanisme de déroulement d'un scan : architecture logicielle de QR237

Figure 36: mécanisme de déroulement d’un scan : architecture logicielle de QR237 (Google, 2021)

Input : ImageCapture -> Entrée : ImageCapture Thresholding-> Seuillage

QR-Code partition-> Partition QR-Code

Image Rotating and Correcting -> Rotation et correction de l’image Activity data-> Données d’activité

Character Set-> jeu de caractères Decode Format-> Décoder le format Decode thread-> Décoder le fil

Output: Display Result-> Sortie : Afficher le résultat

3.2 Visualisation de la plateforme

Présentation de l’application web

page d'authentification de QR237

Figure 37: page d’authentification de QR237

page d'accueil web de QR237

Figure 38: page d’accueil web de QR237

page de gestion des utilisateurs

Figure 39: page de gestion des utilisateurs

page de gestion des catégories

Figure 40: page de gestion des catégories

page de gestion des produits

Figure 41: page de gestion des produits

about

Figure 42: about

NB : L’application QR237 permet bien évidement en plus de vérifier par de simples scans l’existence des produits dans le stock, tout en mettant automatiquement à jour et en temps réel les variations des quantités.

contact

Figure 43: contact.

Les interfaces de l‘application android

>Authentification

Si l’authentification n’est pas valide un message d’erreur va être affiché.

le formulaire d’authentification

Figure 44: le formulaire d’authentification.

>Fenêtre d’accueil

Cette fenêtre affichée après bonne authentification.

fenêtre d'accueil

Figure 45: fenêtre d’accueil

>Affichage d’un produit après scan de son QR code avec décrémentation automatique de la quantité disponible en stock (l’inventaire en temps réel).

affichage d'un produit sur l’Android

Figure 46: affichage d’un produit sur l’Android

exemple de rapport final générer sur un échantillon de produits pour tester l'application exemple de rapport final générer sur un échantillon de produits pour tester l'application

Figure 47: exemple de rapport final générer sur un échantillon de produits pour tester l’application

Quelques liens importants

Serveur d’hébergement de l’application web : http://qrscan.inchtechs.com

test à partir du web de l’existence d’un produit en utilisant l’UUID de son QR code: http://qrscan.inchtechs.com/views/items/UUID d’un produit en stock.

3.3 Conclusion

Nous avons décrit brièvement les étapes, ainsi que le Hardware et le Software déployer pour la mise sur pieds de la solution QR 237.

Les interfaces designer et développer à cet effet procure une ergonomie exploitable aux entreprises et tiers qui sollicite notre service de digitalisation de la gestion des stocks.

Nous avons pris en main le Framework Symfony 4 qui constitue un véritable tremplin à la création des applications web, grâce aux multiples fonctionnalités natives qu’il intègre en son sein.

Conclusion générale et perspectives

Au cours de ce travail, nous avons tout d’abord mené une recherche sur la gestion des inventaires au niveau des différentes entreprises et leur système de fonctionnement.

Nous nous sommes intéressés en particulier par les inventaires permanents au niveau de l’entreprise SUPCOM qui a sollicité notre structure d’accueil SFM technologies Cameroun pour la réalisation de ce projet qui a constitué l’objet de mon stage de fin d’étude.

On a donc dégagé les difficultés rencontrés et les besoins attendus, ce qui nous a permis de déterminer les grands axes pour concevoir notre solution. Dans un premier pas, on a présenté l’organisme d’accueil avec sa structure et ces différentes activités.

Pour la mise en œuvre d’une solution logicielle, il faut commencer par l’analyse de l’existant et la capture des besoins fonctionnels ainsi que des besoins non-fonctionnels. Vraisemblablement cela tient de l’ingénierie logicielle.

Mais très rapidement, ce travail s’est transformé en une extraordinaire exploration bibliographique assez surprenante. Pour modéliser notre application on a choisi le langage UML, aussi bien dans les activités de capture des besoins.

Nous avons cependant tenu à être plus simplistes et moins exigeants en termes de méthode de conception, dans le but de nous concentrer plus sur la pratique de la réalisation de ce projet.

Néanmoins les résultats de ce modeste travail constituent les bases d’un travail à poursuivre et à améliorer pour une étude beaucoup plus approfondie. La solution que nous avons réalisée préfigure un logiciel utilisable dans la vie des entreprises.

Notre application androïde QR 237 est disponible sur Playstore dans sa version 1.0 et peut être directement téléchargé et utilisé en cas de besoin.

Il existe différent type d’inventaire, nous avons choisi dans notre solution l’inventaire permanent, nous projetons l’automatisation de tout ce qui est en relation avec les inventaires (trimestriel, gestion des achats et des reformes etc…) pour ajouter les fonctionnalités du logiciel dans les versions ultérieures.

Nous comptons étendre QR237 par un système de e-commerce, intégrer des capteurs et des actionneurs pour pouvoir mettre sur pied des supermarchés intelligents, complètement autonomes comme c’est déjà le cas en France, en Chine et aux Etats Unies. Nous espérons avoir posé la première pierre pour l’informatisation des différentes tâches de l’entreprise pour une amélioration considérable de ses services.

Références bibliographiques

3-UML. Consulté le 18/04/2021 sur http://projet.eu.org3

Amel Sghir, PFE. (2019). Conception et développement d’une plateforme de e-learning. Ecole Nationale d’ingénierie de Tunis, en génie informatique.pp15-18

Bedjaoui Chaouche Mohamed. (2017). Mise en place d’un logiciel de gestion de pharmacie. Consulté le 23/04/2021 sur memoireonline.com

fr.wingwit.com. Consulté le 23/04/2021

Gabay. Merise et UML pour la modélisation des systèmes d’information, volume 5. Dunod edition, Mars 2004. Consulté le 17/04/2021

Google, Définition et caractéristique d’UML, 2008. Consulté le 18/04/2021

Google, Introduction à la programmation orientée objets, chapitre 9 UML, diagrammes de classes. Consulté le 15/04/2021

Google, UML et cas d’utilisation.pdf. Consulté le 19/04/2021

Google. Datalogic-memoir-x3-fm.pdf (guide d’utilisation de la douchette). Consulté le 30/04/2021

Google. Postek Q8_Series Quick Start Guide.pdf (guide d’utilisation de l’imprimante). Consulté le 27/06/2021

Grellou Nour el imene, et Kadouci Samira. (2015). Conception-et-realisation-dune- application-des-inventaires-avec-code-barres-pour-lentrprise-portuaire-de-ghazaouet- tlemcen.UniversitéAbouBakrBelkaid–Tlemcen.memoireonline. http://www.portdeghazaouet.dz

http://cerig.efpg.inpg.fr/memoire/2010/flashcode-qrcode.htm . Consulté le 08/04/2021

https://www.wampserver.com. Consulté le 18/04/2021

Laurent Audibert, UML 2 de l’apprentissage à la pratique (cours et exercices), édition Ellipses. Consulté le 22/04/2021

Laurent Piechoki, diagrammes d’UML, édition 2007. Consulté le 20/04/2021

Mathurin Nantcho, SFM. (1995). Expertise. sfmtechnologies. Consulté le 09/04/2021 sur www.sfmtechnologies.com

MC Belaid, programmer les bases de données Delphi 5 et 6, Edition Pages Bleues. Consulté le 25/04/2021

Pascal Pare, Camille Rosenthal-Sabroux et Nasser Kettani, Dominique Mignet. De Merise à UML. Eyrolles France edition, Octobre 2001. Consulté le 15/04/2021

procomptable, P. (2018). Q’est ce qu’un inventaire ? procomptable. Consulté le 09/04/2021 sur http://www.procomptable.com

Robert Ogor, Modélisation avec UML, ENSET Bretagne mai 2003. Consulté le 19/04/2021

Stéphane Galland. Analyse, Conception Objet, diagrammes de Classes, Une partie du matériau de ce cours est issue du cours de Stéphane Galland, Septembre 2003. Consulté le 22/04/2021

Toulon Var. Modélisations UML diagrammes structurels, Génie électrique et informatique industrielle, IUT Toulon Var. Consulté le 20/04/2021

Vahamwity Fadhili Kambale. (2015). Conception d’un logiciel de gestion de stock des produits périssables. UNILUK Licence en Sciences Economiques et de Gestion. 2015. pp1-18

wikipedia ; Développez votre site web avec le framework Symfony ; Documentation Symfony. Consulté le 13/04/2021

www.developpez.com; https://symfony.com/doc/current/index.html. Consulté le 13/04/2021

www.ehuoran.dz/qualite.html. Consulté le 10/05/2021

www.e-marketing.fr; atoutpersona.com. Consulté le 11/05/2021

Pour citer ce mémoire (mémoire de master, thèse, PFE,...) :
📌 La première page du mémoire (avec le fichier pdf) - Thème 📜:
Gestion de l’inventaire en utilisant le QR code
Université 🏫: University Of Dschang
Auteur·trice·s 🎓:
ZEUTOUO NOLACK TAPSIR Gislain

ZEUTOUO NOLACK TAPSIR Gislain
Année de soutenance 📅: Mémoire soutenu en vue de l’obtention du diplôme de Master professionnel en Réseaux, Télécommunications et Systèmes - 2020-2021
Rechercher
Télécharger ce mémoire en ligne PDF (gratuit)

1 réflexion au sujet de “L’automatisation des inventaires, réaliser l’application”

Laisser un commentaire

Votre adresse courriel ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Scroll to Top