Esempio n. 1
0
    def save(self,
             force_insert=False,
             force_update=False,
             using=None,
             update_fields=None,
             auto_update_search=True):

        if auto_update_search and hasattr(self, 'fields_search'):
            search = ''
            for str_field in self.fields_search:
                fields = str_field.split('__')
                if len(fields) == 1:
                    try:
                        search += str(getattr(self, str_field)) + ' '
                    except:
                        pass
                else:
                    _self = self
                    for field in fields:
                        _self = getattr(_self, field)
                    search += str(_self) + ' '
            self.search = search
        self.search = normalize(self.search)

        return super(SaapSearchMixin, self).save(force_insert=force_insert,
                                                 force_update=force_update,
                                                 using=using,
                                                 update_fields=update_fields)
Esempio n. 2
0
    def filter_search(self, queryset, value):

        query = normalize(value)

        query = query.split(' ')
        if query:
            q = Q()
            for item in query:
                if not item:
                    continue
                q = q & Q(search__icontains=item)

            if q:
                queryset = queryset.filter(q)
        return queryset
Esempio n. 3
0
    def get_queryset(self, *args, **kwargs):
        request = self.request
        queryset = Trecho.objects.all()

        if request.GET.get('q') is not None:
            query = normalize(str(request.GET.get('q')))

            query = query.split(' ')
            if query:
                q = Q()
                for item in query:
                    if not item:
                        continue
                    q = q & Q(search__icontains=item)

                if q:
                    queryset = queryset.filter(q)

        return queryset
Esempio n. 4
0
    def get_queryset(self, *args, **kwargs):
        request = self.request
        queryset = Trecho.objects.all()

        if request.GET.get('q') is not None:
            query = normalize(str(request.GET.get('q')))

            query = query.split(' ')
            if query:
                q = Q()
                for item in query:
                    if not item:
                        continue
                    q = q & Q(search__icontains=item)

                if q:
                    queryset = queryset.filter(q)

        return queryset
Esempio n. 5
0
    def __init__(self, *args, **kwargs):

        super(ContatoFragmentSearchForm, self).__init__(*args, **kwargs)
        """q_field = FieldWithButtons(
            Field('q',
                  placeholder=_('Filtrar Lista'),
                  autocomplete='off'),
            StrictButton(
                _('Filtrar'), css_class='btn-default',
                type='button', onclick='atualizaContatos(event)'))"""

        self.fields['contatos_search'].widget = forms.CheckboxSelectMultiple()

        queryset = Contato.objects.filter(
            workspace=self.initial['workspace']).exclude(
                pk__in=self.initial['pks_exclude'])

        query = normalize(self.initial['q'])

        query = query.split(' ')
        if query:
            q = Q()
            for item in query:
                if not item:
                    continue
                q = q & Q(search__icontains=item)

            if q:
                queryset = queryset.filter(q)

        queryset = queryset[:10]
        self.fields['contatos_search'].queryset = queryset

        self.fields['contatos_search'].choices = [(c.pk, c) for c in queryset]

        self.helper = FormHelper()
        self.helper.layout = Layout(
            Div(Field('contatos_search'),
                css_class='form-group-contatos-search'))
        self.helper.form_tag = False
        self.helper.disable_csrf = True
Esempio n. 6
0
    def save(self, force_insert=False, force_update=False, using=None, update_fields=None, auto_update_search=True):

        if auto_update_search and hasattr(self, "fields_search"):
            search = ""
            for str_field in self.fields_search:
                fields = str_field.split("__")
                if len(fields) == 1:
                    try:
                        search += str(getattr(self, str_field)) + " "
                    except:
                        pass
                else:
                    _self = self
                    for field in fields:
                        _self = getattr(_self, field)
                    search += str(_self) + " "
            self.search = search
        self.search = normalize(self.search)

        return super(SaapSearchMixin, self).save(
            force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields
        )
