Cas Supmaster (SLAM)
Métropole 2014.
Réponse AJAX

CAS Supmaster

Aucun matériel ni document autorisé

Ressources documentaire

  1. Présentation de la base de données
  2. Tarifs de l'AEF
  3. Entretien avec le directeur de SupMaster (extraits)
  4. Extrait du diagramme des classes métier
  5. Description détaillée des classes métier (extrait)
  6. Utilisation d’une collection
  7. Extrait du programme GestVisite
  8. Demande de modification PO_14
  9. Conception de sites web adaptatifs
  10. Page entreprise.php dédiée aux entreprises
  11. Note du développeur de la page styleEntreprise.php

Barème

Présentation du contexte

L'organisation cliente : le centre de formation d'apprentis SupMaster

SupMaster est un centre de formation d'apprentis (CFA) préparant des jeunes âgés de 18 à 25 ans au diplôme d'ingénieur. Établissement de formation professionnelle par alternance placé sous la tutelle du ministère de l'Education nationale, SupMaster est investi d'une mission de service public dont la création, le fonctionnement et les attributions sont très précisément décrits dans le livre I du code du travail. C'est au titre de cette mission de service public que le CFA perçoit de l'argent public qui couvre, en partie, ses frais de fonctionnement pédagogique.

SupMaster forme des chefs de projets (bac+5) alliant compétences techniques et managériales. Le centre couvre deux domaines : les systèmes d’information (cursus IM pour Informaticien Manager) et le multimédia (cursus MM pour Media Manager). L’aspect transversal des formations joue un rôle d’accélérateur d’employabilité pour des apprentis recrutés à bac+2. Les formations du CFA sont reconnues au niveau 1 par le RNCP (répertoire national des certifications professionnelles). SupMaster forme ses apprentis dans le cadre de contrats d’alternance pluriannuels entre l’étudiant, le CFA et une entreprise. Le principe des études consiste à effectuer une période d’un mois dans un établissement de formation SupMaster et une période d’un mois dans l’organisation.

Depuis sa création à Marseille en 2002, le centre de formation a choisi une stratégie de diversification géographique en s’implantant dans de grandes villes de France (Lyon, Lille, Paris, Strasbourg, Rennes et Bordeaux). Il forme aujourd’hui environ 300 étudiants, possède 25 salariés à temps plein, auxquels il faut ajouter 70 intervenants extérieurs qui réalisent différents enseignements dans les cursus proposés.

L'entreprise prestataire de services

SIForm est une entreprise de services du numérique (ESN) marseillaise implantée à proximité du centre de formation. Elle réalise des développements auprès de clients qu’elle démarche, ou pour ses besoins propres.

Elle compte un effectif de 6 personnes à temps plein qui interviennent dans tous les domaines de l’informatique d’aujourd’hui, et plus particulièrement les développements Web et mobiles.

Problématique du projet

Le choix exclusif de l’alternance pour tous les étudiants impose un travail important sur la reconnaissance de SupMaster par les organisations (entreprises, administrations, ou encore associations) susceptibles de fournir des contrats aux étudiants. Pour maintenir sa place dans le tissu concurrentiel des écoles du domaine des technologies de l’information et de la communication, le directeur général, Léopold C. a décidé de développer une application destinée à améliorer la notoriété du centre. Compte tenu de la stratégie de diversification géographique, les organisations situées dans les régions couvertes par chaque établissement du centre constituent la cible principale de l’action.

Ce projet est confié à SIForm. L'ESN aura pour rôle d'adapter l'existant aux exigences nouvelles de la direction générale. La proximité géographique des deux structures facilite la communication et le contrôle des travaux. Fraichement embauché-e par SIForm, vous intervenez dans plusieurs missions mises en place par l'ESN dans le cadre de ce projet.

Mission 1 : Suivi des contrats de travail des apprentis

Document(s) à utiliser : 1

Pour suivre ses promotions, SupMaster utilise une application qui s’appuie sur une base de données nommée Promo qui stocke l'ensemble des informations relatives aux étudiants inscrits dans un cursus.

