easycorp.beeasycorp.be/WordPress/wp-content/uploads/.../11/Bado…  · Web viewTout d’abord :...

of 156 /156
Badot Juin 2010 Xavier Esa NAMUR 3 ème Informatique Promoteur : F. PARION Easy_Shop End Of Project

Embed Size (px)

Transcript of easycorp.beeasycorp.be/WordPress/wp-content/uploads/.../11/Bado…  · Web viewTout d’abord :...

Badot Juin 2010 XavierEsa NAMUR3me Informatique

(Easy_ShopEnd Of Project )

Promoteur: F. PARION

Remerciements:

Avant dentamer ce rapport, je profite de loccasion pour remercier tout dabord mon promoteur Mr Parion pour son engagement en matire de formation et dencadrement.

Je tiens galement remercier lensemble des professeurs mayant apport chacun un peu de leurs expriences et leurs comptences au fil de mes longues annes dtudes au sein de lESA Namur.

Enfin je tiens galement saluer tout le personnel de chez BCMC Informatique pour son soutien et son temps accord llaboration finale du projet.

Avant Propos:

Lapproche modulaire du systme dinformations:

Tout dabord : afin de bien reprsenter dans lordre les diffrentes activits logiques appliques au sein de lentreprise, tant au niveau clientle quinterne, lanalyse propose dans ce document sera faite sous forme de modules.

Pourquoi?

Lapproche de lanalyse des besoins de la socit et de la conception du logiciel a t ralise de manire modulaire. Chaque cas a t tudi en profondeur afin de bien cerner les besoins un par un.

De la commande du produit chez le fournisseur en passant par le pr-encodage logiciel, la vente voir jusqu' la reprise dun article en garantie.

Au vu de la taille consquente du projet, il tait plus facile pour tout le monde de travailler sous forme de USE CASE et de dlimiter les diffrents points importants laborer :

1) Encodage produit repr chez le fournisseur dans le systme

2) Commande de produits chez le fournisseur

3) Livraison au sein de lentreprise de la marchandise commande

4) Transfert de la commande fournisseur en Entre de stocks (Facture Achat, Modification Stock, Gnration Numro de srie).

5) Dfinition du prix du produit en fonction de son prix dachat.

6) La vente de larticle (Offre, Commande Client, Facture, Ticket ).

7) Retour de larticle par le client (Note de Crdit)

8) Renvoi fournisseur

Lensemble des USE CASE formeront un tout dans ce projet. Lensemble nous donnera un aperu global du fonctionnement interne de lentreprise tape par tape.

Nous noterons pour commencer 2 points trs importants manquant le plus dans lancien systme.

la ncessit de disposer de droitspour lutilisation du logiciel! (Confidentialit des donnes internes lentreprise).

Le besoin de scurit!

Nous verrons aux cours de cette analyse les services supplmentaires proposs aux clients indirectement (Rappel automatique de paiements ).

Une ligne de crdit disponible et unique pour chaque client!

Le retour ais de marchandises chez le fournisseur sans devoir effectuer une recherche longue et laborieuse pour savoir do provient le produit dfectueux. (Systme didentification produit).

SommaireChapitre I: Le client6I.1 - Prsentation de lentreprise:6I.2 - Clientle de lentreprise:6I.3 - Personnel / hirarchie interne :7I.4 - Description du systme actuel:7I.5 -Leurs besoins:7Chapitre II. Objectifs et Besoins:8Chapitre III: Analyse Fonctionnelle.10III.1: Schma Entits Associations:10III.2: Modle Relationnel:11Chapitre IV : Analyse Technique:12IV.1 - Petite parenthse sur les droits utilisateurs sur la base de donnes:12IV.2 - Laccs serveur:12IV.3 - Le dveloppement:12IV.4 - La modlisation de la base de donnes:12IV.5 - O.S:12IV.6 - Aperu de larchitecture Principale du logiciel:13IV.7 - Architecture globale en couches: (Schma).14IV.8 - Architecture globale dcoup selon les couches.15IV.7 - Aperu dune partie des diffrentes fonctions prsentes dans EasyShop + Droits.16Chapitre V: USE CASE:17V.1.1 - Authentification de lutilisateur et dfinition des variables globales.17V.1.2 - Analyse du Login utilisateur:17b) Les variables globales utilises:22C) La couche applicative: extraits de code et scurit des variables (Cryptage / Dcryptage ).23D) Point de vue Visuel: Impression dcran Page Login Principal.24V. 2. La gestion de lanne fiscale :25V.2.1 - Prsentation de la problmatique de lanne fiscale et pourquoi lavoir laiss dfinissable manuellement :25V.2.2 - BIS: Use Case en dtails - Vrification de la date serveur dtaille:27V.2.3 - Extrait de codede la vrification des 2 dates :28V.2.4 - Rsultat visuel pour lutilisateur du programme:30V.2.5 - Le fonctionnement de lincrmentation des numros de factures / tickets en dtails 33V.3: La gestion des droits Utilisateurs:35V.3.1: Use Case: Le systme dalerte utilisateur : Contexte :36V.3.2: Explication du fonctionnement de la vrification des droits pour chaque utilisateur:37V.3.3: Illustration:40V. 4: Encodage des produits et encodage des entres de stocks.43V.5: Dfinition du prix de larticle.50V.5.1 Prix Normal / Prix Promo.50V.5.2 - La dfinition du prix de manire manuelle lors dune vente ou dune remise de prix.53V.6: La rentre de stocks :56V.6.1: Analyse du Module dencodage dune commande fournisseur.56V.6.2: La prsence de numros de srie dans linsertion dune entre de stock.65V.7 : La vente de produits aux clients.69V.7.1 Identification des besoins dun client souhaitant une offre de prix au sein du magasin:70V.7.2 - Transfert dune offre en facturation:74V.7.3 - Use Case transfert Commande en Facture:78V.7.4 - Use case Crationfacture (On cible la ncessit de slection client et article avant la cration de facture):80V.8: Limite de crdits - Rappel de paiements88V.8.1- Limite de crdits client:88V.8.2 - Gestion des Rappels de Paiements.93V.8.3 - La gestion des paiements par virement! Ou Paiement dcal.96V.8.4 - la gestion des Paiements:99V.9 - Linventaire:102V.9.1 - La gestion de STOCKen profondeur :102V.9.2 - Le calcul de linventaire:106V.10 : Les Statistiques:110V.10.1 - Le premier module traitera sur les statistiques de vente de chaque utilisateur dans le systme.110V.10.2 - Statistiques de vente sur un client par article:116Chapitre VI. Les Tests.119Chapitre VII. Problmes parcourus:120Chapitre VIII: Modifications venir:121Chapitre IX: Planning:122IX.1 - Apport des correctifs au planning ralis au mois de juin 2009:123Chapitre X: Conclusions :124Lexique:125

Chapitre I: Le client I.1 - Prsentation de lentreprise:

Calinfo SPRL:

Ce magasin anciennement appel BCMC informatique, dploie principalement ses activits dans la vente de matriel informatique et dans le domaine de la tlphonie, multimdia.

Ses principales activits sont notamment: pices dtaches (carte graphique, disque dur), GSM et abonnements Mobistar Proximus. Contrat ADSL, tlviseurs et home cinma.

Situe dans le centre dAndenne et lance il y a maintenant 10 ans dici, cette socit SPRL dclare sous peu, occupe actuellement 4 personnes temps pleins.

Petit historique de la socit:

1998: ouverture du premier magasin rue du pont Andenne, rparations, ventes au dtail.

2003: dmnagement cot de la banque ING au carrefour Andenne toujours.

2005: extension de laile du magasin passage x m

2007: passage en socit.

Face lexpansion de son secteur dactivit, laugmentation des ventes de matriel informatique et la ncessit dutiliser actuellement un pc (virement bancaire, dclaration tva, recherches interactives, emails ) le patron de cette entreprise souhaiterait donc pouvoir grer de manire plus aboutie lensemble de ses activits.

I.2 - Clientle de lentreprise:

B2C: Dans le monde du commerce lectronique et d'internet, Business to Consumer aussi appel Business to Customer est le nom donn l'ensemble d'architectures techniques et logicielles informatiques permettant de mettre en relation des entreprises avec leurs clients (consommateurs): en franais, des entreprises aux particuliers

B2B: L'expression business to business (B2B) dsigne: l'ensemble d'architectures techniques et logicielles informatiques permettant de mettre en relation des entreprises

I.3 - Personnel / hirarchie interne :

Calianno Bruno: Administrateur de la socit

Badot Xavier: Chef datelier

Labiouse A: Apprenti

Cornet L.: Apprenti

Au vu des diffrents grades dans la socit, le programme ne pourra tre utilis de la mme manire par tout le monde. -> Contrle requis.

I.4 - Description du systme actuel:

Le logiciel de facturation (programme commercial non tudi spcifiquement pour le magasin) devenant compltement obsolte:

impossibilit de travailler 2 personnes sur le module facture client sinon plantage du programme...),

Pas de systme de base de donnes

Fichiers plats (fichiers qui salourdissent avec le temps)

Lenteur des recherches due aux fichiers plats qui grossissent de jour en jour

