GSB : Gestion des fiches de frais

Pendant mes années de BTS, nous avions un thème commun sur lequel nous devions travailler : GSB. Le laboratoire Galaxy Swiss Bourdin (GSB) est issu de la fusion entre le géant américain Galaxy (spécialisé dans le secteur des maladies virales dont le SIDA et les hépatites) et le conglomérat européen Swiss Bourdin (travaillant sur des médicaments plus conventionnels), lui même déjà union de trois petits laboratoires. En 2009, les deux géants pharmaceutiques ont uni leurs forces pour créer un leader de ce secteur industriel. L’entité Galaxy Swiss Bourdin Europe a établi son siège administratif à Paris.

Notre premier projet consistait à réaliser l’évolution d’une application de gestion des frais de déplacement, de restauration et d’hébergement générés par l’activité de visite médicale, ainsi qu’à développer de nouveaux modules pour le suivi des remboursements des frais.
Rien de tel pour appliquer notre cours sur le MVC ! Les fichiers étaient répartis ainsi :

Le MVC a été choisi pour construitre l'application GSB Frais

 

Grâce à ce modèle, le code est propre et ordonné. Nous avons également décidé de travailler sous Eclipse, et non plus avec Notepad++.
J’ai travaillé sur ce projet avec un de mes camarades de classe, d’ailleurs c’était la première fois que nous avions pu travailler en groupe en classe !

Quelques aperçus en tant que visiteur médical :

Il est possible de voir et de modifier ses informations personnelles sur GSB Frais

 

L'application peut exporter les informations de l'utilisateur en PDF

 

L'application GSB Frais permet de renseigner ses frais

 

Listing de tous les frais de l'utilisateur dans GSB Frais

 

Quelques aperçus en tant qu’administrateur (comptable) :

GSB Frais possède une interface administrateur qui permet de voir les frais des utilisateurs

 

Le comptable peut choisir ou non de rembourser les frais dans GSB Frais

 

Produits Fermiers

J’ai effectué mon stage de 2ème année de BTS SIO chez Martin STERN. J’ai été chargée d’informatiser les commandes de produits fermiers sous l’interface d’un site Internet. Après l’étude du fonctionnement de l’entreprise, j’ai établi un cahier des charges et j’ai donc conçu une base de données prenant en compte : – l’ensemble des produits pouvant être vendus sous différents packs – les quantités en stock de chaque produit – les réapprovisionnements – les commandes des clients – l’ensemble des tournées (celles-ci étant des planning de livraison) – l’ensemble des lots (utilisant comme modèle une tournée pour une date précise) – la disponibilité des produits en fonction des lots – les promotions en cours Cette étape m’a pris pas mal de temps. Mais il était essentiel d’avoir une base de données solide et complète car toute modification entrainerait une perte de temps inimaginable. pfmcd Malgré la courte durée du stage, j’ai pu commencer à programmer le site web, notamment la partie commande coté client. pfscreen1 Le client peut s’inscrire simplement en remplissant un formulaire. Les nouveautés apportées par l’HTML 5 permettent un formulaire plus complet, et plus simple à concevoir. Grâce un code en javascript, lorsque le client sélectionne son code postal de résidence, seules les villes relatives à celui-ci sont sélectionnables. pfscreen0 Une fois l’inscription faite, les informations du client sont enregistrées dans la base de données, et le mot de passe est protégée via la technologie md5. 5 étapes sont requises pour passer commande :

  • Étape 1

pfscreen3 En fonction de son lieu de résidence, un algorithme que j’ai du créer suggère les livraisons les plus proches du client. Cette fonction prend un tableau de villes en paramètre et est chargée de les trier par ordre croissant.

