Browse Source

Merge pull request #4 from interlegis/master

atual_12052017
pull/1374/head
Rogério Frá 8 years ago
committed by GitHub
parent
commit
2b49096e70
  1. 5
      .gitignore
  2. 4
      .travis.yml
  3. 102
      Dockerfile
  4. 6
      README.rst
  5. 0
      bug.txt
  6. 10
      busy-wait.sh
  7. 8
      config/env-sample
  8. 8
      config/env_dockerfile
  9. 31
      config/nginx/nginx.conf
  10. 39
      config/nginx/sapl.conf
  11. 33
      create_admin.py
  12. 19
      docker-compose.yml
  13. 6
      docker-env.sh
  14. 38
      docs/deploy.rst
  15. 55
      docs/importacao_25_31.rst
  16. 3
      docs/instacao31.rst
  17. 22
      docs/solr.rst
  18. 1
      envfile
  19. 7
      genkey.py
  20. 26
      gunicorn_start.sh
  21. 1
      requirements/dev-requirements.txt
  22. 6
      requirements/requirements.txt
  23. 2
      sapl/.env_test
  24. 23
      sapl/api/serializers.py
  25. 4
      sapl/api/urls.py
  26. 19
      sapl/api/views.py
  27. 108
      sapl/base/migrations/0001_initial.py
  28. 51
      sapl/base/migrations/0002_auto_20170331_1900.py
  29. 20
      sapl/base/migrations/0002_casalegislativa_codigo.py
  30. 21
      sapl/base/migrations/0003_auto_20160107_1122.py
  31. 26
      sapl/base/migrations/0004_auto_20160107_1158.py
  32. 39
      sapl/base/migrations/0005_auto_20160107_1244.py
  33. 20
      sapl/base/migrations/0006_auto_20160107_1257.py
  34. 27
      sapl/base/migrations/0007_auto_20160107_1837.py
  35. 56
      sapl/base/migrations/0008_auto_20160216_1015.py
  36. 25
      sapl/base/migrations/0009_auto_20160307_0905.py
  37. 25
      sapl/base/migrations/0010_auto_20160309_1323.py
  38. 32
      sapl/base/migrations/0011_problemamigracao.py
  39. 21
      sapl/base/migrations/0012_problemamigracao_eh_stub.py
  40. 19
      sapl/base/migrations/0013_remove_problemamigracao_endereco.py
  41. 27
      sapl/base/migrations/0014_auto_20160502_1635.py
  42. 20
      sapl/base/migrations/0015_problemamigracao_nome_campo.py
  43. 19
      sapl/base/migrations/0016_auto_20160701_0940.py
  44. 24
      sapl/base/migrations/0017_appconfig.py
  45. 34
      sapl/base/migrations/0018_auto_20160919_1333.py
  46. 19
      sapl/base/migrations/0019_auto_20160928_1951.py
  47. 30
      sapl/base/migrations/0020_auto_20161006_0950.py
  48. 20
      sapl/base/migrations/0021_auto_20161006_1019.py
  49. 55
      sapl/base/migrations/0022_auto_20161009_1222.py
  50. 25
      sapl/base/migrations/0023_auto_20161009_1852.py
  51. 26
      sapl/base/migrations/0024_auto_20161010_1002.py
  52. 20
      sapl/base/migrations/0025_tipoautor_cria_usuario.py
  53. 19
      sapl/base/migrations/0026_remove_tipoautor_cria_usuario.py
  54. 22
      sapl/base/migrations/0027_auto_20161011_1624.py
  55. 20
      sapl/base/migrations/0028_appconfig_proposicao_incorporacao_obrigatoria.py
  56. 20
      sapl/base/migrations/0029_auto_20161021_1445.py
  57. 20
      sapl/base/migrations/0030_auto_20161021_2017.py
  58. 19
      sapl/base/migrations/0031_auto_20170203_1019.py
  59. 30
      sapl/base/migrations/0032_auto_20170308_1006.py
  60. 43
      sapl/base/models.py
  61. 72
      sapl/base/search_indexes.py
  62. 16
      sapl/base/templatetags/common_tags.py
  63. 2
      sapl/base/urls.py
  64. 73
      sapl/comissoes/migrations/0001_initial.py
  65. 19
      sapl/comissoes/migrations/0002_auto_20150729_1310.py
  66. 79
      sapl/comissoes/migrations/0003_auto_20160216_1015.py
  67. 20
      sapl/comissoes/migrations/0004_auto_20160307_0905.py
  68. 21
      sapl/comissoes/migrations/0005_comissao_ativa.py
  69. 20
      sapl/comissoes/migrations/0006_auto_20160825_1335.py
  70. 20
      sapl/comissoes/migrations/0006_auto_20160916_1243.py
  71. 16
      sapl/comissoes/migrations/0007_merge.py
  72. 21
      sapl/comissoes/migrations/0008_auto_20160929_1611.py
  73. 20
      sapl/comissoes/migrations/0009_auto_20161011_0843.py
  74. 20
      sapl/comissoes/models.py
  75. 280
      sapl/compilacao/migrations/0001_initial.py
  76. 48
      sapl/compilacao/migrations/0002_auto_20150907_2334.py
  77. 19
      sapl/compilacao/migrations/0003_auto_20150911_1735.py
  78. 34
      sapl/compilacao/migrations/0004_auto_20150914_0842.py
  79. 77
      sapl/compilacao/migrations/0005_auto_20150924_1012.py
  80. 54
      sapl/compilacao/migrations/0006_auto_20150924_1121.py
  81. 19
      sapl/compilacao/migrations/0007_auto_20150924_1131.py
  82. 50
      sapl/compilacao/migrations/0008_auto_20151005_1023.py
  83. 23
      sapl/compilacao/migrations/0009_auto_20151007_1635.py
  84. 30
      sapl/compilacao/migrations/0010_auto_20151105_1532.py
  85. 27
      sapl/compilacao/migrations/0011_auto_20151105_1540.py
  86. 34
      sapl/compilacao/migrations/0012_auto_20151105_1658.py
  87. 24
      sapl/compilacao/migrations/0013_auto_20151106_1843.py
  88. 19
      sapl/compilacao/migrations/0014_auto_20151107_1836.py
  89. 24
      sapl/compilacao/migrations/0015_auto_20151115_2310.py
  90. 49
      sapl/compilacao/migrations/0016_auto_20151119_0950.py
  91. 28
      sapl/compilacao/migrations/0017_auto_20151119_1035.py
  92. 23
      sapl/compilacao/migrations/0018_auto_20151119_1052.py
  93. 20
      sapl/compilacao/migrations/0019_auto_20151119_1120.py
  94. 20
      sapl/compilacao/migrations/0020_auto_20151119_1126.py
  95. 23
      sapl/compilacao/migrations/0021_auto_20151119_1617.py
  96. 33
      sapl/compilacao/migrations/0022_auto_20151120_1503.py
  97. 29
      sapl/compilacao/migrations/0023_auto_20151120_1529.py
  98. 37
      sapl/compilacao/migrations/0024_auto_20151120_1814.py
  99. 24
      sapl/compilacao/migrations/0025_auto_20151122_1744.py
  100. 28
      sapl/compilacao/migrations/0026_auto_20151122_1756.py

5
.gitignore

@ -92,3 +92,8 @@ collected_static
bower bower
bower_components bower_components
media media
whoosh/
solr-4.10.2/
postgres-data/
data/
solr-*/

4
.travis.yml

@ -20,3 +20,7 @@ script:
- ./manage.py bower install - ./manage.py bower install
- py.test --create-db - py.test --create-db
# - ./test_and_check_qa.sh # - ./test_and_check_qa.sh
addons:
hosts:
- 127.0.0.1 sapldb

102
Dockerfile