Pas de lien direct avec le site internet actuel (vu labsence de base de donnes, lexportation des fichiers plats se fait vers un fichier excel lui-mme charg par une base de donnes mysql )

Consquences:

Pas de stock rel sur le site internet ( pas de concordance simultane entre stock rel et stock prsent sur le site ).

Lourdeur dexportation des fichiers

Exportation manuelle obligatoire.

I.5 -Leurs besoins:

Un outil de pointe est ncessaire afin de faciliter le travail au sein de lentreprise, viter une perte de temps importante, ainsi quapporter une meilleure image vis--vis de la clientle.

Chapitre II. Objectifs et Besoins:

Les amliorations apportes au fur et mesure du dveloppement du projet ( Objectifs et Besoins ).

BMI FACT

EasyShop

Pas de base de donnes (fichier plat )

Extrmement lent

Utilisation de Sql Server pour plus de rapidit

Pas de gestion de droit

Droit distinct pour chaque utilisateur du systme

Mono Utilisateur (plantage si 2 personnes travaillent sur le programme en mme temps: problme du fichier plat) .

Multi -Utilisateurs.

Impossible de personnaliser ses impressions (module compltement bloqu).

Personnalisation de limpression (logo, donnes bancaires ).

Pas de gestion de stocks

Gre les commandes fournisseursGestion de Stocks

Auto-Stocks Alerte

Pas dhistorique de ventes (statistiques)

Possibilit de faire des statistiques sur les historiques de vente

Statistiques sur un produit vendu

Meilleur Vente Ticket

Pas de suivi sur les ventes

Grce au login de lutilisateur, on peut avoir un tracking sur les pices vendues.

Pas de gestion des numros de srie

Gestion des numros de srie

Provenance fournisseur

Date Dachat

Encodage du code fournisseur

Clture de caisse: instable, plantage frquent

Manque de scurit (copie du fichier intgral ).

Mme lors de la copie du rpertoire easyshop aucune donne confidentielle nest vole.

Problme de liaisons avec le site Web (stock non mis a jour en temps rel).

Le site Web qui sera dvelopp sera connect en temps rel la base de donnes

Problme dincrmentation de compteur dans les notes de crdit.

Lenteur des recherches

Difficult des recherches (recherche par string)

Pas de rappels de paiements

Gestion de rappels des paiements avec filtre et dates limites (paiements fin de mois ).

Pas de ligne de crdit

Ligne de crdit grable paramtrable.

Pas de gestionnaire dinventaire FIFO correct (travaillait toujours avec le dernier cost price ).

Inventaire calcul en fonction des cost price restant dans la table fifo.

Pas de tl distance

Base de donnes en ligne (travaille en tl distance moyennant ligne internet).

Pas de vrification de prix lors de transfert

Check prix lors de transfert doffres vers commandes, commandes vers factures, offres vers factures.

Dfinir Remise/ ristourne en %

Dfinir prix: ristourne %

Manuel

Vente darticles avec marge ngative.

Historique dachat

Evolution prix dachat Graphique.

Chapitre III: Analyse Fonctionnelle.

III.1: Schma Entits Associations:

III.2: Modle Relationnel:

Chapitre IV : Analyse Technique:IV.1 - Petite parenthse sur les droits utilisateurs sur la base de donnes:

Seulement 2 droits sont appliqus sur la base de donnes (DB Read, DB writer). Un utilisateur gnral sera utilis pour se connecter la DB. On vitera donc dutiliser le compte SA pour des raisons de scurit.

Aucun filtrage des droits utilisateurs sur la base de donnes ne sera gr par cette mthode. Lensemble des droits seront dfinis et grs par le logiciel en lui-mme (Voir Chapitre V Use case ).

Laccs au serveur via Microsoft SQL Server Management Studio ne sera donc pas possible!

(Lensemble des tests effectus tout au long du dveloppement se baseront sur SQL server 2008 tournant sur un Windows server 2003.)

IV.2 - Laccs serveur:

Laccs sera limit au sein de lentreprise. La base de donnes pourra tre modifie ou adapte via le logiciel Sql management studio express. Compte administrateur dsactiv distance. Accs Serveur ncessaire.

Le mot de passe utilis dans Easy Shop pour la connexion la base de donnes sera crypt dans un fichier texte.

IV.3 - Le dveloppement:

Lensemble du programme est dvelopp en csharp. ( .Net Framework 3.5 ).

IV.4 - La modlisation de la base de donnes:

Utilisation de Win design: en mode compatibilit sql server -> aucun souci rencontr pour lexport vers le sql server 2008.

IV.5 - O.S:

Le logiciel sera dploy sur plusieurs plateformes: Windows XP, Windows Seven, Windows Vista.

IV.6 - Aperu de larchitecture Principale du logiciel:

IV.7 - Architecture globale en couches: (Schma).

IV.8 - Architecture globale dcoupe selon les couches.

a) Use Case: Login Utilisateur

Pour lauthentification utilisateur, Le client dispose du module dinterface Accueil . Lors du traitement dauthentification de celui-ci et de sa validation, le logiciel utilise les ressources de la table users, si celle-ci est valide le traitement de lauthentification redirigera lutilisateur vers linterface principale du programme ( Main form ).

Spcifications:

- Paramtre in : login - mot passe.

- Paramtre retourn : Redirection de lutilisateur vers linterface principale.

- Pr condition : ouvrir l'application

- Condition : saisir le login et mot de passe (valides).

- Post-condition : Base de donnes disponible. Validit des donnes rentres.

- Gestion des cas derreur & dexception : Libell message derreur - croix rouge indiquant lindisponibilit de la base de donnes.

b) Use case: Rappel de paiements

Pour le rappel de paiement, le client dispose du module dinterface >. Lors de la validation de lenvoi dun rappel pour une facture, le systme utilisera les ressources de la table Factures de la base de donnes afin de lister les factures impayes. Aprs slection le traitement formulaire gnre un PDF stock sur le disque dur nomm de lid de la facture. Ce dernier sera joint lemail lors de lexpdition via linterface Email et envoi celui-ci au client , une notification de lenvoi de celui-ci lui succde.

Spcifications:

- Paramtre in : listing des non pays

- Paramtre retourn : Envoi de lemail Notification de lenvoi

- Pr condition : ouverture du module, slection du client traiter.

- Conditions : disposer des droits pour le module. Slectionner une facture.

- Post-condition : Base de donnes disponible. Validit du format de lemail.

- Gestion des cas derreur & dexception : Alerte Email non valide.

Easy Shop | P. 94

IV.7 - Aperu dune partie des diffrentes fonctions prsentes dans EasyShop + Droits.

Fichier

Paramtres

Maintenance

Encodage ( Entre de Stock )

Ticket

Facturation

Global Owner Info EDIT_GLOBAL_OWNER_INFO

Compteurs F/T/O

Assignation des compteurs

EDIT_COUNTER

Catgories

Ajouter

Editer

Cacher Dcacher.

EDIT_CATEGORY

Nouvelle Commande Fournisseur

MODIFICATION_STOCK

Nouveau Ticket

-Nouvelle Facture-Liste Facture

Import

Importation des donnes clients

Importation Code Postal

Importation Data Fournisseurs

IMPORT_DATA

Marge dachat

Dfinir la marge par dfaut a effectuer sur le prix dachat de larticle

EDIT_MARGIN_PRICE

Clients

Ajouter

Editer

Cacher

CREDIT_LIMIT

Clients Genre-> Ajouter-> Editer

Liste Commande Fournisseur

MODIFICATION_STOCK

Liste Ticket

-Note denvoi

Se dlogguer

Imprimantes

Code Postal

Ajouter

Editer

Nouvelle Facture Achat Fournisseur

MODIFICATION_STOCK

Clture de Caisse

CLOSING_CASH

-Nouvelle Note de crdit - Liste Note de crdit

EDIT_CREDIT_NOTE

Quitter

Constructeurs

-> Ajouter

-> Supprimer

Liste Facture Achat Fournisseur

MODIFICATION_STOCK

-Journal de caisse CLOSING_CASH_JOURNAL

Mthodes de paiement

Ajouter

Editer

Cacher

EDIT_PAYMENT_METHOD

Fournisseurs

EDIT_SUPPLIER

Mouvement de Stock

Ajouter

Supprimer

MODIFICATION_STOCK

-Rappels de paiement

PAYMENT_REMINDER

Email Sender / Server Configuration

EDIT_MAIL_CONFIGURATION

Pays

Ajouter

Editer

Taux Tva EDIT_TVA

Taxes EDIT_TAXES

Chapitre V: USE CASE:

Comme expliqu prcdemment dans lavant propos, lensemble de lanalyse a t effectue sous forme de USE CASE. Cette mthode sest avre la plus efficace pour comprendre le systme actuel, et ainsi dy apporter les solutions les mieux adaptes.

V.1.1 - Authentification de lutilisateur et dfinition des variables globales.

Pourquoiun login ? Demande du client:

Afin de pouvoir suivre le travail de ses employs, le patron de la socit souhaite pouvoir effectuer certains contrles ou statistiques sur les ventes des produits. Il souhaite aussi avoir la possibilit de restreindre laccs certains modules pour des questions de scurit.

Les points importants requis:

Suivi des ventes (qui a vendu quoi? responsabilit des ventes Savoir qui a vendu larticle au client si rclamation client, qui est en faute?).

