Vous êtes sur la page 1sur 63

D ossier

ERP Agence - MAGICCA


Module d'Administration et de Gestion Interne des
Collaborateurs et Clients Agence
Rapport de stage
Version 1.00 du 7 août 2008
Etat : Projet

Paul Clément, Licence MIAGE


Année Universitaire 2007-
2008

Encadrants
: Mr. Tabone
Mr. Frossini

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 1/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Historique :

Version Date Origine de la mise à jour Rédigée par Validée par


1.0 07/08/08 Paul CLEMENT Paul CLEMENT Philippe FROSSINI

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 2/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Préambule

Je tiens ici à remercier vivement toutes les personnes de Sopra Group qui ont contribué de près ou de loin
au bon déroulement de mon stage, pour le temps qu’elles ont bien voulu me consacrer, les conseils qu’elles m’ont
donné ou tout simplement le soutient qu’elles m’ont apporté.

Mes remerciements s’adressent plus particulièrement à Mr. Philippe FROSSINI, mon tuteur en entreprise,
Mr. Patrick Meyer, architecte et spécialiste des technologies J2EE pour l’agence EST, et Mr. Tabonne, mon
encadrant universitaire.

Je souhaite également remercier Mme. Christine PEYROT, assistante de l’agence de Metz, Mme. Pascale
LUCAS, ingénieur commercial et Mr. Jean-Philippe Muller, directeur de l’agence EST pour leur accueil, leur
disponibilité, l’ambiance studieuse et conviviale qu’ils m’ont offerte afin que mon stage se déroule dans les meilleures
conditions possibles.

Paul CLEMENT

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 3/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Sommaire :

1. INTRODUCTION 5

2. L’ENTREPRISE 6
2.1. G é n é r a l it é s 6
2.2. Chiffres clés (3 1 /1 2/ 2 00 7 ) 9
2.3. L ’agence E S T 10

3. PRESENTATION DU PROJET 12
3.1. L e s be so in s 12
3 .2 . L e s ob je ct if s 13
3 .3 . L e s co n t r a in t e s 14
3 .4 . L ’o r g a n i sa t io n d u p ro je t 14
3.5. T e c h n o l o g i e s e t m é t h o d e s e m p l o y é e s 16
3.6. P l a n n i n g p ré visio n ne l 17
3.7. L’équipe d u projet M A G I C C A 18

4. ANALYSE E T RESOLUTION DU PROBLEME 19


4.1. P r e m i è r e é t a p e : é t u d e d e s d o c u m e n t s e t d e la b a s e e xista n t s 19
4.2. L ’ a p p r e n t i s s a g e e t la m i s e à n i v e a u d a n s le s t e ch n o l o g i e s 20
4 .3 . A n a l y s e e t définition d ’ u n p r o t o t yp e 20
4 .4 . L a réa lisa t io n d u p r o t o t y p e à p a r a m è t r e s re st re int s 22
4 .5 . L ’a n a l y s e e t la définition d ’ u n p ro t o t y p e à p a r a m è t r e é t e n d u 23
4 .6 . L a ré a lisa t io n d u p r o t o t yp e a v e c p a r a m è t r e é t e n d u 24
4 .7 . M i s e e n p l a c e d e te st s u n it a ire s 25
4.8. R e c e t t a g e 26

5. PROGRAMMES REALISES 27

6. B I L A N 40
6.1. B ila n T e c h n i q u e 40
6.2. B ilan h u m a i n 41

BIBLIOGRAPHIE 42

ANNEXES 43

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 4/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

1. INTRODUCTION

Mon stage de fin de DUT ayant été réalisé en interne au Centre Psychothérapique de Nancy, j’ai
choisit d’effectuer celui de licence dans un autre environnement, celui d’une SSII. Sopra Group m’a donné
la chance de découvrir et de comprendre le fonctionnement d’une société de service en m’offrant un
stage, en interne au sein d’une de ses agences.

Ce rapport sera composé de quatre parties. La première décrira l’entreprise et la situera sur le marché.
La deuxième expliquera partie présentera le sujet du stage. La troisième partie proposera une analyse et
une résolution du problème. Et enfin, la quatrième partie décriera les travaux.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 5/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

2. L’ENTREPRISE

2.1. G é n é ra li t é s

Le Groupe en bref Source : site officiel

Sopra Group, expert européen des technologies de l’information


Groupe européen de Conseil, d’Intégration de Systèmes, d'Outsourcing applicatif et de Solutions
applicatives, Sopra Group guide les entreprises dans leurs projets de transformation, depuis la
définition des stratégies jusqu’à leur réalisation. Ses atouts : l’expertise des grands projets, la connaissance
des métiers des clients, la maîtrise des technologies et une large implantation européenne.

Histoire du Groupe Source : site officiel


Sopra Group, créé en janvier 1968 par Pierre Pasquier et François Odin, figure parmi les plus
anciennes SSII européennes.
La société s’est, dès l’origine, positionnée sur l’ensemble des métiers des services informatiques et a
très rapidement disposé d’une forte implantation nationale.
En 1990, Sopra Group réalise son introduction à la Bourse de Paris avec succès. Cette opération
sera précédée du premier plan d’options de souscription d’actions destiné à la quasi-totalité des
collaborateurs du Groupe. Dès lors, Sopra Group va combiner de façon harmonieuse croissances
interne et externe.
Les acquisitions les plus significatives
En France
en 1996, Sopra Group fait sa plus forte opération de croissance externe par l’acquisition de SG2
Ingénierie. Cette opération permet l’entrée de la Société Générale dans le capital de Sopra
Group ainsi que l’arrivée de 650 collaborateurs qui renforcent considérablement les
implantations parisiennes, régionales et belges ;
en 2000, Sopra Group acquiert Orga Consultants qui est une société spécialisée dans le Conseil en
stratégie, en management et en organisation, employant 200 collaborateurs. Ce rapprochement
permet au Groupe de développer une activité de consulting de haut niveau ;
en décembre 2003, Sopra Group acquiert Inforsud Ingénierie auprès du Crédit Agricole. Cette
acquisition renforce le leadership de Sopra Group sur le marché bancaire et lui permet
de confirmer sa position de référence incontournable dans le domaine des crédits et de la
monétique;
en juillet 2004, Sopra Group acquiert Valoris, société européenne de conseil et de
services informatiques, disposant d’une offre allant du conseil en stratégie à la mise en
œuvre des technologies de l’information et comptant près de 500 collaborateurs. Valoris est
un acteur de référence dans les domaines suivants : Business Intelligence (BI), Customer
Relationship Management (CRM), Portail et Gestion de Contenu.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 6/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

En Europe
Sopra Group fait des acquisitions afin de mettre en place sa politique de développement européen sur
le métier de l’Intégration de Systèmes :
après avoir créé sa première implantation internationale en Suisse et obtenu par l’achat de SG2
en 1996 son équivalent en Belgique, Sopra Group démarre dans les années 1999 à 2001 la
réalisation de son réseau international avec les acquisitions de Mentor au Royaume-Uni, de
Organizacion Guver, Dipisa, Newpath Consulting et Newpath GS en Espagne et de ITI SpA en
Italie;
en 2005, Sopra Group accélère son développement au Royaume-Uni et en Espagne :
acquisition de la société Newell & Budge au Royaume-Uni et de ses filiales irlandaise
et indienne. Leader en Écosse, et forte de plus de 600 personnes (dont plus de 100
personnes en Inde dans sa filiale Momentum Technologies), elle dispose d’une gamme
complète de services informatiques allant du conseil à la
mise en œuvre;

Les positionnements de Newell & Budge et de Sopra Group étant complémentaires au


Royaume-Uni, l’entité résultante bénéficie d’une couverture géographique complète,
d’équipes expérimentées et de qualité, avec une base clients renforcée, principalement dans
les secteurs de la Finance, des Services Publics et des Télécoms ;
acquisition de la société PROFit SA, basée en Espagne et au Portugal, qui offre à ses
clients grands comptes une gamme complète de services informatiques allant du conseil
à
la mise en œuvre de solutions et à l’outsourcing applicatif.
PROFit a développé une valeur ajoutée globale sur des marchés verticaux tels que la
Banque, l’Énergie, les Télécoms ou le Secteur Public.
Les positionnements de PROFit et de Sopra Group étant complémentaires en Espagne,
Sopra Group bénéficie, à la suite de l’opération, d’une couverture géographique
complète (implantations à Barcelone, Madrid, Séville, Valence, Vitoria et Lisbonne),
d’équipes expérimentées et de qualité, avec une base clients renforcée,
principalement dans les secteurs de la Finance, des Télécoms, des Services Publics et de
la Distribution.
Filiale Axway Software
À partir de 2001, le Groupe décide par le biais de sa filiale Axway Software de développer une stratégie
de conquête sur le marché de l’EAI (Enterprise Application Integration) avec pour ambition de devenir
un des leaders mondiaux de ce marché :
en 2001, création d’Axway Software (400 collaborateurs pour un CA de 50 M€) par apport de
l’ensemble des activités en EAI du Groupe. Ainsi, Axway peut bénéficier de toute l’expérience
et du savoir-faire de Sopra Group en termes d’approche « projet », en alliant la compétence
métier, la force commerciale, la puissance et l’ancienneté du parc installé ;
en 2002, acquisition des activités d’intégration de Viewlocity Inc. en Europe dans un premier
temps, puis en Asie et aux États-Unis. Avec cette acquisition, Axway complète, d’une part, sa
gamme de produits en y ajoutant une gamme spécialisée dans l’EDI (Échange de
Données Informatisées) et, d’autre part, sa couverture géographique qui est désormais
mondiale. Cette acquisition permet à Axway, dotée désormais de 600 collaborateurs, de faire
partie des grands éditeurs mondiaux dans l’EAI ;

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 7/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