function tri($tab)
{
	$nouv_tab = Array(Array());

	for($i=0;$i {
		$c_temps = 0;
		$k_temps = 5000;

		foreach($tab as $val) //Pour chaque valeur du tableau envoyé
		{
			$tt = Array();
			$entree = 1;

			if((count($nouv_tab) == 1) AND ($i == 0))//Si il n'y a aucune valeur dans le tableau
			{
				if($val[1] <= $k_temps)//Si elle est plus petite ou égale que la valeur déjà enregistrée, on enregistre
				{
					$c_temps=$val[0];
					$k_temps=$val[1];
				}
			}
			else //Si il y en a une
			{
				if($val[1] <= $k_temps) //Si elle est plus petite que la valeur déjà enregistrée
				{
					foreach($nouv_tab as $val2) //il faut vérifier qu'elle n'est pas déjà dans le tableau
					{
						if(($val[1] == $val2[1]) AND ($val[0] == $val2[0])) //si c'est le cas, on annule l'entrée
						{
						$entree = 0;
						}
					}
					if($entree == 1) //Si elle n'est pas déjà dans le tableau
					{
						$c_temps=$val[0];
						$k_temps=$val[1];
					}
				}

			}
		}
		if($entree == 1)
		{
			$tt[] = $c_temps;
			$tt[] = $k_temps;
			$nouv_tab[$i] = $tt;
		}
	}
	return $nouv_tab;
}

Seul les lieux où il reste encore des rendez-vous disponibles sont sélectionnables. Le client peut sélectionner un rendez-vous soit avec la suggestion en fonction des villes les plus proches, soit en fonction des dates, peu importe le lieu (en cliquant sur Afficher, le détail s’affiche).

  • Étape 2

pfscreen4   Ce dernier peut donc sélectionner une date et une heure de livraison pour un lieu précis. Seuls les horaires disponibles sont sélectionnables.

  • Étape 3

pfscreen5 C’est après que le client peut commander différents produits, selon les stocks disponibles. Les produits en promotion sont mis en valeur dans la liste. Lorsqu’un libellé est en bleu, cela veut dire qu’une info-bulle s’affiche, permettant ainsi plus de détails sur le produit. Le poids des produits étant enregistrés en gramme ou en litre dans la base de données, il était nécessaire de convertir automatiquement lorsque c’était nécessaire. Ainsi, 3000 g s’affichait 3kg, 0.4 litre s’affichait 40 cL, etc… Voici la fonction qui permettait cette conversion :
<>

function convertir($val, $unite) {  
    if($unite == ‘g’) {  
        if(strlen($val) == 4) {  
            $val = $val / 1000;  $unite = « kg »;  
        }  
    }  
    if($unite == ‘L’) {  
        if((strlen($val) == 2) OR (strlen($val) == 3) OR (strlen($val) == 4) AND ($val < 1)) { 
            $val = $val * 100;  
            $unite = 'cl';  
        }  
        if((strlen($val) == 5) AND ($val < 1)) {  
            $val = $val * 1000; 
            $unite = 'ml';  
        }  
    }  
    if(($unite == 'unité') OR ($unite == 'cube')) {  
        $unite ='';  
    }  
    return $val.' '.$unite;  
}
  • Étape4

pfscreen6 Une fois les produits ajoutés à la commande, un récapitulatif s’affiche sur l’écran du client. S’il bénéficie de remise, celle-ci s’affiche dans le total. Il est possible de modifier la commande : le client est renvoyé à l’étape 3 avec toutes les informations contenues dans le panier.

  • Étape 5

pfscreen7 Une fois validée, un e-mail de confirmation est envoyé.   J’ai décidé de coder tout ce système en objet. Ainsi, le traitement de l’information est simplifié. Par cette occasion, j’ai pu appliquer ce que j’avais appris en cours tout en améliorant mes acquis. Quelques jours avant la livraison, le bon de livraison est téléchargeable en format PDF avec tout le détail sur le site Internet. celui-ci permettra de retirer ses produits lors de la livraison. J’ai testé un certain nombre de librairies afin de définir celle qui me semblait la meilleure, et j’ai finalement opté pour HTML2PDF. L’installation est vraiment très simple, ainsi que son utilisation. Un wiki est à la disposition des nouveaux utilisateurs. Voici un extrait du bon de commande :

pfscreen9

Quelques jours avant la tournée, l’application ne permet plus la prise de commandes afin de permettre l’organisation concernant le chargement du camion. Le planning était donc établi. Je n’ai pas pu finir le projet. Il était beaucoup trop conséquent pour le clore en 1 mois et demi seulement. C’est pourquoi j’ai bien pris le temps de commenter mon code sans oublier de réaliser une documentation technique pour le prochain développeur qui sera chargé de ce projet.