Qui peut faire quoi? (dfinir les actions possibles pour chaque utilisateur distinct).

Facilit de recherches sur un ticket, factures, encodages par utilisateur. On marque lutilisateur qui a cr la facture ou le ticket.

Possibilit de statistiques en fonction des rsultats des diffrents vendeurs,

V.1.2 - Analyse du Login utilisateur:

a) Use Case: Connexions dun utilisateur (light, et approfondi).

b) Explication des variables globales utilises / Variables qui suivront lutilisateur tout au long de sa session sur le programme. Pourquoi? De quelle manire?

c) Scurit du module de connexion Cryptage/Dcryptage des donnes lors de la connexion.

d) Point de Vue visuel: La connexion de lutilisateur

a) USE CASE : Identification de lutilisateur travaillant sur le programme

RESUME: Dfinition des variables personnelles lies lutilisateur courant.

ACTEUR : Utilisateur pourvu / dpourvu de droit.

PRE-CONDITION : Disposer dun compte utilisateur cr prcdemment par un administrateur

DESCRIPTION : Lutilisateur va pouvoir se connecter au systme grce son Login / Password. Ce login permettra de dfinir les diffrents droits de lutilisateur pour laccs aux diffrents modules contrls.

(Login)

(Dlgue des droits) (Systme)

Use case simplifi(Login user) :

(Lancement du programme par un utilisateur: Demande de loginLancement ou boucle sur la demande dun login valide.)

Use case Login User dtaill:

( Nous remarquerons: Ajout du cryptage du password en MD5 pour la vrification au sein de la base de donnes. On vite ainsi dans le cas dune coute rseau le transfert en clair du login et du mot de passe.Notons lapparition des variables globales qui seront expliques par la suite.Chargement de divers paramtres supplmentaires via le fichier XML dans les variables globales.)

Diagramme des squences Login / User:

Schma de la dynamique ( Connections User ).

b) Les variables globales utilises:

Nous avons vu dans le schma prcdent quEasyShop charge aprs authentification de lutilisateur, une srie de paramtres ncessaires au fonctionnement du programme. Quel en est le but?

Pourquoi des variables globales:

Les variables globales serviront :

stocker le nom de lutilisateur actuel; prnom, login, ainsi que son numro didentification unique dans la base de donnes. (Nous nous servirons de ces paramtres pour les crations de factures, tickets -> Auteur de la facture ou du ticket ). Le Nom, Prnom pour les statistiques ou messages envoys ( Tchat local, tches utilisateurs ).

Stocker les diffrentes valeurs des compteurs ticket, facture (nous allons voir par la suite pourquoi dans le chapitre suivant).

La marge bnficiaire par dfaut dfinie pour les articles. On dfinira la marge par dfaut effectuer sur le prix dachat dun article afin de dterminer ou de donner ide du prix auquel on souhaiterait vendre le produit.

Les paramtres du serveur sortant pour les emails (Utilisation pour les rappels de paiements).

Lexpditeur de lemail par dfaut pour les rappels de paiements.

Limprimante par dfaut utiliser pour limpression.

Analyse du chargement des variables et extraits de code :

Comment sont stockes ses variables:

(Un fichier XML reprenant la configuration non sensible du POSTE (chaque poste possdera un fichier XML, ceci afin de permettre de travailler sur plusieurs annes fiscales diffrentes, limprimante par dfaut utiliser pour le poste en cours, ou encore de paramtrer sur quel serveur travaille lapplication, ))

Enumration des composantes du fichier xmlcontenant les paramtres de lapplication :

database=easyshop;server=mcfly588.dyndns.org;User ID=sa;pwd= 34 PDFCreator [email protected] smtp.skynet.be

C) La couche applicative: extraits de code et scurit des variables (Cryptage / Dcryptage ).

Nous avons pu voir la page prcdente que lensemble des donnes reprises dans le fichier config.xml sont illisibles pour lutilisateur averti qui aurait une mauvaise intention sur le programme.

Les donnes sensibles seront donc protges via un algorithme de cryptage!

La scuritdu fichier contenant les diffrentes variables charges :

Rappel:

(En cas de chargement de valeur non crypte le programme nautorisera pas la connexion. Exception gre par le programme -> Maintenance Requise!)

Le cryptage / Dcryptage de lapplication:

Fonction de cryptage du fichier xml:

Les diffrentes valeurs des compteurs seront cryptes afin dviter la modification manuelle ainsi que lanne fiscale en cours.Etudions par exemple lutilisation du module de cryptage / dcryptage pour le chargement du mot de passe pour laccs la base de donne. Ce mot de passe se trouvera dans un fichier externe appel PASSWORD.TXT qui sera crypt de la mme manire que les diffrents compteurs.

Couche applicative(extraits de code)-a) Exemple de fonction de Cryptage.

public string Md5Encrypt(string original)

{

String password = "4";

MD5CryptoServiceProvider hashMd5 = new MD5CryptoServiceProvider();

byte[] passwordHash = hashMd5.ComputeHash(

UnicodeEncoding.Unicode.GetBytes(password));

TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

des.Key = passwordHash;

des.Mode = CipherMode.ECB;

byte[] buffer = UnicodeEncoding.Unicode.GetBytes(original);

return UnicodeEncoding.Unicode.GetString(

des.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length)); }

b) Fonction de dcryptage.

public string Md5Decrypt(string encrypted)

{

String password = "4";

MD5CryptoServiceProvider hashMd5 = new MD5CryptoServiceProvider();

byte[] passwordHash = hashMd5.ComputeHash(

UnicodeEncoding.Unicode.GetBytes(password));

TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

des.Key = passwordHash;

des.Mode = CipherMode.ECB;

byte[] buffer = UnicodeEncoding.Unicode.GetBytes(encrypted);

return UnicodeEncoding.Unicode.GetString(

des.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));

}

Afin dtablir une connexion la base de donnes, le programme lira donc litem se trouvant dans le fichier xml auquel la fonction Md5Decrypt rajoutera le mot de passe dcrypt partir du fichier texte.

Lapplication EasyShop sera accompagne dun petit projet de cryptage afin de gnrer le mot de passe crypt insrer dans le fichier password.txt pour la connexion la base de donnes. -> Mot de passe externe au programme et scuris.

D) Point de vue Visuel: Impression dcran Page Login Principal.

(Ds le lancement du programme lutilisateur sera invit se loguer. Pas daction possible sur le programme sans le login utilisateur.)

(Procdure dauthentification Login / PasswordBareCode)

V. 2. La gestion de lanne fiscale :

USE CASE : Lutilisateur veut pouvoir dfinir son anne fiscale de travail.

RESUME: Dfinition des variables personnelles lie lutilisateur courant au chargement du programme

ACTEUR : Utilisateur pourvu / dpourvu de droit.

PRE-CONDITION : Disposer dun compte utilisateur cr prcdemment par un administrateur

Disposer des droits pour la modification de lanne fiscale si souhait.

DESCRIPTION: Lutilisateur va pouvoir dfinir son anne fiscale de travail tout en tant alert des risques encourus de manire claire.

V.2.1 - Prsentation de la problmatique de lanne fiscale et pourquoi lavoir laiss dfinissable manuellement :

V.2.2 - Use Caseen dtails.

V.2.3 - Couche applicative Extraits de code.

V.2.4 - La dfinition / raffectation des compteurs (Visuel).

V.2.1 - Prsentation de la problmatique de lanne fiscale et pourquoi lavoir laiss dfinissable manuellement :

Pourquoi rendre les paramtres compteurs modifiables:

Lanne Fiscale: Afin de laisser la possibilit lutilisateur de continuer crer des factures en travaillant par exemple sur une anne antrieure, le logiciel chargera lanne fiscale sur laquelle on souhaite travailler partir du fichier XML.

Compteurs Offres / Factures / : Avoir la possibilit dinstaller EASY SHOP dans une entreprise en cours danne (grce au paramtre lu partir du xml)!!!!!! On ne va pas recommencer les factures au numro 1 au milieu de lanne

Objectif du module: avoir une interface claire et contrle afin de pouvoir dfinir la numrotation de dpart souhait!

Cette numrotation devra tre revue chaque dbut danne afin de recommencer partir 1 la numrotation (trs importante, nous verrons au point suivant la gestion dalerte pour le contrle de lanne fiscale et numro).

La dfinition du numro (ticket, facture, offre, crdit note) sera effectue par un trigger au sein de la base de donnes, nous verrons comment dans le chapitre suivant.

Use Case: Analyse Activity Model( Light ) :

(Nous partirons de lide que le serveur 2003 utilis pour le dveloppement du logiciel et le stockage de la base de donnes sera suivi de manire rgulire.De par cette maintenance rgulire, nous nous baserons sur lheure du serveur afin de vrifier lanne fiscale suppose tre en cours.Synchronisation du serveur via un serveur NTP.)

V.2.2 - BIS: Use Case en dtails - Vrification de la date serveur dtaille:

(Dans le cas dune slection ngative lors de la rassignation du compteur, EasyShop alertera lutilisateur de manire rgulire!EasyShop affichera galement lanne fiscale de travail en rouge afin dattirer lattention de lutilisateur.Dans le cas ngatif: easyshop charge les variables globales de manire standard comme vu dans le premier chapitre (use case simplifi ici).)

