Dossier de livraison PPE Gestion Commerciale

Documents pareils
Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Paginer les données côté serveur, mettre en cache côté client

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

ADO.NET. Ado.net propose deux modes d'accès, le mode connecté et le mode déconnecté.

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Espace Client Aide au démarrage

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

1. Base de données SQLite

MEDIAplus elearning. version 6.6

SOMMAIRE... 1 ESPACE DU CLUB...

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Application web de gestion de comptes en banques

Guide Expert Comptable Production Coala

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

ESPACE COLLABORATIF SHAREPOINT

Application de Gestion des Notes de Frais sous Lotus Notes via un navigateur avec WorkFlow 1

1. Introduction Création d'une requête...2

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

PHP 5. La base de données MySql. A. Belaïd 1

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmer en JAVA. par Tama

Access 2010 Entraînement 1 Garage Renault Dossier 24 MCD

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Tutoriel D utilisation. Du PGI Open line d EBP

Publication dans le Back Office

Formation. Module WEB 4.1. Support de cours

Notice Générale - MODULE CLIENTS. I. Description générale du module. II. La liste des clients a. Accès

Avertissement. La Gestion Electronique de Documents

Version 7.1_5.1. Release Notes

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

KWISATZ MODULE PRESTASHOP

Création de Sous-Formulaires

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2014

Import d un fichier de contacts dans une campagne

Access 2007 FF Access FR FR Base

Création d objet imbriqué sous PowerShell.

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

CAP BOX Note utilisateurs

Cette fonctionnalité est paramétrable et accessible dans le module administration via le menu "Dossier / Administration".

Utiliser Internet Explorer 7

GUIDE D UTILISATION. Gestion de compte. à destination des entreprises (Employeurs et Organismes de Formation)

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

Plan du cours. Historique du langage Nouveautés de Java 7

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

Saisissez le login et le mot de passe (attention aux minuscules et majuscules) qui vous ont

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Si vous décidez d utiliser un autre chemin, c est ce nouveau chemin qu il faudra prendre en compte pour la sauvegarde. Cf. : Chapitre 9 Sauvegarde

Guide de Démarrage Rapide Prospects 2013

SERVICE CERTIFICATION DES ÉTABLISSEMENTS DE SANTÉ. Guide utilisateur Compte Qualité dans SARA

Création et Gestion des tables

Mise à jour ESCentiel - Juin 2012

NOTICE D UTILISATION

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

les Formulaires / Sous-Formulaires Présentation Créer un formulaire à partir d une table...3

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Guide d utilisation. Version 1.1

.NET - Classe de Log

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Accès au Serveur de PAIE «SPV» par INTERNET Paramétrage du poste de travail «Windows»

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

SUPPORT DE COURS / PHP PARTIE 3

Logiciel photothèque professionnel GUIDE D UTILISATION - 1 -

Chapitre 2. Classes et objets

Utilitaires méconnus de StrataFrame

ANNEXE 8 : Le Mailing

BONNE NOUVELLE, À PARTIR DE DEMAIN 15 AOÛT 2014, l inscription en ligne sera disponible à partir du site de l ARO.


Programmation par composants (1/3) Programmation par composants (2/3)

Historique des versions

Taxe de séjour - Manuel de l utilisateur. Déclaration en ligne. Logiciel 3D Ouest

COURS WINDEV NUMERO 3

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

OSIRIS/ Valorisation des données PORTAIL BO MANUEL UTILISATEUR

Guide d installation CLX.PayMaker Office (3PC)

Utilisation du nouveau webmail académique

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Guide d utilisation - Intranet de l ASG Pour utilisateurs d Albatros Version 8.7

BIRT (Business Intelligence and Reporting Tools)

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

GUIDE UTILISATEUR. KPAX Discover

Configuration de SQL server 2005 pour la réplication

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

BASE ELEVES 1er degré

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Héritage presque multiple en Java (1/2)

Manuel utilisateur du logiciel PrestaConnect.

La base de données XML exist. A. Belaïd

TP, première séquence d exercices.

Tp 1 correction. Structures de données (IF2)

Restaurer des données

GUIDE UTILISATEUR DHL FREIGHT E-BILLING LA FACTURATION ELECTRONIQUE PAR DHL FREIGHT

Service des ressources informatiques - Conseil Scolaire de District Catholique Centre-Sud Page 1

Transcription:

Dossier de livraison PPE Gestion Commerciale p. 1

Sommaire I. Guide utilisateur -------------------------------------------------------- p3 II. III. IV. Base de données --------------------------------------------------------- p9 Détail de fonctionnalités -------------------------------------------- p11 Pistes d évolution ----------------------------------------------------- p31 Annexes -XML des classes métier -Code source -Sauvegarde de la base de données p. 2

