Commit 75dcb687 authored by El-gitano's avatar El-gitano

Création de la directive tableau + intégration dans la page Joueurs

TODO : Trouver un moyen de passer des paramètres aux fonctions de l'apicall
	Supprimer le eval() si possible
parent bdad2e31
=== JOUEURS ===
Corriger l'affichage des dates (côté API)
Mode éditions/ajout
Corriger erreur dans la pagination
Corriger l'erreur joueursTries
Remettre la fonctionnalité des filtres
Lors de la suppression des ligne ajouter une animation ?
Export des données pour réutilisation future ?
......
......@@ -80,11 +80,9 @@
<script src="scripts/services/apicall.js"></script>
<script src="scripts/directives/chargement.js"></script>
<script src="scripts/filters/slice.js"></script>
<script src="scripts/filters/joueurparid.js"></script>
<script src="scripts/services/constantes.js"></script>
<script src="scripts/directives/focuson.js"></script>
<script src="scripts/directives/chargementligne.js"></script>
<script src="scripts/filters/joueurselectionnes.js"></script>
<script src="scripts/services/intercepteurhttpreponses.js"></script>
<script src="scripts/directives/tableau.js"></script>
<!-- endbuild -->
......
......@@ -10,261 +10,66 @@
var app = angular.module('panelAdminApp');
// Configuration du service d'appel à l'API
app.config(function($logProvider, apicallProvider, urlAPI){
app.config(function(apicallProvider, urlAPI){
apicallProvider.setUrl(urlAPI);
$logProvider.debugEnabled(false);
});
app.controller('JoueursCtrl', ['$scope', '$routeParams', '$filter', '$log', 'apicall', function ($scope, $routeParams, $filter, $log, apicall) {
/* Gestion des alertes */
$scope.alertes = [];
$scope.fermerAlerte = function(index){
$log.debug('Supression d\'une alerte dans le tableau des alertes');
$scope.alertes.splice(index, 1);
};
var supprimerAlertes = function(){
$scope.alertes = [];
};
var ajouterAlerte = function(type, message){
$log.debug('Ajout d\'une alerte dans le tableau des alertes');
$scope.alertes.push({type : 'alert-'+type, msg: message});
};
/* Gestion des éléments pour le triage */
$scope.entreesTri = [
{id: 'IdPlayer', nom: 'Id'},
{id: 'Team', nom: 'Équipe'},
{id: 'Name', nom: 'Nom'},
{id: 'FirstName', nom: 'Prénom'},
{id: 'Sex', nom: 'Sexe'},
{id: 'DateBirth', nom: 'Date de naissance'}
];
$scope.colonneTri = 'Name';
$scope.inverserTri = false;
$scope.entreeTriSelection = $scope.entreesTri[2].nom;
$scope.trierPar = function(entree){
$scope.colonneTri = entree.id;
$scope.entreeTriSelection = entree.nom;
};
/* Gestion des filtres du tableau */
$scope.affichageFiltres = false;
/* Gestion des joueurs */
$scope.totalElements = 0;
$scope.joueurs = [];
$scope.chargerJoueursEquipe = function(){
$scope.chargement = true;
supprimerAlertes();
$scope.selectionGlobale = false;
$scope.nbSelection = 0;
apicall.getJoueurs().success(function(data){
$scope.joueurs = data.players;
$scope.totalElements = $scope.joueurs.length;
// Ajout d'un booleen selection et edition pour chaque joueur
for(var joueur in $scope.joueurs){
joueur.selection = false;
joueur.chargement = false;
}
$scope.chargement = false; // Placé ici car fonction asynchrone
}).error(function(){
ajouterAlerte('danger', 'Impossible de récupérer la liste des joueurs de l\'équipe (cliquez sur actualiser pour essayer de recharger)');
$scope.joueurs = [];
$scope.totalElements = 0;
$scope.chargement = false;
});
};
// Supprime une ligne (donc un joueur) dans le tableau
$scope.supprimerJoueur = function(idJoueur){
// Recherche du joueur
var index = $filter('joueurParId')($scope.joueurs, idJoueur);
if(index === null){
$log.error('Tentative de suppression d\'un élément non-présent dans le modèle (Id = ' + idJoueur + ')');
return;
}
$log.debug('Supression du joueur avec Id = ' + idJoueur);
// Modification de la sélection
if($scope.joueurs[index].selection){
$scope.nbSelection--;
}
$scope.joueurs.splice(index, [1]);
$scope.totalElements--;
// Animation ?
};
/* Gestion des sélections */
$scope.selectionGlobale = false;
$scope.nbSelection = 0;
// Sélectionne/Déselectionne tous les joueurs de la page actuelle du tableau et change le nombre de joueurs sélectionné
$scope.changerSelectionGlobale = function(){
$log.debug('Changement de sélection globale');
$scope.selectionGlobale = !$scope.selectionGlobale;
var debut = $scope.premiereEntree()-1;
var fin = $scope.derniereEntree();
var joueursTries = $filter('filter')($filter('orderBy')($scope.joueurs, $scope.colonneTri, $scope.inverserTri), $scope.recherche);
for(var i=debut; i<fin; i++){
// Changement du nombre d'éléments sélectionnés
if(joueursTries[i].selection && !$scope.selectionGlobale){
$scope.nbSelection--;
}
else if(!joueursTries[i].selection && $scope.selectionGlobale){
$scope.nbSelection++;
}
joueursTries[i].selection = $scope.selectionGlobale;
}
};
// Sélectionne/Déselectionne un joueur et change le nombre de joueurs sélectionné
$scope.selectionnerJoueur = function(joueur){
var changement = !joueur.selection;
joueur.selection = changement;
if(changement){
$scope.nbSelection++;
app.controller('JoueursCtrl', ['$scope', 'apicall', function ($scope, apicall) {
$scope.methodeMaj = apicall.getJoueurs;
$scope.infosJoueurs = [
{
nomTriage:'Id',
nomColonne:'#',
champs:'IdPlayer',
triable:true,
filtrable:false,
tailleColonne:1
},
{
nomTriage:'Équipe',
nomColonne:'Équipe',
champs:'Team',
triable:true,
filtrable:false,
tailleColonne:1
},
{
nomTriage:'Prénom',
nomColonne:'Prénom',
champs:'FirstName',
triable:true,
filtrable:true,
tailleColonne:1,
tailleFiltre:6
},
{
nomTriage:'Nom',
nomColonne:'Nom',
champs:'Name',
triable:true,
filtrable:true,
tailleColonne:2,
tailleFiltre:6
},
{
nomTriage:'Sexe',
nomColonne:'Sexe',
champs:'Sex',
triable:true,
filtrable:false,
tailleColonne:1
},
{
nomTriage:'Date de naissance',
nomColonne:'Date de naissance',
champs:'DateBirth',
triable:true,
filtrable:false,
tailleColonne:2
}
else{
$scope.nbSelection--;
}
};
// Supprime l'ensemble des joueurs sélectionnés
$scope.supprimerSelection = function(){
var selectJoueurs = $filter('joueurSelectionnes')($scope.joueurs);
$log.debug('Id des joueurs à supprimer : ' + selectJoueurs.toString());
for(var i=0; i<selectJoueurs.length; i++){
$scope.supprimerJoueur(selectJoueurs[i]);
}
};
// À définir
$scope.ajouterJoueur = function(){
};
// Ajoute une ligne dan le tableau en vue de l'ajouter à la BDD via la fonction ajouterJoueur()
$scope.ajouterLigne = function(){
};
/* Gestion de la pagination */
$scope.pagination = {
entreesPages : [
{nom:'10', valeur:10},
{nom:'20', valeur:20},
{nom:'30', valeur:30},
{nom:'40', valeur:40},
{nom:'50', valeur:50}
],
choixEntreesPages : 0, // Index du tableau entreesPages
pageCourante : 1
};
$scope.changerEntreesPage = function(entree){
$log.debug('Changement du nombre d\'entrées/page pour l\'indice ' + entree + ' du tableau entreesPages');
$scope.pagination.choixEntreesPages = entree;
};
// Récupère l'indice de la première entrée à afficher dans le tableau
$scope.premiereEntree = function(){
return ($scope.pagination.pageCourante-1)*$scope.pagination.entreesPages[$scope.pagination.choixEntreesPages].valeur + ($scope.totalElements !== 0);
};
// Récupère l'indice de la dernière entrée à afficher dans le tableau
$scope.derniereEntree = function(){
var dern = $scope.pagination.pageCourante*$scope.pagination.entreesPages[$scope.pagination.choixEntreesPages].valeur;
$log.debug(dern);
if(dern < $scope.totalElements){
return dern;
}
else{
return dern-(dern-$scope.totalElements);
}
};
// On ajuste la sélection globale à chaque changement de page
$scope.$watch('pagination.pageCourante', function(){
var debut = $scope.premiereEntree();
var fin = $scope.derniereEntree();
var joueursTries = $filter('filter')($filter('orderBy')($scope.joueurs, $scope.colonneTri, $scope.inverserTri), $scope.recherche);
// Les indices sont équivalant à premiereEntree()-1 si il y a des entrées
if(debut){
debut--;
}
//$log.debug('Debut :' + debut + '- fin : ' + fin);
$scope.selectionGlobale = (debut !== fin);
for(var i=debut; i<fin; i++){
if(!joueursTries[i].selection){
$scope.selectionGlobale = false;
break;
}
}
});
// Traitements pour le démarrage
$scope.chargement= true;
$scope.chargerJoueursEquipe();
];
}]);
......@@ -13,258 +13,65 @@ var app = angular.module('panelAdminApp');
app.config(function($logProvider, apicallProvider, urlAPI){
apicallProvider.setUrl(urlAPI);
$logProvider.debugEnabled(false);
$logProvider.debugEnabled(true);
});
app.controller('JoueursEquipeCtrl', ['$scope', '$routeParams', '$filter', '$log', 'apicall', function ($scope, $routeParams, $filter, $log, apicall) {
/* Gestion des alertes */
$scope.alertes = [];
$scope.fermerAlerte = function(index){
$log.debug('Supression d\'une alerte dans le tableau des alertes');
$scope.alertes.splice(index, 1);
};
var supprimerAlertes = function(){
$scope.alertes = [];
};
var ajouterAlerte = function(type, message){
$log.debug('Ajout d\'une alerte dans le tableau des alertes');
$scope.alertes.push({type : 'alert-'+type, msg: message});
};
/* Gestion des éléments pour le triage */
$scope.entreesTri = [
{id: 'IdPlayer', nom: 'Id'},
{id: 'Team', nom: 'Équipe'},
{id: 'Name', nom: 'Nom'},
{id: 'FirstName', nom: 'Prénom'},
{id: 'Sex', nom: 'Sexe'},
{id: 'DateBirth', nom: 'Date de naissance'}
];
$scope.colonneTri = 'Name';
$scope.inverserTri = false;
$scope.entreeTriSelection = $scope.entreesTri[2].nom;
$scope.trierPar = function(entree){
$scope.colonneTri = entree.id;
$scope.entreeTriSelection = entree.nom;
};
/* Gestion des filtres du tableau */
$scope.affichageFiltres = false;
/* Gestion des joueurs */
$scope.totalElements = 0;
$scope.joueursEquipe = [];
$scope.chargerJoueursEquipe = function(){
$scope.chargement = true;
supprimerAlertes();
$scope.selectionGlobale = false;
$scope.nbSelection = 0;
apicall.getJoueursEquipe($routeParams.idEquipe).success(function(data){
$scope.joueursEquipe = data.players;
$scope.totalElements = $scope.joueursEquipe.length;
// Ajout d'un booleen selection et edition pour chaque joueur
for(var joueur in $scope.joueursEquipe){
joueur.selection = false;
joueur.chargement = false;
}
$scope.chargement = false; // Placé ici car fonction asynchrone
}).error(function(){
ajouterAlerte('danger', 'Impossible de récupérer la liste des joueurs de l\'équipe (cliquez sur actualiser pour essayer de recharger)');
$scope.joueursEquipe = [];
$scope.totalElements = 0;
$scope.chargement = false;
});
};
// Supprime une ligne (donc un joueur) dans le tableau
$scope.supprimerJoueur = function(idJoueur){
// Recherche du joueur
var index = $filter('joueurParId')($scope.joueursEquipe, idJoueur);
if(index === null){
$log.error('Tentative de suppression d\'un élément non-présent dans le modèle (Id = ' + idJoueur + ')');
return;
}
$log.debug('Supression du joueur avec Id = ' + idJoueur);
// Modification de la sélection
if($scope.joueursEquipe[index].selection){
$scope.nbSelection--;
}
$scope.joueursEquipe.splice(index, [1]);
$scope.totalElements--;
// Animation ?
};
/* Gestion des sélections */
$scope.selectionGlobale = false;
$scope.nbSelection = 0;
// Sélectionne/Déselectionne tous les joueurs de la page actuelle du tableau et change le nombre de joueurs sélectionné
$scope.changerSelectionGlobale = function(){
$log.debug('Changement de sélection globale');
$scope.selectionGlobale = !$scope.selectionGlobale;
var debut = $scope.premiereEntree()-1;
var fin = $scope.derniereEntree();
var joueursTries = $filter('filter')($filter('orderBy')($scope.joueursEquipe, $scope.colonneTri, $scope.inverserTri), $scope.recherche);
for(var i=debut; i<fin; i++){
// Changement du nombre d'éléments sélectionnés
if(joueursTries[i].selection && !$scope.selectionGlobale){
$scope.nbSelection--;
}
else if(!joueursTries[i].selection && $scope.selectionGlobale){
$scope.nbSelection++;
}
joueursTries[i].selection = $scope.selectionGlobale;
}
};
// Sélectionne/Déselectionne un joueur et change le nombre de joueurs sélectionné
$scope.selectionnerJoueur = function(joueur){
var changement = !joueur.selection;
joueur.selection = changement;
if(changement){
$scope.nbSelection++;
app.controller('JoueursEquipeCtrl', ['$scope', '$routeParams', 'apicall', function($scope, $routeParams, apicall) {
$scope.methodeMaj = apicall.getJoueursEquipe;
$scope.paramsMaj = [$routeParams.idEquipe];
$scope.infosJoueurs = [
{
nomTriage:'Id',
nomColonne:'#',
champs:'IdPlayer',
triable:true,
filtrable:false,
tailleColonne:1
},
{
nomTriage:'Équipe',
nomColonne:'Équipe',
champs:'Team',
triable:true,
filtrable:false,
tailleColonne:1
},
{
nomTriage:'Prénom',
nomColonne:'Prénom',
champs:'FirstName',
triable:true,
filtrable:true,
tailleColonne:1,
tailleFiltre:6
},
{
nomTriage:'Nom',
nomColonne:'Nom',
champs:'Name',
triable:true,
filtrable:true,
tailleColonne:2,
tailleFiltre:6
},
{
nomTriage:'Sexe',
nomColonne:'Sexe',
champs:'Sex',
triable:true,
filtrable:false,
tailleColonne:1
},
{
nomTriage:'Date de naissance',
nomColonne:'Date de naissance',
champs:'DateBirth',
triable:true,
filtrable:false,
tailleColonne:2
}
else{
$scope.nbSelection--;
}
};
// Supprime l'ensemble des joueurs sélectionnés
$scope.supprimerSelection = function(){
var selectJoueurs = $filter('joueurSelectionnes')($scope.joueursEquipe);
$log.debug('Id des joueurs à supprimer : ' + selectJoueurs.toString());
for(var i=0; i<selectJoueurs.length; i++){
$scope.supprimerJoueur(selectJoueurs[i]);
}
};
// À définir
$scope.ajouterJoueur = function(){
};
// Ajoute une ligne dan le tableau en vue de l'ajouter à la BDD via la fonction ajouterJoueur()
$scope.ajouterLigne = function(){
};
/* Gestion de la pagination */
$scope.pagination = {
entreesPages : [
{nom:'10', valeur:10},
{nom:'20', valeur:20},
{nom:'30', valeur:30},
{nom:'40', valeur:40},
{nom:'50', valeur:50}
],
choixEntreesPages : 0, // Index du tableau entreesPages
pageCourante : 1
};
$scope.changerEntreesPage = function(entree){