V.2.3 - Extrait de codede la vrification des 2 dates :

private void loadtimeserver()

{

DataSet dsServerTime = sqlrequest.GetServerDateTime();

DataRow ServerTime = dsServerTime.Tables[0].Rows[0];

textBox_time_server.Text = ServerTime[0].ToString();

DateTime ServerTimea = (DateTime)ServerTime[0];

int YearActual = ServerTimea.Year;

int FiscalYearLoad = Convert.ToInt32(GlobalVariable.Fiscal_Year);

label_fiscal_year_load.Text = FiscalYearLoad.ToString();

//label_fiscal_year_load.BackColor = System.Drawing.Color.Green;

// on va vrifier que l'anne fiscal en cours est correcte sinon on demande la revalidation des compteurs pour la nouvelle anne.

if (YearActual > FiscalYearLoad)

{

DialogResult reply = MessageBox.Show("La date Fiscal ne semble plus tre valide ! Souhaitez-vous rassigner les compteurs ?",

"YesorNo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (reply == DialogResult.Yes)

{

Edit_Increment Fen_Edit_inc = new Edit_Increment();

Fen_Edit_inc.ShowDialog();

}

}

//on revrifie si la variable a t change et on affiche en rouge si non.

FiscalYearLoad = Convert.ToInt32(GlobalVariable.Fiscal_Year);

if (YearActual > FiscalYearLoad)

{

label_fiscal_year_load.BackColor = System.Drawing.Color.Red;

}

}

Zoom sur une fonction de lcriture dun paramtre compteur dans le fichier xml.

(Nous utiliserons le fichier xmlrw.cs (fichier permettant la lecture et lcriture du fichier xml avec cryptage / dcryptage) pour le stockage des compteurs sur le poste local.using System.Security.Cryptography;using System.IO;Utilisation des librairies framework pour le cryptage des donnes.IO: Input Output, librairie permettant la lecture / criture de fichier.)Petit aperu du fichier xmlrw.

Fonction criture / Lecture:

public static string GetFiscalYear()

{

string Fiscal_Year = "";

try

{

xmlDoc.Load(Application.StartupPath + "\\config.xml");

Fiscal_Year = xmlDoc.SelectSingleNode("config/Fiscal_year").FirstChild.Value.ToString();

Fiscal_Year = Decrypt(Fiscal_Year);

//MessageBox.Show(Fiscal_Year.ToString());

}

catch (Exception e)

{

MessageBox.Show(e.Message);

}

return Fiscal_Year;

}

public static void SetFiscalYear(int Fiscal_year)

{

try

{

String Fiscal_year_encrypt = Fiscal_year.ToString();

Fiscal_year_encrypt = Encrypt(Fiscal_year_encrypt);

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();

xmlDocument.Load(Application.StartupPath + "\\config.xml");

// For example:

XmlNodeList elemList = xmlDocument.GetElementsByTagName("Fiscal_year");

for (int i = 0; i < elemList.Count; i++)

{

elemList[i].InnerXml = Fiscal_year_encrypt.ToString();

}

xmlDocument.Save(Application.StartupPath + "\\config.xml");

Initialize();

}

catch (Exception e)

{

MessageBox.Show(e.Message);

}

(On remarque que le champ sur lequel on travaille est toujours en clair aussi bien dans le xmlwriter que dans le fichier XML. Ces donnes seront galement cryptes pour la suite du projet!) }

V.2.4 - Rsultat visuel pour lutilisateur du programme:

- Lalerte Utilisateuren cas de changement danne :

Illustration de lalerteen cas dutilisation du logiciel dans une anne fiscale non valide :

La vrification de lanne fiscale au dmarrage du programme(fonctionnement):

Lors de la connexion de lutilisateur au programme, la main form va se connecter sur la base de donnes du serveur et rcuprer la date de celui-ci.

Lobjectif tant dalerter lutilisateur quil doit changer son anne fiscale de travail!!

Lors du passage au 1er Janvier EasyShop Notifiera donc lutilisateur du changement danne et proposera automatiquement de rassigner les compteurs (ceux ci chargs galement partir du fichier XML).

(Prsence dun administrateur ou Utilisateur avec droit dincrmentation requis, le premier Janvier de chaque anne!!! Il faut un droit pour modifier les compteurs!!!!Requte impose par le grant de la socit.- Le grant se chargera du paramtrage du programme le premier de lan.Lanne fiscale sera utilise dans le marquage des commandes, offres, tickets, factures )

Illustration de la comparaison entre les 2 dates ( client serveur ):

Le programme compare les 2 dates client et serveur, sil remarque une anomalie dans les dates, automatiquement, il en avertit lutilisateur et bloque le lancement du programme.

Visuel: Le programme lance la fentre de contrle des compteurs si lutilisateur le souhaite!

Dfinition des compteurs: Fentre Incrment( ouverture condition davoir le droit ) :

(Rinitialisation de tous les compteurs 1 (valeur de dpart).Automatiquement easyshop appelle la procdure dcriture du fichier xml tout en cryptant la valeur avec linsertion dans le fichier.Les valeurs sont automatiquement recharges partir du fichier XML, on contrle ainsi la bonne criture du fichier. La notification du rechargement du fichier sera notifie dans la suite.Nous noterons la prsence dune double confirmation sur le bouton reset all!)

V.2.5 - Le fonctionnement de lincrmentation des numros de factures / tickets en dtails

Problmatique:

LgalementChaque Facture / Ticket doit tre >.

Chaque numro doit tre unique et incrment pour chaque anne fiscale!

Use case:

2 Utilisateurs travaillent sur le programme et cliquent simultanment sur nouveau ticket. Comment grer lincrmentation du compteur fiscal sans avoir de doublon?

La fonction de des triggers dinsertion:

Le trigger se positionne sur lentre insre et tente dinsrer le numro quon lui a demand de la manire suivante:

Le trigger recherche le numro le plus grand dans la base de donnes, en fonction de lanne sur laquelle on travailleet dfinit le numro actuel de la facture.

1) Si le trigger na pas de valeur maximale dfinie, il encode le numro de facture pass par la requte sql (+1)! (explication venir).

2) Si le trigger dtecte dj une entre dans la table de destination, il reprend le dernier numro dfini dans cette anne fiscale et lincrmente de 1.

Pourquoi avoir gr ceci par trigger?

Le trigger gre les numros linsertion, on est donc certain de ne pas avoir de doublon tant donn que chaque requte sql est traite lune aprs lautre Ceci vitera de se retrouver avec 2 numros de facture identiques si 2 utilisateurs cliquent sur crer facture simultanment.

(Le Trigger slectionne dans la base de donnes le plus grand nombre trouv pour lanne fiscale insre.Si un numro est trouv il lincrmente automatiquement.De cette manire, comme lon passe dans linsertion de la premire facture le numro de dpart (paramtrable dans le menu compteur), ceci permet de spcifier la premire valeur gnre linsertion (+1).Pour la prochaine entre, il prendra donc le plus grand nombre trouv dans la table et lincrmentera.De cette manire on est sur que le compteur est unique et incrment pour lanne fiscale en cours, et ainsi non avons la possibilit de prciser le numro de dpart.)Loption du Begin transaction sql aurait pu tre galement envisage en incluant la rcupration du plus grand numro prsent dans la base de donnes et sur lanne fiscale en cours (Autre mthode de travail).

Exemple dun trigger utilis pour lincrmentation:

CREATE TRIGGER FACT_INC

ON FACTURE_VENTE AFTER INSERT

AS

BEGIN

DECLARE @maxvalue INT

DECLARE @ID uniqueidentifier

SET @ID = (SELECT ID_FAC FROM inserted)

SELECT @maxvalue = MAX(NUM_FAC)

FROM FACTURE_VENTE

WHERE DATE_FAC=FACTURE_VENTE.DATE_FAC

SET @maxvalue = @maxvalue+1

UPDATE FACTURE_VENTE

SET NUM_FAC = (@maxvalue)

WHERE [email protected]

END

Mme principe pour la partie atelier du magasin ( Encodage des rparations PC au sein de lentreprise ) :

CREATE TRIGGER ATELIER_INC ON ATELIER AFTER INSERT

AS

BEGIN

DECLARE @maxvalue INTDECLARE @FISCAL_YEAR_SAVE INT

DECLARE @ID uniqueidentifier

SET @ID = (SELECT ID_REP FROM inserted)

SET @FISCAL_YEAR_SAVE INT = (SELECT FISCAL_YEAR_REP FROM inserted)

SELECT @maxvalue = MAX(NUM_REP)

FROM ATELIER where [email protected]_YEAR_SAVE

SET @maxvalue = @maxvalue+1

UPDATE ATELIER

SET NUM_REP = (@maxvalue)

WHERE [email protected]

END

(Le trigger pour le numro des rparations en atelier fonctionnera de la mme manire, sauf que celui-ci commencera par dfaut 1. Nous navons pas besoin de paramtrer le compteur, aucune obligation lgale contrairement aux factures ou tickets.Il se chargera simplement de rcuprer le dernier numro de lanne fiscale dans laquelle on travaille, et lincrmente de 1. Nous navons pas dobligation reprendre un ancien numro de dpart pour la numrotation des fiches de latelier en cours danne dans le cas dune nouvelle installation dEasyShop, contrairement la facture! )

