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_components
media
whoosh/
solr-4.10.2/
postgres-data/
data/
solr-*/

4
.travis.yml

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

102
Dockerfile

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

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>`_
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
========================
@ -55,7 +60,6 @@ Logo dos Partidos
`Logo dos Partidos <https://github.com/interlegis/sapl/blob/master/docs/logo_partidos.rst>`_
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
environment:
POSTGRES_PASSWORD: sapl
POSTGRES_USER: sapl
POSTGRES_DB: sapl
PGDATA : /var/lib/postgresql/data/
volumes:
- sapldb_data:/var/lib/postgresql/data/
ports:
- "5532:5432"
web:
build: .
command: bash -c "python3 manage.py bower install && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000"
sapl:
image: interlegis/sapl:3.1.2-BETA
volumes:
- .:/sapl
ports:
- "8000:8000"
- sapl_data:/var/interlegis/sapl/data
- sapl_media:/var/interlegis/sapl/media
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
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
------------------
Instalar o NGINX::
sudo apt-get install nginx
Instalar o Gunicorn::
sudo pip install gunicorn
sudo pip install gunicorn
Preparando o NGINX
------------------
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;
}
@ -95,11 +107,11 @@ Para uma máquina de CPU única o valor seria 3
Para rodar o gunicorn::
workon sapl
/var/interlegis/sapl/.gunicorn_start.sh
#Referências.
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
@ -107,4 +119,12 @@ http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supe
Para multiplas aplicações Django.
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::
./manage.py shell --settings=sapl.legacy_migration_settings
%run sapl/legacy/migration.py
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
* Preparar o ambiente para indexação de arquivos::
./manage.py rebuild_index
* Subir o servidor do django::
./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
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 (*)
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 (*)
USER=`whoami` # the user 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_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
cd $DJANGODIR
source /var/interlegis/.virtualenvs/sapl/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# parameter can be passed to run without virtualenv
if [[ "$@" != "no-venv" ]]; then
# Activate the virtual environment
cd $DJANGODIR
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
RUNDIR=$(dirname $SOCKFILE)

1
requirements/dev-requirements.txt

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

6
requirements/requirements.txt

