rajah пре 10 месеци
родитељ
комит
ebbc4956c4
34 измењених фајлова са 199 додато и 118 уклоњено
  1. 9 5
      src/app/app.routes.ts
  2. 1 1
      src/app/composants/categorie-create/categorie-create.component.ts
  3. 1 1
      src/app/composants/categorie-details/categorie-details.component.ts
  4. 6 15
      src/app/composants/categorie-list/categorie-list.component.ts
  5. 1 1
      src/app/composants/categorie-update/categorie-update.component.ts
  6. 14 14
      src/app/composants/menu/menu.component.html
  7. 0 10
      src/app/composants/menu/menu.component.ts
  8. 1 1
      src/app/composants/participant-create/participant-create.component.ts
  9. 1 1
      src/app/composants/participant-details/participant-details.component.ts
  10. 2 2
      src/app/composants/participant-list/participant-list.component.html
  11. 2 9
      src/app/composants/participant-list/participant-list.component.ts
  12. 1 1
      src/app/composants/participant-update/participant-update.component.ts
  13. 0 0
      src/app/composants/poll-list/poll-list.component.css
  14. 33 0
      src/app/composants/poll-list/poll-list.component.html
  15. 29 0
      src/app/composants/poll-list/poll-list.component.ts
  16. 2 1
      src/app/composants/production-create/production-create.component.html
  17. 1 1
      src/app/composants/production-create/production-create.component.ts
  18. 2 1
      src/app/composants/production-details/production-details.component.html
  19. 1 1
      src/app/composants/production-details/production-details.component.ts
  20. 4 13
      src/app/composants/production-list/production-list.component.ts
  21. 2 1
      src/app/composants/production-update/production-update.component.html
  22. 1 1
      src/app/composants/production-update/production-update.component.ts
  23. 1 1
      src/app/composants/production-upload/production-upload.component.ts
  24. 0 0
      src/app/composants/result-list/result-list.component.css
  25. 31 0
      src/app/composants/result-list/result-list.component.html
  26. 27 0
      src/app/composants/result-list/result-list.component.ts
  27. 1 1
      src/app/composants/show-links/show-links.component.ts
  28. 4 13
      src/app/composants/show-list/show-list.component.ts
  29. 1 1
      src/app/composants/show-upload/show-upload.component.ts
  30. 1 1
      src/app/composants/variable-create/variable-create.component.ts
  31. 1 1
      src/app/composants/variable-details/variable-details.component.ts
  32. 4 13
      src/app/composants/variable-list/variable-list.component.ts
  33. 1 1
      src/app/composants/variable-update/variable-update.component.ts
  34. 13 6
      src/app/services/categorie.service.ts

+ 9 - 5
src/app/app.routes.ts

@@ -35,6 +35,8 @@ import { ProductionUploadComponent } from './composants/production-upload/produc
 import { ShowListComponent } from './composants/show-list/show-list.component';
 import { ShowLinksComponent } from './composants/show-links/show-links.component';
 import { ShowUploadComponent } from './composants/show-upload/show-upload.component';
