public GenerateBitacoraResponse GenerateBitacoraDescarteCandidatura(int candidaturaId, int estadoAnteriorId, int estadoNuevoId, int etapaAnteriorId, int motivoDescarteId)
        {
            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 motivoDescarte = _maestroRepository.GetOne(x => x.MaestroId == motivoDescarteId);

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

                var message = string.Format("La candidatura con referencia {0} fué cambiada a 'Descartar' por el usuario: '{1}' en la fecha: '{2}'. Motivo: {3}", candidaturaId, userInfo.Usuario, DateTime.Now, motivoDescarte.Nombre);


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

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

            return(response);
        }
        public GenerateBitacoraResponse GenerateBitacoraPausarReanudar(int candidaturaId, bool esPausar)
        {
            var response = new GenerateBitacoraResponse()
            {
                IsValid = true
            };

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

                if ((userInfo == null) || (nCandidatura != 1))
                {
                    response.IsValid      = false;
                    response.ErrorMessage = ERROR_MESSAGE;
                    return(response);
                }

                var msgEstado    = "reanudada";
                var tipoBitacora = TipoBitacoraEnum.Reanudar;
                if (esPausar)
                {
                    tipoBitacora = TipoBitacoraEnum.Pausar;
                    msgEstado    = "pausada";
                }

                var message     = string.Format("La candidatura con referencia {0} fué {1} por el usuario: '{2}' en la fecha: '{3}'", candidaturaId, msgEstado, userInfo.Usuario, DateTime.Now);
                var newBitacora = new Bitacora()
                {
                    CandidaturaId    = candidaturaId,
                    TipoBitacora     = (int)tipoBitacora,
                    Observaciones    = "",
                    MensajeSistema   = message,
                    EstadoAnteriorId = null,
                    EtapaAnteriorId  = null,
                    EstadoNuevoId    = null,
                    EtapaNuevaId     = null,
                    IsActivo         = true,
                    CreatedBy        = userInfo.UsuarioId,
                    Created          = DateTime.Now,
                    Revertible       = false,
                };

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

            return(response);
        }
        public GenerateBitacoraResponse GenerateBitacoraRetroceder(int candidaturaId, int bitacoraId)
        {
            var response = new GenerateBitacoraResponse()
            {
                IsValid = true
            };

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

                if ((userInfo == null) || (nCandidatura != 1))
                {
                    response.IsValid      = false;
                    response.ErrorMessage = ERROR_MESSAGE;
                    return(response);
                }

                var message = string.Format("Se ha deshecho el cambio de la bitacora {0} de la candidatura {1} por el usuario: '{2}' en la fecha: '{3}'", bitacoraId, candidaturaId, userInfo.Usuario, DateTime.Now);

                var newBitacora = new Bitacora()
                {
                    CandidaturaId    = candidaturaId,
                    TipoBitacora     = (int)TipoBitacoraEnum.Retroceder,
                    Observaciones    = "",
                    MensajeSistema   = message,
                    EstadoAnteriorId = null,
                    EtapaAnteriorId  = null,
                    EstadoNuevoId    = null,
                    EtapaNuevaId     = null,
                    IsActivo         = true,
                    CreatedBy        = userInfo.UsuarioId,
                    Created          = DateTime.Now,
                    Revertible       = false,
                };

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

            return(response);
        }
        public GenerateBitacoraResponse GenerateBitacoraCreateCandidatura(int candidaturaId)
        {
            var response = new GenerateBitacoraResponse()
            {
                IsValid = true
            };

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

                if ((userInfo == null) || (candidatura == null))
                {
                    response.IsValid      = false;
                    response.ErrorMessage = ERROR_MESSAGE;
                    return(response);
                }

                var message     = string.Format("La candidatura con referencia {0} fué creada por el usuario: '{1}' en la fecha: '{2}'", candidaturaId, userInfo.Usuario, DateTime.Now);
                var newBitacora = new Bitacora()
                {
                    CandidaturaId    = candidaturaId,
                    TipoBitacora     = (int)TipoBitacoraEnum.Creacion,
                    Observaciones    = "",
                    MensajeSistema   = message,
                    EstadoAnteriorId = null,
                    EtapaAnteriorId  = null,
                    EstadoNuevoId    = candidatura.EstadoCandidaturaId,
                    EtapaNuevaId     = candidatura.EtapaCandidaturaId,
                    IsActivo         = true,
                    CreatedBy        = userInfo.UsuarioId,
                    Created          = DateTime.Now,
                    Revertible       = false,
                };

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

            return(response);
        }
        public GenerateBitacoraResponse GenerateBitacoraCorreo(int candidaturaId, string mensaje)
        {
            var response = new GenerateBitacoraResponse()
            {
                IsValid = true
            };

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

                if ((userInfo == null) || (nCandidatura != 1) || string.IsNullOrWhiteSpace(mensaje))
                {
                    response.IsValid      = false;
                    response.ErrorMessage = ERROR_MESSAGE;
                    return(response);
                }

                var newBitacora = new Bitacora()
                {
                    CandidaturaId    = candidaturaId,
                    TipoBitacora     = (int)TipoBitacoraEnum.Correo,
                    Observaciones    = "",
                    MensajeSistema   = mensaje,
                    EstadoAnteriorId = null,
                    EtapaAnteriorId  = null,
                    EstadoNuevoId    = null,
                    EtapaNuevaId     = null,
                    IsActivo         = true,
                    CreatedBy        = userInfo.UsuarioId,
                    Created          = DateTime.Now,
                    Revertible       = false,
                };

                _bitacoraRepository.Create(newBitacora);
            }
            catch
            {
                response.IsValid      = false;
                response.ErrorMessage = ERROR_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);
        }