Lors de la mise en place de cette base de données, les contrats en cours ont été intégrés mais les contrats terminés ne l’ont pas été. C’est pourquoi un attribut nbContratsOrg a été ajouté dans la table Organisation. On s’est contenté de saisir le nombre de contrats ayant été signés avec chaque organisation. Cette information est mise à jour à l’aide du déclencheur (trigger) suivant :

CREATE OR REPLACE TRIGGER ‘majNbContrats’ 
BEFORE INSERT ON ‘CONTRAT’ 
FOR EACH ROW 
	UPDATE Organisation 
	SET nbContratsOrg = nbContratsOrg + 1 
	WHERE id = :new.idOrg; 

Afin de connaître le nombre de contrats que signe un étudiant lors de son passage au centre, la donnée nbContratsEtud vient d'être ajoutée dans la table Etudiant.

Le directeur souhaite effectuer un suivi des contrats. Pour cela, il a besoin :

Modifier le code du déclencheur pour mettre à jour la donnée nbContratsEtud.

Votre réponse n°1

Expliquer en quelques lignes quels autres déclencheurs sont nécessaires pour que les données nbContratsOrg et nbContratsEtud soient toujours exactes (l'écriture de ces déclencheurs n'est pas demandée).

Votre réponse n°2

Écrire les requêtes permettant d'obtenir les deux listes souhaitées.

Votre réponse n°3

Mission 2 : Refonte de la prospection des organisations

Document(s) à utiliser : 1, 2, 3

IMPORTANT : la candidate ou le candidat présentera les évolutions de la structure de la base de données en adoptant le formalisme de son choix (schéma entité-association, diagramme de classes, ou encore schéma relationnel).

Une activité stratégique pour SupMaster consiste à prospecter les organisations susceptibles d’accueillir des étudiants. Dans le but d’améliorer la qualité de cette prospection, il a été décidé de demander à SIForm de tenir compte de nouvelles informations dans la future application.

SupMaster a décidé de faire l’acquisition d’un fichier d’adresses auprès de l’AEF (annuaire des entreprises de France). L’AEF est un service payant proposé par les CCI (chambres de commerce et de l’industrie). Les fichiers sont constitués à partir de différents critères comme la localisation des entreprises ou leur effectif. Le résultat de la recherche est fourni par l’AEF sous forme numérique ou papier.

Le responsable du projet chez SIForm a rencontré le directeur de SupMaster et retranscrit l’entretien qu’il a mené.

La future application de gestion des prospections s’appuiera sur la base de données Promo enrichie des informations nécessaires.

Concernant l’intégration des données de l’AEF, deux solutions sont envisagées :

Dans les deux cas, il est prévu d’acheter un fichier de 2500 adresses.

Proposer une modélisation de la nouvelle base de données à mettre en place en intégrant la base existante et les nouveaux besoins en informations exprimés par le directeur de SupMaster (l’ensemble de la solution proposée devra être cohérent avec le formalisme choisi).

Votre réponse n°4

Rédiger une courte note indiquant la meilleure solution pour l’intégration des données de l’AEF. Elle présentera le détail des calculs ainsi que la justification du choix.

Votre réponse n°5

Mission 3 : Suivi des visites de prospection

Document(s) à utiliser : 4, 5, 6, 7, 8

IMPORTANT : la candidate ou le candidat peut choisir de présenter les éléments de code à l’aide du langage de programmation de son choix ou de pseudo-code algorithmique.

Pour prospecter les organisations, SupMaster emploie une personne par établissement. Pour faciliter le travail de ce prospecteur, une application java GestVisite est en cours d’écriture. Elle permettra notamment la saisie d’une visite par le prospecteur d’un centre SupMaster. L'exemple ci-contre, consiste à enregistrer la première visite réalisée auprès de l’organisation GRT SA située dans la région Ile de France, par Monsieur Ramirez, prospecteur de l’établissement SupMaster-Paris.

Trois points sont à traiter :

Expliquer la cause du message d'erreur apparu à la première exécution du programme GestVisite et donner la solution permettant d'y remédier.

Votre réponse n°6

Coder les différentes étapes permettant de réaliser la modification demandée dans la fiche PO_14.

Votre réponse n°7