I. Guide utilisateur Partie «Synthèse» L onglet «Synthèse client» permet d afficher un récapitulatif des devis par client sur une période saisie grâce à deux champs qui permettent de sélectionner une date dans un calendrier. Suite à la recherche le résultat s affiche sous forme de tableau. Celui-ci contient une ligne pour chaque client ayant passé un devis dans la période. Les informations sont : -le nom du client -le nombre de devis passés sur la période -le nombre de devis acceptés -les pourcentages de devis acceptés/refusés/en attente -le montant facturé hors taxe sur la période de recherche p. 3

Si la période saisie par l utilisateur ne contient pas de devis alors un message d avertissement le signale. Si l utilisateur saisi un intervalle de recherche impossible un message d erreur le prévient. p. 4

Partie «Produits» Lorsque l on entre dans l onglet dans l onglet «Produits» la partie gauche se remplie de tous les produits enregistrés. Un clic sur une des lignes du tableau affiche le détail du produit dans le formulaire à droite. Appuyer sur le bouton «Modifier» permet de rendre les champs du formulaire modifiables. Le bouton «Ajouter» enregistre les modifications apportées au produit ou ajoute un nouvel enregistrement à la base de données. Appuyer sur le bouton «Supprimer» supprime la ligne sélectionnée. Dans le menu «Fichier» l option «Importer produits» permet d enregistrer des produits contenus dans un fichier CSV (Coma Separated Values). Au clic sur le lien une fenêtre permettant de sélectionner un fichier s ouvre. p. 5

Affiche une fenêtre qui permet de sélectionner un fichier CSV. Lance l importation. Le fichier doit être composé de cette façon : Code produit ; Libellé ; Prix ; Catégorie Si une erreur est détectée dans le fichier un message d erreur s affiche. La première ligne du fichier, étant l entête, est ignorée. Si la catégorie saisie n existe pas dans la base de données alors elle est ajoutée. p. 6

Partie «Clients» 1. Menu qui permet l ajout, la modification et la suppression d un client. Au clic sur un bouton le menu devient inaccessible jusqu à l enregistrement ou l annulation. Descriptif des boutons : - Nouveau client : réinitialise le formulaire de droite et permet l ajout d un nouveau client - Modifier : Affiche toute les informations du client dans le formulaire de droite et permet de modifier les valeurs - Supprimer : Afficher un message qui demande de valider ou annuler la suppression d un client. p. 7

2. Affichage des informations du client trié par ordre croissant le clic sur une ligne permet d afficher les informations du client. Les champs possèdent les informations du client qui a été sélectionnées dans l affichage Un contrôle de saisie est effectué afin d empêcher la saisie d alphanumérique. Permet d enregistrer ou annuler l enregistrement. Au clic le menu client est de nouveau accessible. Dans le cas où un champ n est pas rempli un message d erreur s affiche empêchant l enregistrement. Fonctionnalités à finir : Empêcher la saisie alpha dans les champs téléphone, cp, fax Finir la fonction d ajout de client Limiter les informations dans le data grid p. 8

II. Base de donne es : jeu d essais Catégorie DevisProduit Devis Produit p. 9

Client p. 10

III. De tail de fonctionnalite s Nancel Cédric ; Dromacque Sébastien Fonctionnalité d ajout d un produit Un produit est un objet composé de : Un code string Un libellé string Un prix float Une Catégorie de type objet Categorie Pour créer un objet de type Produit, nous auront donc besoin de 2 classes BO, la classe ProduitBO et la classe CategorieBO. Nous verrons ensuite comment est traitée la création dans la couche DAL, puis son lien avec la couche BLL et ensuite la couche GUI. p. 11

La classe CategorieBO Une catégorie est composé d un codecategorie de type int (clé primaire de la table dans la bdd) ainsi que d un libellé de catégorie. Le constructeur reprend ces 2 éléments. La classe dispose également d accesseurs pour les paramètres de l objet. p. 12

La classe ProduitBO La classe ProduitBO contient la définition des attributs d un objet Produit. Le constructeur d un objet ProduitBO a pour paramètres le code, le lib, le prix, et unecategorie de type CategorieBO. Nb : Mon IDE (SharpDevelop) ne peut ouvrir une solution complète sln, les liens entre les classes n existent pas et donc, CategorieBO par exemple, n apparaît pas en bleu. p. 13

Il existe des accesseurs pour tous les paramètres, ainsi qu une surcharge du constructeur, permettant de gérer l affichage de la catégorie d un produit en «string» plutôt qu en»categoriebo». p. 14