V.3: La gestion des droits Utilisateurs:

Maintenant que nous avons tudi le chargement de easyshop, grce aux variables globales prcdemment dfinies, nous allons pouvoir obtenir les droits de lutilisateur courant grce son GUID ( Global Unique Identifier ).

USE CASE : Lutilisateur sans droit veut se connecter un niveau suprieur de lapplication auquel il nest pas autoris.

RESUME Object :

Le client souhait pouvoir appliquer une srie de restrictions sur lensemble des modules sensibles du logiciel tout en gardant la possibilit dautoriser de manire temporaire, laccs ce module grce lintervention dun administrateur. Lutilisateur standard sera autoris accder au module de manire temporaire.

ACTEUR : Utilisateur/ administrateur

PRE-CONDITION : Disposer dun compte utilisateur cr prcdemment par un administrateur

DESCRIPTION : Lutilisateur clique sur une fonction du logiciel auquel il nest pas autoris daccder: que se passe-t-il?

Quels sont les possibilits daccder malgr tout ce module? Cest ici que ladministrateur rentre en jeu.

Aperu:

V.3.1 - Use CaseV.3.2 - Pourquoi avoir implment des droits sur chaque LoginV.3.3 - Point de vue Visuel: lalerte utilisateur!

Prsentation de la problmatique:

EasyShop proposera dans sa version finale une longue liste de droits applicables pour chaque utilisateur que nous verrons par la suite.

Pourquoi?

Afin de limiter les accs aux fonctions du programme par utilisateur comme prcdemment prsent.

Eviter que les donnes confidentielles lentreprise ne soient accessibles (le prix dachat de larticle, les entres de stock, les coordonnes fournisseurs, ) par un quelconque utilisateur.

Cas concret:

Dans le cas dune vente dun article (sous forme de ticket, ou facture) lutilisateur peut spcifier, si souhait, une remise sur le produit.

Tous les utilisateurs ne peuvent pas disposer de ce droit!

Seuls, les utilisateurs avec le droit spcifique EDIT_PRICE pourront alors diter et effectuer une remise sur le produit.

V.3.1: Use Case: Le systme dalerte utilisateur : Contexte :

(Demande Le chargement dune page)

(Systme)

(Autorise / Demande Autorisation)

V.3.2: Explication du fonctionnement de la vrification des droits pour chaque utilisateur:

User Login For special right access:

Nous parlerons dans lensemble des cas tudis dans Easyshop de droit spcifique.

Pourquoi spcifique:

Il doit nous tre possible, lors de lutilisation du programme par un utilisateur dpourvu de droit, de pouvoir rentrer un code administrateur afin deffectuer une action de niveau suprieure. Dans le cas trait ici, ldition de prix du produit:

Voyons le message gnr par le systme lors de labsence de droit pour lutilisateur.

Dans le cas o lutilisateur naurait par exemple pas le droit daccder une certaine fonctionnalit, EasyShop affichera donc une alerte pour indiquer le refus de laccs au module!

Ensuite si la connexion est refuse, EasyShop proposera la possibilit de se loguer! Cette fonctionnalit permettra un administrateur ou un utilisateur de niveau suprieur dappliquer une autorisation temporaire pour laccs cette page!

Cette fonction naffecte en rien les variables globales, ds la fermeture ou laccs une autre zone non autorise le programme redemandera automatiquement la nouvelle connexion dun utilisateur avec droit!

(Refuse Autorisation )=>> Droit TEMPORAIRE.

(Systme)

(Demande Login)

(Sauthentifie avec un compte de niveau suprieur pour autoriser laccs temporaire lutilisateur standard)

(Administrateur)

Fonction de Vrification des droits utilisateurs:

Exemple pour la vrification du droit EDIT_OWNER_INFO:

Guid ID_USR_RIGHT_REQUIRED = sqlrequest.GetIdRightForFen("EDIT_OWNER_INFOS");

// on va vrifier si l'utilisateur connect est repris dans la liste des users lis ce droit:

Boolean Authorised_Usr = sqlrequest.GetAutorisationForUsr(ID_USR_RIGHT_REQUIRED, new Guid(GlobalVariable.UserGuid));

if (Authorised_Usr == false)

{

MessageBox.Show("Accs Refus, Vous n'avez pas les droits !");

// on va rclamer l'autorisation !

Users_Right_Request Fen_Right_Request = new Users_Right_Request("EDIT_OWNER_INFOS");

DialogResult resultright = Fen_Right_Request.ShowDialog(this);

if (resultright == DialogResult.Yes)

{

MessageBox.Show("Access Granted");

}

else

{

Close();

}

}

Nous remarquerons donc lors du chargement de la fentre, la vrification du droit de lutilisateur, si le droit nest pas respect le systme charge donc le Login Prompt pour le droit demand:

Seconde Fonction lors du remplissage de la fentre de login( LOGIN PROMPT PAGE ) :

HashPasswordMD5 = null;

HashPasswordMD5 = CreateMD5Hash(textBox_password.Text);

Boolean checkvalid = sqlrequest.Verif_login_password(textBox_login.Text, HashPasswordMD5);

if (checkvalid == true)

{

//on stock le userguid pour le request user right

dsinfousers.Clear();

dsinfousers = sqlrequest.GetdsUsersInfo(textBox_login.Text);

DataRow InfoUser = dsinfousers.Tables[0].Rows[0];

Guid ID_USR = (Guid) InfoUser["ID_USR"];

// on vrifie si le user maintenant connect a le droit :

Guid ID_USR_RIGHT_REQUIRED = sqlrequest.GetIdRightForFen(RIGHT_REQUEST_RECU);

// si lutilisateur connect a le droit on valid le dialog result et on return true a la fonction mre.

Boolean Authorised_Usr = sqlrequest.GetAutorisationForUsr(ID_USR_RIGHT_REQUIRED,ID_USR);

if (Authorised_Usr == true)

{

DialogResult = DialogResult.Yes; } }

Fonction de vrification de lautorisation de lutilisateur:

public Boolean GetAutorisationForUsr(Guid ID_USR_RIGHT, Guid ID_USR)

{

Boolean Authorised = false;

try

{

SqlConnection connection = new SqlConnection(connectString);

connection.Open();

SqlDataAdapter adapter = new SqlDataAdapter();

adapter.TableMappings.Add("Table", "ID_RECUP");

SqlCommand command = new SqlCommand("SELECT * FROM USERS_RIGHT_LIST where [email protected]_USR and [email protected]_USR_RIGHT", connection);

command.Parameters.AddWithValue("@ID_USR", ID_USR);

command.Parameters.AddWithValue("@ID_USR_RIGHT", ID_USR_RIGHT);

command.CommandType = CommandType.Text;

adapter.SelectCommand = command;

// Fill the DataSet.

DataSet dataSet = new DataSet("ID_RECUP");

adapter.Fill(dataSet);

DataTable info = dataSet.Tables[0];

int cpt = info.Rows.Count;

if (cpt != 0)

{

DataRow inforow = info.Rows[0];

//ID_FACT_ACH = inforow[0].ToString();

//MessageBox.Show("ok");

Authorised = true;

}

}

catch (Exception ex)

{

System.Diagnostics.Debug.WriteLine(ex.ToString());

MessageBox.Show(ex.ToString());

}

return Authorised;

}

(Remarques: Utilisation des paramtres pour la fonction sql, afin dviter toute tentative de modification du code sql. (Protection contre linjection Sql ).Lensemble des fonctions deasyshop fonctionnera avec cette mthode. )

V.3.3: Illustration:

Fentre demandant laccs temporaire pour une personne ne possdant pas le droit adquat.

(Spcification du droit requis)

Vrification du login pour accs avec droit spcifique.

( Une seule fois pour une seule fonction!!!Accs Unique pour lutilisateur dpourvu du droit.)

Prsentation des droits utilisateurs:

La liste des droits sera accompagne dune brve description permettant de rappeler la fonction dfinie par ce droit! (Chaque administrateur pourra modifier la description du droit prsent dans easyshop si souhait).

Lajout des diffrents droits sera ajout au fur et mesure de llaboration finale du projet.

Interface permettant de grer les droits utilisateurs:

V. 4: Encodage des produits et encodage des entres de stocks.

Maintenant que nous avons dfini les droits, et limit laccs aux pages sensibles, nous allons pouvoir dcouvrir les diffrents modules du programme.

Tout dabord, avant toute vente nous allons devoir encoder notre produit

Tout produit rentr dans le magasin devra tre tiquet afin de dfinir sa provenance!

La socit tant confronte diffrents problmes de gestion de garantie, le client a demand la possibilit de retrouver la provenance et la facture dachat de larticle.

Le systme actuel:

-Actuellement le magasin ne gre pas les entres de stock: pas dencodage de facture dachat -> simple quantit rentr et son prix. Manque de lien avec le fournisseur.

Les besoins / Demandes du client:

- Pouvoir connatre de quel fournisseur provient larticleet connaitre sa facture dachat.

- Avoir un suivi sur les entres / Sorties (Quel article a t vendu quel moment?)

