public JsonResult generarTokenUsuario(string NombreUsuario, string submitButton, string token)
        {
            String strMensaje = "";
            String tipoUsuario = "";
            LNUsuario lnUsuario = new LNUsuario();
            DataSet dsResultado = ln.Autenticar_Usuario(NombreUsuario);

            if ((dsResultado != null) && dsResultado.Tables.Count>0 && dsResultado.Tables[0].Rows.Count>0)
                tipoUsuario = Convert.ToString(dsResultado.Tables[0].Rows[0]["TipoUsuario"]);

            if (String.IsNullOrEmpty(tipoUsuario))
            {
                strMensaje = "El usuario ingresado no es válido";
            }
            if (tipoUsuario == "USEREM")
            {

                var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                var random = new Random();
                var result = new string(
                    Enumerable.Repeat(chars, 8)
                              .Select(s => s[random.Next(s.Length)])
                              .ToArray());

                string ip = Ip();
                lnUsuario.InsertarToken(result, NombreUsuario, DateTime.Now.AddHours(1), DateTime.Now, ip);

                Mensaje mensaje = new Mensaje();
                mensaje.DeUsuarioCorreoElectronico = "*****@*****.**";
                mensaje.ParaUsuarioCorreoElectronico = Convert.ToString(dsResultado.Tables[2].Rows[0]["CorreoElectronico"]); //Administrador UTP
                mensaje.Asunto = "Cambio de Contraseña";
                mensaje.MensajeTexto = "Estimado(a):" + NombreUsuario + "\r\n\r\n" +
                    "Es grato comunicarnos con usted para informarle que debido la confidencialidad de la información que contiene su cuenta, le hemos generado un token para que valide su información en nuestra intranet.\r\n\r\n" +
                    "-Token: " + result + "\r\n\r\n" +
                    "Cordialmente \r\n\r\n" +
                    "Area de TI";
                LNCorreo.EnviarCorreo(mensaje);
                //strMensaje = "Se envio el TOKEN a las siguientes cuentas: " + mensaje.ParaUsuarioCorreoElectronico;
                strMensaje = "El token ha sido enviado a su correo electrónico.";
            }
            if (tipoUsuario != "USEREM" && !String.IsNullOrEmpty(tipoUsuario))
            {
                strMensaje = "Esta funcionalidad es solo para empresas";
            }

            return Json(strMensaje);
        }
        //-----
        public JsonResult verificarTokenUsuario(string NombreUsuario, string submitButton, string token)
        {
            String strMensaje = "";
            String tipoUsuario = "";
            LNUsuario lnUsuario = new LNUsuario();
            DataSet dsResultado = ln.Autenticar_Usuario(NombreUsuario);

            if ((dsResultado != null) && dsResultado.Tables.Count > 0 && dsResultado.Tables[0].Rows.Count > 0)
                tipoUsuario = Convert.ToString(dsResultado.Tables[0].Rows[0]["TipoUsuario"]);

            if (String.IsNullOrEmpty(tipoUsuario))
            {
                strMensaje = "El usuario ingresado no es válido";
            }
            if (tipoUsuario == "USEREM")
            {
                Session["Token"] = lnUsuario.ObtenerToken(NombreUsuario);
                int id = Convert.ToInt32(dsResultado.Tables[2].Rows[0]["IdEmpresa"]);

                LNEmpresaUsuario lnEmpresaUsuario = new LNEmpresaUsuario();
                List<VistaEmpresaUsuario> list = lnEmpresaUsuario.ObtenerUsuariosPorIdEmpresa(id);

                EmpresaUsuario empresaUsuario = lnEmpresaUsuario.ObtenerPorIdEmpresaUsuario(Convert.ToInt32(list[0].IdEmpresaUsuario));

                if (Session["Token"] == null || Session["Token"].ToString() != token)
                {
                    strMensaje = "El Token no es correcto.";
                }
            }
            if (tipoUsuario != "USEREM" && !String.IsNullOrEmpty(tipoUsuario))
            {
                strMensaje = "Esta funcionalidad es solo para empresas";
            }
            return Json(strMensaje);
        }
        public ActionResult GenerarToken(string NombreUsuario, string submitButton, string token)
        {
            LNUsuario lnUsuario = new LNUsuario();
            DataSet dsResultado = ln.Autenticar_Usuario(NombreUsuario);

            string tipoUsuario = Convert.ToString(dsResultado.Tables[0].Rows[0]["TipoUsuario"]);

            if (tipoUsuario == "USEREM") {
                switch (submitButton) {
                    case "mail":
                        var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
                        var random = new Random();
                        var result = new string(
                            Enumerable.Repeat(chars, 8)
                                      .Select(s => s[random.Next(s.Length)])
                                      .ToArray());

                        string ip = Ip();
                        lnUsuario.InsertarToken(result, NombreUsuario, DateTime.Now.AddHours(1), DateTime.Now, ip);

                        Mensaje mensaje = new Mensaje();
                        mensaje.DeUsuarioCorreoElectronico = "*****@*****.**";
                        mensaje.ParaUsuarioCorreoElectronico = Convert.ToString(dsResultado.Tables[2].Rows[0]["CorreoElectronico"]); //Administrador UTP
                        mensaje.Asunto = "Cambio de Contraseña";
                        mensaje.MensajeTexto = "Estimado(a):" + NombreUsuario + "\r\n\r\n" +
                            "Es grato comunicarnos con usted para informarle que debido la confidencialidad de la información que contiene su cuenta, le hemos generado un token para que valide su información en nuestra intranet.\r\n\r\n" +
                            "-Token: " + result + "\r\n\r\n" +
                            Request.Url.GetLeftPart(UriPartial.Authority)+"/#Token"+
                            "Cordialmente \r\n\r\n" +
                            "Area de TI";
                        LNCorreo.EnviarCorreo(mensaje);
                        TempData["CorreoExitoso"] = "Se envio el TOKEN a las siguientes cuentas: "+mensaje.ParaUsuarioCorreoElectronico;
                        return RedirectToAction("Index", "Home");

                    case "Ingresar":
                        Session["Token"] = lnUsuario.ObtenerToken(NombreUsuario);
                        int id = Convert.ToInt32(dsResultado.Tables[2].Rows[0]["IdEmpresa"]);
                        LNEmpresaUsuario lnEmpresaUsuario = new LNEmpresaUsuario();
                        List<VistaEmpresaUsuario> list = lnEmpresaUsuario.ObtenerUsuariosPorIdEmpresa(id);

                        EmpresaUsuario empresaUsuario = lnEmpresaUsuario.ObtenerPorIdEmpresaUsuario(Convert.ToInt32(list[0].IdEmpresaUsuario));

                        if (Session["Token"] == null || Session["Token"].ToString() != token)
                        {
                            TempData["TokenNoExitoso"] = "El Token no es correcto.";
                            return RedirectToAction("Index", "Home");
                        }
                        return Json(empresaUsuario);

                    default:
                        return null;
                }
            }

            TempData["TokenNoExitoso"] = "Esta funcionalidad es solo para empresas";
            return RedirectToAction("Index", "Home");
        }
        public PartialViewResult _VerDetalleEmpresaDatosGeneralesEditar(Empresa empresa)
        {
            LNUTP lnUTP = new LNUTP();

            //Empresa objempresa=new Empresa ();

            TicketUTP ticketUtp = (TicketUTP)Session["TicketUtp"];

            string correoUTP = ticketUtp.CorreoElectronico;
            empresa.Usuario = ticketUtp.Usuario;

            lnUtp.ActualizarEstadoYUsuarioEC(empresa, correoUTP);

            LNGeneral lnGeneral = new LNGeneral();
            LNUsuario lnUsuario = new LNUsuario();

            LNEmpresa lnEmpresa = new LNEmpresa();

            Empresa empresaActualizada = lnEmpresa.ObtenerDatosEmpresaPorId(empresa.IdEmpresa);

            ViewBag.EstadoIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_ESTADO_EMPRESA), "IdListaValor", "Valor", empresaActualizada.EstadoIdListaValor);
            ViewBag.UsuarioEC = new SelectList(lnUsuario.ObtenerUsuariosPorTipo("USERUT"), "NombreUsuario", "NombreCompleto", empresaActualizada.UsuarioEC);

            ViewBag.Rol = ticketUtp.Rol;

            return PartialView("_VerDetalleEmpresaDatosGenerales", empresaActualizada);
        }
        public PartialViewResult _VerDetalleEmpresaDatosGenerales(int id)
        {
            int idEmpresa = id; // Convert.ToInt32(Helper.Desencriptar(id));
            LNEmpresa lnEmpresa = new LNEmpresa();
            LNGeneral lnGeneral = new LNGeneral();
            LNUsuario lnUsuario = new LNUsuario();

            Empresa empresa = lnEmpresa.ObtenerDatosEmpresaPorId(idEmpresa);

            ViewBag.EstadoIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_ESTADO_EMPRESA), "IdListaValor", "Valor", empresa.EstadoIdListaValor);
            //Se obtienen sólo los usuarios activos:
            ViewBag.UsuarioEC = new SelectList(lnUsuario.ObtenerUsuariosPorTipo("USERUT"), "NombreUsuario", "NombreCompleto", empresa.UsuarioEC);
            TicketUTP ticketUtp = (TicketUTP)Session["TicketUtp"];
            ViewBag.Rol = ticketUtp.Rol;
            return PartialView("_VerDetalleEmpresaDatosGenerales", empresa);
        }
        public ActionResult _EmpresaNuevaModal(VistaRegistroEmpresa empresa)
        {
            LNUsuario lnUsuario = new LNUsuario();
            StringBuilder mensajeDeError = new StringBuilder();
            if (lnUsuario.ValidarExistenciaEmpresa(empresa.PaisIdListaValor, empresa.IdentificadorTributario))
            {
                mensajeDeError.Append("La Empresa ya se encuentra registrada<br />");
            }
            if (mensajeDeError.ToString() == "")
            {
                LNEmpresa lnEmpresa = new LNEmpresa();
                //Empresa
                TicketUTP ticket = (TicketUTP)Session["TicketUTP"];
                empresa.CreadoPor = ticket.Usuario;

                empresa.EstadoIdListaValor = "EMPRNO"; //Estado de la empresa No Activa.
                //Ubicación
                empresa.EstadoLocacionIdListaValor = "LOSTNO"; //Estado NO ACTIVA. Se debe activar al momento que UTP active la cuenta.

                if (empresa.PaisIdListaValor == "PAIPER")
                {
                    empresa.NombreLocacion = empresa.DireccionLocacion + ", " + empresa.TextDistrito + ", " + empresa.TextoCiudad + ", " + empresa.TextoDepartamento;

                }
                else
                {
                    empresa.NombreLocacion = empresa.DireccionLocacion + ", " + empresa.DireccionDistritoLocacion + ", " + empresa.DireccionCiudadLocacion + ", " + empresa.DireccionDepartamentoLocacion;
                }

                lnEmpresa.Insertar(empresa);

                //Si el registro fue exitoso redireccionar a página de resultado.
                TempData["GuardaRegistroExitoso"] = "La Empresa <strong>" + empresa.NombreComercial
                + "</strong>se ha registrado con éxito. ";
                //Aquí debería enviarse un correo
                //return PartialView();
            }
            else
            {
                var errors = ModelState.Select(x => x.Value.Errors)
                           .Where(y => y.Count > 0)
                           .ToList();
                //Variable temporal para poner el break
                int a = 0;
            }
            LNGeneral lnGeneral = new LNGeneral();
            ViewBag.PaisIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_PAIS), "IdListaValor", "Valor", empresa.PaisIdListaValor);
            ViewBag.SectorEmpresarial1IdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_SECTOR_EMPRESARIAL), "IdListaValor", "Valor", empresa.SectorEmpresarial1IdListaValor);
            ViewBag.TipoLocacionIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_TIPO_LOCACION), "IdListaValor", "Valor", empresa.TipoLocacionIdListaValor);
            ViewBag.TipoDocumentoIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_TIPO_DOCUMENTO), "IdListaValor", "Valor", empresa.TipoDocumentoIdListaValor);

            ViewBag.DireccionDepartamentoLocacion = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_Departamento), "IdListaValor", "Valor", empresa.DireccionDepartamentoLocacion);

            ViewBag.MensajeDeError = mensajeDeError;
            //return RedirectToAction("Empresas");

            LNEmpresaUsuario lnEmpresaUsuario = new LNEmpresaUsuario();
            List<EmpresaUsuario> lista = lnEmpresaUsuario.ObtenerUsuariosParaUTP(1, Constantes.FILAS_POR_PAGINA_UTP, "");

            //Datos para la paginación.
            int cantidadTotal = lista.Count() == 0 ? 0 : lista[0].CantidadTotal;

            Paginacion paginacion = new Paginacion();
            paginacion.NroPaginaActual = 1;
            paginacion.CantidadTotalResultados = cantidadTotal;
            paginacion.FilasPorPagina = Constantes.FILAS_POR_PAGINA_UTP; // Constantes.FILAS_POR_PAGINA_UTP;
            paginacion.TotalPaginas = cantidadTotal / Constantes.FILAS_POR_PAGINA_UTP; // Constantes.FILAS_POR_PAGINA_UTP;
            int residuo = cantidadTotal % Constantes.FILAS_POR_PAGINA_UTP; // Constantes.FILAS_POR_PAGINA_UTP;
            if (residuo > 0) paginacion.TotalPaginas += 1;

            ViewBag.Paginacion = paginacion;
            ViewBag.TipoBusqueda = "Simple";
            TicketUTP ticketUtp = (TicketUTP)Session["TicketUtp"];
            ViewBag.Rol = ticketUtp.Rol;

            return PartialView("_ResultadoBusquedaEmpresas", lista);
        }
        public ActionResult Registro(VistaRegistroEmpresa empresa)
        {
            LNUsuario lnUsuario = new LNUsuario();
            StringBuilder mensajeDeError = new StringBuilder();
            if (lnUsuario.ValidarNombreDeUsuario(empresa.CuentaUsuario))
            {
                mensajeDeError.Append("El Nombre de Usuario ya está Registrado<br />");
            }
            if (lnUsuario.ValidarExistenciaEmpresa(empresa.PaisIdListaValor, empresa.IdentificadorTributario))
            {
                mensajeDeError.Append("La Empresa ya se encuentra registrada, por favor comuníquese con nosotros<br />");
            }
            Regex rgx = new Regex(@"^\d{8}$");
            if (empresa.TipoDocumentoIdListaValor == "TDDNI")
            {
                if (!rgx.IsMatch(empresa.NumeroDocumento))
                {
                    mensajeDeError.Append("El Numero de Documento es inválido<br />");
                }
            }
            if (ModelState.IsValid && mensajeDeError.ToString() == "")
            {
                LNEmpresa lnEmpresa = new LNEmpresa();
                //Empresa
                empresa.CreadoPor = empresa.CuentaUsuario; //Usuario anónimo.
                empresa.EstadoIdListaValor = "EMPRRV"; //Estado de la empresa pendiente de aprobación.
                //Ubicación
                empresa.EstadoLocacionIdListaValor = "LOSTNO"; //Estado NO ACTIVA. Se debe activar al momento que UTP active la cuenta.

                if (empresa.PaisIdListaValor == "PAIPER")
                {
                    empresa.NombreLocacion = empresa.DireccionLocacion + ", " + empresa.TextDistrito + ", " + empresa.TextoCiudad + ", " + empresa.TextoDepartamento;

                }
                else
                {
                    empresa.NombreLocacion = empresa.DireccionLocacion + ", " + empresa.DireccionDistritoLocacion + ", " + empresa.DireccionCiudadLocacion + ", " + empresa.DireccionDepartamentoLocacion;
                }

                //validar si el pais es peru, si es asi entonces:

                //Usuario
                empresa.RolIdListaValor = "ROLEAD"; //La cuenta es creada como Rol: "Administrador de Empresa"
                empresa.EstadoUsuarioIdListaValor = "USEUTP"; //El usuario también se encuenta pendiente de activación. Se debe activar al momento que UTP active la cuenta.
                byte[] bytes = Encoding.Default.GetBytes(empresa.Contrasena);
                SHA1 sha = new SHA1CryptoServiceProvider();
                byte[] password = sha.ComputeHash(bytes);
                String spassword = Encoding.Default.GetString(password);
                empresa.Contrasena = spassword;
                lnEmpresa.Insertar(empresa);

                //Enviar mensaje de correo:
                LNMensaje lnMensaje = new LNMensaje();
                DataTable dtUsuarioUTPAdmin = lnMensaje.ObtenerUsuarioAdministradorUTP();

                if (dtUsuarioUTPAdmin.Rows.Count > 0)
                {
                    Mensaje mensaje = new Mensaje();
                    mensaje.DeUsuarioCorreoElectronico = empresa.EmailUsuario;
                    mensaje.ParaUsuarioCorreoElectronico = Convert.ToString(dtUsuarioUTPAdmin.Rows[0]["CorreoElectronico"]); //Administrador UTP
                    mensaje.Asunto = empresa.NombreComercial + " Empresa registrada en el Portal:";
                    mensaje.MensajeTexto = "La empresa '" + empresa.NombreComercial + "' se ha registrado en el portal y está a la espera de activación";
                    LNCorreo.EnviarCorreo(mensaje);
                }

                //Si el registro fue exitoso redireccionar a página de resultado.
                TempData["GuardaRegistroExitoso"] = "Estimado(a) <strong>" + empresa.NombresUsuario + " " + empresa.ApellidosUsuario
                + "</strong>, muchas gracias por enviarnos su información. En breve recibirá un correo de confirmación con sus datos.</br></br>Nuestro proceso de activación tomará un plazo no mayor a 1 día útil, antes del cual estaremos comunicándole la activación de su Usuario. ";
                //Aquí debería enviarse un correo
                return RedirectToAction("Index");
            }
            else
            {
                var errors = ModelState.Select(x => x.Value.Errors)
                           .Where(y => y.Count > 0)
                           .ToList();
                //Variable temporal para poner el break
                int a = 0;
            }
            LNGeneral lnGeneral = new LNGeneral();
            ViewBag.PaisIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_PAIS), "IdListaValor", "Valor", empresa.PaisIdListaValor);
            ViewBag.SectorEmpresarial1IdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_SECTOR_EMPRESARIAL), "IdListaValor", "Valor", empresa.SectorEmpresarial1IdListaValor);
            ViewBag.TipoLocacionIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_TIPO_LOCACION), "IdListaValor", "Valor", empresa.TipoLocacionIdListaValor);
            ViewBag.TipoDocumentoIdListaValor = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_TIPO_DOCUMENTO), "IdListaValor", "Valor", empresa.TipoDocumentoIdListaValor);

            ViewBag.DireccionDepartamentoLocacion = new SelectList(lnGeneral.ObtenerListaValor(Constantes.IDLISTA_Departamento), "IdListaValor", "Valor", empresa.DireccionDepartamentoLocacion);

            ViewBag.MensajeDeError = mensajeDeError;
            return View(empresa);
        }