From fa73345651dc35c64a75fe4a5dce44c9a986818c Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 4 May 2017 17:52:29 -0300 Subject: [PATCH 01/17] =?UTF-8?q?Gera=20migra=C3=A7=C3=A3o=20de=20disposit?= =?UTF-8?q?ivo=20em=20AsssuntoMateria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0004_auto_20170504_1751.py | 32 +++++++++++++++++++ .../migrations/0002_auto_20170504_1751.py | 25 +++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 sapl/materia/migrations/0004_auto_20170504_1751.py create mode 100644 sapl/parlamentares/migrations/0002_auto_20170504_1751.py diff --git a/sapl/materia/migrations/0004_auto_20170504_1751.py b/sapl/materia/migrations/0004_auto_20170504_1751.py new file mode 100644 index 000000000..49a7e8938 --- /dev/null +++ b/sapl/materia/migrations/0004_auto_20170504_1751.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-05-04 17:51 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0003_auto_20170403_1505'), + ] + + operations = [ + migrations.AlterField( + model_name='assuntomateria', + name='dispositivo', + field=models.CharField(blank=True, default='', max_length=200, verbose_name='Descrição do Dispositivo Legal'), + preserve_default=False, + ), + migrations.AlterField( + model_name='materiaassunto', + name='assunto', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='materia.AssuntoMateria', verbose_name='Assunto'), + ), + migrations.AlterField( + model_name='materiaassunto', + name='materia', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='materia.MateriaLegislativa', verbose_name='Matéria'), + ), + ] diff --git a/sapl/parlamentares/migrations/0002_auto_20170504_1751.py b/sapl/parlamentares/migrations/0002_auto_20170504_1751.py new file mode 100644 index 000000000..7e7039e94 --- /dev/null +++ b/sapl/parlamentares/migrations/0002_auto_20170504_1751.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-05-04 17:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='coligacao', + name='numero_votos', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Nº Votos Recebidos (Coligação)'), + ), + migrations.AlterField( + model_name='mandato', + name='votos_recebidos', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Votos Recebidos (Mandato)'), + ), + ] From 0f5331c9810b443e8c4a7ffe121b844323f21837 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Thu, 4 May 2017 17:56:58 -0300 Subject: [PATCH 02/17] =?UTF-8?q?Remove=20CSS=20desnecess=C3=A1rios.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/static/styles/app.css | 1 - sapl/static/styles/compilacao.css | 1 - sapl/static/styles/style_tinymce.css | 8 -------- 3 files changed, 10 deletions(-) delete mode 100644 sapl/static/styles/app.css delete mode 100644 sapl/static/styles/compilacao.css delete mode 100644 sapl/static/styles/style_tinymce.css diff --git a/sapl/static/styles/app.css b/sapl/static/styles/app.css deleted file mode 100644 index e7146b1f4..000000000 --- a/sapl/static/styles/app.css +++ /dev/null @@ -1 +0,0 @@ -.logo img{width:40px;height:40px;margin:5px 15px}.vcenter{display:inline-block;vertical-align:middle;float:none;padding:10px}nav.navbar{border-radius:0;font-size:15px}nav .navbar-nav>li>a{padding-top:0px;padding-bottom:0px;line-height:75px}nav .navbar-nav>li>a:hover{background-color:#23527c}nav .navbar-nav>li:nth-child(2)>.dropdown-menu{right:auto}nav .navbar-nav:last-child>li:last-child a{padding-right:0px}.masthead{padding:10px}.masthead .nav{clear:both}.masthead .navbar-brand{color:inherit;font-size:24px}.masthead .navbar-brand img.img-responsive{height:95px;margin-right:15px}.masthead .navbar-brand small{color:#93A4AA;font-size:75%;line-height:25px}.navbar{margin-bottom:0}.navbar-brand{padding:0px}h1,.h1{font-size:30px}h2,.h2{font-size:24px}h3,.h3{font-size:20px}h4,.h4{font-size:16px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}.page-header{margin:20px 0px 10px}.btn:hover,.btn:focus{color:inherit}.caret.top{transform:rotate(180deg)}.btn-default.btn-excluir{color:#d9534f}.btn-default.btn-excluir:hover{color:#fff;border-color:#de6764;background-color:#de6764}.controls-file{padding:10px;border:1px solid #d6e1e5;border-radius:4px}.controls-file label.checkbox-inline{margin:0px;display:block}.controls-radio-checkbox{padding:0px;border:1px solid #d6e1e5;border-radius:4px;min-height:20px}.controls-radio-checkbox .help-block{margin:15px;padding:15px;border:2px dashed #d6e1e5}.controls-radio-checkbox label{padding:5px}.controls-radio-checkbox label .icons{top:5px;left:8px}.controls-radio-checkbox label.checkbox-inline,.controls-radio-checkbox label.radio-inline{padding:8px;padding-left:36px}.controls-radio-checkbox label.checkbox-inline .icons,.controls-radio-checkbox label.radio-inline .icons{top:8px;left:8px}.controls-radio-checkbox .checkbox,.controls-radio-checkbox .radio,.controls-radio-checkbox .checkbox-inline,.controls-radio-checkbox .radio-inline{margin:0}.controls-radio-checkbox .checkbox:hover,.controls-radio-checkbox .radio:hover,.controls-radio-checkbox .checkbox-inline:hover,.controls-radio-checkbox .radio-inline:hover{background-color:#d6e1e5}p.control-label{font-weight:bold}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5;clear:both}.grid-gutter-width-right{margin-right:15px}html{position:relative;min-height:100%}body{margin-bottom:160px}.footer{position:absolute;bottom:0;width:100%;height:140px;background:#364347 none repeat scroll 0% 0%;color:white;text-align:center}.footer p{color:white;margin-top:10px}.footer .container{padding-top:25px}.pagination{padding-top:25px}.modal .alert{margin-bottom:0}fieldset fieldset{font-size:95%}fieldset fieldset legend{font-size:18px}.avatar-parlamentar{height:84px;width:84px}#conteudo{position:relative;padding:2em 1.5em 1.5em 1.5em;overflow:hidden;font-size:100%;text-align:left;min-height:350px;max-width:1000px;margin:0 auto}#conteudo a:hover{color:#444;-webkit-transition:0.3s ease-in;-moz-transition:0.3s ease-in;-o-transition:0.3s ease-in}#homeIndex{text-align:center}.homeBanner span{color:white;font-size:32px;font-weight:600;display:inline-block;vertical-align:middle;padding:2px 45px 4px;border:2px solid}.homeBanner::after{display:inline-block;vertical-align:middle;height:100%}.homeBlock{display:inline-block;position:relative;background-color:#F3F3F3;width:190px;height:260px;margin:3px;text-align:center;font-size:0;overflow:hidden}.homeBlock>a{display:block;position:absolute;width:100%;height:100%;top:0;left:0}.homeBlock::after{content:'';display:inline-block;vertical-align:middle;height:100%;overflow:visible;clear:none;visibility:initial}.homeContent{position:relative;padding:10px;text-align:justify;font-size:14px;color:#FFF;opacity:0;transition:opacity 0.5s ease;display:inline-block;vertical-align:middle}.homeContent p{display:block;line-height:13px;font-size:80%;color:white}.homeIcon{position:relative;display:inline-block;width:105px;height:105px;border-radius:50%;background:#364347;z-index:1}.homeIcon::before{content:'';position:absolute;width:100%;height:100%;border-radius:50%;background:#364347;top:0;left:0;transform:scale(0.95);transition:transform 0.6s ease}.homeIcon img{position:absolute;margin:auto;top:0;bottom:0;right:0;left:0;transition:opacity 0.4s 0.4s ease}.homeFront{position:absolute;top:46%;width:100%;font-size:0;transform:translateY(-60%)}.homeFront h2{position:absolute;margin-top:18px;font-size:22px;font-weight:700;color:#595959 !important;width:100%;padding:0 6%;z-index:0}.homeTitle{display:block;height:32px;text-align:center;width:100%;opacity:0;transition:opacity 0.4s ease}.homeTitle::before{content:'';display:inline-block;vertical-align:middle;height:100%}.homeTitle h2{display:inline-block;vertical-align:middle;max-width:110px;font-size:14px;color:white !important;line-height:1em}.homeTitle img{display:inline-block;vertical-align:middle;height:30px;margin-right:5px}.homeBlock:hover .homeIcon::before{transform:scale(3.6) translateY(7px)}.homeBlock:hover .homeContent{opacity:1;transition-delay:0.2s}.homeBlock:hover .homeIcon img{opacity:0;transition-duration:0.2s;transition-delay:0s}.homeBlock:hover .homeTitle{opacity:1}h1,h2,h3,h4,h5,h6,form,dl,dt,dd,p,div,img,a{margin:0;padding:0}p{margin:0.5em 0}.manual li{display:list-item;line-height:1.5em;padding-right:0}.manual li a{background-color:transparent;border:none;border-radius:none;padding:0}.manual,.manual ul{padding-left:1.5em;list-style-type:none;margin-top:0;font-size:100%}@media (max-width: 1199px){.masthead .navbar-brand{font-size:22px}.masthead .navbar-brand img.img-responsive{height:60px;width:60px;margin-right:7.5px}.navbar-nav>li>a{padding-left:10.71429px;padding-right:10.71429px}}@media (max-width: 1091px){.navbar-nav>li>a{padding-left:7.5px;padding-right:7.5px}}@media (min-width: 1092px) and (max-width: 1199px){.container{width:1070px}} diff --git a/sapl/static/styles/compilacao.css b/sapl/static/styles/compilacao.css deleted file mode 100644 index ed50d8998..000000000 --- a/sapl/static/styles/compilacao.css +++ /dev/null @@ -1 +0,0 @@ -a:link:after,a:visited:after{content:""}.test_import:nth-child(even){background-color:#ccc}#wait_message{display:block;position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(220,220,220,0.75);z-index:99}#wait_message #msg{position:relative;margin:20% auto;padding:1.2em 2em;max-width:600px;text-align:center;font-size:1.5em;color:#677;border:1px solid #eee;background-color:#fff !important;box-shadow:0 1px 2px #999}.text-center{text-align:center}.cp-notify{z-index:9999;position:fixed;top:2em;left:50%;min-width:600px;transform:translate(-50%, 0);transition:all 0.4s ease;opacity:0.97}.cp-notify.hide{opacity:0;top:-1000px;display:block !important;transition:all 0.4s ease}.cp-notify .message{padding:1em;border:2px solid rgba(0,0,0,0.1);border-radius:4px;color:rgba(0,0,0,0.6);line-height:1em;font-size:1.3em;text-align:center;box-shadow:0 0 100px rgba(0,0,0,0.2)}.cp .desativado .dtxt,.cp .dpt .dptt>a.desativado .dtxt,.cp .desativado .dtxt *,.cp .dpt .dptt>a.desativado .dtxt *,.cp .desativado .dpt-link,.cp .dpt .dptt>a.desativado .dpt-link,.cp .desativado .dpt-link *,.cp .dpt .dptt>a.desativado .dpt-link *{text-decoration:line-through;color:#999 !important}.cp .desativado .dtxt table,.cp .dpt .dptt>a.desativado .dtxt table,.cp .desativado .dtxt table td,.cp .dpt .dptt>a.desativado .dtxt table td,.cp .desativado .dtxt * table,.cp .dpt .dptt>a.desativado .dtxt * table,.cp .desativado .dtxt * table td,.cp .dpt .dptt>a.desativado .dtxt * table td,.cp .desativado .dpt-link table,.cp .dpt .dptt>a.desativado .dpt-link table,.cp .desativado .dpt-link table td,.cp .dpt .dptt>a.desativado .dpt-link table td,.cp .desativado .dpt-link * table,.cp .dpt .dptt>a.desativado .dpt-link * table,.cp .desativado .dpt-link * table td,.cp .dpt .dptt>a.desativado .dpt-link * table td{border:1px dotted #ccc}.cp a{text-decoration:none;cursor:pointer}.cp .diff .desativado,.cp .diff .dpt .dptt>a.desativado,.cp .dpt .diff .dptt>a.desativado,.cp .diff .desativado *,.cp .diff .dpt .dptt>a.desativado *,.cp .dpt .diff .dptt>a.desativado *{text-decoration:line-through;color:#ddd !important;font-size:90%}.cp .diff .added{color:#04DE2C}.cp .dpt{font-size:1em;position:relative}.cp .dpt.indent{padding-left:1em}.cp .dpt .ementa{padding:2em 0em 2em 35%;font-weight:bold}.cp .dpt .titulo_generico,.cp .dpt .anexo,.cp .dpt .disp_preliminares,.cp .dpt .disp_gerais,.cp .dpt .disp_transitorias,.cp .dpt .disp_finais,.cp .dpt .parte,.cp .dpt .livro,.cp .dpt .titulo,.cp .dpt .capitulo,.cp .dpt .secao,.cp .dpt .subsecao,.cp .dpt .itemsecao{text-align:center;font-weight:bold;margin-bottom:1em;font-size:1.5em;margin-top:3em}.cp .dpt .titulo{margin-top:2em}.cp .dpt .capitulo{margin-top:1.5em;font-size:1.3em}.cp .dpt .secao{margin-top:1.2em;margin-bottom:0.7em;font-size:1.2em}.cp .dpt .subsecao,.cp .dpt .itemsecao{margin-top:1em;margin-bottom:0.6em;font-size:1.2em;font-style:italic}.cp .dpt .artigo{font-size:1.15em;float:left}.cp .dpt .artigo .dptt{position:relative}.cp .dpt .caput{margin-top:0.3333em;font-size:1.15em}.cp .dpt .paragrafo{font-size:1.1em;margin-top:0.2222em}.cp .dpt .inciso{font-size:1.1em;margin-top:0.1667em}.cp .dpt .alinea{font-size:1.0em;margin-top:2px}.cp .dpt .item{font-size:1.0em;margin-top:2px}.cp .dpt .bloco_alteracao{padding-left:10%;font-style:italic;color:#018}.cp .dpt .bloco_alteracao a{text-decoration:underline}.cp .dpt .bloco_alteracao a,.cp .dpt .bloco_alteracao table,.cp .dpt .bloco_alteracao table td{color:#018 !important}.cp .dpt .dn{font-weight:normal;position:relative;font-size:70%}.cp .dpt .dn p,.cp .dpt .dn ul{font-weight:normal;margin:0 0 0 0;list-style:none;padding:0}.cp .dpt .dn .dnl{display:block;text-align:left !important}.cp .dpt .dn .dnl *{display:inline}.cp .dpt .dn .dnl .bullet{padding:0 0.333em;display:inline-block}.cp .dpt .dn .dnl .dnli{min-height:2.5em}.cp .dpt .dn .dnl .dnli:hover ul{transition:opacity 0.5s linear, clip 0s 0.3s;clip:auto;opacity:1;background:rgba(230,230,230,0.9)}.cp .dpt .dn .dnl .dnli ul{transition:opacity 0.5s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;background:transparent;right:0;padding:0.2em 0.5em 0em 0.5em;border:1px solid #c7e3d3;border-top:0px;font-size:1.5rem}.cp .dpt .dn .dnl .dnli ul li{display:table-cell;color:#aaa}.cp .dpt .dn .dnl .dnli ul li:hover{color:#787}.cp .dpt .dn .dnl .dnli ul li:hover a{color:#27AE60 !important}.cp .dpt .dn .dnl .dnli ul li .nowner{color:#27AE60 !important}.cp .dpt .dn .dnl .dnli .ntitulo{font-weight:bold;color:#03A203;text-decoration:none}.cp .dpt .dn .dnl .dnli .ntitulo a{color:#294 !important}.cp .dpt .dn .dnl .dnli .ntexto{color:#06D806}.cp .dpt .dn .dnl .dnli .ntexto a{color:#03A203 !important}.cp .dpt .dn .dnl:hover{display:block}.cp .dpt .dn .dnl:hover *{display:block}.cp .dpt .dn .dnl:hover>.bullet{display:none}.cp .dpt .dn .dnl:hover .dnli{margin-top:0.5em;border-top:1px solid #c7e3d3}.cp .dpt .dptt>a{color:#444444}.cp .dpt .dptt>a.nota-alteracao{color:#02baf2;font-size:0.75em}.cp .dpt .dptt>a.nota-alteracao:hover{text-decoration:underline}.cp .dpt .dptt .dne{position:absolute;display:block;right:0;left:0;top:0;height:0;transform:scaleX(0);transform-origin:right;transition:all 0.3s ease;border-top:1px solid #2980B9}.cp .dpt .dptt .dne ul.btns-action{list-style:none;padding:0;position:absolute;right:0;background-color:#2980B9}.cp .dpt .dptt .dne ul.btns-action li{float:left}.cp .dpt .dptt .dne ul.btns-action li:hover{background-color:rgba(0,0,0,0.1)}.cp .dpt .dptt .dne ul.btns-action li a{color:white;padding:0.15em 1em 0;display:inline-block}.cp .dpt .dptt .dne-nota{position:relative;transform:scaleX(1);height:auto;border-top:0px}.cp .dpt .dptt .dne-nota ul.btns-action{display:none}.cp .dpt .dptt .dne-nota .dne-form{margin:1em -2em 0em;text-align:left;font-size:1.6rem}.cp .dpt .dptt:hover .dne{height:0.1667rem;transform:scaleX(1);transition-delay:1s}.cp .dpt .dptt:hover .dne-nota{height:auto;transition-delay:0s}.cp .tipo-vigencias{list-style:none;position:fixed;bottom:0px;left:50%;transform:translate(-50%, 0);margin:0;padding:0;background-color:#2980B9;z-index:1000;opacity:0.9;transition:all 0.3s ease-in-out}.cp .tipo-vigencias li{display:inline-block;border-left:1px solid #fff;float:left}.cp .tipo-vigencias li a{color:white;padding:0.3em 1em 0;display:inline-block;font-size:110%;cursor:pointer}.cp .tipo-vigencias li a.selected{background-color:rgba(0,0,0,0.5)}.cp .tipo-vigencias li:hover{background-color:rgba(0,0,0,0.2)}.cp .tipo-vigencias:hover{opacity:1}.cp.cpe .desativado,.cp.cpe .dpt .dptt>a.desativado{text-decoration:line-through;color:#999 !important}.cp.cpe .desativado table,.cp.cpe .dpt .dptt>a.desativado table,.cp.cpe .desativado table td,.cp.cpe .dpt .dptt>a.desativado table td{border:1px dotted #ccc}.cp.cpe .desativado a.nota-alteracao *{color:#02baf2 !important}.cp.cpe .dpt{display:block}.cp.cpe .dpt>.dpt-actions-fixed{position:absolute;right:-0.8em;top:-0.8em;z-index:3;opacity:0}.cp.cpe .dpt>.dpt-actions-fixed .activate{display:none}.cp.cpe .dpt>.dpt-actions-fixed .deactivate{display:inline}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-default{color:#333}.cp.cpe .dpt>.dpt-actions-fixed .btn-dpt-edit.btn-default:hover{color:#fff;background-color:#02baf2}.cp.cpe .dpt>.dpt-actions,.cp.cpe .dpt>.dpt-actions-bottom{display:none}.cp.cpe .dpt>.dpt-text{cursor:text;min-height:30px;border:1px solid transparent}.cp.cpe .dpt>.dpt-text:hover,.cp.cpe .dpt>.dpt-text.hover-fixed{background-color:rgba(0,0,0,0.01);color:#2980B9;border:1px solid #eee;transition:color 0.3s ease}.cp.cpe .dpt>.dpt-text.artigo{float:none}.cp.cpe .dpt>.dpt-text a.link-rotulo{color:#000}.cp.cpe .dpt:hover>.dpt-actions-fixed{opacity:1}.cp.cpe .dpt:hover>.dpt-actions-fixed:hover ~ .dpt-text{background-color:rgba(0,0,0,0.01);color:#2980B9;border:1px solid #eee;transition:color 0.3s ease}.cp.cpe .dpt .semtexto{font-weight:bold;color:#9aaed6}.cp.cpe .dpt .semtexto:hover{color:#5f76a4}.cp.cpe .dpt-alts{margin:0;margin-bottom:1em;padding:0;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe .dpt-alts:hover{border-color:#d9ddde}.cp.cpe .dpt-alts:empty{border-color:#ddd}.cp.cpe .dpt-alts.drag{width:100% !important;border-color:#d9ddde}.cp.cpe .dpt-alts.drag .dpt{transition-duration:0s !important}.cp.cpe .dpt-alts .dpt{width:100% !important;box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,0.12),0 2px 4px rgba(0,0,0,0.24);padding:0;margin:0;background-color:#edf0f1;height:auto !important;min-height:2em;z-index:1}.cp.cpe .dpt-alts .dpt:not(:first-child){border-top:1px solid white}.cp.cpe .dpt-alts .dpt>.dpt-text{padding:0.3em 1em;margin-top:0;margin-bottom:0}.cp.cpe .dpt-alts .dpt>.dpt-text a.link-rotulo{text-decoration:underline}.cp.cpe .dpt-alts .dpt-selected.dpt{margin:0em -0.5em}.cp.cpe .dpt-selected.dpt{width:auto !important;margin:1em -0.5em;border:1px solid #fad46b !important;padding:0;background-color:#fafafa;border-radius:3px;z-index:4}.cp.cpe .dpt-selected.dpt>.dpt-text{border:1px solid transparent}.cp.cpe .dpt-selected.dpt>.dpt-text:hover{border:1px solid transparent;background-color:transparent}.cp.cpe .dpt-selected.dpt>.dpt-form{margin-bottom:0em}.cp.cpe .dpt-selected.dpt>.dpt-actions,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{display:table;background-color:#e5e5e5;padding:1em;margin-bottom:0em;width:100%}.cp.cpe .dpt-selected.dpt>.dpt-actions>.btn-action,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom>.btn-action{display:table-cell;float:none}.cp.cpe .dpt-selected.dpt>.dpt-actions .btn-excluir,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btn-excluir,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar{display:inline-block;opacity:0.3}.cp.cpe .dpt-selected.dpt>.dpt-actions .btn-excluir:hover,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar:hover,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions .csform .actions_inserts>li>a.btn-salvar:hover,.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .btn-excluir:hover,.cp.cpe .cp.cpe1_old_apagar .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar:hover,.cp.cpe1_old_apagar .cp.cpe .dpt-selected.dpt>.dpt-actions-bottom .csform .actions_inserts>li>a.btn-salvar:hover{opacity:1}.cp.cpe .dpt-selected.dpt>.dpt-actions-bottom{margin:0}.cp.cpe .dpt-selected .dpt-block{border-top:1px solid #e5e5e5 !important;opacity:0.6;transition:opacity 0.4s ease}.cp.cpe .dpt-selected .dpt-block:hover{opacity:1}.cp.cpe .dpt-selected .dpt-text{opacity:0.7;margin:0;padding:0.7em}.cp.cpe .dpt-selected .dpt-text:hover{opacity:1;background-color:#f5f5f5}.cp.cpe .dpt-selected .dpt-alts{margin:1em}.cp.cpe .dpt-selected .dpt-alts .dpt{box-shadow:0 0 0}.cp.cpe .dpt-selected>.dpt-actions-fixed{opacity:1;top:-12px;right:0.5em}.cp.cpe .dpt-selected>.dpt-actions-fixed .activate{display:inline}.cp.cpe .dpt-selected>.dpt-actions-fixed .deactivate{display:none}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit{padding-top:2px;padding-bottom:1px}.cp.cpe .dpt-selected>.dpt-actions-fixed .btn-dpt-edit.btn-default{background-color:#fad46b;border:1px solid #fad46b}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left{right:auto !important;left:0;padding:2px 0}.cp.cpe .dpt-selected .dropdown-menu.dropdown-menu-left>.top.arrow{right:88%;left:auto}.cp.cpe .dpt-selected .dropdown-menu li a{padding-top:2px;padding-bottom:2px}.cp.cpe .dpt-selected .btn-group .radius-right{border-bottom-right-radius:4px !important;border-top-right-radius:4px !important}.cp.cpe .dpt-selected:hover>.dpt-actions-fixed{opacity:1}.cp.cpe1_old_apagar{margin-bottom:15em}.cp.cpe1_old_apagar .desativado,.cp.cpe1_old_apagar .dpt .dptt>a.desativado,.cp.cpe1_old_apagar .desativado *,.cp.cpe1_old_apagar .dpt .dptt>a.desativado *{text-decoration:line-through;color:#999 !important}.cp.cpe1_old_apagar .desativado table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table,.cp.cpe1_old_apagar .desativado table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado table td,.cp.cpe1_old_apagar .desativado * table,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table,.cp.cpe1_old_apagar .desativado * table td,.cp.cpe1_old_apagar .dpt .dptt>a.desativado * table td{border:1px dotted #ccc}.cp.cpe1_old_apagar a{text-decoration:none;cursor:pointer}.cp.cpe1_old_apagar .dpt{position:relative;display:block}.cp.cpe1_old_apagar .dpt .semtexto{font-weight:bold;color:#BFD1F6}.cp.cpe1_old_apagar .dpt .artigo{float:none}.cp.cpe1_old_apagar .dpt .caput{margin-top:0}.cp.cpe1_old_apagar .dpt>.actions_right,.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left{color:#fff;right:0em;position:absolute;opacity:0;transition:all 0.4s ease-in-out;z-index:1000}.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco{background-color:#3498db;color:#ffffff !important;padding:8px 18px 6px;display:inline-block;line-height:1;float:right}.cp.cpe1_old_apagar .dpt>.actions_right a.btn-bloco:hover,.cp.cpe1_old_apagar .dpt-selected .csform .dpt>.actions_left a.btn-bloco:hover{opacity:1;background-image:-webkit-linear-gradient(top, #1c81c4, #0b6dad);background-image:-moz-linear-gradient(top, #1c81c4, #0b6dad);background-image:-ms-linear-gradient(top, #1c81c4, #0b6dad);background-image:-o-linear-gradient(top, #1c81c4, #0b6dad);background-image:linear-gradient(to bottom, #1c81c4, #0b6dad)}.cp.cpe1_old_apagar .dpt:hover>.actions_right,.cp.cpe1_old_apagar .dpt-selected .csform .dpt:hover>.actions_left{opacity:1}.cp.cpe1_old_apagar .dpt .bloco{display:block;clear:both}.cp.cpe1_old_apagar .dpt .bloco *:hover{color:#27AE60}.cp.cpe1_old_apagar .dpt .bloco .de{cursor:pointer}.cp.cpe1_old_apagar .dpt .articulacao{border-top:2px solid #e5e5e5;margin:2em 0}.cp.cpe1_old_apagar .dpt .bloco_alteracao{margin:1em 0;padding:0em;background-color:transparent;min-height:100px;border:2px dashed #fff}.cp.cpe1_old_apagar .dpt .bloco_alteracao:hover{border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag{width:100% !important;border-color:#d9ddde}.cp.cpe1_old_apagar .dpt .bloco_alteracao.drag .dpt{transition-duration:0s !important}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt{width:100% !important;box-shadow:0 -1px 0 #e5e5e5,0 0 2px rgba(0,0,0,0.12),0 2px 4px rgba(0,0,0,0.24);padding:0.3em 1em;margin:0;background-color:#edf0f1;z-index:1}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt:not(:first-child){border-top:1px solid white}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.ui-draggable div{cursor:pointer}.cp.cpe1_old_apagar .dpt .bloco_alteracao .dpt.dpt-comp-selected{transition:all 0.3s ease;width:auto !important;margin:2em -3.7em;box-shadow:0 0 6px rgba(0,0,0,0.16),0 6px 12px rgba(0,0,0,0.32)}.cp.cpe1_old_apagar .dpt-selected{font-size:1em;border:0px solid #CCC;margin:1em -1.8em 1em -1.8em;padding:2.2em 2.2em 1.6em 2.2em;box-shadow:-4px 15px 15px rgba(0,0,0,0.1),0px 6px 6px rgba(0,0,0,0.23);background-image:-webkit-linear-gradient(top, #eaeaee, #ddd);background-image:-moz-linear-gradient(top, #eaeaee, #ddd);background-image:-ms-linear-gradient(top, #eaeaee, #ddd);background-image:-o-linear-gradient(top, #eaeaee, #ddd);background-image:linear-gradient(to bottom, #eaeaee, #ddd)}.cp.cpe1_old_apagar .dpt-selected ul{list-style:none;margin:0;padding:0}.cp.cpe1_old_apagar .dpt-selected .semtexto{color:#999}.cp.cpe1_old_apagar .dpt-selected .bloco{opacity:0.5}.cp.cpe1_old_apagar .dpt-selected .bloco:hover{opacity:1}.cp.cpe1_old_apagar .dpt-selected .bloco a:hover{background:transparent}.cp.cpe1_old_apagar .dpt-selected>.bloco{opacity:1;margin:1em}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao{margin:0;padding:1em;border:0 transparent;background-image:-webkit-linear-gradient(top, #eaeaee, #ddd);background-image:-moz-linear-gradient(top, #eaeaee, #ddd);background-image:-ms-linear-gradient(top, #eaeaee, #ddd);background-image:-o-linear-gradient(top, #eaeaee, #ddd);background-image:linear-gradient(to bottom, #eaeaee, #ddd)}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao:hover{border-color:transparent}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag{width:100% !important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao.drag .dpt{transition-duration:0s !important}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt{width:auto !important;transition:all 0.3s ease;background-color:white}.cp.cpe1_old_apagar .dpt-selected .bloco_alteracao .dpt:not(:first-child){border-top:0px solid white}.cp.cpe1_old_apagar .dpt-selected>.dpt{padding:0}.cp.cpe1_old_apagar .dpt-selected>.dpt:last-child{padding-bottom:1em}.cp.cpe1_old_apagar .dpt-selected>.actions_right a.btn-bloco,.cp.cpe1_old_apagar .dpt-selected .csform .dpt-selected>.actions_left a.btn-bloco{display:none}.cp.cpe1_old_apagar .dpt-selected .csform{display:block;clear:both;z-index:9;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action{-webkit-animation:fadeIn 1s ease-in-out;-moz-animation:fadeIn 1s ease-in-out;-o-animation:fadeIn 1s ease-in-out;opacity:1;position:absolute;display:table;transition:all 0.4s ease-in-out}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action a{color:#16407c;display:block;background:transparent;vertical-align:middle;text-align:center;font-weight:normal;text-shadow:0 0 10px rgba(0,0,0,0.3);padding:0.33em 0.4em}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li{position:relative;display:table-cell;vertical-align:top}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover{background-color:rgba(255,255,255,0.5)}.cp.cpe1_old_apagar .dpt-selected .csform .btns-action>li:hover>a{text-shadow:0 0 5px #777;color:#0a5}.cp.cpe1_old_apagar .dpt-selected .csform .label_status{position:absolute;bottom:0;right:0;color:#889;padding:0.3em;font-size:80%;text-align:right;z-index:15;display:table}.cp.cpe1_old_apagar .dpt-selected .csform .label_status li{display:table-cell;padding:0 0.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents{z-index:11;top:0em;left:0em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents a{padding:0.62em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div,.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents li{font-size:80%;display:table-cell;vertical-align:middle;border-right:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents div{padding:0 0.4em;font-stretch:condensed;font-variant:small-caps;font-weight:bold;text-shadow:0 0 10px #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_parents>li:hover a{color:#16407c;font-weight:normal}.cp.cpe1_old_apagar .dpt-selected .csform .actions_top,.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:0em;right:0em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_top a,.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding-right:1em;padding-left:1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_top li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{display:table-cell;vertical-align:middle;border-left:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom{top:auto;left:0;bottom:0;display:inline-block;border-top:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom a{padding:0 0.4em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_bottom li{border:0px;border-right:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_right,.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{top:2.2em;right:0em;bottom:0;display:block}.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li,.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li{width:2.2em;display:block;border-bottom:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_right li:first-child,.cp.cpe1_old_apagar .dpt-selected .csform .actions_left li:first-child{border-top:1px solid #CCC}.cp.cpe1_old_apagar .dpt-selected .csform .actions_left{right:auto;left:0em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts{background:transparent;position:relative;z-index:19;display:table;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li{display:table-cell}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:hover>a{background-image:-webkit-linear-gradient(top, #1c81c4, #0b6dad);background-image:-moz-linear-gradient(top, #1c81c4, #0b6dad);background-image:-ms-linear-gradient(top, #1c81c4, #0b6dad);background-image:-o-linear-gradient(top, #1c81c4, #0b6dad);background-image:linear-gradient(to bottom, #1c81c4, #0b6dad)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a{background-image:-webkit-linear-gradient(top, #3498DB, #2980C9);background-image:-moz-linear-gradient(top, #3498DB, #2980C9);background-image:-ms-linear-gradient(top, #3498DB, #2980C9);background-image:-o-linear-gradient(top, #3498DB, #2980C9);background-image:linear-gradient(to bottom, #3498DB, #2980C9);border-right:1px solid #fff;padding:0.2em;display:block;color:white;text-align:center;white-space:nowrap}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{text-align:left;background:#A70808;color:#c99;padding-left:1.7em;position:relative}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir:hover,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background-color:#c70808;color:#ecc}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-excluir::before,.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before{z-index:20;position:absolute;background:url(/static/img/icon_delete_white.png) no-repeat 50% 50%;content:"";top:0;left:0;display:block;color:black;margin-left:0.4em;height:100%;width:2em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar{background:#1f8b4d;color:white}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar:hover{background:#2d9c5c;color:white}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before{background:url(/static/img/icon_save_white.png) no-repeat 50% 50%}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a span{padding:0 0.7em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li:last-child>a{border-right:0px solid #fff}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li:nth-child(even) a{background:#3385CA}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a{border-right:1px solid #fff;display:block;color:white;background:#2980C9;font-size:80%;padding:0.23em 1em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>ul li a:hover{background:#0a5ea4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior{table-layout:fixed}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li a{border-right:0px !important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.add_prior:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir{display:block;position:static}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{border-right:0px !important}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{right:0.5em}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a{background-color:#A70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li a:hover{background:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child::before{border-color:transparent transparent #A70808;right:10%;left:auto}.cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child:hover::before{border-color:transparent transparent #c70808}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo{z-index:2000}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li a,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li a{border-right:0px !important}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child::before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul li:first-child:hover::before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li>ul::after,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li:hover>ul,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante>li.menu_excluir>ul li:first-child::before,.cp.cpe1_old_apagar .dpt-selected .csform .menu_flutuante_fixo>li.menu_excluir>ul li:first-child::before{right:auto;left:0.9375rem}.cp.cpe1_old_apagar .dpt-selected .csform textarea{margin:0;resize:vertical;min-height:12.6em;border:0px;font-size:120%;width:100%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:focus{background:#fff}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-webkit-input-placeholder{color:#c70808;opacity:0.6;font-size:80%}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea::-moz-placeholder{color:#c70808}.cp.cpe1_old_apagar .dpt-selected .csform textarea:-ms-input-placeholder{color:#c70808;opacity:0.6}.cp.cpe1_old_apagar .selected{background-color:rgba(255,255,255,0.5)}.cp.cpe1_old_apagar .selected a:hover{color:#16407c !important;font-weight:normal !important}.result-busca-dispositivo,.lista-dispositivo{padding:0 0 1em;min-height:3em}.result-busca-dispositivo ul,.lista-dispositivo ul{list-style:none;margin:0;padding:1em 0 0;transition:all 2s linear;clear:both}.result-busca-dispositivo ul li,.lista-dispositivo ul li{display:table;border-collapse:separate;border-bottom:1px solid white;width:100%}.result-busca-dispositivo ul li.ta_title,.lista-dispositivo ul li.ta_title{background-color:rgba(0,0,0,0.15);border-radius:4px 4px 0 0;width:100%}.result-busca-dispositivo ul li.ta_title span,.lista-dispositivo ul li.ta_title span{padding:0.5em}.result-busca-dispositivo ul li:last-child .itemlabel,.lista-dispositivo ul li:last-child .itemlabel{border-radius:0 0 4px 0px;margin:0px}.result-busca-dispositivo ul li:last-child .iteminput,.lista-dispositivo ul li:last-child .iteminput{border-radius:0 0 0px 4px}.result-busca-dispositivo ul li .iteminput,.lista-dispositivo ul li .iteminput{background-color:rgba(0,0,0,0.1);border-right:1px solid white;display:table-cell;padding:0.5em;vertical-align:middle;text-align:center}.result-busca-dispositivo ul li .iteminput input,.lista-dispositivo ul li .iteminput input{margin:0}.result-busca-dispositivo ul li .itemlabel,.lista-dispositivo ul li .itemlabel{background-color:rgba(0,0,0,0.1);display:table-cell;padding:0.5em;vertical-align:middle;width:100%}.result-busca-dispositivo ul li .itemlabel label,.lista-dispositivo ul li .itemlabel label{line-height:1;font-family:"SourceSansPro", Helvetica, Arial, sans-serif;display:block;margin:0px}.result-busca-dispositivo ul li .itemlabel .artigo,.lista-dispositivo ul li .itemlabel .artigo{float:none}.result-busca-dispositivo .nomenclatura_heranca,.lista-dispositivo .nomenclatura_heranca{font-size:90%;color:#057dba;display:inline}.cp-nav-parents>.dropdown-menu{left:0;right:auto}.cp-nav-parents>.dropdown-menu::before{content:'';position:absolute;top:-11px;width:100%;height:11px}.cp-nav-parents:hover>.dropdown-menu{display:block}.table-notificacoes tbody tr td{border-top:1px solid white;padding:5px;vertical-align:middle}.table-notificacoes tbody tr td ul{margin:0px}.table-notificacoes tbody tr td ul li:hover{background-color:rgba(0,0,0,0.1)}.btn-modal-open{float:right}.class_color_container{background:#ddd !important}.clear{clear:both}.mce-tinymce.mce-container{border:1px solid #ccc !important;margin-right:2px}.mce-btn button:hover{background-color:rgba(0,0,0,0.1) !important;text-shadow:0 0 5px #fff;box-shadow:0 0 5px #777}.mce-menu{background:#eee !important}.displaynone{display:none !important}@media only screen and (max-width: 800px){.cp .fixed{z-index:98;position:relative}.cp.cpe1 .dpt-selected{margin:1em 0}.cp.cpe1 .dpt-selected .csform .actions_parents,.cp.cpe1 .dpt-selected .csform .label_status{font-size:80%;position:static !important;display:block !important;padding:0em;height:auto !important;left:0;right:auto;text-align:left}.cp.cpe1 .dpt-selected .csform .actions_parents div,.cp.cpe1 .dpt-selected .csform .actions_parents li,.cp.cpe1 .dpt-selected .csform .label_status div,.cp.cpe1 .dpt-selected .csform .label_status li{display:inline-block !important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul{transform:translateY(30px);transition:transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s;clip:rect(0, 0, 0, 0);opacity:0;position:absolute;margin-left:0.5em;box-shadow:0px 6px 18px rgba(0,0,0,0.19),0px 2px 6px rgba(0,0,0,0.23);-webkit-transition-delay:0.4s;transition-delay:0.4s}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li a{border-right:0px !important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child::before{border-width:0.375rem;border-style:inset inset solid;content:"";display:block;height:0px;width:0px;border-color:transparent transparent #3385CA;position:absolute;top:-0.71rem;left:0.9375rem}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul li:first-child:hover::before{border-color:transparent transparent #0A5EA4}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>ul::after{content:"";position:absolute;z-index:-1;left:0;top:rem-calc(-25px);height:rem-calc(25px);width:100%;transition:all 0.3s cubic-bezier(0.55, 0, 0.1, 1)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li:hover>ul{transform:translateY(7px);transition:transform 0.4s linear, opacity 0.4s linear, clip 0s 0.2s;opacity:1;clip:rect(-100px, 2000px, 2000px, -100px)}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a span{display:none}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir,.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar{padding-left:0;min-width:1em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-excluir::before,.cp.cpe1 .cp.cpe1_old_apagar .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before,.cp.cpe1_old_apagar .cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before,.cp.cpe1 .dpt-selected .csform .actions_inserts>li>a.btn-salvar::before{width:100%;margin:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next,.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior{position:static}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul{left:1em !important;right:1em !important;margin-left:0}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_in>ul li:first-child::before{left:37%}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_next>ul{left:0 !important;right:1em !important}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul{left:1em !important;right:0 !important;margin-left:0;margin-right:0.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.add_prior>ul li:first-child::before{right:42%;left:auto}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul{left:10% !important;right:0 !important;margin-left:0;margin-right:0.5em}.cp.cpe1 .dpt-selected .csform .actions_inserts>li.menu_excluir>ul li:first-child::before{right:0;left:auto}}@media print{.cp .vigencias,.toggle-topbar,.menu-icon,.button,.tipo-vigencias,.dne{display:none}#btn_font_menos,#btn_font_mais{display:none}.container{width:100%}} diff --git a/sapl/static/styles/style_tinymce.css b/sapl/static/styles/style_tinymce.css deleted file mode 100644 index d2909b025..000000000 --- a/sapl/static/styles/style_tinymce.css +++ /dev/null @@ -1,8 +0,0 @@ -.mce-content-body { - font-family: "Open Sans" "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; - font-style: normal; - font-weight: normal; - line-height: 1.5; - font-size: 1em; - color: #444444; -} \ No newline at end of file From 0b4aa5d448efe804fbaba41a2434e3880086af02 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Fri, 5 May 2017 11:09:24 -0300 Subject: [PATCH 03/17] =?UTF-8?q?Coloca=20permiss=C3=A3o=20na=20mudan?= =?UTF-8?q?=C3=A7a=20dinamica=20de=20ordena=C3=A7=C3=A3o=20de=20mat=C3=A9r?= =?UTF-8?q?ias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/sessao/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 3bcba074e..47f887c7b 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2462,12 +2462,13 @@ class AdicionarVariasMateriasOrdemDia(AdicionarVariasMateriasExpediente): @csrf_exempt +@permission_required('sessao.change_expedientemateria', + 'sessao.change_ordemdia') def mudar_ordem_materia_sessao(request): # Pega os dados vindos da requisição posicao_inicial = int(request.POST['pos_ini']) + 1 posicao_final = int(request.POST['pos_fim']) + 1 pk_sessao = int(request.POST['pk_sessao']) - pk_list = request.POST.getlist('pk_list[]') materia = request.POST['materia'] From 7c2907caab2bb59473edd5cb285e3725d2a45f4e Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 5 May 2017 13:08:46 -0300 Subject: [PATCH 04/17] =?UTF-8?q?HOT-FIX:=20conserta=20nome=20de=20vari?= =?UTF-8?q?=C3=A1vel=20errada.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/sessao/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 47f887c7b..852444752 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2019,7 +2019,7 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin): expediente_id=expediente_id).last() votacao_existente = {'observacao': sub( ' ', ' ', strip_tags(votacao.observacao)), - 'resultado': votacao.tipo_resultado.nome, + 'resultado': votacao.tipo_resultado_votacao.nome, 'tipo_resultado': votacao.tipo_resultado_votacao_id} context.update({'votacao_titulo': titulo, From 1a400d9ca7d0385550b88d7986524cfeb3fddf4f Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 5 May 2017 14:03:45 -0300 Subject: [PATCH 05/17] Fix bug in bower install --- Dockerfile | 4 +++- requirements/requirements.txt | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 64208fe1b..59bee177e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,9 @@ RUN pip install -r /var/interlegis/sapl/requirements/requirements.txt --upgrade COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env -RUN python3 manage.py bower install -- --allow-root && \ +# manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 + +RUN python3 manage.py bower_install -- --allow-root --no-input && \ python3 manage.py collectstatic --no-input && \ rm -rf /var/interlegis/sapl/sapl/.env && \ rm -rf /var/interlegis/sapl/sapl.db diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 6d7592cda..7fd7dbd80 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -15,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.3 djangorestframework drfdocs easy-thumbnails==2.3 From 9b40b34dd56591536818bb002be67de0a873b586 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Fri, 5 May 2017 14:20:44 -0300 Subject: [PATCH 06/17] Pick from sapl latest --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index cd899e6c4..50bdf6512 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ sapldb: ports: - "5532:5432" sapl: - build: . + image: interlegis/sapl:latest volumes: - sapl_data:/var/interlegis/sapl/data - sapl_media:/var/interlegis/sapl/media From ce0d0ff6e9232011c7f191d928dd324e0421e6fa Mon Sep 17 00:00:00 2001 From: Luciano Almeida Date: Mon, 8 May 2017 15:56:22 -0300 Subject: [PATCH 07/17] Muda jeito e pegar ultimo valor do model Signed-off-by: Luciano Almeida --- sapl/legacy/migration.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 6ab3cd184..0d2f5be10 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -130,9 +130,7 @@ def get_fk_related(field, value, label=None): if not field.null: fields_dict = get_fields_dict(field.related_model) # Cria stub ao final da tabela para evitar erros - pk = 1 - if hasattr(field.related_model.objects.last(), 'pk'): - pk = field.related_model.objects.last().pk + pk = get_last_value(field.related_model) with reversion.create_revision(): reversion.set_comment('Stub criado pela migração') value = mommy.make( From 30b61d9f84cd6ea651e56a69ae8cb54bb9b01a30 Mon Sep 17 00:00:00 2001 From: Luciano Almeida Date: Mon, 8 May 2017 16:01:44 -0300 Subject: [PATCH 08/17] Adiciona colunas no script sql Signed-off-by: Luciano Almeida --- sapl/legacy/scripts/fix_tables.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sapl/legacy/scripts/fix_tables.sql b/sapl/legacy/scripts/fix_tables.sql index 479a2ed5e..ed93373b1 100644 --- a/sapl/legacy/scripts/fix_tables.sql +++ b/sapl/legacy/scripts/fix_tables.sql @@ -2,15 +2,19 @@ SELECT REPLACE(@@sql_mode,'STRICT_TRANS_TABLES,',''); -- Exclui procedures caso já existam DROP PROCEDURE IF EXISTS verifica_campos_proposicao; +DROP PROCEDURE IF EXISTS verifica_campos_tipo_materia_legislativa; DROP PROCEDURE IF EXISTS verifica_campos_sessao_plenaria_presenca; DROP PROCEDURE IF EXISTS cria_lexml_registro_provedor_e_publicador; -- Procedure para criar campo num_proposicao em proposicao CREATE PROCEDURE verifica_campos_proposicao() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='proposicao' AND column_name='num_proposicao') THEN ALTER TABLE proposicao ADD COLUMN num_proposicao INT(11) NULL after txt_justif_devolucao; END IF; END; +-- Procedure para criar campo iind_num_automatica em tipo_materia_legislativa +CREATE PROCEDURE verifica_campos_tipo_materia_legislativa() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='tipo_materia_legislativa' AND column_name='ind_num_automatica') THEN ALTER TABLE tipo_materia_legislativa ADD COLUMN ind_num_automatica BOOLEAN NULL DEFAULT FALSE after des_tipo_materia; END IF; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='tipo_materia_legislativa' AND column_name='quorum_minimo_votacao') THEN ALTER TABLE tipo_materia_legislativa ADD COLUMN quorum_minimo_votacao INT(11) NULL after ind_num_automatica; END IF; END; -- Procedure para criar campos cod_presenca_sessao (sendo a nova PK da tabela) e dat_sessao em sessao_plenaria_presenca CREATE PROCEDURE verifica_campos_sessao_plenaria_presenca() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='sessao_plenaria_presenca' AND column_name='cod_presenca_sessao') THEN ALTER TABLE sessao_plenaria_presenca DROP PRIMARY KEY, ADD cod_presenca_sessao INT AUTO_INCREMENT PRIMARY KEY FIRST; END IF; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='sessao_plenaria_presenca' AND column_name='dat_sessao') THEN ALTER TABLE sessao_plenaria_presenca ADD COLUMN dat_sessao DATE NULL after cod_parlamentar; END IF; END; -- Procedure para criar tabela lexml_registro_provedor e lexml_registro_publicador CREATE PROCEDURE cria_lexml_registro_provedor_e_publicador() BEGIN IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='lexml_registro_publicador') THEN CREATE TABLE lexml_registro_publicador (cod_publicador INT AUTO_INCREMENT NOT NULL, id_publicador INT, nom_publicador VARCHAR(255), adm_email VARCHAR(50), sigla VARCHAR(255), nom_responsavel VARCHAR(255), tipo VARCHAR(50), id_responsavel INT, PRIMARY KEY (cod_publicador)); END IF; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='lexml_registro_provedor') THEN CREATE TABLE lexml_registro_provedor (cod_provedor INT AUTO_INCREMENT NOT NULL, id_provedor INT, nom_provedor VARCHAR(255), sgl_provedor VARCHAR(15), adm_email VARCHAR(50), nom_responsavel VARCHAR(255), tipo VARCHAR(50), id_responsavel INT, xml_provedor LONGTEXT, PRIMARY KEY (cod_provedor)); END IF; END; -- Executa as procedures criadas acima CALL verifica_campos_proposicao; +CALL verifica_campos_tipo_materia_legislativa; CALL verifica_campos_sessao_plenaria_presenca; CALL cria_lexml_registro_provedor_e_publicador; From ef4441d4e394e4a8946f1f6a256e202567259491 Mon Sep 17 00:00:00 2001 From: eduardocalil Date: Tue, 9 May 2017 12:53:36 -0300 Subject: [PATCH 09/17] Fix #1056 (#1059) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #1056 * Retira try-except desnecessário --- sapl/parlamentares/views.py | 43 +++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index d703e1c2c..afbe80ed0 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1,7 +1,7 @@ from django.contrib import messages -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from django.core.urlresolvers import reverse, reverse_lazy -from django.db.models import F +from django.db.models import F, Q from django.http.response import HttpResponseRedirect from django.utils.datastructures import MultiValueDictKeyError from django.utils.translation import ugettext_lazy as _ @@ -344,8 +344,47 @@ class ParlamentarCrud(Crud): # Tira Link do avatar_html e coloca no nome for row in context['rows']: + # Coloca a filiação atual ao invés da última + if row[0][1]: + # Pega o Parlamentar por meio da pk + parlamentar = Parlamentar.objects.get( + id=(row[0][1].split('/')[-1])) + + # Pega a Legislatura + legislatura = Legislatura.objects.get( + id=context['legislatura_id']) + + # As condições para mostrar a filiação são: + # A data de filiacao deve ser menor que a data de fim + # da legislatura e data de desfiliação deve nula, ou maior, + # ou igual a data de fim da legislatura + try: + filiacao = parlamentar.filiacao_set.get(Q( + data__lte=legislatura.data_fim, + data_desfiliacao__gte=legislatura.data_fim) | Q( + data__lte=legislatura.data_fim, + data_desfiliacao__isnull=True)) + + # Caso não exista filiação com essas condições + except ObjectDoesNotExist: + row[2] = ('Não possui filiação', None) + + # Caso exista mais de uma filiação nesse intervalo + # Entretanto, NÃO DEVE OCORRER + except MultipleObjectsReturned: + filiacao = parlamentar.filiacao_set.filter(Q( + data__lte=legislatura.data_fim, + data_desfiliacao__gte=legislatura.data_fim) | Q( + data__lte=legislatura.data_fim, + data_desfiliacao__isnull=True)).last() + + # Caso encontre UMA filiação nessas condições + else: + row[2] = (filiacao.partido.sigla, None) + row[1] = (row[1][0], row[0][1]) row[0] = (row[0][0], None) + return context From a7ed403bc08729de84c55ef4585b404d0752f045 Mon Sep 17 00:00:00 2001 From: eduardocalil Date: Tue, 9 May 2017 12:54:20 -0300 Subject: [PATCH 10/17] Fix #1012 bug mesa diretora (#1022) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Inicia o bug fix * Refatora funcionalidades de inserção e remoção * Lança os possíveis erros para o usuário na tela * Otimiza o codigo --- sapl/parlamentares/urls.py | 17 +- sapl/parlamentares/views.py | 235 ++++++----- sapl/static/js/app.js | 17 + .../parlamentares/composicaomesa_form.html | 371 ++++++++++++++---- 4 files changed, 463 insertions(+), 177 deletions(-) diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 1d9885053..29a31adfb 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -1,14 +1,18 @@ from django.conf.urls import include, url -from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, +from sapl.parlamentares.views import (altera_field_mesa, + CargoMesaCrud, ColigacaoCrud, ComposicaoColigacaoCrud, DependenteCrud, FiliacaoCrud, FrenteCrud, FrenteList, - LegislaturaCrud, MandatoCrud, + LegislaturaCrud, + insere_parlamentar_composicao, + MandatoCrud, MesaDiretoraView, NivelInstrucaoCrud, ParlamentarCrud, ParticipacaoParlamentarCrud, PartidoCrud, ProposicaoParlamentarCrud, RelatoriaParlamentarCrud, + remove_parlamentar_composicao, SessaoLegislativaCrud, TipoAfastamentoCrud, TipoDependenteCrud, TipoMilitarCrud, VotanteView) @@ -51,4 +55,13 @@ urlpatterns = [ url(r'^mesa-diretora/$', MesaDiretoraView.as_view(), name='mesa_diretora'), + + url(r'^mesa-diretora/altera-field-mesa/$', + altera_field_mesa, name='altera_field_mesa'), + + url(r'^mesa-diretora/insere-parlamentar-composicao/$', + insere_parlamentar_composicao, name='insere_parlamentar_composicao'), + + url(r'^mesa-diretora/remove-parlamentar-composicao/$', + remove_parlamentar_composicao, name='remove_parlamentar_composicao'), ] diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index afbe80ed0..3c6ac630a 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -2,6 +2,7 @@ from django.contrib import messages from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from django.core.urlresolvers import reverse, reverse_lazy from django.db.models import F, Q +from django.http import JsonResponse from django.http.response import HttpResponseRedirect from django.utils.datastructures import MultiValueDictKeyError from django.utils.translation import ugettext_lazy as _ @@ -434,6 +435,11 @@ class MesaDiretoraView(FormView): [p.parlamentar for p in parlamentares]) - set( parlamentares_ocupados)) + # Se todos os cargos estiverem ocupados, a listagem de parlamentares + # deve ser renderizada vazia + if not cargos_vagos: + parlamentares_vagos = [] + return self.render_to_response( {'legislaturas': Legislatura.objects.all( ).order_by('-numero'), @@ -447,107 +453,138 @@ class MesaDiretoraView(FormView): 'cargos_vagos': cargos_vagos }) - def existe_membro_mesa(self, sessao_plenaria, cargo): - return ComposicaoMesa.objects.filter( - sessao_legislativa_id=sessao_plenaria.id, - # parlamentar_id = integrante.parlamentar_id, - cargo_id=cargo.id - ).exists() - - def post(self, request, *args, **kwargs): - - if (not Legislatura.objects.exists() or - not SessaoLegislativa.objects.exists()): - return self.validation(request) - - if 'Incluir' in request.POST and request.user.has_perm( - '%s.add_%s' % ( - AppConfig.label, ComposicaoMesa._meta.model_name)): - - composicao = ComposicaoMesa() - - try: - composicao.sessao_legislativa = SessaoLegislativa.objects.get( - id=int(request.POST['sessao'])) - except MultiValueDictKeyError: - messages.error(request, _( - 'Nenhuma sessão foi inserida!')) - return self.get(request) - - try: - composicao.parlamentar = Parlamentar.objects.get( - id=int(request.POST['parlamentar'])) - except MultiValueDictKeyError: - messages.error(request, _( - 'Nenhum parlamentar foi inserido!')) - return self.get(request) - try: - composicao.cargo = CargoMesa.objects.get( - id=int(request.POST['cargo'])) - if self.existe_membro_mesa(composicao.sessao_legislativa, - composicao.cargo): - messages.error(request, _('Parlamentar já inserido!')) - return self.get(request) - - composicao.save() - except MultiValueDictKeyError: - messages.error(request, _( - 'Nenhum cargo foi inserido!')) - return self.get(request) - - messages.success(request, _( - 'Parlamentar adicionado com sucesso!')) - - elif 'Excluir' in request.POST and request.user.has_perm( - '%s.delete_%s' % ( - AppConfig.label, ComposicaoMesa._meta.model_name)): +def altera_field_mesa(request): + """ + Essa função lida com qualquer alteração nos campos + da Mesa Diretora, após qualquer + operação (Legislatura/Sessão/Inclusão/Remoção), + atualizando os campos após cada alteração + """ + + legislatura = request.GET['legislatura'] + sessoes = SessaoLegislativa.objects.filter( + legislatura=legislatura).order_by('-data_inicio') + + if not sessoes: + return JsonResponse({'msg': ('Nenhuma sessão encontrada!', 0)}) + + # Verifica se já tem uma sessão selecionada. Ocorre quando + # é alterado o campo de sessão ou feita alguma operação + # de inclusão/remoção. + if request.GET['sessao']: + sessao_selecionada = request.GET['sessao'] + # Caso a mudança tenha sido no campo legislatura, a sessão + # atual deve ser a primeira daquela legislatura + else: + sessao_selecionada = SessaoLegislativa.objects.filter( + legislatura=legislatura).order_by( + '-data_inicio').first().id + + # Atualiza os componentes da view após a mudança + composicao_mesa = ComposicaoMesa.objects.filter( + sessao_legislativa=sessao_selecionada) + + cargos_ocupados = [m.cargo for m in composicao_mesa] + cargos = CargoMesa.objects.all() + cargos_vagos = list(set(cargos) - set(cargos_ocupados)) + + parlamentares = Legislatura.objects.get( + id=legislatura).mandato_set.all() + parlamentares_ocupados = [m.parlamentar for m in composicao_mesa] + parlamentares_vagos = list( + set( + [p.parlamentar for p in parlamentares]) - set( + parlamentares_ocupados)) + + lista_sessoes = [(s.id, s.__str__()) for s in sessoes] + lista_composicao = [(c.id, c.parlamentar.__str__(), + c.cargo.__str__()) for c in composicao_mesa] + lista_parlamentares = [( + p.id, p.__str__()) for p in parlamentares_vagos] + lista_cargos = [(c.id, c.__str__()) for c in cargos_vagos] + + return JsonResponse( + {'lista_sessoes': lista_sessoes, + 'lista_composicao': lista_composicao, + 'lista_parlamentares': lista_parlamentares, + 'lista_cargos': lista_cargos, + 'sessao_selecionada': sessao_selecionada, + 'msg': ('', 1)}) + + +def insere_parlamentar_composicao(request): + """ + Essa função lida com qualquer operação de inserção + na composição da Mesa Diretora + """ + + if request.user.has_perm( + '%s.add_%s' % ( + AppConfig.label, ComposicaoMesa._meta.model_name)): + + composicao = ComposicaoMesa() + + try: + composicao.sessao_legislativa = SessaoLegislativa.objects.get( + id=int(request.POST['sessao'])) + except MultiValueDictKeyError: + return JsonResponse({'msg': ('Nenhuma sessão foi inserida!', 0)}) + + try: + composicao.parlamentar = Parlamentar.objects.get( + id=int(request.POST['parlamentar'])) + except MultiValueDictKeyError: + return JsonResponse({ + 'msg': ('Nenhum parlamentar foi inserido!', 0)}) + + try: + composicao.cargo = CargoMesa.objects.get( + id=int(request.POST['cargo'])) + parlamentar_ja_inserido = ComposicaoMesa.objects.filter( + sessao_legislativa_id=composicao.sessao_legislativa.id, + cargo_id=composicao.cargo.id).exists() + + if parlamentar_ja_inserido: + return JsonResponse({'msg': ('Parlamentar já inserido!', 0)}) + + composicao.save() + + except MultiValueDictKeyError: + return JsonResponse({'msg': ('Nenhum cargo foi inserido!', 0)}) + + return JsonResponse({'msg': ('Parlamentar inserido com sucesso!', 1)}) + + else: + return JsonResponse( + {'msg': ('Você não tem permissão para esta operação!', 0)}) + + +def remove_parlamentar_composicao(request): + """ + Essa função lida com qualquer operação de remoção + na composição da Mesa Diretora + """ + + if request.POST and request.user.has_perm( + '%s.delete_%s' % ( + AppConfig.label, ComposicaoMesa._meta.model_name)): if 'composicao_mesa' in request.POST: - ids = request.POST['composicao_mesa'].split(':') - composicao = ComposicaoMesa.objects.get( - sessao_legislativa_id=int(request.POST['sessao']), - parlamentar_id=int(ids[0]), - cargo_id=int(ids[1]) - ) - composicao.delete() - messages.success(request, _( - 'Parlamentar excluido com sucesso!')) - else: - messages.error(request, _( - 'Selecione um parlamentar para ser excluido!')) - - mesa = ComposicaoMesa.objects.filter( - sessao_legislativa=request.POST['sessao']) - - cargos_ocupados = [m.cargo for m in mesa] - cargos = CargoMesa.objects.all() - cargos_vagos = list(set(cargos) - set(cargos_ocupados)) - - parlamentares = Legislatura.objects.get( - id=int(request.POST['legislatura'])).mandato_set.all() - parlamentares_ocupados = [m.parlamentar for m in mesa] - parlamentares_vagos = list( - set( - [p.parlamentar for p in parlamentares]) - set( - parlamentares_ocupados)) - - sessao_sel = SessaoLegislativa.objects.get( - id=int(request.POST['sessao'])) + try: + composicao = ComposicaoMesa.objects.get( + id=request.POST['composicao_mesa']) + except ObjectDoesNotExist: + return JsonResponse( + {'msg': ( + 'Composição da Mesa não pôde ser removida!', 0)}) - if str(sessao_sel.legislatura_id) != request.POST['legislatura']: - sessao_sel = SessaoLegislativa.objects.filter( - legislatura=Legislatura.objects.first()).first() + composicao.delete() - return self.render_to_response( - {'legislaturas': Legislatura.objects.all( - ).order_by('-numero'), - 'legislatura_selecionada': Legislatura.objects.get( - id=int(request.POST['legislatura'])), - 'sessoes': SessaoLegislativa.objects.filter( - legislatura_id=int(request.POST['legislatura'])), - 'sessao_selecionada': sessao_sel, - 'composicao_mesa': mesa, - 'parlamentares': parlamentares_vagos, - 'cargos_vagos': cargos_vagos - }) + return JsonResponse( + {'msg': ( + 'Parlamentar excluido com sucesso!', 1)}) + else: + return JsonResponse( + {'msg': ( + 'Selecione algum parlamentar para ser excluido!', 0)}) diff --git a/sapl/static/js/app.js b/sapl/static/js/app.js index d96090f5e..bbb54171a 100644 --- a/sapl/static/js/app.js +++ b/sapl/static/js/app.js @@ -217,3 +217,20 @@ $(document).ready(function(){ OptionalCustomFrontEnd(); }); + + +function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie !== '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) === (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; +} \ No newline at end of file diff --git a/sapl/templates/parlamentares/composicaomesa_form.html b/sapl/templates/parlamentares/composicaomesa_form.html index af261facc..855313442 100644 --- a/sapl/templates/parlamentares/composicaomesa_form.html +++ b/sapl/templates/parlamentares/composicaomesa_form.html @@ -8,82 +8,301 @@ {{legislatura_selecionada}} não possui nenhuma Sessão Legislativa cadastrada.
Clique aqui para cadastrar uma nova. + {% else %} -
- {% csrf_token %} -
- Escolha da Legislatura e da Sessão Legislativa -
-
- - -
-
- - -
-
-
-
-
- Escolha da Composição da Mesa Diretora -
-
- - -
- -
-

- {% if cargos_vagos %} - {% if perms.parlamentares.add_cargomesa %} - - {% endif %} - {% endif %} -
-
- {% if perms.parlamentares.add_composicaomesa %} - - {% endif %} -
- - {% if cargos_vagos %} -
- - -
- -
- {% endif %} - -
-
-
+ + + + +
+ Escolha da Legislatura e da Sessão Legislativa +
+
+ + +
+
+ + +
+
+
+
+
+ Escolha da Composição da Mesa Diretora +
+
+ + +
+ +
+

+ {% if perms.parlamentares.add_cargomesa %} + + {% endif %} +
+
+ {% if perms.parlamentares.add_composicaomesa %} + + {% endif %} +
+ +
+ + +
+ +
+ +
+
{% endif %} {% endblock detail_content %} + + +{% block extra_js %} + + + +{% endblock %} From b9d72aa0a2a4c77e304e02c0f2ea521f3cba5d0f Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 9 May 2017 14:04:55 -0300 Subject: [PATCH 11/17] Fix #1066 --- sapl/sessao/urls.py | 4 ++ sapl/sessao/views.py | 60 ++++++++++++++++++- .../sessao/votacao/nominal_detail.html | 54 +++++++++++++++++ 3 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 sapl/templates/sessao/votacao/nominal_detail.html diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py index e06376fd6..f237bf721 100644 --- a/sapl/sessao/urls.py +++ b/sapl/sessao/urls.py @@ -16,6 +16,7 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente, VotacaoEditView, VotacaoExpedienteEditView, VotacaoExpedienteView, VotacaoNominalEditView, VotacaoNominalExpedienteEditView, + VotacaoNominalExpedienteDetailView, VotacaoNominalExpedienteView, VotacaoNominalView, VotacaoView, abrir_votacao_expediente_view, @@ -120,6 +121,9 @@ urlpatterns = [ url(r'^sessao/(?P\d+)/matexp/votnom/edit/(?P\d+)/(?P\d+)$', VotacaoNominalExpedienteEditView.as_view(), name='votacaonominalexpedit'), + url(r'^sessao/(?P\d+)/matexp/votnom/detail/(?P\d+)/(?P\d+)$', + VotacaoNominalExpedienteDetailView.as_view(), + name='votacaonominalexpdetail'), url(r'^sessao/(?P\d+)/matexp/votsimb/(?P\d+)/(?P\d+)$', VotacaoExpedienteView.as_view(), name='votacaosimbolicaexp'), url(r'^sessao/(?P\d+)/matexp/votsec/view/(?P\d+)/(?P\d+)$', diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 852444752..a4dc33b48 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -354,9 +354,20 @@ class ExpedienteMateriaCrud(MasterDetailCrud): resultado_descricao, resultado_observacao)) else: - obj.resultado = ('%s
%s' % - (resultado_descricao, + if obj.tipo_votacao == 2: + url = reverse('sapl.sessao:votacaonominalexpdetail', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.materia_id, + 'mid': obj.pk}) + obj.resultado = ('%s
%s' % + (url, + resultado_descricao, resultado_observacao)) + else: + obj.resultado = ('%s
%s' % + (resultado_descricao, + resultado_observacao)) return [self._as_row(obj) for obj in object_list] class CreateView(MasterDetailCrud.CreateView): @@ -1847,6 +1858,51 @@ class VotacaoNominalExpedienteEditView(SessaoPermissionMixin): return reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': pk}) +class VotacaoNominalExpedienteDetailView(DetailView): + template_name = 'sessao/votacao/nominal_detail.html' + + def get(self, request, *args, **kwargs): + context = {} + materia_id = kwargs['oid'] + expediente_id = kwargs['mid'] + + votacao = RegistroVotacao.objects.get( + materia_id=materia_id, + expediente_id=expediente_id) + expediente = ExpedienteMateria.objects.get(id=expediente_id) + votos = VotoParlamentar.objects.filter(votacao_id=votacao.id) + + list_votos = [] + for v in votos: + parlamentar = Parlamentar.objects.get(id=v.parlamentar_id) + list_votos.append({'parlamentar': parlamentar, 'voto': v.voto}) + + context.update({'votos': list_votos}) + + materia = {'materia': expediente.materia, + 'ementa': sub( + ' ', ' ', strip_tags(expediente.observacao))} + context.update({'materia': materia}) + + votacao_existente = {'observacao': sub( + ' ', ' ', strip_tags(votacao.observacao)), + 'resultado': votacao.tipo_resultado_votacao.nome, + 'tipo_resultado': + votacao.tipo_resultado_votacao_id} + context.update({'votacao': votacao_existente, + 'tipos': self.get_tipos_votacao()}) + + return self.render_to_response(context) + + def get_tipos_votacao(self): + for tipo in TipoResultadoVotacao.objects.all(): + yield tipo + + def get_success_url(self): + pk = self.kwargs['pk'] + return reverse('sapl.sessao:expedientemateria_list', + kwargs={'pk': pk}) + class VotacaoExpedienteView(SessaoPermissionMixin): diff --git a/sapl/templates/sessao/votacao/nominal_detail.html b/sapl/templates/sessao/votacao/nominal_detail.html new file mode 100644 index 000000000..e27fd3c53 --- /dev/null +++ b/sapl/templates/sessao/votacao/nominal_detail.html @@ -0,0 +1,54 @@ +{% extends "crud/detail.html" %} +{% load i18n %} + +{% block detail_content %} +
+ {% csrf_token %} + +
+ Votação Nominal +
+ Matéria: {{materia.materia|safe}} +
+ Ementa: {{materia.ementa|safe}} +
+ +
+
+ Votos +
+ {% for v in votos %} +
{{v.parlamentar}}
+
{{v.voto}}
+ {% endfor %} +
+
+
+
+
+
+ Resultado da Votação: + {% for tipo in tipos %} + {% if votacao.tipo_resultado == tipo.id %} + {{ tipo.nome }} + {% endif %} + {% endfor %} +
+
+ +
+
+
+ Observações + +
+
+
+
+{% endblock detail_content %} + +{% block foot_js %} + +{% endblock %} From 8287c1428000da3efb88965ec24a25bb04ddd878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rog=C3=A9rio=20Fr=C3=A1?= Date: Tue, 9 May 2017 15:16:12 -0300 Subject: [PATCH 12/17] =?UTF-8?q?Ajusta=20t=C3=ADtulo=20(#1070)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/interlegis/sapl/issues/1065 --- sapl/norma/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sapl/norma/models.py b/sapl/norma/models.py index d91ee2da2..0d0b8ce6b 100644 --- a/sapl/norma/models.py +++ b/sapl/norma/models.py @@ -18,8 +18,8 @@ class AssuntoNorma(models.Model): max_length=250, blank=True, verbose_name=_('Descrição')) class Meta: - verbose_name = _('Assunto de Norma') - verbose_name_plural = _('Assuntos de Norma') + verbose_name = _('Assunto de Norma Jurídica') + verbose_name_plural = _('Assuntos de Normas Jurídicas') def __str__(self): return self.assunto From 9143bd345732695b739a1380ee40b2e296646a01 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 9 May 2017 17:24:41 -0300 Subject: [PATCH 13/17] Reverte de volta para bower install --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 59bee177e..2b12ece18 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env # manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 -RUN python3 manage.py bower_install -- --allow-root --no-input && \ +RUN python3 manage.py bower install --no-input && \ python3 manage.py collectstatic --no-input && \ rm -rf /var/interlegis/sapl/sapl/.env && \ rm -rf /var/interlegis/sapl/sapl.db From f49ffc956e65d9ef02eb6dc59eb84bd0d72887aa Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 9 May 2017 17:32:09 -0300 Subject: [PATCH 14/17] Fixes #1011 --- sapl/sessao/views.py | 16 +++++++++++----- sapl/templates/sessao/resumo.html | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index a4dc33b48..899ed533e 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -1083,11 +1083,13 @@ class ResumoView(DetailView): numero = o.numero_ordem # Verificar resultado - resultado = o.registrovotacao_set.filter(materia=o.materia) - if resultado: - resultado = resultado[0].tipo_resultado_votacao.nome + rv = o.registrovotacao_set.filter(materia=o.materia).first() + if rv: + resultado = rv.tipo_resultado_votacao.nome + resultado_observacao = rv.observacao else: resultado = _('Matéria não votada') + resultado_observacao = _(' ') autoria = Autoria.objects.filter( materia_id=o.materia_id) @@ -1097,6 +1099,7 @@ class ResumoView(DetailView): 'titulo': titulo, 'numero': numero, 'resultado': resultado, + 'resultado_observacao': resultado_observacao, 'autor': autor } materias_ordem.append(mat) @@ -2169,11 +2172,13 @@ class PautaSessaoDetailView(DetailView): situacao = m.materia.tramitacao_set.last().status if situacao is None: situacao = _("Não informada") - resultado = m.registrovotacao_set.all() + rv = m.registrovotacao_set.all() if resultado: - resultado = resultado[0].tipo_resultado_votacao.nome + resultado = rv[0].tipo_resultado_votacao.nome + resultado_observacao = rv[0].observacao else: resultado = _('Matéria não votada') + resultado_observacao = _(' ') autoria = Autoria.objects.filter(materia_id=m.materia_id) autor = [str(x.autor) for x in autoria] @@ -2183,6 +2188,7 @@ class PautaSessaoDetailView(DetailView): 'titulo': titulo, 'numero': numero, 'resultado': resultado, + 'resultado_observacao': resultado_observacao, 'situacao': situacao, 'autor': autor } diff --git a/sapl/templates/sessao/resumo.html b/sapl/templates/sessao/resumo.html index 37554992a..db3a27c3a 100644 --- a/sapl/templates/sessao/resumo.html +++ b/sapl/templates/sessao/resumo.html @@ -139,6 +139,7 @@ Matéria Ementa Resultado da Votação + Observação da Votação @@ -151,6 +152,7 @@ {{m.ementa|safe}} {{m.resultado}} + {{m.resultado_observacao}} {% endfor %} From 717028f00c9c1cdf9941505060c6b96696e1efda Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 9 May 2017 19:27:35 -0300 Subject: [PATCH 15/17] Fix unbounded variable --- sapl/sessao/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 899ed533e..1a78adaa4 100644 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -2173,7 +2173,7 @@ class PautaSessaoDetailView(DetailView): if situacao is None: situacao = _("Não informada") rv = m.registrovotacao_set.all() - if resultado: + if rv: resultado = rv[0].tipo_resultado_votacao.nome resultado_observacao = rv[0].observacao else: From a4d6ba9f33bbaf0eadcecafa5df8a696023a6f26 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 9 May 2017 19:32:29 -0300 Subject: [PATCH 16/17] Test dockerfile --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2b12ece18..be1a2c528 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,9 +32,10 @@ COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env # manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 -RUN python3 manage.py bower install --no-input && \ - python3 manage.py collectstatic --no-input && \ - rm -rf /var/interlegis/sapl/sapl/.env && \ +RUN python3 manage.py bower install && \ + python3 manage.py collectstatic --no-input + +RUN rm -rf /var/interlegis/sapl/sapl/.env && \ rm -rf /var/interlegis/sapl/sapl.db RUN chmod +x /var/interlegis/sapl/start.sh && \ From 8f43e919540d2f73e88ac8e01dbf8e9c0dca50f2 Mon Sep 17 00:00:00 2001 From: Edward Ribeiro Date: Tue, 9 May 2017 21:17:59 -0300 Subject: [PATCH 17/17] Restaura bower_install --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index be1a2c528..e690045ec 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ 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/requirements.txt --upgrade setuptools && \ +RUN pip install -r /var/interlegis/sapl/requirements/dev-requirements.txt --upgrade setuptools && \ rm -r /root/.cache && \ rm -r /tmp/* @@ -32,11 +32,11 @@ COPY config/env_dockerfile /var/interlegis/sapl/sapl/.env # manage.py bower install bug: https://github.com/nvbn/django-bower/issues/51 -RUN python3 manage.py bower install && \ +RUN python3 manage.py bower_install -- --allow-root --no-input && \ python3 manage.py collectstatic --no-input - + RUN rm -rf /var/interlegis/sapl/sapl/.env && \ - rm -rf /var/interlegis/sapl/sapl.db + rm -rf /var/interlegis/sapl/sapl.db RUN chmod +x /var/interlegis/sapl/start.sh && \ ln -sf /dev/stdout /var/log/nginx/access.log && \