Coder une solution permettant de calculer l’indicateur de couverture des visites d’une région.

Votre réponse n°8

Mission 4 : Adaptation du site SupMaster

Document(s) à utiliser : 9, 10, 11

IMPORTANT : pour les éléments de mise en forme des pages Web, le langage CSS doit être utilisé. En revanche, la candidate ou le candidat peut choisir de présenter les éléments de code à l’aide de PHP, du langage de programmation de son choix ou de pseudo-code algorithmique.

Dans le cadre du travail de refonte des applications, il est nécessaire d’ajouter au site de SupMaster une page dédiée aux organisations. Cette nouvelle rubrique devra être accessible aussi bien à partir d’un ordinateur que d’un téléphone portable, tout en gardant un temps de réponse raisonnable.

Trois solutions ont été envisagées :

Le choix s’est porté sur le développement d’un site adaptatif. Les maquettes de la page entreprise.php ont été conçues pour une consultation à l’aide d’un ordinateur et pour une consultation à l’aide d’un smartphone.

Le développement de cette page a été commencé par une de vos collègues, vous êtes chargé de le terminer.

Indiquer sur votre copie les modifications à effectuer sur le code de la page entreprise.php pour que l’image ne soit pas affichée si le client connecté utilise un smartphone.

Votre réponse n°9

Indiquer sur votre copie les compléments à ajouter au script styleEntreprise.php pour prendre en compte la note rédigée par votre collègue.

Votre réponse n°10

Rédiger une note justifiant le choix d’un site web adaptatif en comparant cette solution avec les deux autres solutions envisagées (développer deux sites web ou encore un site web et une application Android).

Votre réponse n°11

Ressources documentaires

1. Présentation de la base de données

Modélisation conceptuelle

La modélisation conceptuelle est volontairement fournie dans les deux représentations les plus courantes.

Schéma entité-association

Diagramme de classes

Schéma relationnel

Cursus (id, libelle)
Clé primaire : id

/* Le libellé d’un cursus correspond à un choix de formation offert par le centre associé à l’année. Exemple : le cursus IM1 correspond à la 1ère année de formation d’Informaticien Manager. Tous les cursus sont disponibles au sein de chaque établissement de l’institut. */

Etudiant (id, nom, prenom, adresse, ville, nbContratsEtud, idEtablissement, idCursus)
Clé primaire : id
Clé étrangère : idCursus en référence à id de Cursus

/* La donnée idEtablissement contient le code de l’établissement fréquenté par l’étudiant. Exemple : "mar" pour "Marseille" */

Activite (codeApe, libelle)
Clé primaire : codeApe /* code correspondant à un secteur d’activité, défini par l’INSEE */

Organisation (id, nom, adresse, ville, nbContratsOrg, codeApeActivite)
Clé primaire : id
Clé étrangère : codeApeActivite en référence à codeApe de Activite

/* La donnée nbContratsOrg contient le nombre de contrats signés par l’organisation */

Contrat (id, dateContrat, caractéristiques, dateFin, idOrg, idEtudiant)
Clé primaire : id
Clé étrangère : idOrg en référence à id de Organisation
Clé étrangère : idEtudiant en référence à id de Etudiant

/* La table Contrat mémorise les informations sur les contrats signés par les étudiants et les organisations. Il y a, pour chacun, une date de signature (attribut dateContrat) et une date de fin (attribut dateFin) qui n’est pas renseignée pour les contrats en cours*/

2. Tarifs de l’AEF

Prix de venteTarifs indiqués à l'adresse par tranche selon le volume total d'adresses de la commande Frais de gestion
Selon supportsDe 1 à 2499 Adr. De 2500 à 4999 De 5000 à 9999 De 10000 à 14999 De 15000 à 24999 De 25000 à 49999 De 50000 à 99999 Au delà de 100000 adresses Prix facturés en euros
Téléchargement (csv, xls) 0,33 0,30 0,26 0,23 0,21 0,19 0,16 0,14 5
CD-ROM (toute quantité; csv, xls) 0,33 0,30 0,26 0,230,21 0,19 0,16 0,14 30
Liste papier 0,23 0,20 0,18 0,16 0,15 0,14 0,13 0,12 30
Etiquettes 0,19 0,17 0,15 0,13 0,11 0,10 0,09 0,08 30