Esempio n. 7
0
        def get_queryset(self):
            queryset = CrudListView.get_queryset(self)

            # form_search_class
            # só pode ser usado em models que herdam de SaapSearchMixin
            if hasattr(self, 'form_search_class'):
                request = self.request
                if request.GET.get('q') is not None:
                    query = normalize(str(request.GET.get('q')))

                    query = query.split(' ')
                    if query:
                        q = Q()
                        for item in query:
                            if not item:
                                continue
                            q = q & Q(search__icontains=item)

                        if q:
                            queryset = queryset.filter(q)

            list_field_names = self.list_field_names
            o = '1'
            if 'o' in self.request.GET:
                o = self.request.GET['o']
            desc = '-' if o.startswith('-') else ''

            try:
                fields_for_ordering = list_field_names[
                    (abs(int(o)) - 1) % len(list_field_names)]

                if isinstance(fields_for_ordering, str):
                    fields_for_ordering = [fields_for_ordering, ]

                ordering = ()
                model = self.model
                for fo in fields_for_ordering:
                    fm = model._meta.get_field(fo)
                    if hasattr(fm, 'related_model') and fm.related_model:
                        rmo = fm.related_model._meta.ordering
                        if rmo:
                            rmo = rmo[0]
                            if not isinstance(rmo, str):
                                rmo = rmo[0]
                            fo = '%s__%s' % (fo, rmo)

                    fo = desc + fo
                    ordering += (fo,)

                model = self.model
                model_ordering = model._meta.ordering
                if model_ordering:
                    if isinstance(model_ordering, str):
                        model_ordering = (model_ordering,)
                    for mo in model_ordering:
                        if mo not in ordering:
                            ordering = ordering + (mo, )
                queryset = queryset.order_by(*ordering)

            except:
                pass

            if not self.request.user.is_authenticated():
                return queryset

            if self.container_field:
                params = {}
                params[self.container_field] = self.request.user.pk
                queryset = queryset.filter(**params)

            return queryset
