public async Task <Tuple <int, IEnumerable <OrdenTrabajoRemisionDTO> > > ConsultarOrdenDeTrabajoParaRemision(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                //CanonicalConstants.Estados.OrdenTrabajo.Remision

                var query = _context.OrdenTrabajo.Where(ot => ot.Estado.Valor == CanonicalConstants.Estados.OrdenTrabajo.Remision && ot.RemisionId == null);

                var result = query.Select(ot => new OrdenTrabajoRemisionDTO
                {
                    Id                  = ot.Id,
                    Guid                = ot.Guid,
                    Cliente             = ot.Cliente.NickName,
                    Linea               = ot.Linea.Nombre,
                    Herramienta         = ot.Herramienta.Nombre,
                    Fecha               = ot.FechaRegistro,
                    ObservacionRemision = ot.ObservacionRemision
                }).OrderByDescending(c => c.Fecha)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToList();

                var cantidad = await query.CountAsync();

                return(new Tuple <int, IEnumerable <OrdenTrabajoRemisionDTO> >(cantidad, result));
            }
            catch (Exception)
            {
                throw;
            }
        }
        public async Task <IActionResult> GetList([FromQuery] Paginacion paginacion)
        {
            try
            {
                var productos = await _productService.ListaProductos();

                var resul = new { productos = productos.ToList().Skip(paginacion.RegistrosOmitir()).Take(paginacion.CantidadRegistrosMostrar), totalRegistrosBD = productos.Count() };
                return(Ok(resul));
            }
            catch (Exception)
            {
                throw;
            }
        }
        public async Task <Tuple <int, IEnumerable <OrdenTrabajoHistorialModificacion> > > ConsultarHistorialModificacionesOrdenDeTrabajo(Guid guidOrdenTrabajo, Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var result = await _context.OrdenTrabajoHistorialModificacion.Where(c => c.OrdenTrabajo.Guid == guidOrdenTrabajo)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToListAsync();

                var cantidad = await _context.OrdenTrabajoHistorialModificacion.Where(c => c.OrdenTrabajo.Guid == guidOrdenTrabajo).CountAsync();

                return(new Tuple <int, IEnumerable <OrdenTrabajoHistorialModificacion> >(cantidad, result));
            }
            catch (Exception) { throw; }
        }
        public async Task <Tuple <int, IEnumerable <Cliente> > > ConsultarClientes(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var result = await _context.Cliente
                             .Include(c => c.Estado)
                             .Include(c => c.Lineas)
                             .Include(c => c.Rut)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToListAsync();

                var cantidad = await _context.Cliente.CountAsync();

                return(new Tuple <int, IEnumerable <Cliente> >(cantidad, result));
            }
            catch (Exception) { throw; }
        }
        public async Task <Tuple <int, IEnumerable <OrdenTrabajo> > > ConsultarOrdenesDeTrabajo(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var result = await _context.OrdenTrabajo
                             .Include(c => c.Cliente)
                             .Include(c => c.Herramienta)
                             .Include(c => c.TipoServicio)
                             .Include(c => c.Estado)
                             .Include(c => c.Responsable).OrderByDescending(c => c.FechaRegistro)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToListAsync();

                var cantidad = await _context.OrdenTrabajo.CountAsync();

                return(new Tuple <int, IEnumerable <OrdenTrabajo> >(cantidad, result));
            }
            catch (Exception) { throw; }
        }
        public async Task <Tuple <int, IEnumerable <Herramienta> > > ConsultarHerramientas(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var result = await _context.Herramienta
                             .Include(c => c.Materiales).ThenInclude(c => c.Material)
                             .Include(c => c.TamanosHerramienta)
                             .Include(c => c.TamanosMotor)
                             .Include(c => c.HerramientaEstudioFactibilidad)
                             .Include(c => c.Estado)
                             .Include(c => c.Cliente)
                             .Include(c => c.Linea)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToListAsync();

                var cantidad = await _context.Herramienta.CountAsync();

                return(new Tuple <int, IEnumerable <Herramienta> >(cantidad, result));
            }
            catch (Exception) { throw; }
        }
        public async Task <Tuple <int, IEnumerable <SolicitudOrdenTrabajo> > > ConsultarSolicitudesDeTrabajo(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var result = await _context.SolicitudOrdenTrabajo
                             .Include(c => c.Anexos)
                             .Include(c => c.Cliente)
                             .Include(c => c.ClienteLinea)
                             .Include(c => c.Estado)
                             .Include(c => c.OrigenSolicitud)
                             .Include(c => c.Prioridad)
                             .Include(c => c.Responsable)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToListAsync();

                var cantidad = await _context.SolicitudOrdenTrabajo.CountAsync();

                return(new Tuple <int, IEnumerable <SolicitudOrdenTrabajo> >(cantidad, result));
            }
            catch (Exception) { throw; }
        }
        public async Task <Tuple <int, IEnumerable <RemisionPendienteDTO> > > ConsultarRemisionesPendientes(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var query = await(from r in _context.Remision
                                  join rd in _context.RemisionDetalle on r.Id equals rd.RemisionId
                                  where r.Estado.Valor == CanonicalConstants.Estados.Remision.Pendiente
                                  select new RemisionPendienteDTO
                {
                    RemisionId       = r.Id,
                    GuidRemision     = r.Guid,
                    OrdenTrabajoId   = rd.OrdenTrabajo.Id,
                    Cliente          = rd.OrdenTrabajo.Cliente.NickName,
                    Linea            = rd.OrdenTrabajo.Linea.Nombre,
                    Herramienta      = rd.OrdenTrabajo.Herramienta.Nombre,
                    Serial           = rd.OrdenTrabajo.SerialHerramienta,
                    DetalleSolicitud = rd.OrdenTrabajo.DetallesSolicitud,
                    Estado           = r.Estado.Valor,
                    Fecha            = r.FechaRegistro
                }).ToListAsync();


                var result = query.OrderByDescending(r => r.Fecha)
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros)
                             .ToList();


                var cantidad = query.Count();


                return(new Tuple <int, IEnumerable <RemisionPendienteDTO> >(cantidad, result));
            }
            catch (Exception)
            {
                throw;
            }
        }
        public async Task <Tuple <int, ICollection <Formato> > > ConsultarFormatos(Paginacion paginacion, UsuarioDTO usuario)
        {
            try
            {
                var query = _context.Formato.AsNoTracking()
                            .Include(c => c.Adjunto)
                            .Include(c => c.Adendum)
                            .Include(c => c.FormatoFormatoParametro).ThenInclude(d => d.FormatoParametro)
                            .Include(c => c.Planos)



                            .Include(c => c.Herramienta);

                var result = await query
                             .Skip(paginacion.RegistrosOmitir())
                             .Take(paginacion.CantidadRegistros).ToListAsync();

                var cantidad = await _context.Cliente.CountAsync();

                return(new Tuple <int, ICollection <Formato> >(cantidad, result));
            }
            catch (Exception e) { throw e; }
        }