Ejemplo n.º 1
0
    def test_callable_queryset(self):
        request = mock.NonCallableMock(spec=[])
        qs = mock.NonCallableMock(spec=[])

        qs_callable = mock.Mock(return_value=qs)

        f = ModelChoiceFilter(queryset=qs_callable)
        f.parent = mock.Mock(request=request)
        field = f.field

        qs_callable.assert_called_with(request)
        self.assertEqual(field.queryset, qs)
Ejemplo n.º 2
0
    def test_callable_queryset(self):
        request = mock.NonCallableMock(spec=[])
        qs = mock.NonCallableMock(spec=[])

        qs_callable = mock.Mock(return_value=qs)

        f = ModelChoiceFilter(queryset=qs_callable)
        f.parent = mock.Mock(request=request)
        field = f.field

        qs_callable.assert_called_with(request)
        self.assertEqual(field.queryset, qs)
Ejemplo n.º 3
0
class ProjectFilter(django_filters.FilterSet):
    category = ModelChoiceFilter(queryset=Service.objects.all(),
                                 label="Category:")

    class Meta:
        model = Project
        fields = ['category']
Ejemplo n.º 4
0
class PropertyModelChoiceFilterSet(PropertyFilterSet):

    # No Property filter since working directly with Foreign Keys

    related = ModelChoiceFilter(queryset=models.ModelChoiceFilterRelatedModel.objects.all())

    class Meta:
        model = models.ModelChoiceFilterModel
        fields = ['related']
Ejemplo n.º 5
0
class AutorChoiceFilterSet(SaplGenericRelationSearchFilterSet):
    q = MethodFilter()
    tipo = ModelChoiceFilter(queryset=TipoAutor.objects.all())

    class Meta:
        model = Autor
        fields = ['q',
                  'tipo',
                  'nome', ]

    def filter_q(self, queryset, value):
        return SaplGenericRelationSearchFilterSet.filter_q(
            self, queryset, value).distinct('nome').order_by('nome')
Ejemplo n.º 6
0
class TaskFilter(FilterSet):
    label = ModelChoiceFilter(queryset=Label.objects.all(),
                              field_name='labels',
                              label='Метка')
    is_author = BooleanFilter(field_name='author',
                              widget=forms.CheckboxInput,
                              label='Только свои задачи',
                              method='filter_author_tasks')

    def filter_author_tasks(self, queryset, name, value):
        if value:
            return queryset.filter(author=self.request.user)
        return queryset

    class Meta:
        model = Task
        fields = ['status', 'executor']
Ejemplo n.º 7
0
class InstitutionFilter(FilterSet):
    voivodeship = VoivodeshipFilter(widget=autocomplete.ModelSelect2(
        url='teryt:voivodeship-autocomplete'))
    county = CountyFilter(widget=autocomplete.ModelSelect2(
        url='teryt:county-autocomplete', forward=['voivodeship']))
    community = CommunityFilter(widget=autocomplete.ModelSelect2(
        url='teryt:community-autocomplete', forward=['county']))
    monitoring = ModelChoiceFilter(
        label=_("Monitoring"),
        required=False,
        queryset=Monitoring.objects.all(),
        widget=autocomplete.ModelSelect2(url='monitorings:autocomplete'),
    )

    def __init__(self, *args, **kwargs):
        self.monitoring = kwargs.pop('monitoring', None)
        super(InstitutionFilter, self).__init__(*args, **kwargs)
        if self.monitoring:
            qs = Monitoring.objects.exclude(pk=self.monitoring.pk).all()
            self.filters['monitoring'].field.queryset = qs

    class Meta:
        model = Institution
        fields = ['monitoring']
