Mise à jour de l'API collaborateur du serveur EP (partiellement testé)

develop
Yanaël GRETTE 4 years ago
parent ef948a59d8
commit 194e67135c
  1. 371
      EPAServeur/Controllers/CollaborateursApi.cs
  2. 11
      EPAServeur/IServices/ICollaborateurService.cs
  3. 509
      EPAServeur/Services/CollaborateurService.cs

@ -18,6 +18,11 @@ using IO.Swagger.Attributes;
using IO.Swagger.Security; using IO.Swagger.Security;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using IO.Swagger.DTO; using IO.Swagger.DTO;
using Microsoft.Extensions.Logging;
using EPAServeur.IServices;
using System.Threading.Tasks;
using IO.Swagger.ClientCollaborateur;
using EPAServeur.Exceptions;
namespace IO.Swagger.Controllers namespace IO.Swagger.Controllers
{ {
@ -27,6 +32,21 @@ namespace IO.Swagger.Controllers
[ApiController] [ApiController]
public class CollaborateursApiController : ControllerBase public class CollaborateursApiController : ControllerBase
{ {
private readonly ICollaborateurService collaborateurService;
private readonly ILogger<CollaborateursApiController> logger;
private readonly IAuthorizationService authorizationService;
public CollaborateursApiController(ICollaborateurService _collaborateurService, ILogger<CollaborateursApiController> _logger, IAuthorizationService _authorizationService)
{
collaborateurService = _collaborateurService;
logger = _logger;
authorizationService = _authorizationService;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -39,7 +59,7 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs/{idCollaborateur}")] [Route("/api/collaborateurs/{idCollaborateur}")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetCollaborateurById")] [SwaggerOperation("GetCollaborateurById")]
[SwaggerResponse(statusCode: 200, type: typeof(CollaborateurDTO), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(CollaborateurDTO), description: "OK")]
@ -47,8 +67,64 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetCollaborateurById([FromRoute][Required]Guid? idCollaborateur) public virtual async Task<IActionResult> GetCollaborateurById([FromRoute][Required]Guid? idCollaborateur)
{
CollaborateurDTO collaborateurDTO;
try
{
collaborateurDTO = await collaborateurService.GetCollaborateurByIdAsync(idCollaborateur);
}
catch (ApiException e)
{
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (CollaborateurNotFoundException e)
{
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 404,
Message = e.Message,
};
return NotFound(erreurDTO);
}
catch (Exception e)
{ {
logger.LogError(e.Message);
//TODO : vérifier des cas d'erreur possible avant ?...
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 500,
Message = "Une erreur interne est survenue sur le serveur",
};
return StatusCode(500, erreurDTO);
}
// Si l'utilisateur connecté est un collaborateur, on vérifie si il est autorisé à accéder au détail du collaborateur
if (User.IsInRole("Collaborateur"))
{
//Le collaborateur récupère ses informations
if (!(await authorizationService.AuthorizeAsync(User, collaborateurDTO, "SameMailRequirement")).Succeeded)
{
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 403,
Message = "Accès interdit",
};
return StatusCode(403, erreurDTO);
}
//TODO : Le collaborateur récupère les informations d'un collaborateur dont il est référentEP
//TODO : Le collaborateur récupère les informations d'un collaborateur dont il est référent de l'EP actuel
}
return Ok(collaborateurDTO);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(CollaborateurDTO)); // return StatusCode(200, default(CollaborateurDTO));
@ -63,13 +139,7 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "{\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n}";
var example = exampleJson != null
? JsonConvert.DeserializeObject<CollaborateurDTO>(exampleJson)
: default(CollaborateurDTO); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -83,8 +153,8 @@ namespace IO.Swagger.Controllers
/// <response code="404">La ressource n&#x27;a pas été trouvée</response> /// <response code="404">La ressource n&#x27;a pas été trouvée</response>
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs/{mail}")] [Route("/api/collaborateurs/{mail}/mail")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetCollaborateurByMail")] [SwaggerOperation("GetCollaborateurByMail")]
[SwaggerResponse(statusCode: 200, type: typeof(CollaborateurDTO), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(CollaborateurDTO), description: "OK")]
@ -92,8 +162,65 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetCollaborateurByMail([FromRoute][Required]string mail) public virtual async Task<IActionResult> GetCollaborateurByMail([FromRoute][Required]string mail)
{
CollaborateurDTO collaborateurDTO;
try
{
collaborateurDTO = await collaborateurService.GetCollaborateurByMailAsync(mail);
}
catch (ApiException e)
{
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (CollaborateurNotFoundException e)
{
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 404,
Message = e.Message,
};
return NotFound(erreurDTO);
}
catch (Exception e)
{
logger.LogError(e.Message);
//TODO : vérifier des cas d'erreur possible avant ?...
ErreurDTO erreurDTO = new ErreurDTO()
{ {
Code = 500,
Message = "Une erreur interne est survenue sur le serveur",
};
return StatusCode(500, erreurDTO);
}
// Si l'utilisateur connecté est un collaborateur, on vérifie si il est autorisé à accéder au détail du collaborateur
if (User.IsInRole("Collaborateur"))
{
//Le collaborateur récupère ses informations
if (!(await authorizationService.AuthorizeAsync(User, collaborateurDTO, "SameMailRequirement")).Succeeded)
{
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 403,
Message = "Accès interdit",
};
return StatusCode(403, erreurDTO);
}
//TODO : Le collaborateur récupère les informations d'un collaborateur dont il est référentEP
//TODO : Le collaborateur récupère les informations d'un collaborateur dont il est référent de l'EP actuel
}
return Ok(collaborateurDTO);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(CollaborateurDTO)); // return StatusCode(200, default(CollaborateurDTO));
@ -108,13 +235,6 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "{\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n}";
var example = exampleJson != null
? JsonConvert.DeserializeObject<CollaborateurDTO>(exampleJson)
: default(CollaborateurDTO); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -136,15 +256,41 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs")] [Route("/api/collaborateurs")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetCollaborateurs")] [SwaggerOperation("GetCollaborateurs")]
[SwaggerResponse(statusCode: 200, type: typeof(List<CollaborateurDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<CollaborateurDTO>), description: "OK")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetCollaborateurs([FromQuery]List<string> roles, [FromQuery]List<long?> idBUs, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin) public virtual async Task<IActionResult> GetCollaborateurs([FromQuery]List<string> roles, [FromQuery]List<long?> idBUs, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin)
{
IEnumerable<CollaborateurDTO> collaborateurs;
try
{ {
collaborateurs = await collaborateurService.GetCollaborateursAsync(roles, idBUs, asc, numPage, parPAge, texte, tri, dateDebut, dateFin);
}
catch (ApiException e)
{
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (Exception e)
{
logger.LogError(e.Message);
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 500,
Message = "Une erreur interne est survenue",
};
return StatusCode(500, erreurDTO);
}
return Ok(collaborateurs);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(List<CollaborateurDTO>)); // return StatusCode(200, default(List<CollaborateurDTO>));
@ -156,13 +302,6 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n} ]";
var example = exampleJson != null
? JsonConvert.DeserializeObject<List<CollaborateurDTO>>(exampleJson)
: default(List<CollaborateurDTO>); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -182,7 +321,7 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs/referent/{idReferent}")] [Route("/api/collaborateurs/referent/{idReferent}")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetCollaborateursByReferent")] [SwaggerOperation("GetCollaborateursByReferent")]
[SwaggerResponse(statusCode: 200, type: typeof(List<CollaborateurDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<CollaborateurDTO>), description: "OK")]
@ -190,8 +329,45 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetCollaborateursByReferent([FromRoute][Required]Guid? idReferent, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri) public virtual async Task<IActionResult> GetCollaborateursByReferent([FromRoute][Required]Guid? idReferent, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
{
IEnumerable<CollaborateurDTO> collaborateurs;
try
{
collaborateurs = await collaborateurService.GetCollaborateursByReferentAsync(idReferent, asc, numPage, parPAge, texte, tri);
}
catch (ApiException e)
{
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (ReferentNotFoundException e)
{ {
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 404,
Message = e.Message,
};
return NotFound(erreurDTO);
}
catch (Exception e)
{
logger.LogError(e.Message);
//TODO : vérifier des cas d'erreur possible avant ?...
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 500,
Message = "Une erreur interne est survenue sur le serveur",
};
return StatusCode(500, erreurDTO);
}
return Ok(collaborateurs);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(List<CollaborateurDTO>)); // return StatusCode(200, default(List<CollaborateurDTO>));
@ -206,13 +382,6 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n} ]";
var example = exampleJson != null
? JsonConvert.DeserializeObject<List<CollaborateurDTO>>(exampleJson)
: default(List<CollaborateurDTO>); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -231,15 +400,51 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs/referent/{idReferent}/count")] [Route("/api/collaborateurs/referent/{idReferent}/count")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetCollaborateursByReferentCount")] [SwaggerOperation("GetCollaborateursByReferentCount")]
[SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetCollaborateursByReferentCount([FromRoute][Required]Guid? idReferent, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri) public virtual async Task<IActionResult> GetCollaborateursByReferentCount([FromRoute][Required]Guid? idReferent, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri)
{
int collaborateurs;
try
{
collaborateurs = await collaborateurService.GetCollaborateursCountByReferentAsync(idReferent, texte);
}
catch (ApiException e)
{
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (ReferentNotFoundException e)
{ {
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 404,
Message = e.Message,
};
return NotFound(erreurDTO);
}
catch (Exception e)
{
logger.LogError(e.Message);
//TODO : vérifier des cas d'erreur possible avant ?...
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 500,
Message = "Une erreur interne est survenue sur le serveur",
};
return StatusCode(500, erreurDTO);
}
return Ok(collaborateurs);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(long?)); // return StatusCode(200, default(long?));
@ -251,13 +456,6 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "0";
var example = exampleJson != null
? JsonConvert.DeserializeObject<long?>(exampleJson)
: default(long?); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -279,15 +477,42 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs/count")] [Route("/api/collaborateurs/count")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetCollaborateursCount")] [SwaggerOperation("GetCollaborateursCount")]
[SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(long?), description: "OK")]
[SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")] [SwaggerResponse(statusCode: 401, type: typeof(ErreurDTO), description: "L&#x27;utilisateur souhaitant accéder à la ressource n&#x27;est pas authentifié")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetCollaborateursCount([FromQuery]List<string> roles, [FromQuery]List<long?> idBUs, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin) public virtual async Task<IActionResult> GetCollaborateursCount([FromQuery]List<string> roles, [FromQuery]List<long?> idBUs, [FromQuery]bool? asc, [FromQuery]int? numPage, [FromQuery][Range(5, 100)]int? parPAge, [FromQuery]string texte, [FromQuery]string tri, [FromQuery]DateTime? dateDebut, [FromQuery]DateTime? dateFin)
{
int collaborateurs;
try
{
collaborateurs = await collaborateurService.GetCollaborateursCountAsync(roles, idBUs, texte, dateDebut, dateFin);
}
catch (ApiException e)
{
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (Exception e)
{
logger.LogError(e.Message);
//TODO : vérifier des cas d'erreur possible avant ?...
ErreurDTO erreurDTO = new ErreurDTO()
{ {
Code = 500,
Message = "Une erreur interne est survenue sur le serveur",
};
return StatusCode(500, erreurDTO);
}
return Ok(collaborateurs);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(long?)); // return StatusCode(200, default(long?));
@ -299,13 +524,7 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "0";
var example = exampleJson != null
? JsonConvert.DeserializeObject<long?>(exampleJson)
: default(long?); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -320,7 +539,7 @@ namespace IO.Swagger.Controllers
/// <response code="500">Une erreur est survenue sur le serveur</response> /// <response code="500">Une erreur est survenue sur le serveur</response>
[HttpGet] [HttpGet]
[Route("/api/collaborateurs/{idCollaborateur}/ep/referents")] [Route("/api/collaborateurs/{idCollaborateur}/ep/referents")]
[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)] //[Authorize(AuthenticationSchemes = BearerAuthenticationHandler.SchemeName)]
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("GetReferentsPrecedentEPCollaborateur")] [SwaggerOperation("GetReferentsPrecedentEPCollaborateur")]
[SwaggerResponse(statusCode: 200, type: typeof(List<CollaborateurDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<CollaborateurDTO>), description: "OK")]
@ -328,8 +547,43 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "L’utilisateur souhaitant accéder à la ressource n’a pas les droits d’accès suffisants")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "La ressource n&#x27;a pas été trouvée")]
[SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")] [SwaggerResponse(statusCode: 500, type: typeof(ErreurDTO), description: "Une erreur est survenue sur le serveur")]
public virtual IActionResult GetReferentsPrecedentEPCollaborateur([FromRoute][Required]Guid? idCollaborateur) public virtual async Task<IActionResult> GetReferentsPrecedentEPCollaborateur([FromRoute][Required]Guid? idCollaborateur)
{
IEnumerable<CollaborateurDTO> referents = null;
try
{
referents = await collaborateurService.GetReferentsPrecedentsEPAsync(idCollaborateur);
}
catch (CollaborateurNotFoundException e) {
ErreurDTO erreur = new ErreurDTO()
{
Code = 404,
Message = e.Message
};
return NotFound(erreur);
}
catch (ApiException e)
{ {
logger.LogError(e.Message);
ErreurDTO erreur = new ErreurDTO()
{
Code = 500,
Message = "Une erreur est survenue lors de la récupération des données collaborateurs"
};
return StatusCode(500, erreur);
}
catch (Exception e)
{
logger.LogError(e.Message);
//TODO : vérifier des cas d'erreur possible avant ?...
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = 500,
Message = "Une erreur interne est survenue sur le serveur",
};
return StatusCode(500, erreurDTO);
}
return Ok(referents);
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(200, default(List<CollaborateurDTO>)); // return StatusCode(200, default(List<CollaborateurDTO>));
@ -344,13 +598,6 @@ namespace IO.Swagger.Controllers
//TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //TODO: Uncomment the next line to return response 500 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(500, default(ErreurDTO)); // return StatusCode(500, default(ErreurDTO));
string exampleJson = null;
exampleJson = "[ {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n}, {\n \"businessUnit\" : {\n \"agence\" : {\n \"bu\" : [ null, null ],\n \"id\" : 6,\n \"nom\" : \"nom\"\n },\n \"id\" : 0,\n \"nom\" : \"nom\"\n },\n \"mailApside\" : \"\",\n \"dateArrivee\" : \"2000-01-23T04:56:07.000+00:00\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"dateDepart\" : \"2000-01-23T04:56:07.000+00:00\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\"\n} ]";
var example = exampleJson != null
? JsonConvert.DeserializeObject<List<CollaborateurDTO>>(exampleJson)
: default(List<CollaborateurDTO>); //TODO: Change the data returned
return new ObjectResult(example);
} }
} }
} }

