/// <summary>
        /// </summary>
        public UsuarioDTO Login(UsuarioDTO usuario)
        {
            if (string.IsNullOrEmpty(usuario.Email) || string.IsNullOrEmpty(usuario.Password))
            {
                Exception excepcion = new Exception("Usuario o contraseña inválidos.");
                excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                throw excepcion;
            }
            if (string.IsNullOrWhiteSpace(usuario.Email) || string.IsNullOrWhiteSpace(usuario.Password))
            {
                Exception excepcion = new Exception("Usuario o contraseña inválidos.");
                excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                throw excepcion;
            }
            if (!new EmailAddressAttribute().IsValid(usuario.Email))
            {
                Exception excepcion = new Exception("El usuario no es un correo electrónico válido.");
                excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                throw excepcion;
            }

            DB_MAPRI_Entities context           = null;
            UsuarioDTO        usuarioEncontrado = null;
            T_Usrs            usuarioResult     = null;

            try
            {
                context = new DB_MAPRI_Entities();

                usuarioResult = context.T_Usrs.AsParallel().FirstOrDefault(
                    e => e.Email == usuario.Email.ToLower() && e.Password == usuario.Password && e.DeleteDate == null);

                if (usuarioResult == null)
                {
                    Exception excepcion = new Exception("No existe un usuario registrado con esos datos.");
                    excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                    throw excepcion;
                }

                usuarioEncontrado = UsuarioDTO.EntityToDTO(usuarioResult);
            }
            catch (Exception exception)
            {
                throw exception;
            }
            finally
            {
                context?.Dispose();
            }

            return(usuarioEncontrado);
        }
        public List <HistoricoKilometrajeDTO> ImportarDatosInterface(UploadedFileDTO file, string usuario)
        {
            List <HistoricoKilometrajeDTO> listaResultado = new List <HistoricoKilometrajeDTO>();
            List <T_Ihmn>     datosAgregar = new List <T_Ihmn>();
            DB_MAPRI_Entities context      = null;

            int      columnasDetectadas   = 0;
            int      filaInicio           = 0;
            DateTime?fechaCreacionArchivo = null;
            bool     esFilaFecha          = false;

            try
            {
                XLWorkbook archivoXLSX = GetWoorkbook(file.Data);

                IXLRows nonEmptyDataRows = archivoXLSX.Worksheet("Report").RowsUsed();

                foreach (IXLRow dataRow in nonEmptyDataRows)
                {
                    if (columnasDetectadas == listaColumnasGuardar.Count)
                    {
                        break;
                    }

                    IXLCells cellsUsed = dataRow.CellsUsed();

                    foreach (IXLCell cellItem in cellsUsed)
                    {
                        if (columnasDetectadas == listaColumnasGuardar.Count)
                        {
                            break;
                        }

                        string valorCelda = cellItem.GetValue <string>().Trim();

                        if (valorCelda == "Created")
                        {
                            esFilaFecha = true;
                            continue;
                        }
                        if (esFilaFecha && fechaCreacionArchivo == null)
                        {
                            double baseDate = cellItem.GetValue <double>();
                            fechaCreacionArchivo = DateTime.FromOADate(baseDate);
                        }

                        int    rowNumber    = cellItem.Address.RowNumber;
                        int    columnNumber = cellItem.Address.ColumnNumber;
                        string value        = cellItem.Value.ToString().Trim();

                        if (listaColumnasGuardar.ContainsKey(value))
                        {
                            if (listaColumnasGuardar[value] == 0)
                            {
                                listaColumnasGuardar[value] = columnNumber;
                                if (filaInicio == 0)
                                {
                                    filaInicio = rowNumber + 1;
                                }
                                columnasDetectadas++;
                            }
                        }
                    }
                }

                var dataRows = archivoXLSX.Worksheet("Report").RowsUsed().Where(r => r.RowNumber() >= filaInicio);

                Parallel.ForEach(dataRows, new ParallelOptions {
                    MaxDegreeOfParallelism = 10
                }, e => AgregarHistoricoKilometrajeDTO(e, fechaCreacionArchivo, ref listaResultado));

                datosAgregar.AddRange(
                    listaResultado.AsParallel().Select(
                        e => new T_Ihmn()
                {
                    VIN          = e.VIN,
                    Fecha        = e.Fecha,
                    Kilometros   = e.Kilometros,
                    Horas        = e.Horas,
                    Minutos      = e.Minutos,
                    CreationUser = usuario,
                    Accion       = "Alta",
                    CreationDate = DateTime.Now
                })
                    );

                context = new DB_MAPRI_Entities();

                context.T_Ihmn.AddRange(datosAgregar);
                int saved = context.SaveChanges();

                listaResultado.Clear();

                listaResultado.AddRange(
                    datosAgregar.AsParallel().Select(
                        e => new HistoricoKilometrajeDTO()
                {
                    Id         = e.Id,
                    VIN        = e.VIN,
                    Fecha      = e.Fecha,
                    Kilometros = e.Kilometros,
                    Horas      = e.Horas,
                    Minutos    = e.Minutos
                })
                    );
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                context?.Dispose();
            }


            return(listaResultado);
        }