Si lon veut commander un produit chez le fournisseur et encoder la prcommande dans notre logiciel, nous devrons crer notre article au sein du systme. Nous allons dcouvrir ce point dans le chapitre ci-dessous.

Encodage des produits:

USE CASE : Lutilisateur encode un produit

RESUME: Lutilisateur va pouvoir crer sa fiche produite sil en possde le droit! Diffrentes options ont t demandes par le client (Rfrence, libell, catgorie, marque du produit ).

ACTEUR : Utilisateur pourvu / dpourvu de droit.

PRE-CONDITION : Disposer dun compte utilisateur cr prcdemment par un administrateur

Disposer des droits pour la modification des donnes dun article

DESCRIPTION: Ladministrateur de la socit repre un article intressant chez le fournisseur et souhaite en passer commande afin de le rentrer en magasin.

Ladministrateur encode donc le produit dans le systme avant de crer sa commande fournisseur dans le programme -> Nous verrons lutilit de ce module dans le chapitre suivant, nous nous intresserons uniquement au cas de la cration de larticle et des possibilits de la fiche article dans le cas actuel.

Encodage de larticle: Use case

(Initialisation des stocks ( fictif ).) (Sauvegarde du prix de larticle dans une table externe)

(Entre des donnes dans le formulaireEnregistrement de la fiche articleCration de la ligne article prix pour larticleCration de lentre des stocks fictifs (Quantit Magasin, Rservation, En commande fournisseur). -> trs important pour le STOCK affich dans le programme et sur le site web (voir plus tard).Important aussi, nous introduirons la notion de FIFO dans ce chapitre.)

Analyse de la fiche produit au sein du logiciel:

a) Rfrence produit: dfinit la rfrence pour la facilit de recherche darticles lors dune vente.

Une classification tudie au sein de lentreprise permettra de classer les rfrences cres ( EasyShop ne sen occupe donc pas ).

La seule chose donc le programme se chargera est la vrification de doublons (double rfrence, ou double libell ).

Le bar code: extrmement important pour la recherche darticles galement.

Catgorie: Obligation de slectionner une sous-catgorie produit lors de la sauvegarde de larticle (contrainte imposelors de la demande de llaboration du programme, ceci nous servira dans le moteur de recherche articles -> voir filtres. Ceci sera galement utilis dans le dveloppement futur du site web).

Constructeurs: Constructeur de larticle (voir plus bas).

La TVA: dfinissable dans les paramtres dEasyShop (Cration souhait)

Les Taxes lis:

Recupel

Reprobel

Obligation dafficher les cotisations sur limpression dynamique des tickets / factures

Egalement paramtrable souhait via la gestion des taxes

Statut de larticle (cach, non cach).

Dernier point Important: lautostock.

Extrait de code contrlant la saisie:

Boolean Valid = Check_Completed_Form();

// on vrifie que le formulaire est correctement remplit :

if (Valid == true)

{

}

private Boolean Check_Completed_Form()

{

Boolean Valid_value_form = true;

if (TypeSauvegarde == "NEW")

{

String ID_SS_CAT = rowViewCurrentArticle["ID_SS_CAT"].ToString();

if (textBox_reference_art.Text == "")

{

MessageBox.Show("Rfrence Null !");

Valid_value_form = false;

}

if (textBox_libelle_art.Text == "")

{

MessageBox.Show("Libell Obligatoire !");

Valid_value_form = false;

}

if (ID_SS_CAT == "")

{

MessageBox.Show("Aucune Sous-Catgorie selectionne pour l'article !");

Valid_value_form = false;

}

if (rowViewCurrentArticle["ID_TVA"].ToString() == "")

{

MessageBox.Show("Aucune TVA selectionne pour l'article !");

Valid_value_form = false;

}

if (rowViewCurrentArticle["ID_CON"].ToString() == "")

{

MessageBox.Show("Aucun Constructeur selectionn pour l'article !");

Valid_value_form = false;

}

// on va vrifier le doublon Rfrence dans la base de donne buisness process :

// on va vrifier les doublons sur le reference !!!

Business.Articles_Manager BuisnessCheckReference = new Business.Articles_Manager();

String Reference = textBox_reference_art.Text;

Boolean Reference_Already_Present = BuisnessCheckReference.Check_Article_Double_Ref(Reference);

if (Reference_Already_Present == true)

{

MessageBox.Show("Doublon Rfrence !");

Valid_value_form = false;

}

}

else

{

// dans le cas d'une mise a jour :

}

return Valid_value_form;

}

(Lensemble des formulaires du programme seront vrifis grce ce systme.)

Visuel:

Au Final: (Dcouverte du module cration darticles ).

1)Lencodage des articles dans le systme (avec leurs diffrentes caractristiques).

2) La dfinition du prix Normal / Promo de larticle.

3) Les statistiques dentres et de sortie.

4) Le classement par catgories / sous catgories.

Possibilits: crer, diter, dfinir les prix de vente ou encore les prix promo des articles vendus en magasin.

A cela sajoutera toute une srie de petits modules et outils qui vont faciliter la dfinition et la surveillance des prix ou ventes des produits entre autre, lutilisation de graphiques expliquant lvolution du cost price et du prix de vente

Petite Parenthse sur les diffrentes possibilits de la fiche article ainsi que lauto stock:

Lorsque la case Auto Stock sera coche, lors de la vente dun article, easyshop vrifiera automatiquement que le stock restant est toujours suprieur la quantit minimum.

Dans le cas contraire easyshop slectionnera lensemble des utilisateurs possdant le droit AUTO_STOCK et enverra une tche chaque utilisateur abonn:

Intitul: Auto Stock (Rfrence Produit).

Message: Alerte Auto Stock.

(Pour la suite: EasyShop sera court terme capable deffectuer une prcommande de fournisseur de lui-mme.Dans un premier temps easyshop rassemblera lensemble des articles commander dans un module spcifique.Lobjectif: Easyshop devra tre capable de slectionner le fournisseur du produit de lui mme.Mais galement tre capable de slectionner le meilleur fournisseur! (En fonction du Cost Price dachat de larticle).)

V.5: Dfinition du prix de larticle.V.5.1 Prix Normal / Prix Promo.

EasyShop propose 2 grandes fonctionnalits concernant le prix de larticle:La premire permet de grer son prix de vente > , la seconde propose une prix promotionnel de larticle ( Date de dbut et date de fin promo ).Lors de lajout dun article une offre, commande ou facture easyshop slectionnera automatiquement le prix promo si la date du jour est comprise entre la date de dbut de fin. Analysons la slection du prix de vente lors dune vente de produit:

Vente de larticle au prix promo :

USE CASE : Ladministrateur souhaite proposer des articles en promotion pendant un certain temps. Slection du prix de vente automatique (Promo ou pas) par le systme.

RESUME: lutilisateur suprieur dfinit la date de promotion du produit ainsi que son prix promo.

ACTEUR : Utilisateur pourvu / dpourvu de droit.

PRE-CONDITION : Disposer dun compte utilisateur cr prcdemment par un administrateur

Disposer des droits pour la modification des donnes dun article

DESCRIPTION: ladministrateur possde dans ce modle, la possibilit de mettre larticle en promotion pour une priode dtermine. Slection de la date de dbut et date de fin suivant un calendrier propos par le systme.

Lors du dpassement de la priode de promotion, le statut > de larticle repasse automatiquement faux (A vrifier donc chaque jour suivant le souhait du client).

Analyse de la vente dun article en promotion:

Extrait de code:

// 21/09/2009 AJOUT CHECK PROMOTION VALABLE :

// on rcupre la date de dbut et de fin

DateTime Date_Debut_Promo = (DateTime)rowpriceline["DATE_PROMO_DEBUT_ART_PRI"];

DateTime Date_Fin_Promo = (DateTime)rowpriceline["DATE_PROMO_FIN_ART_PRI"];

DateTime Date_Du_Jour = DateTime.Now;

Boolean Verif_Promo = (Boolean) rowpriceline["IS_PROMO_ART_PRI"];

if (Date_Du_Jour >= Date_Debut_Promo && Date_Du_Jour de la commande reste false.)

