diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py index 1213ffbfb..94624bfff 100644 --- a/sapl/comissoes/forms.py +++ b/sapl/comissoes/forms.py @@ -12,16 +12,16 @@ from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ from sapl.base.models import Autor, TipoAutor -from sapl.comissoes.models import (Comissao, Composicao, - DocumentoAcessorio, Participacao, - Periodo, Reuniao) -from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, +from sapl.comissoes.models import (CargoComissao, Comissao, + Composicao, DocumentoAcessorio, + Participacao, Periodo, Reuniao) +from sapl.crispy_layout_mixin import (form_actions, SaplFormHelper, to_row) from sapl.materia.models import MateriaEmTramitacao, PautaReuniao from sapl.parlamentares.models import (Legislatura, Mandato, Parlamentar) -from sapl.utils import (FileFieldCheckMixin, FilterOverridesMetaMixin, - validar_arquivo) +from sapl.utils import (FileFieldCheckMixin, + FilterOverridesMetaMixin, validar_arquivo) class ComposicaoForm(forms.ModelForm): @@ -79,6 +79,57 @@ class ComposicaoForm(forms.ModelForm): return cleaned_data +def choices_posicao(): + posicoes = list(range(1, len(CargoComissao.objects.all())+1)) + choices = [(posicao, str(posicao)+"º") for posicao in posicoes] + choices.insert(0, (0, "Não definida")) + return choices + + +class CargosComissaoOrdenacaoForm(forms.Form): + + cargo = forms.ModelChoiceField( + label='Cargo', + required=True, + empty_label='Selecione um cargo', + queryset=CargoComissao.objects.all().order_by('id_ordenacao') + ) + posicao = forms.ChoiceField( + label='Posição', + required=True, + choices=choices_posicao() + ) + + def __init__(self, *args, **kwargs): + row1 = to_row( + [('cargo', 12)] + ) + row2 = to_row( + [('posicao', 12)] + ) + + self.helper = SaplFormHelper() + self.helper.layout = Layout( + Fieldset(_(''), row1, row2, + form_actions(label="Atualizar")) + ) + + super().__init__(*args, **kwargs) + + def clean(self): + super(CargosComissaoOrdenacaoForm, self).clean + + if not self.is_valid(): + return self.cleaned_data + + def save(self): + cleaned_data = self.cleaned_data + + cargo = cleaned_data['cargo'] + cargo.id_ordenacao = cleaned_data['posicao'] + cargo.save() + + class PeriodoForm(forms.ModelForm): logger = logging.getLogger(__name__) diff --git a/sapl/comissoes/views.py b/sapl/comissoes/views.py index 4d37d735a..d3a198b3c 100644 --- a/sapl/comissoes/views.py +++ b/sapl/comissoes/views.py @@ -1,12 +1,12 @@ import logging -from django.core.urlresolvers import reverse from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin +from django.core.urlresolvers import reverse from django.db.models import F from django.http.response import HttpResponseRedirect, JsonResponse from django.views.decorators.clickjacking import xframe_options_exempt -from django.views.generic import ListView, CreateView, DeleteView +from django.views.generic import CreateView, DeleteView, FormView, ListView from django.views.generic.base import RedirectView from django.views.generic.detail import DetailView from django.views.generic.edit import FormMixin, UpdateView @@ -16,17 +16,18 @@ from django_filters.views import FilterView from sapl.base.models import AppConfig as AppsAppConfig from sapl.comissoes.apps import AppConfig -from sapl.comissoes.forms import (ComissaoForm, ComposicaoForm, +from sapl.comissoes.forms import (CargosComissaoOrdenacaoForm, ComissaoForm, + ComposicaoForm, DocumentoAcessorioCreateForm, DocumentoAcessorioEditForm, ParticipacaoCreateForm, ParticipacaoEditForm, - PautaReuniaoForm, PeriodoForm, ReuniaoForm, - PautaReuniaoFilterSet) -from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, - MasterDetailCrud, - PermissionRequiredForAppCrudMixin) -from sapl.materia.models import (MateriaLegislativa, Tramitacao, PautaReuniao, - MateriaEmTramitacao) + PautaReuniaoFilterSet, PautaReuniaoForm, + PeriodoForm, ReuniaoForm) +from sapl.crud.base import (Crud, CrudAux, MasterDetailCrud, + PermissionRequiredForAppCrudMixin, RP_DETAIL, + RP_LIST) +from sapl.materia.models import (MateriaEmTramitacao, MateriaLegislativa, + PautaReuniao, Tramitacao) from sapl.utils import show_results_filter_set from .models import (CargoComissao, Comissao, Composicao, DocumentoAcessorio, @@ -97,6 +98,40 @@ class ParticipacaoCrud(MasterDetailCrud): composicao_pk) +class CargosComissaoOrdenacaoView(PermissionRequiredMixin, FormView): + template_name = 'comissoes/cargos_ordenacao.html' + form_class = CargosComissaoOrdenacaoForm + permission_required = ('base.list_appconfig',) + + def get_context_data(self, **kwargs): + context = super(CargosComissaoOrdenacaoView, self).get_context_data(**kwargs) + + cargos = CargoComissao.objects.all() + posicoes = list(range(1, len(cargos)+1)) + + tabela_ordenacao = [] + for posicao in posicoes: + if cargos.filter(id_ordenacao=posicao): + cargo = cargos.filter(id_ordenacao=posicao) + tabela_ordenacao.append((posicao, cargo[0])) + else: + tabela_ordenacao.append((posicao, "-")) + + cargos_desordenados = cargos.filter(id_ordenacao="Não definido") + for cargo_desordenado in cargos_desordenados: + tabela_ordenacao.append(("Não definida", cargo_desordenado)) + + context['cargos'] = tabela_ordenacao + return context + + def get_success_url(self): + return reverse('sapl.comissoes:cargos_comissao_ordenacao') + + def form_valid(self, form): + form.save() + return HttpResponseRedirect(self.get_success_url()) + + class ComposicaoCrud(MasterDetailCrud): model = Composicao parent_field = 'comissao' diff --git a/sapl/templates/comissoes/cargos_ordenacao.html b/sapl/templates/comissoes/cargos_ordenacao.html new file mode 100644 index 000000000..19e417ffe --- /dev/null +++ b/sapl/templates/comissoes/cargos_ordenacao.html @@ -0,0 +1,37 @@ +{% extends "crud/form.html" %} +{% load i18n %} +{% load crispy_forms_tags %} + +{% block title %} +
| Posição | +Cargo | +
|---|---|
| {{ posicao }} | +{{ cargo }} | +