début 2006, acquisition de Cyclone Commerce aux États-Unis. Ce rapprochement s’inscrit dans la
stratégie de développement mondial d’Axway. La complémentarité des deux sociétés permet
l’émergence d’un leader mondial capable de servir les besoins des plus grands clients dans les
domaines du B2B, du SOA et sur le marché des services collaboratifs ;
début 2007, acquisition des activités « logiciels B2B » d’Atos Origin en Allemagne.
Cette acquisition procure à Axway un leadership européen indiscutable dans le domaine des
plates- formes logicielles B2B et renforce significativement sa présence en Allemagne, qui
constitue le premier marché européen.
Pour le Groupe, la stratégie de développement à l’international consiste, en synergie avec Axway et les
filiales européennes d’Intégration de Systèmes, à poursuivre et à amplifier la démarche initialisée par
Sopra Group, en ciblant prioritairement le renforcement dans les principaux pays européens.
Globalement, le Groupe bénéficie des synergies possibles qui lui permettent d’exporter ses acquis d’un
pays sur un autre. Il constitue l’un des premiers groupes français de Conseil et d’Intégration de
Systèmes et de Solutions, significativement présent dans le secteur Banque et Assurance avec une forte
implantation régionale et un projet ambitieux au plan international.

Implantations
Benelux
Espagne
France (34 sites)
Inde
Irlande
Italie
Maroc
Portugal
Royaume-Uni
Suisse
Filiale Axway (Amérique du nord, Amérique du sud, Europe du nord, Europe du sud, Asie,
Afrique)

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 8/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

2.2. Chiffres clé s (31/12/ 2007)

Chiffre d’affaire (M€) Effectifs du groupe

Présence internationale (Axway inclus) Marchés verticaux


Chiffre d'affaires Groupe (%) Chiffre d'affaires Groupe (%)

Chiffre d'affaires par activité (en %) Chiffre d'affaires par métier (en %)

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 9/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

2.3. L’agence E S T

L’agence EST, composée des sites de Metz, Strasbourg est composée de plus de cent
collaborateurs. Elle appartient à la division Nord.
Une division comporte des agences rassemblées par secteur géographique puis par type de marché pour les
plus importantes d’entre elles.
Exemple :
Sopra Group (France)
Division Nord (au sens Nord de Paris)
Agence de Lille (+/- 450 collaborateurs)
Outsourcing
Tertiaire
Industrie

Agence EST (Site de Metz et Strasbourg, +/- 120 collaborateurs)
Agence Luxembourg

Division Ouest
Agence Bordeaux
Agence Nantes

Cette organisation bipolaire pour l’agence EST s’explique par la présence des « grands comptes »
essentiellement localisés en Lorraine (CORA Informatique, Arcelor, Saint-Gobain, …) et en
Alsace (Unedic, PSA, Kronenbourg). Cependant, l’implantation de Sopra Group dans l’Est est trop
faible pour justifier la présence de deux agences totalement différentes.
Positionné sur le site de Metz (Technopôle), j’ai pu constater la principale particularité des SSII : les
collaborateurs travaillent chez le client. En effet, ne travaillaient à l’agence que l’assistance de direction
Christine Peyrot, l’ingénieur commercial Pascale Lucas, parfois le directeur d’agence Jean-Philippe Muller,
les collaborateurs en inter-chantier (très rare), et les collaborateurs qui assistaient aux différentes
réunions (recrutement, …).

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 10/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Mon tuteur, Mr. Philippe Frossini, Responsable Qualité de l’agence, me consacrait une demi-journée
par semaine afin de faire des points d’avancement, valider les différentes étapes du cahier des charges, …
Les locaux, modernes, étaient constitués que de deux bureaux, une salle de réunion et une salle appelée
« plateau » comportant 12 mini-bureaux. J’étais installé à l’un deux, avec un ordinateur portable récent,
un accès internet/réseaux ethernet, et un téléphone. Salle climatisée et assise confortable ont fait
que l’environnement était parfait pour un travail efficace.
J’ai évolué avec comme système d’exploitation Windows XP Professionnel, comme IDE principal Eclipse,
comme SGBD MySQL et sa console d’administration « phpmyadmin ». J’ai également utilisé
MySQL Workbench pour les schémas de base de données, DB designer pour le MPD, ainsi que
MagicDraw pour la documentation UML. Tous les rapports, cahiers des charges et documents étaient
réalisés sous office, accompagnés du logiciel DOCS (modèles de document officiels à la charte Sopra
Group). J’ai également utilisé un logiciel de « versioning » : SVN. Il m’a notamment permis de partager
avec des collaborateurs Lillois et Strasbourgeois.
La méthode de gestion de projet utilisée est décrite dans la partie suivante.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 11/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

3. PRESENTATION D U PROJET

Tout d’abord, il faut savoir qu’il est rare que Sopra Group emploie les stagiaires issus de licence.
Cette année, exceptionnellement, un besoin interne, nécessite l’intervention d’un collaborateur. Cependant,
le projet ne justifie pas le fait d’y consacrer un collaborateur en inter-chantier, c’est pour cela que Sopra
Group a fait appel à moi.
Afin de vous présenter le projet, nous allons tout d’abord aborder le point des besoins, puis des
objectifs, celui des contraintes. Vient alors l’organisation du projet, les technologies utilisées, et les
différents acteurs.

3.1. L e s b eso in s

Actuellement, toutes les activités de l’agence sont stockées dans des fichiers Word et Excel
difficiles à partager, à maintenir et peu pratiques.
L’activité de l’agence est composée de plusieurs domaines :
Activité commerciale
RH
Suivi qualité
Gestions des candidats
Gestion des collaborateurs
Gestion des clients

L’application doit se présenter comme un portail permettant à n’importe quel employé de


SOPRA, d’accéder à ses informations personnelles, aux missions qu’il a pu effectuer et aux
compétences qu’il a acquises. Le portail doit bien sûr permettre de faire évoluer (modification /
ajout / suppression) ces paramètres. A partir de là, différents rôles se dessinent avec des droits
spécifiques : collaborateur, commercial, administratif, recruteur et administrateur. Il est important de
noter qu’une personne peut couvrir plusieurs rôles.
Il faut bien intégrer toutes les possibilités par rôle, la suppression n’étant en fait qu’une désactivation. Il
faut pouvoir avoir une trace de la dernière modification quand à la date et à l’utilisateur.
Le MPD de la base de données permet de bien comprendre les liens entre collaborateurs, référentiels,
clients, missions et agence.
Une des finalités à terme est la génération de profils de collaborateurs à partir de l’application.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 12/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Un besoin qui est venu s’ajouter au cours du stage est la gestion d’un tableau de disponibilité,
permettant aux commerciaux et acteurs des comités d’affectations des collaborateurs, de gérer au
mieux les intermissions et les affectations des collaborateurs aux missions. Un export MS Excel de ce
tableau est également un besoin.
En effet, après discussion avec Mr. Patrick Meyer et Mme. Pascale Lucas, nous nous sommes rendu
compte que sans réel chiffre d’affaire généré par l’application, elle ne serait pas maintenue. Ce dernier
besoin permet donc l’assurance d’une maintenant des profils des collaborateurs par eux-mêmes ainsi
que par leurs managers/relais puisqu’il se situe au cœur de métier d’une SSII.

3 .2 . L e s obje ct if s

Les objectifs du projet étaient divisés en deux types d’objectifs :


Les objectifs de l’entreprise :
Application fonctionnelle et possédant un minimum de bogues
Application possédant la charte graphique Sopra Group
Application performante et disponible
Rédaction de spécifications complètes

Mes objectifs :
Enrichir ma formation
Capitaliser de nouvelles technologies
Renforcer mes capacités d’analyse fonctionnelle
Avoir un premier vrai contact projet, avec le formalisme et la rigueur que cela
demande Comprendre le fonctionnement d’une SSII

Les objectifs des deux parties sont atteins à l’issus du stage.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 13/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

3.3. L e s co n t r a in t e s

A l’initialisation du projet, il existait certaines contraintes qui pouvaient nuire au bon avancement du
projet. Pour les contourner, il m’a été demandé une certaine autonomie. Ces contraintes étaient
principalement :
La disponibilité des principaux acteurs, en mission en dehors du site de Metz. Une demi-journée
hebdomadaire pour faire le point avec Mr Frossini étaient prévu. Les coordonnées des autres
contacts m’ont été transmises.
Certaines lacunes dans les technologies employées : JSP & XML étaient à
assimiler. Une modélisation UML et Merise était à effectuer.
Le choix des technologies n’était pas libre, et le schéma de la base de données était déjà réalisé.

