Commit 7590eaaa authored by El-gitano's avatar El-gitano

Modification du tirage du tournois pour correspondre aux attentes du client

Supression de code mort
Supressions des ng-controller dans les vues (déjà assigné par $route)
Impossibilité de sélectionner des dates de naissances incohérentes dans les modals pour les joueurs
parent 5f7e99e5
......@@ -9,6 +9,7 @@ Dans les calendrier ne pas pouvoir utiliser des dates > à la date courante et i
=== GENERAL ===
Supprimer l'ancien plugin de drag&drop
Fonctionnalité de vérification du tournois avant lancement
Différence entre phase init. et phase competition
Faire la documentation
......@@ -24,8 +25,7 @@ Différencier affichage des stats selon le public
Grand écran pour l'affichage des stats et matchs (x4)
=== TIRAGE ===
Placer
Corriger le bug de màj côté API/BDD
=== AUTH ===
......
......@@ -71,6 +71,9 @@
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
<script src="bower_components/angular-animate/angular-animate.js"></script>
<script src="bower_components/ngDraggable/ngDraggable.js"></script>
<script src="bower_components/jquery-ui/jquery-ui.js"></script>
<script src="bower_components/angular-dragdrop/src/angular-dragdrop.js"></script>
<!-- endbower -->
<!-- endbuild -->
......@@ -100,13 +103,11 @@
<script src="scripts/controllers/headercontroller.js"></script>
<script src="scripts/services/pays.js"></script>
<script src="scripts/directives/flagselector.js"></script>
<script src="scripts/services/alertservice.js"></script>
<script src="scripts/services/informer.js"></script>
<script src="scripts/directives/afficheurinfos.js"></script>
<script src="scripts/controllers/tirage.js"></script>
<script src="scripts/filters/exclude.js"></script>
<script src="scripts/filters/applatirtirage.js"></script>
<script src="scripts/filters/exclure.js"></script>
<script src="scripts/filters/preparetirage.js"></script>
<!-- endbuild -->
<!-- Ajouts persos -->
......
......@@ -7,7 +7,7 @@
* Module principal de l'application. Se charge de gérer les vues et controleurs a utiliser en fonction de la route
*/
angular
.module('panelAdminApp', ['ngRoute', 'ngAnimate' , 'ui.bootstrap'])
.module('panelAdminApp', ['ngRoute', 'ngAnimate' , 'ui.bootstrap', 'ngDragDrop'])
.config(['$routeProvider', '$httpProvider', '$logProvider', 'apicallProvider', 'urlAPI', function ($routeProvider, $httpProvider, $logProvider, apicallProvider, urlAPI) {
$logProvider.debugEnabled(true);
......@@ -58,7 +58,7 @@ angular
/*$rootScope.$on( "$routeChangeStart", function(event, next, current) {
// Pas authentifié
if ((!infosConnexion.login && !infosConnexion.password) || infosConnexion.token === ' ') {
if (infosConnexion.token === ' ' || !infosConnexion.login || !infosConnexion.password) {
if(next.templateUrl !== "views/authentification.html") {
......
......@@ -98,7 +98,7 @@ app.controller('EquipesCtrl', ['$scope', '$location', '$log', '$modal', 'apicall
equipe.IdTeam = entree.IdTeam; // Rajout de l'identifiant de l'équipe modifiée
apicall.setEquipe(equipe).success(function(data){
apicall.setEquipe(equipe).success(function(){
informer.informer('success', 'Équipe modifiée avec succès');
......@@ -156,7 +156,7 @@ app.controller('EquipesCtrl', ['$scope', '$location', '$log', '$modal', 'apicall
dialogue.result.then(function(infosEquipe) {
apicall.delEquipe(infosEquipe.entree).success(function(data){
apicall.delEquipe(infosEquipe.entree).success(function(){
informer.informer('success', 'Équipe réinitialisée avec succès');
//$scope.chargerEquipes();
......
......@@ -125,7 +125,7 @@ app.controller('JoueursCtrl', ['$scope', 'apicall', '$modal', '$log', 'informer'
dialogue.result.then(function(joueur){
apicall.setJoueur(joueur).then(function(donnees){
apicall.setJoueur(joueur).then(function(){
informer.informer('success', 'Joueur modifié avec succès');
},
......
......@@ -85,7 +85,7 @@ app.controller('JoueursEquipeCtrl', ['$scope', '$routeParams', '$modal', '$log',
apicall.addJoueur(joueur).success(function(donnees){
informer.informer('success', 'Joueur ajouté avec succès');
joueur.IdPlayer = data.playerId;
joueur.IdPlayer = donnees.playerId;
ajouterEntree(joueur);
}).error(function(){
......@@ -128,7 +128,7 @@ app.controller('JoueursEquipeCtrl', ['$scope', '$routeParams', '$modal', '$log',
dialogue.result.then(function (joueur) {
apicall.setJoueur(joueur).success(function(data){
apicall.setJoueur(joueur).success(function(){
informer.informer('success', 'Joueur modifié avec succès');
......@@ -171,7 +171,7 @@ app.controller('JoueursEquipeCtrl', ['$scope', '$routeParams', '$modal', '$log',
dialogue.result.then(function(donnees) {
apicall.delJoueur(donnees.entree).success(function(data){
apicall.delJoueur(donnees.entree).success(function(){
informer.informer('success', 'Joueur supprimé avec succès');
supprimerEntree(entree);
......@@ -199,5 +199,5 @@ app.controller('JoueursEquipeCtrl', ['$scope', '$routeParams', '$modal', '$log',
var supprimerEntree = function(entree){
$scope.entrees.splice($scope.entrees.indexOf(entree), 1);
}
};
}]);
......@@ -24,6 +24,8 @@ app.controller('AjoutJoueurCtrl', ['$scope','$modalInstance', '$filter', '$log',
$log.error('Erreur lors de l\'appel à l\'API');
});
$scope.today = new Date();
$scope.ok = function () {
$modalInstance.close($scope.joueur);
......
......@@ -9,82 +9,60 @@
*/
angular.module('panelAdminApp')
.controller('TirageCtrl', ['$scope', '$log', '$filter', 'apicall', 'informer', function ($scope, $log, $filter, apicall, informer) {
var copie = null;
var majOk = function(){
$log.info($scope.rencontres);
var cles = 0;
// Duplication ?
angular.forEach($scope.rencontres, function(valeur, cle){
var i = 0;
cles++;
angular.forEach($scope.rencontres, function(valeur2, cle2){
if(valeur === valeur2){
i++;
}
});
if(i>1){
informer.informer('warning', 'Vous avez des équipes présentes dans plus d\'une rencontre');
return false;
}
});
// Pas assez d'entrée
if(cles !== 8){
informer.informer('warning', 'Vous n\'avez pas entré toutes les rencontres');
return false;
}
return true;
};
// Récupération des équipes
apicall.getEquipes().success(function(donnees){
$scope.majTirage = function(){
$scope.equipes = donnees.teams;
if(majOk()){
apicall.setTirage($scope.rencontres).success(function(){
informer.informer('success', 'Tirage mis à jour avec succès');
copie = angular.copy($scope.rencontres);
// Récupération du tirage
apicall.getTirage().success(function(donnees){
$scope.tirage = $filter('applatirTirage')(donnees.matches);
}).error(function(){
informer.informer('danger', 'Impossible de mettre à jour le tirage');
angular.copy(copie, $scope.rencontres);
// Association des objets équipes aux entrées du tirage + suppression dans $scope.equipe
angular.forEach($scope.tirage, function(valeur, index){
if(valeur){
var temp = $filter('filter')($scope.equipes, {NameTeam:valeur});
// L'équipe est déjà dans l'arbre
if(temp){
$scope.tirage[index] = temp;
$scope.equipes.splice($scope.equipes.indexOf(temp), 1);
}
}
});
}
};
$scope.getNombre = function(taille){
return new Array(taille);
};
apicall.getTirage().success(function(donnees){
}).error(function(){
$scope.rencontres = $filter('applatirTirage')(donnees.matches);
copie = angular.copy($scope.rencontres);
informer.informer('danger', 'Impossible de récupérer les tirages');
});
}).error(function(){
informer.informer('danger', 'Impossible de récupérer les tirages');
informer.informer('danger', 'Impossible de récupérer la liste des équipes');
});
apicall.getEquipes().success(function(donnees){
$scope.listePays = donnees.teams;
$scope.$watchCollection('tirage', function(oldTirage, newTirage){
}).error(function(){
console.log($scope.tirage);
if(!angular.equals(oldTirage, newTirage) && $scope.tirage.indexOf(null) === -1){
informer.informer('danger', 'Impossible de récupérer la liste des pays');
$log.info('Mise à jour du tirage');
apicall.setTirage($scope.tirage).success(function(){
informer.informer('success', 'Tirage mis à jour avec succès');
}).error(function(){
informer.informer('danger', 'La mise à jour du tirage a rencontré une erreur');
});
}
});
}]);
......@@ -21,7 +21,7 @@ angular.module('panelAdminApp')
$scope.selectionnerEquipe = function(equipe){
$log.info('Selection de l\'équipe ' + equipe.NomPays);
//$log.info('Selection de l\'équipe ' + equipe.NomPays);
if($scope.oldSelection){
......@@ -31,7 +31,7 @@ angular.module('panelAdminApp')
equipe.selected = true;
$scope.oldSelection = equipe;
$log.info(equipe);
//$log.info(equipe);
$scope.elemSelection = {
......
......@@ -12,14 +12,22 @@ angular.module('panelAdminApp')
.filter('applatirTirage', function () {
return function (entree) {
var i = 0, res = {};
var res = [];
angular.forEach(entree, function(objet){
for(var i=0; i<4; i+=1){
res['team'+((i*2)+1)] = objet.Team_A;
res['team'+((i*2)+2)] = objet.Team_B;
i+=1;
});
if(entree[i]){
res[i*2] = entree[i].Team_A;
res[i*2+1] = entree[i].Team_B;
}
else{
res[i*2] = null;
res[i*2+1] = null;
}
}
return res;
};
......
'use strict';
/**
* @ngdoc filter
* @name panelAdminApp.filter:prepareTirage
* @function
* @description
* # prepareTirage
* Filter in the panelAdminApp.
*/
angular.module('panelAdminApp')
.filter('prepareTirage', function () {
return function (entree) {
var res = {};
for(var i =0; i<8; i+=1){
if(entree[i]){
res['team'+(i+1)] = entree[i].NameTeam;
}
else{
res['team'+(i+1)] = null;
}
}
return res;
};
});
......@@ -121,6 +121,8 @@ angular.module('panelAdminApp').
// Mise à jour du tirage
this.setTirage = function(infosTirage){
infosTirage = $filter('prepareTirage')(infosTirage);
return $http.put(url + '/tournament/tirage', infosTirage);
};
......
......@@ -347,3 +347,109 @@ div.centrer-cal table{
opacity:0.9;
z-index:1001;
}
/* Désign pour le tirage */
.drapeau-tirage{
display:block;
width:50px;
height:30px;
margin:4px auto;
}
.drapeaux-drop{
width:80px;
height:366px;
background-color:#eee;
margin:0 auto;
padding-top:5px;
border:1px solid #ccc;
border-radius:5px 5px 5px 5px;
}
.emplacement-tirage, .emplacement-drop{
border:1px solid #555;
border-radius:3px 3px 3px 3px;
margin:0 auto;
margin-bottom:5px;
}
.emplacement-tirage{
height:40px;
width:65px;
background-color:#bbb;
margin:4px auto;
}
.emplacement-drop{
height:50px;
width:75px;
background-color:#eee;
}
.emplacement-tirage-rempli{
z-index:100;
cursor: pointer;
}
.container-rencontre{
display:inline-block;
margin-right:-4px;
}
.ligne-rencontre{
display:inline-block;
border-top:1px solid black;
border-bottom:1px solid black;
border-right:1px solid black;
}
.ligne-rencontre-1{
height:56px;
width:55px;
margin-bottom:28px;
}
.ligne-rencontre-2{
height:128px;
width:55px;
margin-bottom:55px;
}
.ligne-rencontre-3{
height:260px;
width:55px;
margin-bottom:120px;
}
.ligne-finale{
display:inline-block;
width:55px;
border-bottom:1px solid black;
margin-bottom:250px;
}
<div ng-app="panelAdminApp" ng-controller="AuthentificationCtrl" id="auth" class="container container-auth">
<div ng-app="panelAdminApp" id="auth" class="container container-auth">
<alert role="alert" ng-repeat="alerte in alertes" type="{{alerte.type}}" close="fermerAlerte($index)">{{alerte.msg}}</alert>
......
<div ng-app="panelAdminApp" ng-controller="EquipesCtrl" id="equipes" class="container-fluid">
<div ng-app="panelAdminApp" id="equipes" class="container-fluid">
<tableau editable="false" selectionnable="false" paginer="false" boutons-edition="boutonsEdition" entrees="entrees" fct-maj="methodeMaj" fct-ajout="fonctionAjout" infos="infosEquipes" attr-entrees="teams" titre="Tableau des équipes"></tableau>
......
<div id="container-joueurs" ng-app="panelAdminApp" ng-controller="JoueursCtrl" class="container-fluid">
<div id="container-joueurs" ng-app="panelAdminApp" class="container-fluid">
<tableau editable="true" selectionnable="false" paginer="true" entrees="entrees" boutons-edition="boutonsEdition" fct-maj="methodeMaj" fct-ajout="fonctionAjout" infos="infosJoueurs" attr-entrees="players" titre="Tableau des joueurs"></tableau>
......
<div ng-app="panelAdminApp" ng-controller="JoueursEquipeCtrl" id="container-joueurs" class="container-fluid">
<div ng-app="panelAdminApp" id="container-joueurs" class="container-fluid">
<tableau editable="true" selectionnable="false" boutons-edition="boutonsEdition" entrees="entrees" fct-maj="methodeMaj" params-maj="paramsMaj" fct-ajout="fonctionAjout" infos="infosJoueurs" attr-entrees="players" titre="{{titreTableau}}"></tableau>
......
......@@ -36,7 +36,7 @@
<div class="form-group">
<label for="dnaiss">Date de naissance :</label>
<div>
<datepicker ng-model="joueur.DateBirth" class="centrer-cal" starting-day="1" show-weeks="false"></datepicker>
<datepicker ng-model="joueur.DateBirth" class="centrer-cal" starting-day="1" show-weeks="false" min-date="01-01-1900" max-date="today"></datepicker>
</div>
</div>
</form>
......
<div id="container-tirage" ng-app="panelAdminApp" ng-controller="TirageCtrl" class="container-fluid">
<div id="container-tirage" ng-app="panelAdminApp" class="container-fluid">
<div ng-repeat="i in getNombre(4) track by $index" class="row container-rencontre">
<p class="text-center well">Rencontre n°{{$index+1}}</p>
<div class="row">
<h2 class="text-center">Établissement du tirage</h2>
</div>
<div class="row">
<div class="row">
<div class="col-sm-5 text-center">
Équipe A
</div>
<div class="col-sm-5 col-sm-offset-2 text-center">
Équipe B
<!-- Colonne des drapeaux -->
<div class="col-sm-6 text-center">
<p> Équipes </p>
<div class="drapeaux-drop" jqyoui-droppable="{multiple:true, onDrop:majTirage()}" data-drop="true" ng-model="equipes">
<div ng-repeat="equipe in equipes" >
<div class="emplacement-tirage emplacement-tirage-rempli" data-drag="true" ng-model="equipes" jqyoui-draggable="{index: {{$index}}}" data-jqyoui-options="{revert: 'invalid'}">
<img ng-src="http://5.196.21.161/drapeaux/{{equipe.NameTeam | lowercase}}.png" alt="{{equipe.CompleteName}}" class="drapeau-tirage" />
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5 text-center">
<!-- Colonne de la grille du tirage -->
<div class="col-sm-6 text-center">
<!-- Ensemble du tirage -->
<div class="container-rencontre">
<!-- Quadruple rencontre -->
<div class="container-rencontre">
<select ng-model="rencontres['team'+(($index*2)+1)]" class="form-control" >
<option ng-repeat="pays in listePays" value="{{pays.NameTeam}}">{{pays.CompleteName}}</option>
<!-- TODO À changer quand ce sera OK -->
</select>
</div>
<div class="col-sm-2 text-center">
VS
<div>
<!-- Double rencontre -->
<div class="container-rencontre">
<!-- Equipe 1 vs Equipe 2 -->
<div>
<div class="container-rencontre">
<div class="emplacement-drop" data-drop="true" jqyoui-droppable="{index: 0}" ng-model="tirage">
<div class="emplacement-tirage emplacement-tirage-rempli" data-drag="true" ng-model="tirage" jqyoui-draggable="{index: 0}" ng-if="tirage[0]" data-jqyoui-options="{revert: 'invalid'}">
<img ng-src="http://5.196.21.161/drapeaux/{{tirage[0].NameTeam | lowercase}}.png" alt="{{tirage[0].CompleteName}}" class="drapeau-tirage" />
</div>
</div>
<div class="emplacement-drop" data-drop="true" jqyoui-droppable="{index: 1}" ng-model="tirage">
<div class="emplacement-tirage emplacement-tirage-rempli" data-drag="true" ng-model="tirage" jqyoui-draggable="{index: 1}" ng-if="tirage[1]" data-jqyoui-options="{revert: 'invalid'}">
<img ng-src="http://5.196.21.161/drapeaux/{{tirage[1].NameTeam | lowercase}}.png" alt="{{tirage[1].CompleteName}}" class="drapeau-tirage" />
</div>
</div>
</div>
<div class="ligne-rencontre ligne-rencontre-1">
</div>
</div>
<!-- Equipe 3 vs Equipe 4 -->
<div>
<div class="container-rencontre">
<div class="emplacement-drop" data-drop="true" jqyoui-droppable="{index: 2}" ng-model="tirage">
<div class="emplacement-tirage emplacement-tirage-rempli" data-drag="true" ng-model="tirage" jqyoui-draggable="{index: 2}" ng-if="tirage[2]" data-jqyoui-options="{revert: 'invalid'}">
<img ng-src="http://5.196.21.161/drapeaux/{{tirage[2].NameTeam | lowercase}}.png" alt="{{tirage[2].CompleteName}}" class="drapeau-tirage" />
</div>
</div>
<div class="emplacement-drop" data-drop="true" jqyoui-droppable="{index: 3}" ng-model="tirage">
<div class="emplacement-tirage emplacement-tirage-rempli" data-drag="true" ng-model="tirage" jqyoui-draggable="{index: 3}" ng-if="tirage[3]" data-jqyoui-options="{revert: 'invalid'}">
<img ng-src="http://5.196.21.161/drapeaux/{{tirage[3].NameTeam | lowercase}}.png" alt="{{tirage[3].CompleteName}}" class="drapeau-tirage" />
</div>
</div>
</div>
<div class="ligne-rencontre ligne-rencontre-1">
</div>
</div>
</div>
<!-- Fin double rencontre -->
<div class="ligne-rencontre ligne-rencontre-2"></div>
</div>
<div>
<!-- Double rencontre -->
<div class="container-rencontre">
<!-- Equipe 5 vs Equipe 6 -->
<div>
<div class="container-rencontre">
<div class="emplacement-drop" data-drop="true" jqyoui-droppable="{index: 4}" ng-model="tirage">
<div class="emplacement-tirage emplacement-tirage-rempli" data-drag="true" ng-model="tirage" jqyoui-draggable="{index: 4}" ng-if="tirage[4]" data-jqyoui-options="{revert: 'invalid'}">
<img ng-src="http://5.196.21.161/drapeaux/{{tirage[4].NameTeam | lowercase}}.png" alt="{{tirage[4].CompleteName}}" class="drapeau-tirage" />
</div>
</div>
<div class="emplacement-drop" data-drop="true" jqyoui-droppable="{index: 5}" ng-model="tirage">