@ -15,10 +15,17 @@ namespace EPAServeur.IServices
Task<CollaborateurDTO> GetCollaborateurByIdAsync(Guid? id); Task<CollaborateurDTO> GetCollaborateurByIdAsync(Guid? id);
CollaborateurDTO GetCollaborateurByMail(string mail); CollaborateurDTO GetCollaborateurByMail(string mail);
Task<CollaborateurDTO> GetCollaborateurByMailAsync(string mail); Task<CollaborateurDTO> GetCollaborateurByMailAsync(string mail);
IEnumerable<CollaborateurDTO> GetCollaborateurs(bool? asc, int? numPage, int? parPage, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri); IEnumerable<CollaborateurDTO> GetCollaborateurs(List<string> roles, List<long?> idBUs, bool? asc, int? numPage, int? parPAge, string texte, string tri, DateTime? dateDebut, DateTime? dateFin);
Task<IEnumerable<CollaborateurDTO>> GetCollaborateursAsync(bool? asc, int? numPage, int? parPage, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri); Task<IEnumerable<CollaborateurDTO>> GetCollaborateursAsync(List<string> roles, List<long?> idBUs, bool? asc, int? numPage, int? parPAge, string texte, string tri, DateTime? dateDebut, DateTime? dateFin);
int GetCollaborateursCount(List<string> roles, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin);
Task<int> GetCollaborateursCountAsync(List<string> roles, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin);
IEnumerable<CollaborateurDTO> GetCollaborateursByReferent(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri); IEnumerable<CollaborateurDTO> GetCollaborateursByReferent(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri);
Task<IEnumerable<CollaborateurDTO>> GetCollaborateursByReferentAsync(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri); Task<IEnumerable<CollaborateurDTO>> GetCollaborateursByReferentAsync(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri);
int GetCollaborateursCountByReferent(Guid? idReferent, string texte);
Task<int> GetCollaborateursCountByReferentAsync(Guid? idReferent, string texte);
IEnumerable<CollaborateurDTO> GetReferentsPrecedentsEP(Guid? idCollaborateur);
Task<IEnumerable<CollaborateurDTO>> GetReferentsPrecedentsEPAsync(Guid? idCollaborateur);
} }
} }