Esempio n. 8
0
        def get_queryset(self):
            queryset = DetailMasterCrud.ListView.get_queryset(self)

            pk = self.request.GET.get('pk', '')
            contatos = self.request.GET.get('contatos', '')
            numeros = self.request.GET.get('numeros', '')
            classificacoes = self.request.GET.getlist('classificacoes', '')
            status = self.request.GET.getlist('status', '')
            topicos = self.request.GET.getlist('topicos', '')
            assuntos = self.request.GET.getlist('assuntos', '')
            bairros = self.request.GET.getlist('bairros', '')
            importancias = self.request.GET.getlist('importancias', '')
            urgente = self.request.GET.get('urgente', '')
            endereco = self.request.GET.get('endereco', '')
            envolvidos = self.request.GET.get('envolvidos', '')
            data_envio_inicial = self.request.GET.get('data_envio_inicial', '')
            data_envio_final = self.request.GET.get('data_envio_final', '')
            data_protocolo_inicial = self.request.GET.get(
                'data_protocolo_inicial', '')
            data_protocolo_final = self.request.GET.get(
                'data_protocolo_final', '')
            data_abertura_inicial = self.request.GET.get(
                'data_abertura_inicial', '')
            data_abertura_final = self.request.GET.get('data_abertura_final',
                                                       '')
            data_retorno_inicial = self.request.GET.get(
                'data_retorno_inicial', '')
            data_retorno_final = self.request.GET.get('data_retorno_final', '')
            data_solucao_inicial = self.request.GET.get(
                'data_solucao_inicial', '')
            data_solucao_final = self.request.GET.get('data_solucao_final', '')

            if pk:
                queryset = queryset.filter(pk=pk)

            if urgente:
                if int(urgente) > 1:
                    f = None
                    if int(urgente) == 2:
                        f = True
                    elif int(urgente) == 3:
                        f = False

                    queryset = queryset.filter(urgente=f)

            if endereco:
                query = normalize(endereco)

                query = query.split(' ')
                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        # Remove acentos dos campos que estão no banco
                        q = q & Q(rua__unaccent__icontains=item)
                    if q:
                        queryset = queryset.filter(q)

            if envolvidos:
                query = normalize(envolvidos)

                query = query.split(' ')
                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        q = q & (Q(orgao__icontains=item)
                                 | Q(instituicao__icontains=item))
                    if q:
                        queryset = queryset.filter(q)

            if numeros:
                query = normalize(numeros)

                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        q = q & (Q(materia_cam__icontains=item)
                                 | Q(oficio_cam__icontains=item)
                                 | Q(oficio_pref__icontains=item)
                                 | Q(oficio_orgao__icontains=item)
                                 | Q(proto_pref__icontains=item)
                                 | Q(proto_orgao__icontains=item))
                    if q:
                        queryset = queryset.filter(q)

            if bairros:
                queryset = queryset.filter(bairro__in=bairros).distinct()

            if classificacoes:
                queryset = queryset.filter(
                    classificacao__in=classificacoes).distinct()

            if assuntos:
                queryset = queryset.filter(assuntos__in=assuntos).distinct()

            if status:
                queryset = queryset.filter(status__in=status).distinct()

            if topicos:
                queryset = queryset.filter(topicos__in=topicos).distinct()

            if importancias:
                queryset = queryset.filter(
                    importancia__in=importancias).distinct()

            if contatos:
                query = normalize(contatos)

                query = query.split(' ')
                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        # Remove acentos dos campos que estão no banco
                        q = q & (
                            Q(contatos__nome__unaccent__icontains=item) |
                            Q(contatos__nome_social__unaccent__icontains=item)
                            | Q(contatos__apelido__unaccent__icontains=item))

                    if q:
                        queryset = queryset.filter(q)

            if data_envio_inicial:
                data = datetime.datetime.strptime(data_envio_inicial,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_envio__gte=data)

            if data_envio_final:
                data = datetime.datetime.strptime(data_envio_final,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_envio__lte=data)

            if data_abertura_inicial:
                data = datetime.datetime.strptime(data_abertura_inicial,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_abertura__gte=data)

            if data_abertura_final:
                data = datetime.datetime.strptime(data_abertura_final,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_abertura__lte=data)

            if data_solucao_inicial:
                data = datetime.datetime.strptime(data_solucao_inicial,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_solucao__gte=data)

            if data_solucao_final:
                data = datetime.datetime.strptime(data_solucao_final,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_solucao__lte=data)

            if data_retorno_inicial:
                data = datetime.datetime.strptime(data_retorno_inicial,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_retorno__gte=data)

            if data_retorno_final:
                data = datetime.datetime.strptime(data_retorno_final,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_retorno__lte=data)

            if data_protocolo_inicial:
                data = datetime.datetime.strptime(data_protocolo_inicial,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_protocolo__gte=data)

            if data_protocolo_final:
                data = datetime.datetime.strptime(data_protocolo_final,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_protocolo__lte=data)

            queryset = queryset.order_by('titulo')

            return queryset
Esempio n. 9
0
        def get_queryset(self):

            queryset = DetailMasterCrud.ListView.get_queryset(self)

            sexo = self.request.GET.get('sexo', '')
            pk = self.request.GET.get('pk', '')
            tem_filhos = self.request.GET.get('tem_filhos', '')
            ativo = self.request.GET.get('ativo', '')
            endereco = self.request.GET.get('endereco', '')
            num_endereco = self.request.GET.get('num_endereco', '')
            cep = self.request.GET.get('cep', '')
            telefone = self.request.GET.get('telefone', '')
            bairro = self.request.GET.getlist('bairro', '')
            municipio = self.request.GET.getlist('municipio', '')
            estado_civil = self.request.GET.get('estado_civil', '')
            nivel_instrucao = self.request.GET.get('nivel_instrucao', '')
            cargo = self.request.GET.get('cargo', '')
            dependente = self.request.GET.get('dependente', '')
            data_inicial = self.request.GET.get('data_inicial', '')
            data_final = self.request.GET.get('data_final', '')
            nasc_inicial = self.request.GET.get('nasc_inicial', '')
            nasc_final = self.request.GET.get('nasc_final', '')
            grupos = self.request.GET.getlist('grupos', '')
            dados_nulos = self.request.GET.getlist('dados_nulos', '')
            dados_nao_nulos = self.request.GET.getlist('dados_nao_nulos', '')
            tipo_autoridade = self.request.GET.getlist('tipo_autoridade', '')
            documentos = self.request.GET.get('documentos', '')

            if sexo:
                queryset = queryset.filter(sexo=sexo)

            if pk:
                queryset = queryset.filter(pk=pk)

            if tem_filhos:
                if int(tem_filhos) > 1:
                    f = None
                    if int(tem_filhos) == 2:
                        f = True
                    elif int(tem_filhos) == 3:
                        f = False

                    queryset = queryset.filter(tem_filhos=f)

            if ativo:
                if int(ativo) > 1:
                    a = None
                    if int(ativo) == 2:
                        a = True
                    elif int(ativo) == 3:
                        a = False

                    queryset = queryset.filter(ativo=a)

            if endereco:
                query = normalize(endereco)

                query = query.split(' ')
                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        # Remove acentos dos campos que estão no banco
                        q = q & (Q(
                            endereco_set__endereco__unaccent__icontains=item
                        ) | Q(
                            endereco_set__ponto_referencia__unaccent__icontains
                            =item
                        ) | Q(
                            endereco_set__complemento__unaccent__icontains=item
                        ))
                    if q:
                        queryset = queryset.filter(q)

            if dados_nulos:

                for opcao in dados_nulos:
                    if (opcao == 'DTN'):
                        queryset = queryset.exclude(
                            data_nascimento__isnull=False)
                    elif (opcao == 'END'):
                        queryset = queryset.exclude(endereco_set__isnull=False)
                    elif (opcao == 'TEL'):
                        queryset = queryset.exclude(telefone_set__isnull=False)
                    elif (opcao == 'EML'):
                        queryset = queryset.exclude(email_set__isnull=False)
                    elif (opcao == 'SEX'):
                        queryset = queryset.filter(sexo='')
                    elif (opcao == 'ECV'):
                        queryset = queryset.exclude(estado_civil__isnull=False)
                    elif (opcao == 'GRP'):
                        queryset = queryset.exclude(
                            grupodecontatos_set__isnull=False)

            if dados_nao_nulos:

                for opcao in dados_nao_nulos:
                    if (opcao == 'DTN'):
                        queryset = queryset.exclude(
                            data_nascimento__isnull=True)
                    elif (opcao == 'END'):
                        queryset = queryset.exclude(endereco_set__isnull=True)
                    elif (opcao == 'TEL'):
                        queryset = queryset.exclude(telefone_set__isnull=True)
                    elif (opcao == 'EML'):
                        queryset = queryset.exclude(email_set__isnull=True)
                    elif (opcao == 'SEX'):
                        queryset = queryset.filter(Q(sexo='M') | Q(sexo='F'))
                    elif (opcao == 'ECV'):
                        queryset = queryset.exclude(estado_civil__isnull=True)
                    elif (opcao == 'GRP'):
                        queryset = queryset.exclude(
                            grupodecontatos_set__isnull=True)

            if documentos:

                q = Q()
                q = q & (Q(rg=documentos) | Q(cpf=documentos)
                         | Q(cnpj=documentos) | Q(ie=documentos))

                queryset = queryset.filter(q)

            if grupos:
                queryset = queryset.filter(
                    grupodecontatos_set__in=grupos).distinct()

            if bairro:
                queryset = queryset.filter(
                    endereco_set__bairro__in=bairro).distinct()

            if municipio:
                queryset = queryset.filter(
                    endereco_set__municipio__in=municipio).distinct()

            if cep:
                queryset = queryset.filter(endereco_set__cep=cep)

            if num_endereco:
                queryset = queryset.filter(endereco_set__numero=num_endereco)

            if telefone:
                queryset = queryset.filter(telefone_set__telefone=telefone)

            if estado_civil:
                queryset = queryset.filter(estado_civil=estado_civil)

            if nivel_instrucao:
                queryset = queryset.filter(nivel_instrucao=nivel_instrucao)

            if tipo_autoridade:
                if tipo_autoridade[0] != '':
                    queryset = queryset.filter(
                        tipo_autoridade=tipo_autoridade[0])

            if cargo:
                query = normalize(cargo)

                query = query.split(' ')
                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        # Remove acentos dos campos que estão no banco
                        q = q & (Q(cargo__unaccent__icontains=item)
                                 | Q(profissao__unaccent__icontains=item))

                    if q:
                        queryset = queryset.filter(q)

            if dependente:
                query = normalize(dependente)

                query = query.split(' ')
                if query:
                    q = Q()
                    for item in query:
                        if not item:
                            continue
                        # Remove acentos dos campos que estão no banco
                        q = q & (Q(dependente_set__unaccent__icontains=item))

                    if q:
                        queryset = queryset.filter(q)

            if data_inicial and data_final:
                now = datetime.datetime.strptime(data_inicial,
                                                 "%d/%m/%Y").date()
                then = datetime.datetime.strptime(data_final,
                                                  "%d/%m/%Y").date()
                if now > then:
                    a = now
                    now = then
                    then = a

                # Build the list of month/day tuples.
                monthdays = [(now.month, now.day)]
                while now <= then:
                    monthdays.append((now.month, now.day))
                    now += timedelta(days=1)

                # Transform each into queryset keyword args.
                monthdays = (dict(
                    zip(("data_nascimento__month", "data_nascimento__day"), t))
                             for t in monthdays)

                # Compose the djano.db.models.Q objects together for a single query.
                query = reduce(operator.or_, (Q(**d) for d in monthdays))

                # Run the query.
                queryset = queryset.extra(
                    select={
                        'month': 'extract( month from data_nascimento )',
                        'day': 'extract( day from data_nascimento )',
                    }).order_by('month', 'day', 'nome').filter(query)

            if nasc_inicial:
                data = datetime.datetime.strptime(nasc_inicial,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_nascimento__gte=data)

            if nasc_final:
                data = datetime.datetime.strptime(nasc_final,
                                                  "%d/%m/%Y").date()

                queryset = queryset.filter(data_nascimento__lte=data)

            queryset = queryset.order_by('nome')

            return queryset
