示例#1
0
        public async Task <List <ExpedienteDTO> > autocompleteFilterCompleto([FromQuery] ParametrosBusquedaExpediente parametrosbusqueda)
        {
            List <ExpedienteDTO> listaExpedientesFiltrado = await _expedienteService.filtrado(parametrosbusqueda);

            await HttpContext.InsertPagedParameterOnResponse(listaExpedientesFiltrado.AsQueryable(), parametrosbusqueda.cantidadregistros);

            List <ExpedienteDTO> listaExpedientesFiltradoPaginado =
                listaExpedientesFiltrado.AsQueryable().Paginate(parametrosbusqueda.Paginacion).ToList();

            return(listaExpedientesFiltradoPaginado);
        }
示例#2
0
        public async Task <List <ExpedienteDTO> > filtrado(ParametrosBusquedaExpediente parametrosbusqueda)
        {
            BsonArray embebedpipeline = new BsonArray();

            embebedpipeline.Add(
                new BsonDocument("$match", new BsonDocument(
                                     "$expr", new BsonDocument(
                                         "$eq", new BsonArray {
                "$_id", new BsonDocument(
                    "$toObjectId", "$$iddoc")
            }
                                         ))));
            var lookup = new BsonDocument("$lookup",
                                          new BsonDocument("from", "documentos").
                                          Add("let", new BsonDocument("iddoc", "$documentos.iddocumento")).
                                          Add("pipeline", embebedpipeline).
                                          Add("as", "documentoobj"));

            var filtroDocumento = new BsonDocument();

            if (parametrosbusqueda.estado != null & parametrosbusqueda.estado != "")
            {
                filtroDocumento.Add("estado",
                                    new BsonDocument("$regex", parametrosbusqueda.estado + ".*")
                                    .Add("$options", "i"));
            }

            if (parametrosbusqueda.tipo != null & parametrosbusqueda.tipo != "")
            {
                filtroDocumento.Add("tipo",
                                    new BsonDocument("$regex", parametrosbusqueda.tipo + ".*")
                                    .Add("$options", "i"));
            }

            if (parametrosbusqueda.nombrecliente != null & parametrosbusqueda.nombrecliente != "")
            {
                filtroDocumento.Add("cliente.nombre",
                                    new BsonDocument("$regex", parametrosbusqueda.nombrecliente + ".*")
                                    .Add("$options", "i"));
            }


            List <ExpedienteDTO> expedientes = new List <ExpedienteDTO>();

            expedientes = await _expedientes.Aggregate()
                          .Unwind <Expediente, ExpedienteDTO_ur1>(e => e.documentos)
                          .AppendStage <ExpedienteDTO_look_up>(lookup)
                          .Unwind <ExpedienteDTO_look_up, ExpedienteDTO_ur2>(p => p.documentoobj)
                          .Group <ExpedienteDTO>(new BsonDocument
            {
                { "_id", "$_id" },
                {
                    "tipo", new BsonDocument
                    {
                        { "$first", "$tipo" }
                    }
                },
                { "cliente", new BsonDocument {
                      { "$first", "$cliente" }
                  } },
                { "fechainicio", new BsonDocument {
                      { "$first", "$fechainicio" }
                  } },
                { "fechafin", new BsonDocument {
                      { "$first", "$fechafin" }
                  } },
                { "documentos", new BsonDocument {
                      { "$push", "$documentos" }
                  } },
                { "documentosobj", new BsonDocument {
                      { "$push", "$documentoobj" }
                  } },
                { "derivaciones", new BsonDocument {
                      { "$first", "$derivaciones" }
                  } },
                { "estado", new BsonDocument {
                      { "$first", "$estado" }
                  } }
            })
                          .Match(filtroDocumento)
                          .ToListAsync();

            return(expedientes);
        }