diff --git a/.vscode/settings.json b/.vscode/settings.json index 38a5306b5d41ad590e6f78981d6c59e71a6f8489..3a69a3f046bcf29fdf3f0b127f25b8e770965bfc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,6 +30,7 @@ "cSpell.language": "fr,en", "cSpell.words": [ "carto", + "cnfs", "covid", "demarch", "facebook", diff --git a/Dockerfile b/Dockerfile index a0382ac55e64fc1b2397003394871e201c4fc43f..52b4cffe4ae1582a02de1a267b33c8bfcbdd95a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Stage 0, based on Node.js, to build and compile Angular ARG DEPENDENCY_PROXY= -FROM ${DEPENDENCY_PROXY}node:14.20-slim as build +FROM ${DEPENDENCY_PROXY}node:14.20-slim AS build WORKDIR /app diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts index eb4d6760c9aa67dd68ba273111fa7405b7306c4e..719de652e1a6340ccba74349660188014eb7cbed 100644 --- a/src/app/admin/admin-routing.module.ts +++ b/src/app/admin/admin-routing.module.ts @@ -2,6 +2,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component'; import { DeletedStructuresComponent } from './components/deleted-structures/deleted-structures.component'; +import { EspaceCoopCNFSComponent } from './components/espace-coop-cnfs/espace-coop-cnfs.component'; import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component'; import { ManageEmployersComponent } from './components/manage-employers/manage-employers.component'; import { ManageJobsComponent } from './components/manage-jobs/manage-jobs.component'; @@ -37,6 +38,10 @@ export const AdminRoutes = { link: 'admin/structure-list', path: 'structure-list', }, + espaceCoopCNFS: { + link: 'admin/espaceCoopCNFS', + path: 'espaceCoopCNFS', + }, }; const routes: Routes = [ @@ -54,6 +59,7 @@ const routes: Routes = [ path: AdminRoutes.structuresList.path, component: AdminStructuresListComponent, }, + { path: AdminRoutes.espaceCoopCNFS.path, component: EspaceCoopCNFSComponent }, ]; @NgModule({ imports: [RouterModule.forChild(routes)], diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index 498247f2f6367c7d748b96589e94b7b24ff08368..42cf737cf2148c7f2c685640836defc0efb65c9c 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -5,6 +5,7 @@ import { SharedModule } from '../shared/shared.module'; import { AdminRoutingModule } from './admin-routing.module'; import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component'; import { DeletedStructuresComponent } from './components/deleted-structures/deleted-structures.component'; +import { EspaceCoopCNFSComponent } from './components/espace-coop-cnfs/espace-coop-cnfs.component'; import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component'; import { DeleteEmployerComponent } from './components/manage-employers/delete-employer/delete-employer.component'; import { ManageEmployersComponent } from './components/manage-employers/manage-employers.component'; @@ -46,6 +47,7 @@ import { AdminStructuresListComponent } from './components/structures-list/admin ManageEmployersComponent, DeletedStructuresComponent, NavBarComponent, + EspaceCoopCNFSComponent, ], imports: [CommonModule, AdminRoutingModule, SharedModule, AgGridModule], }) diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html new file mode 100644 index 0000000000000000000000000000000000000000..efceca730865e1f0476ea00a395309e7ec64166f --- /dev/null +++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html @@ -0,0 +1,29 @@ +<app-admin-nav-bar /> +<div class="adminLayout"> + <h2>CNFS présents dans Espace Coop sans compte Rés'in ({{ unregisteredCNFS.length }})</h2> + <ag-grid-angular + *ngIf="unregisteredCNFS.length" + class="ag-theme-alpine user-table" + rowSelection="multiple" + domLayout="autoHeight" + style="width: 100%" + [rowData]="unregisteredCNFS" + [columnDefs]="unregisteredColumnDefs" + [getRowHeight]="getRowHeight" + > + </ag-grid-angular> + <p *ngIf="!unregisteredCNFS.length">Tous les CNFS dans Espace Coop ont un compte Rés'in</p> + + <h2>CNFS présents dans Rés'in mais pas dans Espace Coop ({{ cnfsNotInEspaceCoop.length }})</h2> + <ag-grid-angular + *ngIf="cnfsNotInEspaceCoop.length" + class="ag-theme-alpine user-table" + rowSelection="multiple" + domLayout="autoHeight" + style="width: 100%" + [rowData]="cnfsNotInEspaceCoop" + [columnDefs]="notInEspaceCoopColumnDefs" + > + </ag-grid-angular> + <p *ngIf="!cnfsNotInEspaceCoop.length">Tous les CNFS dans Rés'in sont présents dans Espace Coop</p> +</div> diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.spec.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..4c0e3abc9d9377a2b993bc89e3edf99283de7893 --- /dev/null +++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EspaceCoopCNFSComponent } from './espace-coop-cnfs.component'; + +describe('EspaceCoopCnfsComponent', () => { + let component: EspaceCoopCNFSComponent; + let fixture: ComponentFixture<EspaceCoopCNFSComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EspaceCoopCNFSComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(EspaceCoopCNFSComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..39d13ae1116238d5238acb12655ffbd75b3ce5ee --- /dev/null +++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts @@ -0,0 +1,90 @@ +import { Component, OnInit } from '@angular/core'; +import { ColDef } from 'ag-grid-community'; +import { User } from '../../../models/user.model'; +import { AdminService } from '../../services/admin.service'; +import { EspaceCoopCNFS } from './../../../models/espaceCoopCNFS.model'; + +@Component({ + selector: 'app-espace-coop-cnfs', + templateUrl: './espace-coop-cnfs.component.html', + styleUrls: ['../../admin.scss'], +}) +export class EspaceCoopCNFSComponent implements OnInit { + public unregisteredCNFS: EspaceCoopCNFS[] = []; + public unregisteredColumnDefs: ColDef<EspaceCoopCNFS>[] = [ + { + headerName: 'Nom', + field: 'name', + sortable: true, + sort: 'asc', + resizable: true, + }, + { + headerName: 'Employeur', + field: 'employer', + sortable: true, + // Case insensitive alphabetical order + comparator: (a, b) => a.toLowerCase().localeCompare(b.toLowerCase()), + flex: 1, + resizable: true, + }, + { + headerName: 'Structures', + field: 'structures', + cellRenderer: (param) => param.data.structures.join('<br/>'), + flex: 1, + resizable: true, + }, + { + headerName: 'Email', + field: 'email', + flex: 1, + resizable: true, + }, + { + headerName: 'Téléphone', + field: 'phone', + resizable: true, + }, + ]; + + public cnfsNotInEspaceCoop: User[] = []; + public notInEspaceCoopColumnDefs: ColDef<User>[] = [ + { + headerName: 'Prénom', + field: 'name', + sortable: true, + }, + { + headerName: 'Nom', + field: 'surname', + sort: 'asc', + }, + { + headerName: 'Email', + field: 'email', + }, + { + headerName: 'Téléphone', + field: 'phone', + }, + ]; + + public getRowHeight(params: { data: EspaceCoopCNFS }): number { + const structures = params.data.structures || []; + if (structures.length <= 1) return 40; + return structures.length * 40; + } + + constructor(private adminService: AdminService) {} + ngOnInit(): void { + this.adminService.getAllEspaceCoopCNFS().subscribe((espaceCoopCNFS) => { + this.unregisteredCNFS = espaceCoopCNFS.filter((member) => !member.hasAccount); + this.adminService.getAllResinCNFS().subscribe((resinCNFS) => { + this.cnfsNotInEspaceCoop = resinCNFS.filter( + (resin) => !espaceCoopCNFS.some((coop) => coop.email === resin.email) + ); + }); + }); + } +} diff --git a/src/app/admin/components/manage-employers/manage-employers.component.ts b/src/app/admin/components/manage-employers/manage-employers.component.ts index a1e1b5c4f90e53cbe1e95efc42fca7dc9ff233f2..94b05ddab61f2753d394cd40f3ec28b4a0136556 100644 --- a/src/app/admin/components/manage-employers/manage-employers.component.ts +++ b/src/app/admin/components/manage-employers/manage-employers.component.ts @@ -247,6 +247,8 @@ export class ManageEmployersComponent implements OnInit { } public getRowHeight(params): number { - return params.data.users ? (params.data.users.length != 0 ? params.data.users.length * 40 : 40) : 40; + const users = params.data.users || []; + if (users.length <= 1) return 40; + return users.length * 40; } } diff --git a/src/app/admin/components/manage-jobs/manage-jobs.component.ts b/src/app/admin/components/manage-jobs/manage-jobs.component.ts index 53e3cd480580d58cba28c8ea1a559bb6754c1b27..51175803a8ff3400b7932b641aea9b27ff23c76e 100644 --- a/src/app/admin/components/manage-jobs/manage-jobs.component.ts +++ b/src/app/admin/components/manage-jobs/manage-jobs.component.ts @@ -439,10 +439,14 @@ export class ManageJobsComponent implements OnInit { } public getUsersRowHeight(params): number { - return params.data.users && params.data.users.length !== 0 ? params.data.users.length * 40 : 40; + const users = params.data.users || []; + if (users.length <= 1) return 40; + return users.length * 40; } public getJobsRowHeight(params): number { - return params.data.jobs && params.data.jobs.length !== 0 ? params.data.jobs.length * 40 : 40; + const jobs = params.data.jobs || []; + if (jobs.length <= 1) return 40; + return jobs.length * 40; } } diff --git a/src/app/admin/components/manage-users/manage-users.component.ts b/src/app/admin/components/manage-users/manage-users.component.ts index 5390bee31a2a712d8ac263d70a57e136e442fd4e..ad7d513991c543ae74d5b906c195f9bfbffe0ef7 100644 --- a/src/app/admin/components/manage-users/manage-users.component.ts +++ b/src/app/admin/components/manage-users/manage-users.component.ts @@ -325,7 +325,8 @@ export class ManageUsersComponent { } public getRowHeight(params): number { - return params.data.structures?.length * 40 || 40; + const structures = params.data.structures || []; + return structures.length !== 0 ? structures.length * 40 : 40; } public onGridReady(params: GridReadyEvent, status: UsersStatus): void { diff --git a/src/app/admin/components/nav-bar/nav-bar.component.html b/src/app/admin/components/nav-bar/nav-bar.component.html index dcc0fe9dfac180726e0f7fe3cbfe800c756574af..6b2045c757274d3e4cd458a315f315a8b8112307 100644 --- a/src/app/admin/components/nav-bar/nav-bar.component.html +++ b/src/app/admin/components/nav-bar/nav-bar.component.html @@ -31,6 +31,11 @@ [style]="buttonTypeEnum.Secondary" (click)="router.navigateByUrl(routes.employersList.link)" /> + <app-button + [text]="'CNFS Espace Coop'" + [style]="buttonTypeEnum.Secondary" + (click)="router.navigateByUrl(routes.espaceCoopCNFS.link)" + /> <app-button [text]="'Infos covid'" [style]="buttonTypeEnum.Secondary" diff --git a/src/app/admin/services/admin.service.ts b/src/app/admin/services/admin.service.ts index 7041279ec68fb5b85d24525ac0f1314d4f19a487..805b79d836b940155381698353015ad4925444e6 100644 --- a/src/app/admin/services/admin.service.ts +++ b/src/app/admin/services/admin.service.ts @@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { Employer } from '../../models/employer.model'; +import { EspaceCoopCNFS } from '../../models/espaceCoopCNFS.model'; import { Job } from '../../models/job.model'; import { JobGroup } from '../../models/jobGroup.model'; import { Structure } from '../../models/structure.model'; @@ -208,4 +209,12 @@ export class AdminService { public restoreDeletedStructure(structureId: string): Observable<void> { return this.http.post<void>(`${this.baseUrl}/restoreDeletedStructure/${structureId}`, {}); } + + public getAllEspaceCoopCNFS() { + return this.http.get<EspaceCoopCNFS[]>(`${this.baseUrl}/espaceCoopCNFS`); + } + + public getAllResinCNFS() { + return this.http.get<User[]>(`${this.baseUrl}/resinCNFS`); + } } diff --git a/src/app/models/espaceCoopCNFS.model.ts b/src/app/models/espaceCoopCNFS.model.ts new file mode 100644 index 0000000000000000000000000000000000000000..db152fe42010ec7eb8aed3d78e78374927b1039a --- /dev/null +++ b/src/app/models/espaceCoopCNFS.model.ts @@ -0,0 +1,8 @@ +export interface EspaceCoopCNFS { + name: string; + email?: string; + phone?: string; + employer: string; + structures: string[]; + hasAccount: boolean; +}