@ -1,4 +1,5 @@
dj-database-url==0.4.1
django-haystack==2.6.0
django>=1.9,<1.10
# 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
@ -14,7 +15,7 @@ django-extra-views==0.8.0
django-filter==0.15.3
django-floppyforms==1.6.2
django-model-utils==2.5
django-sass-processor==0.4.6
django-sass-processor==0.5.4
djangorestframework
drfdocs
easy-thumbnails==2.3
@ -25,7 +26,10 @@ python-decouple==3.0
pytz==2016.4
pyyaml==3.11
rtyaml==0.0.3
textract==1.5.0
unipath==1.1
pysolr==3.6.0
python-magic==0.4.12
gunicorn==19.6.0
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
DEBUG=False
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.materia.models import MateriaLegislativa
from sapl.sessao.models import SessaoPlenaria
class ChoiceSerializer(serializers.Serializer):
@ -52,3 +53,25 @@ class MateriaLegislativaSerializer(serializers.ModelSerializer):
class Meta:
model = MateriaLegislativa
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 sapl.api.views import (AutorListView, MateriaLegislativaViewSet,
ModelChoiceView)
ModelChoiceView, SessaoPlenariaViewSet)
from .apps import AppConfig
@ -12,9 +12,9 @@ app_name = AppConfig.name
router = DefaultRouter()
router.register(r'materia', MateriaLegislativaViewSet)
router.register(r'sessao-plenaria', SessaoPlenariaViewSet)
urlpatterns_router = router.urls
urlpatterns_api = [
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.mixins import ListModelMixin, RetrieveModelMixin
from rest_framework.permissions import (IsAuthenticated,
IsAuthenticatedOrReadOnly)
from rest_framework.viewsets import GenericViewSet
IsAuthenticatedOrReadOnly,
AllowAny)
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from sapl.api.forms import AutorChoiceFilterSet
from sapl.api.serializers import (AutorChoiceSerializer, AutorSerializer,
ChoiceSerializer,
MateriaLegislativaSerializer,
ModelChoiceSerializer)
ModelChoiceSerializer,
SessaoPlenariaSerializer)
from sapl.base.models import Autor, TipoAutor
from sapl.materia.models import MateriaLegislativa
from sapl.sessao.models import SessaoPlenaria
from sapl.utils import SaplGenericRelation, sapl_logger
@ -203,3 +206,13 @@ class MateriaLegislativaViewSet(ListModelMixin,
queryset = MateriaLegislativa.objects.all()
filter_backends = (DjangoFilterBackend,)
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 -*-
# Generated by Django 1.9.12 on 2017-03-25 11:14
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import sapl.base.models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('contenttypes', '0002_remove_content_type_name'),
]
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(
name='CasaLegislativa',
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')),
('sigla', models.CharField(max_length=100, verbose_name='Sigla')),
('endereco', models.CharField(max_length=100, verbose_name='Endereço')),
('cep', models.CharField(max_length=100, verbose_name='CEP')),
('municipio', models.CharField(max_length=100, verbose_name='Município')),
('uf', models.CharField(max_length=100, verbose_name='UF')),
('telefone', models.CharField(max_length=100, verbose_name='Telefone')),
('fax', models.CharField(max_length=100, verbose_name='Fax')),
('cor_fundo', models.CharField(max_length=100, verbose_name='Cor de fundo')),
('cor_borda', models.CharField(max_length=100, verbose_name='Cor da borda')),
('cor_principal', models.CharField(max_length=100, verbose_name='Cor principal')),
('logotipo', models.CharField(max_length=100, verbose_name='Logotipo')),
('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')),
('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(blank=True, max_length=100, verbose_name='Telefone')),
('fax', models.CharField(blank=True, max_length=100, verbose_name='Fax')),
('logotipo', models.ImageField(blank=True, upload_to='sapl/casa/logotipo/', verbose_name='Logotipo')),
('endereco_web', models.URLField(blank=True, max_length=100, verbose_name='HomePage')),
('email', models.EmailField(blank=True, max_length=100, verbose_name='E-mail')),
('informacao_geral', models.TextField(blank=True, max_length=100, verbose_name='Informação Geral')),
],
options={
'verbose_name_plural': 'Casas Legislativas',
'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')))
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()
class CasaLegislativa(models.Model):
# TODO ajustar todos os max_length !!!!
@ -41,7 +33,7 @@ class CasaLegislativa(models.Model):
max_length=100, blank=True, verbose_name=_('Fax'))
logotipo = models.ImageField(
blank=True,
upload_to=get_casa_media_path,
upload_to='sapl/casa/logotipo/',
verbose_name=_('Logotipo'))
endereco_web = models.URLField(
max_length=100, blank=True, verbose_name=_('HomePage'))
@ -69,16 +61,45 @@ class ProblemaMigracao(models.Model):
content_object = GenericForeignKey('content_type', 'object_id')
nome_campo = models.CharField(max_length=100,
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'))
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:
verbose_name = _('Problema 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()
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 sapl.base.models import AppConfig
from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa
from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao
register = template.Library()
@ -124,7 +126,7 @@ def url(value):
@register.filter
def cronometro_to_seconds(value):
def cronometro_to_seconds(value):
if not AppConfig.attr('cronometro_' + value):
return 0
@ -137,3 +139,15 @@ def cronometro_to_seconds(value):
@register.filter
def to_list_pk(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'),
url(r'^logout/$', views.logout, {'next_page': '/login'}, name='logout'),
url(r'^sistema/search/', include('haystack.urls')),
] + recuperar_senha

73
sapl/comissoes/migrations/0001_initial.py

@ -1,11 +1,15 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-03-25 11:14
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('parlamentares', '0001_initial'),
]
@ -14,107 +18,108 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='CargoComissao',
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')),
('unico', models.BooleanField(verbose_name='Único')),
('unico', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Único')),
],
options={
'verbose_name_plural': 'Cargos de Comissão',
'verbose_name': 'Cargo de Comissão',
'verbose_name_plural': 'Cargos de Comissão',
},
),
migrations.CreateModel(
name='Comissao',
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')),
('sigla', models.CharField(max_length=10, verbose_name='Sigla')),
('data_criacao', models.DateField(verbose_name='Data de Criaçã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_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_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')),
('telefone_reuniao', models.CharField(blank=True, max_length=15, null=True, verbose_name='Tel. Sala Reunião')),
('endereco_secretaria', models.CharField(blank=True, max_length=100, null=True, verbose_name='Endereço Secretaria')),
('telefone_secretaria', models.CharField(blank=True, max_length=15, null=True, verbose_name='Tel. Secretaria')),
('fax_secretaria', models.CharField(blank=True, max_length=15, null=True, verbose_name='Fax Secretaria')),
('agenda_reuniao', models.CharField(blank=True, max_length=100, null=True, verbose_name='Data/Hora Reunião')),
('local_reuniao', models.CharField(blank=True, max_length=100, null=True, verbose_name='Local Reunião')),
('finalidade', models.TextField(blank=True, null=True, verbose_name='Finalidade')),
('email', models.CharField(blank=True, max_length=100, null=True, verbose_name='E-mail')),
('unidade_deliberativa', models.BooleanField(verbose_name='Unidade Deliberativa', choices=[(True, 'Sim'), (False, 'Não')])),
('secretario', models.CharField(blank=True, max_length=30, verbose_name='Secretário')),
('telefone_reuniao', models.CharField(blank=True, max_length=15, verbose_name='Tel. Sala Reunião')),
('endereco_secretaria', models.CharField(blank=True, max_length=100, verbose_name='Endereço Secretaria')),
('telefone_secretaria', models.CharField(blank=True, max_length=15, verbose_name='Tel. Secretaria')),
('fax_secretaria', models.CharField(blank=True, max_length=15, verbose_name='Fax Secretaria')),
('agenda_reuniao', models.CharField(blank=True, max_length=100, verbose_name='Data/Hora Reunião')),
('local_reuniao', models.CharField(blank=True, max_length=100, verbose_name='Local Reunião')),
('finalidade', models.TextField(blank=True, verbose_name='Finalidade')),
('email', models.EmailField(blank=True, max_length=100, verbose_name='E-mail')),
('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={
'verbose_name_plural': 'Comissões',
'verbose_name': 'Comissão',
'verbose_name_plural': 'Comissões',
},
),
migrations.CreateModel(
name='Composicao',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('comissao', models.ForeignKey(to='comissoes.Comissao', verbose_name='Comissão')),
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('comissao', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='comissoes.Comissao', verbose_name='Comissão')),
],
options={
'verbose_name_plural': 'Composições de Comissão',
'verbose_name': 'Composição de Comissão',
'verbose_name_plural': 'Composições de Comissão',
},
),
migrations.CreateModel(
name='Participacao',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('titular', models.BooleanField(verbose_name='Titular')),
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titular', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Titular')),
('data_designacao', models.DateField(verbose_name='Data Designação')),
('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')),
('observacao', models.CharField(blank=True, max_length=150, null=True, verbose_name='Observação')),
('cargo', models.ForeignKey(to='comissoes.CargoComissao')),
('composicao', models.ForeignKey(to='comissoes.Composicao')),
('parlamentar', models.ForeignKey(to='parlamentares.Parlamentar')),
('motivo_desligamento', models.CharField(blank=True, max_length=150, verbose_name='Motivo Desligamento')),
('observacao', models.CharField(blank=True, max_length=150, verbose_name='Observação')),
('cargo', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='comissoes.CargoComissao')),
('composicao', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='participacao_set', to='comissoes.Composicao')),
('parlamentar', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='parlamentares.Parlamentar')),
],
options={
'verbose_name_plural': 'Participações em Comissão',
'verbose_name': 'Participação em Comissão',
'verbose_name_plural': 'Participações em Comissão',
},
),
migrations.CreateModel(
name='Periodo',
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_fim', models.DateField(blank=True, null=True, verbose_name='Data Fim')),
],
options={
'verbose_name_plural': 'Períodos 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(
name='TipoComissao',
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')),
('natureza', models.CharField(choices=[('T', 'Temporária'), ('P', 'Permanente')], max_length=1, verbose_name='Natureza')),
('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={
'verbose_name_plural': 'Tipos de Comissão',
'verbose_name': 'Tipo de Comissão',
'verbose_name_plural': 'Tipos de Comissão',
},
),
migrations.AddField(
model_name='composicao',
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(
model_name='comissao',
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()
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'))
sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
data_criacao = models.DateField(verbose_name=_('Data de Criação'))
@ -132,8 +134,12 @@ class CargoComissao(models.Model):
@reversion.register()
class Composicao(models.Model): # IGNORE
comissao = models.ForeignKey(Comissao, verbose_name=_('Comissão'))
periodo = models.ForeignKey(Periodo, verbose_name=_('Período'))
comissao = models.ForeignKey(Comissao,
on_delete=models.PROTECT,
verbose_name=_('Comissão'))
periodo = models.ForeignKey(Periodo,
on_delete=models.PROTECT,
verbose_name=_('Período'))
class Meta:
verbose_name = _('Composição de Comissão')
@ -145,9 +151,11 @@ class Composicao(models.Model): # IGNORE
@reversion.register()
class Participacao(models.Model): # ComposicaoComissao
composicao = models.ForeignKey(Composicao, related_name='participacao_set')
parlamentar = models.ForeignKey(Parlamentar)
cargo = models.ForeignKey(CargoComissao)
composicao = models.ForeignKey(Composicao,
related_name='participacao_set',
on_delete=models.PROTECT)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
cargo = models.ForeignKey(CargoComissao, on_delete=models.PROTECT)
titular = models.BooleanField(
verbose_name=_('Titular'),
default=False,

280
sapl/compilacao/migrations/0001_initial.py

@ -1,50 +1,57 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.12 on 2017-03-25 11:14
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):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('norma', '0003_auto_20150906_0239'),
('contenttypes', '0002_remove_content_type_name'),
]
operations = [
migrations.CreateModel(
name='Dispositivo',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('ordem', models.PositiveIntegerField(verbose_name='Ordem de Renderização', default=0)),
('ordem_bloco_atualizador', models.PositiveIntegerField(verbose_name='Ordem de Renderização no Bloco Atualizador', default=0)),
('nivel', models.PositiveIntegerField(blank=True, null=True, verbose_name='Nível Estrutural', default=0)),
('dispositivo0', models.PositiveIntegerField(verbose_name='Número do Dispositivo', default=0)),
('dispositivo1', models.PositiveIntegerField(blank=True, null=True, verbose_name='Primeiro Nível de Variação', default=0)),
('dispositivo2', models.PositiveIntegerField(blank=True, null=True, verbose_name='Segundo Nível de Variação', default=0)),
('dispositivo3', models.PositiveIntegerField(blank=True, null=True, verbose_name='Terceiro Nível de Variação', default=0)),
('dispositivo4', models.PositiveIntegerField(blank=True, null=True, verbose_name='Quarto Nível de Variação', default=0)),
('dispositivo5', models.PositiveIntegerField(blank=True, null=True, verbose_name='Quinto Nível de Variação', default=0)),
('rotulo', models.CharField(blank=True, max_length=50, verbose_name='Rótulo', default='')),
('texto', models.TextField(blank=True, verbose_name='Texto', default='')),
('texto_atualizador', models.TextField(blank=True, verbose_name='Texto no Dispositivo Atualizador', default='')),
('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')),
('ordem', models.PositiveIntegerField(default=0, verbose_name='Ordem de Renderização')),
('ordem_bloco_atualizador', models.PositiveIntegerField(default=0, verbose_name='Ordem de Renderização no Bloco Atualizador')),
('nivel', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Nível Estrutural')),
('dispositivo0', models.PositiveIntegerField(default=0, verbose_name='Número do Dispositivo')),
('dispositivo1', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Primeiro Nível de Variação')),
('dispositivo2', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Segundo Nível de Variação')),
('dispositivo3', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Terceiro Nível de Variação')),
('dispositivo4', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Quarto Nível de Variação')),
('dispositivo5', models.PositiveIntegerField(blank=True, default=0, null=True, verbose_name='Quinto Nível de Variação')),
('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')),
('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')),
('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')])),
('visibilidade', models.BooleanField(verbose_name='Visibilidade na Norma Publicada', default=False, choices=[(True, 'Sim'), (False, 'Não')])),
('timestamp', models.DateTimeField()),
('dispositivo_atualizador', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Atualizador', default=None, related_name='dispositivo_dispositivo_atualizador')),
('dispositivo_pai', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Pai', default=None, related_name='dispositivo_dispositivo_pai')),
('dispositivo_subsequente', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Subsequente', default=None, related_name='dispositivo_dispositivo_subsequente')),
('dispositivo_substituido', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo Substituido', default=None, related_name='dispositivo_dispositivo_substituido')),
('dispositivo_vigencia', models.ForeignKey(blank=True, null=True, to='compilacao.Dispositivo', verbose_name='Dispositivo de Vigência', default=None, related_name='dispositivo_dispositivo_vigencia')),
('norma', models.ForeignKey(to='norma.NormaJuridica', verbose_name='Norma Jurídica')),
('norma_publicada', models.ForeignKey(blank=True, null=True, to='norma.NormaJuridica', verbose_name='Norma Jurídica Publicada', default=None, related_name='dispositivo_norma_publicada')),
('inconstitucionalidade', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Declarado Inconstitucional')),
('auto_inserido', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Auto Inserido')),
('visibilidade', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Visibilidade no Texto Articulado Publicado')),
('dispositivo_de_revogacao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Revogação')),
('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_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_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_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')),
('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')),
],
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_plural': 'Dispositivos',
},
@ -52,70 +59,143 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Nota',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('texto', models.TextField(verbose_name='Texto da Nota')),
('url_externa', models.CharField(blank=True, max_length=1024, verbose_name='Url externa')),
('data_criacao', models.DateTimeField(verbose_name='Data de Criação')),
('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')),
('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')),
('efetifidade', 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')])),
('dispositivo', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo da Nota')),
('owner', models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Dono da Nota')),
('efetividade', models.DateTimeField(verbose_name='Data de Efeito')),
('publicidade', models.PositiveSmallIntegerField(choices=[(1, 'Nota Privada'), (2, 'Nota Institucional'), (3, 'Nota Pública')], verbose_name='Nível de Publicidade')),
('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(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Dono da Nota')),
],
options={
'ordering': ['-publicacao', '-modified'],
'verbose_name': 'Nota',
'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(
name='Publicacao',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('publicacao', models.DateTimeField(verbose_name='Data de Publicação')),
('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(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_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={
'verbose_name': 'Publicação',
'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(
name='TipoDispositivo',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('nome', models.CharField(max_length=50, verbose_name='Nome', unique=True)),
('class_css', models.CharField(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_texto', models.CharField(blank=True, max_length=30, verbose_name='Prefixo de construção do rótulo')),
('rotulo_ordinal', models.IntegerField(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_sufixo_texto', models.CharField(blank=True, max_length=30, verbose_name='Sufixo de construção do rótulo')),
('rotulo_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html do rótulo')),
('texto_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html do texto')),
('texto_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html do texto')),
('nota_automatica_prefixo_html', models.CharField(blank=True, max_length=100, verbose_name='Prefixo html da nota automática')),
('nota_automatica_sufixo_html', models.CharField(blank=True, max_length=100, verbose_name='Sufixo html da nota automática')),
('contagem_continua', models.BooleanField(verbose_name='Contagem contínua', choices=[(True, 'Sim'), (False, 'Não')])),
('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')])),
('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')])),
('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')])),
('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')])),
('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')])),
('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')])),
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=50, unique=True, verbose_name='Nome')),
('class_css', models.CharField(blank=True, max_length=20, verbose_name='Classe CSS')),
('rotulo_prefixo_html', models.TextField(blank=True, verbose_name='Prefixo html do rótulo')),
('rotulo_prefixo_texto', models.TextField(blank=True, verbose_name='Prefixo de Edição 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_separador_variacao01', models.CharField(default='-', max_length=1, verbose_name='Separador entre Numeração e Variação 1')),
('rotulo_separador_variacao12', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 1 e Variação 2')),
('rotulo_separador_variacao23', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 2 e Variação 3')),
('rotulo_separador_variacao34', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 3 e Variação 4')),
('rotulo_separador_variacao45', models.CharField(default='-', max_length=1, verbose_name='Separador entre Variação 4 e Variação 5')),
('rotulo_sufixo_texto', models.TextField(blank=True, verbose_name='Sufixo de Edição do rótulo')),
('rotulo_sufixo_html', models.TextField(blank=True, verbose_name='Sufixo html do rótulo')),
('texto_prefixo_html', models.TextField(blank=True, verbose_name='Prefixo html do texto')),
('texto_sufixo_html', models.TextField(blank=True, verbose_name='Sufixo html do texto')),
('nota_automatica_prefixo_html', models.TextField(blank=True, verbose_name='Prefixo html da nota automática')),
('nota_automatica_sufixo_html', models.TextField(blank=True, verbose_name='Sufixo html da nota automática')),
('contagem_continua', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Contagem contínua')),
('dispositivo_de_articulacao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Articulação (Sem Texto)')),
('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={
'ordering': ['id'],
'verbose_name': 'Tipo 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(
name='TipoNota',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)),
('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')),
('modelo', models.TextField(blank=True, verbose_name='Modelo')),
],
@ -127,8 +207,8 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='TipoPublicacao',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)),
('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')),
],
options={
@ -136,11 +216,27 @@ class Migration(migrations.Migration):
'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(
name='TipoVide',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)),
('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')),
],
options={
@ -151,8 +247,8 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='VeiculoPublicacao',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('sigla', models.CharField(max_length=10, verbose_name='Sigla', unique=True)),
('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=60, verbose_name='Nome')),
],
options={
@ -163,45 +259,79 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Vide',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('data_criacao', models.DateTimeField(verbose_name='Data de Criação')),
('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')),
('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_ref', models.ForeignKey(to='compilacao.Dispositivo', verbose_name='Dispositivo Referido', related_name='vide_dispositivo_ref')),
('tipo', models.ForeignKey(to='compilacao.TipoVide', verbose_name='Tipo do Vide')),
('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(on_delete=django.db.models.deletion.CASCADE, related_name='dispositivo_citado_set', to='compilacao.Dispositivo', verbose_name='Dispositivo Referido')),
('tipo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='compilacao.TipoVide', verbose_name='Tipo do Vide')),
],
options={
'verbose_name': 'Vide',
'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(
model_name='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(
model_name='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(
model_name='nota',
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(
model_name='dispositivo',
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(
model_name='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(
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