3.4. L ’o rg a n is a t i o n d u p rojet

Le choix du déroulement du stage a été simple, on me proposait soit un déroulement en « mode


stage », c'est-à-dire sans échéances strictes, plus laxiste, avec moins de rigueur professionnelle et
de structuration attendue, soit un déroulement en « mode projet », c'est-à-dire un stage avec une rigueur et
une structuration définie, un découpage des tâches, des échéances moins évidentes. Il m’a
également été spécifié que les stages de master deuxième année étaient réalisés en « mode projet ».
C’est pour cette raison que j’ai choisi le « mode projet », d’autant plus que mon stage de DUT avait été
réalisé en « mode stage » et que cela n’avait pas été très enrichissant de mon avis personnel.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 14/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Il m’a alors été présenté 3 méthodes de conception :


La méthodologie « Cycle en V »

La méthodologie projet « agile » : « extreme programming »


C’est une méthode pragmatique, c'est-à-dire « ne produire que les documents dont on a besoin », les
MCD, diagrammes user-cases, diagrammes d’activité. Il peut intervenir des phases d’itération.

On réalise d’abord un premier noyau (PoC), on s’assure qu’il fonctionne et que les liens entre les
différents modules fonctionnent, puis on réalise un prototype qui contient quelques fonctionnalités du
projet futur.
Une fois ce prototype validé et fonctionnel, on étoffe le prototype jusqu'à ce qu’il représente
l’application réalisée et on procède à son intégration.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 15/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Méthode de maquettage et de prototypage :

C’est une méthode prémisse de la conception. Elle consiste à réaliser des successions d’écran et à les
présenter au fur et à mesure, puis les faire valider.

La méthode choisie en concertation est la méthode projet agile, très proche de ce qu’il se fait
aujourd’hui. Le projet aura une structure particulière :

Phase réalisation prototype Réalisation de l’application


« Cycle en V » « Cycle en V » Bilan

analyse analyse compte rendu


développement développement soutenance
tests tests
recette recette

3.5. T e c h n o l o g i e s e t m é t h o d e s e m p l o y é e s

Les solutions techniques retenues sont :


Server JBOSS version 4.2.2.GA : serveur d’application
Framework Seam : jboss-seam-2.0.1.GA : Framework JSF
Driver JDBC version 5.1.6 de mysql_connector-java : connexion base de données
Ant : apache-ant-1.7.0 : déploiement
Base de données MySQL, WampServer
Eclipse 3.3.0
JSF : Java server faces (XML, xHTML, JAVA 5.0, RichFaces, EJB3.0, …)
Hibernate : Persistance des données
HQL (Hibernate query language) : langage de requêtes pour la BDD
Phase réalisation prototype

« Cycle en V » Réalisation de l’application

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 16/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

NavigateurWeb ServeurJBoss4.2.2.GA BasededonnéesMySQL

Architecture3-tiersutilisée

3.6. P la n n in g p ré vision n e l

Un planning prévisionnel a été établi en initialisation de projet. Nous avons essayé de s’y
conformer le maximum qu’il était possible mais nous avons dut le remanier pour pallier aux
disponibilités des intervenant, s’adapter aux nouveaux besoin intervenus en cours de développement,
s’arranger par rapports aux périodes de vacances des intervenants, …

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 17/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

3.7. L’équipe d u projet M A G I C C A

Chef de projet :

Philippe Frossini

Metz – chez le client

Architecte :

Patrick Meyer

Chef de projet :

Yannick Stachnik

Strasbourg

Développeur : Développeur :
Développeur :
Romain Saracéno Thomas Hertenstein
Paul Clément

Initialisation du projet – chez le client Metz

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 18/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

4. ANALYSE ET RESOLUTION D U PROBLEME

Les technologies employées pour ce projet étant pratiquement toutes nouvelles pour moi, il a fallut
procéder par étapes avant de me lancer pleinement dans la réalisation.
Les différentes étapes étaient :
l’étude des documents et de la base déjà produits
l’apprentissage et la mise à niveau dans les technologies
l’analyse et la définition d’un prototype
la réalisation du prototype
l’analyse et la définition d’un prototype à paramètre étendu
la réalisation du prototype avec paramètre étendu
mise en place de tests unitaires
le recettage

4.1. P r e m i è r e é t a p e : é t u d e d e s d o c u m e n t s e t d e la b a s e e xista n t s

A mon arrivée, le projet était déjà entamé. Deux collaborateurs avaient déjà dégrossi l’analyse avec
la création d’un premier MCD, sous format PowerPoint, ainsi qu’avec la création de la base
correspondante sous MySQL. Ils avaient également généré le dictionnaire de données correspondant et
crée une TODO List.
J’ai donc étudié le MCD, nous en avons discuté avec Mr. Frossini et cela m’a permit d’avoir un premier
solide visu sur l’organisation d’une SSII.
De plus, les deux collaborateurs avaient commencé à créer l’architecture du projet sous Eclipse 3.3.0, ce
qui m’a été d’une très grande aide, car je ne savais pas du tout comment faire cela. Ils ont utilisé le
générateur de SEAM : seam-gen. Ils avaient également configuré Ant pour le déploiement et automatiser
les « builds », et commencé à se faire la main sur le Framework Seam via la redéfinition d’un système
d’identification, pourtant très simplifié et automatisé par SEAM.
Quelques documents Excel m’ont été fournis. Le but de l’application étant de les remplacer totalement,
il fallait que j’étudie précisément leur utilité, la façon dont ils étaient remplis, par qui.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 19/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

4.2. L ’a p p r e n t i s sa g e et la m i s e à n i ve a u d a n s le s t e ch n o l o g i e s

Les deux premières semaines furent donc consacrées à la mise a niveau technique, la lecture de
tutoriels (la plupart en anglais), la compréhension des notions de persistance (Hibernate), de « Bean »,
de couche métier, service, de modèle, de la façon dont est implémenté le MVC sous Seam, des
annotations Java 5.0, de la compréhension des librairies graphique utilisées (Facelets, RichFaces), de
l’utilisation d’une librairie pour faire de l’Ajax (Ajax4JSF), des « expression language » (E.L.).
Autrement dit, ces deux premières semaines furent très dense en informations.
Je me suis fait la main sur un premier module SCRUD (Search, Create, Read, Update, Delete),
qui permettait donc de chercher des données dans la base de données, d’en insérer, modifier,
supprimer, et bien entendu, lire.

4 .3 . A n a l y s e e t déf in it ion d ’ u n p r o t o t yp e

Nous avons décidé que le prototype à périmètre réduit serait centré autour du collaborateur.
Cela représente bien Sopra Group qui est une entreprise qui place le collaborateur au centre de son
activité.
Un collaborateur possède un C.V. certifié Sopra Group, sur lequel figurent :
Ses informations générales :
Prénom, Nom
Adresse électronique professionnelle, téléphone professionnel
Site et agence d’appartenance
Nombres d’années d’expérience pré-Sopra
Date d’embauche
Les écoles qu’il a fréquentées
Son parcours :
Les filières suivies par le passé ou actuellement
La filière que le collaborateur souhaiterait
suivre
Ses compétences métier :
Gestion bancaire
Gestion de production
Gestion de stocks

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 20/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Comptabilité
Etc.
Ses compétences fonctionnelles :
Industrie
Grande distribution
Services
Etc.
Ses compétences techniques :
J2EE, Java 5.0
Technologies .NET
Mainframes
Etc.
Ses formations (non développé durant le stage, faute de temps)
Ses missions (Client, Mission, Dates)

Il fallait également qu’une technologie réponde à certains critères. En effet une technologie devait être
rattaché à :
Une catégorie de technologie :
Langage de programmation
ERP (enterprise ressource planning)
Progiciel
Système d’exploitation
Etc.
Un éditeur ou une communauté
Une ou plusieurs offres (Sopra Group classes ses projets services et conseil par offre) :
AXAPTA
BI (business intelligence)
OUTSOURCING X-
NET

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 21/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Etc.
Une version
Chaque offre possède un responsable par agence. Les responsables d’offre doivent pouvoir administrer
les référentiels d’offres, d’éditeurs de technologies, de catégorise de technologies et de technologies
tout court.

4 .4 . L a ré a lisa t io n d u p r o t o t y p e à p a r a m è t r e s re st re int s

La réalisation du prototype à paramètres restreint s’est fait par étapes.


La première était de réaliser un module SCRUD (Search, Create, Read, Update, Delete) pour chaque
référentiel (filière, métier, technique, fonctionnel). Les captures d’écrans sont données dans la
cinquième partie de ce rapport.
De cette façon, la quasi-totalité des informations de la base sont administrable directement via
l’application. Par exemple, dans son profil, le collaborateur peut s’ajouter des compétences métiers. Il
choisit sa compétence métier parmi la liste des compétences métiers enregistrées (une liste déroulante),
un niveau (Initié, Formé non pratiquant, débutant < 2 ans, Confirmé entre 2 et 5 ans, Expert > 5 ans)
et valide. La liste déroulante est directement générée à partir de la base de données, administrable via
son module SCRUD associé.
La deuxième étape était de réaliser une interface de type profil, avec des onglets pour les compétences,
et permettant d’ajouter/modifier/supprimer pour un collaborateur des compétences à son profil.
La troisième étape était de réaliser une interface grâce à laquelle les personnes habilitées à modifier le
profil d’un collaborateur aient accès aux bonnes données.
Il fallait également que les données soient conformes à leur représentation en base de données. Pour cela,
il fallut utiliser des « validators » et des « convertors » propres aux JSF, ou bien les redéfinir nous-mêmes
dans la couche métier de l’application. Ainsi, les données sont bloquantes si les champs sont mal
renseignés.
Durant toute la réalisation, une réflexion (non modélisée) sur les cas d’utilisations tendais à s’adapter un
maximum à l’utilisateur, le plus naïf puisse-il être. Il faut le guider, limiter les informations disponible
aux minimum de façon à ce que la navigation soit la plus intuitive. Le Framework SEAM simplifie la
chose en délimitant chaque action par une « conversation ». Par exemple, une conversation c’est :
On clique sur un lien de menu amenant sur un
formulaire On remplit le formulaire
On valide

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 22/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

De plus, une des spécificités des JSF (et des JSP) c’est que la navigation est entièrement réalisée grâce
aux servlet. On ne peut donc jamais passer directement une adresse sur son navigateur pour accéder à
une page.
Un principe qu’il fallu que je respecte est celui de la non-suppression en base de données. Lorsqu’un
utilisateur non administrateur supprime une données, celle-ci est désactivée. En effet, un booléen indique
si l’enregistrement est actif dans chaque table de la base. De plus, on garde une référence de la dernière
action fait sur un enregistrement en sauvegardant le matricule du collaborateur ayant fait la
modification, et la date. Par souci de lisibilité, sur le MPD, l’association entre les tables et la table
Personne (en réalité Connection, mais simplifions) n’apparait pas.

4 .5 . L ’ a n a l y s e e t la définition d ’ u n p r o t o t yp e à p a r a m è t r e é t e n d u

Comme dit auparavant, nous nous sommes rendu compte, après discussion avec des collaborateurs
ayant un point de vue plus commercial de l’outil qu’il n’y avait pas de valeur ajoutée directe, et donc
que l’outil ne serait surement pas maintenu. Nous avons donc décidé d’ajouter au prototype un
module de gestion qui est central au cœur de métier de l’entreprise, la gestion des missions des
collaborateurs.
De façon simplifiée, un collaborateur effectue des missions d’assistance technique (AT), ou d’assistance
à maitrise d’ouvrage (AO). Les missions AT sont en interne chez le client, dans une équipe du client
avec un chef de projet du client. Les missions AO sont en interne chez le client dans une équipe Sopra
Group, avec un chef de projet Sopra Group. Dans une mission AO, appelée plus communément
mission au forfait, Sopra Group gère le projet de A à Z, et rentre dans une vraie problématique projet
avec les délais, les coups et les risque que cela comporte.
Entre deux missions, un collaborateur ne rapporte aucun chiffre d’affaire à Sopra Group. C’est même le
contraire puisque Sopra Group paie le salaire et les différentes charges du collaborateur. Ainsi, il est
primordial pour Sopra Group que les collaborateurs passent le moins possible de temps en intermission.
C’est la qu’interviennent les ingénieurs commerciaux. Ils sont chargés de démarcher les clients afin de
trouver des missions pour les collaborateurs. Ils répondent aux appels d’offre, montent des dossiers afin
d’assurer contrats et partenariat avec les clients. Les propositions commerciales sont donc faites par ces
mêmes ingénieurs commerciaux aux clients pour des profils particuliers.
C’est la qu’intervient la première partie du projet. Les C.V. auparavant sous format Excel, peu pratique
à manipuler, possédant des informations non capitalisées et mutualisées, sont gérés par l’outil.
Un commercial peut donc émettre des propositions commerciales pour un collaborateur. Si une
proposition commerciale abouti, on peut affecter une mission à un collaborateur et définir sa date de
disponibilité.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 23/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Un tableau, utilisé en réunion, liste les collaborateurs disponibles pour les prochains mois, avec leur date
de disponibilité, leur nom, éventuellement un commentaire, et leur taux de disponibilité pour la date
indiqué (un collaborateur peut être affecté à mi-temps sur une mission par exemple).
Un collaborateur possède également un état. En fin de mission, son état peut être :
En disponibilité « ferme », c'est-à-dire qu’il y’a de grande chance que la mission ne soit pas
renouvelée et que le manager soit à la recherche d’une mission pour le collaborateur
Manager à consulter
Forte probabilité de prolongation

Le tableau sépare les collaborateurs de part leur site d’appartenance (Metz-Strasbourg-Luxembourg).


Ce document, utilisé hebdomadairement en réunion justifie donc l’utilisation et la maintenance de
l’outil. Pour l’instant, ce fichier Excel, stocké sur un serveur, n’est pas chez tout le monde le même, car
dès qu’il est modifié par un commercial, la modification ne se répercute bien évidemment pas chez les
autres. Avec l’outil, c’est géré !
Une fonctionnalité demandée, reste l’export Excel du tableau à tout moment, pour figer la situation dans
le temps, permettre un archivage, et permettre de l’incorporer à d’autres documents Excel.

4.6. L a réalisat ion d u p r o t o t yp e a v e c p a r a m è t r e é t e n d u

Techniquement parlant, cette partie de la programmation fût sans aucun doute la plus
intéressante. En effet, à cette étape du développement, le Framework commençait à être plutôt bien
maitrisé dans la plupart des solutions qu’il apportait. J’ai remarqué que mon code des premiers
modules n’était pas optimisé, plutôt compliqué car il existait des solutions plus simples que j’ai
découvert par la suite. Malheureusement, le temps m’ayant fait défaut, je n’ai pas eut le temps de
revenir sur le code produit en début de stage. Comme m’a dit un collaborateur, « on n’est jamais content
de son code ».
C’est également dans ce module que j’ai été le plus assisté, notamment au niveau de la conception des
modèles de données, du maquettage, de la réflexion sur les fonctionnalités.
Par exemple, nous avions dans un premier temps décidé de gérer les dates d’un point de vue applicatif. Si
la date de fin de mission d’un collaborateur était le jour n° X, sa date de disponibilité serait le jour n°
X+1, sauf si le jour X est un week-end. Nous nous sommes dans un deuxième temps rendu compte qu’il
fallait gérer les jours fériés, et puis aussi les congés et RTT des collaborateurs. Bref, après en avoir discuté
avec les ingénieurs commerciaux et en interne dans l’équipe, nous avons adopté la solution de gérer la
date de disponibilité du coté humain, pour permettre une certaine souplesse.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 24/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Accompagné de Mr. Yannick Stachnick, nous avons, par téléphone, monté une première
maquette. L’aspect du tableau et des différents écrans devait se rapprocher au maximum de l’existant
afin de faciliter son utilisation par les collaborateurs concernés. Une fois la maquette validée, la
programmation du tableau fut une étape compliquée niveau technique. Il fallut tout d’abord trouver le
modèle d’une ligne du tableau. J’ai opté de représenter chaque ligne du tableau par un objet de type
Tab_DispoRow ayant pour attributs
Un site (par exemple Metz)
Six listes de type Personne (List<Personne>) représentant chacune la liste des personne du site
concerné dont la date de disponibilité tombe un mois donné. Les six listes représentent les 6
prochains mois.

Il résulte donc un tableau de liste qui doivent générer des liens dynamiques et être rafraichies dès qu’il
y’a une modification.
Un composant de la librairie RichFaces m’a été énormément utile, le tag dataTable.

La deuxième étape de la réalisation est de faire une maquette d’une fiche collaborateur, accessible lors
d’un clic sur un collaborateur présent dans le tableau. Après de nombreuses retouches, la maquette
validée, la réalisation se fait, avec une grosse proportion d’Ajax, afin de rendre la manipulation la
plus simple et agréable possible.
La dernière étape était de gérer la création de clients, de missions et de faire des propositions pour les
collaborateurs. Pas de grosse difficultés la dedans.

4.7. M i s e e n p l a c e d e t e st s u n it a ire s

Afin de tester les différents modules de l’application, des tests unitaires ont été fait après
le développement de chaque module. Etant seul pour la réalisation, les tests ont été réalisés et
vérifiés seulement par moi-même (malheureusement). De plus, en fin de réalisation, des tests ont été
fait sur une base de développement, et une base de production a été conçue.
Du fait que j’étais seul, je suis persuadé qu’il reste un certain nombre de bugs à éradiquer mais j’espère
ce nombre très limité, ce qui prouverait une certaine rigueur dans mes tests. J’ai essayé de me mettre
dans la peau de l’utilisateur le plus naïf possible, cliquant n’ importe où, n’ayant aucune logique dans la
suite de ses actions.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 25/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