@ -1,53 +1,49 @@
FROM ubuntu:15.04 FROM alpine:3.5
RUN locale-gen en_US.UTF-8 ENV BUILD_PACKAGES postgresql-dev graphviz-dev graphviz build-base git pkgconfig \
ENV LANG en_US.UTF-8 python3-dev libxml2-dev jpeg-dev libressl-dev libffi-dev libxslt-dev nodejs py3-lxml \
ENV LANGUAGE en_US:en py3-magic postgresql-client vim
ENV LC_ALL en_US.UTF-8
RUN apk add --no-cache python3 nginx && \
RUN mkdir /sapl python3 -m ensurepip && \
rm -r /usr/lib/python*/ensurepip && \
RUN echo "deb http://archive.ubuntu.com/ubuntu/ vivid universe" | tee -a "/etc/apt/sources.list" pip3 install --upgrade pip setuptools && \
rm -r /root/.cache && \
RUN \ rm -f /etc/nginx/conf.d/*
apt-get update && \
apt-get install -y -f \ RUN mkdir -p /var/interlegis/sapl && \
software-properties-common \ apk add --update --no-cache $BUILD_PACKAGES && \
libpq-dev \ npm install -g bower && \
graphviz-dev \ npm cache clean
graphviz \
build-essential \ WORKDIR /var/interlegis/sapl/
git \
pkg-config \ ADD . /var/interlegis/sapl/
python3-dev \
libxml2-dev \ COPY start.sh /var/interlegis/sapl/
libjpeg-dev \ COPY config/nginx/sapl.conf /etc/nginx/conf.d
libssl-dev \ COPY config/nginx/nginx.conf /etc/nginx/nginx.conf
libffi-dev \
libxslt1-dev \ RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgrade setuptools && \
python3-setuptools \ rm -r /root/.cache && \
curl rm -r /tmp/*
# use python3 in pip COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env
RUN easy_install3 pip lxml
# manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51
# install nodejs
RUN DEBIAN_FRONTEND=noninteractive curl -sL https://deb.nodesource.com/setup_5.x | bash - # compilescss - Precompile all occurrences of your SASS/SCSS files for the whole project into css files
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs
RUN python3 manage.py bower_install -- --allow-root --no-input && \
# install bower python3 manage.py compilescss && \
RUN npm install -g bower python3 manage.py collectstatic --no-input && \
rm -rf /var/interlegis/sapl/sapl/.env && \
# Bower aceitar root rm -rf /var/interlegis/sapl/sapl.db
RUN touch /root/.bowerrc
RUN chmod 751 /root/.bowerrc RUN chmod +x /var/interlegis/sapl/start.sh && \
RUN echo "{ \"allow_root\": true }" >> /root/.bowerrc ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
WORKDIR /sapl
VOLUME ["/var/interlegis/sapl/data", "/var/interlegis/sapl/media"]
ADD . /sapl
CMD ["/var/interlegis/sapl/start.sh"]
RUN pip install -r requirements/dev-requirements.txt
RUN pip install --upgrade setuptools
# RUN python3 manage.py bower install

6
README.rst

@ -30,6 +30,11 @@ Instruções para Deploy
`Deploy SAPL com Nginx + Gunicorn <https://github.com/interlegis/sapl/blob/master/docs/deploy.rst>`_ `Deploy SAPL com Nginx + Gunicorn <https://github.com/interlegis/sapl/blob/master/docs/deploy.rst>`_
Instalação do Solr
======================
`Instalação e configuração do Solr <https://github.com/interlegis/sapl/blob/master/docs/solr.rst>`_
Instruções para Tradução Instruções para Tradução
======================== ========================
@ -55,7 +60,6 @@ Logo dos Partidos
`Logo dos Partidos <https://github.com/interlegis/sapl/blob/master/docs/logo_partidos.rst>`_ `Logo dos Partidos <https://github.com/interlegis/sapl/blob/master/docs/logo_partidos.rst>`_
Perguntas Frequentes Perguntas Frequentes
=================================== ===================================
`Perguntas Frequentes <https://github.com/interlegis/sapl/wiki/Perguntas-Frequentes>`_ `Perguntas Frequentes <https://github.com/interlegis/sapl/wiki/Perguntas-Frequentes>`_

0
sapl/api/migrations/__init__.py → bug.txt

10
busy-wait.sh

@ -0,0 +1,10 @@
#!/bin/sh
while true; do
COUNT_PG=`psql $1 -c '\l \q' | grep sapl | wc -l`
if ! [ "$COUNT_PG" -eq "0" ]; then
break
fi
echo "Esperando Database Setup"
sleep 10
done

8
config/env-sample

@ -0,0 +1,8 @@
DATABASE_URL = postgresql://postgres:@sapldb:/sapl
KEY
DEBUG = False
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST = ''
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''

8
config/env_dockerfile

@ -0,0 +1,8 @@
DATABASE_URL = sqlite:///sapl.db
SECRET_KEY = 'Dockerfile_Key'
DEBUG = False
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST = ''
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''

31
config/nginx/nginx.conf

@ -0,0 +1,31 @@
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile off;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}

39
config/nginx/sapl.conf

@ -0,0 +1,39 @@
upstream sapl_server {
server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name sapl.test;
client_max_body_size 4G;
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://sapl_server;
break;
}
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/interlegis/sapl/sapl/static/;
}
}

33
create_admin.py

@ -0,0 +1,33 @@
import sys
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sapl.settings")
django.setup()
from django.contrib.auth.models import User
def create_superuser():
username = "admin"
password = os.environ['ADMIN_PASSWORD'] if 'ADMIN_PASSWORD' in os.environ else None
email = os.environ['ADMIN_EMAIL'] if 'ADMIN_EMAIL' in os.environ else ''
if User.objects.filter(username=username).exists():
print("[SUPERUSER] User %s already exists. Exiting without change." % username)
sys.exit('ADMIN_USER_EXISTS')
else:
if not password:
print("[SUPERUSER] Environment variable $ADMIN_PASSWORD for user %s was not set. Leaving..." % username)
sys.exit('MISSING_ADMIN_PASSWORD')
print("[SUPERUSER] Creating superuser...")
u = User.objects.create_superuser(username=username, password=password, email=email)
u.save()
print("[SUPERUSER] Done.")
sys.exit(0)
if __name__ == '__main__':
create_superuser()

19
docker-compose.yml

@ -1,17 +1,20 @@
localhost: sapldb:
image: postgres image: postgres
environment: environment:
POSTGRES_PASSWORD: sapl POSTGRES_PASSWORD: sapl
POSTGRES_USER: sapl POSTGRES_USER: sapl
POSTGRES_DB: sapl POSTGRES_DB: sapl
PGDATA : /var/lib/postgresql/data/
volumes:
- sapldb_data:/var/lib/postgresql/data/
ports: ports:
- "5532:5432" - "5532:5432"
web: sapl:
build: . image: interlegis/sapl:3.1.2-BETA
command: bash -c "python3 manage.py bower install && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"
volumes: volumes:
- .:/sapl - sapl_data:/var/interlegis/sapl/data
ports: - sapl_media:/var/interlegis/sapl/media
- "8000:8000"
links: links:
- localhost - sapldb
ports:
- "80:80"

6
docker-env.sh

@ -0,0 +1,6 @@
#/bin/bash
KEY=`python gen-key.py`
echo $KEY
sed -e "s/SECRET_KEY = None/SECRET_KEY = $KEY/g" config/env-sample

38
docs/deploy.rst

@ -18,24 +18,36 @@ alterando o variável DEBUG para false::
DEBUG = False DEBUG = False
Arquivos Estáticos
------------------
Com o ambiente em produção, os arquivos estáticos devem ser servidos pelo web service, em nosso caso o `NGINX`, logo para ter acesso aos arquivos primeiro devemos rodar o seguinte comando::
python3 manage.py compilescss
para que os arquivos SASS/SCSS sejam compilados em arquivos .css em ambiente de produção, e em seguida rode::
pyhton3 manage.py collectstatic --no-input
para coletar todos os arquivos estáticos do projeto e guarda-los no diretório definido em `STATIC_ROOT`, que será também o diretório no qual o `NGINX` irá referenciar para a aplicação.
Instalando Pacotes Instalando Pacotes
------------------ ------------------
Instalar o NGINX:: Instalar o NGINX::
sudo apt-get install nginx sudo apt-get install nginx
Instalar o Gunicorn:: Instalar o Gunicorn::
sudo pip install gunicorn sudo pip install gunicorn
Preparando o NGINX Preparando o NGINX
------------------ ------------------
sudo nano /etc/nginx/sites-available/sapl31.conf:: sudo nano /etc/nginx/sites-available/sapl31.conf::
upstream ENDERECO_SITE { upstream ENDERECO_SITE {
server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0; server unix:/var/interlegis/sapl/run/gunicorn.sock fail_timeout=0;
} }
@ -95,11 +107,11 @@ Para uma máquina de CPU única o valor seria 3
Para rodar o gunicorn:: Para rodar o gunicorn::
workon sapl workon sapl
/var/interlegis/sapl/.gunicorn_start.sh /var/interlegis/sapl/.gunicorn_start.sh
#Referências. #Referências.
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
@ -107,4 +119,12 @@ http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supe
Para multiplas aplicações Django. Para multiplas aplicações Django.
http://michal.karzynski.pl/blog/2013/10/29/serving-multiple-django-applications-with-nginx-gunicorn-supervisor/ http://michal.karzynski.pl/blog/2013/10/29/serving-multiple-django-applications-with-nginx-gunicorn-supervisor/
Compilar arquivos SASS/SCSS
https://github.com/jrief/django-sass-processor#offline-compilation
https://github.com/jrief/django-sass-processor/issues/34#issuecomment-252611103
Deploy Arquivos Estáticos
https://docs.djangoproject.com/pt-br/1.11/howto/static-files/deployment/

55
docs/importacao_25_31.rst

@ -25,7 +25,58 @@ o conteúdo do arquivo será semelhante a isso::
Posteriormente rodar a seguinte sequencia de comandos estando no ambiente virtual:: Posteriormente rodar a seguinte sequencia de comandos estando no ambiente virtual::
./manage.py shell --settings=sapl.legacy_migration_settings ./manage.py shell --settings=sapl.legacy_migration_settings
%run sapl/legacy/migration.py %run sapl/legacy/migration.py
migrate() migrate()
Migração de documentos do sapl 2.5
----------------------------------
No sapl 2.5 todos os documentos ficavam armazenados no ZODB (o banco do Zope).
No sapl 3.1 eles ficam no sistema de arquivos convencional e portanto precisam:
1. ser exportados para o sistema de arquivos
2. ser vinculados ao novo banco importado para o sapl 3.1
Exportar os documentos para o sistema de arquivos
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Siga os seguintes passos:
1. Instale o `Products.FSDump` no sapl 2.5.
Para isso basta colocar a pasta `Products/FSDump` do projeto https://github.com/zopefoundation/Products.FSDump na pasta `Products` da instalação do sapl 2.5 e reiniciar o Zope.
A pasta a ser instalada é a seguinte:
https://github.com/zopefoundation/Products.FSDump/tree/master/Products/FSDump
2. Na ZMI, na pasta `sapl_documentos`, adicione um objeto do tipo `Dumper`:
- Em `Filesystem path` escolha uma pasta do sistema de arquivos local para onde os arquivos serão copiados
- Desmarque a opção `Use .metadata file`
- Clique no botão `Add`
3. Use o objeto `Dumper` criado para exportar os arquivos:
- Clique no objeto `Dumper` criado para ver suas opções
- Confira seus parametros e clique em `Change and Dump`
- Aguarde a exportação dos arquivos e verifique que foram copiados para a pasta indicada
Vincular os documentos ao novo banco do sapl 3.1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Primeiramente migre o banco do sapl 2.5 para o sapl 3.1
2. Copie a pasta exportada `sapl_documentos` dentro da pasta `media` da instalação do sapl 3.1
3. De forma semelhante ao realizado na migração do banco, dentro no mesmo ambiente virtual, rode os seguintes comandos::
./manage.py shell --settings=sapl.legacy_migration_settings
%run sapl/legacy/migracao_documentos.py
migrar_documentos()

3
docs/instacao31.rst

@ -187,6 +187,9 @@ Copie a chave que aparecerá, edite o arquivo .env e altere o valor do parâmetr
./manage.py collectstatic --noinput ./manage.py collectstatic --noinput
* Preparar o ambiente para indexação de arquivos::
./manage.py rebuild_index
* Subir o servidor do django:: * Subir o servidor do django::
./manage.py runserver 0.0.0.0:8001 ./manage.py runserver 0.0.0.0:8001

22
docs/solr.rst

@ -0,0 +1,22 @@
================================
Instruções para instalar o Solr
================================
Solr é a ferramenta utilizada pelo SAPL 3.1 para indexar documentos para que possa ser feita
a Pesquisa Textual.
Dentro do diretório principal siga os seguintes passos::
curl -LO https://archive.apache.org/dist/lucene/solr/4.10.2/solr-4.10.2.tgz
tar xvzf solr-4.10.2.tgz
cd solr-4.10.2
cd example
java -jar start.jar
./manage.py build_solr_schema --filename solr-4.10.2/example/solr/collection1/conf/schema.xml
Após isso, deve-se parar o servidor do Solr e restartar com ``java -jar start.jar``
**OBS: Toda vez que o código da pesquisa textual for modificado, os comandos de build_solr_schema e start.jar devem ser rodados, nessa mesma ordem.**

1
envfile

@ -0,0 +1 @@
EMAIL_HOST_USER=foo

7
genkey.py

@ -0,0 +1,7 @@
import random
def generate_secret():
return ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)])
if __name__ == '__main__':
print(generate_secret())

26
gunicorn_start.sh

@ -2,8 +2,17 @@
# As seen in http://tutos.readthedocs.org/en/latest/source/ndg.html # As seen in http://tutos.readthedocs.org/en/latest/source/ndg.html
SAPL_DIR="/var/interlegis/sapl"
# Seta um novo diretório foi passado como raiz para o SAPL
# caso esse tenha sido passado como parâmetro
if [ "$1" ]
then
SAPL_DIR="$1"
fi
NAME="SAPL" # Name of the application (*) NAME="SAPL" # Name of the application (*)
DJANGODIR=/var/interlegis/sapl # Django project directory (*) DJANGODIR=/var/interlegis/sapl/ # Django project directory (*)
SOCKFILE=/var/interlegis/sapl/run/gunicorn.sock # we will communicate using this unix socket (*) SOCKFILE=/var/interlegis/sapl/run/gunicorn.sock # we will communicate using this unix socket (*)
USER=`whoami` # the user to run as (*) USER=`whoami` # the user to run as (*)
GROUP=`whoami` # the group to run as (*) GROUP=`whoami` # the group to run as (*)
@ -12,13 +21,16 @@ NUM_WORKERS=9 # how many worker processes shou
DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*) DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*)
DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*) DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*)
echo "Starting $NAME as `whoami`" echo "Starting $NAME as `whoami` on base dir $SAPL_DIR"
# Activate the virtual environment # parameter can be passed to run without virtualenv
cd $DJANGODIR if [[ "$@" != "no-venv" ]]; then
source /var/interlegis/.virtualenvs/sapl/bin/activate # Activate the virtual environment
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE cd $DJANGODIR
export PYTHONPATH=$DJANGODIR:$PYTHONPATH source /var/interlegis/.virtualenvs/sapl/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
fi
# Create the run directory if it doesn't exist # Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE) RUNDIR=$(dirname $SOCKFILE)

1
requirements/dev-requirements.txt

@ -6,3 +6,4 @@ ipdb==0.10.1
pip-review==0.4 pip-review==0.4
pygraphviz==1.3.1 pygraphviz==1.3.1
pytest-ipdb==0.1-prerelease2 pytest-ipdb==0.1-prerelease2
pipdeptree

6
requirements/requirements.txt

@ -1,4 +1,5 @@
dj-database-url==0.4.1 dj-database-url==0.4.1
django-haystack==2.6.0
django>=1.9,<1.10 django>=1.9,<1.10
# TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite # TODO O django-admin-bootstrapped 2.5.7 não inseriu a mudança que permite
# a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma # a compatibilidade com Django 1.9+. A linha abaixo será mudada quando uma
@ -14,7 +15,7 @@ django-extra-views==0.8.0
django-filter==0.15.3 django-filter==0.15.3
django-floppyforms==1.6.2 django-floppyforms==1.6.2
django-model-utils==2.5 django-model-utils==2.5
django-sass-processor==0.4.6 django-sass-processor==0.5.4
djangorestframework djangorestframework
drfdocs drfdocs
easy-thumbnails==2.3 easy-thumbnails==2.3
@ -25,7 +26,10 @@ python-decouple==3.0
pytz==2016.4 pytz==2016.4
pyyaml==3.11 pyyaml==3.11
rtyaml==0.0.3 rtyaml==0.0.3
textract==1.5.0
unipath==1.1 unipath==1.1
pysolr==3.6.0
python-magic==0.4.12 python-magic==0.4.12
gunicorn==19.6.0 gunicorn==19.6.0
django-reversion==2.0.8 django-reversion==2.0.8
whoosh==2.7.4

2
sapl/.env_test

@ -1,4 +1,4 @@
DATABASE_URL = postgresql://postgres:@localhost:/sapl DATABASE_URL = postgresql://postgres:@sapldb:/sapl
SECRET_KEY=TravisTest SECRET_KEY=TravisTest
DEBUG=False DEBUG=False
EMAIL_USE_TLS = True EMAIL_USE_TLS = True

23
sapl/api/serializers.py

@ -2,6 +2,7 @@ from rest_framework import serializers
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.sessao.models import SessaoPlenaria
class ChoiceSerializer(serializers.Serializer): class ChoiceSerializer(serializers.Serializer):
@ -52,3 +53,25 @@ class MateriaLegislativaSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = MateriaLegislativa model = MateriaLegislativa
fields = '__all__' fields = '__all__'
class SessaoPlenariaSerializer(serializers.ModelSerializer):
tipo = serializers.StringRelatedField(many=False)
sessao_legislativa = serializers.StringRelatedField(many=False)
legislatura = serializers.StringRelatedField(many=False)
class Meta:
model = SessaoPlenaria
fields = ('pk',
'tipo',
'sessao_legislativa',
'legislatura',
'data_inicio',
'hora_inicio',
'hora_fim',
'url_video',
'iniciada',
'finalizada',
'interativa'
)

4
sapl/api/urls.py

@ -3,7 +3,7 @@ from django.conf.urls import include, url
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from sapl.api.views import (AutorListView, MateriaLegislativaViewSet, from sapl.api.views import (AutorListView, MateriaLegislativaViewSet,
ModelChoiceView) ModelChoiceView, SessaoPlenariaViewSet)
from .apps import AppConfig from .apps import AppConfig
@ -12,9 +12,9 @@ app_name = AppConfig.name
router = DefaultRouter() router = DefaultRouter()
router.register(r'materia', MateriaLegislativaViewSet) router.register(r'materia', MateriaLegislativaViewSet)
router.register(r'sessao-plenaria', SessaoPlenariaViewSet)
urlpatterns_router = router.urls urlpatterns_router = router.urls
urlpatterns_api = [ urlpatterns_api = [
url(r'^autor', AutorListView.as_view(), name='autor_list'), url(r'^autor', AutorListView.as_view(), name='autor_list'),

19
sapl/api/views.py

@ -6,16 +6,19 @@ from rest_framework.filters import DjangoFilterBackend
from rest_framework.generics import ListAPIView from rest_framework.generics import ListAPIView
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
from rest_framework.permissions import (IsAuthenticated, from rest_framework.permissions import (IsAuthenticated,
IsAuthenticatedOrReadOnly) IsAuthenticatedOrReadOnly,
from rest_framework.viewsets import GenericViewSet AllowAny)
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from sapl.api.forms import AutorChoiceFilterSet from sapl.api.forms import AutorChoiceFilterSet
from sapl.api.serializers import (AutorChoiceSerializer, AutorSerializer, from sapl.api.serializers import (AutorChoiceSerializer, AutorSerializer,
ChoiceSerializer, ChoiceSerializer,
MateriaLegislativaSerializer, MateriaLegislativaSerializer,
ModelChoiceSerializer) ModelChoiceSerializer,
SessaoPlenariaSerializer)
from sapl.base.models import Autor, TipoAutor from sapl.base.models import Autor, TipoAutor
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
from sapl.sessao.models import SessaoPlenaria
from sapl.utils import SaplGenericRelation, sapl_logger from sapl.utils import SaplGenericRelation, sapl_logger
@ -203,3 +206,13 @@ class MateriaLegislativaViewSet(ListModelMixin,
queryset = MateriaLegislativa.objects.all() queryset = MateriaLegislativa.objects.all()
filter_backends = (DjangoFilterBackend,) filter_backends = (DjangoFilterBackend,)
filter_fields = ('numero', 'ano', 'tipo', ) filter_fields = ('numero', 'ano', 'tipo', )
class SessaoPlenariaViewSet(ListModelMixin,
RetrieveModelMixin,
GenericViewSet):
permission_classes = (AllowAny,)
serializer_class = SessaoPlenariaSerializer
queryset = SessaoPlenaria.objects.all()
filter_backends = (DjangoFilterBackend,)
filter_fields = ('data_inicio', 'data_fim', 'interativa')

108
sapl/base/migrations/0001_initial.py

@ -1,38 +1,122 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-03-25 11:14
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
import sapl.base.models
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('contenttypes', '0002_remove_content_type_name'),
] ]
operations = [ operations = [
migrations.CreateModel(
name='AppConfig',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('documentos_administrativos', models.CharField(choices=[('O', 'Ostensivo'), ('R', 'Restritivo')], default='O', max_length=1, verbose_name='Ostensivo/Restritivo')),
('sequencia_numeracao', models.CharField(choices=[('A', 'Sequencial por ano'), ('U', 'Sequencial único')], default='A', max_length=1, verbose_name='Sequência de numeração')),
('painel_aberto', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Painel aberto para usuário anônimo')),
('texto_articulado_proposicao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Proposições')),
('texto_articulado_materia', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Matérias')),
('texto_articulado_norma', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Usar Textos Articulados para Normas')),
('proposicao_incorporacao_obrigatoria', models.CharField(choices=[('O', 'Sempre Gerar Protocolo'), ('C', 'Perguntar se é pra gerar protocolo ao incorporar'), ('N', 'Nunca Protocolar ao incorporar uma proposição')], default='O', max_length=1, verbose_name='Regra de incorporação de proposições e protocolo')),
('cronometro_discurso', models.TimeField(blank=True, null=True, verbose_name='Cronômetro do Discurso')),
('cronometro_aparte', models.TimeField(blank=True, null=True, verbose_name='Cronômetro do Aparte')),
('cronometro_ordem', models.TimeField(blank=True, null=True, verbose_name='Cronômetro da Ordem')),
],
options={
'permissions': (('menu_sistemas', 'Renderizar Menu Sistemas'), ('view_tabelas_auxiliares', 'Visualizar Tabelas Auxiliares')),
'verbose_name': 'Configurações da Aplicação',
'verbose_name_plural': 'Configurações da Aplicação',
},
),
migrations.CreateModel(
name='Autor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.PositiveIntegerField(blank=True, default=None, null=True)),
('nome', models.CharField(blank=True, max_length=50, verbose_name='Nome do Autor')),
('cargo', models.CharField(blank=True, max_length=50)),
('content_type', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
],
options={
'verbose_name': 'Autor',
'verbose_name_plural': 'Autores',
},
),
migrations.CreateModel( migrations.CreateModel(
name='CasaLegislativa', name='CasaLegislativa',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('codigo', models.CharField(max_length=100, verbose_name='Codigo')),
('nome', models.CharField(max_length=100, verbose_name='Nome')), ('nome', models.CharField(max_length=100, verbose_name='Nome')),
('sigla', models.CharField(max_length=100, verbose_name='Sigla')), ('sigla', models.CharField(max_length=100, verbose_name='Sigla')),
('endereco', models.CharField(max_length=100, verbose_name='Endereço')), ('endereco', models.CharField(max_length=100, verbose_name='Endereço')),
('cep', models.CharField(max_length=100, verbose_name='CEP')), ('cep', models.CharField(max_length=100, verbose_name='CEP')),
('municipio', models.CharField(max_length=100, verbose_name='Município')), ('municipio', models.CharField(max_length=100, verbose_name='Município')),
('uf', models.CharField(max_length=100, verbose_name='UF')), ('uf', models.CharField(choices=[('AC', 'Acre'), ('AL', 'Alagoas'), ('AP', 'Amapá'), ('AM', 'Amazonas'), ('BA', 'Bahia'), ('CE', 'Ceará'), ('DF', 'Distrito Federal'), ('ES', 'Espírito Santo'), ('GO', 'Goiás'), ('MA', 'Maranhão'), ('MT', 'Mato Grosso'), ('MS', 'Mato Grosso do Sul'), ('MG', 'Minas Gerais'), ('PR', 'Paraná'), ('PB', 'Paraíba'), ('PA', 'Pará'), ('PE', 'Pernambuco'), ('PI', 'Piauí'), ('RJ', 'Rio de Janeiro'), ('RN', 'Rio Grande do Norte'), ('RS', 'Rio Grande do Sul'), ('RO', 'Rondônia'), ('RR', 'Roraima'), ('SC', 'Santa Catarina'), ('SE', 'Sergipe'), ('SP', 'São Paulo'), ('TO', 'Tocantins'), ('EX', 'Exterior')], max_length=100, verbose_name='UF')),
('telefone', models.CharField(max_length=100, verbose_name='Telefone')), ('telefone', models.CharField(blank=True, max_length=100, verbose_name='Telefone')),
('fax', models.CharField(max_length=100, verbose_name='Fax')), ('fax', models.CharField(blank=True, max_length=100, verbose_name='Fax')),
('cor_fundo', models.CharField(max_length=100, verbose_name='Cor de fundo')), ('logotipo', models.ImageField(blank=True, upload_to='sapl/casa/logotipo/', verbose_name='Logotipo')),
('cor_borda', models.CharField(max_length=100, verbose_name='Cor da borda')), ('endereco_web', models.URLField(blank=True, max_length=100, verbose_name='HomePage')),
('cor_principal', models.CharField(max_length=100, verbose_name='Cor principal')), ('email', models.EmailField(blank=True, max_length=100, verbose_name='E-mail')),
('logotipo', models.CharField(max_length=100, verbose_name='Logotipo')), ('informacao_geral', models.TextField(blank=True, max_length=100, verbose_name='Informação Geral')),
('endereco_web', models.CharField(max_length=100, verbose_name='HomePage')),
('email', models.CharField(max_length=100, verbose_name='E-mail')),
('informacao_geral', models.CharField(max_length=100, verbose_name='Informação Geral')),
], ],
options={ options={
'verbose_name_plural': 'Casas Legislativas',
'verbose_name': 'Casa Legislativa', 'verbose_name': 'Casa Legislativa',
'verbose_name_plural': 'Casa Legislativa',
},
),
migrations.CreateModel(
name='ProblemaMigracao',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.PositiveIntegerField(verbose_name='ID do Objeto')),
('nome_campo', models.CharField(blank=True, max_length=100, verbose_name='Nome do(s) Campo(s)')),
('problema', models.CharField(max_length=300, verbose_name='Problema')),
('descricao', models.CharField(max_length=300, verbose_name='Descrição')),
('eh_stub', models.BooleanField(verbose_name='É stub?')),
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Tipo de Content')),
],
options={
'verbose_name': 'Problema na Migração',
'verbose_name_plural': 'Problemas na Migração',
},
),
migrations.CreateModel(
name='TipoAutor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('descricao', models.CharField(max_length=50, verbose_name='Descrição')),
('content_type', models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Modelagem no SAPL')),
],
options={
'ordering': ['descricao'],
'verbose_name': 'Tipo de Autor',
'verbose_name_plural': 'Tipos de Autor',
}, },
), ),
migrations.AddField(
model_name='autor',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.TipoAutor', verbose_name='Tipo do Autor'),
),
migrations.AddField(
model_name='autor',
name='user',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
),
migrations.AlterUniqueTogether(
name='autor',
unique_together=set([('content_type', 'object_id')]),
),
] ]

51
sapl/base/migrations/0002_auto_20170331_1900.py

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-03-31 19:00
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('base', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Argumento',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('argumento', models.CharField(max_length=50, verbose_name='Argumento')),
],
options={
'verbose_name': 'Argumento da constraint',
'verbose_name_plural': 'Argumentos da constraint',
},
),
migrations.CreateModel(
name='Constraint',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome_tabela', models.CharField(max_length=50, verbose_name='Nome da tabela')),
('nome_constraint', models.CharField(max_length=100, verbose_name='Nome da constraint')),
('nome_model', models.CharField(max_length=50, verbose_name='Nome da model')),
('tipo_constraint', models.CharField(max_length=50, verbose_name='Tipo da constraint')),
],
options={
'verbose_name': 'Constraint removida',
'verbose_name_plural': 'Constraints removidas',
},
),
migrations.AddField(
model_name='problemamigracao',
name='eh_importante',
field=models.BooleanField(default=False, verbose_name='É importante?'),
),
migrations.AddField(
model_name='argumento',
name='constraint',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.Constraint'),
),
]

20
sapl/base/migrations/0002_casalegislativa_codigo.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='casalegislativa',
name='codigo',
field=models.CharField(verbose_name='Codigo', default=1, max_length=100),
preserve_default=False,
),
]

21
sapl/base/migrations/0003_auto_20160107_1122.py

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import sapl.base.models
class Migration(migrations.Migration):
dependencies = [
('base', '0002_casalegislativa_codigo'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='logotipo',
field=models.FileField(
null=True, upload_to=sapl.base.models.get_casa_media_path, verbose_name='Logotipo', blank=True),
),
]

26
sapl/base/migrations/0004_auto_20160107_1158.py

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0003_auto_20160107_1122'),
]
operations = [
migrations.RemoveField(
model_name='casalegislativa',
name='cor_borda',
),
migrations.RemoveField(
model_name='casalegislativa',
name='cor_fundo',
),
migrations.RemoveField(
model_name='casalegislativa',
name='cor_principal',
),
]

39
sapl/base/migrations/0005_auto_20160107_1244.py

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0004_auto_20160107_1158'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='email',
field=models.CharField(max_length=100, null=True, verbose_name='E-mail', blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='endereco_web',
field=models.CharField(max_length=100, null=True, verbose_name='HomePage', blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='fax',
field=models.CharField(max_length=100, null=True, verbose_name='Fax', blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='informacao_geral',
field=models.CharField(max_length=100, null=True, verbose_name='Informação Geral', blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='telefone',
field=models.CharField(max_length=100, null=True, verbose_name='Telefone', blank=True),
),
]

20
sapl/base/migrations/0006_auto_20160107_1257.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0005_auto_20160107_1244'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='informacao_geral',
field=models.CharField(verbose_name='Informação Geral', max_length=100, default=1),
preserve_default=False,
),
]

27
sapl/base/migrations/0007_auto_20160107_1837.py

@ -1,27 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import sapl.base.models
class Migration(migrations.Migration):
dependencies = [
('base', '0006_auto_20160107_1257'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='informacao_geral',
field=models.CharField(
blank=True, max_length=100, verbose_name='Informação Geral', null=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='logotipo',
field=models.ImageField(
blank=True, upload_to=sapl.base.models.get_casa_media_path, verbose_name='Logotipo', null=True),
),
]

56
sapl/base/migrations/0008_auto_20160216_1015.py

@ -1,56 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import models, migrations
from django.utils.timezone import utc
import sapl.base.models
class Migration(migrations.Migration):
dependencies = [
('base', '0007_auto_20160107_1837'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='email',
field=models.CharField(verbose_name='E-mail', max_length=100, default=datetime.datetime(
2016, 2, 16, 12, 15, 30, 241941, tzinfo=utc), blank=True),
preserve_default=False,
),
migrations.AlterField(
model_name='casalegislativa',
name='endereco_web',
field=models.CharField(
verbose_name='HomePage', max_length=100, blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='fax',
field=models.CharField(
verbose_name='Fax', max_length=100, blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='informacao_geral',
field=models.CharField(
verbose_name='Informação Geral', max_length=100, blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='logotipo',
field=models.ImageField(
verbose_name='Logotipo', upload_to=sapl.base.models.get_casa_media_path, blank=True),
),
migrations.AlterField(
model_name='casalegislativa',
name='telefone',
field=models.CharField(
verbose_name='Telefone', max_length=100, blank=True),
),
]

25
sapl/base/migrations/0009_auto_20160307_0905.py

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-03-07 12:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0008_auto_20160216_1015'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='email',
field=models.EmailField(blank=True, max_length=100, verbose_name='E-mail'),
),
migrations.AlterField(
model_name='casalegislativa',
name='endereco_web',
field=models.URLField(blank=True, max_length=100, verbose_name='HomePage'),
),
]

25
sapl/base/migrations/0010_auto_20160309_1323.py

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-03-09 16:23
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0009_auto_20160307_0905'),
]
operations = [
migrations.AlterField(
model_name='casalegislativa',
name='informacao_geral',
field=models.TextField(blank=True, max_length=100, verbose_name='Informação Geral'),
),
migrations.AlterField(
model_name='casalegislativa',
name='uf',
field=models.CharField(choices=[('AC', 'Acre'), ('AL', 'Alagoas'), ('AP', 'Amapá'), ('AM', 'Amazonas'), ('BA', 'Bahia'), ('CE', 'Ceará'), ('DF', 'Distrito Federal'), ('ES', 'Espírito Santo'), ('GO', 'Goiás'), ('MA', 'Maranhão'), ('MT', 'Mato Grosso'), ('MS', 'Mato Grosso do Sul'), ('MG', 'Minas Gerais'), ('PR', 'Paraná'), ('PB', 'Paraíba'), ('PA', 'Pará'), ('PE', 'Pernambuco'), ('PI', 'Piauí'), ('RJ', 'Rio de Janeiro'), ('RN', 'Rio Grande do Norte'), ('RS', 'Rio Grande do Sul'), ('RO', 'Rondônia'), ('RR', 'Roraima'), ('SC', 'Santa Catarina'), ('SE', 'Sergipe'), ('SP', 'São Paulo'), ('TO', 'Tocantins'), ('EX', 'Exterior')], max_length=100, verbose_name='UF'),
),
]

32
sapl/base/migrations/0011_problemamigracao.py

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-04-19 16:02
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('base', '0010_auto_20160309_1323'),
]
operations = [
migrations.CreateModel(
name='ProblemaMigracao',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.PositiveIntegerField(verbose_name='ID do Objeto')),
('problema', models.CharField(max_length=300, null=True, verbose_name='Problema')),
('descricao', models.CharField(max_length=300, null=True, verbose_name='Descrição')),
('endereco', models.URLField(null=True, verbose_name='Endereço')),
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Tipo de Content')),
],
options={
'verbose_name_plural': 'Problemas na Migração',
'verbose_name': 'Problema na Migração',
},
),
]

21
sapl/base/migrations/0012_problemamigracao_eh_stub.py

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-04-26 17:41
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0011_problemamigracao'),
]
operations = [
migrations.AddField(
model_name='problemamigracao',
name='eh_stub',
field=models.BooleanField(default=False, verbose_name='É stub?'),
preserve_default=False,
),
]

19
sapl/base/migrations/0013_remove_problemamigracao_endereco.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-02 17:36
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0012_problemamigracao_eh_stub'),
]
operations = [
migrations.RemoveField(
model_name='problemamigracao',
name='endereco',
),
]

27
sapl/base/migrations/0014_auto_20160502_1635.py

@ -1,27 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-02 19:35
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0013_remove_problemamigracao_endereco'),
]
operations = [
migrations.AlterField(
model_name='problemamigracao',
name='descricao',
field=models.CharField(default='', max_length=300, verbose_name='Descrição'),
preserve_default=False,
),
migrations.AlterField(
model_name='problemamigracao',
name='problema',
field=models.CharField(default='', max_length=300, verbose_name='Problema'),
preserve_default=False,
),
]

20
sapl/base/migrations/0015_problemamigracao_nome_campo.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-05-10 20:34
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0014_auto_20160502_1635'),
]
operations = [
migrations.AddField(
model_name='problemamigracao',
name='nome_campo',
field=models.CharField(blank=True, max_length=100, verbose_name='Nome do(s) Campo(s)'),
),
]

19
sapl/base/migrations/0016_auto_20160701_0940.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-07-01 12:40
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0015_problemamigracao_nome_campo'),
]
operations = [
migrations.AlterModelOptions(
name='casalegislativa',
options={'verbose_name': 'Casa Legislativa', 'verbose_name_plural': 'Casa Legislativa'},
),
]

24
sapl/base/migrations/0017_appconfig.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-15 18:19
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0016_auto_20160701_0940'),
]
operations = [
migrations.CreateModel(
name='AppConfig',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('documentos_administrativos', models.CharField(blank=True, choices=[('O', 'Ostensivo'), ('R', 'Restritivo')], max_length=1, null=True, verbose_name='Ostensivo/Restritivo')),
('sequencia_numeracao', models.CharField(blank=True, choices=[('A', 'Sequencial por ano'), ('U', 'Sequencial único')], max_length=1, null=True, verbose_name='Sequência de numeração')),
('painel_aberto', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Painel aberto para usuário anônimo')),
],
),
]

34
sapl/base/migrations/0018_auto_20160919_1333.py

@ -1,34 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-19 16:33
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0017_appconfig'),
]
operations = [
migrations.AlterModelOptions(
name='appconfig',
options={'verbose_name': 'Configurações da Aplicação', 'verbose_name_plural': 'Configurações da Aplicação'},
),
migrations.AlterField(
model_name='appconfig',
name='documentos_administrativos',
field=models.CharField(choices=[('O', 'Ostensivo'), ('R', 'Restritivo')], default='O', max_length=1, verbose_name='Ostensivo/Restritivo'),
),
migrations.AlterField(
model_name='appconfig',
name='painel_aberto',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Painel aberto para usuário anônimo'),
),
migrations.AlterField(
model_name='appconfig',
name='sequencia_numeracao',
field=models.CharField(choices=[('A', 'Sequencial por ano'), ('U', 'Sequencial único')], default='A', max_length=1, verbose_name='Sequência de numeração'),
),
]

19
sapl/base/migrations/0019_auto_20160928_1951.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-28 22:51
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0018_auto_20160919_1333'),
]
operations = [
migrations.AlterModelOptions(
name='appconfig',
options={'permissions': (('menu_sistemas', 'Renderizar Menu Sistemas'), ('view_tabelas_auxiliares', 'Visualizar Tabelas Auxiliares')), 'verbose_name': 'Configurações da Aplicação', 'verbose_name_plural': 'Configurações da Aplicação'},
),
]

30
sapl/base/migrations/0020_auto_20161006_0950.py

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-06 12:50
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0019_auto_20160928_1951'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='texto_articulado_materia',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Matérias'),
),
migrations.AddField(
model_name='appconfig',
name='texto_articulado_norma',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Normas'),
),
migrations.AddField(
model_name='appconfig',
name='texto_articulado_proposicao',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Proposições'),
),
]

20
sapl/base/migrations/0021_auto_20161006_1019.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-06 13:19
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0020_auto_20161006_0950'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='texto_articulado_norma',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Usar Textos Articulados para Normas'),
),
]

55
sapl/base/migrations/0022_auto_20161009_1222.py

@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-09 15:22
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('contenttypes', '0002_remove_content_type_name'),
('base', '0021_auto_20161006_1019'),
]
operations = [
migrations.CreateModel(
name='Autor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.PositiveIntegerField(blank=True, default=None, null=True)),
('nome', models.CharField(blank=True, max_length=50, verbose_name='Autor')),
('cargo', models.CharField(blank=True, max_length=50)),
('content_type', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
],
options={
'verbose_name': 'Autor',
'verbose_name_plural': 'Autores',
},
),
migrations.CreateModel(
name='TipoAutor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('descricao', models.CharField(max_length=50, verbose_name='Descrição')),
('content_type', models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Modelo do Tipo de Autor')),
],
options={
'verbose_name': 'Tipo de Autor',
'verbose_name_plural': 'Tipos de Autor',
},
),
migrations.AddField(
model_name='autor',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.TipoAutor', verbose_name='Tipo'),
),
migrations.AddField(
model_name='autor',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]

25
sapl/base/migrations/0023_auto_20161009_1852.py

@ -1,25 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-09 21:52
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('base', '0022_auto_20161009_1222'),
]
operations = [
migrations.AlterField(
model_name='tipoautor',
name='content_type',
field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Modelagem no SAPL'),
),
migrations.AlterUniqueTogether(
name='autor',
unique_together=set([('content_type', 'object_id')]),
),
]

26
sapl/base/migrations/0024_auto_20161010_1002.py

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-10 13:02
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('base', '0023_auto_20161009_1852'),
]
operations = [
migrations.AlterField(
model_name='autor',
name='nome',
field=models.CharField(blank=True, max_length=50, verbose_name='Nome do Autor'),
),
migrations.AlterField(
model_name='autor',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.TipoAutor', verbose_name='Tipo do Autor'),
),
]

20
sapl/base/migrations/0025_tipoautor_cria_usuario.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-11 14:38
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0024_auto_20161010_1002'),
]
operations = [
migrations.AddField(
model_name='tipoautor',
name='cria_usuario',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, help_text='Criação de Usuários víncula e libera o acesso de Autores ao sistema. Vincular um Autor a um tipo que esta opção está marcada como "Não", o Autor não terá username associado.', verbose_name='Criação de Usuários'),
),
]

19
sapl/base/migrations/0026_remove_tipoautor_cria_usuario.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-11 18:08
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0025_tipoautor_cria_usuario'),
]
operations = [
migrations.RemoveField(
model_name='tipoautor',
name='cria_usuario',
),
]

22
sapl/base/migrations/0027_auto_20161011_1624.py

@ -1,22 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-11 19:24
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('base', '0026_remove_tipoautor_cria_usuario'),
]
operations = [
migrations.AlterField(
model_name='autor',
name='user',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
),
]

20
sapl/base/migrations/0028_appconfig_proposicao_incorporacao_obrigatoria.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-21 14:24
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0027_auto_20161011_1624'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='proposicao_incorporacao_obrigatoria',
field=models.BooleanField(choices=[('O', 'Sempre Gerar Protocolo.'), ('C', 'Perguntar se é pra gerar protocolo ao incorporar.'), ('N', 'Nunca Protocolar ao incorporar uma proposição.')], default='O', verbose_name='Regra de incorporação e protocolo'),
),
]

20
sapl/base/migrations/0029_auto_20161021_1445.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-21 14:45
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0028_appconfig_proposicao_incorporacao_obrigatoria'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='proposicao_incorporacao_obrigatoria',
field=models.BooleanField(choices=[('O', 'Sempre Gerar Protocolo'), ('C', 'Perguntar se é pra gerar protocolo ao incorporar'), ('N', 'Nunca Protocolar ao incorporar uma proposição')], default='O', verbose_name='Regra de incorporação de proposições e protocolo'),
),
]

20
sapl/base/migrations/0030_auto_20161021_2017.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-21 20:17
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0029_auto_20161021_1445'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='proposicao_incorporacao_obrigatoria',
field=models.CharField(choices=[('O', 'Sempre Gerar Protocolo'), ('C', 'Perguntar se é pra gerar protocolo ao incorporar'), ('N', 'Nunca Protocolar ao incorporar uma proposição')], default='O', max_length=1, verbose_name='Regra de incorporação de proposições e protocolo'),
),
]

19
sapl/base/migrations/0031_auto_20170203_1019.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-02-03 10:19
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0030_auto_20161021_2017'),
]
operations = [
migrations.AlterModelOptions(
name='tipoautor',
options={'ordering': ['descricao'], 'verbose_name': 'Tipo de Autor', 'verbose_name_plural': 'Tipos de Autor'},
),
]

30
sapl/base/migrations/0032_auto_20170308_1006.py

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-03-08 10:06
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0031_auto_20170203_1019'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='cronometro_aparte',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro do Aparte'),
),
migrations.AddField(
model_name='appconfig',
name='cronometro_discurso',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro do Discurso'),
),
migrations.AddField(
model_name='appconfig',
name='cronometro_ordem',
field=models.TimeField(blank=True, null=True, verbose_name='Cronômetro da Ordem'),
),
]

43
sapl/base/models.py

@ -13,14 +13,6 @@ SEQUENCIA_NUMERACAO = (('A', _('Sequencial por ano')),
('U', _('Sequencial único'))) ('U', _('Sequencial único')))
def get_sessao_media_path(instance, subpath, filename):
return './sapl/casa/%s/%s' % (subpath, filename)
def get_casa_media_path(instance, filename):
return get_sessao_media_path(instance, 'Logotipo', filename)
@reversion.register() @reversion.register()
class CasaLegislativa(models.Model): class CasaLegislativa(models.Model):
# TODO ajustar todos os max_length !!!! # TODO ajustar todos os max_length !!!!
@ -41,7 +33,7 @@ class CasaLegislativa(models.Model):
max_length=100, blank=True, verbose_name=_('Fax')) max_length=100, blank=True, verbose_name=_('Fax'))
logotipo = models.ImageField( logotipo = models.ImageField(
blank=True, blank=True,
upload_to=get_casa_media_path, upload_to='sapl/casa/logotipo/',
verbose_name=_('Logotipo')) verbose_name=_('Logotipo'))
endereco_web = models.URLField( endereco_web = models.URLField(
max_length=100, blank=True, verbose_name=_('HomePage')) max_length=100, blank=True, verbose_name=_('HomePage'))
@ -69,16 +61,45 @@ class ProblemaMigracao(models.Model):
content_object = GenericForeignKey('content_type', 'object_id') content_object = GenericForeignKey('content_type', 'object_id')
nome_campo = models.CharField(max_length=100, nome_campo = models.CharField(max_length=100,
blank=True, blank=True,
verbose_name='Nome do(s) Campo(s)') verbose_name=_('Nome do(s) Campo(s)'))
problema = models.CharField(max_length=300, verbose_name=_('Problema')) problema = models.CharField(max_length=300, verbose_name=_('Problema'))
descricao = models.CharField(max_length=300, verbose_name=_('Descrição')) descricao = models.CharField(max_length=300, verbose_name=_('Descrição'))
eh_stub = models.BooleanField(verbose_name='É stub?') eh_stub = models.BooleanField(verbose_name=_('É stub?'))
eh_importante = models.BooleanField(
default=False, verbose_name=_('É importante?'))
class Meta: class Meta:
verbose_name = _('Problema na Migração') verbose_name = _('Problema na Migração')
verbose_name_plural = _('Problemas na Migração') verbose_name_plural = _('Problemas na Migração')
@reversion.register()
class Constraint(models.Model):
nome_tabela = models.CharField(
max_length=50, verbose_name=_('Nome da tabela'))
nome_constraint = models.CharField(
max_length=100, verbose_name=_('Nome da constraint'))
nome_model = models.CharField(
max_length=50, verbose_name=_('Nome da model'))
tipo_constraint = models.CharField(
max_length=50, verbose_name=_('Tipo da constraint'))
class Meta:
verbose_name = _('Constraint removida')
verbose_name_plural = _('Constraints removidas')
@reversion.register()
class Argumento(models.Model):
constraint = models.ForeignKey(Constraint)
argumento = models.CharField(
max_length=50, verbose_name=_('Argumento'))
class Meta:
verbose_name = _('Argumento da constraint')
verbose_name_plural = _('Argumentos da constraint')
@reversion.register() @reversion.register()
class AppConfig(models.Model): class AppConfig(models.Model):

72
sapl/base/search_indexes.py

@ -0,0 +1,72 @@
import os.path
import textract
from django.template import Context, loader
from haystack import indexes
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.norma.models import NormaJuridica
class DocumentoAcessorioIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
filename = 'arquivo'
model = DocumentoAcessorio
template_name = 'materia/documentoacessorio_text.txt'
def get_model(self):
return self.model
def index_queryset(self, using=None):
return self.get_model().objects.all()
def prepare(self, obj):
if not self.filename or not self.model or not self.template_name:
raise Exception
data = super(DocumentoAcessorioIndex, self).prepare(obj)
arquivo = getattr(obj, self.filename)
if arquivo:
try:
arquivo.open()
except OSError:
return self.prepared_data
if not os.path.splitext(arquivo.path)[1][:1]:
return self.prepared_data
extracted_data = textract.process(
arquivo.path).decode(
'utf-8').replace('\n', ' ')
extracted_data = extracted_data.replace('\t', ' ')
# Now we'll finally perform the template processing to render the
# text field with *all* of our metadata visible for templating:
t = loader.select_template((
'search/indexes/' + self.template_name, ))
data['text'] = t.render(Context({'object': obj,
'extracted': extracted_data}))
return data
return self.prepared_data
class MateriaLegislativaIndex(DocumentoAcessorioIndex):
text = indexes.CharField(document=True, use_template=True)
filename = 'texto_original'
model = MateriaLegislativa
template_name = 'materia/materialegislativa_text.txt'
class NormaJuridicaIndex(DocumentoAcessorioIndex):
text = indexes.CharField(document=True, use_template=True)
filename = 'texto_integral'
model = NormaJuridica
template_name = 'norma/normajuridica_text.txt'

16
sapl/base/templatetags/common_tags.py

@ -2,6 +2,8 @@ from compressor.utils import get_class
from django import template from django import template
from sapl.base.models import AppConfig from sapl.base.models import AppConfig
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao from sapl.parlamentares.models import Filiacao
register = template.Library() register = template.Library()
@ -124,7 +126,7 @@ def url(value):
@register.filter @register.filter
def cronometro_to_seconds(value): def cronometro_to_seconds(value):
if not AppConfig.attr('cronometro_' + value): if not AppConfig.attr('cronometro_' + value):
return 0 return 0
@ -137,3 +139,15 @@ def cronometro_to_seconds(value):
@register.filter @register.filter
def to_list_pk(object_list): def to_list_pk(object_list):
return [o.pk for o in object_list] return [o.pk for o in object_list]
@register.filter
def search_get_model(object):
if type(object) == MateriaLegislativa:
return 'm'
elif type(object) == DocumentoAcessorio:
return 'd'
elif type(object) == NormaJuridica:
return 'n'
return None

2
sapl/base/urls.py

@ -99,4 +99,6 @@ urlpatterns = [
name='login'), name='login'),
url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'), url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'),
url(r'^sistema/search/', include('haystack.urls')),
] + recuperar_senha ] + recuperar_senha

73
sapl/comissoes/migrations/0001_initial.py

@ -1,11 +1,15 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-03-25 11:14
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True
dependencies = [ dependencies = [
('parlamentares', '0001_initial'), ('parlamentares', '0001_initial'),
] ]
@ -14,107 +18,108 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='CargoComissao', name='CargoComissao',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=50, verbose_name='Cargo')), ('nome', models.CharField(max_length=50, verbose_name='Cargo')),
('unico', models.BooleanField(verbose_name='Único')), ('unico', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Único')),
], ],
options={ options={
'verbose_name_plural': 'Cargos de Comissão',
'verbose_name': 'Cargo de Comissão', 'verbose_name': 'Cargo de Comissão',
'verbose_name_plural': 'Cargos de Comissão',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Comissao', name='Comissao',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=60, verbose_name='Nome')), ('nome', models.CharField(max_length=60, verbose_name='Nome')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla')), ('sigla', models.CharField(max_length=10, verbose_name='Sigla')),
('data_criacao', models.DateField(verbose_name='Data de Criação')), ('data_criacao', models.DateField(verbose_name='Data de Criação')),
('data_extincao', models.DateField(blank=True, null=True, verbose_name='Data de Extinção')), ('data_extincao', models.DateField(blank=True, null=True, verbose_name='Data de Extinção')),
('apelido_temp', models.CharField(blank=True, max_length=100, null=True, verbose_name='Apelido')), ('apelido_temp', models.CharField(blank=True, max_length=100, verbose_name='Apelido')),
('data_instalacao_temp', models.DateField(blank=True, null=True, verbose_name='Data Instalação')), ('data_instalacao_temp', models.DateField(blank=True, null=True, verbose_name='Data Instalação')),
('data_final_prevista_temp', models.DateField(blank=True, null=True, verbose_name='Data Prevista Término')), ('data_final_prevista_temp', models.DateField(blank=True, null=True, verbose_name='Data Prevista Término')),
('data_prorrogada_temp', models.DateField(blank=True, null=True, verbose_name='Novo Prazo')), ('data_prorrogada_temp', models.DateField(blank=True, null=True, verbose_name='Novo Prazo')),
('data_fim_comissao', models.DateField(blank=True, null=True, verbose_name='Data Término')), ('data_fim_comissao', models.DateField(blank=True, null=True, verbose_name='Data Término')),
('secretario', models.CharField(blank=True, max_length=30, null=True, verbose_name='Secretário')), ('secretario', models.CharField(blank=True, max_length=30, verbose_name='Secretário')),
('telefone_reuniao', models.CharField(blank=True, max_length=15, null=True, verbose_name='Tel. Sala Reunião')), ('telefone_reuniao', models.CharField(blank=True, max_length=15, verbose_name='Tel. Sala Reunião')),
('endereco_secretaria', models.CharField(blank=True, max_length=100, null=True, verbose_name='Endereço Secretaria')), ('endereco_secretaria', models.CharField(blank=True, max_length=100, verbose_name='Endereço Secretaria')),
('telefone_secretaria', models.CharField(blank=True, max_length=15, null=True, verbose_name='Tel. Secretaria')), ('telefone_secretaria', models.CharField(blank=True, max_length=15, verbose_name='Tel. Secretaria')),
('fax_secretaria', models.CharField(blank=True, max_length=15, null=True, verbose_name='Fax Secretaria')), ('fax_secretaria', models.CharField(blank=True, max_length=15, verbose_name='Fax Secretaria')),
('agenda_reuniao', models.CharField(blank=True, max_length=100, null=True, verbose_name='Data/Hora Reunião')), ('agenda_reuniao', models.CharField(blank=True, max_length=100, verbose_name='Data/Hora Reunião')),
('local_reuniao', models.CharField(blank=True, max_length=100, null=True, verbose_name='Local Reunião')), ('local_reuniao', models.CharField(blank=True, max_length=100, verbose_name='Local Reunião')),
('finalidade', models.TextField(blank=True, null=True, verbose_name='Finalidade')), ('finalidade', models.TextField(blank=True, verbose_name='Finalidade')),
('email', models.CharField(blank=True, max_length=100, null=True, verbose_name='E-mail')), ('email', models.EmailField(blank=True, max_length=100, verbose_name='E-mail')),
('unidade_deliberativa', models.BooleanField(verbose_name='Unidade Deliberativa', choices=[(True, 'Sim'), (False, 'Não')])), ('unidade_deliberativa', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Unidade Deliberativa')),
('ativa', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Comissão Ativa?')),
], ],
options={ options={
'verbose_name_plural': 'Comissões',
'verbose_name': 'Comissão', 'verbose_name': 'Comissão',
'verbose_name_plural': 'Comissões',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Composicao', name='Composicao',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('comissao', models.ForeignKey(to='comissoes.Comissao', verbose_name='Comissão')), ('comissao', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='comissoes.Comissao', verbose_name='Comissão')),
], ],
options={ options={
'verbose_name_plural': 'Composições de Comissão',
'verbose_name': 'Composição de Comissão', 'verbose_name': 'Composição de Comissão',
'verbose_name_plural': 'Composições de Comissão',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Participacao', name='Participacao',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titular', models.BooleanField(verbose_name='Titular')), ('titular', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Titular')),
('data_designacao', models.DateField(verbose_name='Data Designação')), ('data_designacao', models.DateField(verbose_name='Data Designação')),
('data_desligamento', models.DateField(blank=True, null=True, verbose_name='Data Desligamento')), ('data_desligamento', models.DateField(blank=True, null=True, verbose_name='Data Desligamento')),
('motivo_desligamento', models.CharField(blank=True, max_length=150, null=True, verbose_name='Motivo Desligamento')), ('motivo_desligamento', models.CharField(blank=True, max_length=150, verbose_name='Motivo Desligamento')),
('observacao', models.CharField(blank=True, max_length=150, null=True, verbose_name='Observação')), ('observacao', models.CharField(blank=True, max_length=150, verbose_name='Observação')),
('cargo', models.ForeignKey(to='comissoes.CargoComissao')), ('cargo', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='comissoes.CargoComissao')),
('composicao', models.ForeignKey(to='comissoes.Composicao')), ('composicao', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='participacao_set', to='comissoes.Composicao')),
('parlamentar', models.ForeignKey(to='parlamentares.Parlamentar')), ('parlamentar', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Parlamentar')),
], ],
options={ options={
'verbose_name_plural': 'Participações em Comissão',
'verbose_name': 'Participação em Comissão', 'verbose_name': 'Participação em Comissão',
'verbose_name_plural': 'Participações em Comissão',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Periodo', name='Periodo',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('data_inicio', models.DateField(verbose_name='Data Início')), ('data_inicio', models.DateField(verbose_name='Data Início')),
('data_fim', models.DateField(blank=True, null=True, verbose_name='Data Fim')), ('data_fim', models.DateField(blank=True, null=True, verbose_name='Data Fim')),
], ],
options={ options={
'verbose_name_plural': 'Períodos de composição de Comissão',
'verbose_name': 'Período de composição de Comissão', 'verbose_name': 'Período de composição de Comissão',
'verbose_name_plural': 'Períodos de composição de Comissão',
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='TipoComissao', name='TipoComissao',
fields=[ fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=50, verbose_name='Nome')), ('nome', models.CharField(max_length=50, verbose_name='Nome')),
('natureza', models.CharField(choices=[('T', 'Temporária'), ('P', 'Permanente')], max_length=1, verbose_name='Natureza')), ('natureza', models.CharField(choices=[('T', 'Temporária'), ('P', 'Permanente')], max_length=1, verbose_name='Natureza')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla')), ('sigla', models.CharField(max_length=10, verbose_name='Sigla')),
('dispositivo_regimental', models.CharField(blank=True, max_length=50, null=True, verbose_name='Dispositivo Regimental')), ('dispositivo_regimental', models.CharField(blank=True, max_length=50, verbose_name='Dispositivo Regimental')),
], ],
options={ options={
'verbose_name_plural': 'Tipos de Comissão',
'verbose_name': 'Tipo de Comissão', 'verbose_name': 'Tipo de Comissão',
'verbose_name_plural': 'Tipos de Comissão',
}, },
), ),
migrations.AddField( migrations.AddField(
model_name='composicao', model_name='composicao',
name='periodo', name='periodo',
field=models.ForeignKey(to='comissoes.Periodo', verbose_name='Período'), field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='comissoes.Periodo', verbose_name='Período'),
), ),
migrations.AddField( migrations.AddField(
model_name='comissao', model_name='comissao',
name='tipo', name='tipo',
field=models.ForeignKey(to='comissoes.TipoComissao', verbose_name='Tipo'), field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='comissoes.TipoComissao', verbose_name='Tipo'),
), ),
] ]

19
sapl/comissoes/migrations/0002_auto_20150729_1310.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='cargocomissao',
name='unico',
field=models.BooleanField(verbose_name='Único', choices=[(True, 'Sim'), (False, 'Não')]),
),
]

79
sapl/comissoes/migrations/0003_auto_20160216_1015.py

@ -1,79 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0002_auto_20150729_1310'),
]
operations = [
migrations.AlterField(
model_name='comissao',
name='agenda_reuniao',
field=models.CharField(verbose_name='Data/Hora Reunião', max_length=100, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='apelido_temp',
field=models.CharField(verbose_name='Apelido', max_length=100, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='email',
field=models.CharField(verbose_name='E-mail', max_length=100, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='endereco_secretaria',
field=models.CharField(verbose_name='Endereço Secretaria', max_length=100, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='fax_secretaria',
field=models.CharField(verbose_name='Fax Secretaria', max_length=15, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='finalidade',
field=models.TextField(verbose_name='Finalidade', blank=True),
),
migrations.AlterField(
model_name='comissao',
name='local_reuniao',
field=models.CharField(verbose_name='Local Reunião', max_length=100, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='secretario',
field=models.CharField(verbose_name='Secretário', max_length=30, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='telefone_reuniao',
field=models.CharField(verbose_name='Tel. Sala Reunião', max_length=15, blank=True),
),
migrations.AlterField(
model_name='comissao',
name='telefone_secretaria',
field=models.CharField(verbose_name='Tel. Secretaria', max_length=15, blank=True),
),
migrations.AlterField(
model_name='participacao',
name='motivo_desligamento',
field=models.CharField(verbose_name='Motivo Desligamento', max_length=150, blank=True),
),
migrations.AlterField(
model_name='participacao',
name='observacao',
field=models.CharField(verbose_name='Observação', max_length=150, blank=True),
),
migrations.AlterField(
model_name='tipocomissao',
name='dispositivo_regimental',
field=models.CharField(verbose_name='Dispositivo Regimental', max_length=50, blank=True),
),
]

20
sapl/comissoes/migrations/0004_auto_20160307_0905.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-03-07 12:05
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0003_auto_20160216_1015'),
]
operations = [
migrations.AlterField(
model_name='comissao',
name='email',
field=models.EmailField(blank=True, max_length=100, verbose_name='E-mail'),
),
]

21
sapl/comissoes/migrations/0005_comissao_ativa.py

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.5 on 2016-08-05 18:36
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0004_auto_20160307_0905'),
]
operations = [
migrations.AddField(
model_name='comissao',
name='ativa',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Comissão Ativa?'),
preserve_default=False,
),
]

20
sapl/comissoes/migrations/0006_auto_20160825_1335.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-25 16:35
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0005_comissao_ativa'),
]
operations = [
migrations.AlterField(
model_name='comissao',
name='ativa',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Comissão Ativa?'),
),
]

20
sapl/comissoes/migrations/0006_auto_20160916_1243.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 15:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0005_comissao_ativa'),
]
operations = [
migrations.AlterField(
model_name='comissao',
name='ativa',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Comissão Ativa?'),
),
]

16
sapl/comissoes/migrations/0007_merge.py

@ -1,16 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-19 15:48
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0006_auto_20160916_1243'),
('comissoes', '0006_auto_20160825_1335'),
]
operations = [
]

21
sapl/comissoes/migrations/0008_auto_20160929_1611.py

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-29 19:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0007_merge'),
]
operations = [
migrations.AlterField(
model_name='participacao',
name='composicao',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participacao_set', to='comissoes.Composicao'),
),
]

20
sapl/comissoes/migrations/0009_auto_20161011_0843.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-11 11:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('comissoes', '0008_auto_20160929_1611'),
]
operations = [
migrations.AlterField(
model_name='participacao',
name='titular',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Titular'),
),
]

20
sapl/comissoes/models.py

@ -32,7 +32,9 @@ class TipoComissao(models.Model):
@reversion.register() @reversion.register()
class Comissao(models.Model): class Comissao(models.Model):
tipo = models.ForeignKey(TipoComissao, verbose_name=_('Tipo')) tipo = models.ForeignKey(TipoComissao,
on_delete=models.PROTECT,
verbose_name=_('Tipo'))
nome = models.CharField(max_length=60, verbose_name=_('Nome')) nome = models.CharField(max_length=60, verbose_name=_('Nome'))
sigla = models.CharField(max_length=10, verbose_name=_('Sigla')) sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
data_criacao = models.DateField(verbose_name=_('Data de Criação')) data_criacao = models.DateField(verbose_name=_('Data de Criação'))
@ -132,8 +134,12 @@ class CargoComissao(models.Model):
@reversion.register() @reversion.register()
class Composicao(models.Model): # IGNORE class Composicao(models.Model): # IGNORE
comissao = models.ForeignKey(Comissao, verbose_name=_('Comissão')) comissao = models.ForeignKey(Comissao,
periodo = models.ForeignKey(Periodo, verbose_name=_('Período')) on_delete=models.PROTECT,
verbose_name=_('Comissão'))
periodo = models.ForeignKey(Periodo,
on_delete=models.PROTECT,
verbose_name=_('Período'))
class Meta: class Meta:
verbose_name = _('Composição de Comissão') verbose_name = _('Composição de Comissão')
@ -145,9 +151,11 @@ class Composicao(models.Model): # IGNORE
@reversion.register() @reversion.register()
class Participacao(models.Model): # ComposicaoComissao class Participacao(models.Model): # ComposicaoComissao
composicao = models.ForeignKey(Composicao, related_name='participacao_set') composicao = models.ForeignKey(Composicao,
parlamentar = models.ForeignKey(Parlamentar) related_name='participacao_set',
cargo = models.ForeignKey(CargoComissao) on_delete=models.PROTECT)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
cargo = models.ForeignKey(CargoComissao, on_delete=models.PROTECT)
titular = models.BooleanField( titular = models.BooleanField(
verbose_name=_('Titular'), verbose_name=_('Titular'),
default=False, default=False,

280
sapl/compilacao/migrations/0001_initial.py

@ -1,50 +1,57 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-03-25 11:14
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('norma', '0003_auto_20150906_0239'), ('contenttypes', '0002_remove_content_type_name'),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Dispositivo', name='Dispositivo',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ordem', models.PositiveIntegerField(verbose_name='Ordem de Renderização', default=0)), ('created', models.DateTimeField(auto_now_add=True, verbose_name='created')),
('ordem_bloco_atualizador', models.PositiveIntegerField(verbose_name='Ordem de Renderização no Bloco Atualizador', default=0)), ('modified', models.DateTimeField(auto_now=True, verbose_name='modified')),
('nivel', models.PositiveIntegerField(blank=True, null=True, verbose_name='Nível Estrutural', default=0)), ('ordem', models.PositiveIntegerField(default=0, verbose_name='Ordem de Renderização')),
('dispositivo0', models.PositiveIntegerField(verbose_name='Número do Dispositivo', default=0)), ('ordem_bloco_atualizador', models.PositiveIntegerField(default=0, verbose_name='Ordem de Renderização no Bloco Atualizador')),
('dispositivo1', models.PositiveIntegerField(blank=True, null=True, verbose_name='Primeiro Nível de Variação', default=0)), ('nivel', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Nível Estrutural')),
('dispositivo2', models.PositiveIntegerField(blank=True, null=True, verbose_name='Segundo Nível de Variação', default=0)), ('dispositivo0', models.PositiveIntegerField(default=0, verbose_name='Número do Dispositivo')),
('dispositivo3', models.PositiveIntegerField(blank=True, null=True, verbose_name='Terceiro Nível de Variação', default=0)), ('dispositivo1', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Primeiro Nível de Variação')),
('dispositivo4', models.PositiveIntegerField(blank=True, null=True, verbose_name='Quarto Nível de Variação', default=0)), ('dispositivo2', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Segundo Nível de Variação')),
('dispositivo5', models.PositiveIntegerField(blank=True, null=True, verbose_name='Quinto Nível de Variação', default=0)), ('dispositivo3', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Terceiro Nível de Variação')),
('rotulo', models.CharField(blank=True, max_length=50, verbose_name='Rótulo', default='')), ('dispositivo4', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Quarto Nível de Variação')),
('texto', models.TextField(blank=True, verbose_name='Texto', default='')), ('dispositivo5', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Quinto Nível de Variação')),
('texto_atualizador', models.TextField(blank=True, verbose_name='Texto no Dispositivo Atualizador', default='')), ('rotulo', models.CharField(blank=True, default='', max_length=50, verbose_name='Rótulo')),
('texto', models.TextField(blank=True, default='', verbose_name='Texto do Dispositivo')),
('texto_atualizador', models.TextField(blank=True, default='', verbose_name='Texto do Dispositivo no Dispositivo Atualizador')),
('inicio_vigencia', models.DateField(verbose_name='Início de Vigência')), ('inicio_vigencia', models.DateField(verbose_name='Início de Vigência')),
('fim_vigencia', models.DateField(blank=True, null=True, verbose_name='Fim de Vigência')), ('fim_vigencia', models.DateField(blank=True, null=True, verbose_name='Fim de Vigência')),
('inicio_eficacia', models.DateField(verbose_name='Início de Eficácia')), ('inicio_eficacia', models.DateField(verbose_name='Início de Eficácia')),
('fim_eficacia', models.DateField(blank=True, null=True, verbose_name='Fim de Eficácia')), ('fim_eficacia', models.DateField(blank=True, null=True, verbose_name='Fim de Eficácia')),
('inconstitucionalidade', models.BooleanField(verbose_name='Inconstitucionalidade', default=False, choices=[(True, 'Sim'), (False, 'Não')])), ('inconstitucionalidade', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Declarado Inconstitucional')),
('visibilidade', models.BooleanField(verbose_name='Visibilidade na Norma Publicada', default=False, choices=[(True, 'Sim'), (False, 'Não')])), ('auto_inserido', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Auto Inserido')),
('timestamp', models.DateTimeField()), ('visibilidade', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Visibilidade no Texto Articulado Publicado')),
('dispositivo_atualizador', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Atualizador', default=None, related_name='dispositivo_dispositivo_atualizador')), ('dispositivo_de_revogacao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Revogação')),
('dispositivo_pai', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Pai', default=None, related_name='dispositivo_dispositivo_pai')), ('dispositivo_atualizador', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dispositivos_alterados_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Atualizador')),
('dispositivo_subsequente', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Subsequente', default=None, related_name='dispositivo_dispositivo_subsequente')), ('dispositivo_pai', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dispositivos_filhos_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Pai')),
('dispositivo_substituido', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Substituido', default=None, related_name='dispositivo_dispositivo_substituido')), ('dispositivo_subsequente', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dispositivo_subsequente_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Subsequente')),
('dispositivo_vigencia', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo de Vigência', default=None, related_name='dispositivo_dispositivo_vigencia')), ('dispositivo_substituido', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dispositivo_substituido_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Substituido')),
('norma', models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica')), ('dispositivo_vigencia', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='dispositivos_vigencias_set', to='compilacao.Dispositivo', verbose_name='Dispositivo de Vigência')),
('norma_publicada', models.ForeignKey(blank=True, null=True, to='norma.NormaJuridica', verbose_name='Norma Jurídica Publicada', default=None, related_name='dispositivo_norma_publicada')),
], ],
options={ options={
'permissions': (('change_dispositivo_edicao_dinamica', 'Permissão de edição de dispositivos originais via editor dinâmico.'), ('change_your_dispositivo_edicao_dinamica', 'Permissão de edição de dispositivos originais via editor dinâmico desde que seja dono.'), ('change_dispositivo_edicao_avancada', 'Permissão de edição de dispositivos originais via formulários de edição avançada.'), ('change_dispositivo_registros_compilacao', 'Permissão de registro de compilação via editor dinâmico.'), ('view_dispositivo_notificacoes', 'Permissão de acesso às notificações de pendências.'), ('change_dispositivo_de_vigencia_global', 'Permissão alteração global do dispositivo de vigência')),
'ordering': ['ta', 'ordem'],
'verbose_name': 'Dispositivo', 'verbose_name': 'Dispositivo',
'verbose_name_plural': 'Dispositivos', 'verbose_name_plural': 'Dispositivos',
}, },
@ -52,70 +59,143 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Nota', name='Nota',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('texto', models.TextField(verbose_name='Texto da Nota')), ('created', models.DateTimeField(auto_now_add=True, verbose_name='created')),
('url_externa', models.CharField(blank=True, max_length=1024, verbose_name='Url externa')), ('modified', models.DateTimeField(auto_now=True, verbose_name='modified')),
('data_criacao', models.DateTimeField(verbose_name='Data de Criação')), ('titulo', models.CharField(blank=True, default='', max_length=100, verbose_name='Título')),
('texto', models.TextField(verbose_name='Texto')),
('url_externa', models.URLField(blank=True, max_length=1024, verbose_name='Url externa')),
('publicacao', models.DateTimeField(verbose_name='Data de Publicação')), ('publicacao', models.DateTimeField(verbose_name='Data de Publicação')),
('efetifidade', models.DateTimeField(verbose_name='Data de Efeito')), ('efetividade', models.DateTimeField(verbose_name='Data de Efeito')),
('publicidade', models.PositiveSmallIntegerField(verbose_name='Nível de Publicidade', choices=[(1, 'Nota Privada'), (2, 'Nota Setorial'), (3, 'Nota Institucional'), (4, 'Nota Pública')])), ('publicidade', models.PositiveSmallIntegerField(choices=[(1, 'Nota Privada'), (2, 'Nota Institucional'), (3, 'Nota Pública')], verbose_name='Nível de Publicidade')),
('dispositivo', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo da Nota')), ('dispositivo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dispositivo_nota_set', to='compilacao.Dispositivo', verbose_name='Dispositivo da Nota')),
('owner', models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Dono da Nota')), ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Dono da Nota')),
], ],
options={ options={
'ordering': ['-publicacao', '-modified'],
'verbose_name': 'Nota', 'verbose_name': 'Nota',
'verbose_name_plural': 'Notas', 'verbose_name_plural': 'Notas',
}, },
), ),
migrations.CreateModel(
name='PerfilEstruturalTextoArticulado',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sigla', models.CharField(max_length=10, unique=True, verbose_name='Sigla')),
('nome', models.CharField(max_length=50, verbose_name='Nome')),
('padrao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Padrão')),
('parent', 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')),
],
options={
'ordering': ['-padrao', 'sigla'],
'verbose_name': 'Perfil Estrutural de Texto Articulado',
'verbose_name_plural': 'Perfis Estruturais de Textos Articulados',
},
),
migrations.CreateModel( migrations.CreateModel(
name='Publicacao', name='Publicacao',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('publicacao', models.DateTimeField(verbose_name='Data de Publicação')), ('created', models.DateTimeField(auto_now_add=True, verbose_name='created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='modified')),
('data', models.DateField(verbose_name='Data de Publicação')),
('hora', models.TimeField(blank=True, null=True, verbose_name='Horário de Publicação')),
('numero', models.PositiveIntegerField(blank=True, null=True, verbose_name='Número')),
('ano', models.PositiveIntegerField(blank=True, null=True, verbose_name='Ano')),
('edicao', models.PositiveIntegerField(blank=True, null=True, verbose_name='Edição')),
('url_externa', models.URLField(blank=True, max_length=1024, verbose_name='Link para Versão Eletrônica')),
('pagina_inicio', models.PositiveIntegerField(blank=True, null=True, verbose_name='Pg. Início')), ('pagina_inicio', models.PositiveIntegerField(blank=True, null=True, verbose_name='Pg. Início')),
('pagina_fim', models.PositiveIntegerField(blank=True, null=True, verbose_name='Pg. Fim')), ('pagina_fim', models.PositiveIntegerField(blank=True, null=True, verbose_name='Pg. Fim')),
('timestamp', models.DateTimeField()),
('norma', models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica')),
], ],
options={ options={
'verbose_name': 'Publicação', 'verbose_name': 'Publicação',
'verbose_name_plural': 'Publicações', 'verbose_name_plural': 'Publicações',
}, },
), ),
migrations.CreateModel(
name='TextoArticulado',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True, verbose_name='created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='modified')),
('data', models.DateField(blank=True, null=True, verbose_name='Data')),
('ementa', models.TextField(verbose_name='Ementa')),
('observacao', models.TextField(blank=True, verbose_name='Observação')),
('numero', models.PositiveIntegerField(verbose_name='Número')),
('ano', models.PositiveSmallIntegerField(verbose_name='Ano')),
('participacao_social', models.NullBooleanField(choices=[(None, 'Padrão definido no Tipo'), (True, 'Sim'), (False, 'Não')], default=None, verbose_name='Participação Social')),
('object_id', models.PositiveIntegerField(blank=True, default=None, null=True)),
('editable_only_by_owners', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Editável apenas pelos donos do Texto Articulado')),
('editing_locked', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Texto Articulado em Edição')),
('privacidade', models.IntegerField(choices=[(99, 'Privado'), (79, 'Imotável Restrito'), (69, 'Imutável Público'), (89, 'Em Edição'), (0, 'Público')], default=99, verbose_name='Privacidade')),
('content_type', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
('owners', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Donos do Texto Articulado')),
],
options={
'permissions': (('view_restricted_textoarticulado', 'Pode ver qualquer Texto Articulado'), ('lock_unlock_textoarticulado', 'Pode bloquear/desbloquear edição de Texto Articulado')),
'ordering': ['-data', '-numero'],
'verbose_name': 'Texto Articulado',
'verbose_name_plural': 'Textos Articulados',
},
),
migrations.CreateModel( migrations.CreateModel(
name='TipoDispositivo', name='TipoDispositivo',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=50, verbose_name='Nome', unique=True)), ('nome', models.CharField(max_length=50, unique=True, verbose_name='Nome')),
('class_css', models.CharField(max_length=20, verbose_name='Classe CSS')), ('class_css', models.CharField(blank=True, max_length=20, verbose_name='Classe CSS')),
('rotulo_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html do rótulo')), ('rotulo_prefixo_html', models.TextField(blank=True, verbose_name='Prefixo html do rótulo')),
('rotulo_prefixo_texto', models.CharField(blank=True, max_length=30, verbose_name='Prefixo de construção do rótulo')), ('rotulo_prefixo_texto', models.TextField(blank=True, verbose_name='Prefixo de Edição do rótulo')),
('rotulo_ordinal', models.IntegerField(verbose_name='Tipo de número do rótulo')), ('rotulo_ordinal', models.IntegerField(choices=[(0, 'Numeração Cardinal.'), (-1, 'Numeração Ordinal.'), (9, 'Numeração Ordinal até o item nove.')], verbose_name='Tipo de número do rótulo')),
('rotulo_separadores_variacao', models.CharField(blank=True, max_length=5, verbose_name='Separadores das Variações')), ('rotulo_separador_variacao01', models.CharField(default='-', max_length=1, verbose_name='Separador entre Numeração e Variação 1')),
('rotulo_sufixo_texto', models.CharField(blank=True, max_length=30, verbose_name='Sufixo de construção do rótulo')), ('rotulo_separador_variacao12', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 1 e Variação 2')),
('rotulo_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html do rótulo')), ('rotulo_separador_variacao23', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 2 e Variação 3')),
('texto_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html do texto')), ('rotulo_separador_variacao34', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 3 e Variação 4')),
('texto_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html do texto')), ('rotulo_separador_variacao45', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 4 e Variação 5')),
('nota_automatica_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html da nota automática')), ('rotulo_sufixo_texto', models.TextField(blank=True, verbose_name='Sufixo de Edição do rótulo')),
('nota_automatica_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html da nota automática')), ('rotulo_sufixo_html', models.TextField(blank=True, verbose_name='Sufixo html do rótulo')),
('contagem_continua', models.BooleanField(verbose_name='Contagem contínua', choices=[(True, 'Sim'), (False, 'Não')])), ('texto_prefixo_html', models.TextField(blank=True, verbose_name='Prefixo html do texto')),
('formato_variacao0', models.CharField(max_length=1, verbose_name='Formato da Numeração', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), ('texto_sufixo_html', models.TextField(blank=True, verbose_name='Sufixo html do texto')),
('formato_variacao1', models.CharField(max_length=1, verbose_name='Formato da Variação 1', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), ('nota_automatica_prefixo_html', models.TextField(blank=True, verbose_name='Prefixo html da nota automática')),
('formato_variacao2', models.CharField(max_length=1, verbose_name='Formato da Variação 2', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), ('nota_automatica_sufixo_html', models.TextField(blank=True, verbose_name='Sufixo html da nota automática')),
('formato_variacao3', models.CharField(max_length=1, verbose_name='Formato da Variação 3', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), ('contagem_continua', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Contagem contínua')),
('formato_variacao4', models.CharField(max_length=1, verbose_name='Formato da Variação 4', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), ('dispositivo_de_articulacao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Articulação (Sem Texto)')),
('formato_variacao5', models.CharField(max_length=1, verbose_name='Formato da Variação 5', default='1', choices=[('1', '(1) Numérico'), ('I', '(I) Romano Maiúsculo'), ('i', '(i) Romano Minúsculo'), ('A', '(A) Alfabético Maiúsculo'), ('a', '(a) Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')])), ('dispositivo_de_alteracao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Alteração')),
('formato_variacao0', models.CharField(choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], default='1', max_length=1, verbose_name='Formato da Numeração')),
('formato_variacao1', models.CharField(choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], default='1', max_length=1, verbose_name='Formato da Variação 1')),
('formato_variacao2', models.CharField(choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], default='1', max_length=1, verbose_name='Formato da Variação 2')),
('formato_variacao3', models.CharField(choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], default='1', max_length=1, verbose_name='Formato da Variação 3')),
('formato_variacao4', models.CharField(choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], default='1', max_length=1, verbose_name='Formato da Variação 4')),
('formato_variacao5', models.CharField(choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], default='1', max_length=1, verbose_name='Formato da Variação 5')),
], ],
options={ options={
'ordering': ['id'],
'verbose_name': 'Tipo de Dispositivo', 'verbose_name': 'Tipo de Dispositivo',
'verbose_name_plural': 'Tipos de Dispositivo', 'verbose_name_plural': 'Tipos de Dispositivo',
}, },
), ),
migrations.CreateModel(
name='TipoDispositivoRelationship',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('filho_de_insercao_automatica', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Filho de Inserção Automática')),
('permitir_variacao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Permitir Variação Numérica')),
('quantidade_permitida', models.IntegerField(default=-1, verbose_name='Quantidade permitida nesta relação')),
('filho_permitido', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='possiveis_pais', to='compilacao.TipoDispositivo')),
('pai', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='filhos_permitidos', to='compilacao.TipoDispositivo')),
('perfil', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.PerfilEstruturalTextoArticulado')),
],
options={
'ordering': ['pai', 'filho_permitido'],
'verbose_name': 'Relação Direta Permitida',
'verbose_name_plural': 'Relaçõe Diretas Permitidas',
},
),
migrations.CreateModel( migrations.CreateModel(
name='TipoNota', name='TipoNota',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), ('sigla', models.CharField(max_length=10, unique=True, verbose_name='Sigla')),
('nome', models.CharField(max_length=50, verbose_name='Nome')), ('nome', models.CharField(max_length=50, verbose_name='Nome')),
('modelo', models.TextField(blank=True, verbose_name='Modelo')), ('modelo', models.TextField(blank=True, verbose_name='Modelo')),
], ],
@ -127,8 +207,8 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='TipoPublicacao', name='TipoPublicacao',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), ('sigla', models.CharField(max_length=10, unique=True, verbose_name='Sigla')),
('nome', models.CharField(max_length=50, verbose_name='Nome')), ('nome', models.CharField(max_length=50, verbose_name='Nome')),
], ],
options={ options={
@ -136,11 +216,27 @@ class Migration(migrations.Migration):
'verbose_name_plural': 'Tipos de Publicação', 'verbose_name_plural': 'Tipos de Publicação',
}, },
), ),
migrations.CreateModel(
name='TipoTextoArticulado',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sigla', models.CharField(max_length=3, verbose_name='Sigla')),
('descricao', models.CharField(max_length=50, verbose_name='Descrição')),
('participacao_social', models.NullBooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Participação Social')),
('publicacao_func', models.NullBooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Histórico de Publicação')),
('content_type', models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Modelo Integrado')),
('perfis', 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')),
],
options={
'verbose_name': 'Tipo de Texto Articulado',
'verbose_name_plural': 'Tipos de Texto Articulados',
},
),
migrations.CreateModel( migrations.CreateModel(
name='TipoVide', name='TipoVide',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), ('sigla', models.CharField(max_length=10, unique=True, verbose_name='Sigla')),
('nome', models.CharField(max_length=50, verbose_name='Nome')), ('nome', models.CharField(max_length=50, verbose_name='Nome')),
], ],
options={ options={
@ -151,8 +247,8 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='VeiculoPublicacao', name='VeiculoPublicacao',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)), ('sigla', models.CharField(max_length=10, unique=True, verbose_name='Sigla')),
('nome', models.CharField(max_length=60, verbose_name='Nome')), ('nome', models.CharField(max_length=60, verbose_name='Nome')),
], ],
options={ options={
@ -163,45 +259,79 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Vide', name='Vide',
fields=[ fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('data_criacao', models.DateTimeField(verbose_name='Data de Criação')), ('created', models.DateTimeField(auto_now_add=True, verbose_name='created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='modified')),
('texto', models.TextField(verbose_name='Texto do Vide')), ('texto', models.TextField(verbose_name='Texto do Vide')),
('dispositivo_base', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Base', related_name='vide_dispositivo_base')), ('dispositivo_base', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dispositivo_base_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Base')),
('dispositivo_ref', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Referido', related_name='vide_dispositivo_ref')), ('dispositivo_ref', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dispositivo_citado_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Referido')),
('tipo', models.ForeignKey(to='compilacao.TipoVide', verbose_name='Tipo do Vide')), ('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.TipoVide', verbose_name='Tipo do Vide')),
], ],
options={ options={
'verbose_name': 'Vide', 'verbose_name': 'Vide',
'verbose_name_plural': 'Vides', 'verbose_name_plural': 'Vides',
}, },
), ),
migrations.AddField(
model_name='tipodispositivo',
name='relacoes_diretas_pai_filho',
field=models.ManyToManyField(related_name='relacaoes_pai_filho', through='compilacao.TipoDispositivoRelationship', to='compilacao.TipoDispositivo'),
),
migrations.AddField(
model_name='textoarticulado',
name='tipo_ta',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='compilacao.TipoTextoArticulado', verbose_name='Tipo de Texto Articulado'),
),
migrations.AddField(
model_name='publicacao',
name='ta',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.TextoArticulado', verbose_name='Texto Articulado'),
),
migrations.AddField( migrations.AddField(
model_name='publicacao', model_name='publicacao',
name='tipo_publicacao', name='tipo_publicacao',
field=models.ForeignKey(to='compilacao.TipoPublicacao', verbose_name='Tipo de Publicação'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.TipoPublicacao', verbose_name='Tipo de Publicação'),
), ),
migrations.AddField( migrations.AddField(
model_name='publicacao', model_name='publicacao',
name='veiculo_publicacao', name='veiculo_publicacao',
field=models.ForeignKey(to='compilacao.VeiculoPublicacao', verbose_name='Veículo de Publicação'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.VeiculoPublicacao', verbose_name='Veículo de Publicação'),
), ),
migrations.AddField( migrations.AddField(
model_name='nota', model_name='nota',
name='tipo', name='tipo',
field=models.ForeignKey(to='compilacao.TipoNota', verbose_name='Tipo da Nota'), field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.TipoNota', verbose_name='Tipo da Nota'),
), ),
migrations.AddField( migrations.AddField(
model_name='dispositivo', model_name='dispositivo',
name='publicacao', name='publicacao',
field=models.ForeignKey(blank=True, null=True, to='compilacao.Publicacao', verbose_name='Publicação', default=None), field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='compilacao.Publicacao', verbose_name='Publicação'),
),
migrations.AddField(
model_name='dispositivo',
name='ta',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dispositivos_set', to='compilacao.TextoArticulado', verbose_name='Texto Articulado'),
),
migrations.AddField(
model_name='dispositivo',
name='ta_publicado',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='dispositivos_alterados_pelo_ta_set', to='compilacao.TextoArticulado', verbose_name='Texto Articulado Publicado'),
), ),
migrations.AddField( migrations.AddField(
model_name='dispositivo', model_name='dispositivo',
name='tipo_dispositivo', name='tipo_dispositivo',
field=models.ForeignKey(to='compilacao.TipoDispositivo', verbose_name='Tipo do Dispositivo'), field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='dispositivos_do_tipo_set', to='compilacao.TipoDispositivo', verbose_name='Tipo do Dispositivo'),
),
migrations.AlterUniqueTogether(
name='vide',
unique_together=set([('dispositivo_base', 'dispositivo_ref', 'tipo')]),
),
migrations.AlterUniqueTogether(
name='tipodispositivorelationship',
unique_together=set([('pai', 'filho_permitido', 'perfil')]),
), ),
migrations.AlterUniqueTogether( migrations.AlterUniqueTogether(
name='dispositivo', name='dispositivo',
unique_together=set([('norma', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'publicacao'), ('norma', 'ordem')]), unique_together=set([('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'dispositivo_atualizador', 'ta_publicado', 'publicacao'), ('ta', 'ordem')]),
), ),
] ]

48
sapl/compilacao/migrations/0002_auto_20150907_2334.py

@ -1,48 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='dispositivo',
options={'ordering': ['norma', 'ordem'], 'verbose_name_plural': 'Dispositivos', 'verbose_name': 'Dispositivo'},
),
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_atualizador',
field=models.ForeignKey(related_name='dispositivos_alterados_set', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Atualizador', default=None, blank=True),
),
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_pai',
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Pai', default=None, blank=True),
),
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_subsequente',
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Subsequente', default=None, blank=True),
),
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_substituido',
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo Substituido', default=None, blank=True),
),
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_vigencia',
field=models.ForeignKey(related_name='+', to='compilacao.Dispositivo', null=True, verbose_name='Dispositivo de Vigência', default=None, blank=True),
),
migrations.AlterField(
model_name='dispositivo',
name='norma_publicada',
field=models.ForeignKey(related_name='dispositivos_alterados_set', to='norma.NormaJuridica', null=True, verbose_name='Norma Jurídica Publicada', default=None, blank=True),
),
]

19
sapl/compilacao/migrations/0003_auto_20150911_1735.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0002_auto_20150907_2334'),
]
operations = [
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_pai',
field=models.ForeignKey(blank=True, null=True, verbose_name='Dispositivo Pai', to='compilacao.Dispositivo', related_name='filhos', default=None),
),
]

34
sapl/compilacao/migrations/0004_auto_20150914_0842.py

@ -1,34 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0003_auto_20150911_1735'),
]
operations = [
migrations.AlterField(
model_name='dispositivo',
name='dispositivo_pai',
field=models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Pai', blank=True, related_name='dispositivos_filhos_set', null=True, default=None),
),
migrations.AlterField(
model_name='dispositivo',
name='norma',
field=models.ForeignKey(related_name='dispositivos_set', to='norma.NormaJuridica', verbose_name='Norma Jurídica'),
),
migrations.AlterField(
model_name='dispositivo',
name='norma_publicada',
field=models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica Publicada', blank=True, related_name='dispositivos_alterados_pela_norma_set', null=True, default=None),
),
migrations.AlterField(
model_name='dispositivo',
name='tipo_dispositivo',
field=models.ForeignKey(related_name='dispositivos_do_tipo_set', to='compilacao.TipoDispositivo', verbose_name='Tipo do Dispositivo'),
),
]

77
sapl/compilacao/migrations/0005_auto_20150924_1012.py

@ -1,77 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0004_auto_20150914_0842'),
]
operations = [
migrations.AlterModelOptions(
name='tipodispositivo',
options={'verbose_name_plural': 'Tipos de Dispositivo', 'verbose_name': 'Tipo de Dispositivo', 'ordering': ['id']},
),
migrations.RemoveField(
model_name='tipodispositivo',
name='rotulo_separadores_variacao',
),
migrations.AddField(
model_name='tipodispositivo',
name='rotulo_separador_variacao01',
field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Numeração e Variação 1', blank=True),
),
migrations.AddField(
model_name='tipodispositivo',
name='rotulo_separador_variacao12',
field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 1 e Variação 2', blank=True),
),
migrations.AddField(
model_name='tipodispositivo',
name='rotulo_separador_variacao23',
field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 2 e Variação 3', blank=True),
),
migrations.AddField(
model_name='tipodispositivo',
name='rotulo_separador_variacao34',
field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 3 e Variação 4', blank=True),
),
migrations.AddField(
model_name='tipodispositivo',
name='rotulo_separador_variacao45',
field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 4 e Variação 5', blank=True),
),
migrations.AlterField(
model_name='tipodispositivo',
name='formato_variacao0',
field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Numeração'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='formato_variacao1',
field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 1'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='formato_variacao2',
field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 2'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='formato_variacao3',
field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 3'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='formato_variacao4',
field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 4'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='formato_variacao5',
field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 5'),
),
]

54
sapl/compilacao/migrations/0006_auto_20150924_1121.py

@ -1,54 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0005_auto_20150924_1012'),
]
operations = [
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_ordinal',
field=models.IntegerField(choices=[(-1, 'Numeração Cardinal.'), (0, 'Numeração Ordinal.'), (9, 'Numeração Ordinal até o item nove.')], verbose_name='Tipo de número do rótulo'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_prefixo_texto',
field=models.CharField(blank=True, max_length=30, verbose_name='Prefixo de Edição do rótulo'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao01',
field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Numeração e Variação 1'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao12',
field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 1 e Variação 2'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao23',
field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 2 e Variação 3'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao34',
field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 3 e Variação 4'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao45',
field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 4 e Variação 5'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_sufixo_texto',
field=models.CharField(blank=True, max_length=30, verbose_name='Sufixo de Edição do rótulo'),
),
]

19
sapl/compilacao/migrations/0007_auto_20150924_1131.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0006_auto_20150924_1121'),
]
operations = [
migrations.AlterField(
model_name='tipodispositivo',
name='class_css',
field=models.CharField(max_length=20, blank=True, verbose_name='Classe CSS'),
),
]

50
sapl/compilacao/migrations/0008_auto_20151005_1023.py

@ -1,50 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0007_auto_20150924_1131'),
]
operations = [
migrations.AddField(
model_name='tipodispositivo',
name='dispositivo_de_articulacao',
field=models.BooleanField(verbose_name='Dispositivo de Articulação (Sem Texto)', default=False, choices=[
(True, 'Sim'), (False, 'Não')]),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao01',
field=models.CharField(
verbose_name='Separador entre Numeração e Variação 1', default='-', max_length=1),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao12',
field=models.CharField(
verbose_name='Separador entre Variação 1 e Variação 2', default='-', max_length=1),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao23',
field=models.CharField(
verbose_name='Separador entre Variação 2 e Variação 3', default='-', max_length=1),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao34',
field=models.CharField(
verbose_name='Separador entre Variação 3 e Variação 4', default='-', max_length=1),
),
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_separador_variacao45',
field=models.CharField(
verbose_name='Separador entre Variação 4 e Variação 5', default='-', max_length=1),
),
]

23
sapl/compilacao/migrations/0009_auto_20151007_1635.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0008_auto_20151005_1023'),
]
operations = [
migrations.AlterField(
model_name='tipodispositivo',
name='rotulo_ordinal',
field=models.IntegerField(choices=[(0, 'Numeração Cardinal.'), (-1, 'Numeração Ordinal.'), (9, 'Numeração Ordinal até o item nove.')], verbose_name='Tipo de número do rótulo'),
),
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('norma', 'ordem'), ('norma', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'norma_publicada', 'publicacao')]),
),
]

30
sapl/compilacao/migrations/0010_auto_20151105_1532.py

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0009_auto_20151007_1635'),
]
operations = [
migrations.CreateModel(
name='TipoDispositivoRelationship',
fields=[
('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
('filho_permitido', models.ForeignKey(related_name='filho_permitido', to='compilacao.TipoDispositivo')),
('pai', models.ForeignKey(related_name='pai', to='compilacao.TipoDispositivo')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='tipodispositivo',
name='relacoes_diretas_pai_filho',
field=models.ManyToManyField(related_name='filhos_permitidos', through='compilacao.TipoDispositivoRelationship', to='compilacao.TipoDispositivo'),
),
]

27
sapl/compilacao/migrations/0011_auto_20151105_1540.py

@ -1,27 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0010_auto_20151105_1532'),
]
operations = [
migrations.AlterModelOptions(
name='tipodispositivorelationship',
options={'verbose_name': 'Relação Direta Permitida', 'verbose_name_plural': 'Relaçõe Diretas Permitidas', 'ordering': ['pai', 'filho_permitido']},
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='filho_permitido',
field=models.ForeignKey(null=True, to='compilacao.TipoDispositivo', blank=True, default=None, related_name='filho_permitido'),
),
migrations.AlterUniqueTogether(
name='tipodispositivorelationship',
unique_together=set([('pai', 'filho_permitido')]),
),
]

34
sapl/compilacao/migrations/0012_auto_20151105_1658.py

@ -1,34 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0011_auto_20151105_1540'),
]
operations = [
migrations.AddField(
model_name='tipodispositivorelationship',
name='filho_de_insercao_automatica',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Filho de Inserção Automática'),
),
migrations.AlterField(
model_name='tipodispositivo',
name='relacoes_diretas_pai_filho',
field=models.ManyToManyField(to='compilacao.TipoDispositivo', related_name='possiveis_pais', through='compilacao.TipoDispositivoRelationship'),
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='filho_permitido',
field=models.ForeignKey(blank=True, default=None, null=True, related_name='pais', to='compilacao.TipoDispositivo'),
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='pai',
field=models.ForeignKey(to='compilacao.TipoDispositivo', related_name='filhos_permitidos'),
),
]

24
sapl/compilacao/migrations/0013_auto_20151106_1843.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0012_auto_20151105_1658'),
]
operations = [
migrations.AlterField(
model_name='tipodispositivo',
name='relacoes_diretas_pai_filho',
field=models.ManyToManyField(to='compilacao.TipoDispositivo', related_name='_relacoes_diretas_pai_filho_+', through='compilacao.TipoDispositivoRelationship'),
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='filho_permitido',
field=models.ForeignKey(null=True, blank=True, related_name='possiveis_pais', to='compilacao.TipoDispositivo', default=None),
),
]

19
sapl/compilacao/migrations/0014_auto_20151107_1836.py

@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0013_auto_20151106_1843'),
]
operations = [
migrations.AddField(
model_name='tipodispositivo',
name='quantidade_permitida',
field=models.IntegerField(default=-1, verbose_name='Quantidade permitida dentro de uma Norma'),
),
]

24
sapl/compilacao/migrations/0015_auto_20151115_2310.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0014_auto_20151107_1836'),
]
operations = [
migrations.AddField(
model_name='tipodispositivo',
name='dispositivo_de_alteracao',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Alteração'),
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='filho_permitido',
field=models.ForeignKey(related_name='possiveis_pais', to='compilacao.TipoDispositivo'),
),
]

49
sapl/compilacao/migrations/0016_auto_20151119_0950.py

@ -1,49 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0015_auto_20151115_2310'),
]
operations = [
migrations.CreateModel(
name='PerfilEstruturalTextosNormativos',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')),
('nome', models.CharField(max_length=50, verbose_name='Nome')),
],
options={
'verbose_name_plural': 'Perfis Estruturais de Textos Normativos',
'verbose_name': 'Perfil Estrutural de Textos Normativos',
},
),
migrations.RemoveField(
model_name='dispositivo',
name='timestamp',
),
migrations.AddField(
model_name='dispositivo',
name='created',
field=models.DateTimeField(default=datetime.datetime(2015, 11, 19, 11, 49, 55, 455058, tzinfo=utc), auto_now_add=True, verbose_name='created'),
preserve_default=False,
),
migrations.AddField(
model_name='dispositivo',
name='modified',
field=models.DateTimeField(auto_now=True, default=datetime.datetime(2015, 11, 19, 11, 50, 5, 86839, tzinfo=utc), verbose_name='modified'),
preserve_default=False,
),
migrations.AddField(
model_name='tipodispositivorelationship',
name='perfil',
field=models.ForeignKey(blank=True, related_name='+', null=True, default=None, to='compilacao.PerfilEstruturalTextosNormativos'),
),
]

28
sapl/compilacao/migrations/0017_auto_20151119_1035.py

@ -1,28 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0016_auto_20151119_0950'),
]
operations = [
migrations.AddField(
model_name='perfilestruturaltextosnormativos',
name='padrao',
field=models.BooleanField(verbose_name='Padrão', choices=[(True, 'Sim'), (False, 'Não')], default=False),
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='perfil',
field=models.ForeignKey(to='compilacao.PerfilEstruturalTextosNormativos'),
),
migrations.AlterUniqueTogether(
name='tipodispositivorelationship',
unique_together=set([('pai', 'filho_permitido', 'perfil')]),
),
]

23
sapl/compilacao/migrations/0018_auto_20151119_1052.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0017_auto_20151119_1035'),
]
operations = [
migrations.RemoveField(
model_name='tipodispositivo',
name='quantidade_permitida',
),
migrations.AddField(
model_name='tipodispositivorelationship',
name='quantidade_permitida',
field=models.IntegerField(default=-1, verbose_name='Quantidade permitida nesta relação'),
),
]

20
sapl/compilacao/migrations/0019_auto_20151119_1120.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0018_auto_20151119_1052'),
]
operations = [
migrations.AddField(
model_name='perfilestruturaltextosnormativos',
name='sigla',
field=models.CharField(max_length=10, verbose_name='Sigla', default='LC95'),
preserve_default=False,
),
]

20
sapl/compilacao/migrations/0020_auto_20151119_1126.py

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0019_auto_20151119_1120'),
]
operations = [
migrations.AlterField(
model_name='perfilestruturaltextosnormativos',
name='sigla',
field=models.CharField(
max_length=10, verbose_name='Sigla', unique=True),
),
]

23
sapl/compilacao/migrations/0021_auto_20151119_1617.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0020_auto_20151119_1126'),
]
operations = [
migrations.AlterModelOptions(
name='perfilestruturaltextosnormativos',
options={'verbose_name': 'Perfil Estrutural de Textos Normativos', 'verbose_name_plural': 'Perfis Estruturais de Textos Normativos', 'ordering': ['-padrao', 'sigla']},
),
migrations.AddField(
model_name='tipodispositivorelationship',
name='permitir_variacao',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Permitir Variação Numérica', default=True),
),
]

33
sapl/compilacao/migrations/0022_auto_20151120_1503.py

@ -1,33 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0021_auto_20151119_1617'),
]
operations = [
migrations.RemoveField(
model_name='publicacao',
name='timestamp',
),
migrations.AddField(
model_name='publicacao',
name='created',
field=models.DateTimeField(verbose_name='created', auto_now_add=True, default=datetime.datetime(2015, 11, 20, 17, 3, 45, 347063, tzinfo=utc)),
preserve_default=False,
),
migrations.AddField(
model_name='publicacao',
name='modified',
field=models.DateTimeField(verbose_name='modified', default=datetime.datetime(2015, 11, 20, 17, 3, 51, 67108, tzinfo=utc), auto_now=True),
preserve_default=False,
),
]

29
sapl/compilacao/migrations/0023_auto_20151120_1529.py

@ -1,29 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0022_auto_20151120_1503'),
]
operations = [
migrations.AddField(
model_name='vide',
name='created',
field=models.DateTimeField(verbose_name='created', auto_now_add=True, default=datetime.datetime(2015, 11, 20, 17, 29, 27, 32283, tzinfo=utc)),
preserve_default=False,
),
migrations.AddField(
model_name='vide',
name='modified',
field=models.DateTimeField(verbose_name='modified', auto_now=True, default=datetime.datetime(2015, 11, 20, 17, 29, 31, 856683, tzinfo=utc)),
preserve_default=False,
),
]

37
sapl/compilacao/migrations/0024_auto_20151120_1814.py

@ -1,37 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0023_auto_20151120_1529'),
]
operations = [
migrations.RemoveField(
model_name='nota',
name='data_criacao',
),
migrations.RemoveField(
model_name='vide',
name='data_criacao',
),
migrations.AddField(
model_name='nota',
name='created',
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2015, 11, 20, 20, 13, 57, 385520, tzinfo=utc), verbose_name='created'),
preserve_default=False,
),
migrations.AddField(
model_name='nota',
name='modified',
field=models.DateTimeField(auto_now=True, default=datetime.datetime(2015, 11, 20, 20, 14, 3, 360297, tzinfo=utc), verbose_name='modified'),
preserve_default=False,
),
]

24
sapl/compilacao/migrations/0025_auto_20151122_1744.py

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0024_auto_20151120_1814'),
]
operations = [
migrations.RenameField(
model_name='nota',
old_name='efetifidade',
new_name='efetividade',
),
migrations.AlterField(
model_name='nota',
name='dispositivo',
field=models.ForeignKey(to='compilacao.Dispositivo', related_name='notas', verbose_name='Dispositivo da Nota'),
),
]

28
sapl/compilacao/migrations/0026_auto_20151122_1756.py

@ -1,28 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0025_auto_20151122_1744'),
]
operations = [
migrations.AlterModelOptions(
name='nota',
options={'verbose_name': 'Nota', 'ordering': ['publicacao'], 'verbose_name_plural': 'Notas'},
),
migrations.AddField(
model_name='nota',
name='titulo',
field=models.CharField(verbose_name='Título', max_length=100, default=''),
),
migrations.AlterField(
model_name='nota',
name='texto',
field=models.TextField(verbose_name='Texto'),
),
]

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save