Exemple pour 3000 adresses sur CD-ROM : 3000 * 0,30 + 30 = 930 €.

D’après la source : http://www.aef.cci.fr/statiques/produits-tarifs

3. Entretien avec le directeur de SupMaster (extraits)

Q : Quels sont vos principaux besoins en information pour mieux gérer votre prospection ?

R : Pour mettre en relation une entreprise et un étudiant, il y a deux aspects à considérer : la proximité géographique et la capacité de l’étudiant à répondre à la demande de l’entreprise. Actuellement, nous ne gérons ni l’un ni l’autre…

Q : Parlons géographie, vous voulez bien ?

R : Oui, bien sûr ! Chacun de nos établissements couvre une zone géographique, aussi bien pour le recrutement d’étudiants que pour la prospection d’organisations. Par exemple, l’établissement de Lyon couvre les régions Rhône Alpes, Centre et Franche-Comté.

Q : À part les régions couvertes, quelles sont les informations concernant un établissement ?

R : Très simple : nom, adresse, téléphone, e-mail et nom du responsable. Mais laissez-moi finir avec cette géographie… Nous savons dans quel établissement un étudiant est affecté. Cela devrait nous permettre de mieux cibler les recherches de contrats puisque la région d’une entreprise figure dans le fichier AEF.

Q : Quelles informations vous semblent pertinentes dans le fichier fourni par l’AEF ?

R : C’est assez basique… SIRET, nom de l'entreprise, civilité, nom et prénom du responsable légal, adresse, code postal, ville, téléphone, fax, forme juridique, code APE, code région.

Q : Le code APE correspond-il au code activité qui existe déjà dans la table "Organisation" actuelle ?

R : Oui, exactement, il s’agit de la nomenclature 2008.

Q : La forme juridique est importante ?

R : Plus ou moins, on verra par la suite. Savoir qu’un partenaire éventuel est une SNC, une SA ou une SAS sera sans doute utile un jour !

Q : SA pour "société anonyme", SNC pour "société en nom collectif", SAS pour "société par actions simplifiée". On parle bien de cela ?

R : Oui, nous sommes d’accord.

Q : Et en ce qui concerne la capacité d’un étudiant à répondre à la demande des entreprises, vous voulez parler de ses compétences ?

R : Exactement ! Les entreprises recherchent des compétences particulières. Nous y avons réfléchi… Nous avons défini 6 profils, chacun regroupant un ensemble de compétences. Au fil du temps, nous serons capables de savoir quels sont les profils intéressants pour telle ou telle organisation.

Q : Et côté étudiants ?

R : Nous allons demander à nos équipes pédagogiques de recenser et de tenir à jour la liste des compétences de chaque étudiant. Il s’agit bien sûr en général de compétences en cours d’acquisition, ils sont là pour apprendre… Mais la connaissance des compétences d’un étudiant permettra de déterminer quel(s) profil(s) il convient de cibler pour ses recherches de contrat.

Q : Vous pouvez me donner un exemple de profil ?

R : Oui, évidemment. La liste complète n’est pas encore tout à fait au point. On aura par exemple le profil n° 1 intitulé "Développement Web", le profil n° 2 "Administrateur base de données". Le premier devrait regrouper les compétences "HTML", "PHP", "JAVASCRIPT" et "CSS".

Q : D’accord… Vous voyez autre chose ?

R : Non, je crois que nous avons fait le tour de la question.

4. Extrait du diagramme des classes métier

La description des classes est fournie ici à un niveau d’abstraction intermédiaire, suffisant pour la compréhension des informations principales à gérer.

5. Description détaillée des classes métier (extrait)