(Observation: Notons la prsence supplmentaire de la fonction mise jour statut: // check si les produits ont tous ts transfrs : // on check si la quantite commande ( QT_CMD_CLI ) est gale QT_TRANSFERED_CMD_CLI_DET + QT Delivry Now; int qt_cmd = (int)rowseldataset["QT_CMD_CLI_DET"]; int qt_already_transfered = (int)rowseldataset["QT_TRANSFERED_CMD_CLI_DET"]; int qt_delivry_now = (int)rowseldataset["QT Delivry Now"]; if ((qt_cmd != qt_already_transfered + qt_delivry_now)) { Transfert_complet = false; } Suite du code :if (Transfert_complet == true) { //on update la commande l'tat transfert complet sqlrequest.UpdateCmdCliStatutCompleted(ID_CMD_CLI, true); })

V.7.4 - Use case Crationfacture (On cible la ncessit de slection client et article avant la cration de facture):

( Use Case: Nous ciblons ici lobligation davoir slectionn un client et un article AVANT la cration de facture! On vitera ainsi des trous ou des factures VIDES!!!!Point trs important!)

Use case Encodage Nouveau Client:

(USE CASE : Utilisateur encode un clientRESUME: Sauvegarde des coordonnes du client dans la base de donnes. ACTEUR : Client, VendeurPRE-CONDITION : Disposer dun compte utilisateur pralablement cr par un administrateurDESCRIPTION: Lutilisateur encode les coordonnes du client dans le programme aprs avoir effectu une pr-recherche )Lencodage dun nouveau client proposera dencoder lensemble des coordonnes du nouveau client.

Nom

Prnom

Adresse

Numro Ad.

Code Postal Localit

Pays

Inscription la mailing Liste (Prvu pour plus tard)

Email Client

Tel

Fax

GSM

Petite remarque:

Une fois le pays du client slectionn, il ne sera plus possible de faire marche arrire.

On bloque le code pays afin dafficher correctement les factures sauves.

Facture sauve -> lien vers la table pays pour afficher le CODE TVA PAYS.

ScreenShot Table Pays:

(Nous pourrions envisager pour la suite la sauvegarde du code tva dans la table facture et note de crdit afin de faire sauter cette limite du programme (dans notre environnement de travail, ceci ne pose AUCUN problme).)

(USE CASE: Encodage d'un client dans la base de DonnesEnumration des CoordonnesClientEncodage DataListe des clients complte connue dans le systme.Demande SauvegardeSystmeRefresh ListeAlerte Sauvegard.Slection Outils Clients ( Fentre Gestion Client)Demande des Coordonnes ClientsEffectue un filtre sur les donnes clientsFentre Nouveau CLientSlection du ClientVendeurVrifie que le client n'est dj pas prsent.)

Use case:

Clture Caisse :

Pourquoi avoir instaur une clture de caisse:

Suivant la demande du client, lensemble des ventes effectues en ticket au cours de la journe devra tre transfrable en factures.

Ce module devra reprendre lensemble des tickets PAYES et non transfrs en factures, pour ensuite les transfrer dans une facture globale au nom de la socit.

La somme des paiements sera donc effectue dans ce transfert, le systme soccupe de rassembler lensemble des paiements de manire distincte(Total Visa, Total Bancontact, ).

Le systme sauvegarde le mode de paiement pour la facture globale une fois le calcul termin.

Use Case: Clture de CaisseDtails

(*Update Paiements Facture)

V.8: Limite de crdits - Rappel de paiements V.8.1- Limite de crdits client:

EasyShop intgre un module permettant la gestion dune ligne de crdits limits ne pas dpasser.

Chaque utilisateur possde une note de crdit bien spcifique dfinissable via la fiche client.

Le premier module consistera afficher un message dalerte avertissant lutilisateur du programme que le client a dpass sa ligne de crdit!

Dans cette situation, 2 cas sont envisager:

a) On refuse la vente ce client tant que sa situation nest pas rgularise.

b) Soit on autorise la cration de la facture malgr tout!

Dans la deuxime situation, afin dviter les abus ou lignorance des messages dalertes, lutilisateur devra possder lautorisation de cration de facture mme si la limite de crdit est atteinte! (USER RIGHT = CREDIT_LIMIT)

Voir le chapitre des droits de EasyShop (V.3).

(Vrification du login pour accs avec droit spcifique)

Dfinition de la ligne de crdit:

(Calculer le montant impay pour les factures ouvertes) (Dfinition du montant impay maximal ne pas dpasser.)

(Afficher la facture non paye)

Use Case: Un vendeur slectionne un client dont la limite de crdit est dpasse.

Schma avec crdit limit:

Avertissement de lutilisateur dun dpassement de ligne de crdit client:

Seconde alerte utilisateur:

( Informations: Blocage si droit insuffisantDouble Alerte!Dcision de Continuer ou dannuler en fonction du montant non pay.)

V.8.2 - Gestion des Rappels de Paiements.

Afin de grer les diffrentes factures ouvertes dans le systme, EasyShop proposera dans sa version finale un module de gestion des paiements.

Objectifs:

- Faciliter la gestion des paiements reus par virement

Pour les virements, chaque facture sera marque dun VCS: Virement communication structure.

Moteur de recherche afin de filtrer les factures via un numro VCS.

Voir lensemble des factures non payes

Impression des factures non payes envoyer pour un ventuel rappel.

Affichage en ROUGE des factures qui sont en dpassement au niveau de la date limite de paiement et possibilit dimprimer celle-ci.

Envoyer les factures non payes par emailaux clients !

La dfinition des dates limites de paiement:

ScreenShot Limite de paiement:

Les diffrentes optionspossibles :

Limite Paiement en jour: dfinit la date limite thorique lgale: 30 jours gnralement (Affichage lgal sur la facture)

Paiement fin de mois: dfinit si le logiciel doit calculer la date limite est gale la date daujourdhui + 30J ou + 30j et fin de mois.

Dfinir la limite maximale de paiement du client (parfois dans les 180 jours).

Aperu du moteur de recherches:

(Calcul de la date relle limite et affichage des factures qui ont dpasses cette date en ROUGE.)

(Ouverture du module de paiement afin de clturer la facture si le paiement a t reu.(Flag de la facture pay simultanment).)

Extrait de code permettant le calcul des dates de paiement maximales:

(int cptdsList = 0; foreach (DataRow row in dsListNoPay.Tables[0].Rows) { Boolean end_month = (Boolean) row["END_MONTH_CLI"]; DateTime Date_Facture = (DateTime) row["DATE_CREATED_FAC"]; int DAY_LEFT_END_PAY = (int)row["REAL_DATE_END_PAY"]; //Pas en fin de mois if (end_month == false) { row["DATE_LIMIT"] = Date_Facture.AddDays(DAY_LEFT_END_PAY); if (DateTime.Now > Date_Facture.AddDays(DAY_LEFT_END_PAY)) { //QT Delivry Affichage de la ligne en rougesi dpassement de la date dataGridView_no_pay.Rows[cptdsList].DefaultCellStyle.BackColor = Color.Red; } } else { //Fin de mois DateTime DateTempo; DateTempo = Date_Facture.AddDays(DAY_LEFT_END_PAY); int days = 0; days = DateTempo.Day; days--; DateTempo = DateTempo.AddDays(-days); DateTempo = DateTempo.AddMonths(1); DateTempo = DateTempo.AddDays(-1); row["DATE_LIMIT"] = DateTempo; if (DateTime.Now > DateTempo) { dataGridView_no_pay.Rows[cptdsList].DefaultCellStyle.BackColor = Color.Red; } } cptdsList++; })

V.8.3 - La gestion des paiements par virement! Ou Paiement dcal.

Use case: filtrage client

EasyShop propose un module permettant de grer les rappels de paiement. Si une limite de crdit est dpasse, la possibilit denvoi de rappels de paiement sera propose par ce module. Tout en grant les dates limites de paiement. Afin de retrouver facilement un virement effectu par une socit, easyshop marquera chaque facture dun numro VCS.

(Recherche sur un client dans ce use case. Filtre propos dans la fentre Rappel Paiement: Nom, Prnom, Tva, VCS )Voyons ceci plus en dtail:

Use Case par VCS:

Recherche dun virement arriv sur le compte de la socitvia le vcs :

(Recherche dune facture par la communication structure. Lutilisateur va pouvoir cliquer sur loption paiement afin de clturer la facture (ou une partie de la somme).Dans le cas o la facture est entirement paye le module de gestion de paiement va automatiquement marquer la facture comme paye. Une fois marque comme paye, elle disparaitra automatiquement des rappels de paiement. Si le VCS est entr de manire complte le filtre ne retournera quun seul rsultat VCS = UNIQUE!!!!!!!!)

Lalgorithme dun VCS:

http://belgium.wikia.com/wiki/Virement

La communication+++XXX/XXXX/XXXXX+++(les 'X' reprsentant des chiffres) est unecommunication structure. Celle-ci facilite la gestion des dossiers des clients par les entreprises car elles peuvent plus rapidement mettre en relation le virement avec la facture associe au client et leur comptabilit interne.

Dans une communication structure, les dix premiers chiffres sont significatifs et utilisables librement, les 2 derniers chiffres sont le nombre de contrle (+++SSS/SSSS/SSSCC+++). Il se calcule comme tant le reste de la division (modulo) du nombre reprsent par les 10 chiffres significatifs divis par 97. Si le nombre de contrles est gal a 0 alors le nombre de contrle 97 sera utilis. Si le nombre de contrles est infrieur a 10, on rajoute un zro devant (4 -> 04) (exemple: communication: 123456, contrle: 123456%97 = 72, ce qui donne: +++000/0123/45672+++).

La fonction gnrant ce code:

On va se baser ici sur le numro de facture ainsi que sur lanne fiscale en cours!!

public String Generated_VCS_FAC(String Num_Fact)

{

String endstring;

int longueur = Num_Fact.Length;

while (longueur < 6)

{

Num_Fact = Num_Fact + "0";

longueur = Num_Fact.Length;

}

//on est a 10chiffres

String finalvcs = GlobalVariable.Fiscal_Year + Num_Fact;

long a = Int32.Parse(finalvcs);

long result = (a / 97);

long end = 0;

if (result == 0)

{

end = 97;

endstring = a.ToString() + end.ToString();

}

else

{

if (result < 10)

{

endstring = a.ToString() + "0" + result;

}

else

{

endstring = a.ToString() + "00";

}

}

return endstring;

}

V.8.4 - la gestion des Paiements:

Le mode paiement:

Le mme module va tre utilis afin de valider les paiements sur les tickets, factures, ou encore notes de crdit.

La distinction se fera simplement lappel du chargement de lobjet (Fentre paiement) .

Le paramtre String Type_Save sera pass afin de dterminer sur quoi on travaille actuellement.

Ce module a t conu afin dviter de devoir taper le montant reu par le client manuellement!

Les touches FN sont donc actives dans ce module et vont savrer extrmement pratiques et faciles dutilisation.

Lors de la pression dune touche F(x) le montant restant est automatiquement affect la fonction correspondant F(x).

Petite illustration du systme:

Nous remarquerons ici, la ligne prcdant les mthodes de paiement! Le systme affiche les diffrents paiements dj prcdemment reus et calcule automatiquement le montant restant payer!!

Extrait de code grant les fonctions F1 F12:

private void dataGridView_met_pay_KeyDown(object sender, KeyEventArgs e)

{

String rechKeyFx = e.KeyCode.ToString();

int rowa = dataGridView_met_pay.Rows.Count - 1;

for (int r = 0; r < rowa; r++)

{

//Recherche de la case correspondant F(x)

if (dataGridView_met_pay.Rows[r].Cells["F(x)"].Value.ToString() == rechKeyFx)

{

if (dataGridView_met_pay.Rows[r].Cells["Amount"].Value.ToString() == "0,00")

{

//Si case est 0 alors on attribue le montant restant par dfaut.

dataGridView_met_pay.Rows[r].Cells["Amount"].Value = lefttopay;

}

else

{

//decimal savepay = 0;

// savepay = decimal.Parse(dataGridView_met_pay.Rows[r].Cells["Amount"].Value.ToString());

// on rassigne la valeur 0!

dataGridView_met_pay.Rows[r].Cells["Amount"].Value = "0,00";

}

}

}

}

Complment: La dfinition des mthodes de paiement est bien sr possible!

Edition des mthodes de paiement:

( La suppression est bien entendu proscrire car lensemble des paiements reus jusqu' prsent seraient concerns par cette suppression. Nous proposerons donc la possibilit de mettre les mthodes de paiement en cach (HIDDEN).)

V.9 - Linventaire:

Pour les entreprises but lucratif, il doit tre fait pour tablir lebilan. Il permet de fixer la valeur dustocket de contrler si aucune marchandise n'a disparu physiquement (par obsolescence, perte ou vol) ou comptablement (par erreur de gestion) et d'avoir donc une image des stocks rels au moment de l'inventaire.

Pour cela, sont rpertories toutes les marchandises existantes dans les entrepts pour les comparer la liste des achats et des ventes. Si tout se passe bien, les stocks la date d'inventaire doivent correspondre la diffrence entre les entres et les sorties de stock depuis le dernier inventaire (en tenant compte aussi des stocks qui existaient lors de ce dernier inventaire). S'il manque des marchandises par rapport ce calcul, il y a lieu de s'interroger sur l'origine des disparitions ou des erreurs de gestion.Il y a lieu par ailleurs d'apprcier les pertes de valeur marchande des marchandises devenues inutilisables ou obsoltes.

V.9.1 - La gestion de STOCKen profondeur :

Les entres de stock ( petit rappel )*:

A chaque mouvement de stocks (transfert dune commande fournisseur en facture dachats, encodage facture dachats, mouvements de stocks manuels), la table grant le fifo va donc tre modifie.

Une ligne est cre chaque modification de stock:

Article(s) concern(s)

Le LOG mouvement de stock li cette entre.

Date de Cration

Cost Price (ncessaire a linventaire).

Quantit rentre

Quantits Disponibles (qui nont pas encore t vendues)

Le Fifo actuel est visible dans la fiche Article:

A chaque vente darticle, le stock est dcrment:

En cas de vente Ticket

Transfert dune commande en facture

Transfert dune offre en facture

Facturation

Note de Crdit sur un article.

if (NO_STOCK_ART == false)

{

//Update quantity stock FICTIF ! On dcrmente le stock du nombre d'article vendu

sqlrequest.UpdateStockArt(id_art, -CptQTInsert);

// On met a jour le article stock ( FIFO inventaire );

//FONCTION OK

DataSet Fifo = new DataSet();

Fifo = sqlrequestFifo.GetDsArticleStockWhereIdArtAndQTFreeNotNULL(id_art);

int row = Fifo.Tables[0].Rows.Count - 1;

int reste = CptQTInsert;

int a = 0;

while (reste != 0)

{

DataRow rowselFifo = Fifo.Tables[0].Rows[a];

int qtfreeupd = (int)rowselFifo["QT_FREE_ART_STO"] - reste;

if (qtfreeupd >= 0)

{

rowselFifo["QT_FREE_ART_STO"] = (int)rowselFifo["QT_FREE_ART_STO"] - reste;

reste = 0;

}

else

{

rowselFifo["QT_FREE_ART_STO"] = 0;

reste = Math.Abs(qtfreeupd);

a++;

}

}

sqlrequestFifo.UpdateDsStock_From_IdArt(Fifo);

}

(Dans le cas dun article possdant un stock, cette fonction va permettre de dcrmenter le fifo disponible pour larticle tant quil reste des quantits a dcrmenter.La vrification de la vente du produit est ncessaire avant la validation de la vente (afin de bien dcrmenter le fifo, voir vrification).On modifie le tableau localement, ensuite on renvoie la modification la DB.)

Dcrmentation des quantits:

Lors de la vente de larticle le stock fictif est galement mis jour:

Pourquoi avoir une table avec un stock Fictif?

Lensemble des articles encods provenant dune commande fournisseurs (transfert) ou dun encodage dune facture dachats, sont traits dans la table: articles info.

Nous pourrions obtenir le nombre darticles non vendus dans cette table via la commande:

SELECT [ID_ART_SER]

,[ID_TICK_DET]

,[ID_FACT_DET]

,[ID_STOCK_MOD]

,[ID_ART]

,[ID_FACT_ACH]

,[STATUT_VENTE_ART_INFO]

,[SERIAL_NUMBER_ART_INFO]

,[COST_PRICE_ART_INFO]

,[SERIAL_FABRICANT_ART_INFO]

,[REMARQUES_ART_INFO]

,[STATUT_ART_INFO]

,[DATE_CREATED_ART_INFO]

,[DATE_MODIFIED_ART_INFO]

,[FROM_ID_ART_INFO]

,[NUM_LINE_FACT_ART_INFO]

,[CODE_FOURNISSEUR_ART_INFO]

FROM [easyshop].[dbo].[ARTICLES_INFO] where STATUT_VENTE_ART_INFO=0 and ID_ART= FD6BB402-7E90-49AB-89C4-3E06CD0A8581

Pourquoine pas agir de cette manire pour obtenir le stock rel ?

a) Avec le nombre darticles en entre et sortie dans la socit, la requte serait assez lourde (la table va vite grossir ) et la requte sera de plus en lourde tre effectue.

b) De plus, ceci ne nous apporte pas le stock rel disponible:

Le stock rel disponible pour le site internet par exemple sera le nombre darticles de stock MOINS le nombre darticles rservs dans les commandes client!!!!

c) On va viter de concatner plusieurs requtes sql pour savoir exactement le stock rel!

EasyShop travaille donc avec une autre table prcdemment aborde STOCK_LOCATION_LIST

Cette table est donc utilise pour recenser les quantits actuelles disponibles des articles.

Stock magasin

Stock rserv

Qi en commande chez le fournisseur pour cet article

Avantages:

Rapidit dexcution

Le client peut voir le stock rel en ligne sans surcharger la base de donnes de requte

On imagine 15 clients visitant le site en utilisant la premire mthode, le serveur sql serait soumis rude preuve.

V.9.2 - Le calcul de linventaire:

Ce calcul se basera donc sur la table FIFO (prsent prcdemment) actuelle du systme.

EasyShop rassemblera chaque ligne de la table articles info ou le QT_FREE_ART_STO est diffrent de NULL. ( Ce qui rprsente donc un article de stocks en magasin ) et multiplira son COST_PRICE par la quantit prsente dans le stock.

Linventaire tiendra compte galement des taxes.

EasyShop proposera 2 types dinventaires!

Inventaire simple ( on regroupe les diffrentes entres avec le mme cost_price et mme article )

Inventaire dtaill: Chaque ligne du FIFO est affiche dans les dtails de linventaire ( voir ci-dessous ).

Extrait de code:

private void New_Inv_Load(object sender, EventArgs e)

{

// PASSER CETTE FONCTION EN TRIGGER PLUS TARD POUR GAGNER EN RAPIDITE D'EXECUTION !

TOTAL_HORS_TAXES = 0;

Guid ID_INV = Guid.NewGuid();

sqlrequest.Insert_New_Inv(ID_INV, new Guid(GlobalVariable.UserGuid), "Inventaire");

dsInv_Details = sqlrequest.GetDsInvDetailsWhereQtFreeNotNull();

int row = dsInv_Details.Tables[0].Rows.Count - 1;

for (int r = 0; r