Rapport de stage
P r é f e c t u r e d e p o l i c e
D i r e c t i o n S A I
l e i n f o r m a t i q u e
NAZI Aberkane
Stage développeur web
BTS SIO me année
s
Du 28/11/2016 au 20/01/2017
1
Sommaire
Introduction ........................................................................................................................................... 2
Présentation du SAI ............................................................................................................................ 2
Organisation du SAI ........................................................................................................................ 2
Le Pôle informatique .......................................................................................................................... 2
Mes missions .......................................................................................................................................... 3
Etat de ma précédente application .................................................................................................... 3
Première mission : optimisation ......................................................................................................... 4
Problème principal ......................................................................................................................... 4
1
er
Solution mise en place............................................................................................................... 5
2eme solution mise en place .......................................................................................................... 5
Deuxième mission .............................................................................................................................. 6
Les tentatives ................................................................................................................................. 6
Solution .......................................................................................................................................... 7
Missions en parallèle .......................................................................................................................... 8
Pour l’application en ligne .............................................................................................................. 8
Création de répertoires ................................................................................................................ 10
Nouvelle extraction Excel ............................................................................................................. 11
Conclusion et remerciement ................................................................................................................ 12
Annexe 1 Organigramme ..................................................................................................................... 13
Annexe 2 : version final de l’application (FICHE IMMO) ....................................................................... 14
2
Introduction
Pour terminer ma deuxième année de BTS SIO, j’ai effectué une fois de plus mon stage à la
préfecture de police, au sein du pôle informatique du SAI (Service des Affaires Immobilières).
Présentation du SAI
Le service des affaires immobilières (SAI) met à disposition de la préfecture de police et de la brigade
des Sapeurs-pompiers de Paris des bâtiments adaptés à l’exercice de leurs missions. Le SAI met en
œuvre une stratégie immobilière, assure le montage et la réalisation d’opération d’investissement,
de travaux d’aménagement ainsi que l’optimisation et l’exploitation des bâtiments. Il réalise toutes
les opérations immobilières indispensables pour offrir un accueil convivial et sécurisé au public.
Organisation du SAI
(Voir Annexe 1 : organigramme)
Le SAI est organisé en quatre grands services :
Le Département Juridique Budgétaire (DJB) qui élabore une politique immobilière
d’ensemble et réunit les conditions de sa réalisation.
Le Département de Construction (DC) dirige, coordonne et pilote l’ensemble des
opérations de travaux neufs, de réhabilitation et d’aménagement.
Le Département d’Exploitation (DE) assure l’entretien, la maintenance des bâtiments, de
la logistique et la sécurité immobilières du patrimoine bâti de la Préfecture de police des
services de police sur l’ensemble de la région Ile-de-France.
Le Département Mission Ressources et Moyens (MRM) qui gère et optimise les moyens
de fonctionnement du service. Il travaille pour fournir aux différentes structures du
Service des Affaires Immobilières les moyens nécessaires à l’exercice de leurs missions.
Le Pôle informatique
Au sein du MRM se trouve l’équipe projet informatique (EPI). Cette équipe est en contact
permanent avec les utilisateurs du SAI, elle est chargée de les dépanner, assister et équiper en
informatique et téléphonie mobile. C’est une fois de plus dans cette équipe que j’ai effectué mon
stage. Depuis mon dernier passage, l’équipe est toujours même, c’est-à-dire 5 membres et un
apprenti (le même que précédemment) qui a continué son alternance dans le but d’acquérir une
maitrise.
3
Mes missions
Etat de ma précédente application
Dès mon arrivée on m’a présenté les
changements effectués sur l’application
que j’avais développée lors de mon dernier
stage. Depuis, plusieurs modifications ont
été effectuées par l’équipe sur demande de
la hiérarchie. Aujourd’hui l’application est
utilisée par tous les services y compris le
préfet secrétaire général. De ce fait
l’application est
passée de ceci :
A cela :
En effet, que deux sections ont été rajoutées, et l’ancienne version ne représente qu’une section
(FICHE IMMO)
4
Première mission : optimisation
La nouvelle version de l’application est fonctionnelle mais elle présente quelque dysfonctionnement.
L’application présente des problèmes de lenteur et ce pour chaque section. C’est pourquoi il nous a
été demandé de trouver des solutions adaptés afin y remédier.
Pour cela, j’ai travaillé en collaboration avec M.GRAUX(le développeur de l’équipe) et M.ALLOU
(l’apprenti de l’équipe).Nous avons commencé par parcourir le code, et avons décelé la cause du
problème.
Problème principal
Le principal problème est le lancement des requêtes : par exemple pour la section « fiche immo »
toutes les requêtes sont exécutées au chargement de la page.
Dans cette page : trois
requêtes sont exécutées
pour remplir les listes
déroulantes dans les
filtres.
Et au moment de la recherche on est redirigé sur une autre page :
1 requête (liste Année)
1 requête (listes de Délégation
territoriale(DT) )
1 requête (une liste de ville)
3 requêtes
4 requêtes
5
Cette fois on exécute 7 requêtes au chargement de la page.
N.B : Le serveur mis à disposition ne possède pas les capacités nécessaires à l’exécution d’autant de
requête simultanément. C’est pourquoi, nous avons modifié code pour y remédier.
1
er
Solution mise en place
Pour résoudre ce problème nous avons redéveloppé l’application avec une approche différente.
Premièrement on n’exécute plus les requêtes au chargement de la page, mais au clic sur un bouton.
Par exemple pour la page résultat recherche de la section « fiche immo» (voir page 4) on crée un
bloc (« div ») vide et caché pour chaque sous-section. Ensuite au clic on effectue la requête et on
l’affiche son bloc.
Voici un extrait du code :
Ainsi, pour le résultat d’une recherche de la section « fiche immo », seulement 3 courtes requêtes
sont lancées au chargement de la page, ce qui permet de réduire son chargement.
2eme solution mise en place
Même si nous avions enlevé des requêtes au chargement des pages, certaines prennent un certain
temps à s’afficher. De plus dans les sous-sections du résultat de recherche, comme nous lançons les
requêtes au clic, certaines comme celle exécuté pour « état des demandes » donne un tableau dont
le contenu peut aller jusqu’à 30000 lignes. C’est pourquoi nous avons décidé d’ajouter au
chargement des pages et des sous-sections un loader en CSS. De cette manière les utilisateurs de
l’application verront de manière claire
que leur page est en cours de
chargement. Ainsi ils ne seront plus
tentés de cliquer plusieurs fois sur un
bouton grâce au loader qui les incitera
à patienter.
Voici le code l’aperçu du loader :
6
C’est ainsi que nous réussissons à régler ce problème de chargement, et que rapidement nous
terminons le développement de la nouvelle version de l’application. La fin de la deuxième semaine
arrive et la fin des tests pour la mise en ligne également.
Deuxième mission
Suite aux tests avant la mise en ligne du site, un nouveau problème est survenu. Dans la section
« fiche immo » (état des demandes), nous avons ajouté une fonction d’extraction Excel du tableau
affiché à l’écran. L’extraction fonctionnait parfaitement pour tous les cas testés. Cependant, pour
deux cas elle ne fonctionnait pas.
La raison de ce problème est, selon nous : le nombre de lignes. Pour un cas le tableau fait 19 900
lignes et pour l’autre 9000. Nous pensons que la limite pour l’extraction Excel est la quantité de
données renvoyée, car avant(deux trois jours auparavant) cela, pour le second cas qui comptait à peu
près 8000 ligne l’extraction fonctionnait.
Les tentatives
Nous avons tenté de stocker dans des variables le tableau « état des demandes » pour
l’utiliser dans l’extraction Excel, mais cela fut un échec.
Nous avons tenté de modifier le fichier « PHP ini » pour augmenter le temps d’attente et la
taille des fichiers téléchargés, mais cela fut également un échec.
7
Solution
Lors de mes recherches, je suis souvent tombé sur des pages qui faisaient référence à une librairie
« PHPExcel ». Avec cette librairie, les problèmes que les internautes rencontraient (problème
similaire au notre), survenaient avec beaucoup plus de donné.
Je me suis donc informé sur cette librairie et j’ai procédé à quelques tests chez moi afin de savoir
l’utiliser et voir si cette solution fonctionnerait avec l’extraction dans l’application. Mes tests furent
concluant j’en ai donc parlé à mon équipe et ils m’ont permis de tester ma solution sur l’application.
J’ai donc adapté mon code à l’application et ainsi une solution fonctionnelle fut mise en place.
Extrait de code extraction Excel
$req = $_SESSION['req_immo'];
$pro_excel = odbc_exec($sqlconnect, $req);
// Instantiate a new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set the active Excel worksheet to sheet 0
$objPHPExcel->setActiveSheetIndex(0);
//on met le nom des colonnes en en tête
$en_tete = array("Année", "Date de la demande", "Imp Budg", "N° imputation ", "Numéro de
dossier")
foreach ($en_tete as $value) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($i, 1, utf8_encode($value));
$i++;
}
while ($row_data = odbc_fetch_array($pro_excel,$row)) {
$col = 0;
foreach ($row_data as $value) {
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row,
utf8_encode($value));
$col++;
}
$row++;
$col = 0;
}
Extrait code pour forcer extraction Excel coté client
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename=\"fiche_immo.xlsx\"");
header("Cache-Control: max-age=0");
ob_get_clean();
$objWriter->save('php://output');
ob_end_flush();
8
Missions en parallèle
Pendant que nous recherchions une solution pour l’extraction Excel plusieurs missions nous ont é
confiées.
D’un côté nous avions des demandes d’ajout de fonctionnalité sur l’application en ligne :
Pour l’application en ligne
Ajout de la section « détail » dans la section « suivi délégation territoriale » :
Aperçu au clic sur « voir détail »
9
Ajout d’un filtre par direction dans la section «fiche immo »
Modification du filtre « cp ville » de la
section fiche immo :
Désormais le champs code postal n’est plus un
champs libre, mais une liste déroulante
Comme ceci =>
Explication du filtre :
1. Si on selectionne Ile de France le
champs ville est grisé
Comme ceci =>
10
2. Si on selectionne le 75 le champs
ville disparait et un nouveau
champs apparait avec les
arrondisements .Comme ceci =>
3. Si on selectionne autre chose que le 75 et l’ile
de France on affiche le champs ville avec les
villes correspondantes au département
sélectionné
Comme ceci=>
Création de répertoires
Code pour créer des répertoires sur le serveur :
Pour que les utilisateurs rangent leurs fichiers, il nous a été demandé de créer un dossier pour
chaque ville de la base de données. Ce qui représente environ 225 dossiers à créer. Chaque
dossier doit être placé dans le répertoire correspondant à son département (91, 92, 93 etc.…).
Comme cela est trop long à créer à la main, nous avons fait des recherches et réalisé un petit
script en PHP.
Ensuite nous avons modifier notre code. Il fallait copier un répertoire existant dans chaque
dossier de ville créé.
Voici un extrait du code =>
Code pour copier des dossiers contenant des sous-
dossiers
Code pour la création des dossiers des villes
11
Nouvelle extraction Excel
On m’a demandé de créer deux nouvelle page, l’une pour le centre d’appel (hot line), et l’autre qui
permettra le suivi des interventions.
Explication :
Centre d’appel
Dans cette page on sélectionne une année et un mois et on fait une extraction Excel
Suivi d’intervention
Dans cette page, on a la possibilité d’effectuer deux extractions. Une extraction des demandes
d’intervention en cours et une extraction des demandes archivées.
Pour ces filtres, on sélectionne une section puis une année (la liste des années est générée en
fonction de la section sélectionné).
12
Conclusion et remerciements
Ainsi, j’ai effectué mon stage au sein du Service des Affaires Immobilières de la Préfecture de Police
de Paris. Lors de ce stage, j’ai pu mettre en pratique mes connaissances théoriques acquises durant
ma formation, de plus, je me suis confronté aux difficultés réelles du monde du travail.
Ces deux mois passés au sein de cette équipe ont été une excellente expérience car elle m’a appris à
mener à bien un projet de l’analyse à la conception. J’ai réussi à trouver des solutions utiles au bon
fonctionnement de l’application.
Ce stage m’a notamment permis non seulement d’être plus autonome dans mon travail et mes
recherches, mais aussi de travailler en cohésion avec une équipe de développeur. Le temps passé
dans l’entreprise, m’a aidé à faire plus ample connaissance avec le monde professionnel de
l’informatique.
De plus, les missions que l’on m’a confiées m’ont permis d’approfondir mes connaissances
concernant plusieurs langages du type PHP, JavaScript, Ajax, SQL. De plus, j’ai réussi à adapter et
intégrer la librairie PHPExcel dans ce projet, améliorant par la même occasion mes connaissances sur
cette librairie. Les utilisateurs et ma tutrice sont satisfaits des mission que jai réalisé.
Je pense que cette expérience en entreprise m’a offert une bonne préparation à mon insertion
professionnelle car elle fut pour moi une expérience enrichissante et complète qui conforte mon
désir d’exercer mon futur tier de « Développeur d’applications » dans le domaine de
l’informatique.
Enfin, je tiens à exprimer ma satisfaction du fait d’avoir pu travailler dans de bonnes conditions
matérielles et un environnement agréable. De plus je tiens à remercier toute l’équipe EPI, tout
d’abord ma tutrice Zohra BNOURRIF qui m’a permis d’effectuer ce stage. Je remercie également tous
les autres membres de l’équipe, pour leur accompagnement, leur aide, et leurs disponibilités. Je leur
en suis très reconnaissant.
13
Annexe 1 Organigramme
14
Annexe 2 : version final de l’application (FICHE IMMO)
Page de connexion
Page d’accueil :
15
Les 3 pages du menu :