public class Region { 
	private int numero; 
	private String nom; 
	private Etablissement leEtablissement; // Etablissement de Supmaster couvrant la région 
	private ArrayList  lesOrganisations; 
	// Collection des organisations prospectées ou susceptibles de l’être dans la région. 
	public Region(int pNum, String pNom, Etablissement pEtablissement) {…} 
	// Constructeur qui initialise les 3 premiers attributs avec les paramètres. 
	public String getNom() {…} // retourne l’attribut nom 
	public ArrayList getLesOrganisations() {…} // retourne l’attribut lesOrganisations 
	public Etablissement getLeEtablissement() {…} // retourne l’attribut leEtablissement 
	public void ajoutOrganisation(Organisation pOrganisation) {…} 
} 
public class Etablissement { 
	private String code; 
	private String adresse; 
	private String prospecteur; 
	private ArrayList lesRegions; // zone géographique couverte par l’établissement 
	public Etablissement(String pCode, String pAdr, String pProspect) {…} 
	// Constructeur qui initialise les 3 premiers attributs avec les paramètres. 
	public String getCode() {…} // retourne l’attribut code 
	public String getAdresse() {…} // retourne l’attribut adresse 
	public String getProspecteur() {…} // retourne l’attribut prospecteur 
	public ArrayList getLesRegions() {…} // retourne l’attribut lesRegions 
} 
public class Organisation { 
	private String nom; 
	private String adresse; 
	private ArrayList lesVisites; 
	private Region laRegion; 
	public Organisation(String pNom, String pAdresse, Region pRegion) { 
		this.nom = pNom ; 
		this.adresse = pAdresse ; 
		this.laRegion = pRegion ; 
	} 
	public String getNom() {…} // retourne l’attribut nom 
	public String getAdresse() {…} // retourne l’attribut adresse 
	public ArrayList getLesVisites() {…} // retourne l’attribut lesVisites 
	public Region getLaRegion() {…} // retourne l’attribut laRegion 
	public void ajoutVisite(Visite pLaVisite) { 
		lesVisites.add(pLaVisite) ; 
	} 
} 
public class Visite { 
	private String dateVisite; 
	private String prospecteur; 
	public Visite(String pDateVisite, String pProspecteur) {…} 
	// Constructeur qui initialise les deux attributs avec les deux paramètres 
	public Visite(String pDateVisite) {…} 
	//constructeur qui initialise uniquement la date 
	public void setProspecteur(String pProspecteur) {…} // renseigne l’attribut prospecteur 
}

6. Utilisation d’une collection

L’exemple ci-dessous permet de manipuler une collection de chaînes de caractères. Le principe est le même quel que soit le type des éléments.

	ArrayList<String> mesChaines; // déclaration d'une collection de chaînes de caractères 
	mesChaines = new ArrayList<String>(); // instanciation de la collection 
	mesChaines.add("un"); // ajout d'une chaîne à la collection 
	mesChaines.add("deux"); 
	mesChaines.add("trois"); 
	System.out.println(mesChaines.size()); // affichage du nombre d'éléments de la collection 
	for (String uneChaine : mesChaines) { // parcours de la collection 
		System.out.println(uneChaine); // affichage de l'élément courant 
	} 
	mesChaines.remove(1); // suppression du 2ème élément (indice 1) 
	System.out.println(mesChaines.get(0)); // affichage du 1er élément (indice 0) 

7. Extrait du programme GestVisite

1.	public class GestVisite extends JFrame { 
2.	[...] 
3.		// clic sur le bouton OK 
4.		private void btnOKActionPerformed(java.awt.event.ActionEvent evt) { 
5.			[...] 
6.			// À ce stade l’objet uneOrga contient l’organisation sélectionnée par 
7.			// l’utilisateur et est correctement instancié 
8.			Visite uneVisite = new Visite( txtSaisieDateVisite.getText(), 
9.			                                      txtSaisieNomProspecteur.getText()); 
10.			uneOrga.ajoutVisite(uneVisite); 
11.			[...]
12.		} 
13.	} 

8. Demande de modification PO_14

Projet : Prospect on des Organisations (PO) - Émise le : 26/02/2014
Demande de modification n° : PO_14
Description de la modification demandée
Nom :....Gandri JacquesFonction : Responsable du projet
Niveau d’importance :Faible
Majeur
Bloquant


Fonctionnalité concernée : saisie des visites réalisées par les prospecteurs.