+import { PollListComponent } from './composants/poll-list/poll-list.component';
+import { ResultListComponent } from './composants/result-list/result-list.component';
 
 export const routes: Routes = [
   {path: '', redirectTo: 'home', pathMatch: 'full'},
@@ -46,26 +48,28 @@ export const routes: Routes = [
   {path: 'account-details', component: AccountDetailsComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
   {path: 'account-update', component: AccountUpdateComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
   {path: 'account-password', component: AccountPasswordComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
-  {path: 'variable-list/:refresh', component: VariableListComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always'},
+  {path: 'variable-list', component: VariableListComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always'},
   {path: 'variable-create', component: VariableCreateComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always'},
   {path: 'variable-details/:numeroVariable', component: VariableDetailsComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always'},
   {path: 'variable-update/:numeroVariable', component: VariableUpdateComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always'},
-  {path: 'categorie-list/:refresh', component: CategorieListComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
+  {path: 'categorie-list', component: CategorieListComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
   {path: 'categorie-create', component: CategorieCreateComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
   {path: 'categorie-details/:numeroCategorie', component: CategorieDetailsComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
   {path: 'categorie-update/:numeroCategorie', component: CategorieUpdateComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
-  {path: 'participant-list/:refresh', component: ParticipantListComponent, canActivate: [OrgaGuard], runGuardsAndResolvers: 'always' },
+  {path: 'participant-list', component: ParticipantListComponent, canActivate: [OrgaGuard], runGuardsAndResolvers: 'always' },
   {path: 'participant-create', component: ParticipantCreateComponent, canActivate: [OrgaGuard], runGuardsAndResolvers: 'always' },
   {path: 'participant-details/:numeroParticipant', component: ParticipantDetailsComponent, canActivate: [OrgaGuard], runGuardsAndResolvers: 'always' },
   {path: 'participant-update/:numeroParticipant', component: ParticipantUpdateComponent, canActivate: [OrgaGuard], runGuardsAndResolvers: 'always' },
-  {path: 'production-list/:refresh', component: ProductionListComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
+  {path: 'production-list', component: ProductionListComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
   {path: 'production-create', component: ProductionCreateComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
   {path: 'production-details/:numeroProduction', component: ProductionDetailsComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
   {path: 'production-update/:numeroProduction', component: ProductionUpdateComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
   {path: 'production-upload/:numeroProduction', component: ProductionUploadComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
-  {path: 'show-list/:refresh', component: ShowListComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
+  {path: 'show-list', component: ShowListComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
   {path: 'show-links/:numeroCategorie', component: ShowLinksComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
   {path: 'show-upload/:numeroProduction', component: ShowUploadComponent, canActivate: [AdminGuard], runGuardsAndResolvers: 'always' },
+  {path: 'poll-list', component: PollListComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
+  {path: 'result-list', component: ResultListComponent, canActivate: [UserGuard], runGuardsAndResolvers: 'always' },
 ];
 
 @NgModule({

+ 1 - 1
src/app/composants/categorie-create/categorie-create.component.ts

@@ -21,6 +21,6 @@ export class CategorieCreateComponent implements OnInit
 
   addCategorie() { if (this.categorieForm.valid) { this.saveCategorie(); } }
 
-  goToListCategorie() { this.router.navigate(['/categorie-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListCategorie() { this.router.navigate(['/categorie-list']); }
 
 }

+ 1 - 1
src/app/composants/categorie-details/categorie-details.component.ts

@@ -26,6 +26,6 @@ export class CategorieDetailsComponent implements OnInit
 
   updateCategorie(id: number) { this.router.navigate(['/categorie-update', id]); }
 
-  goToListCategorie() { this.router.navigate(['/categorie-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListCategorie() { this.router.navigate(['/categorie-list']); }
 
 }

+ 6 - 15
src/app/composants/categorie-list/categorie-list.component.ts

@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
 
 import { MenuComponent } from '../menu/menu.component';
 import { Categorie } from '../../interfaces/categorie';
@@ -9,7 +9,6 @@ import { CategorieService } from '../../services/categorie.service';
 
 export class CategorieListComponent implements OnInit
 {
-  refresh: number = 0;
 
   categories: Categorie[] = [];
 
@@ -17,19 +16,11 @@ export class CategorieListComponent implements OnInit
     private categorieService: CategorieService,
     private router: Router,
     private route: ActivatedRoute
-  )
-  {
-    this.router.routeReuseStrategy.shouldReuseRoute = function() { return false; }
-    this.router.events.subscribe((evt) => { if (evt instanceof NavigationEnd) { this.router.navigated = false; window.scrollTo(0, 0); } });
-  }
-
-  ngOnInit()
-  {
-    this.refresh = this.route.snapshot.params['refresh'];
-    this.goToRefreshListCategorie();
-  }
-
-  private retreiveDatas() { this.categorieService.getListCategorie().subscribe(data => { this.categories = data; }); }
+  ) { }
+
+  ngOnInit() { this.goToRefreshListCategorie(); }
+
+  private retreiveDatas() { this.categorieService.getListCategorie(true).subscribe(data => { this.categories = data; }); }
 
   goToRefreshListCategorie() { this.retreiveDatas(); }
 

+ 1 - 1
src/app/composants/categorie-update/categorie-update.component.ts

@@ -27,6 +27,6 @@ export class CategorieUpdateComponent implements OnInit
 
   deleteConfirmed() { this.categorieService.deleteCategorie(this.numeroCategorie).subscribe(() => { this.goToListCategorie(); }); }
 
-  goToListCategorie() { this.router.navigate(['/categorie-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListCategorie() { this.router.navigate(['/categorie-list']); }
 
 }

+ 14 - 14
src/app/composants/menu/menu.component.html

@@ -21,9 +21,9 @@
 
 		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
 
-    <li><a routerLink="/production-list/0" routerLinkActive="active" #prodsicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
-		<li><a routerLink="/vote-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
-		<li><a routerLink="/result-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
+    <li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
+		<li><a routerLink="/vote-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
+		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
 
 	</ul>
 </div>
@@ -40,11 +40,11 @@
 
 		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
 
-    <li><a routerLink="/participant-list/0" routerLinkActive="active" #usersicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
+    <li><a routerLink="/participant-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
 
-    <li><a routerLink="/production-list/0" routerLinkActive="active" #prodsicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
-		<li><a routerLink="/vote-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
-		<li><a routerLink="/result-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
+    <li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
+		<li><a routerLink="/vote-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
+		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
 	</ul>
 </div>
 
@@ -60,15 +60,15 @@
 
 		<li><a routerLink="/chat" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Messagerie" placement="right" container="body"><i class="fa-solid fa-comments"></i></a></li>
 
-    <li><a routerLink="/participant-list/0" routerLinkActive="active" #usersicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
+    <li><a routerLink="/participant-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Participants" placement="right" container="body"><i class="fa-solid fa-users"></i></a></li>
 
-    <li><a routerLink="/categorie-list/0" routerLinkActive="active" #compoicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Catégories" placement="right" container="body"><i class="fa-solid fa-layer-group"></i></a></li>
-    <li><a routerLink="/production-list/0" routerLinkActive="active" #prodsicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
-		<li><a routerLink="/show-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Présentations" placement="right" container="body"><i class="fa-solid fa-display"></i></a></li>
-		<li><a routerLink="/poll-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
-		<li><a routerLink="/result-list/0" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
+    <li><a routerLink="/categorie-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Catégories" placement="right" container="body"><i class="fa-solid fa-layer-group"></i></a></li>
+    <li><a routerLink="/production-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Productions" placement="right" container="body"><i class="fa-solid fa-save"></i></a></li>
+		<li><a routerLink="/show-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Présentations" placement="right" container="body"><i class="fa-solid fa-display"></i></a></li>
+		<li><a routerLink="/poll-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Voter" placement="right" container="body"><i class="fa-solid fa-vote-yea"></i></a></li>
+		<li><a routerLink="/result-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Résultats" placement="right" container="body"><i class="fa-solid fa-trophy"></i></a></li>
 
-    <li><a routerLink="/variable-list/0" routerLinkActive="active" #variaicon class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Paramétrages" placement="right" container="body"><i class="fa-solid fa-sliders-h"></i></a></li>
+    <li><a routerLink="/variable-list" routerLinkActive="active" class="nav-link rounded-0 bg-gradient" i18n-tooltip tooltip="Paramétrages" placement="right" container="body"><i class="fa-solid fa-sliders-h"></i></a></li>
 	</ul>
 </div>
 

+ 0 - 10
src/app/composants/menu/menu.component.ts

@@ -20,11 +20,6 @@ export class MenuComponent implements OnInit
   private timedOut: boolean = false;
   @ViewChild('signouticon', {static: false}) signOutIcon!: ElementRef;
 
-  @ViewChild('usersicon', {static: false}) usersIcon!: ElementRef;
-  @ViewChild('compoicon', {static: false}) compoIcon!: ElementRef;
-  @ViewChild('prodsicon', {static: false}) prodsIcon!: ElementRef;
-  @ViewChild('variaicon', {static: false}) variaIcon!: ElementRef;
-
   constructor(private idle: Idle, private router: Router, private accountService: AccountService, private el: ElementRef, private renderer: Renderer2)
   {
     this.idle.setIdle(900);
@@ -56,9 +51,4 @@ export class MenuComponent implements OnInit
   showPendingLogout() { if (this.logged) { if (this.signOutIcon) { this.renderer.addClass(this.signOutIcon.nativeElement, 'fa-beat-fade'); this.renderer.addClass(this.signOutIcon.nativeElement, 'text-danger'); } } }
   hidePendingLogout() { if (this.logged) { if (this.signOutIcon) { this.renderer.removeClass(this.signOutIcon.nativeElement, 'fa-beat-fade'); this.renderer.removeClass(this.signOutIcon.nativeElement, 'text-danger'); } } }
 
-  activeUsersIcon() { if (this.usersIcon) { this.renderer.addClass(this.usersIcon.nativeElement, 'active'); } }
-  activeCompoIcon() { if (this.compoIcon) { this.renderer.addClass(this.compoIcon.nativeElement, 'active'); } }
-  activeProdsIcon() { if (this.prodsIcon) { this.renderer.addClass(this.prodsIcon.nativeElement, 'active'); } }
-  activeVariaIcon() { if (this.variaIcon) { this.renderer.addClass(this.variaIcon.nativeElement, 'active'); } }
-
 }

+ 1 - 1
src/app/composants/participant-create/participant-create.component.ts

@@ -46,6 +46,6 @@ export class ParticipantCreateComponent implements OnInit
 
   addParticipant() { if (this.participantForm.valid) { this.saveParticipant(); } }
 
-  goToListParticipant() { this.router.navigate(['/participant-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListParticipant() { this.router.navigate(['/participant-list']); }
 
 }

+ 1 - 1
src/app/composants/participant-details/participant-details.component.ts

@@ -48,6 +48,6 @@ export class ParticipantDetailsComponent implements OnInit
 
   updateParticipant(id: number) { this.router.navigate(['/participant-update', id]); }
 
-  goToListParticipant() { this.router.navigate(['/participant-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListParticipant() { this.router.navigate(['/participant-list']); }
 
 }

+ 2 - 2
src/app/composants/participant-list/participant-list.component.html

@@ -27,7 +27,7 @@
 				<div class="input-group input-group-sn">
 					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled><span i18n>Réglement</span></button>
 				  <select class="form-select form-select-sm field-separate" id="select_statut" [(ngModel)]="statutFiltre" (change)="filtrageParStatut($event)">
-						<option value="0"></option>
+						<option value="0">Indifférent</option>
 						<option value="1"><span i18n>En attente</span></option>
 				  </select>
 			  </div>
@@ -36,7 +36,7 @@
 				<div class="input-group input-group-sn">
 					<button type="button" class="btn bg-gradient btn-secondary btn-sm field-separate" disabled><span i18n>Arrivé(s)</span></button>
 				  <select class="form-select form-select-sm field-separate" id="select_arrive" [(ngModel)]="arriveFiltre" (change)="filtrageParArrive($event)">
-					  <option value="0"></option>
+					  <option value="0">Indifférent</option>
 						<option value="1"><span i18n>Non</span></option>
 						<option value="2"><span i18n>Oui</span></option>
 				  </select>

+ 2 - 9
src/app/composants/participant-list/participant-list.component.ts

@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
 import { FormsModule, NgForm } from '@angular/forms';
 import { TooltipModule } from 'ngx-bootstrap/tooltip';
 
@@ -13,7 +13,6 @@ import { DiversService } from '../../services/divers.service'
 
 export class ParticipantListComponent implements OnInit
 {
-  refresh: number = 0;
 
   journees: Journees = new Journees();
 
@@ -31,16 +30,10 @@ export class ParticipantListComponent implements OnInit
     private participantService: ParticipantService,
     private router: Router,
     private route: ActivatedRoute
-  )
-  {
-    this.router.routeReuseStrategy.shouldReuseRoute = function() { return false; }
-    this.router.events.subscribe((evt) => { if (evt instanceof NavigationEnd) { this.router.navigated = false; window.scrollTo(0, 0); } });
-  }
+  ) { }
 
   ngOnInit()
   {
-    this.refresh = this.route.snapshot.params['refresh'];
-
     this.journees = new Journees();
     this.diversService.getJournees().subscribe(data => { this.journees = data; });
 

+ 1 - 1
src/app/composants/participant-update/participant-update.component.ts

@@ -51,6 +51,6 @@ export class ParticipantUpdateComponent implements OnInit
 
   deleteConfirmed() { this.participantService.deleteParticipant(this.numeroParticipant).subscribe(() => { this.goToListParticipant(); }); }
 
-  goToListParticipant() { this.router.navigate(['/participant-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListParticipant() { this.router.navigate(['/participant-list']); }
 
 }

+ 0 - 0
src/app/composants/poll-list/poll-list.component.css


+ 33 - 0
src/app/composants/poll-list/poll-list.component.html

@@ -0,0 +1,33 @@
+<app-menu></app-menu>
+<div id="main">
+  <div class="card shadow">
+    <div class="card-header"><span i18n>Votes</span></div>
+  	<div class="card-header shadow-sm">
+  		<div class="row">
+  			<div class="form-group col-sm-4 label-nobr">
+  				<button type="button" (click)="goToRefreshListCategorie()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;<span i18n>Actualiser</span></button>
+  			</div>
+  		</div>
+  	</div>
+  	<div class="card-body">
+  		<table class="table table-sm">
+  			<thead class="thead-dark">
+  				<tr>
+            <th class="fs-6 label-nobr"><small><span i18n>Catégorie</span></small></th>
+  					<th class="fs-6 label-nobr"><small><span i18n>Vote ouvert</span></small></th>
+  					<th class="fs-6 label-nobr"><small><span i18n>Vote terminé</span></small></th>
+  				</tr>
+  			</thead>
+  			<tbody>
+  				@for (categorie of categories; track categorie.numeroCategorie) {
+  				<tr>
+            <td class="label-nobr"><a (click)="voteCategorie(categorie.numeroCategorie)" class="link-primary pointeur-souris text-decoration-none">{{ categorie.libelle }}</a>&nbsp;&nbsp;</td>
+  					<td>@if (categorie.pollable) { <i class="fa-solid fa-circle-check text-success"></i> } @else { <i class="fa-solid fa-circle-xmark text-danger"></i> }&nbsp;&nbsp;</td>
+  					<td>@if (categorie.computed) { <i class="fa-solid fa-circle-check text-success"></i> } @else { <i class="fa-solid fa-circle-xmark text-danger"></i> }&nbsp;&nbsp;</td>
+  				</tr>
+  				}
+  			</tbody>
+  		</table>
+  	</div>
+  </div>
+</div>

+ 29 - 0
src/app/composants/poll-list/poll-list.component.ts

@@ -0,0 +1,29 @@
+import { Component, OnInit } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+
+import { MenuComponent } from '../menu/menu.component';
+import { Categorie } from '../../interfaces/categorie';
+import { CategorieService } from '../../services/categorie.service';
+
+@Component({ selector: 'app-poll-list', imports: [MenuComponent], templateUrl: './poll-list.component.html', styleUrl: './poll-list.component.css' })
+
+export class PollListComponent implements OnInit
+{
+
+  categories: Categorie[] = [];
+
+  constructor(
+    private categorieService: CategorieService,
+    private router: Router,
+    private route: ActivatedRoute
+  ) { }
+
+  ngOnInit() { this.goToRefreshListCategorie(); }
+
+  private retreiveDatas() { this.categorieService.getListCategorie(false).subscribe(data => { this.categories = data; }); }
+
+  goToRefreshListCategorie() { this.retreiveDatas(); }
+
+  voteCategorie(id: number) { this.router.navigate(['/poll-details', id]); }
+
+}

+ 2 - 1
src/app/composants/production-create/production-create.component.html

@@ -48,7 +48,7 @@
 			</div>
 
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire affiché</span></label>
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire"></textarea>
 				</div>
@@ -86,6 +86,7 @@
 				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Vignette</span></label>
 				<div class="col-sm-8">
 					<input type="file" class="form-control form-control-sm field-separate" id="vignette" name="vignette" accept="image/png, image/gif, image/jpeg" (change)="onVignetteSelected($event)">
+					<div class="form-text field-separate"><span i18n>Les participants ne peuvent voir ce visuel qu'à partir des votes. Sa présence facilite les répérages pour les administrateurs avant les présentations, et à tous pour répérer ses choix au moment des votes.</span></div>
 				</div>
 			</div>
 

+ 1 - 1
src/app/composants/production-create/production-create.component.ts

@@ -146,6 +146,6 @@ export class ProductionCreateComponent implements OnInit
 
   addProduction() { if (this.productionForm.valid) { this.saveProduction(); } }
 
-  goToListProduction() { this.router.navigate(['/production-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListProduction() { this.router.navigate(['/production-list']); }
 
 }

+ 2 - 1
src/app/composants/production-details/production-details.component.html

@@ -61,7 +61,7 @@
 		</div>
 
 		<div class="form-group row">
-			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
+			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire affiché</span></label>
 			<div class="col-sm-8">
 				<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire" disabled></textarea>
 			</div>
@@ -93,6 +93,7 @@
 			<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Vignette</span></label>
 			<div class="col-sm-8">
 				<img [src]="production.vignette" alt="" class="img-fluid rounded-2">
+				<div class="form-text field-separate"><span i18n>Les participants ne peuvent voir ce visuel qu'à partir des votes. Sa présence facilite les répérages pour les administrateurs avant les présentations, et à tous pour répérer ses choix au moment des votes.</span></div>
 			</div>
 		</div>
 

+ 1 - 1
src/app/composants/production-details/production-details.component.ts

@@ -30,6 +30,6 @@ export class ProductionDetailsComponent implements OnInit
 
   updateProduction(id: number) { this.router.navigate(['/production-update', id]); }
 
-  goToListProduction() { this.router.navigate(['/production-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListProduction() { this.router.navigate(['/production-list']); }
 
 }

+ 4 - 13
src/app/composants/production-list/production-list.component.ts

@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
 import { FormsModule, NgForm } from '@angular/forms';
 import { saveAs } from 'file-saver';
 import { TooltipModule } from 'ngx-bootstrap/tooltip';
@@ -12,7 +12,6 @@ import { ProductionService } from '../../services/production.service';
 
 export class ProductionListComponent implements OnInit
 {
-  refresh: number = 0;
 
   productions: ProductionShort[] = [];
 
@@ -24,17 +23,9 @@ export class ProductionListComponent implements OnInit
     private productionService: ProductionService,
     private router: Router,
     private route: ActivatedRoute
-  )
-  {
-    this.router.routeReuseStrategy.shouldReuseRoute = function() { return false; }
-    this.router.events.subscribe((evt) => { if (evt instanceof NavigationEnd) { this.router.navigated = false; window.scrollTo(0, 0); } });
-  }
-
-  ngOnInit()
-  {
-    this.refresh = this.route.snapshot.params['refresh'];
-    this.goToRefreshListProduction();
-  }
+  ) { }
+
+  ngOnInit() { this.goToRefreshListProduction(); }
 
   private retreiveDatas() { this.productionService.getListProduction(this.typeFiltre, this.soloFiltre).subscribe(data => { this.productions = data; }); }
 

+ 2 - 1
src/app/composants/production-update/production-update.component.html

@@ -62,7 +62,7 @@
 			</div>
 
 			<div class="form-group row">
-				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire</span></label>
+				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Commentaire affiché</span></label>
 				<div class="col-sm-8">
 					<textarea class="form-control form-control-sm field-separate" id="commentaire" name="commentaire" [(ngModel)]="production.commentaire"></textarea>
 				</div>
@@ -90,6 +90,7 @@
 				<label class="col-sm-4 col-form-label col-form-label-sm label-nobr"><span i18n>Vignette</span></label>
 				<div class="col-sm-8">
 					<input type="file" class="form-control form-control-sm field-separate" id="vignette" name="vignette" accept="image/png, image/gif, image/jpeg" (change)="onVignetteSelected($event)">
+					<div class="form-text field-separate"><span i18n>Les participants ne peuvent voir ce visuel qu'à partir des votes. Sa présence facilite les répérages pour les administrateurs avant les présentations, et à tous pour répérer ses choix au moment des votes.</span></div>
 				</div>
 			</div>
 

+ 1 - 1
src/app/composants/production-update/production-update.component.ts

@@ -54,6 +54,6 @@ export class ProductionUpdateComponent implements OnInit
 
   deleteConfirmed() { this.productionService.deleteProduction(this.numeroProduction).subscribe(() => { this.goToListProduction(); }); }
 
-  goToListProduction() { this.router.navigate(['/production-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListProduction() { this.router.navigate(['/production-list']); }
 
 }

+ 1 - 1
src/app/composants/production-upload/production-upload.component.ts

@@ -114,6 +114,6 @@ export class ProductionUploadComponent implements OnInit
 
   addProductionFile() { this.saveProduction(); }
 
-  goToListProduction() { this.router.navigate(['/production-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListProduction() { this.router.navigate(['/production-list']); }
 
 }

+ 0 - 0
src/app/composants/result-list/result-list.component.css


+ 31 - 0
src/app/composants/result-list/result-list.component.html

@@ -0,0 +1,31 @@
+<app-menu></app-menu>
+<div id="main">
+  <div class="card shadow">
+    <div class="card-header"><span i18n>Résultats</span></div>
+  	<div class="card-header shadow-sm">
+  		<div class="row">
+  			<div class="form-group col-sm-4 label-nobr">
+  				<button type="button" (click)="goToRefreshListCategorie()" class="btn bg-gradient btn-primary btn-sm" style="margin-right: 5px;"><i class="fa-solid fa-rotate"></i>&nbsp;<span i18n>Actualiser</span></button>
+  			</div>
+  		</div>
+  	</div>
+  	<div class="card-body">
+  		<table class="table table-sm">
+  			<thead class="thead-dark">
+  				<tr>
+            <th class="fs-6 label-nobr"><small><span i18n>Catégorie</span></small></th>
+            <th class="fs-6 label-nobr"><small><span i18n>TODO : tout sur même page</span></small></th>
+  				</tr>
+  			</thead>
+  			<tbody>
+  				@for (categorie of categories; track categorie.numeroCategorie) {
+  				<tr>
+            <td class="label-nobr"><a class="link-primary pointeur-souris text-decoration-none">{{ categorie.libelle }}</a>&nbsp;&nbsp;</td>
+  					<td>@if (categorie.displayable) { <i class="fa-solid fa-circle-check text-success"></i> } @else { <i class="fa-solid fa-circle-xmark text-danger"></i> }&nbsp;&nbsp;</td>
+  				</tr>
+  				}
+  			</tbody>
+  		</table>
+  	</div>
+  </div>
+</div>

+ 27 - 0
src/app/composants/result-list/result-list.component.ts

@@ -0,0 +1,27 @@
+import { Component, OnInit } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+
+import { MenuComponent } from '../menu/menu.component';
+import { Categorie } from '../../interfaces/categorie';
+import { CategorieService } from '../../services/categorie.service';
+
+@Component({ selector: 'app-result-list', imports: [MenuComponent], templateUrl: './result-list.component.html', styleUrl: './result-list.component.css' })
+
+export class ResultListComponent implements OnInit
+{
+
+  categories: Categorie[] = [];
+
+  constructor(
+    private categorieService: CategorieService,
+    private router: Router,
+    private route: ActivatedRoute
+  ) { }
+
+  ngOnInit() { this.goToRefreshListCategorie(); }
+
+  private retreiveDatas() { this.categorieService.getListCategorie(false).subscribe(data => { this.categories = data; }); }
+
+  goToRefreshListCategorie() { this.retreiveDatas(); }
+
+}

+ 1 - 1
src/app/composants/show-links/show-links.component.ts

@@ -57,7 +57,7 @@ export class ShowLinksComponent implements OnInit
   resetLettre() { this.indexLettre = 0; }
   nextLettre(): string { if ((this.indexLettre >= 0) && (this.indexLettre < 26)) { this.indexLettre++; return "#" + this.lettresOrdre[this.indexLettre - 1];  } return ""; }
 
-  goToListPresentations() { this.router.navigate(['/show-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListPresentations() { this.router.navigate(['/show-list']); }
 
   changeEtatBoutonsUnlinked(event: any)
   {

+ 4 - 13
src/app/composants/show-list/show-list.component.ts

@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
 import { FormsModule, NgForm } from '@angular/forms';
 import { TooltipModule } from 'ngx-bootstrap/tooltip';
 import { saveAs } from 'file-saver';
@@ -16,7 +16,6 @@ import { ProductionService } from '../../services/production.service';
 
 export class ShowListComponent implements OnInit
 {
-  refresh: number = 0;
 
   categories: Categorie[] = [];
 
@@ -29,21 +28,13 @@ export class ShowListComponent implements OnInit
     private productionService: ProductionService,
     private router: Router,
     private route: ActivatedRoute
-  )
-  {
-    this.router.routeReuseStrategy.shouldReuseRoute = function() { return false; }
-    this.router.events.subscribe((evt) => { if (evt instanceof NavigationEnd) { this.router.navigated = false; window.scrollTo(0, 0); } });
-  }
+  ) { }
 
-  ngOnInit()
-  {
-    this.refresh = this.route.snapshot.params['refresh'];
-    this.goToRefreshListCategorie();
-  }
+  ngOnInit() { this.goToRefreshListCategorie(); }
 
   private retreiveDatas()
   {
-    this.categorieService.getListCategorie().subscribe(data => { this.categories = data; });
+    this.categorieService.getListCategorie(false).subscribe(data => { this.categories = data; });
     this.presentationService.getListProduction().subscribe(data => { this.productions = data; });
   }
 

+ 1 - 1
src/app/composants/show-upload/show-upload.component.ts

@@ -79,6 +79,6 @@ export class ShowUploadComponent implements OnInit
 
   addPresentationFile() { this.saveMedia(); }
 
-  goToListPresentation() { this.router.navigate(['/show-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListPresentation() { this.router.navigate(['/show-list']); }
 
 }

+ 1 - 1
src/app/composants/variable-create/variable-create.component.ts

@@ -24,6 +24,6 @@ export class VariableCreateComponent implements OnInit
 
   addVariable() { if (this.variableForm.valid) { this.saveVariable(); } }
 
-  goToListVariable() { this.router.navigate(['/variable-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListVariable() { this.router.navigate(['/variable-list']); }
 
 }

+ 1 - 1
src/app/composants/variable-details/variable-details.component.ts

@@ -25,6 +25,6 @@ export class VariableDetailsComponent implements OnInit
 
   updateVariable(id: number) { this.router.navigate(['/variable-update', id]); }
 
-  goToListVariable() { this.router.navigate(['/variable-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListVariable() { this.router.navigate(['/variable-list']); }
 
 }

+ 4 - 13
src/app/composants/variable-list/variable-list.component.ts

@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
 import { MenuComponent } from '../menu/menu.component';
 import { Variable, VariableType } from '../../interfaces/variable';
 import { VariableService } from '../../services/variable.service';
@@ -9,7 +9,6 @@ import { FormsModule, NgForm } from '@angular/forms';
 
 export class VariableListComponent implements OnInit
 {
-  refresh: number = 0;
 
   types: VariableType[] = [];
   typeFiltre: string = "";
@@ -21,17 +20,9 @@ export class VariableListComponent implements OnInit
     private route: ActivatedRoute,
     private router: Router,
     private menu: MenuComponent
-  )
-  {
-    this.router.routeReuseStrategy.shouldReuseRoute = function() { return false; }
-    this.router.events.subscribe((evt) => { if (evt instanceof NavigationEnd) { this.router.navigated = false; window.scrollTo(0, 0); } });
-  }
-
-  ngOnInit()
-  {
-    this.refresh = this.route.snapshot.params['refresh'];
-    this.goToRefreshListVariable();
-  }
+  ) { }
+
+  ngOnInit() { this.goToRefreshListVariable(); }
 
   private retreiveDatas() { this.variableService.getListVariable(this.typeFiltre).subscribe(data => { this.variables = data; }); }
   private retreiveTypes() { this.variableService.getOptionListVariableType().subscribe(data => { this.types = data; }); }

+ 1 - 1
src/app/composants/variable-update/variable-update.component.ts

@@ -28,6 +28,6 @@ export class VariableUpdateComponent implements OnInit
 
   deleteConfirmed() { this.variableService.deleteVariable(this.numeroVariable).subscribe(() => { this.goToListVariable(); });  }
 
-  goToListVariable() { this.router.navigate(['/variable-list', this.menu.getRandomInteger(1, 100000)]); }
+  goToListVariable() { this.router.navigate(['/variable-list']); }
 
 }

+ 13 - 6
src/app/services/categorie.service.ts

@@ -1,19 +1,26 @@
 import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http'
+import { HttpClient, HttpParams } from '@angular/common/http'
 import { Observable } from 'rxjs';
 import { Environnement } from '../env';
 import { Categorie } from '../interfaces/categorie';
 
 @Injectable({ providedIn: 'root' })
 
-export class CategorieService 
+export class CategorieService
 {
 
   private baseURL = Environnement.apiUrl + "categorie";
 
   constructor(private httpClient: HttpClient) { }
-  
-  getListCategorie(): Observable<Categorie[]>{ return this.httpClient.get<Categorie[]>(`${this.baseURL}/list`); }
+
+  getListCategorie(admin: boolean): Observable<Categorie[]>
+  {
+    let params = new HttpParams();
+
+    params = params.append('admin', admin);
+
+    return this.httpClient.get<Categorie[]>(`${this.baseURL}/list`, { params: params });
+  }
 
   createCategorie(categorie: Categorie): Observable<Object>{ return this.httpClient.post(`${this.baseURL}/create`, categorie); }
 
@@ -22,5 +29,5 @@ export class CategorieService
   updateCategorie(id: number, categorie: Categorie): Observable<Object>{ return this.httpClient.put(`${this.baseURL}/update/${id}`, categorie); }
 
   deleteCategorie(id: number): Observable<Object>{ return this.httpClient.delete(`${this.baseURL}/delete/${id}`); }
-  
-}
+
+}