Ejemplo n.º 8
0
class ImpressoEnderecamentoContatoFilterSet(FilterSet):

    FEMININO = 'F'
    MASCULINO = 'M'
    AMBOS = ''
    SEXO_CHOICE = ((AMBOS, _('Ambos')), (FEMININO, _('Feminino')),
                   (MASCULINO, _('Masculino')))

    DEPOIS_PRONOME = 'DP'
    LINHA_NOME = 'LN'
    DEPOIS_NOME = 'DN'
    LOCAL_CARGO_CHOICE = ((DEPOIS_PRONOME,
                           _('Depois do Pronome '
                             'de tratamento')),
                          (LINHA_NOME, _('Antes do Nome do Contato')),
                          (DEPOIS_NOME,
                           _('Entre o Nome do Contato '
                             'e seu Endereço')))

    FILHOS_CHOICE = [(None, _('Ambos'))] + YES_NO_CHOICES

    search = CharFilter(method='filter_search')
    sexo = ChoiceFilter(choices=SEXO_CHOICE)
    tem_filhos = ChoiceFilter(label=_('Com filhos?'), choices=FILHOS_CHOICE)

    idade = RangeFilter(label=_('Idade entre:'),
                        widget=RangeWidgetNumber,
                        method='filter_idade')

    impresso = ModelChoiceFilter(
        label=ImpressoEnderecamento._meta.verbose_name_plural,
        required=True,
        queryset=ImpressoEnderecamento.objects.all(),
        method='filter_impresso')

    grupo = ChoiceFilter(label=_('Contatos Agrupados'),
                         required=False,
                         method='filter_grupo')

    imprimir_pronome = ChoiceFilter(label=_('Imprimir Pronome?'),
                                    choices=YES_NO_CHOICES,
                                    required=True,
                                    initial=False,
                                    method='filter_imprimir_pronome')
    imprimir_cargo = ChoiceFilter(label=_('Imprimir Cargo?'),
                                  required=True,
                                  empty_label=None,
                                  choices=YES_NO_CHOICES,
                                  initial=False,
                                  method='filter_imprimir_cargo')

    fontsize = NumberFilter(label=_('Tamanho da Fonte'),
                            initial='',
                            max_value=100,
                            min_value=0,
                            max_digits=3,
                            decimal_places=0,
                            method='filter_fontsize')

    nome_maiusculo = ChoiceFilter(label=_('Nome Maiúsculo'),
                                  choices=YES_NO_CHOICES,
                                  initial=False,
                                  method='filter_nome_maiusculo')

    local_cargo = ChoiceFilter(label=_('Local para imprimir o Cargo'),
                               choices=LOCAL_CARGO_CHOICE,
                               initial=False,
                               method='filter_local_cargo')

    def filter_impresso(self, queryset, field_name, value):
        return queryset

    def filter_fontsize(self, queryset, field_name, value):
        return queryset

    def filter_grupo(self, queryset, field_name, value):
        if value == '0':
            queryset = queryset.filter(grupodecontatos_set__isnull=True)
        elif value != '':
            queryset = queryset.filter(grupodecontatos_set=value)
        return queryset

    def filter_local_cargo(self, queryset, field_name, value):
        return queryset

    def filter_imprimir_pronome(self, queryset, field_name, value):
        return queryset

    def filter_imprimir_cargo(self, queryset, field_name, value):
        return queryset

    def filter_nome_maiusculo(self, queryset, field_name, value):
        return queryset

    def filter_idade(self, queryset, field_name, value):
        idi = int(value.start) if value.start is not None else 0
        idf = int(
            value.stop) if value.stop is not None else date.today().year - 2

        if idi > idf:
            a = idi
            idi = idf
            idf = a

        # lim inicial-dt.mais antiga
        li = date.today() - relativedelta(years=idf + 1)
        # lim final - dt. mais nova
        lf = date.today() - relativedelta(years=idi)

        return queryset.filter(data_nascimento__gt=li, data_nascimento__lte=lf)

    def filter_search(self, queryset, field_name, 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

    def filter_data_nascimento(self, queryset, field_name, value):
        #_where = "date_part('year', age(timestamp '%s', data_nascimento)) != date_part('year', age(timestamp '%s', data_nascimento))"
        # return queryset.extra(where=_where, params=value)

        if not value[0] or not value[1]:
            return queryset

        now = datetime.datetime.strptime(value[0], "%d/%m/%Y").date()
        then = datetime.datetime.strptime(value[1], "%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)

        # Tranform 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.
        return queryset.extra(
            select={
                'month': 'extract( month from data_nascimento )',
                'day': 'extract( day from data_nascimento )',
            }).order_by('month', 'day', 'nome').filter(query)

    data_nascimento = DataRangeFilter(widget=RangeWidgetOverride,
                                      method='filter_data_nascimento')

    class Meta:
        model = Contato
        fields = [
            'search', 'sexo', 'tem_filhos', 'data_nascimento',
            'tipo_autoridade'
        ]
        """filter_overrides = {
            models.DateField: {
                'filter_class': DataRangeFilter,
                'extra': lambda f: {
                    'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')),
                    'widget': RangeWidgetOverride
                }
            }
        }"""

    def __init__(self, data=None, queryset=None, prefix=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ImpressoEnderecamentoContatoFilterSet,
              self).__init__(data=data,
                             queryset=queryset,
                             prefix=prefix,
                             **kwargs)

        col1 = to_row([
            ('search', 6),
            ('sexo', 3),
            ('tem_filhos', 3),
            ('data_nascimento', 6),
            ('idade', 6),
            ('tipo_autoridade', 6),
            ('grupo', 6),
        ])

        col2 = to_row([
            ('impresso', 12),
            ('fontsize', 4),
            ('nome_maiusculo', 4),
            ('imprimir_pronome', 4),
            ('imprimir_cargo', 5),
            ('local_cargo', 7),
        ])

        row = to_row([
            (Fieldset(
                _('Informações para Seleção de Contatos'), col1,
                to_row([(SubmitFilterPrint(
                    'filter',
                    value=_('Filtrar'),
                    css_class='btn-outline-primary pull-right',
                    type='submit'), 12)])), 6),
            (Fieldset(
                _('Informações para Impressão'), col2,
                to_row([(SubmitFilterPrint('print',
                                           value=_('Imprimir'),
                                           css_class='btn-primary pull-right',
                                           type='submit'), 12)])), 6)
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(row, )

        self.form.fields['search'].label = _('Nome/Nome Social/Apelido')
        self.form.fields['data_nascimento'].label = '%s (%s)' % (
            _('Aniversário'), _('Inicial - Final'))

        self.form.fields['tem_filhos'].choices.choices[0] = (None, _('Ambos'))

        self.form.fields['grupo'].choices = [
            ('0', _('Apenas Contatos sem Grupo')),
        ] + [(g.pk, str(g))
             for g in GrupoDeContatos.objects.filter(workspace=workspace)]
Ejemplo n.º 9
0
class ContatoAgrupadoPorGrupoFilterSet(FilterSet):

    municipio = ModelChoiceFilter(required=False,
                                  label=Municipio._meta.verbose_name,
                                  queryset=Municipio.objects.all(),
                                  method='filter_municipio')

    grupo = ModelMultipleChoiceFilter(
        required=False,
        label=GrupoDeContatos._meta.verbose_name_plural,
        queryset=GrupoDeContatos.objects.all(),
        method='filter_grupo')

    def filter_municipio(self, queryset, field_name, value):
        queryset = queryset.filter(endereco_set__municipio=value)
        return queryset

    def filter_grupo(self, queryset, field_name, value):
        queryset = queryset.filter(grupodecontatos_set__in=value)

        return queryset.order_by('grupodecontatos_set__nome', 'nome')

    class Meta:
        model = Contato
        fields = ('municipio', 'grupo')

    def __init__(self,
                 data=None,
                 queryset=None,
                 prefix=None,
                 strict=None,
                 **kwargs):

        workspace = kwargs.pop('workspace')

        super(ContatoAgrupadoPorGrupoFilterSet,
              self).__init__(data=data,
                             queryset=queryset,
                             prefix=prefix,
                             strict=strict,
                             **kwargs)

        c1_row1 = to_row([
            ('municipio', 7),
            ('grupo', 7),
        ])

        col1 = Fieldset(
            _('Informações para Seleção de Contados'), c1_row1,
            to_row([
                (SubmitFilterPrint('filter',
                                   value=_('Filtrar'),
                                   css_class='btn-outline-primary pull-right',
                                   type='submit'), 12)
            ]))

        col2 = Fieldset(
            _('Inf p/ Impressão'),
            SubmitFilterPrint('print',
                              value=_('Imprimir'),
                              css_class='btn-primary pull-right',
                              type='submit'))

        rows = to_row([
            (col1, 9),
            (col2, 3),
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(rows, )

        self.form.fields['grupo'].queryset = GrupoDeContatos.objects.filter(
            workspace=workspace)
        self.form.fields['municipio'].queryset = Municipio.objects.all()
Ejemplo n.º 10
0
 def test_default_field_with_queryset(self):
     qs = mock.NonCallableMock(spec=[])
     f = ModelChoiceFilter(queryset=qs)
     field = f.field
     self.assertIsInstance(field, forms.ModelChoiceField)
     self.assertEqual(field.queryset, qs)
Ejemplo n.º 11
0
 def test_default_field_without_queryset(self):
     f = ModelChoiceFilter()
     with self.assertRaises(TypeError):
         f.field
Ejemplo n.º 12
0
 def test_empty_choices(self):
     f = ModelChoiceFilter(queryset=User.objects.all(), null_value='null', null_label='NULL')
     self.assertEqual(list(f.field.choices), [
         ('', 'EMPTY'),
         ('null', 'NULL'),
     ])