Description : La saisie du nom du prospecteur dans la fenêtre du programme GestVisite
pourrait induire des incohérences avec l’attribut prospecteur de la classe Etablissement. La
solution consiste à ne demander que la saisie de la date dans l'interface de saisie.

Implémentation technique :
  1. Modification du formulaire de saisie d’une visite : saisie de la date seule (la visite sera
    instanciée avec le constructeur paramétré qui instancie la visite uniquement avec la
    date)
  2. Réécriture de la méthode AjoutVisite() de la classe Organisation avec la récupération du
    nom du prospecteur grâce à l’attribut prospecteur de la classe Etablissement, mise à
    jour de l'attribut prospecteur de l'objet Visite puis ajout de la visite à la collection.

9. Conception de sites web adaptatifs

a. Qu'est qu’un site adaptatif ?

De plus en plus de consultations sur le web se font par l’intermédiaire d’un smartphone. Ceci pose un problème aux concepteurs de sites : comment offrir un rendu compatible avec la petite taille des écrans de mobiles ?

Deux solutions sont envisageables :

La deuxième solution définit ce qu’est un site adaptatif.

b. Comment faire ?

Une première approche consiste à faire appel aux "media queries" de CSS3. L’inconvénient est que tous les éléments de la page sont téléchargés sur le smartphone, même s’ils ne sont pas affichés, ce qui est pénalisant en termes de temps de réponse.

La deuxième approche consiste à utiliser un script PHP générant un contenu et une présentation adaptés à l’appareil connecté. Cette approche est décrite ci-dessous :

Le contenu :

La mise en forme :

c. Un exemple :

10. Page entreprise.php dédiée aux entreprises

Maquette de la page entreprise.php telle qu’elle doit apparaître sur un ordinateur :

Maquette de la page entreprise.php telle qu’elle doit apparaître sur un smartphone :

Code de la page entreprise.php :

<!DOCTYPE html> 
<html lang="fr"> 
<head> 
	<title>Entreprises</title> 
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
	<link type="text/css" rel="stylesheet" href="styleEntreprise.php" /> 
</head> 
<body> 
	<h2>Accueil entreprises</h2> 
	<img src="entreprise.gif" alt="Entreprises"/> 
	<ul> 
		<li id="lien1"><a href="Trouver.php">Trouver un stagiaire</a></li> 
		<li id="lien2"><a href="SignalerPedago.php">Signaler un problème pédagogique</a></li> 
		<li id="lien3"><a href="SignalerAdmin.php">Signaler un problème administratif</a></li> 
		<li id="lien4"><a href="Embaucher.php">Embaucher un jeune diplômé</a></li> 
		<li id="lien5"><a href="Verser.php">Nous verser votre taxe d'apprentissage</a></li> 
		<li id="lien6"><a href="Contacter.php">Nous contacter</a></li> 
	</ul> 
</body> 
</html> 

Fichier styleEntreprise.php :

<?php 
	include_once("Mobile_Detect.php"); 
	header('content-type: text/css'); 
?> 
ul {	list-style-type: none; 
	text-align: center; 
} 
ul li {	height: 50px; // Définition du style pour les items de liste 
	background-color: aqua; 
	padding-top: 10px; 
} 
ul li {	width : 160px; } // Complément pour les items de liste : largeur de l’item 160 pixels 
ul li a {	color: black; 
	text-decoration: none; 
} 
<?php 
	$detect= new Mobile_Detect(); 
	if ($detect->isMobile()) { // Cas d’un smartphone 
		$top = 70; 
		for ($i=1; $i<7; $i++) { 
			echo "#lien" . $i . " {left: 10px; top:" . $top."px; position: absolute;}"; 
			// Génération des styles CSS pour les éléments “lien1” à “lien6” 
			$top = $top + 70; 
		} 
	} 
	else { // Cas d’un ordinateur classique 
	
	} 
?> 

11. Note du développeur de la page styleEntreprise.php

Je me suis occupé du positionnement des liens dans le cas d’un smartphone. Par contre, je n’ai pas eu le temps de gérer la différence de largeur des items de liste (220px et non 160px, cf maquettes). Il reste également à gérer le cas d’un ordinateur classique.