La couche DAL : CategorieDAO / ProduitDAO La couche DAL fait le lien entre la base de donnée et l application, elle gère les requêtes. CategorieDAO : Pour créer un produit, nous aurons besoin de récupérer la liste des catégories existantes, que nous afficherons dans un menu déroulant. C est le rôle de la méthode GetLesCategories() : p. 15

ProduitDAO : L ajout d un produit en base de données nécessite une requête SQL. La méthode AjoutProduit() fait donc l insert. Elle fait également le lien avec la couche métier BLL. p. 16

La couche BLL Elle récupère les informations de la couche GUI. La méthode AjoutProduit() instancie l objet ProduitBO et le transmet à ProduitDAO qui utilisera ses paramètres pour exécuter la requête. La couche GUI Elle contient l interface utilisateur, et permet de récupérer les données saisies. p. 17

Ici on voit que le clic sur le bouton «Ajouter» va appeler la méthode d ajout d un produit en lui passant en paramètre les données saisies dans les champs de type.text et SelectedItem. On pourra ainsi récupérer ces informations dans la BLL, instancié l objet, le transmettre à la DAL qui fera l ajout en base de données. Fonctionnalité de mise à jour des clients Couche GUI La couche GUI va permettre la saisie des champs correspondant aux informations du client, un contrôle de saisie est effectué sur le numéro de téléphone, le code postal ainsi que sur le fax afin de vérifier que seulement des numéros sont saisis. A l enregistrement du nouveau client on vérifie que tous les champs sont rempli sinon on affiche un message d erreur. Les champs sont récupère grâce à la méthode.text et transmit à la BLL p. 18

Couche BLL Permet de récupérer les informations de la couche GUI, d instancier les informations saisies et de les transmettre à la couche DAO Couche DAL La méthode va permettre de mettre à jours les informations du client qui on était modifiées dans le formulaire et de faire la liaison avec la base de donnée. Réalisation de la requête dans la couche DAO et vérification que la requête à bien était réalisé p. 19

Fonctionnalité d affichage des devis Partie Graphique 1. Au chargement de l'onglet devis du formulaire, on créé une Datatable qui contiendra les colonnes "Code", "Nom Client", "Date", "Statut". 2. On créé ensuite une liste de devis qui contiendra tous les devis de la base de donnée grâce à la BLL qui demande à la DAL de récupérer les données dans la base de donnée et de les stocké dans des objets issu de la couche BO 3. On parcours la liste des devis Pour chaque devis on récupère l'int qui correspond au statut. On créé une variable string qui contiendra soit "En attente", soit "Refusé" soit "Accepté" en fonction de l'int récupérer au-dessus. On ajoute dans la Datatable une ligne pour chaque devis avec comme information: le code du devis, le nom du client propriétaire du devis, la date de création du devis, et enfin la variable de statut créé à l'étape précédente. 4. On associe la Datatable au DatagridView en tant que Datasource. private void Devis_Load(object sender, EventArgs e) //Creation de la table source de devis DataTable tabledevis = new DataTable(); tabledevis.columns.add("code", typeof(int)); tabledevis.columns.add("nom client", typeof(string)); tabledevis.columns.add("date", typeof(datetime)); tabledevis.columns.add("statut", typeof(string)); List<DevisBO> sourcedevis = DevisManager.GetInstance().GetAllDevis(); foreach (DevisBO undevis in sourcedevis) string statut = ""; switch (undevis.statut) case 1: statut = "En attente"; break; case 2: statut = "Refusé"; break; case 3: statut = "Accepté"; break; p. 20

default: break; statut); //Ajout d'une ligne de valeurs dans la source de données tabledevis.rows.add(undevis.code, undevis.leclient.nomclient, //Remplissage de la collection des clients dans le combobox du... undevis.date, //detail du devis //Remplissage de la collection du statut... //Association du datagrid à la table dtgdevis.datasource = tabledevis; La couche BLL A travers la couche BLL on appelle la couche DAL : La classe DevisDAO de la couche DAL est un singleton. Un singleton est un design pattern qui permet de créer une classe ne pouvant être instancié qu'une seul fois. 1. On commence donc par récupérer l'instance de la classe Devis DAO. 2. A l'aide de cette instance, on va ensuite récupérer une liste de devis. /// <summary> /// Récupère la liste de tous les devis /// </summary> /// <returns>retourne une liste de devis</returns> public List<DevisBO> GetAllDevis() return DevisDAO.GetInstanceDevisDAO().GetAllDevis(); La couche DAL Comme expliqué ci-dessus, la classe DevisDAO se trouvant dans la couche DAL est un singleton. La première fonction utilisée de la classe est GetInstanceDevisDAO() //VBO: On créé un singleton pour cette classe /// <summary> /// Obtient une instance de la classe DevisDAO (il s'agît d'un singleton) /// </summary> /// <returns>une instance de classe DevisDAO</returns> public static DevisDAO GetInstanceDevisDAO() if (instancedevisdao == null) p. 21

