mirror of https://github.com/interlegis/sapl.git
Rogério Frá
8 years ago
committed by
GitHub
107 changed files with 2676 additions and 1217 deletions
@ -0,0 +1,110 @@ |
|||
============================== |
|||
Instruções para fazer o Deploy |
|||
============================== |
|||
|
|||
Para efeitos deste doc, foram consideradas as tecnologias NGINX + GUNICORN para servir a aplicação Django SAPL. |
|||
|
|||
O NGINX é o servidor WEB, e o GUNICORN é o servidor da aplicação para o servidor WEB. |
|||
|
|||
|
|||
|
|||
É altamente recomendável que para produção o SAPL não seja executado em modo debug. |
|||
Para isso edite o arquivo ``.env`` criado anteriormente em:: |
|||
|
|||
sudo nano /var/interlegis/sapl/sapl/.env |
|||
|
|||
alterando o variável DEBUG para false:: |
|||
|
|||
DEBUG = False |
|||
|
|||
|
|||
Instalando Pacotes |
|||
------------------ |
|||
|
|||
Instalar o NGINX:: |
|||
|
|||
sudo apt-get install nginx |
|||
|
|||
|
|||
Instalar o Gunicorn:: |
|||
|
|||
sudo pip install gunicorn |
|||
|
|||
|
|||
Preparando o NGINX |
|||
------------------ |
|||
sudo nano /etc/nginx/sites-available/sapl31.conf:: |
|||
|
|||
upstream ENDERECO_SITE { |
|||
server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0; |
|||
} |
|||
|
|||
server { |
|||
|
|||
listen 80; |
|||
server_name ENDERECO_SITE; |
|||
|
|||
client_max_body_size 4G; |
|||
|
|||
access_log /var/log/nginx-access.log; |
|||
error_log /var/log/nginx-error.log; |
|||
|
|||
location /static/ { |
|||
alias /var/interlegis/sapl/collected_static/; |
|||
} |
|||
|
|||
location /media/ { |
|||
alias /var/interlegis/sapl/media/; |
|||
} |
|||
|
|||
location / { |
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
|||
proxy_set_header Host $http_host; |
|||
proxy_redirect off; |
|||
if (!-f $request_filename) { |
|||
proxy_pass http://ENDERECO_SITE; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
# Error pages |
|||
error_page 500 502 503 504 /500.html; |
|||
location = /500.html { |
|||
root /var/interlegis/sapl/sapl/static/; |
|||
} |
|||
} |
|||
|
|||
|
|||
Criar link simbólico para ativar o site:: |
|||
|
|||
sudo ln -s /etc/nginx/sites-available/sapl31.conf /etc/nginx/sites-enabled/sapl3 |
|||
|
|||
Reiniciar o nginx |
|||
|
|||
sudo service nginx restart |
|||
|
|||
|
|||
Preparando o Gunicorn |
|||
--------------------- |
|||
Na raiz do Projeto sapl, existe o arquivo chamado gunicorn_start.sh |
|||
|
|||
Para definir o parametro NUM_WORKERS utilize a seguinte fórmula: 2 * CPUs 1. |
|||
Para uma máquina de CPU única o valor seria 3 |
|||
|
|||
|
|||
Para rodar o gunicorn:: |
|||
|
|||
workon sapl |
|||
|
|||
/var/interlegis/sapl/.gunicorn_start.sh |
|||
|
|||
|
|||
|
|||
#Referências. |
|||
|
|||
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ |
|||
|
|||
Para multiplas aplicações Django. |
|||
|
|||
http://michal.karzynski.pl/blog/2013/10/29/serving-multiple-django-applications-with-nginx-gunicorn-supervisor/ |
|||
|
@ -0,0 +1,41 @@ |
|||
De forma muito simples e em linhas gerais o básico sobre GIT |
|||
|
|||
Glosário |
|||
--------- |
|||
|
|||
Git - Sistema de controle de versão de aquivos |
|||
|
|||
GitHub - É um serviço web que oferece diversas funcionalidades extras aplicadas ao git |
|||
|
|||
Branch - Significa ramificar seu projeto, criar um snapshot. |
|||
|
|||
Merge - Significa incorporar seu branch no master |
|||
|
|||
|
|||
Pode ser útil |
|||
------------- |
|||
|
|||
Atualizar a base local: |
|||
|
|||
git pull --rebase git://github.com/interlegis/sapl |
|||
|
|||
Exibir informações: |
|||
|
|||
git status |
|||
|
|||
|
|||
Na base local descartar alguma alteração feita nos arquivos: |
|||
|
|||
git checkout sapl/legacy_migration_settings.py |
|||
|
|||
Atualizar para alguma brach especifica (ex:785-atualizar-migracao): |
|||
|
|||
git checkout 785-atualizar-migracao |
|||
|
|||
Voltar para a branch master |
|||
|
|||
git checkout master |
|||
|
|||
Verificar 5 ultimos comits: |
|||
|
|||
git log --oneline -n 5 |
@ -0,0 +1,73 @@ |
|||
|
|||
Orientações gerais de implementação |
|||
------------------------------------ |
|||
|
|||
|
|||
Boas Práticas |
|||
-------------- |
|||
|
|||
* Utilize a língua portuguesa em todo o código, nas mensagens de commit e na documentação do projeto. |
|||
|
|||
* Mensagens de commit seguem o padrão de 50/72 colunas. Comece toda mensagem de commit com o verbo no infinitivo. Para mais informações, clique nos links abaixo: |
|||
|
|||
- Http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html |
|||
- Http://stackoverflow.com/questions/2290016/git-commit-messages-50-72-formatting |
|||
|
|||
* Mantenha todo o código de acordo com o padrão da PEP8 (sem exceções). |
|||
|
|||
* Antes de todo ``git push``: |
|||
|
|||
- Execute ``git pull --rebase`` (quase sempre). |
|||
- Em casos excepcionais, faça somente ``git pull`` para criar um merge. |
|||
|
|||
* Antes de ``git commit``, sempre: |
|||
|
|||
- Execute ``./manage.py check`` |
|||
- Execute todos os testes com ``py.test`` na pasta raiz do projeto |
|||
|
|||
* Em caso de Implementação de modelo que envolva a classe ``django.contrib.auth.models.User``, não a use diretamente, use para isso a função ``get_settings_auth_user_model()`` de ``sapl.utils``. Exemplo: |
|||
|
|||
- no lugar de ``owner = models.ForeignKey(User, ... )`` |
|||
- use ``owner = models.ForeignKey(get_settings_auth_user_model(), ... )`` |
|||
|
|||
- Não use em qualquer modelagem futura, ``ForeignKey`` com ``User`` ou mesmo ``settings.AUTH_USER_MODEL`` sem o import correto que não é o do projeto e sim o que está em ``sapl.utils``, ou seja (``from django.conf import settings``) |
|||
|
|||
- em https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#referencing-the-user-model é explicado por que ser dessa forma! |
|||
|
|||
- Já em qualquer uso em implementação de execução, ao fazer uma query, por exemplo: |
|||
|
|||
- não use ``django.contrib.auth.models.User`` para utilizar as caracteristicas do model, para isso, use esta função: django.contrib.auth.get_user_model() |
|||
|
|||
- Seguir esses passos simplificará qualquer customização futura que venha a ser feita na autenticação do usuários ao evitar correções de inúmeros import's e ainda, desta forma, torna a funcionalidade de autenticação reimplementável por qualquer outro projeto que venha usar partes ou o todo do SAPL. |
|||
|
|||
Atenção: |
|||
|
|||
O usuário do banco de dados ``sapl`` deve ter a permissão ``create database`` no postgres para que os testes tenham sucesso |
|||
|
|||
* Se você não faz parte da equipe principal, faça o fork deste repositório e envie pull requests. |
|||
Todos são bem-vindos para contribuir. Por favor, faça uma pull request separada para cada correção ou criação de novas funcionalidades. |
|||
|
|||
* Novas funcionalidades estão sujeitas a aprovação, uma vez que elas podem ter impacto em várias pessoas. |
|||
Nós sugerimos que você abra uma nova issue para discutir novas funcionalidades. Elas podem ser escritas tanto em Português, quanto em Inglês. |
|||
|
|||
|
|||
|
|||
Testes |
|||
------ |
|||
|
|||
* Escrever testes para todas as funcionalidades que você implementar. |
|||
|
|||
* Manter a cobertura de testes próximo a 100%. |
|||
|
|||
* Para executar todos os testes você deve entrar em seu virtualenv e executar este comando **na raiz do seu projeto**:: |
|||
|
|||
py.test |
|||
|
|||
* Para executar os teste de cobertura use:: |
|||
|
|||
py.test --cov . --cov-report term --cov-report html && firefox htmlcov/index.html |
|||
|
|||
* Na primeira vez que for executar os testes após uma migração (``./manage.py migrate``) use a opção de recriação da base de testes. |
|||
É necessário fazer usar esta opção apenas uma vez:: |
|||
|
|||
py.test --create-db |
@ -0,0 +1,31 @@ |
|||
Instruções para Importação da base mysql 2.5 |
|||
============================================ |
|||
|
|||
|
|||
Para entrar no ambiente virtual:: |
|||
|
|||
workon sapl |
|||
|
|||
|
|||
|
|||
Instalar Dependências:: |
|||
|
|||
pip3 install -r requirements/migration-requirements.txt |
|||
|
|||
Criar um arquivo sapl/legacy/.env com o seguinte conteúdo (parametros de acesso ao banco 2.5):: |
|||
|
|||
DATABASE_URL = mysql://[usuario do mysql]:[senha do myuysql]@[host]:[porta]/[banco] |
|||
|
|||
|
|||
o conteúdo do arquivo será semelhante a isso:: |
|||
|
|||
DATABASE_URL = mysql://sapl:sapl@localhost:3306/interlegis |
|||
|
|||
|
|||
Posteriormente rodar a seguinte sequencia de comandos estando no ambiente virtual:: |
|||
|
|||
./manage.py shell --settings=sapl.legacy_migration_settings |
|||
|
|||
%run sapl/legacy/migration.py |
|||
|
|||
migrate() |
@ -0,0 +1,220 @@ |
|||
Instalação do Ambiente de Desenvolvimento |
|||
========================================= |
|||
|
|||
* Procedimento testado nos seguintes SO's: |
|||
|
|||
* `Ubuntu 16.04 64bits <https://github.com/interlegis/sapl/blob/master/README.rst>`_; |
|||
|
|||
* Para esta instalação foi utilizado o usuário de sistema sapl31 |
|||
|
|||
|
|||
Atualizar o sistema:: |
|||
---------------------- |
|||
|
|||
:: |
|||
|
|||
sudo apt-get update |
|||
|
|||
sudo apt-get upgrade |
|||
|
|||
|
|||
|
|||
Instalar as seguintes dependências do sistema:: |
|||
---------------------------------------------------------------------------------------- |
|||
|
|||
* :: |
|||
|
|||
sudo apt-get install git python3-dev libpq-dev graphviz-dev graphviz \ |
|||
pkg-config postgresql postgresql-contrib pgadmin3 python-psycopg2 \ |
|||
software-properties-common build-essential libxml2-dev libjpeg-dev \ |
|||
libmysqlclient-dev libssl-dev libffi-dev libxslt1-dev python3-setuptools \ |
|||
python3-pip curl |
|||
|
|||
sudo -i |
|||
curl -sL https://deb.nodesource.com/setup_5.x | bash - |
|||
exit |
|||
sudo apt-get install nodejs |
|||
|
|||
sudo npm install npm -g |
|||
sudo npm install -g bower |
|||
|
|||
Instalar o virtualenv usando python 3 para o projeto. |
|||
----------------------------------------------------- |
|||
|
|||
* Para usar `virtualenvwrapper <https://virtualenvwrapper.readthedocs.org/en/latest/install.html#basic-installation>`_, instale com:: |
|||
|
|||
sudo pip3 install virtualenvwrapper |
|||
|
|||
sudo mkdir -p /var/interlegis/.virtualenvs |
|||
|
|||
* Ajustar as permissões - onde sapl31 trocar por usuario:: |
|||
|
|||
sudo chown -R sapl31:sapl31 /var/interlegis/ |
|||
|
|||
|
|||
* Edite o arquivo ``.bashrc`` e adicione ao seu final as configurações abaixo para o virtualenvwrapper:: |
|||
|
|||
nano /home/sapl31/.bashrc |
|||
|
|||
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 |
|||
export WORKON_HOME=/var/interlegis/.virtualenvs |
|||
export PROJECT_HOME=/var/interlegis |
|||
source /usr/local/bin/virtualenvwrapper.sh |
|||
|
|||
|
|||
* Carregue as configurações do virtualenvwrapper:: |
|||
|
|||
source /home/sapl31/.bashrc |
|||
|
|||
|
|||
|
|||
Clonar o projeto do github, ou fazer um fork e depois clonar |
|||
------------------------------------------------------------ |
|||
|
|||
* Para apenas clonar do repositório do Interlegis:: |
|||
|
|||
cd /var/interlegis |
|||
git clone git://github.com/interlegis/sapl |
|||
|
|||
* Para fazer um fork e depois clonar, siga as instruções em https://help.github.com/articles/fork-a-repo que basicamente são: |
|||
|
|||
* Criar uma conta no github - é gratuíto. |
|||
* Acessar https://github.com/interlegis/sapl e clicar em **Fork**. |
|||
|
|||
Será criado um domínio pelo qual será possível **clonar, corrigir, customizar, melhorar, contribuir, etc**:: |
|||
|
|||
cd /var/interlegis |
|||
git clone git://github.com/[SEU NOME]/sapl |
|||
|
|||
* As configurações e instruções de uso para o git estão espalhadas pela internet e possui muito coisa bacana. As tarefas básicas de git e suas interações com github são tranquilas de se aprender. |
|||
|
|||
|
|||
Criar o ambiente virtual de desenvolvimento para o SAPL |
|||
------------------------------------------------------- |
|||
* :: |
|||
|
|||
mkvirtualenv sapl -a /var/interlegis/sapl -p /usr/bin/python3 |
|||
|
|||
Instalação e configuração das dependências do projeto |
|||
----------------------------------------------------- |
|||
|
|||
* **Acesse o terminal e entre no virtualenv**:: |
|||
|
|||
workon sapl |
|||
|
|||
* **Instalar dependências python**:: |
|||
|
|||
pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt |
|||
|
|||
* **Configurar Postgresql**:: |
|||
|
|||
sudo -u postgres psql -c "CREATE ROLE sapl LOGIN ENCRYPTED PASSWORD 'sapl' NOSUPERUSER INHERIT CREATEDB NOCREATEROLE NOREPLICATION;" |
|||
|
|||
sudo -u postgres psql -c "ALTER ROLE sapl VALID UNTIL 'infinity';" |
|||
|
|||
sudo -u postgres psql -c "CREATE DATABASE sapl WITH OWNER = sapl ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'pt_BR.UTF-8' LC_CTYPE = 'pt_BR.UTF-8' CONNECTION LIMIT = -1;" |
|||
|
|||
* Se você possui uma cópia da base de dados do SAPL, essa é a hora para restaurá-la. |
|||
* Obs: no ambiente de desenvolvimento, a role deve ter permissão para criar outro banco. Isso é usado pelos testes automatizados. |
|||
* (caso você já possua uma instalação do postrgresql anterior ao processo de instalação do ambiente de desenvolvimento do SAPL em sua máquina e sábia como fazer, esteja livre para proceder como desejar, porém, ao configurar o arquivo ``.env`` no próximo passo, as mesmas definições deverão ser usadas) |
|||
|
|||
|
|||
* **Ajustar as permissões - onde sapl31 trocar por usuario**:: |
|||
|
|||
sudo chown -R sapl31:sapl31 /var/interlegis/ |
|||
|
|||
|
|||
|
|||
* **Configurar arquivo .env**:: |
|||
|
|||
|
|||
Criação da `SECRET_KEY <https://docs.djangoproject.com/es/1.9/ref/settings/#std:setting-SECRET_KEY>`_: |
|||
|
|||
|
|||
* **Criar o arquivo ``.env`` dentro da pasta /var/interlegis/sapl/sapl/.env**:: |
|||
|
|||
nano /var/interlegis/sapl/sapl/.env |
|||
|
|||
DATABASE_URL = postgresql://USER:PASSWORD@HOST:PORT/NAME |
|||
SECRET_KEY = Gere alguma chave e coloque aqui |
|||
DEBUG = [True/False] |
|||
EMAIL_USE_TLS = [True/False] |
|||
EMAIL_PORT = [Insira este parâmetro] |
|||
EMAIL_HOST = [Insira este parâmetro] |
|||
EMAIL_HOST_USER = [Insira este parâmetro] |
|||
EMAIL_HOST_PASSWORD = [Insira este parâmetro] |
|||
DEFAULT_FROM_EMAIL = [Insira este parâmetro] |
|||
SERVER_EMAIL = [Insira este parâmetro] |
|||
|
|||
|
|||
* Uma configuração mínima para atender os procedimentos acima seria:: |
|||
|
|||
DATABASE_URL = postgresql://sapl:sapl@localhost:5432/sapl |
|||
SECRET_KEY = 'cole aqui entre as aspas simples a chave gerada pelo comando abaixo' |
|||
DEBUG = True |
|||
EMAIL_USE_TLS = True |
|||
EMAIL_PORT = 587 |
|||
EMAIL_HOST = |
|||
EMAIL_HOST_USER = |
|||
EMAIL_HOST_PASSWORD = |
|||
DEFAULT_FROM_EMAIL = |
|||
SERVER_EMAIL = |
|||
|
|||
|
|||
|
|||
|
|||
Rodar o comando abaixo, um detalhe importante, esse comando só funciona com o django extensions, mas ele já está presente no arquivo requirements/requirements.txt desse projeto:: |
|||
|
|||
python manage.py generate_secret_key |
|||
|
|||
Copie a chave que aparecerá, edite o arquivo .env e altere o valor do parâmetro SECRET_KEY. |
|||
|
|||
|
|||
* Posicionar-se no diretorio do Projeto:: |
|||
|
|||
cd /var/interlegis/sapl |
|||
|
|||
|
|||
* Instalar as dependências do ``bower``:: |
|||
|
|||
./manage.py bower install |
|||
|
|||
* Atualizar e/ou criar as tabelas da base de dados para refletir o modelo da versão clonada:: |
|||
|
|||
./manage.py migrate |
|||
|
|||
* Atualizar arquivos estáticos:: |
|||
|
|||
./manage.py collectstatic --noinput |
|||
|
|||
* Subir o servidor do django:: |
|||
|
|||
./manage.py runserver 0.0.0.0:8001 |
|||
|
|||
* Acesse o SAPL em:: |
|||
|
|||
http://localhost:8001/ |
|||
|
|||
Instruções para criação do super usuário e de usuários de testes |
|||
=========================================================================== |
|||
|
|||
* Criar super usuário do django-contrib-admin (Será solicitado alguns dados para criação):: |
|||
|
|||
./manage.py createsuperuser |
|||
|
|||
* `Os perfis semânticos do SAPL <https://github.com/interlegis/sapl/blob/master/sapl/rules/__init__.py>`_ são fixos e atualizados a cada execução do comando:: |
|||
|
|||
./manage.py migrate |
|||
|
|||
* Os perfis fixos não aceitam customização via admin, porém outros grupos podem ser criados. O SAPL não interferirá no conjunto de permissões definidas em grupos customizados e se comportará diante de usuários segundo seus grupos e suas permissões. |
|||
|
|||
* Os usuários de testes de perfil são criados apenas se o SAPL estiver rodando em modo DEBUG=True. Todos com senha "interlegis", serão:: |
|||
|
|||
operador_administrativo |
|||
operador_protocoloadm |
|||
operador_comissoes |
|||
operador_materia |
|||
operador_norma |
|||
operador_sessao |
|||
operador_painel |
|||
operador_geral |
@ -0,0 +1,27 @@ |
|||
|
|||
Instruções para Tradução |
|||
======================== |
|||
|
|||
Nós utilizamos o `Transifex <https://www.transifex.com>`_ para gerenciar as traduções do projeto. |
|||
Se você deseja contribuir, por favor crie uma conta no site e peça para se juntar a nós em `Transifex SAPL Page <https://www.transifex.com/projects/p/sapl>`_. |
|||
Assim que for aceito, você já pode começar a traduzir. |
|||
|
|||
Para integrar as últimas traduções ao projeto atual, siga estes passos: |
|||
|
|||
* Siga as instruções em `Development Environment Installation`_. |
|||
|
|||
* Instale `Transifex Client <http://docs.transifex.com/client/config/>`_. |
|||
|
|||
Aviso: |
|||
|
|||
O Transifex Client armazena senhas em 'plain text' no arquivo ``~/.transifexrc``. |
|||
|
|||
Nós preferimos logar no site do Transifex por meio de redes sociais (GitHub, Google Plus, Linkedin) e modificar, frequentemente, a senha utilizada pelo client. |
|||
|
|||
* `Pull translations <http://docs.transifex.com/client/pull/>`_ ou `push translations <http://docs.transifex.com/client/push/>`_ usando o client. Faça o Pull somente com o repositório vazio, isto é, faça o commit de suas mudanças antes de fazer o Pull de novas traduções. |
|||
|
|||
* Execute o programa com ``.manage.py runserver`` e cheque o sistema para ver se as traduções tiveram efeito. |
|||
|
|||
Nota: |
|||
|
|||
O idioma do browser é utilizado para escolher as traduções que devem mostradas. |
@ -0,0 +1,21 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-11 13:01 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('compilacao', '0069_auto_20161107_1932'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='perfilestruturaltextoarticulado', |
|||
name='parent', |
|||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='perfil_parent_set', to='compilacao.PerfilEstruturalTextoArticulado', verbose_name='Perfil Herdado'), |
|||
), |
|||
] |
@ -0,0 +1,20 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-12 14:25 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('compilacao', '0070_perfilestruturaltextoarticulado_parent'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='tipotextoarticulado', |
|||
name='perfis', |
|||
field=models.ManyToManyField(blank=True, help_text='\n Apenas os perfis selecionados aqui estarão disponíveis\n para o editor de Textos Articulados cujo Tipo seja este\n em edição.\n ', to='compilacao.PerfilEstruturalTextoArticulado', verbose_name='Perfis Estruturais de Textos Articulados'), |
|||
), |
|||
] |
@ -0,0 +1,55 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-12 15:53 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('compilacao', '0071_tipotextoarticulado_perfis'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='nota_automatica_prefixo_html', |
|||
field=models.TextField(blank=True, verbose_name='Prefixo html da nota automática'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='nota_automatica_sufixo_html', |
|||
field=models.TextField(blank=True, verbose_name='Sufixo html da nota automática'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='rotulo_prefixo_html', |
|||
field=models.TextField(blank=True, verbose_name='Prefixo html do rótulo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='rotulo_prefixo_texto', |
|||
field=models.TextField(blank=True, verbose_name='Prefixo de Edição do rótulo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='rotulo_sufixo_html', |
|||
field=models.TextField(blank=True, verbose_name='Sufixo html do rótulo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='rotulo_sufixo_texto', |
|||
field=models.TextField(blank=True, verbose_name='Sufixo de Edição do rótulo'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='texto_prefixo_html', |
|||
field=models.TextField(blank=True, verbose_name='Prefixo html do texto'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='tipodispositivo', |
|||
name='texto_sufixo_html', |
|||
field=models.TextField(blank=True, verbose_name='Sufixo html do texto'), |
|||
), |
|||
] |
@ -0,0 +1,35 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-10 09:10 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('materia', '0067_auto_20161025_1630'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='materialegislativa', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='materialegislativa', |
|||
name='ano_origem_externa', |
|||
field=models.PositiveSmallIntegerField(blank=True, choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], null=True, verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='numeracao', |
|||
name='ano_materia', |
|||
field=models.PositiveSmallIntegerField(choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='proposicao', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(blank=True, choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], default=None, null=True, verbose_name='Ano'), |
|||
), |
|||
] |
@ -0,0 +1,21 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-11 10:05 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('compilacao', '0069_auto_20161107_1932'), |
|||
('materia', '0068_auto_20161110_0910'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='tipoproposicao', |
|||
name='perfis', |
|||
field=models.ManyToManyField(blank=True, to='compilacao.PerfilEstruturalTextoArticulado', verbose_name='Perfis Estruturais de Textos Articulados'), |
|||
), |
|||
] |
@ -0,0 +1,21 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-11 13:01 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('materia', '0069_tipoproposicao_perfis'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='tipoproposicao', |
|||
name='perfis', |
|||
field=models.ManyToManyField(blank=True, help_text='\n Mesmo que em Configurações da Aplicação nas\n Tabelas Auxiliares esteja definido que Proposições possam\n utilizar Textos Articulados, ao gerar uma proposição,\n a solução de Textos Articulados será disponibilizada se\n o Tipo escolhido para a Proposição estiver associado a ao\n menos um Perfil Estrutural de Texto Articulado.\n ', |
|||
to='compilacao.PerfilEstruturalTextoArticulado', verbose_name='Perfis Estruturais de Textos Articulados'), |
|||
), |
|||
] |
@ -0,0 +1,19 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.11 on 2016-11-30 10:01 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('materia', '0070_auto_20161111_1301'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='proposicao', |
|||
options={'permissions': (('detail_proposicao_enviada', 'Pode acessar detalhes de uma proposição enviada.'), ('detail_proposicao_devolvida', 'Pode acessar detalhes de uma proposição devolvida.')), 'verbose_name': 'Proposição', 'verbose_name_plural': 'Proposições'}, |
|||
), |
|||
] |
@ -0,0 +1,19 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.11 on 2016-11-30 16:18 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('materia', '0071_auto_20161130_1001'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='proposicao', |
|||
options={'permissions': (('detail_proposicao_enviada', 'Pode acessar detalhes de uma proposição enviada.'), ('detail_proposicao_devolvida', 'Pode acessar detalhes de uma proposição devolvida.'), ('detail_proposicao_incorporada', 'Pode acessar detalhes de uma proposição incorporada.')), 'verbose_name': 'Proposição', 'verbose_name_plural': 'Proposições'}, |
|||
), |
|||
] |
@ -0,0 +1,20 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-10 09:10 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0021_auto_20161028_1335'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='normajuridica', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), |
|||
), |
|||
] |
@ -0,0 +1,41 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-23 13:59 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0022_auto_20161110_0910'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='vinculonormajuridica', |
|||
options={'verbose_name': 'Tipo de Vínculo entre Normas Jurídicas', 'verbose_name_plural': 'Tipos de Vínculos entre Normas Jurídicas'}, |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='vinculonormajuridica', |
|||
name='norma_referente', |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='vinculonormajuridica', |
|||
name='norma_referida', |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='vinculonormajuridica', |
|||
name='tipo_vinculo', |
|||
), |
|||
migrations.AddField( |
|||
model_name='vinculonormajuridica', |
|||
name='descricao', |
|||
field=models.CharField(blank=True, max_length=20, verbose_name='Descrição'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='vinculonormajuridica', |
|||
name='sigla', |
|||
field=models.CharField(blank=True, max_length=1, verbose_name='Nome'), |
|||
), |
|||
] |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-23 14:30 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0023_auto_20161123_1359'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='vinculonormajuridica', |
|||
name='descricao', |
|||
field=models.CharField(blank=True, max_length=50, verbose_name='Descrição'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='vinculonormajuridica', |
|||
name='sigla', |
|||
field=models.CharField(blank=True, max_length=1, verbose_name='Sigla'), |
|||
), |
|||
] |
@ -0,0 +1,29 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-23 14:44 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0024_auto_20161123_1430'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='NormaRelacionada', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('norma_principal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='norma_principal', to='norma.NormaJuridica')), |
|||
('norma_relacionada', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='norma_relacionada', to='norma.NormaJuridica')), |
|||
('tipo_vinculo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='norma.VinculoNormaJuridica')), |
|||
], |
|||
options={ |
|||
'verbose_name': 'Norma Relacionada', |
|||
'verbose_name_plural': 'Normas Relacionadas', |
|||
}, |
|||
), |
|||
] |
@ -0,0 +1,21 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-23 14:50 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0025_normarelacionada'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='normarelacionada', |
|||
name='tipo_vinculo', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='norma.VinculoNormaJuridica', verbose_name='Tipo de Vínculo'), |
|||
), |
|||
] |
@ -0,0 +1,26 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-23 15:38 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0026_auto_20161123_1450'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='normarelacionada', |
|||
name='norma_principal', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='norma_principal', to='norma.NormaJuridica', verbose_name='Norma Principal'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='normarelacionada', |
|||
name='norma_relacionada', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='norma_relacionada', to='norma.NormaJuridica', verbose_name='Norma Relacionada'), |
|||
), |
|||
] |
@ -0,0 +1,21 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-12-02 10:25 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('norma', '0027_auto_20161123_1538'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='normajuridica', |
|||
name='materia', |
|||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='materia.MateriaLegislativa', verbose_name='Matéria'), |
|||
), |
|||
] |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.7 on 2016-11-10 09:10 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('protocoloadm', '0006_auto_20161103_1721'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='documentoadministrativo', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='protocolo', |
|||
name='ano', |
|||
field=models.PositiveSmallIntegerField(choices=[('', 'Selecione'), (2016, 2016), (2015, 2015), (2014, 2014), (2013, 2013), (2012, 2012), (2011, 2011), (2010, 2010), (2009, 2009), (2008, 2008), (2007, 2007), (2006, 2006), (2005, 2005), (2004, 2004), (2003, 2003), (2002, 2002), (2001, 2001), (2000, 2000), (1999, 1999), (1998, 1998), (1997, 1997), (1996, 1996), (1995, 1995), (1994, 1994), (1993, 1993), (1992, 1992), (1991, 1991), (1990, 1990), (1989, 1989), (1988, 1988), (1987, 1987), (1986, 1986), (1985, 1985), (1984, 1984), (1983, 1983), (1982, 1982), (1981, 1981), (1980, 1980), (1979, 1979), (1978, 1978), (1977, 1977), (1976, 1976), (1975, 1975), (1974, 1974), (1973, 1973), (1972, 1972), (1971, 1971), (1970, 1970), (1969, 1969), (1968, 1968), (1967, 1967), (1966, 1966), (1965, 1965), (1964, 1964), (1963, 1963), (1962, 1962), (1961, 1961), (1960, 1960), (1959, 1959), (1958, 1958), (1957, 1957), (1956, 1956), (1955, 1955), (1954, 1954), (1953, 1953), (1952, 1952), (1951, 1951), (1950, 1950), (1949, 1949), (1948, 1948), (1947, 1947), (1946, 1946), (1945, 1945), (1944, 1944), (1943, 1943), (1942, 1942), (1941, 1941), (1940, 1940), (1939, 1939), (1938, 1938), (1937, 1937), (1936, 1936), (1935, 1935), (1934, 1934), (1933, 1933), (1932, 1932), (1931, 1931), (1930, 1930), (1929, 1929), (1928, 1928), (1927, 1927), (1926, 1926), (1925, 1925), (1924, 1924), (1923, 1923), (1922, 1922), (1921, 1921), (1920, 1920), (1919, 1919), (1918, 1918), (1917, 1917), (1916, 1916), (1915, 1915), (1914, 1914), (1913, 1913), (1912, 1912), (1911, 1911), (1910, 1910), (1909, 1909), (1908, 1908), (1907, 1907), (1906, 1906), (1905, 1905), (1904, 1904), (1903, 1903), (1902, 1902), (1901, 1901), (1900, 1900), (1899, 1899), (1898, 1898), (1897, 1897), (1896, 1896), (1895, 1895), (1894, 1894), (1893, 1893), (1892, 1892), (1891, 1891), (1890, 1890)], verbose_name='Ano do Protocolo'), |
|||
), |
|||
] |
@ -0,0 +1 @@ |
|||
{% extends "crud/form.html" %} |
@ -0,0 +1,14 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n crispy_forms_tags %} |
|||
{% block base_content %} |
|||
|
|||
<div class="container"> |
|||
{% csrf_token %} |
|||
<div class="row"> |
|||
<p>Foi enviado um e-mail para o endereço inserido. Verifique-o e siga as instruções.</p> |
|||
<p>Caso não receba, procure-o na caixa de spam.</p> |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
{%endblock%} |
@ -0,0 +1,5 @@ |
|||
{% extends "crud/detail.html" %} |
|||
|
|||
{% block table_content %} |
|||
A sua senha foi alterada com sucesso! Clique <a href="{% url 'sapl.base:login' %}">aqui</a> e faça seu login. |
|||
{% endblock %} |
@ -0,0 +1,13 @@ |
|||
<p>Você está recebendo este e-mail pois solicitou recuperação de senha de sua conta no site <b>SAPL</b>.</p></br></p> |
|||
|
|||
<p>Por favor clique no link a seguir e redefina sua senha:</p></br> |
|||
|
|||
<p><a href="{{ protocol }}://{{ domain }}{% url 'sapl.base:recuperar_senha_confirma' uidb64=uid token=token %}"> |
|||
|
|||
Clique aqui</a></p></br> |
|||
|
|||
<p>Caso não tenha solicitado a alteração de sua senha, favor ignorar este e-mail.</p></br> |
|||
|
|||
<p>Atenciosamente,</p> |
|||
|
|||
<p>A equipe <b>SAPL</b></p> |
@ -0,0 +1 @@ |
|||
{% extends "crud/form.html" %} |
@ -1,39 +0,0 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n %} |
|||
{% load crispy_forms_tags %} |
|||
{% load common_tags %} |
|||
|
|||
{% block actions %}{% endblock %} |
|||
{% block detail_content %} |
|||
<div class="actions btn-group pull-right" role="group"> |
|||
{% if perms.norma.add_normajuridica %} |
|||
<a href="{% url 'sapl.norma:normajuridica_create' %}" class="btn btn-default">Adicionar Norma Jurídica</a> |
|||
{% endif %} |
|||
</div> |
|||
<br /><br /><br /> |
|||
{% if object_list %} |
|||
<table class="table table-striped"> |
|||
<thead class="thead-default"> |
|||
<tr> |
|||
<th>Tipo da Norma Juridica</th> |
|||
<th>Número</th> |
|||
<th>Ano</th> |
|||
<th>Data</th> |
|||
<th>Ementa</th> |
|||
</tr> |
|||
</thead> |
|||
{% for obj in object_list %} |
|||
<tr> |
|||
<td><a href="{% url 'sapl.norma:normajuridica_detail' obj.id %}">{{obj.tipo}}</a></td> |
|||
<td>{{obj.numero}}</td> |
|||
<td>{{obj.ano}}</td> |
|||
<td>{{obj.data}}</td> |
|||
<td>{{obj.ementa|safe}}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
{% else %} |
|||
<h2>Nenhum Registro recuperado</h2> |
|||
{% endif %} |
|||
|
|||
{% endblock detail_content %} |
@ -0,0 +1,34 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n common_tags%} |
|||
|
|||
{% block detail_content %} |
|||
{% for fieldset in view.layout_display %} |
|||
<h2 class="legend">{{ fieldset.legend }}</h2> |
|||
{% for row in fieldset.rows %} |
|||
<div class="row-fluid"> |
|||
{% for column in row %} |
|||
<div class="col-sm-{{ column.span }}"> |
|||
<div id="div_id_{{ column.id }}" class="form-group"> |
|||
<p class="control-label">{{ column.verbose_name }}</p> |
|||
<div class="controls"> |
|||
{% comment %}TODO Transformar os links em URLs diretamente no CRUD{% endcomment %} |
|||
|
|||
{% if column.text|url %} |
|||
<div class="form-control-static"><a href="{{ column.text|safe }}"> {{ column.text|safe }} </a></div> |
|||
{% elif column.verbose_name == 'Matéria' %} |
|||
{% if object.materia.id %} |
|||
<div class="form-control-static"><a href="{% url 'sapl.materia:materialegislativa_detail' object.materia.id %}"> {{ column.text|safe }} </a></div> |
|||
{% else %} |
|||
<div class="form-control-static">{{ column.text|safe }}</div> |
|||
{% endif %} |
|||
{% else %} |
|||
<div class="form-control-static">{{ column.text|safe }}</div> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endfor %} |
|||
</div> |
|||
{% endfor %} |
|||
{% endfor %} |
|||
{% endblock detail_content %} |
@ -0,0 +1,62 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n %} |
|||
{% load crispy_forms_tags %} |
|||
|
|||
{% block actions %} |
|||
<div class="actions btn-group pull-right" role="group"> |
|||
{% if perms.norma.add_normajuridica %} |
|||
<a href="{% url 'sapl.norma:normajuridica_create' %}" class="btn btn-default"> |
|||
{% blocktrans with verbose_name=view.verbose_name %} Adicionar Norma Jurídica {% endblocktrans %} |
|||
</a> |
|||
{% endif %} |
|||
{% if filter_url %} |
|||
<a href="{% url 'sapl.norma:norma_pesquisa' %}" class="btn btn-default">{% trans 'Fazer nova pesquisa' %}</a> |
|||
{% endif %} |
|||
</div> |
|||
<br /><br /> |
|||
{% endblock %} |
|||
|
|||
{% block detail_content %} |
|||
{% if not filter_url %} |
|||
{% crispy filter.form %} |
|||
{% endif %} |
|||
|
|||
{% if filter_url %} |
|||
{% if page_obj|length %} |
|||
<br /> |
|||
{% if page_obj|length > 1 %} |
|||
<h3 style="text-align:right;">Pesquisa concluída com sucesso! Foram encontradas {{paginator.count}} normas.</h3> |
|||
{% elif page_obj|length == 1 %} |
|||
<h3 style="text-align:right;">{% trans 'Pesquisa concluída com sucesso! Foi encontrada 1 norma.'%}</h3> |
|||
{% endif %} |
|||
<br /> |
|||
<table class="table table-striped"> |
|||
<thead class="thead-default"> |
|||
<tr> |
|||
<th>Tipo</th> |
|||
<th>Número</th> |
|||
<th>Ano</th> |
|||
<th>Data</th> |
|||
<th>Ementa</th> |
|||
</tr> |
|||
</thead> |
|||
{% for n in page_obj %} |
|||
<tr> |
|||
<td><a href="{% url 'sapl.norma:normajuridica_detail' n.id %}">{{n.tipo}}</a></td> |
|||
<td>{{n.numero}}</td> |
|||
<td>{{n.ano}}</td> |
|||
<td>{{n.data}}</td> |
|||
<td>{{n.ementa|safe}}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
{% include "paginacao.html" %} |
|||
{% else %} |
|||
<br /><br /> |
|||
<h2>Nenhuma norma encontrada com essas especificações</h2> |
|||
{% endif %} |
|||
{% endif %} |
|||
{% endblock detail_content %} |
|||
|
|||
{% block table_content %} |
|||
{% endblock table_content %} |
@ -0,0 +1,27 @@ |
|||
{% extends "crud/form.html" %} |
|||
{% load i18n %} |
|||
{% load crispy_forms_tags %} |
|||
{% load common_tags %} |
|||
|
|||
{% block extra_js %} |
|||
<script language="Javascript"> |
|||
function recuperar_norma() { |
|||
var tipo = $("#id_tipo").val() |
|||
var numero = $("#id_numero").val() |
|||
var ano = $("#id_ano").val() |
|||
|
|||
if (tipo && numero && ano) { |
|||
$.get("/norma/recuperar-norma",{tipo: tipo, |
|||
numero: numero, |
|||
ano: ano}, |
|||
function(data, status) { |
|||
$("#id_ementa").val(data.ementa); |
|||
}); |
|||
} |
|||
} |
|||
var fields = ["#id_tipo", "#id_numero", "#id_ano"] |
|||
for (i = 0; i < fields.length; i++) { |
|||
$(fields[i]).change(recuperar_norma); |
|||
} |
|||
</script> |
|||
{% endblock %} |
@ -1,20 +0,0 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n %} |
|||
{% load crispy_forms_tags %} |
|||
{% load common_tags %} |
|||
|
|||
|
|||
{% block base_content %} |
|||
{% block actions %} |
|||
<div class="actions btn-group pull-right" role="group"> |
|||
{% if perms.norma.add_normajuridica %} |
|||
<a href="{% url 'sapl.norma:normajuridica_create' %}" class="btn btn-default">{% trans 'Adicionar Norma Juridica' %}</a> |
|||
{% endif %} |
|||
</div> |
|||
<br /><br /> |
|||
{% endblock %} |
|||
|
|||
{% block detail_content %} |
|||
{% crispy form %} |
|||
{% endblock %} |
|||
{% endblock %} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue