public async Task AddCandidatoToTernaAsync(int idRequisicion, int idCandidato, ETerna idTerna) { var ternas = await this.ternasRepository.ListAsync(new TernasSpecification(idRequisicion)) .ConfigureAwait(false); var ternaDestino = ternas.FirstOrDefault(t => t?.TipoTerna == idTerna); TernaCandidato ternaCandidato = null; foreach (var terna in ternas) { ternaCandidato = terna.TernaCandidato.FirstOrDefault(tc => tc.Id == idCandidato); if (ternaCandidato == null) { continue; } ternaCandidato.Ternas = ternaDestino; ternaCandidato.EstadoCandidato = EEstadoCandidato.NoCalificado; break; } if (ternaDestino == null) { var requisicion = await this.requisicionRepository.Single(new RequisicionSpecification(idRequisicion)); ternaDestino = new Ternas { RequisicionDetalleId = requisicion.RequisicionDetalle.Id, TipoTerna = idTerna }; await this.ternasRepository.AddAsync(ternaDestino); } if (ternaCandidato != null) { if (ternaDestino.TernaCandidato == null) { ternaDestino.TernaCandidato = new List <TernaCandidato>(); } ternaDestino.TernaCandidato.Add(ternaCandidato); await this.ternasRepository.UpdateAsync(ternaDestino) .ConfigureAwait(false); } await this.AlertarSeguimiento(idRequisicion) .ConfigureAwait(false); }
private async Task <Ternas> AddTernaCandidatoAsync(int idRequisicion) { var ternas = await this.ternasRepository.ListAsync(new TernasSpecification(idRequisicion)) .ConfigureAwait(false); var ternasComplete = ternas.Where(t => t?.TipoTerna != ETerna.SinDefinir).Select( t => new { t.Id, IsComplete = t.TernaCandidato?.Any() == true && t.TernaCandidato.Count == 3 }); Ternas terna = null; var ternaLibre = ternasComplete.FirstOrDefault(t => !t.IsComplete); if (ternaLibre != null) { terna = ternas.FirstOrDefault(t => t?.Id == ternaLibre.Id); } else { var resultRequisicion = await this.GetAsync(new RequisicionSpecification(idRequisicion)) .ConfigureAwait(false); var detalle = resultRequisicion.FirstOrDefault()?.RequisicionDetalle; var ternaRepository = this.ternasRepository; if (ternas.Count == 0) { var ternaSinDefinir = new Ternas { TipoTerna = ETerna.SinDefinir, RequisicionDetalleId = detalle?.Id }; var nextTerna = new Ternas { TipoTerna = ETerna.Terna1, RequisicionDetalleId = detalle?.Id }; if (ternaRepository == null) { return(null); } if (ternaRepository != null) { await ternaRepository.AddAsync(ternaSinDefinir).ConfigureAwait(false); await ternaRepository.AddAsync(nextTerna).ConfigureAwait(false); terna = nextTerna; } } else { var nextTerna = new Ternas { // TernaCandidato = new List<TernaCandidato> { candidatoTerna }, TipoTerna = (ETerna)ternas.Count, RequisicionDetalleId = detalle?.Id }; if (ternaRepository == null) { return(null); } await ternaRepository.AddAsync(nextTerna).ConfigureAwait(false); terna = nextTerna; } } ternas = await this.ternasRepository.ListAsync(new TernasSpecification(idRequisicion)) .ConfigureAwait(false); return(ternas.FirstOrDefault(t => t.Id == terna.Id)); }