instancedevisdao = new DevisDAO(); return instancedevisdao; Cette fonction permet de récupérer l'instance de la classe. En la créant si elle n'existe pas. La seconde fonction utilisée de cette classe est : GetAllDevis() //VBO: Fonction et procédure de la classe /// <summary> /// Retourne tous les devis contenus dans la BDD /// </summary> /// <returns>la liste de tous les devis</returns> public List<DevisBO> GetAllDevis() //VBO: Initialisation des variables nécessaires int codedevis; int datedevis; int statutdevis; float txtvadevis; float txremisedevis; int codeclient; ClientBO clientdevis; DevisBO undevis; //VBO: On récupère l'objet responsable de la connexion à la Bdd SqlConnection cnx = AccesBD.GetInstance().GetSqlConnexion(); //VBO: On créé la liste à retourner à la fin de la méthode List<DevisBO> resultat = new List<DevisBO>(); //VBO: On créé l'objet qui va contenir la requête SQL qui sera //exécutée SqlCommand cmd = new SqlCommand(); cmd.connection = cnx; cmd.commandtext = "SELECT Code, Date, Statut, TauxTVA, TauxRemise, Client_Code FROM Devis"; //VBO: On exécute la requête SqlDataReader reader; try reader = cmd.executereader(); catch (Exception) cnx.close(); return resultat; devis //Instancie un dictionnaire qui contient le code du devis et le code Dictionary<DevisBO, int> deviscode_clientcode = new Dictionary<DevisBO, int>(); //du client associé à se //VBO: pour chaque enregistrement retourné on crée un objet instance //de Devis p. 22

//VBO: que l'on ajoute dans la collection resultat while (reader.read()) int.tryparse(reader["code"].tostring(), out codedevis); int.tryparse(reader["date"].tostring(), out datedevis); DateTime ladate = new DateTime(1970, 1, 1, 0, 0, 0); DateTime unedate = ladate.addseconds(datedevis); int.tryparse(reader["statut"].tostring(), out statutdevis); float.tryparse(reader["tauxtva"].tostring(), out txtvadevis); float.tryparse(reader["tauxremise"].tostring(), out txremisedevis); int.tryparse(reader["client_code"].tostring(), out codeclient); Nancel Cédric ; Dromacque Sébastien //VBO: Instancie l'objet Devis à ajouter dans la liste: undevis = new DevisBO(codeDevis, unedate, statutdevis, txremisedevis); txtvadevis, //Ajoute une association devisbo/codeclient au dictionnaire deviscode_clientcode.add(undevis, codeclient); //VBO: Ajoute l'objet devis dans la liste resultat.add(undevis); reader.close(); //On parcour la liste de devis foreach (DevisBO ledevis in resultat) //On compare le code du devis de resultat au code du devis du // /!\ ON VA AVOIR DES DOUBLONS /!\ foreach (DevisBO devisdico in deviscode_clientcode.keys) if (ledevis.code == devisdico.code) //VBO: Instancie le client associé au devis clientdevis = ClientDAO.GetInstance().GetClientByID(devisCode_clientCode[leDevis]); //dictionnaire //Ajoute le client au devis ledevis.leclient = clientdevis; cnx.close(); return resultat; Cette fonction exécute le traitement suivant : 1. On initialise les variables nécessaire au stockage des informations récupérer depuis la base de donnée. 2. On se connecte à la base de donnée et on créé la liste à retourner. 3. On créé la requête SQL et on la stocke dans un objet spécifique. p. 23

