Merge branch 'develop' into engagement

develop
jboinembalome 4 years ago
commit 925e8268af
  1. 332
      Controllers/FormationsApi.cs
  2. 116
      Controllers/ReferentsApi.cs
  3. 7
      DTO/FormationDetailsDTO.cs
  4. 40
      Exceptions/FormationIncompatibleIdException.cs
  5. 40
      Exceptions/FormationInvalidException.cs
  6. 40
      Exceptions/FormationNotFoundException.cs
  7. 40
      Exceptions/ModeFormationNotFoundException.cs
  8. 40
      Exceptions/OrigineFormationNotFoundException.cs
  9. 40
      Exceptions/StatutFormationNotFoundException.cs
  10. 40
      Exceptions/TypeFormationNotFoundException.cs
  11. 22
      IServices/IFormationService.cs
  12. 6
      IServices/IReferentService.cs
  13. 512
      Services/FormationService.cs
  14. 258
      Services/ReferentService.cs

@ -11,16 +11,16 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations; using Swashbuckle.AspNetCore.Annotations;
using Swashbuckle.AspNetCore.SwaggerGen;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using IO.Swagger.Attributes; using IO.Swagger.Attributes;
using IO.Swagger.Security;
using Microsoft.AspNetCore.Authorization;
using IO.Swagger.DTO; using IO.Swagger.DTO;
using EPAServeur.IServices; using EPAServeur.IServices;
using System.Reflection.Metadata.Ecma335; using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using EPAServeur.Exceptions;
using Microsoft.EntityFrameworkCore;
namespace IO.Swagger.Controllers namespace IO.Swagger.Controllers
{ {
@ -31,10 +31,12 @@ namespace IO.Swagger.Controllers
public class FormationsApiController : ControllerBase public class FormationsApiController : ControllerBase
{ {
private readonly IFormationService formationService; private readonly IFormationService formationService;
private readonly ILogger<FormationsApiController> logger;
public FormationsApiController(IFormationService _formationService) public FormationsApiController(IFormationService _formationService, ILogger<FormationsApiController> _logger)
{ {
formationService = _formationService; formationService = _formationService;
logger = _logger;
} }
/// <summary> /// <summary>
@ -50,19 +52,32 @@ namespace IO.Swagger.Controllers
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("AjouterFormation")] [SwaggerOperation("AjouterFormation")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult AjouterFormation([FromBody] FormationDTO body) public virtual async Task<IActionResult> AjouterFormation([FromBody] FormationDTO body)
{ {
FormationDTO nouvelleFormation = formationService.AddFormation(body); logger.LogInformation("Ajout d'une nouvelle formation.");
FormationDTO nouvelleFormation = null;
try
{
nouvelleFormation = await formationService.AddFormationAsync(body);
}
catch (FormationInvalidException)
{
logger.LogWarning("Des données sont manquants, la nouvelle formation ne peut pas être ajoutée.");
}
catch (DbUpdateException)
{
logger.LogError("Une erreur est survenue dans la base de données durant l'ajout de la nouvelle formation.");
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de l'ajout de la formation note.");
}
logger.LogInformation("Nouvelle formation ajoutée.");
return Created("", nouvelleFormation); return Created("", nouvelleFormation);
//if (body.Id != null && body.Id > 0)
//{
// return StatusCode(201, body);
//}
//else
//{
// return NotFound();
//}
} }
/// <summary> /// <summary>
@ -78,17 +93,41 @@ namespace IO.Swagger.Controllers
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("DeleteFormation")] [SwaggerOperation("DeleteFormation")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult DeleteFormation([FromRoute][Required] long? idFormation) public virtual async Task<IActionResult> DeleteFormation([FromRoute][Required] long? idFormation)
{
try
{ {
if (!formationService.DeleteFormationById(idFormation)) logger.LogInformation("Suppresion de la formation {idFormation}.", idFormation);
FormationDTO formation = await formationService.DeleteFormationByIdAsync(idFormation);
}
catch (FormationNotFoundException)
{ {
logger.LogError("Impossible de supprimer la formation d'id {idFormation} car elle n'existe pas.", idFormation);
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
{ {
Code = "404", Code = "404",
Message = "Aucune formation trouvée" Message = "Aucune formation trouvée"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
catch (DbUpdateConcurrencyException)
{
logger.LogWarning("La formation {idFormation} n'a pas pu être supprimée car elle est prise par une autre ressource.", idFormation);
}
catch (DbUpdateException)
{
logger.LogError("Une erreur a eu lieu, la formation {idFormation} n'a pas pu être supprimée.", idFormation);
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la suppression de la formation {idFormation}.", idFormation);
}
logger.LogInformation("Formation {idFormation} supprimée avec succès.", idFormation);
return NoContent(); return NoContent();
} }
@ -113,10 +152,21 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetFormationAnnulees([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri) public virtual async Task<IActionResult> GetFormationAnnulees([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri)
{
logger.LogInformation("Récupération de la liste des formations annulées.");
IEnumerable<FormationDTO> formations = null;
try
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... formations = await formationService.GetFormationAnnuleesAsync(asc, numPage, parPAge, idAgence, texte, tri);
IEnumerable<FormationDTO> formations = formationService.GetFormationAnnulees(asc, numPage, parPAge, idAgence, texte, tri); }
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des formations annulées.");
}
if (formations == null) if (formations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -124,9 +174,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucune formation annulée" Message = "Aucune formation annulée"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des formations annulées récupérée.");
return Ok(formations); return Ok(formations);
} }
@ -146,18 +199,43 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(FormationDTO), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(FormationDTO), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetFormationById([FromRoute][Required] long? idFormation) public virtual async Task<IActionResult> GetFormationById([FromRoute][Required] long? idFormation)
{ {
FormationDTO formationDTO = formationService.GetFormationById(Convert.ToInt32(idFormation)); logger.LogInformation("Récupération de la formation {idFormation}.", idFormation);
if (formationDTO == null)
FormationDTO formationDTO = null;
try
{ {
formationDTO = await formationService.GetFormationByIdAsync(idFormation);
}
catch (FormationNotFoundException)
{
logger.LogError("Aucune formation ne correspond à l'id {idFormation} recherchée.", idFormation);
ErreurDTO erreurDTO = new ErreurDTO() ErreurDTO erreurDTO = new ErreurDTO()
{ {
Code = "404", Code = "404",
Message = "La formation n'existe pas", Message = "La formation n'existe pas",
}; };
return NotFound(erreurDTO); return NotFound(erreurDTO);
} }
catch (DbUpdateConcurrencyException)
{
logger.LogWarning("La formation {idFormation} n'a pas pu être récupérée car elle est prise par une autre ressource.", idFormation);
}
catch (DbUpdateException)
{
logger.LogError("Une erreur a eu lieu, la formation {idFormation} n'a pas pu être récupérée.", idFormation);
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération de la formation {idFormation}.", idFormation);
}
logger.LogInformation("Formation {idFormation} récupérée.", idFormation);
return Ok(formationDTO); return Ok(formationDTO);
} }
@ -182,10 +260,21 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetFormationRealisee([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri) public virtual async Task<IActionResult> GetFormationRealisee([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri)
{
logger.LogInformation("Récupération de la liste des formations réalisées.");
IEnumerable<FormationDTO> formations = null;
try
{
formations = await formationService.GetFormationRealiseeAsync(asc, numPage, parPAge, idAgence, texte, tri);
}
catch (Exception)
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des formations réalisées.");
IEnumerable<FormationDTO> formations = formationService.GetFormationRealisee(asc, numPage, parPAge, idAgence, texte, tri); }
if (formations == null) if (formations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -193,9 +282,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucune formation réalisée" Message = "Aucune formation réalisée"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des formations réalisées récupérée.");
return Ok(formations); return Ok(formations);
} }
@ -220,10 +312,21 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetFormations")] [SwaggerOperation("GetFormations")]
[SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetFormations([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]int? idAgence, [FromQuery]int? statutFormation, [FromQuery]string texte, [FromQuery]string tri) public virtual async Task<IActionResult> GetFormations([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] int? statutFormation, [FromQuery] string texte, [FromQuery] string tri)
{
logger.LogInformation("Récupération de la liste des formations.");
IEnumerable<FormationDTO> formations = null;
try
{
formations = await formationService.GetFormationsAsync(asc, numPage, parPAge, idAgence, statutFormation, texte, tri);
}
catch (Exception)
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des formations.");
IEnumerable<FormationDTO> formations = formationService.GetFormations(asc, numPage, parPAge, idAgence, texte, tri); }
if (formations == null) if (formations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -231,9 +334,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucune formation" Message = "Aucune formation"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des formations récupérée.");
return Ok(formations); return Ok(formations);
} }
@ -250,10 +356,21 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetModesFormation")] [SwaggerOperation("GetModesFormation")]
[SwaggerResponse(statusCode: 200, type: typeof(List<ModeFormationDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<ModeFormationDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetModesFormation() public virtual async Task<IActionResult> GetModesFormation()
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... logger.LogInformation("Récupération de la liste des modes de formation.");
IEnumerable<ModeFormationDTO> modeFormations = formationService.GetModesFormation();
IEnumerable<ModeFormationDTO> modeFormations = null;
try
{
modeFormations = await formationService.GetModesFormationAsync();
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des modes de formation.");
}
if (modeFormations == null) if (modeFormations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -261,9 +378,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucun mode de formation" Message = "Aucun mode de formation"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des modes de formation récupérée.");
return Ok(modeFormations); return Ok(modeFormations);
} }
@ -280,10 +400,21 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetOriginesFormation")] [SwaggerOperation("GetOriginesFormation")]
[SwaggerResponse(statusCode: 200, type: typeof(List<OrigineFormationDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<OrigineFormationDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetOriginesFormation() public virtual async Task<IActionResult> GetOriginesFormation()
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... logger.LogInformation("Récupération de la liste des origines de formation.");
IEnumerable<OrigineFormationDTO> origineFormations = formationService.GetOriginesFormation();
IEnumerable<OrigineFormationDTO> origineFormations = null;
try
{
origineFormations = await formationService.GetOriginesFormationAsync();
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des origines de formation.");
}
if (origineFormations == null) if (origineFormations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -294,6 +425,8 @@ namespace IO.Swagger.Controllers
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des origines de formation récupérée.");
return Ok(origineFormations); return Ok(origineFormations);
} }
@ -318,10 +451,21 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<FormationDetailsDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetProchainesFormation([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri) public virtual async Task<IActionResult> GetProchainesFormation([FromQuery][Required()] bool? asc, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] int? idAgence, [FromQuery] string texte, [FromQuery] string tri)
{
logger.LogInformation("Récupération de la liste des prochaines formations.");
IEnumerable<FormationDTO> formations = null;
try
{
formations = await formationService.GetProchainesFormationAsync(asc, numPage, parPAge, idAgence, texte, tri);
}
catch (Exception)
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des prochaines formations.");
IEnumerable<FormationDTO> formations = formationService.GetProchainesFormation(asc, numPage, parPAge, idAgence, texte, tri); }
if (formations == null) if (formations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -329,9 +473,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucune prochaine formation" Message = "Aucune prochaine formation"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des prochaines formations récupérée.");
return Ok(formations); return Ok(formations);
} }
@ -348,10 +495,21 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetStatutsFormation")] [SwaggerOperation("GetStatutsFormation")]
[SwaggerResponse(statusCode: 200, type: typeof(List<StatutFormationDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<StatutFormationDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetStatutsFormation() public virtual async Task<IActionResult> GetStatutsFormation()
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... logger.LogInformation("Récupération de la liste des statuts de formation.");
IEnumerable<StatutFormationDTO> statutFormations = formationService.GetStatutsFormation();
IEnumerable<StatutFormationDTO> statutFormations = null;
try
{
statutFormations = await formationService.GetStatutsFormationAsync();
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des statuts de formation.");
}
if (statutFormations == null) if (statutFormations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -359,9 +517,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucun statut de formation" Message = "Aucun statut de formation"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des statuts de formation récupérée.");
return Ok(statutFormations); return Ok(statutFormations);
} }
@ -378,10 +539,21 @@ namespace IO.Swagger.Controllers
[SwaggerOperation("GetTypesFormation")] [SwaggerOperation("GetTypesFormation")]
[SwaggerResponse(statusCode: 200, type: typeof(List<TypeFormationDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<TypeFormationDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetTypesFormation() public virtual async Task<IActionResult> GetTypesFormation()
{
logger.LogInformation("Récupération de la liste des types de formation.");
IEnumerable<TypeFormationDTO> typeFormations = null;
try
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... typeFormations = await formationService.GetTypesFormationAsync();
IEnumerable<TypeFormationDTO> typeFormations = formationService.GetTypesFormation(); }
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération de la liste des types de formation.");
}
if (typeFormations == null) if (typeFormations == null)
{ {
ErreurDTO erreur = new ErreurDTO() ErreurDTO erreur = new ErreurDTO()
@ -389,9 +561,12 @@ namespace IO.Swagger.Controllers
Code = "404", Code = "404",
Message = "Aucun type de formation" Message = "Aucun type de formation"
}; };
return NotFound(erreur); return NotFound(erreur);
} }
logger.LogInformation("Liste des types de formation récupérée.");
return Ok(typeFormations); return Ok(typeFormations);
} }
@ -410,29 +585,64 @@ namespace IO.Swagger.Controllers
[ValidateModelState] [ValidateModelState]
[SwaggerOperation("UpdateFormation")] [SwaggerOperation("UpdateFormation")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult UpdateFormation([FromBody] FormationDTO body, [FromRoute][Required] long? idFormation) public virtual async Task<IActionResult> UpdateFormation([FromBody] FormationDTO body, [FromRoute][Required] long? idFormation)
{
logger.LogInformation("Mise à jour de la formation d'id {idFormation}.", idFormation);
FormationDTO formation = null;
try
{
formation = await formationService.UpdateFormationAsync(idFormation, body);
}
catch (FormationInvalidException)
{
logger.LogWarning("Des données sont manquants, la formation {idFormation} ne peut pas être mise à jour.", idFormation);
}
catch (FormationIncompatibleIdException)
{
logger.LogError("L'id de la formation à mettre à jour {body.Id} et l'id de la formation avec les nouvelles informations {idFormation} sont différents.", body.Id, idFormation);
}
catch (DbUpdateConcurrencyException)
{
logger.LogError("La formation {idFormation} n'a pas pu être mise à jour car elle est prise par une autre ressource.", idFormation);
}
catch (DbUpdateException)
{ {
FormationDTO formation = formationService.UpdateFormation(body); logger.LogError("Une erreur est survenue dans la base de données lors de la mise à jour de la formation {idFormation}.", idFormation);
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la mise à jour de la formation {idFormation}.", idFormation);
}
if (formation == null) if (formation == null)
{ {
formation = formationService.AddFormation(body); try
return Created("", formation); {
formation = await formationService.AddFormationAsync(body);
}
catch (FormationInvalidException)
{
logger.LogWarning("Des données sont manquants, la nouvelle formation ne peut pas être ajoutée.");
}
catch (DbUpdateException)
{
logger.LogError("Une erreur est survenue dans la base de données durant l'ajout de la nouvelle formation.");
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de l'ajout de la formation note.");
} }
return Ok(formation);
logger.LogInformation("Nouvelle formation ajoutée.");
//switch (formationService.UpdateFormation(body)) return Created("", formation);
//{ }
// case 0:
// return Ok();
// case 1:
// return StatusCode(201);
// case 2:
// return Forbid();
// default:
// return NotFound();
//}
logger.LogInformation("Update effectué avec succès");
return Ok(formation);
} }
} }
} }

@ -20,6 +20,10 @@ using System.Net;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using IO.Swagger.Security; using IO.Swagger.Security;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using IO.Swagger.ClientCollaborateur;
using EPAServeur.Exceptions;
namespace IO.Swagger.Controllers namespace IO.Swagger.Controllers
{ {
@ -30,10 +34,12 @@ namespace IO.Swagger.Controllers
public class ReferentsApiController : ControllerBase public class ReferentsApiController : ControllerBase
{ {
private readonly IReferentService referentService; private readonly IReferentService referentService;
private readonly ILogger<ReferentsApiController> logger;
public ReferentsApiController(IReferentService _referentService) public ReferentsApiController(IReferentService _referentService, ILogger<ReferentsApiController> _logger)
{ {
referentService = _referentService; referentService = _referentService;
logger = _logger;
} }
/// <summary> /// <summary>
@ -52,18 +58,38 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(ReferentDTO), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(ReferentDTO), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetReferentById([FromRoute][Required]Guid? idReferent) public virtual async Task<IActionResult> GetReferentById([FromRoute][Required]Guid? idReferent)
{ {
ReferentDTO referentDTO = referentService.GetReferentById(idReferent); logger.LogInformation("Récupération du référent {idReferent}.", idReferent);
if (referentDTO == null)
ReferentDTO referentDTO = null;
try
{
referentDTO = await referentService.GetReferentByIdAsync(idReferent);
}
catch (ApiException)
{
logger.LogError("Une erreur est survenue lors de la communication avec le service Collaborateur pour récupérer le référent par son id {idReferent}.", idReferent);
}
catch (ReferentNotFoundException)
{ {
logger.LogError("Le référent {idReferent} est introuvable.", idReferent);
ErreurDTO erreurDTO = new ErreurDTO() ErreurDTO erreurDTO = new ErreurDTO()
{ {
Code = "404", Code = "404",
Message = "Le référent n'existe pas", Message = "Le référent n'existe pas",
}; };
return NotFound(erreurDTO); return NotFound(erreurDTO);
} }
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération du référent {idReferent}.", idReferent);
}
logger.LogInformation("Référent {idReferent} récupéré.", idReferent);
return Ok(referentDTO); return Ok(referentDTO);
} }
@ -90,18 +116,8 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
public virtual IActionResult GetReferents([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]List<string> fonctions, [FromQuery]long? idAgence, [FromQuery]long? idBU, [FromQuery]string texte, [FromQuery]string tri) public virtual IActionResult GetReferents([FromQuery][Required()]bool? asc, [FromQuery][Required()]int? numPage, [FromQuery][Required()]int? parPAge, [FromQuery]List<string> fonctions, [FromQuery]long? idAgence, [FromQuery]long? idBU, [FromQuery]string texte, [FromQuery]string tri)
{ {
//TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... //IEnumerable<ReferentDTO> referentDTOs = referentService.GetReferents(asc,numPage,parPAge,fonctions,idAgence,idBU,texte,tri);
// return StatusCode(200, default(List<ReferentDTO>)); return NoContent();
//TODO: Uncomment the next line to return response 403 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
// return StatusCode(403, default(ErreurDTO));
string exampleJson = null;
exampleJson = "[ {\n \"mailApside\" : \"\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\",\n \"collaborateurs\" : [ null, null ]\n}, {\n \"mailApside\" : \"\",\n \"id\" : \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\",\n \"nom\" : \"nom\",\n \"prenom\" : \"prenom\",\n \"collaborateurs\" : [ null, null ]\n} ]";
var example = exampleJson != null
? JsonConvert.DeserializeObject<List<ReferentDTO>>(exampleJson)
: default(List<ReferentDTO>); //TODO: Change the data returned
return new ObjectResult(example);
} }
/// <summary> /// <summary>
@ -120,18 +136,38 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(ReferentDTO), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(ReferentDTO), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetReferentActuelCollaborateur([FromRoute][Required] Guid? idCollaborateur) public virtual async Task<IActionResult> GetReferentActuelCollaborateur([FromRoute][Required] Guid? idCollaborateur)
{
logger.LogInformation("Récupération du référent actuel du collaborateur {idCollaborateur}.", idCollaborateur);
ReferentDTO referentDTO = null;
try
{
referentDTO = await referentService.GetReferentActuelCollaborateurAsync(idCollaborateur);
}
catch (ApiException)
{ {
ReferentDTO referentDTO = referentService.GetReferentActuelCollaborateur(idCollaborateur); logger.LogError("Une erreur est survenue lors de la communication avec le service Collaborateur pour récupérer le référent actuel du collaborateur {idCollaborateur}.", idCollaborateur);
if (referentDTO == null) }
catch (ReferentNotFoundException)
{ {
logger.LogError("Le référent actuel du collaborateur {idCollaborateur} est introuvable.", idCollaborateur);
ErreurDTO erreurDTO = new ErreurDTO() ErreurDTO erreurDTO = new ErreurDTO()
{ {
Code = "404", Code = "404",
Message = "Aucun référent pour le collaborateur", Message = "Aucun référent actuel pour le collaborateur",
}; };
return NotFound(erreurDTO); return NotFound(erreurDTO);
} }
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération du référent actuel du collaborateur {idCollaborateur}.", idCollaborateur);
}
logger.LogInformation("Référent actuel du collaborateur {idCollaborateur} récupéré.", idCollaborateur);
return Ok(referentDTO); return Ok(referentDTO);
} }
@ -156,19 +192,51 @@ namespace IO.Swagger.Controllers
[SwaggerResponse(statusCode: 200, type: typeof(List<ReferentDTO>), description: "OK")] [SwaggerResponse(statusCode: 200, type: typeof(List<ReferentDTO>), description: "OK")]
[SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")] [SwaggerResponse(statusCode: 403, type: typeof(ErreurDTO), description: "Acces interdit")]
[SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")] [SwaggerResponse(statusCode: 404, type: typeof(ErreurDTO), description: "Ressource n&#x27;a pas été trouvée")]
public virtual IActionResult GetReferentsByCollaborateur([FromQuery][Required()] bool? asc, [FromRoute][Required] Guid? idCollaborateur, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] string texte, [FromQuery] string tri) public virtual async Task<IActionResult> GetReferentsByCollaborateur([FromQuery][Required()] bool? asc, [FromRoute][Required] Guid? idCollaborateur, [FromQuery][Required()] int? numPage, [FromQuery][Required()] int? parPAge, [FromQuery] string texte, [FromQuery] string tri)
{
logger.LogInformation("Récupération de la liste des référents du collaborateur {idCollaborateur}.", idCollaborateur);
IEnumerable<ReferentDTO> referentDTOs = null;
try
{
referentDTOs = await referentService.GetReferentsByCollaborateurAsync(asc, idCollaborateur, numPage, parPAge, texte, tri);
}
catch (ApiException)
{ {
IEnumerable<ReferentDTO> referentDTO = referentService.GetReferentsByCollaborateur(asc,idCollaborateur,numPage,parPAge,texte,tri); logger.LogError("Une erreur est survenue lors de la communication avec le service collaborateur lors de la récupération de la liste des référents du collaborateur {idReferent}.", idCollaborateur);
if (referentDTO.Count() == 0) }
catch (CollaborateurNotFoundException)
{ {
ErreurDTO erreurDTO = new ErreurDTO()
{
Code = "404",
Message = "Le collaborateur n'existe pas",
};
return NotFound(erreurDTO);
}
catch (Exception)
{
logger.LogError("Une erreur inconnue est survenue lors de la récupération des référents du collaborateur {idCollaborateur}.", idCollaborateur);
}
if (referentDTOs.Count() == 0)
{
logger.LogInformation("Aucun référent pour le collaborateur {idCollaborateur}.", idCollaborateur);
ErreurDTO erreurDTO = new ErreurDTO() ErreurDTO erreurDTO = new ErreurDTO()
{ {
Code = "404", Code = "404",
Message = "Aucun référent pour le collaborateur", Message = "Aucun référent pour le collaborateur",
}; };
return NotFound(erreurDTO); return NotFound(erreurDTO);
} }
return Ok(referentDTO);
logger.LogInformation("Liste des référents du collaborateur {idCollaborateur} récupérée", idCollaborateur);
return Ok(referentDTOs);
} }
} }
} }

@ -66,6 +66,13 @@ namespace IO.Swagger.DTO
[DataMember(Name="nbPartitipants")] [DataMember(Name="nbPartitipants")]
public int? NbPartitipants { get; set; } public int? NbPartitipants { get; set; }
/// <summary>
/// Gets or Sets Origine
/// </summary>
[Required]
[DataMember(Name = "origine")]
public OrigineFormationDTO Origine { get; set; }
/// <summary> /// <summary>
/// Gets or Sets Mode /// Gets or Sets Mode
/// </summary> /// </summary>

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsque l'id de la formation avec les données à mettre à jour et l'id de la formation à mettre sont différents
/// </summary>
public class FormationIncompatibleIdException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationIncompatibleIdException"/> class.
/// </summary>
public FormationIncompatibleIdException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationIncompatibleIdException"/> class.
/// </summary>
/// <param name="message"></param>
public FormationIncompatibleIdException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationIncompatibleIdException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public FormationIncompatibleIdException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsq'une formation est invalide
/// </summary>
public class FormationInvalidException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationInvalidException"/> class.
/// </summary>
public FormationInvalidException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationInvalidException"/> class.
/// </summary>
/// <param name="message"></param>
public FormationInvalidException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationInvalidException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public FormationInvalidException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsqu'une formation n'a pas été trouvée
/// </summary>
public class FormationNotFoundException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationNotFoundException"/> class.
/// </summary>
public FormationNotFoundException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
public FormationNotFoundException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="FormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public FormationNotFoundException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsqu'un mode de formation n'a pas été trouvé
/// </summary>
public class ModeFormationNotFoundException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ModeFormationNotFoundException"/> class.
/// </summary>
public ModeFormationNotFoundException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ModeFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
public ModeFormationNotFoundException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="ModeFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public ModeFormationNotFoundException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsqu'une origine de formation n'a pas été trouvée
/// </summary>
public class OrigineFormationNotFoundException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="OrigineFormationNotFoundException"/> class.
/// </summary>
public OrigineFormationNotFoundException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="OrigineFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
public OrigineFormationNotFoundException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="OrigineFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public OrigineFormationNotFoundException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsqu'un statut de formation n'a pas été trouvé
/// </summary>
public class StatutFormationNotFoundException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="StatutFormationNotFoundException"/> class.
/// </summary>
public StatutFormationNotFoundException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="StatutFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
public StatutFormationNotFoundException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="StatutFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public StatutFormationNotFoundException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Exceptions
{
/// <summary>
/// Exception à jeter lorsqu'un type de formation n'a pas été trouvé
/// </summary>
public class TypeFormationNotFoundException : Exception
{
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="TypeFormationNotFoundException"/> class.
/// </summary>
public TypeFormationNotFoundException()
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="TypeFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
public TypeFormationNotFoundException(string message) : base(message)
{
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="TypeFormationNotFoundException"/> class.
/// </summary>
/// <param name="message"></param>
/// <param name="inner"></param>
public TypeFormationNotFoundException(string message, Exception inner) : base(message, inner)
{
}
}
}

@ -10,19 +10,31 @@ namespace EPAServeur.IServices
{ {
public interface IFormationService public interface IFormationService
{ {
FormationDTO GetFormationById(long? id); FormationDTO GetFormationById(long? idFormation);
Task<FormationDTO> GetFormationByIdAsync(long? idFormation);
IEnumerable<FormationDTO> GetFormations(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri); IEnumerable<FormationDTO> GetFormations(bool? asc, int? numPage, int? parPAge, int? idAgence, int? statutFormation, string texte, string tri);
Task<IEnumerable<FormationDTO>> GetFormationsAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, int? statutFormation, string texte, string tri);
IEnumerable<FormationDTO> GetFormationAnnulees(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri); IEnumerable<FormationDTO> GetFormationAnnulees(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri);
Task<IEnumerable<FormationDTO>> GetFormationAnnuleesAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri);
IEnumerable<FormationDTO> GetFormationRealisee(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri); IEnumerable<FormationDTO> GetFormationRealisee(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri);
Task<IEnumerable<FormationDTO>> GetFormationRealiseeAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri);
IEnumerable<FormationDTO> GetProchainesFormation(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri); IEnumerable<FormationDTO> GetProchainesFormation(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri);
Task<IEnumerable<FormationDTO>> GetProchainesFormationAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri);
IEnumerable<ModeFormationDTO> GetModesFormation(); IEnumerable<ModeFormationDTO> GetModesFormation();
Task<IEnumerable<ModeFormationDTO>> GetModesFormationAsync();
IEnumerable<OrigineFormationDTO> GetOriginesFormation(); IEnumerable<OrigineFormationDTO> GetOriginesFormation();
Task<IEnumerable<OrigineFormationDTO>> GetOriginesFormationAsync();
IEnumerable<StatutFormationDTO> GetStatutsFormation(); IEnumerable<StatutFormationDTO> GetStatutsFormation();
Task<IEnumerable<StatutFormationDTO>> GetStatutsFormationAsync();
IEnumerable<TypeFormationDTO> GetTypesFormation(); IEnumerable<TypeFormationDTO> GetTypesFormation();
Task<IEnumerable<TypeFormationDTO>> GetTypesFormationAsync();
FormationDTO AddFormation(FormationDTO formationDTO); FormationDTO AddFormation(FormationDTO formationDTO);
FormationDTO UpdateFormation(FormationDTO formationDTO); Task<FormationDTO> AddFormationAsync(FormationDTO formationDTO);
bool DeleteFormationById(long? id); FormationDTO UpdateFormation(long? idFormation, FormationDTO formationDTO);
Task<FormationDTO> UpdateFormationAsync(long? idFormation, FormationDTO formationDTO);
FormationDTO DeleteFormationById(long? idFormation);
Task<FormationDTO> DeleteFormationByIdAsync(long? idFormation);
} }
} }

