public PagedResponse <DocumentoResponse> GetDocumentosGestionInterna(DocumentoFilter filters, DocumentoOptions options)
        {
            var _where = BuildFilters.BuildFiltersDocumento(filters);

            var movimientos = _context.Query <Modelo.movimiento_documento>();
            var persona     = _context.Query <Modelo.v_persona>().Select(x => new { x.ID });
            Expression <Func <Modelo.documento, bool> > _custom = x =>
                                                                  (movimientos.Any(m => (filters.mvEnviado == null || m.enviado == filters.mvEnviado) &&
                                                                                   (filters.mvDerivado == null || m.derivado == filters.mvDerivado) &&
                                                                                   (filters.mvFinalizado == null || m.finalizado == filters.mvFinalizado) &&
                                                                                   m.ID_DEPENDENCIA_DESTINO == filters.coddep &&
                                                                                   (filters.isDocumentoRecibido == null || ((m.AUDIT_REC != null) == filters.isDocumentoRecibido)) &&
                                                                                   (filters.estado_documento_interno != (int)ESTADODOC_INTERNO.FINALIZADO || m.finalizado == 1) &&
                                                                                   (filters.estado_documento_interno != (int)ESTADODOC_INTERNO.DELEGADO || m.codigo_trabajador != null) &&
                                                                                   m.AUDIT_MOD >= Convert.ToDateTime("01/01/2014") &&
                                                                                   x.ID_DOCUMENTO == m.ID_DOCUMENTO
                                                                                   ));

            _where = _where.AndAlso(_custom);
            var query = _context.Query <Modelo.documento>();

            query = BuildOptionsDocumento(query, options);
            query = query.Where(_where).OrderByDescending(x => x.AUDITMOD).AsQueryable();
            var page = query.PagedResponse <Modelo.documento, DocumentoResponse>(filters, _mapper);

            return(page);
        }
        public PagedResponse <DocumentoResponse> GetDocumentosMesaPartes(DocumentoFilter filters, DocumentoOptions options)
        {
            var _where = BuildFilters.BuildFiltersDocumento(filters);

            var personas = _context.Query <Modelo.v_persona>().Select(x => new { x.ID, razon_social_format = (x.NOMBRES + " " + x.APELLIDOS + " " + x.RAZON_SOCIAL).Trim() });

            var trabajadores = _context.Query <Modelo.vw_dat_trabajador>().Select(x => new { x.CODIGO_DEPENDENCIA, x.EMAIL });

            var dependencias_consulta = new int[] { DEPENDENCIA_PRODUCE.OGACI, DEPENDENCIA_PRODUCE.OGDA, DEPENDENCIA_PRODUCE.OACI, DEPENDENCIA_PRODUCE.OACI_2 };

            var documentos = _context.Query <Modelo.documento>().Select(d => new { d.ID_DOCUMENTO, d.ID_CLASE_DOCUMENTO_INTERNO, d.INDICATIVO_OFICIO });

            var movimientos = _context.Query <Modelo.movimiento_documento>().Select(m => new { m.ID_DOCUMENTO, m.ID_OFICIO, m.ID_DEPENDENCIA_DESTINO });

            var resoluciones = _context.Query <Modelo.resolucion>().Select(r => new { r.id_documento, r.id_tipo_resolucion, r.nro_resol });

            Expression <Func <Modelo.documento, bool> > _custom = x =>
                                                                  (string.IsNullOrEmpty(filters.razon_socialClean) || personas.Any(p => p.razon_social_format.Trim().Contains(filters.razon_socialClean) && x.ID_PERSONA == p.ID)) &&

                                                                  (filters.id_clase_documento_hijo == null || string.IsNullOrEmpty(filters.indicativo_oficio_hijo) ||
                                                                   movimientos.Any(m => m.ID_DOCUMENTO == x.ID_DOCUMENTO &&
                                                                                   documentos.Any(d =>
                                                                                                  d.ID_DOCUMENTO == m.ID_OFICIO &&
                                                                                                  d.ID_CLASE_DOCUMENTO_INTERNO == filters.id_clase_documento_hijo &&
                                                                                                  d.INDICATIVO_OFICIO.Contains(filters.indicativo_oficio_hijo)
                                                                                                  )
                                                                                   )
                                                                  ) &&

                                                                  (filters.oficina_derivada == null ||
                                                                   movimientos.Any(m =>
                                                                                   x.ID_DOCUMENTO == m.ID_DOCUMENTO &&
                                                                                   m.ID_OFICIO == null &&
                                                                                   m.ID_DEPENDENCIA_DESTINO == filters.oficina_derivada.Value
                                                                                   )
                                                                  ) &&

                                                                  (filters.id_tipo_resolucion == null || string.IsNullOrEmpty(filters.numero_resolucion) ||
                                                                   resoluciones.Any(r => r.id_documento == x.ID_DOCUMENTO && r.id_tipo_resolucion == filters.id_tipo_resolucion && r.nro_resol.Contains(filters.numero_resolucion))) &&

                                                                  (trabajadores.Any(t => t.EMAIL == x.USUARIO && dependencias_consulta.Contains(t.CODIGO_DEPENDENCIA)));

            _where = _where.AndAlso(_custom);

            var query = _context.Query <Modelo.documento>();

            query = BuildOptionsDocumento(query, options);

            query = query.Where(_where).OrderByDescending(x => x.AUDITMOD).AsQueryable();

            query = (from a in query
                     join b in _context.Query <Modelo.documento_cont>() on a.ID_DOCUMENTO equals b.ID_DOCUMENTO into docs
                     from b in docs.DefaultIfEmpty()
                     select a.setDocumentoCont(b));

            var page = query.PagedResponse <Modelo.documento, DocumentoResponse>(filters, _mapper);

            page.Data.ToList().ForEach(x =>
            {
                var mov_inicial = _context.Query <Modelo.movimiento_documento>()
                                  .Include(m => m.dependencia_destino)
                                  .FirstOrDefault(m => m.ID_DOCUMENTO == x.id_documento && m.ID_OFICIO == null);
                if (mov_inicial != null)
                {
                    x.aceptado_dependencia_inicial = mov_inicial.AUDIT_REC != null;
                    x.dependencia_inicial          = _mapper.Map <Modelo.vw_dat_dependencia, DependenciaResponse>(mov_inicial.dependencia_destino);
                }

                var mov_actual = _context.Query <Modelo.movimiento_documento>()
                                 .Include(m => m.dependencia_destino).OrderByDescending(m => m.ID_MOVIMIENTO_DOCUMENTO)
                                 .FirstOrDefault(m => m.ID_DOCUMENTO == x.id_documento);
                if (mov_actual != null)
                {
                    x.dependencia_actual = _mapper.Map <Modelo.vw_dat_dependencia, DependenciaResponse>(mov_actual.dependencia_destino);
                }
            });

            return(page);
        }