4.8. R e c e t t a g e

Le recettage n’a pas pu être effectué, du fait que mon stage finissant début août tombait en même
temps que les vacances de mon tuteur. J’indique donc qu’il aurait été au programme de faire une étape
de recettage si le planning l’avait permit.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 26/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

5. PROGRAMMES REALISES

Dans cette partie, je vais exposer quelques captures d’écrans qui vont permettre de comprendre
le « look and feel » de l’application.

Ecran de connexion - Echec

Voici l’écran de connexion. Le contrôle habituel des champs et fait. Si les identifiants sont
correct, l’utilisateur est redirigé vers la page d’accueil de l’application. Dans le cas contraire, un message
d’erreur est affiché et il faut saisir les identifiants de nouveau.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 27/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Page d’accueil de l’application

Cette page est affichée en cas de succès de connexion. Cet écran respecte la charte Sopra Group. Le
menu sur la gauche change selon les droits de l’utilisateur. Dans notre cas, l’utilisateur connecté est un
simple collaborateur. Il a accès uniquement à l’option de déconnexion, à l’affichage de l’accueil, et à
l’accès à son profil.

L’utilisateur peut également changer son mot de passe via le lien en haut à droite.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 28/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Menu directeur d’agence Menu administrateur Menu responsable d’offre

Voici par exemple les menus pour les rôles de directeur d’agence, d’administrateur de l’application et
de responsable d’offre.

Nous allons découvrir à quoi mènent ces différents menus et comment sont attribués les droits par la suite.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 29/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

« Mon Profil »

Ce module permet à un collaborateur d’éditer son profil. Ce profil permettra de générer directement le
C.V. du collaborateur sous différents formats, comme le .doc ou le .pdf (développement prévu en 2008).
L’utilisateur doit renseigner différents informations comme son nom, prénom, adresse
électronique, téléphone, les différentes écoles qu’il a fréquenté, son agence de rattachement, son site de
rattachement, les années d’expérience avant Sopra Group, sa date d’embauche, son manager et son relai
agence.

On remarque qu’il y’a d’autres onglets qui permettent d’ajouter des compétences métier, fonctionnelles,
techniques, de choisir sa filière souhaitée, de renseigner ses filières précédentes, de consulter ses rôles
au sein de l’application, ses formations et ses missions.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 30/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Quelques captures des onglets :

« Filières »

Ajout d’une filière

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 31/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

« Missions »
Bien entendu, toutes les technologies, rôles, filières, en gros tous les référentiels doivent être modifiable
via l’application et donc via les menus « Mes référentiels » et « Gestion des référentiels ».
Par exemple, pour le référentiel technologique :

Liste des technologies

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 32/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Ajout d’une technologie

Edition d’une technologie

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 33/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

L’écran de gestion des droits est du style :

Attribution des droits

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 34/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Un utilisateur qui est soit manager, soit relai, soit directeur d’agence à accès aux profils des
collaborateurs qu’il gère via le menu « Mes collaborateurs » :

« Mes Collaborateurs »

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 35/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

« Mon Collaborateur »

Un peu à la manière du profil, l’utilisateur peut modifier les données du collaborateur pour que son
profil soit le plus conforme possible.
Il possède quelques actions de plus comme par exemple définir ses missions :

« Mission »

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 36/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Et enfin, quelques captures d’écrans du module de gestion de planning et d’attribution des missions :

Tableau des disponibilités

En colonne : les mois, en ligne : les sites. Le numéro est la date de disponibilité dans le mois, le nom de
la personne est un lien qui dirige vers la fiche du collaborateur (écran suivant) et la case de couleur signifie
:
DF : Dispo. Ferme. Collaborateur à placer d’urgence.
MAC : Manager à consulter. A placer rapidement.
FPP : Forte Probabilité de Prolongation. Pas de grand risque.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 37/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Fiche collaborateur
Apres un clic sur un nom dans le tableau, on atterri sur cette fiche, qui récapitule les informations sur le
collaborateur et qui permet de modifier son statut et de suivre les propositions commerciale le concernant.

Nouvelle proposition commerciale

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 38/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Affecter une proposition commerciale

Export Excel du tableau des disponibilités

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 39/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

6. B I L A N

6.1. B ilan Te c h n iq u e

Tout d’abord, ce stage m’a entièrement formé sur les technologies J2EE. A l’université ne sont
enseignées que les bases de Java. La formation a été autodidacte du fait que les différents
acteurs techniques n’avaient pas de temps à me consacrer, mais répondaient à mes courriels.
J’ai également pu acquérir des notions importantes comme la persistance des données par exemple, et
eu l’occasion, pour la première fois, d’utiliser un Framework et toutes les fonctionnalités qu’il propose.
De plus, la nécessité d’un serveur pour le développement d’une application était également nouveau pour
moi.
De part mes conversations avec les collaborateurs de Sopra Group, j’ai pu remarquer que les profils
J2EE sont énormément appréciés de nos jours, et force est de constater que ce domaine me
plait, la programmation objet était intéressante et agréable, la puissance de java et le mélange des
technologies donne un vrai sens à la conception et à la réalisation. Il est clair que l’enseignement des
technologies seules à l’université limite énormément la programmation. Par exemple, nous n’avions
jamais utilisé de librairie dans aucun projet, lors de mon stage, j’en utilise pas moins d’une quinzaine pour
le projet !
En bref, n’étant pas un mordu de programmation, la thématique d’ « objet » et les notions qu’elle sous-
entend me motivent cependant.
Je trouve dommage que lors de notre formation ne nous soient pas enseignés les technologies
.NET/J2EE de façon professionnelle (il est certain qu’il faut débuter par de la théorie, mais ce que j’ai
fait lors de mon parcours scolaire est loin du professionnel).
Un point positif de notre formation est l’orientation « Base de données ». Je n’ai eu aucun souci avec la
base de données, et je me suis même senti limité par MySQL et son « phpmyadmin ». Nous avions
également abordé l’Ajax de la façon basique. L’utiliser pour mon projet, avec la facilité apportée par
JSF a été un jeu d’enfant.
Un manque ressenti se situe au niveau de la modélisation. UML n’est enseigné qu’en Master 1, j’ai du
me servir de mes bases de DUT. De plus, la démarche intégratrice étant inconnue de Sopra Group, j’ai
du me tourner vers une modélisation Merise plus classique (MCD & MPD).

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 40/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

6.2. Bilan h u m a i n

Il est clair qu’avant mon stage, je ne connaissais absolument pas le monde des SSII. Les sociétés
de service étant la principale source de recrutement des jeunes ingénieurs en informatique, je trouve
dommage que ca ne soit pas plus abordé lors de notre formation. Expliquer comment fonctionne
une SSII en quelques heures nous préparerais bien mieux à mon humble avis.
J’ai donc du me plonger dans le fonctionnement d’une SSII, le sujet de mon stage faisant parti du cœur
de métier des sociétés de service. J’ai également eu la chance de discuter avec d’autre collaborateurs, soit
en les côtoyant à l’agence lors de leurs inter-contrats, soit lors de la pause déjeuné (pour les
collaborateurs en mission chez Cora Informatique qui mangeaient à la cafétéria du Cora-Technopole, et
qui m’accueillaient gentiment à leur table).
J’ai pu suivre la vie d’une SSII de l’intérieur, assisté au rythme des réunions, au travail de fond
des commerciaux pour proposer des missions aux collaborateurs, au travail de recrutement.
Mes connaissances se sont également élargies sur les droits du forfait cadres (droit qui devrait être
enseigné en plus du droit d’un employé par rapport à employeur, et en plus du droit de
l’informatique), sur le fonctionnement d’une équipe projet, sur les possibilités d’évolution au sein d’une
SSII tel Sopra Group.
Un point positif est que la formation MIAGE possède une bonne réputation de ce que j’ai pu en
discuter, qu’elle appuie fortement sur la communication et que cela m’a énormément aidé car je pense et
j’espère que personne n’a à se plaindre de la communication dont j’ai fait preuve lors de mon stage.
Pour finir, n’étant qu’en licence, j’espère trouver une formation plus orientée vers le monde
professionnel lors de mes deux années de master.

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 41/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008
Bibliographie

Livres (version PDF):


“Seam - Contextual Components A Framework for Enterprise Java”, 270 pages,
http://docs.jboss.com/seam/2.0 .1.GA/reference/en/html/index.html
Jim Farley, « Practical, JBoss Seam Projects », Apress, année 2007, 240 pages
Joseph Faisal Nusairat, « Beginning JBoss Seam, From novice to Professional », Apress,
année 2007, 751 pages
Red Hat, « RichFaces Developer Guide », 2007, 419 pages