Esempio n. 10
0
        def get_queryset(self):
            queryset = CrudListView.get_queryset(self)

            # form_search_class
            # só pode ser usado em models que herdam de SaapSearchMixin
            if hasattr(self, 'form_search_class'):
                request = self.request
                if request.GET.get('q') is not None:
                    query = normalize(str(request.GET.get('q')))

                    query = query.split(' ')
                    if query:
                        q = Q()
                        for item in query:
                            if not item:
                                continue
                            q = q & Q(search__icontains=item)

                        if q:
                            queryset = queryset.filter(q)

            list_field_names = self.list_field_names
            o = '1'
            if 'o' in self.request.GET:
                o = self.request.GET['o']
            desc = '-' if o.startswith('-') else ''

            try:
                fields_for_ordering = list_field_names[(abs(int(o)) - 1) %
                                                       len(list_field_names)]

                if isinstance(fields_for_ordering, str):
                    fields_for_ordering = [
                        fields_for_ordering,
                    ]

                ordering = ()
                model = self.model
                for fo in fields_for_ordering:
                    fm = model._meta.get_field(fo)
                    if hasattr(fm, 'related_model') and fm.related_model:
                        rmo = fm.related_model._meta.ordering
                        if rmo:
                            rmo = rmo[0]
                            if not isinstance(rmo, str):
                                rmo = rmo[0]
                            fo = '%s__%s' % (fo, rmo)

                    fo = desc + fo
                    ordering += (fo, )

                model = self.model
                model_ordering = model._meta.ordering
                if model_ordering:
                    if isinstance(model_ordering, str):
                        model_ordering = (model_ordering, )
                    for mo in model_ordering:
                        if mo not in ordering:
                            ordering = ordering + (mo, )
                queryset = queryset.order_by(*ordering)

            except:
                pass

            if not self.request.user.is_authenticated():
                return queryset

            if self.container_field:
                params = {}
                params[self.container_field] = self.request.user.pk
                queryset = queryset.filter(**params)

            return queryset