@ -1,6 +1,7 @@
using EPAServeur.Context; using EPAServeur.Context;
using EPAServeur.Exceptions; using EPAServeur.Exceptions;
using EPAServeur.IServices; using EPAServeur.IServices;
using EPAServeur.Models.EP;
using IO.Swagger.ApiCollaborateur; using IO.Swagger.ApiCollaborateur;
using IO.Swagger.DTO; using IO.Swagger.DTO;
using IO.Swagger.ModelCollaborateur; using IO.Swagger.ModelCollaborateur;
@ -24,16 +25,39 @@ namespace EPAServeur.Services
/// API pour accéder aux données collaborateur en passant par le service collaborateur /// API pour accéder aux données collaborateur en passant par le service collaborateur
/// </summary> /// </summary>
private readonly ICollaborateurApi collaborateurApi; private readonly ICollaborateurApi collaborateurApi;
/// <summary>
/// Nombre d'éléments min à afficher par page
/// </summary>
private readonly int minParPage = 5;
/// <summary>
/// Nom d'éléments max à affichar par page
/// </summary>
private readonly int maxParPage = 100;
/// <summary>
/// Nombre d'éléments à afficher par défaut par page
/// </summary>
private readonly int defaultParPage = 15;
/// <summary>
/// Accès et gestion de la base de données
/// </summary>
private readonly EpContext context;
#endregion #endregion
#region Constructeurs #region Constructeurs
public CollaborateurService(ICollaborateurApi _collaborateurApi) public CollaborateurService(ICollaborateurApi _collaborateurApi, EpContext _contexte)
{ {
collaborateurApi = _collaborateurApi; collaborateurApi = _collaborateurApi;
context = _contexte;
} }
#endregion #endregion
#region Services
#region Services Sync
/// <summary> /// <summary>
/// Récupérer un collaborateur en fonction d'un id /// Récupérer un collaborateur en fonction d'un id
/// </summary> /// </summary>
@ -43,21 +67,8 @@ namespace EPAServeur.Services
{ {
Collaborateur collaborateur = collaborateurApi.ChercherCollabId(id); Collaborateur collaborateur = collaborateurApi.ChercherCollabId(id);
if (collaborateur == null) if (collaborateur == null)
throw new CollaborateurNotFoundException(); throw new CollaborateurNotFoundException("Le collaborateur recherché n'a pas été trouvé");
return GetCollaborateurDTO(collaborateur); return GetCollaborateurDTO(collaborateur, true);
}
/// <summary>
/// Récupérer un collaborateur en fonction d'un id de manière asynchrone
/// </summary>
/// <param name="id">Identifiant du collaborateur à renvoyer</param>
/// <returns>Le collaborateur corresponant à l'id en paramètre</returns>
public async Task<CollaborateurDTO> GetCollaborateurByIdAsync(Guid? id)
{
Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(id);
if (collaborateur == null)
throw new CollaborateurNotFoundException();
return GetCollaborateurDTO(collaborateur);
} }
/// <summary> /// <summary>
@ -69,108 +80,79 @@ namespace EPAServeur.Services
{ {
Collaborateur collaborateur = collaborateurApi.ChercherCollabMail(mail); Collaborateur collaborateur = collaborateurApi.ChercherCollabMail(mail);
if (collaborateur == null) if (collaborateur == null)
throw new CollaborateurNotFoundException(); throw new CollaborateurNotFoundException("Le collaborateur recherché n'a pas été trouvé");
return GetCollaborateurDTO(collaborateur); return GetCollaborateurDTO(collaborateur, true);
}
/// <summary>
/// Récupérer un collaborateur en fonction d'un mail de manière asynchrone
/// </summary>
/// <param name="mail">Mail du collaborateur à renvoyer</param>
/// <returns>Le collaborateur correspondant au mail en paramètre</returns>
public async Task<CollaborateurDTO> GetCollaborateurByMailAsync(string mail)
{
Collaborateur collaborateur = await collaborateurApi.ChercherCollabMailAsync(mail);
if (collaborateur == null)
throw new CollaborateurNotFoundException();
return GetCollaborateurDTO(collaborateur);
} }
/// <summary> /// <summary>
/// Récupérer la liste de tous les collaborateurs /// Récupérer la liste de tous les collaborateurs
/// </summary> /// </summary>
/// ///
/// <param name="roles">Liste des rôles auxquels les collaborateurs à récupérer appartiennent</param>
/// <param name="idBUs">Liste des business units auxquelles sont rattachés les collaborateurs à récupérer</param>
/// <param name="asc">Précise si la liste est trié dans l'ordre croissant ou décroissant</param> /// <param name="asc">Précise si la liste est trié dans l'ordre croissant ou décroissant</param>
/// <param name="numPage">Numéro de la page qui est affiché du côté front</param> /// <param name="numPage">Numéro de la page qui est affiché du côté front</param>
/// <param name="parPage">Nombre de collaborateurs à renvoyer</param> /// <param name="parPage">Nombre de collaborateurs à renvoyer</param>
/// <param name="fonctions">Liste des fonctions</param>
/// <param name="idAgence">id de l'agence à laquelle appartient les collaborateurs à récupérer</param> /// <param name="idAgence">id de l'agence à laquelle appartient les collaborateurs à récupérer</param>
/// <param name="idBU"></param> /// <param name="idBU"></param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param> /// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param> /// <param name="tri">Choisir l'attribut par lequel est trié la liste</param>
/// <remarks> /// <param name="dateDebut">Date à partir de laquelle les collaborateurs sont arrivés</param>
/// <para> idBU est à prendre en compte avant l'idAgence</para> /// <param name="dateFin">Date jusqu'à laquelle les collaborateurs sont arrivés</param>
/// <para> idAgence n'est à prendre en compte que si idBU est nul </para>
/// </remarks>
///
/// <returns>Renvoie la liste des collaborateurs en fonction des paramètres</returns> /// <returns>Renvoie la liste des collaborateurs en fonction des paramètres</returns>
public IEnumerable<CollaborateurDTO> GetCollaborateurs(bool? asc, int? numPage, int? parPage, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri) public IEnumerable<CollaborateurDTO> GetCollaborateurs(List<string> roles, List<long?> idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin)
{ {
if (texte == null)
texte = "";
else
texte = texte.ToLower();
IEnumerable<Collaborateur> collaborateurs; IEnumerable<Collaborateur> collaborateurs;
IEnumerable<CollaborateurDTO> collaborateursDTO; IEnumerable<CollaborateurDTO> collaborateursDTO;
if(idBU != null)
collaborateurs = collaborateurApi.ChercherCollabBU(idBU); collaborateurs = collaborateurApi.ChercherCollab(ancienCollaborateur: false, roles: roles, buIds: idBUs);
else if( idAgence != null) collaborateursDTO = from c in collaborateurs
collaborateurs = collaborateurApi.ChercherCollabAgence(idAgence); select GetCollaborateurDTO(c, true);
else
collaborateurs = collaborateurApi.ChercherCollab(); if (parPage.Value < minParPage || parPage.Value > maxParPage)
if (collaborateurs == null) parPage = defaultParPage;
return new List<CollaborateurDTO>(); if (numPage.Value <= 0)
numPage = 1;
int skip = (numPage.Value - 1) * parPage.Value; int skip = (numPage.Value - 1) * parPage.Value;
int take = parPage.Value; int take = parPage.Value;
collaborateursDTO = (from c in collaborateurs if (texte != null)
where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
select GetCollaborateurDTO(c)).Skip(skip).Take(take);
//collaborateursDTO = TriAttribut(collaborateursDTO, tri, asc.Value);
collaborateursDTO = TriDates(collaborateursDTO, dateDebut, dateFin);
return collaborateursDTO; return collaborateursDTO.Skip(skip).Take(take);
} }
/// <summary> /// <summary>
/// Récupérer la liste de tous les collaborateurs de manière asynchrone /// Récupérer le nombre de collaborateurs correspondant aux paramètres de la requête
/// </summary> /// </summary>
/// ///
/// <param name="asc">Précise si la liste est trié dans l'ordre croissant ou décroissant</param> /// <param name="roles">Liste des rôles auxquels les collaborateurs à récupérer appartiennent</param>
/// <param name="numPage">Numéro de la page qui est affiché du côté front</param> /// <param name="idBUs">Liste des business units auxquelles sont rattachés les collaborateurs à récupérer</param>
/// <param name="parPage">Nombre de collaborateurs à renvoyer</param>
/// <param name="fonctions">Liste des fonctions</param>
/// <param name="idAgence">id de l'agence à laquelle appartient les collaborateurs à récupérer</param>
/// <param name="idBU"></param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param> /// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param> /// <param name="dateDebut">Date à partir de laquelle les collaborateurs sont arrivés</param>
/// <remarks> /// <param name="dateFin">Date jusqu'à laquelle les collaborateurs sont arrivés</param>
/// <para> idBU est à prendre en compte avant l'idAgence</para>
/// <para> idAgence n'est à prendre en compte que si idBU est nul </para>
/// </remarks>
///
/// <returns>Renvoie la liste des collaborateurs en fonction des paramètres</returns> /// <returns>Renvoie la liste des collaborateurs en fonction des paramètres</returns>
public async Task<IEnumerable<CollaborateurDTO>> GetCollaborateursAsync(bool? asc, int? numPage, int? parPage, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri) /// <returns>Le nombre de collaborateur</returns>
public int GetCollaborateursCount(List<string> roles, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin)
{ {
if (texte == null)
texte = "";
else
texte = texte.ToLower();
IEnumerable<Collaborateur> collaborateurs; IEnumerable<Collaborateur> collaborateurs;
IEnumerable<CollaborateurDTO> collaborateursDTO; IEnumerable<CollaborateurDTO> collaborateursDTO;
if (idBU != null)
collaborateurs = await collaborateurApi.ChercherCollabBUAsync(idBU);
else if (idAgence != null)
collaborateurs = await collaborateurApi.ChercherCollabAgenceAsync(idAgence);
else
collaborateurs = await collaborateurApi.ChercherCollabAsync();
if (collaborateurs == null)
return new List<CollaborateurDTO>();
int skip = (numPage.Value - 1) * parPage.Value;
int take = parPage.Value;
collaborateursDTO = (from c in collaborateurs
where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte)
select GetCollaborateurDTO(c)).Skip(skip).Take(take);
return collaborateursDTO; collaborateurs = collaborateurApi.ChercherCollab(ancienCollaborateur: false, roles: roles, buIds: idBUs);
collaborateursDTO = from c in collaborateurs
select GetCollaborateurDTO(c, false);
if (texte != null)
collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
collaborateursDTO = TriDates(collaborateursDTO, dateDebut, dateFin);
return collaborateursDTO.Count();
} }
/// <summary> /// <summary>
@ -196,19 +178,158 @@ namespace EPAServeur.Services
*/ */
Collaborateur referent = collaborateurApi.ChercherCollabId(idReferent); Collaborateur referent = collaborateurApi.ChercherCollabId(idReferent);
if (referent == null) if (referent == null)
throw new ReferentNotFoundException(); throw new ReferentNotFoundException("Le référent recherché n'a pas été trouvé");
List<Guid?> collaborateursIds = (from referentEP in context.ReferentEP
where referentEP.IdReferent.Value.Equals(idReferent)
select (Guid?)referentEP.IdCollaborateur).ToList();
IEnumerable<Collaborateur> collaborateurs = collaborateurApi.ChercherCollab(collabsId: collaborateursIds);
if (texte == null)
texte = "";
else
texte = texte.ToLower();
IEnumerable<Collaborateur> collaborateurs = collaborateurApi.ChercherCollabRef(idReferent);
int skip = (numPage.Value - 1) * parPage.Value; int skip = (numPage.Value - 1) * parPage.Value;
int take = parPage.Value; int take = parPage.Value;
IEnumerable<CollaborateurDTO> collaborateursDTO = (from c in collaborateurs IEnumerable<CollaborateurDTO> collaborateursDTO = from c in collaborateurs
where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) select GetCollaborateurDTO(c, false);
select GetCollaborateurDTO(c)).Skip(skip).Take(take); if (texte != null)
return collaborateursDTO; collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
collaborateursDTO = TriAttribut(collaborateursDTO, tri, asc.Value);
return collaborateursDTO.Skip(skip).Take(take);
}
/// <summary>
/// Récupérer le nombre de collaborateurs d'un référent en fonction des paramètres
/// </summary>
/// <param name="idReferent">id du référent des collaborateurs à récupérer</param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <returns>Renvoyer le nombre collaborateurs du référent en fonction des paramètres</returns>
public int GetCollaborateursCountByReferent(Guid? idReferent, string texte)
{
Collaborateur referent = collaborateurApi.ChercherCollabId(idReferent);
if (referent == null)
throw new ReferentNotFoundException("Le référent recherché n'a pas été trouvé");
List<Guid?> collaborateursIds = (from referentEP in context.ReferentEP
where referentEP.IdReferent.Value.Equals(idReferent)
select (Guid?)referentEP.IdCollaborateur).ToList();
IEnumerable<Collaborateur> collaborateurs = collaborateurApi.ChercherCollab(collabsId: collaborateursIds);
IEnumerable<CollaborateurDTO> collaborateursDTO = from c in collaborateurs
select GetCollaborateurDTO(c, false);
if (texte != null)
collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
return collaborateursDTO.Count();
}
/// <summary>
/// Récupérer la liste référents ayant fait passer des EP au collaborateur
/// </summary>
/// <param name="idCollaborateur">id du collaborateur concerné</param>
/// <returns>Liste des référents</returns>
public IEnumerable<CollaborateurDTO> GetReferentsPrecedentsEP(Guid? idCollaborateur)
{
throw new NotImplementedException();
}
#endregion
#region Services Async
/// <summary>
/// Récupérer un collaborateur en fonction d'un id de manière asynchrone
/// </summary>
/// <param name="id">Identifiant du collaborateur à renvoyer</param>
/// <returns>Le collaborateur corresponant à l'id en paramètre</returns>
public async Task<CollaborateurDTO> GetCollaborateurByIdAsync(Guid? id)
{
Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(id);
if (collaborateur == null)
throw new CollaborateurNotFoundException("Le collaborateur recherché n'a pas été trouvé");
return await GetCollaborateurDTOAsync(collaborateur, true);
}
/// <summary>
/// Récupérer un collaborateur en fonction d'un mail de manière asynchrone
/// </summary>
/// <param name="mail">Mail du collaborateur à renvoyer</param>
/// <returns>Le collaborateur correspondant au mail en paramètre</returns>
public async Task<CollaborateurDTO> GetCollaborateurByMailAsync(string mail)
{
Collaborateur collaborateur = await collaborateurApi.ChercherCollabMailAsync(mail);
if (collaborateur == null)
throw new CollaborateurNotFoundException("Le collaborateur recherché n'a pas été trouvé");
return await GetCollaborateurDTOAsync(collaborateur, true);
}
/// <summary>
/// Récupérer la liste de tous les collaborateurs de manière asynchrone
/// </summary>
///
/// <param name="roles">Liste des rôles auxquels les collaborateurs à récupérer appartiennent</param>
/// <param name="idBUs">Liste des business units auxquelles sont rattachés les collaborateurs à récupérer</param>
/// <param name="asc">Précise si la liste est trié dans l'ordre croissant ou décroissant</param>
/// <param name="numPage">Numéro de la page qui est affiché du côté front</param>
/// <param name="parPage">Nombre de collaborateurs à renvoyer</param>
/// <param name="idAgence">id de l'agence à laquelle appartient les collaborateurs à récupérer</param>
/// <param name="idBU"></param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param>
/// <param name="dateDebut">Date à partir de laquelle les collaborateurs sont arrivés</param>
/// <param name="dateFin">Date jusqu'à laquelle les collaborateurs sont arrivés</param>
/// <returns>Renvoie la liste des collaborateurs en fonction des paramètres</returns>
public async Task<IEnumerable<CollaborateurDTO>> GetCollaborateursAsync(List<string> roles, List<long?> idBUs, bool? asc, int? numPage, int? parPage, string texte, string tri, DateTime? dateDebut, DateTime? dateFin)
{
IEnumerable<Collaborateur> collaborateurs;
IEnumerable<CollaborateurDTO> collaborateursDTO;
collaborateurs = await collaborateurApi.ChercherCollabAsync(ancienCollaborateur: false, roles: roles, buIds: idBUs);
collaborateursDTO = (from c in collaborateurs
select GetCollaborateurDTO(c, false));
if (parPage.Value < minParPage || parPage.Value > maxParPage)
parPage = defaultParPage;
if (numPage.Value <= 0)
numPage = 1;
int skip = (numPage.Value - 1) * parPage.Value;
int take = parPage.Value;
if (texte != null)
collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
collaborateursDTO = TriDates(collaborateursDTO, dateDebut, dateFin);
return collaborateursDTO.Skip(skip).Take(take);
}
/// <summary>
/// Récupérer le nombre de collaborateurs correspondant aux paramètres de la requête de manière asynchrone
/// </summary>
///
/// <param name="roles">Liste des rôles auxquels les collaborateurs à récupérer appartiennent</param>
/// <param name="idBUs">Liste des business units auxquelles sont rattachés les collaborateurs à récupérer</param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <param name="dateDebut">Date à partir de laquelle les collaborateurs sont arrivés</param>
/// <param name="dateFin">Date jusqu'à laquelle les collaborateurs sont arrivés</param>
/// <returns>Renvoie la liste des collaborateurs en fonction des paramètres</returns>
/// <returns>Le nombre de collaborateur</returns>
public async Task<int> GetCollaborateursCountAsync(List<string> roles, List<long?> idBUs, string texte, DateTime? dateDebut, DateTime? dateFin)
{
IEnumerable<Collaborateur> collaborateurs;
IEnumerable<CollaborateurDTO> collaborateursDTO;
collaborateurs = await collaborateurApi.ChercherCollabAsync(ancienCollaborateur: false, roles: roles, buIds: idBUs);
var tasks = collaborateurs.Select(c => GetCollaborateurDTOAsync(c, false));
collaborateursDTO = await Task.WhenAll(tasks);
if (texte != null)
collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
collaborateursDTO = TriDates(collaborateursDTO, dateDebut, dateFin);
return collaborateursDTO.Count();
} }
/// <summary> /// <summary>
@ -220,41 +341,132 @@ namespace EPAServeur.Services
/// <param name="parPage">Nombre de collaborateurs à renvoyer</param> /// <param name="parPage">Nombre de collaborateurs à renvoyer</param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param> /// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <param name="tri">Choisir l'attribut par lequel est trié la liste</param> /// <param name="tri">Choisir l'attribut par lequel est trié la liste</param>
/// <returns>Renvoyer les collaborateurs du référent dont l'id est passé en paramètre</returns> /// <returns>Renvoyer les collaborateurs du référent en paramètre</returns>
public async Task<IEnumerable<CollaborateurDTO>> GetCollaborateursByReferentAsync(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri) public async Task<IEnumerable<CollaborateurDTO>> GetCollaborateursByReferentAsync(Guid? idReferent, bool? asc, int? numPage, int? parPage, string texte, string tri)
{ {
/*
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
stopwatch.Stop();
Console.WriteLine("Durée d'exécution numéro 1: {0}", stopwatch.Elapsed.TotalSeconds);
stopwatch.Restart();
stopwatch.Stop();
Console.WriteLine("Durée d'exécution numéro 1: {0}", stopwatch.Elapsed.TotalSeconds);
*/
Collaborateur referent = await collaborateurApi.ChercherCollabIdAsync(idReferent); Collaborateur referent = await collaborateurApi.ChercherCollabIdAsync(idReferent);
if (referent == null) if (referent == null)
throw new ReferentNotFoundException(); throw new ReferentNotFoundException("Le référent recherché n'a pas été trouvé");
if (texte == null) List<Guid?> collaborateursIds = (from r in context.ReferentEP
texte = ""; where r.IdReferent.Value.Equals(idReferent)
else select (Guid?) r.IdCollaborateur).ToList();
texte = texte.ToLower();
IEnumerable<Collaborateur> collaborateurs = await collaborateurApi.ChercherCollabRefAsync(idReferent); IEnumerable<Collaborateur> collaborateurs = await collaborateurApi.ChercherCollabAsync(collabsId: collaborateursIds);
int skip = (numPage.Value - 1) * parPage.Value; int skip = (numPage.Value - 1) * parPage.Value;
int take = parPage.Value; int take = parPage.Value;
IEnumerable<CollaborateurDTO> collaborateursDTO = (from c in collaborateurs
var tasks = collaborateurs.Select(c => GetCollaborateurDTOAsync(c, false));
IEnumerable<CollaborateurDTO> collaborateursDTO = await Task.WhenAll(tasks);
if (texte != null)
collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
return collaborateursDTO.Skip(skip).Take(take);
}
/// <summary>
/// Récupérer le nombre de collaborateurs d'un référent en fonction des paramètres de manière asynchrone
/// </summary>
/// <param name="idReferent">id du référent des collaborateurs à récupérer</param>
/// <param name="texte">permet de récupérer les collaborateurs dont le nom + prénom ou le prénom + nom contient le texte</param>
/// <returns>Renvoyer le nombre collaborateurs du référent en fonction des paramètres</returns>
public async Task<int> GetCollaborateursCountByReferentAsync(Guid? idReferent, string texte)
{
Collaborateur referent = await collaborateurApi.ChercherCollabIdAsync(idReferent);
if (referent == null)
throw new ReferentNotFoundException("Le référent recherché n'a pas été trouvé");
List<Guid?> collaborateursIds = (from r in context.ReferentEP
where r.IdReferent.Value.Equals(idReferent)
select (Guid?)r.IdCollaborateur).ToList();
IEnumerable<Collaborateur> collaborateurs = await collaborateurApi.ChercherCollabAsync(collabsId: collaborateursIds);
/*IEnumerable<CollaborateurDTO> collaborateursDTO = (from c in collaborateurs
where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte) where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte)
select GetCollaborateurDTO(c)).Skip(skip).Take(take); select GetCollaborateurDTO(c)).Skip(skip).Take(take);
return collaborateursDTO; */
var tasks = collaborateurs.Select(c => GetCollaborateurDTOAsync(c, false));
IEnumerable<CollaborateurDTO> collaborateursDTO = await Task.WhenAll(tasks);
if (texte != null)
collaborateursDTO = TriTexte(collaborateursDTO, texte.ToLower());
return collaborateursDTO.Count();
}
/// <summary>
/// Récupérer la liste référents ayant fait passer des EP au collaborateur
/// </summary>
/// <param name="idCollaborateur">id du collaborateur concerné</param>
/// <returns>Liste des référents</returns>
public Task<IEnumerable<CollaborateurDTO>> GetReferentsPrecedentsEPAsync(Guid? idCollaborateur)
{
throw new NotImplementedException();
} }
#endregion #endregion
#region DTO To Object
#region Methode de tri
/// <summary>
/// Permettre de récupéer les collaborateurs en fonction de leur nom et/ou prénom
/// </summary>
/// <param name="collaborateurs">Liste des collaborateurs à trier</param>
/// <param name="texte">Texte permettant de trier par rapport aux noms et prénoms</param>
/// <returns>Une liste de collaborateurs</returns>
private IEnumerable<CollaborateurDTO> TriTexte(IEnumerable<CollaborateurDTO> collaborateurs, string texte)
{
return (from c in collaborateurs
where (c.Nom + " " + c.Prenom).ToLower().Contains(texte) || (c.Prenom + " " + c.Nom).ToLower().Contains(texte)
select c);
}
/// <summary>
/// Permettre de trier les données collaborateurs en fonction d'un attribut
/// </summary>
/// <param name="collaborateurs">La liste des collaborateurs à trier</param>
/// <param name="tri">L'attribut sur lequel les données sont triées</param>
/// <param name="asc">Indique si les données sont rangées dans l'ordre croissant ou non</param>
/// <returns>Une liste de collaborateur</returns>
private IEnumerable<CollaborateurDTO> TriAttribut(IEnumerable<CollaborateurDTO> collaborateurs, string tri, bool asc)
{
throw new NotImplementedException();
}
/// <summary>
/// Cette fonction va permettre de récupérer les collaborteurs dont la date d'arrivée se situe dans un intervalle de dates
/// </summary>
/// <param name="collaborateurs">La liste des collaborateurs à trier</param>
/// <param name="dateDebut">La date à partir de laquelle les dates d'arrivées sont récupérées</param>
/// <param name="dateFin">La data limite d'arrivée du collaborateur</param>
/// <returns>Une liste de collaborateurs</returns>
private IEnumerable<CollaborateurDTO> TriDates(IEnumerable<CollaborateurDTO> collaborateurs, DateTime? dateDebut, DateTime? dateFin)
{
if(dateDebut.HasValue && dateFin.HasValue)
{
DateTime dateFinValue = dateFin.Value.AddDays(1);
return (from c in collaborateurs
where c.DateArrivee >= dateDebut.Value && c.DateArrivee < dateFinValue
select c);
}
if(dateDebut.HasValue)
{
return (from c in collaborateurs
where c.DateArrivee >= dateDebut.Value
select c);
}
if(dateFin.HasValue)
{
DateTime dateFinValue = dateFin.Value.AddDays(1);
return (from c in collaborateurs
where c.DateArrivee < dateFinValue
select c);
}
return collaborateurs;
}
#endregion
#region DTO To Object
/// <summary> /// <summary>
/// Transformer une agence en agenceDTO /// Transformer une agence en agenceDTO
@ -301,8 +513,9 @@ namespace EPAServeur.Services
/// Transforme un collaborateur en collaborateurDTO /// Transforme un collaborateur en collaborateurDTO
/// </summary> /// </summary>
/// <param name="collaborateur">collaborateur à transformer en collaborateurDTO</param> /// <param name="collaborateur">collaborateur à transformer en collaborateurDTO</param>
/// <param name="chercherReferent">Indiquer si le référent du collaborateur doit être récupéré ou non</param>
/// <returns>Renvoie la transformation DTO du collaborateur</returns> /// <returns>Renvoie la transformation DTO du collaborateur</returns>
private CollaborateurDTO GetCollaborateurDTO(Collaborateur collaborateur) private CollaborateurDTO GetCollaborateurDTO(Collaborateur collaborateur, bool chercherReferent)
{ {
CollaborateurDTO collaborateurDTO = new CollaborateurDTO() CollaborateurDTO collaborateurDTO = new CollaborateurDTO()
{ {
@ -314,10 +527,70 @@ namespace EPAServeur.Services
}; };
collaborateurDTO.BusinessUnit = GetBusinessUnitDTO(collaborateur.BusinessUnit); collaborateurDTO.BusinessUnit = GetBusinessUnitDTO(collaborateur.BusinessUnit);
//collaborateurDTO.Referent = GetReferentDTO(collaborateur.Referen //Si le référent du collaborateur doit être récupérer en même temps
if(chercherReferent)
collaborateurDTO.Referent = GetReferent(collaborateurDTO);
return collaborateurDTO; return collaborateurDTO;
} }
/// <summary>
/// Transforme un collaborateur en collaborateurDTO de manière asynchrone
/// </summary>
/// <param name="collaborateur">collaborateur à transformer en collaborateurDTO</param>
/// <param name="chercherReferent">Indiquer si le référent du collaborateur doit être récupéré ou non</param>
/// <returns>Renvoie la transformation DTO du collaborateur</returns>
private async Task<CollaborateurDTO> GetCollaborateurDTOAsync(Collaborateur collaborateur, bool chercherReferent)
{
CollaborateurDTO collaborateurDTO = new CollaborateurDTO()
{
Id = collaborateur.Id,
Prenom = collaborateur.Prenom,
Nom = collaborateur.Nom,
MailApside = collaborateur.MailApside,
DateArrivee = collaborateur.DateArrivee,
};
collaborateurDTO.BusinessUnit = GetBusinessUnitDTO(collaborateur.BusinessUnit);
//Si le référent du collaborateur doit être récupérer en même temps
if (chercherReferent)
collaborateurDTO.Referent = await GetReferentAsync(collaborateurDTO);
return collaborateurDTO;
}
/// <summary>
/// Récupérer le référent EP d'un collaborateur si il existe
/// </summary>
/// <param name="collaborateur">Le collaborateur dont on cherche le référent EP</param>
/// <returns>Le référent EP du collaborateur</returns>
private CollaborateurDTO GetReferent(CollaborateurDTO collaborateur)
{
ReferentEP referentEP = context.ReferentEP.Find(collaborateur.Id);
//vérifier que le collaorateur a un référent EP
if (referentEP == null || referentEP.IdReferent == null || !referentEP.IdReferent.HasValue || referentEP.IdReferent.Value == null)
return null;
Collaborateur referent = collaborateurApi.ChercherCollabId(referentEP.IdReferent);
if (referent == null)
return null;
//throw new ReferentNotFoundException("Le référent EP recherché n'a pas été trouvé");
return GetCollaborateurDTO(referent, false);
}
/// <summary>
/// Récupérer le référent EP d'un collaborateur de manière asynchrone si il existe
/// </summary>
/// <param name="collaborateur">Le collaborateur dont on cherche le référent EP</param>
/// <returns>Le référent EP du collaborateur</returns>
private async Task<CollaborateurDTO> GetReferentAsync(CollaborateurDTO collaborateur)
{
ReferentEP referentEP = await context.ReferentEP.FindAsync(collaborateur.Id);
//vérifier que le collaorateur a un référent EP
if (referentEP == null || referentEP.IdReferent == null || !referentEP.IdReferent.HasValue || referentEP.IdReferent.Value == null)
return null;
Collaborateur referent = await collaborateurApi.ChercherCollabIdAsync(referentEP.IdReferent);
if (referent == null)
return null;
return GetCollaborateurDTO(referent, false);
}
#endregion #endregion
} }
} }

Loading…
Cancel
Save