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);
        }
Ejemplo n.º 2
0
        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));
        }