Browse Source

HOT-FIX: Corrige problema de PrimeiroAutor em AutoriaMultiCreate (#2832)

* HOT-FIX: Corrige problema de PrimeiroAutor em AutoriaMultiCreate

* Corrige testes de acordo com alterações nos forms
pull/2835/head
Cesar Augusto de Carvalho 6 years ago
committed by Edward
parent
commit
bf312cd866
  1. 23
      sapl/materia/forms.py
  2. 1
      sapl/materia/tests/test_materia.py
  3. 13
      sapl/materia/tests/test_materia_form.py
  4. 5
      sapl/materia/views.py

23
sapl/materia/forms.py

@ -1168,7 +1168,7 @@ class DespachoInicialForm(ModelForm):
class AutoriaForm(ModelForm): class AutoriaForm(ModelForm):
tipo_autor = ModelChoiceField(label=_('Tipo Autor'), tipo_autor = ModelChoiceField(label=_('Tipo Autor'),
required=False, required=True,
queryset=TipoAutor.objects.all(), queryset=TipoAutor.objects.all(),
empty_label=_('Selecione'),) empty_label=_('Selecione'),)
@ -1180,6 +1180,12 @@ class AutoriaForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(AutoriaForm, self).__init__(*args, **kwargs) super(AutoriaForm, self).__init__(*args, **kwargs)
self.fields['primeiro_autor'].required = True
if 'initial' in kwargs and 'materia' in kwargs['initial']:
materia = kwargs['initial']['materia']
self.fields['primeiro_autor'].initial = Autoria.objects.filter(materia=materia).count() == 0
row1 = to_row([('tipo_autor', 4), row1 = to_row([('tipo_autor', 4),
('autor', 4), ('autor', 4),
('primeiro_autor', 4)]) ('primeiro_autor', 4)])
@ -1220,7 +1226,7 @@ class AutoriaMultiCreateForm(Form):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
tipo_autor = ModelChoiceField(label=_('Tipo Autor'), tipo_autor = ModelChoiceField(label=_('Tipo Autor'),
required=False, required=True,
queryset=TipoAutor.objects.all(), queryset=TipoAutor.objects.all(),
empty_label=_('Selecione'),) empty_label=_('Selecione'),)
@ -1230,7 +1236,7 @@ class AutoriaMultiCreateForm(Form):
autor = ModelMultipleChoiceField( autor = ModelMultipleChoiceField(
queryset=Autor.objects.all(), queryset=Autor.objects.all(),
label=_('Possiveis Autores'), label=_('Possiveis Autores'),
required=False, required=True,
widget=CheckboxSelectMultiple) widget=CheckboxSelectMultiple)
autores = ModelMultipleChoiceField( autores = ModelMultipleChoiceField(
@ -1238,10 +1244,19 @@ class AutoriaMultiCreateForm(Form):
required=False, required=False,
widget=HiddenInput) widget=HiddenInput)
primeiro_autor = forms.ChoiceField(
required=True,
choices=YES_NO_CHOICES,
label="Primeiro Autor?"
)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
row1 = to_row([('tipo_autor', 12), ]) if 'initial' in kwargs and 'autores' in kwargs['initial']:
self.fields['primeiro_autor'].initial = kwargs['initial']['autores'].count() == 0
row1 = to_row([('tipo_autor', 10), ('primeiro_autor', 2)])
row2 = to_row([('autor', 12), ]) row2 = to_row([('autor', 12), ])

1
sapl/materia/tests/test_materia.py

@ -243,6 +243,7 @@ def test_autoria_submit(admin_client):
reverse('sapl.materia:autoria_create', reverse('sapl.materia:autoria_create',
kwargs={'pk': materia_principal.pk}), kwargs={'pk': materia_principal.pk}),
{'autor': autor.pk, {'autor': autor.pk,
'tipo_autor': tipo_autor.pk,
'primeiro_autor': True, 'primeiro_autor': True,
'materia_id': materia_principal.pk, }, 'materia_id': materia_principal.pk, },
follow=True) follow=True)

13
sapl/materia/tests/test_materia_form.py

@ -129,9 +129,11 @@ def test_valida_campos_obrigatorios_autoria_form():
errors = form.errors errors = form.errors
assert errors['autor'] == [_('Este campo é obrigatório.')] assert len(errors) == 3
assert len(errors) == 1 assert errors['tipo_autor'] == [_('Este campo é obrigatório.')]
assert errors['autor'] == [_('Este campo é obrigatório.')]
assert errors['primeiro_autor'] == [_('Este campo é obrigatório.')]
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)
@ -142,9 +144,12 @@ def test_valida_campos_obrigatorios_autoria_multicreate_form():
errors = form.errors errors = form.errors
assert errors['__all__'] == [_('Ao menos um autor deve ser selecionado para inclusão')] assert len(errors) == 4
assert len(errors) == 1 assert errors['__all__'] == [_('Ao menos um autor deve ser selecionado para inclusão')]
assert errors['tipo_autor'] == [_('Este campo é obrigatório.')]
assert errors['autor'] == [_('Este campo é obrigatório.')]
assert errors['primeiro_autor'] == [_('Este campo é obrigatório.')]
@pytest.mark.django_db(transaction=False) @pytest.mark.django_db(transaction=False)

5
sapl/materia/views.py

@ -1432,6 +1432,7 @@ class AutoriaCrud(MasterDetailCrud):
materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) materia = MateriaLegislativa.objects.get(id=self.kwargs['pk'])
initial['data_relativa'] = materia.data_apresentacao initial['data_relativa'] = materia.data_apresentacao
initial['autor'] = [] initial['autor'] = []
initial['materia'] = materia
return initial return initial
class UpdateView(LocalBaseMixin, MasterDetailCrud.UpdateView): class UpdateView(LocalBaseMixin, MasterDetailCrud.UpdateView):
@ -1441,6 +1442,7 @@ class AutoriaCrud(MasterDetailCrud):
initial.update({ initial.update({
'data_relativa': self.object.materia.data_apresentacao, 'data_relativa': self.object.materia.data_apresentacao,
'tipo_autor': self.object.autor.tipo.id, 'tipo_autor': self.object.autor.tipo.id,
'materia': self.object.materia
}) })
return initial return initial
@ -1480,8 +1482,9 @@ class AutoriaMultiCreateView(PermissionRequiredForAppCrudMixin, FormView):
def form_valid(self, form): def form_valid(self, form):
autores_selecionados = form.cleaned_data['autor'] autores_selecionados = form.cleaned_data['autor']
primeiro_autor = form.cleaned_data['primeiro_autor']
for autor in autores_selecionados: for autor in autores_selecionados:
Autoria.objects.create(materia=self.materia, autor=autor) Autoria.objects.create(materia=self.materia, autor=autor, primeiro_autor=primeiro_autor)
return FormView.form_valid(self, form) return FormView.form_valid(self, form)

Loading…
Cancel
Save