public GetOfertasResponse GetOfertas(DataTableRequest request)
        {
            var response = new GetOfertasResponse();

            try
            {
                var query    = FilterString(request.CustomFilters);
                var filtered = query.ApplyColumnSettings(request, OfertaMapper.GetPropertiePath);

                var ofertaIds       = filtered.Select(x => x.OfertaId).ToList();
                var totalCandidatos = new Dictionary <int, int>();
                foreach (var ofertaId in ofertaIds)
                {
                    var count = _candidaturaRepository.CountByCriteria(x => x.OfertaId == ofertaId);
                    totalCandidatos.Add(ofertaId, count);
                }



                response.OfertaViewModel = filtered.ConvertToOfertaRowViewModel(totalCandidatos);
                response.TotalElementos  = query.Count();

                response.IsValid = true;
            }
            catch (Exception ex)
            {
                response.IsValid      = false;
                response.ErrorMessage = ex.Message;
            }

            return(response);
        }
        private GetDatosByCandidatoIdResponse GetDatosByCandidatoId(int candidatoId)
        {
            var response  = new GetDatosByCandidatoIdResponse();
            var candidato = _candidatoRepository.GetOne(x => x.CandidatoId == candidatoId);

            response.NivelIngles = "N/A";

            try
            {
                if (candidato.CandidatoIdiomas.Count > 0)
                {
                    foreach (CandidatoIdioma i in candidato.CandidatoIdiomas)
                    {
                        if (i.IdiomaId == 15)
                        {
                            response.NivelIngles = i.NivelIdioma.Nombre;
                        }
                    }
                }

                response.NumCandidaturas = _candidaturaRepository.CountByCriteria(x => x.CandidatoId == candidatoId && x.IsActivo);
                response.IsValid         = true;
            }
            catch (Exception ex)
            {
                response.IsValid      = false;
                response.ErrorMessage = ex.Message;
            }

            return(response);
        }
        public GenerateBitacoraResponse GenerateBitacoraCambioEstadoCandidatura(int candidaturaId, int estadoAnteriorId, int estadoNuevoId, int etapaAnteriorId, int etapaNuevaId, int?decisionId = null)
        {
            var response = new GenerateBitacoraResponse()
            {
                IsValid = true
            };

            try
            {
                var userInfo      = (UsuarioRolPermisoViewModel)HttpContext.Current.Session["Usuario"];
                var nCandidaturas = _candidaturaRepository.CountByCriteria(x => x.CandidaturaId == candidaturaId);

                var          estadoAnterior = _tipoEstadoCandidaturaRepository.GetOne(x => x.TipoEstadoCandidaturaId == estadoAnteriorId);
                var          estadoNuevo    = _tipoEstadoCandidaturaRepository.GetOne(x => x.TipoEstadoCandidaturaId == estadoNuevoId);
                var          etapaAnterior  = _tipoEtapaCandidaturaRepository.GetOne(x => x.TipoEtapaCandidaturaId == etapaAnteriorId);
                var          etapaNueva     = _tipoEtapaCandidaturaRepository.GetOne(x => x.TipoEtapaCandidaturaId == etapaNuevaId);
                TipoDecision decision       = null;
                if (decisionId.HasValue)
                {
                    decision = _tipoDecisionRepository.GetOne(x => x.TipoDecisionId == decisionId.Value);
                }

                if ((userInfo == null) || (nCandidaturas != 1) ||
                    (estadoAnterior == null) || (estadoNuevo == null) ||
                    (etapaAnterior == null) || (etapaNueva == null))
                {
                    response.IsValid      = false;
                    response.ErrorMessage = ERROR_MESSAGE;
                    return(response);
                }

                var str = new StringBuilder();
                str.AppendLine(string.Format("La candidatura con referencia {0} ha pasado del estado '{1}' y etapa '{2}' a estado '{3}' y etapa '{4}'.",
                                             candidaturaId, estadoAnterior.EstadoCandidatura, etapaAnterior.EtapaCandidatura, estadoNuevo.EstadoCandidatura, etapaNueva.EtapaCandidatura));

                str.Append(string.Format("Decision tomada por el usuario: '{0}' en la fecha: '{1}'", userInfo.Usuario, DateTime.Now));

                if (decision != null)
                {
                    str.Append(string.Format(" ==> '{0}'.", decision.Decision));
                }

                var message     = str.ToString();
                var newBitacora = new Bitacora()
                {
                    CandidaturaId    = candidaturaId,
                    TipoBitacora     = (int)TipoBitacoraEnum.CambioEstado,
                    Observaciones    = "",
                    MensajeSistema   = message,
                    EstadoAnteriorId = estadoAnteriorId,
                    EtapaAnteriorId  = etapaAnteriorId,
                    EstadoNuevoId    = estadoNuevoId,
                    EtapaNuevaId     = etapaNuevaId,
                    IsActivo         = true,
                    CreatedBy        = userInfo.UsuarioId,
                    Created          = DateTime.Now,
                    Revertible       = true,
                };

                _bitacoraRepository.Create(newBitacora);
            }
            catch
            {
                response.IsValid      = false;
                response.ErrorMessage = ERROR_MESSAGE;
            }

            return(response);
        }