diff --git a/docs/howtogit.rst b/docs/howtogit.rst index 926d3193b..69d6d474a 100644 --- a/docs/howtogit.rst +++ b/docs/howtogit.rst @@ -22,11 +22,46 @@ Atualizar a base local: Exibir informações: git status + + +Ver repositorio + + git remote -v + + +Para definir repositorio + + git remote set-url origin https://github.com/interlegis/sapl.git + + +Para criar um branch + + git checkout -b nome_branch + git add arquivos + +Para remover um branch + + git branch -d nome-branch + + +Para comitar + + git commit -m "Comentário" + +Para enviar o branch + + git push origin nome_branch Na base local descartar alguma alteração feita nos arquivos: - git checkout sapl/legacy_migration_settings.py + git checkout -- + + +Ao invés dissoremover todas as alterações e commits locais, recuperar o histórico mais recente do servidor e apontar para seu branch master local + + git fetch origin + git reset --hard origin/master Atualizar para alguma brach especifica (ex:785-atualizar-migracao): @@ -39,3 +74,9 @@ Voltar para a branch master Verificar 5 ultimos comits: git log --oneline -n 5 + + +Referência: + + http://rogerdudler.github.io/git-guide/index.pt_BR.html + http://tableless.com.br/tudo-que-voce-queria-saber-sobre-git-e-github-mas-tinha-vergonha-de-perguntar/ diff --git a/sapl/base/urls.py b/sapl/base/urls.py index bfaf5b7bd..361ab2cda 100644 --- a/sapl/base/urls.py +++ b/sapl/base/urls.py @@ -90,8 +90,8 @@ urlpatterns = [ ConfirmarEmailView.as_view(), name='confirmar_email'), - # todos os sublink s de sistema devem vir acima deste - url(r'^sistema/', permission_required('base.view_tabelas_auxiliares') + # todos os sublinks de sistema devem vir acima deste + url(r'^sistema/$', permission_required('base.view_tabelas_auxiliares') (TemplateView.as_view(template_name='sistema.html'))), url(r'^login/$', views.login, { diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index e93f9fe6d..951a8ed7c 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -190,10 +190,6 @@ class RelatoriaForm(ModelForm): def __init__(self, *args, **kwargs): super(RelatoriaForm, self).__init__(*args, **kwargs) - self.fields['parlamentar'].queryset = Parlamentar.objects.filter( - ativo=True, id__in=Participacao.objects.filter( - composicao_id=self.initial['comissao'] - ).values_list('parlamentar_id')).order_by('nome_completo') def clean(self): cleaned_data = self.cleaned_data diff --git a/sapl/materia/migrations/0077_auto_20170321_1130.py b/sapl/materia/migrations/0077_auto_20170321_1130.py new file mode 100644 index 000000000..a39b48c1d --- /dev/null +++ b/sapl/materia/migrations/0077_auto_20170321_1130.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2017-03-21 11:30 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0076_merge'), + ] + + operations = [ + migrations.AlterField( + model_name='relatoria', + name='comissao', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='comissoes.Comissao', verbose_name='Comissão'), + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index 02b63840a..488a4e555 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -489,7 +489,7 @@ class Relatoria(models.Model): null=True, verbose_name=_('Motivo Fim Relatoria')) comissao = models.ForeignKey( - Comissao, blank=True, null=True, verbose_name=_('Localização Atual')) + Comissao, blank=True, null=True, verbose_name=_('Comissão')) data_designacao_relator = models.DateField( verbose_name=_('Data Designação')) data_destituicao_relator = models.DateField( diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 594ae1a56..8a401b079 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -47,8 +47,8 @@ from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AdicionarVariasAutoriasFilterSet, DespachoInicialForm, DocumentoAcessorioForm, MateriaLegislativaFilterSet, MateriaSimplificadaForm, PrimeiraTramitacaoEmLoteFilterSet, - ReceberProposicaoForm, TramitacaoEmLoteFilterSet, - filtra_tramitacao_destino, + ReceberProposicaoForm, RelatoriaForm, + TramitacaoEmLoteFilterSet, filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, filtra_tramitacao_status) from .models import (AcompanhamentoMateria, Anexada, Autoria, DespachoInicial, @@ -808,6 +808,7 @@ class RelatoriaCrud(MasterDetailCrud): public = [RP_LIST, RP_DETAIL] class CreateView(MasterDetailCrud.CreateView): + form_class = RelatoriaForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) @@ -848,6 +849,9 @@ class RelatoriaCrud(MasterDetailCrud): return {'comissao': localizacao} + class UpdateView(MasterDetailCrud.UpdateView): + form_class = RelatoriaForm + class TramitacaoCrud(MasterDetailCrud): model = Tramitacao diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 618e0445e..cd70ca995 100644 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -61,9 +61,10 @@ class MandatoForm(ModelForm): def clean(self): data = self.cleaned_data try: - mandato = Mandato.objects.get( - parlamentar__pk=self.initial['parlamentar'].pk, - legislatura__pk=data['legislatura'].pk) + if 'legislatura' in data and 'parlamentar' in data: + mandato = Mandato.objects.get( + parlamentar__pk=self.initial['parlamentar'].pk, + legislatura__pk=data['legislatura'].pk) except ObjectDoesNotExist: pass else: diff --git a/sapl/parlamentares/tests/test_parlamentares.py b/sapl/parlamentares/tests/test_parlamentares.py index 16b0fb158..6881b7a18 100644 --- a/sapl/parlamentares/tests/test_parlamentares.py +++ b/sapl/parlamentares/tests/test_parlamentares.py @@ -122,9 +122,10 @@ def test_mandato_submit(admin_client): mommy.make(Parlamentar, pk=14) mommy.make(Legislatura, pk=5) - admin_client.post(reverse('sapl.parlamentares:mandato_create', + response = admin_client.post(reverse('sapl.parlamentares:mandato_create', kwargs={'pk': 14}), - {'legislatura': 5, + {'parlamentar': 14, # hidden field + 'legislatura': 5, 'data_fim_mandato': '2016-01-01', 'data_expedicao_diploma': '2016-03-22', 'observacao': 'Observação do mandato', diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index 17eb81272..485439d93 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -307,17 +307,19 @@ class ParlamentarCrud(Crud): def get_queryset(self): queryset = super().get_queryset() - legislatura_id = self.take_legislatura_id() if legislatura_id != 0: return queryset.filter( mandato__legislatura_id=legislatura_id) else: try: - l = Legislatura.objects.all().order_by('-data_inicio').first().pk + l = Legislatura.objects.all().order_by( + '-data_inicio').first() except ObjectDoesNotExist: - return [] + return Legislatura.objects.all() else: + if l is None: + return Legislatura.objects.all() return queryset.filter(mandato__legislatura_id=l) def get_headers(self): diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 53b336d12..1caf5c569 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -540,6 +540,15 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): class DocumentoAdministrativoForm(ModelForm): + data = forms.DateField(initial=datetime.today) + + ano_protocolo = forms.ChoiceField(required=False, + label=Protocolo._meta. + get_field('ano').verbose_name, + choices=RANGE_ANOS, + widget=forms.Select( + attrs={'class': 'selector'})) + class Meta: model = DocumentoAdministrativo fields = ['tipo', @@ -547,6 +556,7 @@ class DocumentoAdministrativoForm(ModelForm): 'ano', 'data', 'numero_protocolo', + 'ano_protocolo', 'assunto', 'interessado', 'tramitacao', @@ -561,23 +571,22 @@ class DocumentoAdministrativoForm(ModelForm): def clean(self): numero_protocolo = self.data['numero_protocolo'] - ano = self.data['ano'] + ano_protocolo = self.data['ano_protocolo'] - if numero_protocolo and ano: + if numero_protocolo and ano_protocolo: try: self.fields['protocolo'].initial = Protocolo.objects.get( numero=numero_protocolo, - ano=ano).pk + ano=ano_protocolo).pk except ObjectDoesNotExist: msg = _('Protocolo %s/%s inexistente' % ( - numero_protocolo, ano)) + numero_protocolo, ano_protocolo)) raise ValidationError(str(msg)) return self.cleaned_data def save(self, commit=True): documento = super(DocumentoAdministrativoForm, self).save(False) - if self.fields['protocolo'].initial: documento.protocolo = Protocolo.objects.get( id=int(self.fields['protocolo'].initial)) @@ -587,11 +596,12 @@ class DocumentoAdministrativoForm(ModelForm): return documento def __init__(self, *args, **kwargs): + row1 = to_row( [('tipo', 4), ('numero', 4), ('ano', 4)]) row2 = to_row( - [('data', 6), ('numero_protocolo', 6)]) + [('data', 4), ('numero_protocolo', 4), ('ano_protocolo', 4)]) row3 = to_row( [('assunto', 12)]) diff --git a/sapl/protocoloadm/migrations/0013_auto_20170320_1637.py b/sapl/protocoloadm/migrations/0013_auto_20170320_1637.py new file mode 100644 index 000000000..f15b15de2 --- /dev/null +++ b/sapl/protocoloadm/migrations/0013_auto_20170320_1637.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-03-20 16:37 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0012_auto_20170315_1211'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoadministrativo', + name='observacao', + field=models.TextField(blank=True, default='', verbose_name='Observação'), + preserve_default=False, + ), + ] diff --git a/sapl/protocoloadm/migrations/0014_auto_20170321_1130.py b/sapl/protocoloadm/migrations/0014_auto_20170321_1130.py new file mode 100644 index 000000000..661d7242b --- /dev/null +++ b/sapl/protocoloadm/migrations/0014_auto_20170321_1130.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2017-03-21 11:30 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0013_auto_20170320_1637'), + ] + + operations = [ + migrations.AlterField( + model_name='documentoadministrativo', + name='protocolo', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='protocoloadm.Protocolo', verbose_name='Protocolo'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index 4f6014733..551fdcc19 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -110,7 +110,7 @@ class DocumentoAdministrativo(models.Model): protocolo = models.ForeignKey( Protocolo, blank=True, - null=True) + null=True, verbose_name=_('Protocolo')) data = models.DateField(verbose_name=_('Data')) numero_protocolo = models.PositiveIntegerField( blank=True, null=True, verbose_name=_('Núm. Protocolo')) @@ -126,7 +126,7 @@ class DocumentoAdministrativo(models.Model): choices=YES_NO_CHOICES) assunto = models.TextField(verbose_name=_('Assunto')) observacao = models.TextField( - blank=True, null=True, verbose_name=_('Observação')) + blank=True, verbose_name=_('Observação')) texto_integral = models.FileField( blank=True, null=True, diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 7fd906f1c..3e13920d4 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -87,7 +87,7 @@ class DocumentoAdministrativoCrud(Crud): class BaseMixin(Crud.BaseMixin): list_field_names = ['tipo', 'numero', 'ano', 'data', - 'numero_protocolo', 'assunto', + 'numero_protocolo', 'ano_protocolo', 'assunto', 'interessado', 'tramitacao', 'texto_integral'] class ListView(DocumentoAdministrativoMixin, Crud.ListView): @@ -95,9 +95,17 @@ class DocumentoAdministrativoCrud(Crud): class CreateView(DocumentoAdministrativoMixin, Crud.CreateView): form_class = DocumentoAdministrativoForm + layout_key = None class UpdateView(DocumentoAdministrativoMixin, Crud.UpdateView): form_class = DocumentoAdministrativoForm + layout_key = None + + def get_initial(self): + if self.object.protocolo: + p = self.object.protocolo + return {'ano_protocolo': p.ano, + 'numero_protocolo': p.numero} class DetailView(DocumentoAdministrativoMixin, Crud.DetailView): def get_context_data(self, **kwargs): @@ -303,8 +311,10 @@ class CriarDocumentoProtocolo(PermissionRequiredMixin, CreateView): doc = {} doc['tipo'] = protocolo.tipo_documento doc['ano'] = curr_year - doc['data'] = protocolo.data + doc['data'] = datetime.today() doc['numero_protocolo'] = protocolo.numero + doc['ano_protocolo'] = protocolo.ano + doc['protocolo'] = protocolo.id doc['assunto'] = protocolo.assunto_ementa doc['interessado'] = protocolo.interessado doc['numero'] = numero_max + 1 if numero_max else 1 @@ -329,7 +339,7 @@ class ProtocoloMostrarView(PermissionRequiredMixin, TemplateView): else: context['materia'] = materia - elif protocolo.tipo_documento: + if protocolo.tipo_documento: context[ 'documentos'] = protocolo.documentoadministrativo_set.all().order_by('-ano', '-numero') diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 5ad572c51..cb402bd84 100644 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -504,13 +504,16 @@ def get_sessao_plenaria(sessao, casa): lst_presenca_sessao = [] for presenca in SessaoPlenariaPresenca.objects.filter( sessao_plenaria=sessao): + for parlamentar in Parlamentar.objects.filter( id=presenca.parlamentar.id): dic_presenca = {} dic_presenca["nom_parlamentar"] = parlamentar.nome_parlamentar - partido_sigla = Filiacao.objects.filter( - parlamentar=parlamentar).first().partido.sigla - if not partido_sigla: + partido = Filiacao.objects.filter( + parlamentar=parlamentar).first() + if partido: + partido_sigla = partido.partido.sigla + else: partido_sigla = '' dic_presenca['sgl_partido'] = partido_sigla lst_presenca_sessao.append(dic_presenca) @@ -569,6 +572,7 @@ def get_sessao_plenaria(sessao, casa): dic_expediente_materia["txt_ementa"] = str(materia.ementa) dic_expediente_materia["ordem_observacao"] = ' ' # TODO dic_expediente_materia["nom_autor"] = ' ' + dic_expediente_materia["nom_resultado"] = '' autoria = Autoria.objects.filter( materia=materia, primeiro_autor=True).first() @@ -650,6 +654,7 @@ def get_sessao_plenaria(sessao, casa): id=votacao.materia.id).first() dic_votacao = {} + dic_votacao["nom_resultado"] = '' dic_votacao["num_ordem"] = votacao.numero_ordem dic_votacao["id_materia"] = ( materia.tipo.sigla + ' ' + diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index 3e43ff1bc..e06376fd6 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -129,7 +129,7 @@ urlpatterns = [ url(r'^sessao/(?P\d+)/matexp/votsec/view/(?P\d+)/(?P\d+)$', VotacaoExpedienteEditView.as_view(), name='votacaosecretaexpedit'), - url(r'^ajax/mudar-ordem-materia-sessao/', + url(r'^sessao/mudar-ordem-materia-sessao/', mudar_ordem_materia_sessao, name='mudar_ordem_materia_sessao'), ] diff --git a/sapl/templates/materia/materialegislativa_filter.html b/sapl/templates/materia/materialegislativa_filter.html index e0f773b61..639031d16 100644 --- a/sapl/templates/materia/materialegislativa_filter.html +++ b/sapl/templates/materia/materialegislativa_filter.html @@ -43,17 +43,23 @@ Apresentação: {{ m.data_apresentacao }}
{% endif %} + {% if m.autoria_set.all %} Autores: {% for a in m.autoria_set.all %} {% if not forloop.first %} - ,    {{a.autor|default_if_none:"Não Informado"}} + ,    {{a.autor}} {% else %} -  {{a.autor|default_if_none:"Não Informado"}} +  {{a.autor}} {% endif %} {% endfor %}
- Localização Atual:  {{m.tramitacao_set.last.unidade_tramitacao_destino|default_if_none:"Não Informada"}}
- Status:  {{m.tramitacao_set.last.status|default_if_none:"Não Informada"}}
+ {% endif %} + {% if m.tramitacao_set.last.unidade_tramitacao_destino %} + Localização Atual:  {{m.tramitacao_set.last.unidade_tramitacao_destino}}
+ {% endif %} + {% if m.tramitacao_set.last.status %} + Status:  {{m.tramitacao_set.last.status}}
+ {% endif %} {% if m.registrovotacao_set.exists %} Data da última Votação: {% if m.registrovotacao_set.last.ordem %} @@ -67,7 +73,9 @@ {% endif %}
{% endif %} - Data da última Tramitação:  {{m.tramitacao_set.last.data_tramitacao|default_if_none:"Não Informada"}}
+ {% if m.tramitacao_set.last.data_tramitacao %} + Data da última Tramitação:  {{m.tramitacao_set.last.data_tramitacao}}
+ {% endif %} {% if m.anexo_de.exists %} {% for a in m.materia_anexada_set.all %} Matéria Anexadora:   diff --git a/sapl/templates/protocoloadm/layouts.yaml b/sapl/templates/protocoloadm/layouts.yaml index ef3727839..8b6c935d0 100644 --- a/sapl/templates/protocoloadm/layouts.yaml +++ b/sapl/templates/protocoloadm/layouts.yaml @@ -6,7 +6,7 @@ TipoDocumentoAdministrativo: DocumentoAdministrativo: {% trans 'Indentificação Básica' %}: - tipo numero ano - - data numero_protocolo + - data protocolo - assunto - interessado tramitacao - texto_integral