La couche BO 4. On exécute la requête. 5. On créé un dictionnaire dont la clef est un devis, et la valeur le client. 6. A partir des données récupérer dans la base on instancie un devis pour chaque ligne dans la table devis de la BDD. 7. On ajoute l'instance de devis dans la liste créé à l'étape 2. 8. Grâce au dictionnaire créé en 5. On récupère les clients associé aux devis afin que la liste à retourner, contienne des objets complets. La classe DevisBO de la couche BO définit l'objet nommé devis. Elle ne contient que des attributs, le constructeur de la classe et les accesseurs (ou propriété) : public class DevisBO //VBO: Attribut de la classe private int code; //Indice de l'objet dans la Bdd private DateTime date; //Correspond à un TimeStamp (nombre de seconde depuis 1970) private int statut; // Statut du devis : 0.Attente 1.Refusé 3. Accepté private float txtva; // Le taux de TVA appliquer sur le devis private float txremise; // Le taux de Remise appliquer sur le devis private ClientBO leclient; //Correspond au client concerné par le devis private Dictionary<ProduitBO, int> listeproduits; // La liste des produits du devis //VBO: Constructeur de la classe /// <summary> /// Instancie un objet de la classe avec tous ses paramètre /// - à utiliser quand on récupère un devis déjà existant /// </summary> /// <param name="code">code du devis</param> /// <param name="date">date du devis (en nombre de seconde depuis 1970)</param> /// <param name="statut">statut du devis : 1 = en Attente; 2 = Refusé; 3 = Accepté;</param> /// <param name="txtva">taux de tva appliqué au devis</param> /// <param name="txremise">taux de remise appliqué au devis</param> public DevisBO(int code, DateTime date, int statut, float txtva, float txremise) this.code = code; this.date = date; this.statut = statut; this.txtva = txtva; this.txremise = txremise; this.listeproduits = new Dictionary<ProduitBO, int>(); /// <summary> /// Instancie un objet de classe sans lui passer de code p. 24

/// - à utiliser lors de la création d'un nouveau devis /// - Instancie le statut à 1 (en attente) et le taux de tva à 19,6 /// </summary> public DevisBO() this.listeproduits = new Dictionary<ProduitBO, int>(); //VBO: Méthode //VBO: Propriété de la classe /// <summary> /// Récupère ou modifie le code d'un devis (int) /// </summary> public int Code get return code; set code = value; /// <summary> /// Récupère ou modifie la date d'un devis (int) /// </summary> public DateTime Date get return date; set date = value; /// <summary> /// Récupère ou modifie le statut d'un devis (int) 1 = Attente ; 2 = Refusé ; 3 = Accepté; /// </summary> public int Statut get return statut; set statut = value; /// <summary> /// Récupère ou modifie le taux de TVA (float) /// </summary> public float TxTva get return txtva; set txtva = value; /// <summary> /// Récupère ou modifie le taux de remise (float) /// </summary> public float TxRemise get return txremise; set txremise = value; /// <summary> /// Récupère ou modifie un objet client associé au devis (client) /// </summary> public ClientBO LeClient p. 25

get return leclient; set leclient = value; /// <summary> /// Récupère ou modifie la liste des produits du devis /// </summary> public Dictionary<ProduitBO, int> ListeProduits get return listeproduits; set listeproduits = value; p. 26

Fonctionnalité d import des produits Cette fonction permet à l utilisateur d importer des produits se trouvant dans un fichier.csv, Coma Separated Values (chaque valeur est séparée par un point-virgule). J ai décidé de faire apparaitre cette fonctionnalité dans une popu, lors d un clic sur le bouton j instancie le formulaire contenant le pop-up et je l affiche. Sur le pop-up un bouton permet d afficher un explorateur Windows, celui-ci peut seulement sélectionner les fichiers.csv, lorsqu un fichier est choisi le bouton lançant l import devient activable. Au clic sur ce bouton on ouvre le fichier désigné, pour chaque ligne à l intérieur, à partir de la deuxième pour sauter l entête, on divise la chaine de caractères à chaque point-virgule. Si le nombre d éléments récupérés est égal à 4 on crée un produit avec les valeurs et on l ajoute à la liste. Si le nombre d éléments est différent alors le format du fichier ne correspond pas, on affiche un message d erreur et on sort de la boucle. S il n y a pas eu d erreur on enregistre les produits dans la liste. Selon si l enregistrement retourne une erreur ou non on affiche un message d information. p. 27

Couche BLL Pour chaque produit de la liste on recherche en base la catégorie et on l ajoute au produit puis on enregistre le produit. Si un problème est détecté lors de l ajout alors on stoppe le traitement et on retourne faux. Sinon à la fin on retourne vrai. p. 28

Couche DAL Récupération de la catégorie : On crée une requête SQL qui recherche en base l identifiant de la catégorie associé au libellé. Si la requête retourne un résultat vide alors on ajoute cette catégorie à la base de données. Pour finir on crée un objet catégorie que l on retourne. p. 29

On crée une requête qui ajoute un produit en base, si un problème survient lors de l ajout on retourne faux, sinon on retourne vrai. p. 30

IV. Pistes d e volutions -Finir l import et l export des devis au format XML -Ajouter des filtres sur les tableaux -Permettre à l application d avoir un redimensionnement automatique p. 31