Web sites :
Sopra Group,
http://www.sopragroup.com/
JBoss Seam Framework demo,
http://demo.flamingo.ex adel.com/booking/home.seam
API JSF,
http://java.sun.com/javaee/javaserverfaces/1.2 /docs/api/index.html
Hibernate EntityManager,
http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/index.html
API RichFaces & Ajax4JSF,
http://www .jboss.org/file-
access/default/members/jbossrichfa ces/freezone/docs/tlddoc/index.html
Demo RichFaces Components (éléments graphiques) ,
http://livedemo.exadel.com/richfaces-demo/richfaces/dropDownMenu.jsf
Developpez.net, Forum & Cours,
http://www.deve loppez.net/
JExcel librairie pour l’export Excel sous SEAM,
http://www.seamframework.org/Community/ExcelForSeamPreview
RichFaces developer guide,
http://www .jboss.org/file-
access/default/members/jbossrichfaces/f reezone/docs/devguide/en/html/index.html
Jean-Michel DOUDOUX, Cours complet FR JSF,
http://www.jmdoudoux.f r/java/dej/chap053.htm

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 42/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008
Annexes

Annexe n°1 : Environnement de développement Eclipse 3.3.0

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 43/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Annexe n°2 : MySQL via phpMyAdmin

Annexe n°3 : L’outil collaboratif SVN

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 44/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Annexe n°4 : Le MPD de la base de données

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 45/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Annexe n°5 : Une remontée d’erreur par le server JBoss 4.2.GA

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 46/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>agence</title>
<link
href="#{facesContext.externalContext.request.contextPath}/stylesheet/theme.css"
rel="stylesheet" type="text/css" />
</head>

<body>

<ui:include src="menu.xhtml">
<ui:param name="projectName" value="Agence"/>
</ui:include>
<div class="panelMenu">
<h:graphicImage styleClass="icone" alt="Sopra Group"
url="/img/imgCroisillon.gif"></h:graphicImage>
<ui:include src="panelMenu.xhtml"/>

</div>
<div class="body">
<a4j:outputPanel id="body">
<ui:insert name="body"/>
</a4j:outputPanel>
</div>

<div class="footer">
<h:outputText value="© Sopra Group, 2001-2008" styleClass="footer-left"/>
<h:graphicImage styleClass="icone, footer-right" alt="Sopra Group"
url="/img/imgLogoSopraGroup.gif"></h:graphicImage>
</div>

</body>
</html>

Annexe n°6 : Code de la page de template, utilisation des Facelets

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 47/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Annexe n°7 : un module entier, le référentiel Métier « Ajout »

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 48/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="../../../layout/template.xhtml">

<ui:define name="body">
<rich:panel>
<f:facet name="header">R&#233;f&#233;rentiel Metier - Ajouter</f:facet>
<div class="subbody">
<rich:spacer height="10px" />
<h:form id="add_metier">
<div class="bandeau"><h:outputText value="Ajout d'une
comp&#233;tence m&#233;tier : " /></div>
<h:panelGrid id="panelAddRMetier" columns="4" columnClasses="name,
value, value, value">
<h:outputLabel for="libelle_metier" value="Libell&#233;"
/><h:outputLabel value=":" />
<h:inputText id="libelle_metier" value="#{rMetierAA.lib}"
required="true" size="40" >
<f:validateLength maximum="30"/>
</h:inputText>
<h:message for="libelle_metier" styleClass="message" />
</h:panelGrid>
<div class="bandeau"><h:outputText value=" " /></div>
<h:panelGrid id="panelButtonRNiveau" columns="3">
<h:commandButton value="Ajouter"
action="#{rMetierAA.rMetierAdd}" />
<h:outputLabel value=" " />
<h:commandButton value="Annuler"
action="#{menunavig.goSearchRMetier}" immediate="true"/>
</h:panelGrid>
</h:form>
</div>
</rich:panel>
</ui:define>
</ui:composition>

Code de la vue

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 49/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

package com.mydomain.agence.referentiels;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.validator.NotNull;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import com.mydomain.agence.Constants;

@Entity
@Name("rmetier")
@Scope(ScopeType.EVENT)
@Table(name="r_metier")
public class Metier implements Serializable{
private static final long serialVersionUID = 1961639726393704338L;
private int cd_metier;
private String lib_metier;
private String actif;
private String userMaj;
private Timestamp dateMaj;

@Id @NotNull @GeneratedValue


@Column(name="cd_metier")
public int getCd_metier() {
return cd_metier;
}
public void setCd_metier(int cd_metier) {
this.cd_metier = cd_metier;
}

@NotNull
@Column(name="lib_metier")
public String getLib_metier() {
return lib_metier;
}
public void setLib_metier(String lib_metier) {
this.lib_metier = lib_metier;
}

@NotNull
@Column(name="actif")
public boolean isActif()
{
return this.actif.equals(Constants.STATUT_ACTIF);
}
public void setActif(boolean actif) {
if (actif)

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 50/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

{
this.actif = Constants.STATUT_ACTIF;
}
else
{
this.actif = Constants.STATUT_INACTIF;
}
}

@NotNull
@Column(name="user_maj")
public String getUserMaj() {
return userMaj;
}
public void setUserMaj(String userMaj) {
this.userMaj = userMaj;
}

@NotNull
@Column(name="date_maj")
public Timestamp getDateMaj() {
return dateMaj;
}
public void setDateMaj(Timestamp dateMaj) {
this.dateMaj = dateMaj;
}
}

Code de la classer Metier

package com.mydomain.agence.referentielsAction.Metier;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.GregorianCalendar;

import javax.ejb.Remove;
import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.security.Restrict;

import com.mydomain.agence.individus.Connection;
import com.mydomain.agence.interfaces.RMetierAdding;
import com.mydomain.agence.referentiels.Metier;
import com.sun.xml.internal.ws.developer.Stateful;

@Restrict("#{identity.loggedIn}")

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 51/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

@Stateful
@Name("rMetierAA")
@Scope(ScopeType.SESSION)
public class RMetierAddingAction implements RMetierAdding, Serializable {
private static final long serialVersionUID = 8231940036588997725L;
@In("entityManager") private EntityManager em;
@In(value="#{connect}") private Connection user;
@In(value="#{rMetierSA}") private RMetierSearchingAction rmsa;
private Metier addedMetier;
private String lib;

@Remove @Destroy
public void destroy() {
}

public String rMetierAdd() {


addedMetier=new Metier();
addedMetier.setLib_metier(lib);
addedMetier.setActif(true);
GregorianCalendar cal=new GregorianCalendar();
addedMetier.setUserMaj(user.getLogin());
addedMetier.setDateMaj(new Timestamp(cal.getTimeInMillis()));
em.persist(addedMetier);
addedMetier=null;
this.lib=null;
rmsa.refresh();
return "/referentiels/generaux/metier/search_metier.xhtml";
}

public String getLib() {


return lib;
}

public void setLib(String lib) {


this.lib = lib;
}

public Metier getAddedMetier() {


return addedMetier;
}

public void setAddedMetier(Metier addedMetier) {


this.addedMetier = addedMetier;
}
}

Bean correspondant à l’ajout

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 52/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Annexe n°8: Code de l’export Excel


package com.mydomain.agence.tab_dispo;

import java.io.IOException;
import java.io.Serializable;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;

import jxl.*;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Orientation;
import jxl.format.VerticalAlignment;
import jxl.write.*;
import jxl.write.Number;
import jxl.write.biff.RowsExceededException;

import com.mydomain.agence.individus.Personne;
import com.mydomain.agence.rows.Tab_DispoRow;