@ -10,11 +10,15 @@ namespace EPAServeur.IServices
{ {
public interface IReferentService public interface IReferentService
{ {
ReferentDTO GetReferentById(Guid? id); ReferentDTO GetReferentById(Guid? idReferent);
Task<ReferentDTO> GetReferentByIdAsync(Guid? idReferent);
ReferentDTO GetReferentActuelCollaborateur(Guid? idCollaborateur); ReferentDTO GetReferentActuelCollaborateur(Guid? idCollaborateur);
Task<ReferentDTO> GetReferentActuelCollaborateurAsync(Guid? idCollaborateur);
IEnumerable<ReferentDTO> GetReferents(bool? asc, int? numPage, int? parPAge, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri); IEnumerable<ReferentDTO> GetReferents(bool? asc, int? numPage, int? parPAge, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri);
Task<IEnumerable<ReferentDTO>> GetReferentsAsync(bool? asc, int? numPage, int? parPAge, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri);
IEnumerable<ReferentDTO> GetReferentsByCollaborateur(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri); IEnumerable<ReferentDTO> GetReferentsByCollaborateur(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri);
Task<IEnumerable<ReferentDTO>> GetReferentsByCollaborateurAsync(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri);
} }
} }

@ -1,4 +1,5 @@
using EPAServeur.Context; using EPAServeur.Context;
using EPAServeur.Exceptions;
using EPAServeur.IServices; using EPAServeur.IServices;
using EPAServeur.Models.Formation; using EPAServeur.Models.Formation;
using IO.Swagger.DTO; using IO.Swagger.DTO;
@ -6,6 +7,7 @@ using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Services namespace EPAServeur.Services
{ {
@ -35,18 +37,37 @@ namespace EPAServeur.Services
/// <summary> /// <summary>
/// Récupérer une formation par son id /// Récupérer une formation par son id
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="idFormation"></param>
/// <returns></returns> /// <returns></returns>
public FormationDTO GetFormationById(long? id) public FormationDTO GetFormationById(long? idFormation)
{ {
Formation formation = epContext.Formation.Include(formation => formation.Statut) Formation formation = epContext.Formation.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation) .Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation) .Include(formation => formation.TypeFormation)
.FirstOrDefault(formation => formation.Id == id); .FirstOrDefault(formation => formation.Id == idFormation);
if (formation == null) if (formation == null)
return null; throw new FormationNotFoundException();
return GetFormationDTO(formation);
}
/// <summary>
/// Récupérer une formation par son id de manière asynchrone
/// </summary>
/// <param name="idFormation"></param>
/// <returns></returns>
public async Task<FormationDTO> GetFormationByIdAsync(long? idFormation)
{
Formation formation = await epContext.Formation.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation)
.FirstOrDefaultAsync(formation => formation.Id == idFormation);
if (formation == null)
throw new FormationNotFoundException();
return GetFormationDTO(formation); return GetFormationDTO(formation);
} }
@ -61,7 +82,7 @@ namespace EPAServeur.Services
/// <param name="texte">Texte permettant d&#x27;identifier l&#x27;objet rechercher</param> /// <param name="texte">Texte permettant d&#x27;identifier l&#x27;objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s&#x27;effectue</param> /// <param name="tri">Colonne du tableau sur lequel le tri s&#x27;effectue</param>
/// <returns></returns> /// <returns></returns>
public IEnumerable<FormationDTO> GetFormations(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri) public IEnumerable<FormationDTO> GetFormations(bool? asc, int? numPage, int? parPAge, int? idAgence, int? statutFormation, string texte, string tri)
{ {
IEnumerable<Formation> formations; IEnumerable<Formation> formations;
IEnumerable<FormationDTO> formationDTOs; IEnumerable<FormationDTO> formationDTOs;
@ -74,9 +95,25 @@ namespace EPAServeur.Services
int skip = (numPage.Value - 1) * parPAge.Value; int skip = (numPage.Value - 1) * parPAge.Value;
int take = parPAge.Value; int take = parPAge.Value;
if (idAgence != null) if (statutFormation != null && idAgence != null)
{ {
try formations = epContext.Formation
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation)
.Where(formation => formation.Statut.Id == statutFormation && formation.IdAgence == idAgence);
}
else if (statutFormation != null && idAgence == null)
{
formations = epContext.Formation
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation)
.Where(formation => formation.Statut.Id == statutFormation);
}
else if (idAgence != null)
{ {
formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence) formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence)
.Include(formation => formation.Statut) .Include(formation => formation.Statut)
@ -84,29 +121,87 @@ namespace EPAServeur.Services
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation);
} }
catch (Exception ex) else
{ {
throw; formations = epContext.Formation.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation);
} }
if (formations == null)
return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
return formationDTOs;
} }
/// <summary>
/// Récupérer la liste des formations de manière asynchrone
/// </summary>
/// <param name="asc">Préciser si les données sont dans l&#x27;ordre (true) ou dans l&#x27;ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d&#x27;éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l&#x27;agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d&#x27;identifier l&#x27;objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s&#x27;effectue</param>
/// <returns></returns>
public async Task<IEnumerable<FormationDTO>> GetFormationsAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, int? statutFormation, string texte, string tri)
{
IEnumerable<Formation> formations;
IEnumerable<FormationDTO> formationDTOs;
if (texte == null)
texte = "";
else else
texte = texte.ToLower();
int skip = (numPage.Value - 1) * parPAge.Value;
int take = parPAge.Value;
if (statutFormation != null && idAgence != null)
{ {
try formations = await epContext.Formation
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation)
.Where(formation => formation.Statut.Id == statutFormation && formation.IdAgence == idAgence).ToListAsync();
}
else if (statutFormation != null && idAgence == null)
{ {
formations = epContext.Formation.Include(formation => formation.Statut) formations = await epContext.Formation
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation) .Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation)
.Where(formation => formation.Statut.Id == statutFormation).ToListAsync();
} }
catch (Exception ex) else if (idAgence != null)
{ {
throw;
formations = await epContext.Formation
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).Where(formation => formation.IdAgence == idAgence).ToListAsync();
} }
else
{
formations = await epContext.Formation.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).ToListAsync();
} }
if (formations == null) if (formations == null)
return new List<FormationDTO>(); return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation)); formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
@ -150,7 +245,51 @@ namespace EPAServeur.Services
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation);
if (formations == null) if (formations == null)
return new List<FormationDTO>(); return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
return formationDTOs;
}
/// <summary>
/// Récupérer les formations annulées de manière asynchrone
/// </summary>
/// <param name="asc">Préciser si les données sont dans l&#x27;ordre (true) ou dans l&#x27;ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d&#x27;éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l&#x27;agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d&#x27;identifier l&#x27;objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s&#x27;effectue</param>
/// <returns></returns>
public async Task<IEnumerable<FormationDTO>> GetFormationAnnuleesAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri)
{
IEnumerable<Formation> formations;
IEnumerable<FormationDTO> formationDTOs;
if (texte == null)
texte = "";
else
texte = texte.ToLower();
int skip = (numPage.Value - 1) * parPAge.Value;
int take = parPAge.Value;
if (idAgence != null)
formations = await epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.Id == 4)
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).ToListAsync();
else
formations = await epContext.Formation.Where(formation => formation.Statut.Id == 4)
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).ToListAsync();
if (formations == null)
return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation)); formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
@ -182,39 +321,80 @@ namespace EPAServeur.Services
if (idAgence != null) if (idAgence != null)
{ {
try
{
formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.Id == 3) formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.Id == 3)
.Include(formation => formation.Statut) .Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation) .Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation);
} }
catch (Exception ex)
{
throw;
}
}
else else
{ {
try
{
formations = epContext.Formation.Where(formation => formation.Statut.Id == 3) formations = epContext.Formation.Where(formation => formation.Statut.Id == 3)
.Include(formation => formation.Statut) .Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation) .Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation);
}
if (formations == null)
return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
return formationDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupérer les formations réalisées de manière asynchrone
/// </summary>
/// <param name="asc">Préciser si les données sont dans l&#x27;ordre (true) ou dans l&#x27;ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d&#x27;éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l&#x27;agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d&#x27;identifier l&#x27;objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s&#x27;effectue</param>
/// <returns></returns>
public async Task<IEnumerable<FormationDTO>> GetFormationRealiseeAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri)
{
IEnumerable<Formation> formations;
IEnumerable<FormationDTO> formationDTOs;
if (texte == null)
texte = "";
else
texte = texte.ToLower();
int skip = (numPage.Value - 1) * parPAge.Value;
int take = parPAge.Value;
if (idAgence != null)
{ {
throw;
formations = await epContext.Formation.Where(formation => formation.IdAgence == idAgence && formation.Statut.Id == 3)
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).ToListAsync();
} }
else
{
formations = await epContext.Formation.Where(formation => formation.Statut.Id == 3)
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).ToListAsync();
} }
if (formations == null) if (formations == null)
return new List<FormationDTO>(); return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation)); formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
@ -245,30 +425,75 @@ namespace EPAServeur.Services
int take = parPAge.Value; int take = parPAge.Value;
if (idAgence != null) if (idAgence != null)
try
{ {
formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && (formation.Statut.Id == 1 || formation.Statut.Id == 2)) formations = epContext.Formation.Where(formation => formation.IdAgence == idAgence && (formation.Statut.Id == 1 || formation.Statut.Id == 2))
.Include(formation => formation.Statut) .Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation) .Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation);
}
else
{
formations = epContext.Formation.Where(formation => (formation.Statut.Id == 1 || formation.Statut.Id == 2))
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation);
}
if (formations == null)
return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
return formationDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupérer les formations plannifiées et replannifiées de manère asynchrone
/// </summary>
/// <param name="asc">Préciser si les données sont dans l&#x27;ordre (true) ou dans l&#x27;ordre inverse (false)</param>
/// <param name="numPage">Numéro de la page du tableau qui affiche les données</param>
/// <param name="parPAge">Nombre d&#x27;éléments affiché sur chaque page du tableau</param>
/// <param name="idAgence">id de l&#x27;agence à laquelle sont rattachées les données à récupérer</param>
/// <param name="texte">Texte permettant d&#x27;identifier l&#x27;objet rechercher</param>
/// <param name="tri">Colonne du tableau sur lequel le tri s&#x27;effectue</param>
/// <returns></returns>
public async Task<IEnumerable<FormationDTO>> GetProchainesFormationAsync(bool? asc, int? numPage, int? parPAge, int? idAgence, string texte, string tri)
{
IEnumerable<Formation> formations;
IEnumerable<FormationDTO> formationDTOs;
if (texte == null)
texte = "";
else
texte = texte.ToLower();
int skip = (numPage.Value - 1) * parPAge.Value;
int take = parPAge.Value;
if (idAgence != null)
{ {
throw; formations = await epContext.Formation.Where(formation => formation.IdAgence == idAgence && (formation.Statut.Id == 1 || formation.Statut.Id == 2))
.Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation).ToListAsync();
} }
else else
{ {
formations = epContext.Formation.Where(formation => (formation.Statut.Id == 1 || formation.Statut.Id == 2)) formations = await epContext.Formation.Where(formation => (formation.Statut.Id == 1 || formation.Statut.Id == 2))
.Include(formation => formation.Statut) .Include(formation => formation.Statut)
.Include(formation => formation.ModeFormation) .Include(formation => formation.ModeFormation)
.Include(formation => formation.Origine) .Include(formation => formation.Origine)
.Include(formation => formation.TypeFormation); .Include(formation => formation.TypeFormation).ToListAsync();
} }
if (formations == null) if (formations == null)
return new List<FormationDTO>(); return null;
formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation)); formationDTOs = formations.Where(formation => formation.Intitule.ToLower().Contains(texte)).Select(formation => GetFormationDTO(formation));
@ -283,14 +508,29 @@ namespace EPAServeur.Services
{ {
IEnumerable<ModeFormation> modeFormations; IEnumerable<ModeFormation> modeFormations;
IEnumerable<ModeFormationDTO> modeFormationDTOs; IEnumerable<ModeFormationDTO> modeFormationDTOs;
try
{
modeFormations = epContext.ModeFormation; modeFormations = epContext.ModeFormation;
if (modeFormations == null)
return null;
modeFormationDTOs = modeFormations.Select(modeFormation => GetModeFormationDTO(modeFormation));
return modeFormationDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupérer les modes de formation de manière asynchrone
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<ModeFormationDTO>> GetModesFormationAsync()
{ {
throw; IEnumerable<ModeFormation> modeFormations;
} IEnumerable<ModeFormationDTO> modeFormationDTOs;
modeFormations = await epContext.ModeFormation.ToListAsync();
if (modeFormations == null)
return null;
modeFormationDTOs = modeFormations.Select(modeFormation => GetModeFormationDTO(modeFormation)); modeFormationDTOs = modeFormations.Select(modeFormation => GetModeFormationDTO(modeFormation));
@ -306,14 +546,29 @@ namespace EPAServeur.Services
IEnumerable<OrigineFormation> origineFormations; IEnumerable<OrigineFormation> origineFormations;
IEnumerable<OrigineFormationDTO> origineFormationDTOs; IEnumerable<OrigineFormationDTO> origineFormationDTOs;
try
{
origineFormations = epContext.OrigineFormation; origineFormations = epContext.OrigineFormation;
if (origineFormations == null)
return null;
origineFormationDTOs = origineFormations.Select(origineFormation => GetOrigineFormationDTO(origineFormation));
return origineFormationDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupérer les origines de formation de manière asynchrone
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<OrigineFormationDTO>> GetOriginesFormationAsync()
{ {
throw; IEnumerable<OrigineFormation> origineFormations;
} IEnumerable<OrigineFormationDTO> origineFormationDTOs;
origineFormations = await epContext.OrigineFormation.ToListAsync();
if (origineFormations == null)
return null;
origineFormationDTOs = origineFormations.Select(origineFormation => GetOrigineFormationDTO(origineFormation)); origineFormationDTOs = origineFormations.Select(origineFormation => GetOrigineFormationDTO(origineFormation));
@ -329,15 +584,29 @@ namespace EPAServeur.Services
IEnumerable<StatutFormation> statutFormations; IEnumerable<StatutFormation> statutFormations;
IEnumerable<StatutFormationDTO> statutFormationDTOs; IEnumerable<StatutFormationDTO> statutFormationDTOs;
try
{
statutFormations = epContext.StatutFormation; statutFormations = epContext.StatutFormation;
if (statutFormations == null)
return null;
statutFormationDTOs = statutFormations.Select(statutFormation => GetStatutFormationDTO(statutFormation));
return statutFormationDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupérer les statuts de formation de manière asynchrone
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<StatutFormationDTO>> GetStatutsFormationAsync()
{ {
IEnumerable<StatutFormation> statutFormations;
IEnumerable<StatutFormationDTO> statutFormationDTOs;
throw; statutFormations = await epContext.StatutFormation.ToListAsync();
}
if (statutFormations == null)
return null;
statutFormationDTOs = statutFormations.Select(statutFormation => GetStatutFormationDTO(statutFormation)); statutFormationDTOs = statutFormations.Select(statutFormation => GetStatutFormationDTO(statutFormation));
@ -353,14 +622,29 @@ namespace EPAServeur.Services
IEnumerable<TypeFormation> typeFormations; IEnumerable<TypeFormation> typeFormations;
IEnumerable<TypeFormationDTO> typeFormationDTOs; IEnumerable<TypeFormationDTO> typeFormationDTOs;
try
{
typeFormations = epContext.TypeFormation; typeFormations = epContext.TypeFormation;
if (typeFormations == null)
return null;
typeFormationDTOs = typeFormations.Select(typeFormation => GetTypeFormationDTO(typeFormation));
return typeFormationDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupérer les types de formation de manière asynchrone
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<TypeFormationDTO>> GetTypesFormationAsync()
{ {
throw; IEnumerable<TypeFormation> typeFormations;
} IEnumerable<TypeFormationDTO> typeFormationDTOs;
typeFormations = await epContext.TypeFormation.ToListAsync();
if (typeFormations == null)
return null;
typeFormationDTOs = typeFormations.Select(typeFormation => GetTypeFormationDTO(typeFormation)); typeFormationDTOs = typeFormations.Select(typeFormation => GetTypeFormationDTO(typeFormation));
@ -374,27 +658,47 @@ namespace EPAServeur.Services
/// <returns></returns> /// <returns></returns>
public FormationDTO AddFormation(FormationDTO formationDTO) public FormationDTO AddFormation(FormationDTO formationDTO)
{ {
if (!IsFormationValide(formationDTO))
throw new FormationInvalidException();
Formation formation = new Formation(); Formation formation = new Formation();
formation = SetFormation(formation, formationDTO); formation = SetFormation(formation, formationDTO);
if (formation.Statut != null) if (formation.Statut != null)
{
epContext.StatutFormation.Attach(formation.Statut); epContext.StatutFormation.Attach(formation.Statut);
}
epContext.OrigineFormation.Attach(formation.Origine); epContext.OrigineFormation.Attach(formation.Origine);
epContext.ModeFormation.Attach(formation.ModeFormation); epContext.ModeFormation.Attach(formation.ModeFormation);
epContext.TypeFormation.Attach(formation.TypeFormation); epContext.TypeFormation.Attach(formation.TypeFormation);
epContext.Add(formation); epContext.Add(formation);
try
{
epContext.SaveChanges(); epContext.SaveChanges();
return GetFormationDTO(formation);
} }
catch (Exception ex)
/// <summary>
/// Ajouter une formation de manière asynchrone
/// </summary>
/// <param name="formationDTO"></param>
/// <returns></returns>
public async Task<FormationDTO> AddFormationAsync(FormationDTO formationDTO)
{ {
throw; if (!IsFormationValide(formationDTO))
} throw new FormationInvalidException();
Formation formation = new Formation();
formation = SetFormation(formation, formationDTO);
if (formation.Statut != null)
epContext.StatutFormation.Attach(formation.Statut);
epContext.OrigineFormation.Attach(formation.Origine);
epContext.ModeFormation.Attach(formation.ModeFormation);
epContext.TypeFormation.Attach(formation.TypeFormation);
epContext.Add(formation);
await epContext.SaveChangesAsync();
return GetFormationDTO(formation); return GetFormationDTO(formation);
} }
@ -402,26 +706,50 @@ namespace EPAServeur.Services
/// <summary> /// <summary>
/// Modifier une formation /// Modifier une formation
/// </summary> /// </summary>
/// <param name="idFormation"></param>
/// <param name="formationDTO"></param> /// <param name="formationDTO"></param>
/// <returns></returns> /// <returns></returns>
public FormationDTO UpdateFormation(FormationDTO formationDTO) public FormationDTO UpdateFormation(long? idFormation, FormationDTO formationDTO)
{ {
Formation formation = epContext.Formation.FirstOrDefault(formation => formation.Id == formationDTO.Id); if (!IsFormationValide(formationDTO))
throw new FormationInvalidException();
if (formationDTO == null && !formationDTO.Id.HasValue && formationDTO.Id.Value != idFormation)
throw new FormationIncompatibleIdException();
Formation formation = epContext.Formation.Find(idFormation);
if (formation == null) if (formation == null)
{
return null; return null;
}
formation = SetFormation(formation, formationDTO); formation = SetFormation(formation, formationDTO);
try
{
epContext.SaveChanges(); epContext.SaveChanges();
return GetFormationDTO(formation);
} }
catch (Exception ex)
/// <summary>
/// Modifier une formation de manière asynchrone
/// </summary>
/// <param name="idFormation"></param>
/// <param name="formationDTO"></param>
/// <returns></returns>
public async Task<FormationDTO> UpdateFormationAsync(long? idFormation, FormationDTO formationDTO)
{ {
throw; if (!IsFormationValide(formationDTO))
} throw new FormationInvalidException();
if (formationDTO == null && !formationDTO.Id.HasValue && formationDTO.Id.Value != idFormation)
throw new FormationIncompatibleIdException();
Formation formation = await epContext.Formation.FindAsync(idFormation);
if (formation == null)
return null;
formation = SetFormation(formation, formationDTO);
await epContext.SaveChangesAsync();
return GetFormationDTO(formation); return GetFormationDTO(formation);
} }
@ -429,32 +757,54 @@ namespace EPAServeur.Services
/// <summary> /// <summary>
/// Supprimer une formation /// Supprimer une formation
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="idFormation"></param>
/// <returns></returns> /// <returns></returns>
public bool DeleteFormationById(long? id) public FormationDTO DeleteFormationById(long? idFormation)
{ {
Formation formation = epContext.Formation.FirstOrDefault(formation => formation.Id == id); Formation formation = epContext.Formation.Find(idFormation);
if (formation == null) if (formation == null)
return false; throw new FormationNotFoundException();
epContext.Remove(formation); epContext.Remove(formation);
try
{
epContext.SaveChanges(); epContext.SaveChanges();
return GetFormationDTO(formation);
} }
catch (Exception)
/// <summary>
/// Supprimer une formation de manière asynchrone
/// </summary>
/// <param name="idFormation"></param>
/// <returns></returns>
public async Task<FormationDTO> DeleteFormationByIdAsync(long? idFormation)
{ {
throw; Formation formation = await epContext.Formation.FindAsync(idFormation);
}
return true; if (formation == null)
} throw new FormationNotFoundException();
epContext.Remove(formation);
await epContext.SaveChangesAsync();
return GetFormationDTO(formation);
}
#endregion #endregion
#region Méthodes Privée #region Méthodes Privée
/// <summary>
/// Vérifier si un objet FormationDTO est valide pour ajout ou mise à jour
/// </summary>
/// <remarks> Un objet FormationDTO est valide si aucune de ses propriétés n'est à null</remarks>
/// <param name="formation"></param>
/// <returns>true si l'objet est valide, false sinon</returns>
private bool IsFormationValide(FormationDTO formation)
{
return !(formation == null || formation.IdAgence == null || formation.Intitule == null || formation.Organisme == null);
}
#region Object to DTO #region Object to DTO
/// <summary> /// <summary>

@ -1,10 +1,12 @@
using EPAServeur.IServices; using EPAServeur.Exceptions;
using EPAServeur.IServices;
using IO.Swagger.ApiCollaborateur; using IO.Swagger.ApiCollaborateur;
using IO.Swagger.DTO; using IO.Swagger.DTO;
using IO.Swagger.ModelCollaborateur; using IO.Swagger.ModelCollaborateur;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace EPAServeur.Services namespace EPAServeur.Services
{ {
@ -12,13 +14,14 @@ namespace EPAServeur.Services
{ {
#region Variables #region Variables
private readonly IReferentApi referentApi; private readonly IReferentApi referentApi;
private readonly ICollaborateurApi collaborateurApi;
#endregion #endregion
#region Contructeurs #region Contructeurs
public ReferentService(IReferentApi _referentApi) public ReferentService(IReferentApi _referentApi, ICollaborateurApi _collaborateurApi)
{ {
referentApi = _referentApi; referentApi = _referentApi;
collaborateurApi = _collaborateurApi;
} }
#endregion #endregion
@ -28,13 +31,29 @@ namespace EPAServeur.Services
/// <summary> /// <summary>
/// Récupère un référent par son id /// Récupère un référent par son id
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="idReferent"></param>
/// <returns></returns> /// <returns></returns>
public ReferentDTO GetReferentById(Guid? id) public ReferentDTO GetReferentById(Guid? idReferent)
{ {
Referent referent = referentApi.ChercherRefId(id); Referent referent = referentApi.ChercherRefId(idReferent);
if (referent == null) if (referent == null)
return null; throw new ReferentNotFoundException();
return GetReferentDTO(referent);
}
/// <summary>
/// Récupère un référent par son id de manière asynchrone
/// </summary>
/// <param name="idReferent"></param>
/// <returns></returns>
public async Task<ReferentDTO> GetReferentByIdAsync(Guid? idReferent)
{
Referent referent = await referentApi.ChercherRefIdAsync(idReferent);
if (referent == null)
throw new ReferentNotFoundException();
return GetReferentDTO(referent); return GetReferentDTO(referent);
} }
@ -49,7 +68,22 @@ namespace EPAServeur.Services
Referent referent = referentApi.ChercherRefActuelCollabId(idCollaborateur); Referent referent = referentApi.ChercherRefActuelCollabId(idCollaborateur);
if (referent == null) if (referent == null)
return null; throw new ReferentNotFoundException();
return GetReferentDTO(referent);
}
/// <summary>
/// Récupère un référent en fonction d'un collaborateur de manière asynchrone
/// </summary>
/// <param name="idCollaborateur"></param>
/// <returns></returns>
public async Task<ReferentDTO> GetReferentActuelCollaborateurAsync(Guid? idCollaborateur)
{
Referent referent = await referentApi.ChercherRefActuelCollabIdAsync(idCollaborateur);
if (referent == null)
throw new ReferentNotFoundException();
return GetReferentDTO(referent); return GetReferentDTO(referent);
} }
@ -68,49 +102,165 @@ namespace EPAServeur.Services
/// <returns></returns> /// <returns></returns>
public IEnumerable<ReferentDTO> GetReferents(bool? asc, int? numPage, int? parPAge, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri) public IEnumerable<ReferentDTO> GetReferents(bool? asc, int? numPage, int? parPAge, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri)
{ {
IEnumerable<Referent> referents = null ; // A changer throw new NotImplementedException();
IEnumerable<ReferentDTO> referentDTOs = null; // A changer
if (texte == null) ////IEnumerable<Collaborateur> collaborateurs; // A changer (Sera utilisé pour récupérer la liste des référents par fonction
texte = ""; //IEnumerable<Referent> referents = null; // A changer
else //IEnumerable<ReferentDTO> referentDTOs = null; // A changer
texte = texte.ToLower(); ////List<Guid?> ids = fonctions.Select(guid => (Guid?)Guid.Parse(guid)).ToList();
int skip = (numPage.Value - 1) * parPAge.Value; ////collaborateurs = collaborateurApi.ChercherCollab(ids);
int take = parPAge.Value; //if (texte == null)
// texte = "";
//else
// texte = texte.ToLower();
if (idBU != null) //int skip = (numPage.Value - 1) * parPAge.Value;
{ //int take = parPAge.Value;
} //if (idBU != null)
else //{
{
//}
//else
//{
//}
//if (idAgence != null)
//{
// try
// {
// }
// catch (Exception ex)
// {
// throw;
// }
//}
//else
//{
// try
// {
// }
// catch (Exception ex)
// {
// throw;
// }
//}
//if (referents == null)
// return new List<ReferentDTO>();
//referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent));
//return referentDTOs;
} }
if (idAgence != null) /// <summary>
{ /// Récupère la liste des référents pour une agence de manière asynchrone
try /// </summary>
/// <param name="asc"></param>
/// <param name="numPage"></param>
/// <param name="parPAge"></param>
/// <param name="fonctions"></param>
/// <param name="idAgence"></param>
/// <param name="idBU"></param>
/// <param name="texte"></param>
/// <param name="tri"></param>
/// <returns></returns>
public async Task<IEnumerable<ReferentDTO>> GetReferentsAsync(bool? asc, int? numPage, int? parPAge, List<string> fonctions, long? idAgence, long? idBU, string texte, string tri)
{ {
throw new NotImplementedException();
//IEnumerable<Referent> referents = null ; // A changer
//IEnumerable<ReferentDTO> referentDTOs = null; // A changer
//if (texte == null)
// texte = "";
//else
// texte = texte.ToLower();
//int skip = (numPage.Value - 1) * parPAge.Value;
//int take = parPAge.Value;
//if (idBU != null)
//{
//}
//else
//{
//}
//if (idAgence != null)
//{
// try
// {
// }
// catch (Exception ex)
// {
// throw;
// }
//}
//else
//{
// try
// {
// }
// catch (Exception ex)
// {
// throw;
// }
//}
//if (referents == null)
// return new List<ReferentDTO>();
//referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent));
//return referentDTOs;
} }
catch (Exception ex)
/// <summary>
/// Récupère la liste des référents pour un collaborateur
/// </summary>
/// <param name="asc"></param>
/// <param name="idCollaborateur"></param>
/// <param name="numPage"></param>
/// <param name="parPAge"></param>
/// <param name="texte"></param>
/// <param name="tri"></param>
/// <returns></returns>
public IEnumerable<ReferentDTO> GetReferentsByCollaborateur(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri)
{ {
throw; IEnumerable<Referent> referents;
} IEnumerable<ReferentDTO> referentDTOs;
}
if (texte == null)
texte = "";
else else
{ texte = texte.ToLower();
try
{
} int skip = (numPage.Value - 1) * parPAge.Value;
catch (Exception ex) int take = parPAge.Value;
{
throw; if (idCollaborateur == null)
} return new List<ReferentDTO>();
}
Collaborateur collaborateur = collaborateurApi.ChercherCollabId(idCollaborateur);
if (collaborateur == null)
throw new CollaborateurNotFoundException();
referents = referentApi.ChercherRefCollabId(idCollaborateur);
if (referents == null) if (referents == null)
return new List<ReferentDTO>(); return new List<ReferentDTO>();
@ -121,7 +271,7 @@ namespace EPAServeur.Services
} }
/// <summary> /// <summary>
/// Récupère la liste des référents pour un collaborateur /// Récupère la liste des référents pour un collaborateur de manère asynchrone
/// </summary> /// </summary>
/// <param name="asc"></param> /// <param name="asc"></param>
/// <param name="idCollaborateur"></param> /// <param name="idCollaborateur"></param>
@ -130,7 +280,7 @@ namespace EPAServeur.Services
/// <param name="texte"></param> /// <param name="texte"></param>
/// <param name="tri"></param> /// <param name="tri"></param>
/// <returns></returns> /// <returns></returns>
public IEnumerable<ReferentDTO> GetReferentsByCollaborateur(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri) public async Task<IEnumerable<ReferentDTO>> GetReferentsByCollaborateurAsync(bool? asc, Guid? idCollaborateur, int? numPage, int? parPAge, string texte, string tri)
{ {
IEnumerable<Referent> referents; IEnumerable<Referent> referents;
IEnumerable<ReferentDTO> referentDTOs; IEnumerable<ReferentDTO> referentDTOs;
@ -146,12 +296,21 @@ namespace EPAServeur.Services
if (idCollaborateur == null) if (idCollaborateur == null)
return new List<ReferentDTO>(); return new List<ReferentDTO>();
Collaborateur collaborateur = await collaborateurApi.ChercherCollabIdAsync(idCollaborateur);
if (collaborateur == null)
throw new CollaborateurNotFoundException();
referents = await referentApi.ChercherRefCollabIdAsync(idCollaborateur);
if (referents == null)
return new List<ReferentDTO>();
referents = referentApi.ChercherRefCollabId(idCollaborateur);
referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent)); referentDTOs = referents.Where(referent => (referent.Nom + " " + referent.Prenom).ToLower().Contains(texte) || (referent.Prenom + " " + referent.Nom).ToLower().Contains(texte)).Select(referent => GetReferentDTO(referent));
return referentDTOs; return referentDTOs;
} }
#endregion #endregion
#region Méthodes Privées #region Méthodes Privées
@ -238,6 +397,25 @@ namespace EPAServeur.Services
}; };
return referentDTO; return referentDTO;
} }
/// <summary>
/// Récupère un objet ReferentDTO en fonction d'un objet Collaborateur
/// </summary>
/// <param name="referent"></param>
/// <returns></returns>
private ReferentDTO GetReferentDTO(Collaborateur collaborateur)
{
if (collaborateur == null)
return null;
ReferentDTO referentDTO = new ReferentDTO()
{
Id = collaborateur.Id,
Prenom = collaborateur.Prenom,
Nom = collaborateur.Nom,
MailApside = collaborateur.MailApside
};
return referentDTO;
}
#endregion #endregion
#region DTO to Object #region DTO to Object

Loading…
Cancel
Save