@Name("EETD")
@Scope(ScopeType.SESSION)
public class ExtractExcelTD implements Serializable {
private static final long serialVersionUID = 8395966513132871975L;

@In(value="#{Tab_DispoMA.listeTDR}", required=false) private


List<Tab_DispoRow> ltdr;
@In(value="#{Tab_DispoMA.mois1}", required=false) private String mois1;
@In(value="#{Tab_DispoMA.mois2}", required=false) private String mois2;
@In(value="#{Tab_DispoMA.mois3}", required=false) private String mois3;
@In(value="#{Tab_DispoMA.mois4}", required=false) private String mois4;
@In(value="#{Tab_DispoMA.mois5}", required=false) private String mois5;
@In(value="#{Tab_DispoMA.mois6}", required=false) private String mois6;

private WritableWorkbook w;
private WritableSheet s;
private FacesContext context;

private int row, rowD, rowMax, rowDTypeDispo, max, col, colD;

public void goExtractExcel() {


try {
this.createFile();

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 53/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

this.writeTableau();
this.writeEnTete();
this.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}

public void createFile() throws IOException, RowsExceededException,


WriteException{
Calendar now=Calendar.getInstance();
String date=now.get(Calendar.DATE)+"-"+(now.get(Calendar.MONTH)+1)+"-
"+now.get(Calendar.YEAR);

context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)
context.getExternalContext().getResponse();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=tabDispo-
"+date+".xls");
w = Workbook.createWorkbook(response.getOutputStream());
s = w.createSheet("Tableau des disponibilites", 0);

public void close() throws IOException, WriteException{


w.write();
w.close();
context.responseComplete();
}

public void writeEnTete() throws WriteException{


// Apparence des mois
WritableFont fontMois=new WritableFont(WritableFont.TIMES, 12,
WritableFont.BOLD);
fontMois.setColour(jxl.format.Colour.WHITE);
WritableCellFormat fontMoisFormat = new WritableCellFormat (fontMois);
fontMoisFormat.setBackground(jxl.format.Colour.AUTOMATIC);
fontMoisFormat.setAlignment(Alignment.CENTRE);
fontMoisFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
fontMoisFormat.setBorder(Border.RIGHT, BorderLineStyle.THICK,
jxl.format.Colour.BLACK);

Label lmois1=new Label(3,0, this.mois1, fontMoisFormat);


Label lmois2=new Label(5,0, this.mois2, fontMoisFormat);
Label lmois3=new Label(7,0, this.mois3, fontMoisFormat);
Label lmois4=new Label(9,0, this.mois4, fontMoisFormat);
Label lmois5=new Label(11,0, this.mois5, fontMoisFormat);
Label lmois6=new Label(13,0, this.mois6, fontMoisFormat);
s.addCell(lmois1);
s.addCell(lmois2);
s.addCell(lmois3);
s.addCell(lmois4);
s.addCell(lmois5);
s.addCell(lmois6);

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 54/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

//dimension des colonnes de type "numero de jour"


WritableCellFormat colNoJourFormat=new WritableCellFormat();
colNoJourFormat.setAlignment(Alignment.CENTRE);
CellView colNoJour=new CellView();
colNoJour.setSize(256*3);
colNoJour.setFormat(colNoJourFormat);
s.setColumnView(2, colNoJour);
s.setColumnView(4, colNoJour);
s.setColumnView(6, colNoJour);
s.setColumnView(8, colNoJour);
s.setColumnView(10, colNoJour);
s.setColumnView(12, colNoJour);

//dimension des colonnes de type "nom de la personne"


WritableCellFormat colPersonneFormat=new WritableCellFormat();
colPersonneFormat.setAlignment(Alignment.CENTRE);
CellView colPersonne=new CellView();
colPersonne.setSize(256*18);
colPersonne.setFormat(colPersonneFormat);
s.setColumnView(3, colPersonne);
s.setColumnView(5, colPersonne);
s.setColumnView(7, colPersonne);
s.setColumnView(9, colPersonne);
s.setColumnView(11, colPersonne);
s.setColumnView(13, colPersonne);

}
public void writeTableau() throws RowsExceededException, WriteException{
//apparence de la colonne site
WritableFont fontAgence=new WritableFont(WritableFont.ARIAL, 12,
WritableFont.BOLD);
fontAgence.setColour(jxl.format.Colour.AUTOMATIC);
WritableCellFormat fontAgenceFormat = new WritableCellFormat (fontAgence);
fontAgenceFormat.setAlignment(Alignment.CENTRE);
fontAgenceFormat.setOrientation(Orientation.PLUS_90);
fontAgenceFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
fontAgenceFormat.setBackground(jxl.format.Colour.WHITE);
fontAgenceFormat.setBorder(Border.TOP, BorderLineStyle.MEDIUM,
jxl.format.Colour.AUTOMATIC);
fontAgenceFormat.setBorder(Border.RIGHT, BorderLineStyle.THIN,
jxl.format.Colour.AUTOMATIC);
s.setColumnView(1, 5);

//Type de dispo
WritableFont typeDispoCol=new WritableFont(WritableFont.ARIAL, 12,
WritableFont.BOLD);
typeDispoCol.setColour(jxl.format.Colour.WHITE);
WritableCellFormat typeDispoFormat = new WritableCellFormat
(typeDispoCol);
typeDispoFormat.setAlignment(Alignment.CENTRE);
typeDispoFormat.setOrientation(Orientation.PLUS_90);
typeDispoFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
typeDispoFormat.setBackground(jxl.format.Colour.AUTOMATIC);
s.setColumnView(0, 5);

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 55/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

//ligne de transition
WritableCellFormat ligneTransitionFormat = new WritableCellFormat ();
ligneTransitionFormat.setBackground(jxl.format.Colour.BLACK);
ligneTransitionFormat.setBorder(Border.RIGHT, BorderLineStyle.THICK,
jxl.format.Colour.BLACK);

//ligne de transition interTypeDispo


WritableCellFormat ligneTransitionFormat2 = new WritableCellFormat ();
ligneTransitionFormat2.setBackground(jxl.format.Colour.BLACK);
ligneTransitionFormat2.setBorder(Border.RIGHT, BorderLineStyle.THICK,
jxl.format.Colour.BLACK);

//une cellule de données noJour


WritableFont fontData=new WritableFont(WritableFont.TIMES, 8,
WritableFont.NO_BOLD);
WritableCellFormat colNoJourFormat=new WritableCellFormat(fontData);
colNoJourFormat.setBorder(Border.RIGHT, BorderLineStyle.DASHED,
jxl.format.Colour.BLACK);
colNoJourFormat.setAlignment(Alignment.CENTRE);

//une cellule de données personne


WritableCellFormat colPersonneFormat=new WritableCellFormat(fontData);
colPersonneFormat.setBorder(Border.RIGHT, BorderLineStyle.THICK,
jxl.format.Colour.BLACK);
colPersonneFormat.setAlignment(Alignment.CENTRE);
colPersonneFormat.setWrap(true);

//apparence de la colonne site


WritableFont fontAgence2=new WritableFont(WritableFont.ARIAL, 12,
WritableFont.BOLD);
fontAgence2.setColour(jxl.format.Colour.AUTOMATIC);
WritableCellFormat fontAgenceFormat2 = new WritableCellFormat
(fontAgence2);
fontAgenceFormat2.setAlignment(Alignment.CENTRE);
fontAgenceFormat2.setOrientation(Orientation.PLUS_90);
fontAgenceFormat2.setVerticalAlignment(VerticalAlignment.CENTRE);
fontAgenceFormat2.setBackground(jxl.format.Colour.PALE_BLUE);
fontAgenceFormat2.setBorder(Border.TOP, BorderLineStyle.MEDIUM,
jxl.format.Colour.AUTOMATIC);
fontAgenceFormat2.setBorder(Border.RIGHT, BorderLineStyle.THIN,
jxl.format.Colour.AUTOMATIC);

//une cellule de données noJour


WritableFont fontData2=new WritableFont(WritableFont.TIMES, 8,
WritableFont.NO_BOLD);
WritableCellFormat colNoJourFormat2=new WritableCellFormat(fontData2);
colNoJourFormat2.setBorder(Border.RIGHT, BorderLineStyle.DASHED,
jxl.format.Colour.BLACK);
colNoJourFormat2.setAlignment(Alignment.CENTRE);

colNoJourFormat2.setBackground(jxl.format.Colour.PALE_BLUE);
CellView colNoJour2=new CellView();
colNoJour2.setSize(256*3);
colNoJour2.setFormat(colNoJourFormat);

//une cellule de données personne

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 56/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

WritableCellFormat colPersonneFormat2=new WritableCellFormat(fontData2);


colPersonneFormat2.setBorder(Border.RIGHT, BorderLineStyle.THICK,
jxl.format.Colour.BLACK);
colPersonneFormat2.setAlignment(Alignment.CENTRE);
colPersonneFormat2.setBackground(jxl.format.Colour.PALE_BLUE);
colPersonneFormat2.setWrap(true);

//remplissage du tableau
this.row=2;
this.rowD=2;
this.rowMax=2;
this.col=1;
this.colD=1;

this.afficherSousTable("DF", "Disponibilité ferme", ligneTransitionFormat,


fontAgenceFormat, colNoJourFormat, colPersonneFormat, fontAgenceFormat2,
colNoJourFormat2, colPersonneFormat2, typeDispoFormat, ligneTransitionFormat2);
this.afficherSousTable("MAC", "Manager à consulter",
ligneTransitionFormat, fontAgenceFormat, colNoJourFormat, colPersonneFormat,
fontAgenceFormat2, colNoJourFormat2, colPersonneFormat2, typeDispoFormat,
ligneTransitionFormat2);
this.afficherSousTable("FPP", "Forte probabilité de prolongation",
ligneTransitionFormat, fontAgenceFormat, colNoJourFormat, colPersonneFormat,
fontAgenceFormat2, colNoJourFormat2, colPersonneFormat2, typeDispoFormat,
ligneTransitionFormat2);
}

/**
* Methode qui comble le tableau avec des cases vide
* @param colNoJourFormat WritableCellFormat : style associé à la colonne
NoJour
* @param colPersonneFormat WritableCellFormat : style associé à la colonne
Personne
* @throws RowsExceededException
* @throws WriteException
*/
public void comblerTableau(WritableCellFormat colNoJourFormat,
WritableCellFormat colPersonneFormat) throws RowsExceededException,
WriteException{
if(this.row-this.rowD != this.max){
for(int x=(this.row-this.rowD); x<this.max; x++){
Label l1=new Label(col, this.rowD+x, "", colNoJourFormat);
s.addCell(l1);
this.col++;
Label l2=new Label(this.col, this.rowD+x, "", colPersonneFormat);
s.addCell(l2);
this.col--;
}
}
}

/**
* Methode qui affiche une colonne pour un mois, et pour un site donné
* @param lp List<Personne> : liste de personne

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 57/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

* @param colNoJourFormat WritableCellFormat : style associé à la colonne


NoJour
* @param colPersonneFormat WritableCellFormat : style associé à la colonne
Personne
* @throws RowsExceededException
* @throws WriteException
*/
public void afficherColonne(List<Personne> lp, WritableCellFormat
colNoJourFormat, WritableCellFormat colPersonneFormat, boolean firstColumn) throws
RowsExceededException, WriteException{
Label collaborateur;

this.rowMax=this.row;
this.row=this.rowD;
this.col+=2;
Iterator<Personne> i= lp.listIterator();
Personne p;
while(i.hasNext()){
p=(Personne) i.next();
Calendar cal=Calendar.getInstance();
cal.setTime(p.getDate_dispo());
if(firstColumn){
Calendar nowCal=Calendar.getInstance();
if(nowCal.get(Calendar.MONTH)==0 && cal.get(Calendar.MONTH) > 0 &&
cal.get(Calendar.MONTH)<12 && cal.get(Calendar.YEAR)<nowCal.get(Calendar.YEAR)){
Label jour_dispo=new Label(this.col, this.row,
cal.get(Calendar.DATE)+"/"+(cal.get(Calendar.MONTH)+1), colNoJourFormat);
s.addCell(jour_dispo);
} else if(cal.get(Calendar.MONTH)<nowCal.get(Calendar.MONTH)){
Label jour_dispo=new Label(this.col, this.row,
cal.get(Calendar.DATE)+"/"+(cal.get(Calendar.MONTH)+1), colNoJourFormat);
s.addCell(jour_dispo);
} else {
Number jour_dispo=new Number(this.col, this.row,
cal.get(Calendar.DATE), colNoJourFormat);
s.addCell(jour_dispo);
}

} else {
Number jour_dispo=new Number(this.col, this.row,
cal.get(Calendar.DATE), colNoJourFormat);
s.addCell(jour_dispo);
}

this.col++;
String taux="";
if(p.getTaux_affectation()<100){
taux=p.getTaux_affectation()+"% - ";
}
if(p.getCommentaires()==null || p.getCommentaires().compareTo("")==0){
collaborateur=new Label(this.col, this.row, p.getPrenom()+"
"+p.getNom(), colPersonneFormat);
} else collaborateur=new Label(this.col, this.row, p.getPrenom()+"
"+p.getNom() +"\n("+taux+p.getCommentaires()+")", colPersonneFormat);

s.addCell(collaborateur);
col--;

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 58/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

this.row++;
if(this.row>this.rowMax) this.rowMax=this.row;
}

this.comblerTableau(colNoJourFormat, colPersonneFormat);
}

/**
* Methode qui renvoie une sous liste contenant juste les personne d'un type
de dispo.
* @param lp List<Personne> : liste de personne dans laquelle il faut chercher
* @param typeDispo String : Type de dispo à chercher dans la liste
* @return List<Personne> : sous liste contenant juste les personne d'un type
de dispo.
*/
public List<Personne> isolerPersonneTypeDispo(List<Personne> lp, String
typeDispo){
List<Personne> lret=new ArrayList<Personne>();

Iterator<Personne> i=lp.listIterator();
Personne p;
while(i.hasNext()){
p=(Personne) i.next();
if(p.getType_dispo().compareTo(typeDispo)==0) lret.add(p);
}

return lret;
}

/**
* Methode qui affiche chacune des sous table correspondant a un type de dispo
* @param type String : type de la dispo tel qu'il apparait dans l'objet
("DF", "MAC", "FPP")
* @param labelType String : Label de la premiere colonne
* @param ligneTransitionFormat
* @param fontAgenceFormat
* @param colNoJourFormat
* @param colPersonneFormat
* @param typeDispoFormat
* @param ligneTransitionFormat2
* @throws RowsExceededException
* @throws WriteException
*/
public void afficherSousTable(String type, String labelType,
WritableCellFormat ligneTransitionFormat,
WritableCellFormat fontAgenceFormat,
WritableCellFormat colNoJourFormat,
WritableCellFormat colPersonneFormat,
WritableCellFormat fontAgenceFormat2,
WritableCellFormat colNoJourFormat2,
WritableCellFormat colPersonneFormat2,
WritableCellFormat typeDispoFormat,
WritableCellFormat ligneTransitionFormat2) throws
RowsExceededException, WriteException{

Label site;
Label ligneTransition;

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 59/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

Label typedispo;
Iterator<Tab_DispoRow> i;
Tab_DispoRow tdr;

this.rowDTypeDispo=this.rowMax;
i=ltdr.listIterator();
int j=0;
while(i.hasNext()){
this.rowD=this.rowMax;
this.colD=this.col;
this.row=this.rowMax;
ligneTransition=new Label(1, (this.rowMax-1), "",
ligneTransitionFormat);
s.addCell(ligneTransition);
s.mergeCells(1, (this.rowMax-1), 13, (this.rowMax-1));
s.setRowView(this.rowMax-1, 100);

tdr=(Tab_DispoRow) i.next();
if(j%2==0){
site=new Label(this.col, this.row, tdr.getSite().getLib_site(),
fontAgenceFormat);
} else {
site=new Label(this.col, this.row, tdr.getSite().getLib_site(),
fontAgenceFormat2);
}

s.addCell(site);
this.col++;

List<Personne>
lp1=this.isolerPersonneTypeDispo(tdr.getListePersonne1(), type);
List<Personne>
lp2=this.isolerPersonneTypeDispo(tdr.getListePersonne2(), type);
List<Personne>
lp3=this.isolerPersonneTypeDispo(tdr.getListePersonne3(), type);
List<Personne>
lp4=this.isolerPersonneTypeDispo(tdr.getListePersonne4(), type);
List<Personne>
lp5=this.isolerPersonneTypeDispo(tdr.getListePersonne5(), type);
List<Personne>
lp6=this.isolerPersonneTypeDispo(tdr.getListePersonne6(), type);

//on recupere la taille max de liste pour ce site


int[] tabNbPersonnes=new int[6];
tabNbPersonnes[0]=lp1.size();
tabNbPersonnes[1]=lp2.size();
tabNbPersonnes[2]=lp3.size();
tabNbPersonnes[3]=lp4.size();
tabNbPersonnes[4]=lp5.size();
tabNbPersonnes[5]=lp6.size();
this.max=tabNbPersonnes[0];
for(int parcours1=1; parcours1<6; parcours1++){
if(tabNbPersonnes[parcours1] > this.max)
max=tabNbPersonnes[parcours1];
}
if(this.max <6) this.max=6;

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 60/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

if(j%2==0){
//premiere colonne
this.col=0;
this.afficherColonne(lp1, colNoJourFormat, colPersonneFormat,
true);
//deuxieme colonne
this.afficherColonne(lp2, colNoJourFormat, colPersonneFormat,
false);
//troisieme colonne
this.afficherColonne(lp3, colNoJourFormat, colPersonneFormat,
false);
//quatrieme colonne
this.afficherColonne(lp4, colNoJourFormat, colPersonneFormat,
false);
//cinquieme colonne
this.afficherColonne(lp5, colNoJourFormat, colPersonneFormat,
false);
//sixieme colonne
this.afficherColonne(lp6, colNoJourFormat, colPersonneFormat,
false);
} else {
//premiere colonne
this.col=0;
this.afficherColonne(lp1, colNoJourFormat2, colPersonneFormat2,
true);
//deuxieme colonne
this.afficherColonne(lp2, colNoJourFormat2, colPersonneFormat2,
false);
//troisieme colonne
this.afficherColonne(lp3, colNoJourFormat2, colPersonneFormat2,
false);
//quatrieme colonne
this.afficherColonne(lp4, colNoJourFormat2, colPersonneFormat2,
false);
//cinquieme colonne
this.afficherColonne(lp5, colNoJourFormat2, colPersonneFormat2,
false);
//sixieme colonne
this.afficherColonne(lp6, colNoJourFormat2, colPersonneFormat2,
false);
}

this.col=this.colD;
this.rowMax=this.rowD+this.max;
s.mergeCells(site.getColumn(), site.getRow(), this.col, (this.rowMax-
1));

this.rowMax++;
this.row++; j+
+;
}
typedispo=new Label(0, this.rowDTypeDispo-1, labelType, typeDispoFormat);
s.addCell(typedispo);
s.mergeCells(0, this.rowDTypeDispo-1, 0, this.rowMax-1);

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 61/62
Rapport de stage
ERP Agence - MAGICCA
Sopra Group Le 07/08/2008

ligneTransition=new Label(1, this.rowMax-1, "", ligneTransitionFormat2);


s.addCell(ligneTransition);
s.mergeCells(1, this.rowMax-1, 13, this.rowMax-1);

this.rowMax++;
}
}

© Sopra Group, 2008 / Version : 1.00 / Etat : Projet / Réf. : 20080804-110737-pCl


Page 62/62

Vous aimerez peut-être aussi