mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
2 years ago
94 changed files with 3990 additions and 2817 deletions
@ -0,0 +1,6 @@ |
|||
from django.urls import path, include |
|||
from sigi.apps.casas import views |
|||
|
|||
urlpatterns = [ |
|||
path("carteira/", views.painel_relacionamento, name="casas_carteira"), |
|||
] |
@ -1,37 +0,0 @@ |
|||
{% extends 'pdf/base_report.html' %} |
|||
{% load static i18n %} |
|||
|
|||
{% block page_size %}A4 landscape{% endblock %} |
|||
|
|||
{% block main_content %} |
|||
<table repeat="1"> |
|||
<thead> |
|||
<tr> |
|||
<th style="width: 22.5%;">{% trans 'Casa' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'Presidente' %}</th> |
|||
<th style="width: 5%;">{% trans 'Tipo' %}</th> |
|||
<th style="width: 18%;">{% trans 'Endereço' %}</th> |
|||
<th style="width: 10%;">{% trans 'Bairro' %}</th> |
|||
<th style="width: 7%;">{% trans 'CEP' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'Telefone' %}</th> |
|||
<th style="width: 12.5%;">{% trans 'E-mail' %}</th> |
|||
</tr> |
|||
</thead> |
|||
|
|||
{% for casa in casas %} |
|||
{% ifchanged casa.municipio.uf %} |
|||
<tr class="title_row"><td colspan="8"><h1>{{ casa.municipio.uf.nome }}</h1></td></tr> |
|||
{% endifchanged %} |
|||
<tr> |
|||
<td>{{ casa.nome }}</td> |
|||
<td>{{ casa.presidente }}</td> |
|||
<td>{{ casa.tipo.sigla }}</td> |
|||
<td>{{ casa.logradouro }}</td> |
|||
<td>{{ casa.bairro }}</td> |
|||
<td>{{ casa.cep }}</td> |
|||
<td>{{ casa.telefone }}</td> |
|||
<td>{{ casa.email }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
{% endblock main_content %} |
@ -0,0 +1,35 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form method="post">{% csrf_token %}{{ form }} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% blocktrans with name=object.nome %}Deseja excluir {{ name }}?{% endblocktrans %}</span> |
|||
<p>O funcionário {{ object.nome }} será permanentemente excluído da base de dados!</p> |
|||
{% if unico_login %} |
|||
<blockquote style="font-size: 1em;"> |
|||
{% blocktrans with name=object.nome|upper casa=casa|upper %} |
|||
{{ name }} é o único funcionário da {{ casa }} que pode efetuar login neste sistema. Ao excluí-lo, ninguém mais poderá acessar o sistema. Para voltar a ter acesso, o Presidente deverá enviar um ofício assinado designando um novo Contato Interlegis. |
|||
{% endblocktrans %} |
|||
</blockquote> |
|||
{% endif %} |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light red" type="submit" name="action"> |
|||
{% trans 'Delete' %} |
|||
<i class="material-icons right">delete_forever</i> |
|||
</button> |
|||
<a class="btn waves-effect waves-light white-text" href="{% url 'casas:funcionario_update' object.id %}"> |
|||
{% trans 'Cancelar' %} |
|||
<i class="material-icons right">cancel</i> |
|||
</a> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -0,0 +1,67 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<style> |
|||
.pagination span { |
|||
font-weight: bold; |
|||
} |
|||
.pagination i { |
|||
vertical-align: middle; |
|||
margin: 0 24px; |
|||
color: #000 !important; |
|||
} |
|||
</style> |
|||
{% endblock extrastyle %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<table class="striped"> |
|||
<tr> |
|||
<th>{% trans 'Setor' %}</th> |
|||
<th>{% trans 'Nome' %}</th> |
|||
<th>{% trans 'CPF' %}</th> |
|||
<th>{% trans 'Telefones' %}</th> |
|||
<th>{% trans 'E-mail' %}</th> |
|||
</tr> |
|||
{% for funcionario in object_list %} |
|||
<tr> |
|||
<td><a href="{% url 'casas:funcionario_update' funcionario.id %}">{{ funcionario.get_setor_display }}</a></td> |
|||
<td><a href="{% url 'casas:funcionario_update' funcionario.id %}">{{ funcionario.nome }}</a></td> |
|||
<td>{{ funcionario.cpf }}</td> |
|||
<td>{{ funcionario.nota }}</td> |
|||
<td>{{ funcionario.email }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
</div> |
|||
<div class="card-action"> |
|||
<div class='pagination'> |
|||
{% if page_obj.has_previous %} |
|||
<a href='{% url "casas:funcionario_listview" %}?page={{ page_obj.previous_page_number }}{% if suplentes %}&suplentes=1{% endif %}'><i class="material-icons">skip_previous</i></a> |
|||
{% endif %} |
|||
{% if page_obj.paginator.num_pages > 1 %} |
|||
<span> |
|||
{% blocktranslate with number=page_obj.number num_pages=page_obj.paginator.num_pages %} |
|||
Página {{ number }} de {{ num_pages }} |
|||
{% endblocktranslate %} |
|||
</span> |
|||
{% endif %} |
|||
{% if page_obj.has_next %} |
|||
<a href='{% url "casas:funcionario_listview" %}?page={{ page_obj.next_page_number }}{% if suplentes %}&suplentes=1{% endif %}'><i class="material-icons">skip_next</i></a> |
|||
{% endif %} |
|||
<a class="btn waves-effect waves-light white-text" href="{% url 'casas:funcionario_create' %}"> |
|||
{% trans 'Novo' %} |
|||
<i class="material-icons right">create</i> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -0,0 +1,34 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block extrahead %} |
|||
{{ block.super }} |
|||
{{ form.media }} |
|||
{% endblock extrahead %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form method="post">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
{{ form }} |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="action"> |
|||
{% trans 'Save' %} |
|||
<i class="material-icons right">save</i> |
|||
</button> |
|||
{% if object %} |
|||
<a class="btn waves-effect waves-light red white-text" href="{% url 'casas:funcionario_delete' object.id %}"> |
|||
{% trans 'Delete' %} |
|||
<i class="material-icons right">delete_forever</i> |
|||
</a> |
|||
{% endif %} |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -0,0 +1,28 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n static %} |
|||
|
|||
{% block extrahead %} |
|||
{{ block.super }} |
|||
{{ form.media }} |
|||
{% endblock extrahead %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form method="post">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
{{ form }} |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="action"> |
|||
{% trans 'Save' %} |
|||
<i class="material-icons right">save</i> |
|||
</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
File diff suppressed because it is too large
@ -0,0 +1,14 @@ |
|||
from django.urls import path, include |
|||
from sigi.apps.eventos import views |
|||
|
|||
urlpatterns = [ |
|||
path("calendario/", views.calendario, name="eventos_calendario"), |
|||
path( |
|||
"alocacaoequipe/", views.alocacao_equipe, name="eventos_alocacaoequipe" |
|||
), |
|||
path( |
|||
"evento/<int:id>/declaracao/", |
|||
views.declaracao, |
|||
name="evento-declaracao", |
|||
), |
|||
] |
@ -0,0 +1,38 @@ |
|||
# Generated by Django 4.0.6 on 2022-07-19 02:08 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('eventos', '0023_cronograma_checklist'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='evento', |
|||
name='banner', |
|||
field=models.ImageField(blank=True, null=True, upload_to='', verbose_name='banner do evento'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='evento', |
|||
name='contato', |
|||
field=models.CharField(blank=True, max_length=100, verbose_name='contato'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='evento', |
|||
name='link_inscricao', |
|||
field=models.URLField(blank=True, verbose_name='link de inscrição'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='evento', |
|||
name='publicar', |
|||
field=models.BooleanField(default=False, verbose_name='publicar no site'), |
|||
), |
|||
migrations.AddField( |
|||
model_name='evento', |
|||
name='telefone', |
|||
field=models.CharField(blank=True, max_length=30, verbose_name='tefone de contato'), |
|||
), |
|||
] |
@ -0,0 +1,18 @@ |
|||
# Generated by Django 4.1 on 2022-08-08 22:45 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("eventos", "0024_evento_banner_evento_contato_evento_link_inscricao_and_more"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name="evento", |
|||
name="turma", |
|||
field=models.CharField(blank=True, max_length=100, verbose_name="turma"), |
|||
), |
|||
] |
@ -0,0 +1,31 @@ |
|||
# Generated by Django 4.1 on 2022-08-08 22:46 |
|||
|
|||
from django.db import migrations |
|||
|
|||
|
|||
def separa_turma(apps, schema_editor): |
|||
Evento = apps.get_model("eventos", "Evento") |
|||
for evento in Evento.objects.filter(nome__icontains="Turma"): |
|||
split_name = evento.nome.rsplit("-", 1) |
|||
if len(split_name) == 2: |
|||
evento.nome = split_name[0].strip() |
|||
evento.turma = split_name[1].strip() |
|||
evento.save() |
|||
|
|||
|
|||
def junta_turma(apps, schema_editor): |
|||
Evento = apps.get_model("eventos", "Evento") |
|||
for evento in Evento.objects.exclude(turma=""): |
|||
evento.nome = evento.nome + " - " + evento.turma |
|||
evento.save() |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("eventos", "0025_evento_turma"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.RunPython(separa_turma, junta_turma), |
|||
] |
@ -0,0 +1,20 @@ |
|||
# Generated by Django 4.1 on 2022-08-08 22:50 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("eventos", "0026_preenche_turma"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name="tipoevento", |
|||
name="casa_solicita", |
|||
field=models.BooleanField( |
|||
default=False, verbose_name="casa pode solicitar" |
|||
), |
|||
), |
|||
] |
@ -0,0 +1,26 @@ |
|||
# Generated by Django 4.1 on 2022-08-28 15:56 |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("ocorrencias", "0011_alter_categoria_tipo"), |
|||
("eventos", "0027_tipoevento_casa_solicita"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name="evento", |
|||
name="solicitacao", |
|||
field=models.ForeignKey( |
|||
blank=True, |
|||
null=True, |
|||
on_delete=django.db.models.deletion.SET_NULL, |
|||
to="ocorrencias.ocorrencia", |
|||
verbose_name="Solicitação de origem", |
|||
), |
|||
), |
|||
] |
@ -0,0 +1,21 @@ |
|||
{% load i18n %} |
|||
<div class="row"> |
|||
{% for evento in object_list %} |
|||
<div class="col-md-12"> |
|||
<div style="padding: 24px;"> |
|||
<h4 id="demo" style="margin-left:1em;">{{ evento.data_inicio|date:"SHORT_DATE_FORMAT" }}</h4> |
|||
</div> |
|||
<div class="col-md-2 hora"> |
|||
<div class="box-hora">{{ evento.data_inicio|date:"G\hi" }}</div> |
|||
<br> |
|||
</div> |
|||
<div class="col-md-10"> |
|||
<a style="color:#0095da;" href="#!">{{ evento.nome }}</a> |
|||
<div style="color:#666;">{% blocktrans with local=evento.local %}Local: {{ local }}{% endblocktrans %}</div> |
|||
<br> |
|||
</div> |
|||
</div> |
|||
{% empty %} |
|||
<div class="col-md-12">{% trans 'No events yet.' %}</div> |
|||
{% endfor %} |
|||
</div> |
@ -1,47 +1,4 @@ |
|||
from django.urls import path, include |
|||
from sigi.apps.eventos import views |
|||
|
|||
urlpatterns = [ |
|||
path("calendario/", views.calendario, name="eventos-calendario"), |
|||
path( |
|||
"alocacaoequipe/", views.alocacao_equipe, name="eventos-alocacao-equipe" |
|||
), |
|||
path("evento/<int:id>/", views.evento, name="eventos-evento"), |
|||
path( |
|||
"evento/<int:evento_id>/convite/<casa_id>/", |
|||
views.convida_casa, |
|||
name="eventos-evento-convida", |
|||
), |
|||
path( |
|||
"evento/<int:id>/declaracao/", |
|||
views.declaracao, |
|||
name="evento-declaracao", |
|||
), |
|||
path( |
|||
"evento/presidente/<int:presidente_id>/", |
|||
views.presidente_form, |
|||
name="presidente-form-snippet", |
|||
), |
|||
] |
|||
|
|||
# from django.conf.urls import patterns, url |
|||
|
|||
|
|||
# urlpatterns = patterns( |
|||
# 'sigi.apps.eventos.views', |
|||
# # Painel de ocorrencias |
|||
# url(r'^calendario/$', 'calendario', name='eventos-calendario'), |
|||
# url(r'^alocacaoequipe/$', 'alocacao_equipe', name='eventos-alocacaoequipe'), |
|||
# # Carrinho |
|||
# url(r'^evento/carrinho/$', 'visualizar_carrinho', |
|||
# name='visualizar-carrinho-evento'), |
|||
# url(r'^evento/carrinho/excluir_carrinho/$', 'excluir_carrinho', |
|||
# name='excluir-carrinho-evento'), # Error |
|||
# url(r'^evento/carrinho/deleta_itens_carrinho$', 'deleta_itens_carrinho', |
|||
# name='deleta-itens-carrinho-evento'), # Error |
|||
# url(r'^evento/csv/$', 'export_csv', name='evento-export-csv'), # Error |
|||
# url(r'^evento/(?P<id>\w+)/declaracao/$', 'declaracao', |
|||
# name='evento-declaracao'), |
|||
|
|||
|
|||
# ) |
|||
urlpatterns = [] |
|||
|
@ -0,0 +1,37 @@ |
|||
from django.urls import path |
|||
from sigi.apps.home import views |
|||
|
|||
urlpatterns = [ |
|||
path("login/", views.LoginView.as_view(), name="login"), |
|||
path("logout/", views.LogoutView.as_view(), name="logout"), |
|||
path( |
|||
"password_change/", |
|||
views.PasswordChangeView.as_view(), |
|||
name="password_change", |
|||
), |
|||
path( |
|||
"password_change/done/", |
|||
views.PasswordChangeDoneView.as_view(), |
|||
name="password_change_done", |
|||
), |
|||
path( |
|||
"password_reset/", |
|||
views.PasswordResetView.as_view(), |
|||
name="password_reset", |
|||
), |
|||
path( |
|||
"password_reset/done/", |
|||
views.PasswordResetDoneView.as_view(), |
|||
name="password_reset_done", |
|||
), |
|||
path( |
|||
"reset/<uidb64>/<token>/", |
|||
views.PasswordResetConfirmView.as_view(), |
|||
name="password_reset_confirm", |
|||
), |
|||
path( |
|||
"reset/done/", |
|||
views.PasswordResetCompleteView.as_view(), |
|||
name="password_reset_complete", |
|||
), |
|||
] |
@ -1 +1 @@ |
|||
[{"model": "home.cards", "pk": 1, "fields": {"codigo": "resumoseit", "tipo": "T", "nome_url": "home_resumoseit", "query_string": "", "link_acao": false, "titulo": "Serviços hospedados no Interlegis (SEIT)", "descricao": "Tabela com os serviços criados no SEIT por mês", "categoria": "Serviços", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 2, "fields": {"codigo": "chartseit", "tipo": "C", "nome_url": "home_chartseit", "query_string": "", "link_acao": true, "titulo": "Sazonalidade da hospedagem de serviços", "descricao": "Gráfico com a sazonalidade das solicitações de serviços", "categoria": "Serviços", "ordem": 2, "default": true}}, {"model": "home.cards", "pk": 3, "fields": {"codigo": "carteira", "tipo": "T", "nome_url": "casas-carteira", "query_string": "snippet=resumo&s=sim", "link_acao": false, "titulo": "Resumo da carteira de relacionamentos", "descricao": "Tabela resumindo a carteira de gerência Interlegis", "categoria": "Gerente", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 4, "fields": {"codigo": "performance", "tipo": "C", "nome_url": "home_chartperformance", "query_string": "", "link_acao": true, "titulo": "Performance da gerência de carteiras", "descricao": "Performance da gerência de carteiras", "categoria": "Gerente", "ordem": 2, "default": true}}, {"model": "home.cards", "pk": 5, "fields": {"codigo": "chartcarteira", "tipo": "C", "nome_url": "home_chartcarteira", "query_string": "", "link_acao": false, "titulo": "Distribuição de Casas por Gerente", "descricao": "Distribuição de Casas por Gerente", "categoria": "Gerente", "ordem": 3, "default": true}}, {"model": "home.cards", "pk": 6, "fields": {"codigo": "resumoconvenios", "tipo": "T", "nome_url": "home_resumoconvenios", "query_string": "", "link_acao": false, "titulo": "Resumo de informações", "descricao": "Resumo de informações", "categoria": "Geral", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 7, "fields": {"codigo": "chartusoservico", "tipo": "C", "nome_url": "home_chartusoservico", "query_string": "", "link_acao": true, "titulo": "Uso dos serviços SEIT", "descricao": "Mostra como serviços SEIT estão sendo usados pelas Casas", "categoria": "Serviços", "ordem": 3, "default": true}}, {"model": "home.cards", "pk": 8, "fields": {"codigo": "chartatualizacao", "tipo": "C", "nome_url": "home_chartatualizacao", "query_string": "", "link_acao": false, "titulo": "Frequência de atualização", "descricao": "Mostra a frequência com que os portais são atualizados pelas Casas", "categoria": "Serviços", "ordem": 4, "default": true}}, {"model": "home.cards", "pk": 9, "fields": {"codigo": "eventosstatus", "tipo": "C", "nome_url": "eventos_status", "query_string": "", "link_acao": false, "titulo": "Eventos por status", "descricao": "Eventos por status", "categoria": "Eventos", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 10, "fields": {"codigo": "eventoscategoria", "tipo": "C", "nome_url": "eventos_categoria", "query_string": "", "link_acao": false, "titulo": "Eventos realizados por categoria", "descricao": "Eventos por categoria", "categoria": "Eventos", "ordem": 2, "default": true}}, {"model": "home.cards", "pk": 11, "fields": {"codigo": "eventosano", "tipo": "C", "nome_url": "eventos_ano", "query_string": "", "link_acao": true, "titulo": "Eventos dos últimos 12 meses", "descricao": "Eventos dos últimos 12 meses", "categoria": "Eventos", "ordem": 3, "default": true}}] |
|||
[{"model": "home.cards", "pk": 1, "fields": {"codigo": "resumoseit", "tipo": "T", "nome_url": "home_resumoseit", "query_string": "", "link_acao": false, "titulo": "Serviços hospedados no Interlegis (SEIT)", "descricao": "Tabela com os serviços criados no SEIT por mês", "categoria": "Serviços", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 2, "fields": {"codigo": "chartseit", "tipo": "C", "nome_url": "home_chartseit", "query_string": "", "link_acao": true, "titulo": "Sazonalidade da hospedagem de serviços", "descricao": "Gráfico com a sazonalidade das solicitações de serviços", "categoria": "Serviços", "ordem": 2, "default": true}}, {"model": "home.cards", "pk": 3, "fields": {"codigo": "carteira", "tipo": "T", "nome_url": "casas_carteira", "query_string": "snippet=resumo&s=sim", "link_acao": false, "titulo": "Resumo da carteira de relacionamentos", "descricao": "Tabela resumindo a carteira de gerência Interlegis", "categoria": "Gerente", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 4, "fields": {"codigo": "performance", "tipo": "C", "nome_url": "home_chartperformance", "query_string": "", "link_acao": true, "titulo": "Performance da gerência de carteiras", "descricao": "Performance da gerência de carteiras", "categoria": "Gerente", "ordem": 2, "default": true}}, {"model": "home.cards", "pk": 5, "fields": {"codigo": "chartcarteira", "tipo": "C", "nome_url": "home_chartcarteira", "query_string": "", "link_acao": false, "titulo": "Distribuição de Casas por Gerente", "descricao": "Distribuição de Casas por Gerente", "categoria": "Gerente", "ordem": 3, "default": true}}, {"model": "home.cards", "pk": 6, "fields": {"codigo": "resumoconvenios", "tipo": "T", "nome_url": "home_resumoconvenios", "query_string": "", "link_acao": false, "titulo": "Resumo de informações", "descricao": "Resumo de informações", "categoria": "Geral", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 7, "fields": {"codigo": "chartusoservico", "tipo": "C", "nome_url": "home_chartusoservico", "query_string": "", "link_acao": true, "titulo": "Uso dos serviços SEIT", "descricao": "Mostra como serviços SEIT estão sendo usados pelas Casas", "categoria": "Serviços", "ordem": 3, "default": true}}, {"model": "home.cards", "pk": 8, "fields": {"codigo": "chartatualizacao", "tipo": "C", "nome_url": "home_chartatualizacao", "query_string": "", "link_acao": false, "titulo": "Frequência de atualização", "descricao": "Mostra a frequência com que os portais são atualizados pelas Casas", "categoria": "Serviços", "ordem": 4, "default": true}}, {"model": "home.cards", "pk": 9, "fields": {"codigo": "eventosstatus", "tipo": "C", "nome_url": "eventos_status", "query_string": "", "link_acao": false, "titulo": "Eventos por status", "descricao": "Eventos por status", "categoria": "Eventos", "ordem": 1, "default": true}}, {"model": "home.cards", "pk": 10, "fields": {"codigo": "eventoscategoria", "tipo": "C", "nome_url": "eventos_categoria", "query_string": "", "link_acao": false, "titulo": "Eventos realizados por categoria", "descricao": "Eventos por categoria", "categoria": "Eventos", "ordem": 2, "default": true}}, {"model": "home.cards", "pk": 11, "fields": {"codigo": "eventosano", "tipo": "C", "nome_url": "eventos_ano", "query_string": "", "link_acao": true, "titulo": "Eventos dos últimos 12 meses", "descricao": "Eventos dos últimos 12 meses", "categoria": "Eventos", "ordem": 3, "default": true}}] |
@ -0,0 +1,6 @@ |
|||
from django import forms |
|||
from django.utils.translation import gettext as _ |
|||
from localflavor.br.forms import BRCNPJField, BRCPFField, BRZipCodeField |
|||
from material.admin.widgets import MaterialAdminTextareaWidget |
|||
from sigi.apps.casas.models import Funcionario, Orgao |
|||
from sigi.apps.parlamentares.models import Parlamentar |
@ -0,0 +1,35 @@ |
|||
from django.shortcuts import get_object_or_404 |
|||
from sigi.apps.casas.models import Orgao |
|||
|
|||
|
|||
class ContatoInterlegisViewMixin: |
|||
def get_casa(self): |
|||
user = self.request.user |
|||
if "casa_id" in self.request.session: |
|||
casa_id = int(self.request.session["casa_id"]) |
|||
casa = Orgao.objects.filter(id=casa_id).first() |
|||
elif "casa_id" in self.request.GET: |
|||
casa_id = int(self.request.GET["casa_id"]) |
|||
casa = Orgao.objects.filter(id=casa_id).first() |
|||
elif user.is_anonymous and hasattr( |
|||
self.get_object(), "casa_legislativa" |
|||
): |
|||
casa = self.get_object().casa_legislativa |
|||
else: |
|||
casa = Orgao.objects.filter(funcionario__email=user.email).first() |
|||
if casa: |
|||
self.request.session["casa_id"] = casa.id |
|||
return casa |
|||
|
|||
def get_contato(self): |
|||
if self.request.user.is_anonymous: |
|||
return self.get_casa().contato_interlegis |
|||
|
|||
return self.get_casa().funcionario_set.get( |
|||
email=self.request.user.email |
|||
) |
|||
|
|||
def get_context_data(self, **kwargs): |
|||
context = super().get_context_data(**kwargs) |
|||
context["casa"] = self.get_casa() |
|||
return context |
@ -0,0 +1,63 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
{% if ocorrencias.count > 0 %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans 'Últimas ocorrências' %}</span> |
|||
<ul class="collection"> |
|||
{% for ocorrencia in ocorrencias %} |
|||
<li class="collection-item"> |
|||
<span class="badge">{{ ocorrencia.comentarios.all|length }}</span> |
|||
<p><a href="{% url 'ocorrencias:ocorrencia_listview' %}#ocorrencia-{{ ocorrencia.id|safe }}">{{ ocorrencia.data_criacao|date:'SHORT_DATE_FORMAT' }} {{ ocorrencia.assunto }}</a></p> |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
<div class="card-action"> |
|||
<a href="{% url 'ocorrencias:ocorrencia_listview' %}">{% trans 'Ver todas' %}</a> |
|||
<a href="{% url 'ocorrencias:solicita_oficina_create' %}">{% trans "Solicitar treinamento" %}</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
|
|||
{% if servicos.count > 0 %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans 'Servicos ativos' %}</span> |
|||
<table class="striped"> |
|||
<tr> |
|||
<th>{% trans 'Serviço' %}</th> |
|||
<th>{% trans 'Endereço' %}</th> |
|||
<th>{% trans 'Ativado' %}</th> |
|||
<th>{% trans 'Verificado' %}</th> |
|||
<th>{% trans 'Resultado verificação' %}</th> |
|||
<th>{% trans 'Último uso' %}</th> |
|||
</tr> |
|||
{% for servico in servicos %} |
|||
<tr> |
|||
<td>{{ servico.tipo_servico }}</td> |
|||
<td> |
|||
<a href="{{ servico.url }}">{{ servico.url }}</a> |
|||
</td> |
|||
<td>{{ servico.data_ativacao|date:'SHORT_DATE_FORMAT' }}</td> |
|||
<td>{{ servico.data_verificacao|date:'SHORT_DATE_FORMAT' }}</td> |
|||
<td>{{ servico.get_resultado_verificacao_display }}</td> |
|||
<td>{{ servico.data_ultimo_uso|date:'SHORT_DATE_FORMAT' }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
{% endblock %} |
@ -0,0 +1,7 @@ |
|||
from django.apps import AppConfig |
|||
from django.utils.translation import gettext_lazy as _ |
|||
|
|||
|
|||
class CasasConfig(AppConfig): |
|||
name = "sigi.apps.ocorrencias" |
|||
verbose_name = _("ocorrências") |
@ -0,0 +1,22 @@ |
|||
# Generated by Django 4.0.6 on 2022-08-02 17:34 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('ocorrencias', '0009_alter_comentario_options_categoria_projeto_and_more'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='ocorrencia', |
|||
options={'ordering': ['prioridade', '-data_modificacao', '-data_criacao'], 'verbose_name': 'ocorrência', 'verbose_name_plural': 'ocorrências'}, |
|||
), |
|||
migrations.AddField( |
|||
model_name='ocorrencia', |
|||
name='interno', |
|||
field=models.BooleanField(default=True, help_text='Se marcado, essa ocorrência será visível apenas para servidores do Interlegis', verbose_name='Interno'), |
|||
), |
|||
] |
@ -0,0 +1,27 @@ |
|||
# Generated by Django 4.1 on 2022-08-10 18:16 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("ocorrencias", "0010_alter_ocorrencia_options_ocorrencia_interno"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name="categoria", |
|||
name="tipo", |
|||
field=models.CharField( |
|||
choices=[ |
|||
("C", "Solicitação de convênio (ACT)"), |
|||
("E", "Solicitação de evento (oficina)"), |
|||
("O", "Outras"), |
|||
], |
|||
default="O", |
|||
max_length=1, |
|||
verbose_name="Tipo de solicitação", |
|||
), |
|||
), |
|||
] |
@ -0,0 +1,18 @@ |
|||
# Generated by Django 4.1 on 2022-09-05 19:55 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("ocorrencias", "0011_alter_categoria_tipo"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name="comentario", |
|||
name="descricao", |
|||
field=models.TextField(blank=True, null=True, verbose_name="Comentário"), |
|||
), |
|||
] |
@ -0,0 +1,65 @@ |
|||
#content { |
|||
display: block; |
|||
} |
|||
|
|||
.user-image { |
|||
width: 64px; |
|||
height: 64px; |
|||
font-size: 64px !important; |
|||
} |
|||
|
|||
commenter-image { |
|||
width: 32px; |
|||
height: 32px; |
|||
font-size: 32px !important; |
|||
} |
|||
|
|||
.card-details, |
|||
.user-name { |
|||
font-size: 10px; |
|||
} |
|||
|
|||
.priority { |
|||
background-color: grey; |
|||
} |
|||
|
|||
.priority { |
|||
background-color: antiquewhite; |
|||
margin-left: 5px; |
|||
min-width: 60px; |
|||
} |
|||
|
|||
.chip>img { |
|||
float: left; |
|||
margin: 0 8px 0 -12px; |
|||
height: 32px; |
|||
width: 32px; |
|||
border-radius: 50%; |
|||
} |
|||
|
|||
.span-list { |
|||
padding: 2px 6px; |
|||
margin-left: 4px; |
|||
background-color: var(--selected-bg); |
|||
line-height: 24px; |
|||
border-radius: 12px; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.card-inbox { |
|||
width: 100%; |
|||
border: 1px solid var(--hairline-color); |
|||
padding: 12px; |
|||
border-radius: 12px; |
|||
} |
|||
|
|||
.inbox-title { |
|||
font-weight: bold; |
|||
text-transform: uppercase; |
|||
font-size: smaller; |
|||
} |
|||
|
|||
.strong { |
|||
font-weight: 800; |
|||
text-transform: uppercase; |
|||
} |
@ -0,0 +1,5 @@ |
|||
$(document).ready(function () { |
|||
M.Dropdown.init($('.dropdown-trigger')); |
|||
M.Modal.init($(".modal")); |
|||
M.FloatingActionButton.init($(".fixed-action-btn")); |
|||
}); |
@ -1,14 +0,0 @@ |
|||
{% extends "admin/base.html" %} |
|||
{% load i18n admin_static %} |
|||
{% load static from staticfiles %} |
|||
|
|||
{% block content_title %}<h1>{% trans "Enviar novo arquivo" %}</h1>{% endblock %} |
|||
{% block content %} |
|||
<div class="small"> |
|||
<form id="form_anexos_{{ ocorrencia.id|safe }}" action="" method="POST" enctype="multipart/form-data" > |
|||
{% csrf_token %} |
|||
{{ form.as_p }} |
|||
<input type="submit" name="Adicionar"/> |
|||
</form> |
|||
</div> |
|||
{% endblock %} |
@ -1,24 +0,0 @@ |
|||
{% load i18n admin_static %} |
|||
{% load static from staticfiles %} |
|||
|
|||
{% if ocorrencia.anexo_set.exists %} |
|||
<table class="table"> |
|||
<tr> |
|||
<th>{% trans "Descrição" %}</th> |
|||
<th>{% trans "Data de publicação" %}</th> |
|||
<th> </th> |
|||
</tr> |
|||
{% for anexo in ocorrencia.anexo_set.all %} |
|||
<tr> |
|||
<td><a href="{{ anexo.arquivo.url }}">{{ anexo.descricao }}</a></td> |
|||
<td>{{ anexo.data_pub }}</td> |
|||
<td><a href="{% url "ocorrencia-excluianexo" %}?anexo_id={{ anexo.id|safe }}" |
|||
data-ocorrencia-id="{{ ocorrencia.id|safe }}" onclick="return remove_anexo(this);">Excluir</a></td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
{% endif %} |
|||
|
|||
<a href="{% url 'ocorrencia-incluianexo' %}?ocorrencia_id={{ ocorrencia.id|safe }}" onclick="return showAddAnexoPopup(this);"> |
|||
{% trans "Anexar novo arquivo" %} |
|||
</a> |
@ -1,53 +0,0 @@ |
|||
{% extends "ocorrencias/convenio/base_convenio.html" %} |
|||
{% load static i18n %} |
|||
|
|||
{% block content %} |
|||
<div class="main-content"> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Solicitar convênio" %}</span> |
|||
{% blocktrans %} |
|||
<p>Para que uma Casa Legislativa possa utilizar, gratuitamente, os |
|||
serviços do Interlegis / Senado Federal, é necessário formalizar |
|||
um convênio, na forma de um Acordo de Cooperação Técnica (ACT), |
|||
na forma da lei <a href="http://www.planalto.gov.br/ccivil_03/_ato2019-2022/2021/lei/L14133.htm">Lei Nº 14.133/2021</a> |
|||
e da lei <a href="http://www.planalto.gov.br/ccivil_03/leis/l8666cons.htm">Lei Nº 8.666/1993</a>. |
|||
</p> |
|||
<p>Para solicitar o ACT, serão necessárias as seguintes informações:</p> |
|||
<ul class="browser-default"> |
|||
<li>Dados cadastrais da Casa Legislativa, como CNPJ, endereço, e-mail, telefone.</li> |
|||
<li>Dados cadastrais do Presidente, como nome, CPF, identidade, e-mail, telefone, redes sociais.</li> |
|||
<li>Designação de um servidor como Contato Interlegis.</li> |
|||
</ul> |
|||
{% endblocktrans %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Identifique sua Casa Legislativa" %}</span> |
|||
<p>{% trans "Informe o nome do município ou Estado da sua Casa Legislativa" %}:</p> |
|||
<div class="input-field"> |
|||
<i class="material-icons prefix">search</i> |
|||
<input type="text" class="search-text" placeholder="{% trans "Procurar" %}" aria-label="{% trans "Procurar" %}" data-source="{% url 'openmapsearch' %}" data-param="q"> |
|||
<div class="search-result hide" data-item-click="seleciona_casa"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
{{ block.super }} |
|||
<script> |
|||
function seleciona_casa(data) { |
|||
$(location).attr("href", `{% url 'ocorrencias-seleciona-casa' %}?casa_id=${data.id}`); |
|||
} |
|||
</script> |
|||
{% endblock %} |
@ -1,40 +0,0 @@ |
|||
{% extends "admin/base_block.html" %} |
|||
{% load i18n %} |
|||
|
|||
{% block content %} |
|||
<h4>{% trans "Solicitações de convenio" %}</h4> |
|||
<table class="striped"> |
|||
<thead> |
|||
<tr> |
|||
<th>{% trans "Data abertura" %}</th> |
|||
<th>{% trans "Casa solicitante" %}</th> |
|||
<th>{% trans "Assunto" %}</th> |
|||
<th>{% trans "Comentários" %} |
|||
<th>{% trans "Situação" %}</th> |
|||
<th>{% trans "Detalhes" %}</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for ocorrencia in ocorrencias %} |
|||
<tr> |
|||
<td>{{ ocorrencia.data_criacao|date:"SHORT_DATE_FORMAT" }}</td> |
|||
<td>{{ ocorrencia.casa_legislativa }}</td> |
|||
<td>{{ ocorrencia.assunto }}</td> |
|||
<td><span class="badge">{{ ocorrencia.comentarios.count }}</span></td> |
|||
<td> |
|||
<ul> |
|||
{% for key, value in ocorrencia.get_infos_details.items %} |
|||
<li> |
|||
<i class="material-icons {% if value.0 %}green-text{% else %}red-text{% endif %}">{% if value.0 %}done{% else %}clear{% endif %}</i> |
|||
{{ value.1 }} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</td> |
|||
<td> |
|||
<a href="{% url 'painel-convenio' ocorrencia.id %}"><i class="material-icons">details</i></a> |
|||
</td> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{% endblock %} |
@ -0,0 +1,128 @@ |
|||
{% extends "admin/base_block.html" %} |
|||
{% load i18n model_fields %} |
|||
|
|||
{% block content_title %} |
|||
<h5>{% blocktrans with id=ocorrencia.id|safe%}Ocorrência #{{ id }}{% endblocktrans %}</h5> |
|||
{% endblock %} |
|||
|
|||
{% block content %} |
|||
{% csrf_token %} |
|||
{% block ocorrencia_card %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form action="{% if list_filter %}?list_filter={{ list_filter|urlencode }}{% endif %}" method="post" name="ocorrencia">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
{% block card_title %} |
|||
<span class="card-title">{% trans "Resumo da ocorrência" %}</span> |
|||
{% endblock card_title %} |
|||
<table> |
|||
<tbody> |
|||
{% for campo in campos_ocorrencia %} |
|||
<tr> |
|||
<th>{{ ocorrencia|verbose_name:campo|capfirst }}</th> |
|||
<td>{{ ocorrencia|field_value:campo|default:"-" }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{{ form }} |
|||
</div> |
|||
<div class="card-action"> |
|||
{% block form_actions %} |
|||
<button class="btn waves-effect waves-light" type="submit" name="save_ocorrencia_form"> |
|||
{% trans "Salvar" %} |
|||
<i class="material-icons left">save</i> |
|||
</button> |
|||
<a class="btn waves-effect waves-light white-text" href="{% url 'ocorrencias_painel' %}?{{ list_filter }}">{% trans "Voltar ao painel" %}</a> |
|||
{% endblock form_actions %} |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
{% endblock ocorrencia_card %} |
|||
|
|||
{% block anexos_card %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Anexos (documentos)" %}</span> |
|||
<table class="striped"> |
|||
<thead> |
|||
<tr> |
|||
<th>{% trans "Data de inclusão" %}</th> |
|||
<th>{% trans "Descrição" %}</th> |
|||
<th>{% trans "Arquivo" %}</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for anexo in ocorrencia.anexo_set.all %} |
|||
<tr> |
|||
<th>{{ anexo.data_pub|date:"SHORT_DATE_FORMAT" }}</th> |
|||
<td>{{ anexo.descricao|default:"-" }}</td> |
|||
<td><a href="{{ anexo.arquivo.url }}">{{ anexo.arquivo.name }}</a></td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock anexos_card %} |
|||
|
|||
{% block comentario_card %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form action="{% if list_filter %}?list_filter={{ list_filter|urlencode }}{% endif %}" method="post" name="comentario">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
|
|||
<span class="card-title">{% trans "Comentários" %}</span> |
|||
<table class="striped"> |
|||
<thead> |
|||
<tr> |
|||
<th>{% trans "Data" %}</th> |
|||
<th>{% trans "Descrição" %}</th> |
|||
<th>{% trans "Servidor" %}</th> |
|||
<th>{% trans "Novo status" %}</th> |
|||
<th>{% trans "Visibilidade" %}</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for comentario in ocorrencia.comentarios.all %} |
|||
<tr> |
|||
<th>{{ comentario.data_criacao|date:"SHORT_DATETIME_FORMAT" }}</th> |
|||
<td>{{ comentario.descricao|default:"-" }}</td> |
|||
<td>{{ comentario.usuario.nome_completo|default:"-" }}</td> |
|||
<td>{{ comentario.get_novo_status_display|default:"-" }}</td> |
|||
<td> |
|||
{% if comentario.interno %} |
|||
<i class="material-icons green-text">visibility_off</i> Interno |
|||
{% else %} |
|||
<i class="material-icons red-text">visibility</i> Público |
|||
{% endif %} |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
<div class="card-action"> |
|||
{% csrf_token %} |
|||
{{ form_comentario }} |
|||
<button class="btn waves-effect waves-light" type="submit" name="save_comentario_form"> |
|||
{% trans "Comentar" %} |
|||
<i class="material-icons left">comment</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
{% endblock comentario_card %} |
|||
|
|||
{% block other_cards %}{% endblock other_cards %} |
|||
{% endblock content %} |
@ -1,7 +0,0 @@ |
|||
<div class="panel-body"> |
|||
<form id="form_ocorrencia" action="{% url 'ocorrencia-incluiocorrencia' %}" method="post"> |
|||
{% csrf_token %} |
|||
{{ ocorrencia_form.as_p }} |
|||
<input type="submit" value="Salvar"/> |
|||
</form> |
|||
</div> |
@ -1,113 +0,0 @@ |
|||
{% load i18n admin_static %} |
|||
{% load static from staticfiles %} |
|||
{% load thumbnail %} |
|||
|
|||
{% static 'ocorrencias/images/lid.png' as default_lid %} |
|||
{% static 'ocorrencias/images/mm.png' as default_mm %} |
|||
|
|||
<div class="panel panel-default" id='ticket_{{ ocorrencia.id|safe }}'> |
|||
<div class="panel-heading"> |
|||
<div class="media"> |
|||
<div class="media-left"> |
|||
<img class="media-object" src="{{ ocorrencia.casa_legislativa.foto|thumbnail_url:'thumb'|default:default_lid }}" alt=""/> |
|||
</div> |
|||
<div class="media-body"> |
|||
<h4><a href="{{ url_painel }}?type=casa&id={{ ocorrencia.casa_legislativa_id|safe }}"> |
|||
{{ ocorrencia.casa_legislativa.nome }}, {{ ocorrencia.casa_legislativa.municipio.uf.sigla }}</a></h4> |
|||
<p> |
|||
<a href="{% url "admin:ocorrencias_ocorrencia_change" ocorrencia.id %}" target="_blank">Ocorrência {{ ocorrencia.id|safe }}</a>: |
|||
{% blocktrans with data_criacao=ocorrencia.data_criacao tipo_contato=ocorrencia.tipo_contato categoria=ocorrencia.categoria id_setor=ocorrencia.setor_responsavel_id|safe setor=ocorrencia.setor_responsavel.sigla status=ocorrencia.get_status_display %} |
|||
Criado em {{ data_criacao }} via {{ tipo_contato }} solicitando {{ categoria }}, |
|||
está no setor <a href="{{ url_painel }}?type=servico&id={{ id_setor }}">{{ setor }}</a> |
|||
com status {{ status }} |
|||
{% endblocktrans %}</p> |
|||
{% if ocorrencia.ticket %} |
|||
<p><a href="{{ ocorrencia.get_ticket_url }}" target="_blank">{% trans "Ticket no suporte #" %}{{ ocorrencia.ticket|safe }}</a></p> |
|||
{% endif %} |
|||
<p>{% trans "Gerentes Interlegis:" %} |
|||
{% for g in ocorrencia.casa_legislativa.gerentes_interlegis.all %} |
|||
<a href="{{ url_painel }}?type=servidor&id={{ g.id|safe }}"> |
|||
{{ g.nome_completo }}</a> |
|||
{% if not forloop.last %}, {% endif %} |
|||
{% endfor %} |
|||
</p> |
|||
{% trans 'Prioridade' %}: |
|||
<div class="btn-group btn-group-xs" data-toggle="buttons" role="group" aria-label="..."> |
|||
{% for id, name in PRIORITY_CHOICES %} |
|||
<label class="btn btn-primary {% if id == ocorrencia.prioridade %}active{% endif %}"> |
|||
<input type="radio" name="ocorrencia-{{ ocorrencia.id|safe }}" value="{{ id|safe }}" autocomplete="off"{% if id == ocorrencia.prioridade %} checked {% endif %}> |
|||
{{ name }} |
|||
</label> |
|||
{% endfor %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="panel-body"> |
|||
<div class="media"> |
|||
<div class="media-left"> |
|||
<img class="media-object" src="{{ ocorrencia.servidor_registro.foto|thumbnail_url:'icon'|default:default_mm }}" alt=""/> |
|||
</div> |
|||
<div class="media-body"> |
|||
<p><a href="{{ url_painel }}?type=servidor&id={{ ocorrencia.servidor_registro_id|safe }}"> |
|||
<strong>{{ ocorrencia.servidor_registro }}</strong></a> |
|||
{% trans 'comentou' %}:</p> |
|||
<p>{{ ocorrencia.descricao }}</p> |
|||
</div> |
|||
</div> |
|||
|
|||
{% for comentario in ocorrencia.comentarios.all %} |
|||
<div class="media"> |
|||
<div class="media-left"> |
|||
<img class="media-object" src="{{ comentario.usuario.foto|thumbnail_url:'icon'|default:default_mm }}" alt=""/> |
|||
</div> |
|||
<div class="media-body"> |
|||
<p><a href="{{ url_painel }}?type=servidor&id={{ comentario.usuario_id|safe }}"> |
|||
<strong>{{ comentario.usuario.nome_completo }}</strong></a> |
|||
{% trans 'comentou' %}:</p> |
|||
<p>{{ comentario.descricao }}</p> |
|||
<p class="small">{% trans 'Em' %} {{ comentario.data_criacao }} |
|||
{% if comentarui.status %} |
|||
| {% trans 'novo status' %}: {{ comentario.get_novo_status_display }} |
|||
{% endif %} |
|||
{% if comentario.encaminhar_setor %} |
|||
| {% trans 'Encaminhado para' %} {{ comentario.encaminhar_setor.sigla }} |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
{% endfor %} |
|||
<a id='link_comentar_{{ ocorrencia.id|safe }}' role="button" data-toggle="collapse" href="#comentario_{{ ocorrencia.id|safe }}" aria-expanded="false" aria-controls="comentario_{{ ocorrencia.id|safe }}"> |
|||
{% trans "Comentar esta ocorrência" %} |
|||
</a> |
|||
<div class="collapse" id="comentario_{{ ocorrencia.id|safe }}"> |
|||
<form id="comentar_ocorrencia_{{ ocorrencia.id|safe }}" action="{% url 'ocorrencia-incluicomentario' %}" method="post" data-ocorrencia-id="{{ ocorrencia.id|safe }}"> |
|||
{% csrf_token %} |
|||
{{ comentario_form.non_field_errors }} |
|||
{% for field in comentario_form %} |
|||
<div class="fieldWrapper"> |
|||
{% if field.name == 'ocorrencia' %} |
|||
<input type='hidden' name='ocorrencia' value='{{ ocorrencia.id|safe }}'/> |
|||
{% else %} |
|||
{{ field.errors }} |
|||
<p>{{ field.label_tag }} {{ field }}</p> |
|||
{% endif %} |
|||
</div> |
|||
{% endfor %} |
|||
<input type="submit" value="{% trans 'Comentar' %}"> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
<div class="panel-footer"> |
|||
<a id='link_anexos_{{ ocorrencia.id|safe }}'role="button" data-toggle="collapse" href="#anexos_{{ ocorrencia.id|safe }}" aria-expanded="false" aria-controls="anexos_{{ ocorrencia.id|safe }}"> |
|||
{% blocktrans count counter=ocorrencia.total_anexos %} |
|||
{{ counter }} arquivo anexo |
|||
{% plural %} |
|||
{{ counter }} arquivos anexos |
|||
{% endblocktrans %} |
|||
</a> |
|||
|
|||
<div class="collapse" id="anexos_{{ ocorrencia.id|safe }}"> |
|||
{% include 'ocorrencias/anexos_snippet.html' %} |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,12 @@ |
|||
<p>À Sua Excelência {{ senador.forma_tratamento }} {{ senado.nome_parlamentar }}.</p> |
|||
<p>ASSUNTO: <span style="font-weight: bold;">Solicitação de oficinas / encontros Interlegis.</span></p> |
|||
<br/> |
|||
<p> |
|||
Essa {{ casa.nome }} vem solicitar a Vossa Excelência apoio para a realização |
|||
de eventos Interlegis, conforme detalhado no ofício anexo, junto ao |
|||
Instituto Legislativo Brasileiro - ILB, órgão deste Senado Federal. |
|||
</p> |
|||
<br/> |
|||
<p>Respeitosamente,</p> |
|||
<p>{{ sender.nome }}</p> |
|||
<p>{{ sender.funcao }} da {{ casa.nome }} |
@ -0,0 +1,90 @@ |
|||
{% extends "ocorrencias/ocorrencia_detail.html" %} |
|||
{% load i18n model_fields %} |
|||
|
|||
{% block content_title %} |
|||
<h5>{% blocktrans with casa=ocorrencia.casa_legislativa.nome %}Solicitação de oficinas da {{ casa }}{% endblocktrans %} |
|||
<h6>{% blocktrans with id=ocorrencia.id|safe%}Ocorrência #{{ id }}{% endblocktrans %}</h6> |
|||
{% endblock %} |
|||
|
|||
{% block other_cards %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form action="{% if list_filter %}?list_filter={{ list_filter|urlencode }}{% endif %}" method="post" name="oficinas">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Solicitações" %}</span> |
|||
<blockquote> |
|||
<p>{% trans "Modalidade" %}: {% if ocorrencia.infos.solicita_oficinas.modalidade == 'P' %}{% trans "PRESENCIAL" %}{% else %}{% trans "REMOTA" %}{% endif %}</p> |
|||
<p>{% trans "Senadores" %}: {% for senador in senadores %}{{ senador.nome_completo|upper }}{% if not forloop.last %}, {% endif %}{% endfor %}</p> |
|||
</blockquote> |
|||
<p>{{ form_oficina }}</p> |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="save_oficina_form"> |
|||
{% trans "Autorizar eventos selecionados" %} |
|||
<i class="material-icons left">save</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Oficinas autorizadas" %}</span> |
|||
<table class="striped"> |
|||
<thead> |
|||
<tr> |
|||
<th>{% trans "Nome" %}</th> |
|||
<th>{% trans "Turma" %}</th> |
|||
<th>{% trans "Status" %}</th> |
|||
<th>{% trans "Virtual" %}</th> |
|||
<th>{% trans "Data início" %}</th> |
|||
<th>{% trans "Data término" %}</th> |
|||
<th>{% trans "Equipe" %}</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for evento in ocorrencia.evento_set.all %} |
|||
<tr> |
|||
<th> |
|||
<a href="{% url 'admin:eventos_evento_change' evento.id %}" target="_blank"> |
|||
{{ evento.nome }} |
|||
</a> |
|||
</th> |
|||
<td>{{ evento.turma }}</td> |
|||
<td>{{ evento.get_status_display }}</td> |
|||
<td> |
|||
{% if evento.virtual %} |
|||
<i class="material-icons green-color medium-icon">check_circle</i> |
|||
{% else %} |
|||
<i class="material-icons red-color medium-icon">highlight_off</i> |
|||
{% endif %} |
|||
</td> |
|||
<td>{{ evento.data_inicio|date:"SHORT_DATE_FORMAT" }}</td> |
|||
<td>{{ evento.data_termino|date:"SHORT_DATE_FORMAT" }}</td> |
|||
<td> |
|||
<ul class="collection"> |
|||
{% for membro in evento.equipe_set.all %} |
|||
<li class="collection-item avatar"> |
|||
{% if membro.membro.foto %} |
|||
<img src="{{ membro.membro.foto.url }}" class="circle"/> |
|||
{% endif %} |
|||
{{ membro.membro.get_apelido }} ({{ m.funcao.nome }}) |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</td> |
|||
</tr> |
|||
{% empty %} |
|||
<tr><td colspan="6">{% trans "Nenhuma oficina autorizada ainda" %}</td></tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock other_cards %} |
@ -1,198 +0,0 @@ |
|||
{% extends "admin/base_site.html" %} |
|||
{% load i18n admin_static %} |
|||
{% load static from staticfiles %} |
|||
{% load thumbnail %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<link rel="stylesheet" type="text/css" href="{% static 'ocorrencias/css/jquery-ui.min.css' %}"/> |
|||
{% endblock %} |
|||
|
|||
{% block extrahead %} |
|||
{{ block.super }} |
|||
<script type="text/javascript" src="{% static 'admin/js/core.js' %}" ></script> |
|||
<script type="text/javascript" src="{% static 'admin/js/jquery.min.js' %}" ></script> |
|||
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}" ></script> |
|||
<script type="text/javascript" src="{% static 'ocorrencias/js/jquery-ui.min.js' %}" ></script> |
|||
{% endblock %} |
|||
|
|||
{% block coltype %}colMS{% endblock %} |
|||
|
|||
{% block content_title %}<h1>{{ panel_title }}</h1>{% endblock %} |
|||
|
|||
{% block content %} |
|||
{% url 'painel-ocorrencias' as url_painel %} |
|||
<div id="content-main" class="container-fluid"> |
|||
<div class="form-group"> |
|||
<div class="input-group"> |
|||
<input type="text" class="form-control" id="q" placeholder="{% trans 'Visitar o painel de' %}"> |
|||
<span class="input-group-btn"> |
|||
<button class="btn btn-default" type="button" onclick="window.location.href='{{ url_painel }}'">{% trans 'Meu painel' %}</button> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="nav nav-pills"> |
|||
<span class="glyphicon glyphicon-plus"></span> |
|||
<a role="button" data-toggle="collapse" href="#form_ocorrencia_panel" aria-expanded="false" aria-controls="form_ocorrencia_panel"> |
|||
{% trans "Registrar nova ocorrência" %} |
|||
</a> |
|||
</div> |
|||
|
|||
<div class="collapse panel panel-default" id='form_ocorrencia_panel'> |
|||
{% include 'ocorrencias/ocorrencia_form.html' %} |
|||
</div> |
|||
|
|||
{% if paineis %} |
|||
<ul class="nav nav-pills"> |
|||
{% for k, v in paineis.iteritems %} |
|||
<li role="presentation" class="{% if k == painel %}active{% endif %}"> |
|||
<a href="{{ url_painel }}?type=servidor&id={{ servidor.id }}&painel={{ k }}"> |
|||
{{ v }}</a></li> |
|||
{% endfor %} |
|||
</ul> |
|||
{% endif %} |
|||
|
|||
<div class="row"> |
|||
<div id="ocorrencias_display" class="col-md-12"> |
|||
{% for ocorrencia in ocorrencias %} |
|||
{% include 'ocorrencias/ocorrencia_snippet.html' %} |
|||
{% empty %} |
|||
<div class="panel panel-default"> |
|||
<div class="panel-body"> |
|||
<p>{% trans 'Nenhuma ocorrência encontrada.' %}</p> |
|||
</div> |
|||
</div> |
|||
{% endfor %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script type="text/javascript"> |
|||
$( document ).ready(function() { |
|||
$.ajaxSetup({ |
|||
beforeSend: function(xhr, settings) { |
|||
if (!(/^(GET|HEAD|OPTIONS|TRACE)$/.test(settings.type)) && !this.crossDomain) { |
|||
var cookieValue = null, name = 'csrftoken'; |
|||
if (document.cookie && document.cookie != '') { |
|||
var cookies = document.cookie.split(';'); |
|||
for (var i = 0; i < cookies.length; i++) { |
|||
var cookie = jQuery.trim(cookies[i]); |
|||
if (cookie.substring(0, name.length + 1) == (name + '=')) { |
|||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
xhr.setRequestHeader("X-CSRFToken", cookieValue); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
$("#q").autocomplete({ |
|||
source: "{% url 'painel-buscanominal' %}", |
|||
select: function(event, ui) { |
|||
window.location.replace("{{ url_painel }}?type="+ui.item.origin+"&id="+ui.item.value); |
|||
ui.item.value = ui.item.label |
|||
} |
|||
}) |
|||
|
|||
$('input[name^=ocorrencia-]').on('change', function() { |
|||
var $this = $(this), |
|||
data = {'id_ocorrencia': $this.attr('name').split('-')[1], |
|||
'prioridade': $this.attr('value')}; |
|||
|
|||
$.post('{% url "ocorrencia-mudaprioridade" %}', data, function(result) { |
|||
if (result.result == 'error') { |
|||
alert(result.message); |
|||
$this.reset(); |
|||
} |
|||
}); |
|||
}) |
|||
|
|||
function inclui_comentario( event ) { |
|||
event.preventDefault() |
|||
|
|||
var $this = $(this); |
|||
|
|||
$.post($this.attr('action'), $this.serialize(), function( result ) { |
|||
$('div[id=ticket_'+result.ocorrencia_id+']').html(result.ocorrencia_panel); |
|||
$('form[id^=comentar_ocorrencia_').on('submit', inclui_comentario); |
|||
}); |
|||
} |
|||
|
|||
function inclui_ocorrencia( event ) { |
|||
event.preventDefault() |
|||
|
|||
var $this = $(this); |
|||
|
|||
$.post($this.attr('action'), $this.serialize(), function( result ) { |
|||
$("#form_ocorrencia_panel").html(result.ocorrencia_form); |
|||
if (result.result == 'success') { |
|||
$("#form_ocorrencia_panel").collapse('hide'); |
|||
$("#ocorrencias_display").prepend(result.ocorrencia_panel); |
|||
$('form[id^=comentar_ocorrencia_').on('submit', inclui_comentario); |
|||
} |
|||
$('#form_ocorrencia').on('submit', inclui_ocorrencia); |
|||
}); |
|||
} |
|||
|
|||
$('form[id^=comentar_ocorrencia_').on('submit', inclui_comentario); |
|||
$('#form_ocorrencia').on('submit', inclui_ocorrencia); |
|||
}); |
|||
|
|||
function remove_anexo(link) { |
|||
var $this = $(link), |
|||
url = $this.attr('href'), |
|||
div = $("div#anexos_"+$this.attr('data-ocorrencia-id')), |
|||
link = $("a#link_anexos_"+$this.attr('data-ocorrencia-id')); |
|||
|
|||
$( 'body' ).append('<div id="dialog-confirm" title="{% trans "Excluir anexo?" %}"><p><span class="glyphicon glyphicon-alert" style="float:left; margin:0 7px 20px 0;"></span>{% trans "Este anexo será definitivamente excluído e não poderá ser recuperado. Você confirma a exclusão?" %}</p></div>'); |
|||
|
|||
var dialog = $("#dialog-confirm"); |
|||
|
|||
dialog.dialog({ |
|||
resizable: true, |
|||
modal: true, |
|||
buttons: { |
|||
"{% trans 'Excluir' %}": function() { |
|||
$.get(url, function(result) { |
|||
if (result.result == 'error') { |
|||
alert(result.message); |
|||
} |
|||
if (result.result == 'success') { |
|||
div.html(result.anexos_panel); |
|||
link.html(result.link_label); |
|||
} |
|||
}); |
|||
dialog.dialog( 'destroy' ); |
|||
}, |
|||
"{% trans 'Cancelar' %}": function() { |
|||
dialog.dialog( 'destroy' ); |
|||
} |
|||
} |
|||
}); |
|||
return false; |
|||
} |
|||
|
|||
function dismissAddAnexoPopup(win, ocorrencia_id) { |
|||
var div = $("div#anexos_"+ocorrencia_id), |
|||
link = $("a#link_anexos_"+ocorrencia_id); |
|||
|
|||
win.close(); |
|||
|
|||
$.get('{% url "ocorrencia-anexosnippet" %}?ocorrencia_id='+ocorrencia_id, function( result ) { |
|||
div.html(result); |
|||
}); |
|||
} |
|||
|
|||
function showAddAnexoPopup(link) { |
|||
var $this = $(link), |
|||
href = $this.attr('href'), |
|||
win = window.open(href, '', 'height=500,width=800,resizable=yes,scrollbars=yes'); |
|||
win.focus(); |
|||
return false; |
|||
} |
|||
</script> |
|||
|
|||
{% endblock %} |
@ -1,211 +1,99 @@ |
|||
{% extends "admin/base_site.html" %} |
|||
{% extends "admin/base_block.html" %} |
|||
{% load i18n static admin_urls %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<style> |
|||
#content { |
|||
display: block; |
|||
} |
|||
.user-image { |
|||
width: 64px; |
|||
height: 64px; |
|||
font-size: 64px !important; |
|||
} |
|||
commenter-image { |
|||
width: 32px; |
|||
height: 32px; |
|||
font-size: 32px !important; |
|||
} |
|||
.card-details, .user-name { |
|||
font-size: 10px; |
|||
} |
|||
.priority { |
|||
background-color: grey; |
|||
} |
|||
.priority { |
|||
background-color: antiquewhite; |
|||
margin-left: 5px; |
|||
min-width: 60px; |
|||
} |
|||
.chip>img { |
|||
float: left; |
|||
margin: 0 8px 0 -12px; |
|||
height: 32px; |
|||
width: 32px; |
|||
border-radius: 50%; |
|||
} |
|||
</style> |
|||
<link rel="stylesheet" href="{% static 'ocorrencias/css/painel_ocorrencias.css' %}"> |
|||
{% endblock %} |
|||
{% block breadcrumbs %}{% endblock %} |
|||
{% block content %} |
|||
<div class="row"> |
|||
<div class="col s12"><h1>{{ panel_title }}</h1></div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
{% for id, text in paineis.items %} |
|||
<a class="waves-effect waves-light btn-small{% if id != painel %} btn-flat{% endif %}" href="?painel={{ id }}">{{ text }}</a> |
|||
|
|||
{% block content_title %} |
|||
<h5>{{ panel_title }}</h5> |
|||
{% if panel_subtitles %} |
|||
<blockquote> |
|||
<h6>{% trans "Filter" %}:</h6> |
|||
{% for subt in panel_subtitles %} |
|||
<h6>{{ subt }}</h6> |
|||
{% endfor %} |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<button class="waves-effect waves-light btn-small btn-flat modal-trigger" href="#nova_ocorrencia">{% trans "Nova ocorrência" %}</button> |
|||
</div> |
|||
</div> |
|||
<div id="nova_ocorrencia" class="modal"> |
|||
<div class="modal-content"> |
|||
<h4>{% trans "Nova ocorrência" %}</h4> |
|||
{{ ocorrencia_form }} |
|||
</div> |
|||
<div class="modal-footer"> |
|||
<a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a> |
|||
</div> |
|||
</div> |
|||
{% for ocorrencia in ocorrencias %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card hoverable"> |
|||
<div class="card-content"> |
|||
<span class="card-title"> |
|||
<a href="{% url "admin:ocorrencias_ocorrencia_change" ocorrencia.id %}"><i class="material-icons right">edit</i></a> |
|||
{{ ocorrencia.casa_legislativa.nome }}, {{ ocorrencia.casa_legislativa.municipio.uf.sigla }} |
|||
<p class="card-details"> |
|||
{% blocktrans with data_criacao=ocorrencia.data_criacao tipo_contato=ocorrencia.tipo_contato categoria=ocorrencia.categoria status=ocorrencia.get_status_display %} |
|||
Criado em {{ data_criacao }} via {{ tipo_contato }} solicitando {{ categoria }}, com status {{ status }} |
|||
{% endblocktrans %} |
|||
</p> |
|||
<p class="card-details"> |
|||
<strong>{% trans "Gerentes" %}:</strong> |
|||
{% for gerente in ocorrencia.casa_legislativa.gerentes_interlegis.all %} |
|||
<div class="chip"> |
|||
{% if gerente.foto %} |
|||
<img src="{{ gerente.foto.url }}"> |
|||
{% endif %} |
|||
<a href="./">{{ gerente.get_apelido }}</a> |
|||
</div> |
|||
{% endfor %} |
|||
</p> |
|||
</span> |
|||
<div class="row"> |
|||
<div class="col s3 m1 center-align"> |
|||
<a href="./"> |
|||
{% if ocorrencia.servidor_registro.foto %} |
|||
<img class="circle user-image" src="{{ MEDIA_URL }}{{ ocorrencia.servidor_registro.foto }}"/> |
|||
{% else %} |
|||
<i class="material-icons circle user-image">account_circle</i> |
|||
{% endif %} |
|||
</blockquote> |
|||
{% endblock content_title %} |
|||
|
|||
{% block content %} |
|||
{% block object-tools %} |
|||
<div class="fixed-action-btn"> |
|||
<a class="btn-floating btn-large"> |
|||
<i class="large material-icons">build</i> |
|||
</a> |
|||
<ul> |
|||
{% block object-tools-items %} |
|||
<li> |
|||
<a href="#float-filter" class="btn-floating tooltipped waves-effect waves-light modal-trigger" data-position="left" data-tooltip="{% trans 'Filter' %}"> |
|||
<i class="material-icons" aria-hidden="true">filter_list</i> |
|||
</a> |
|||
<span class="user-name">{{ ocorrencia.servidor_registro.get_apelido }}</span> |
|||
</div> |
|||
<div class="col s9 m11"> |
|||
<p>{{ ocorrencia.descricao }}</p> |
|||
<div> |
|||
{% trans "Prioridade" %}: <a class='dropdown-trigger btn-small btn-flat' href='#' data-target='prioridade-{{ ocorrencia.id }}'>{{ ocorrencia.get_prioridade_display }}</a> |
|||
<ul id='prioridade-{{ ocorrencia.id }}' class='dropdown-content'> |
|||
{% for key, name in PRIORITY_CHOICES %} |
|||
{% if key != ocorrencia.prioridade %} |
|||
<li><a href="#!">{{ name }}</a></li> |
|||
{% endif %} |
|||
{% endfor %} |
|||
</ul> |
|||
<a class="waves-effect waves-light btn-small btn-flat right modal-trigger" href="#modal{{ ocorrencia.id}}">{% blocktranslate count counter=ocorrencia.anexo_set.count %}Um anexo{% plural %}{{ counter }} anexos{% endblocktranslate %}</a> |
|||
<div id="modal{{ ocorrencia.id}}" class="modal"> |
|||
<div class="modal-content"> |
|||
<h4>Anexos</h4> |
|||
<ul class="collection"> |
|||
{% for anexo in ocorrencia.anexo_set.all %} |
|||
<li class="collection-item"> |
|||
<div> |
|||
<a href="{{ anexo.arquivo.url }}" download>{{ anexo.data_pub|date:"SHORT_DATE_FORMAT" }} | {{ anexo.descricao }}</a> |
|||
<a href="#!" class="secondary-content"><i class="material-icons">delete_forever</i></a> |
|||
</div> |
|||
</li> |
|||
{% endfor %} |
|||
{% if has_add_permission %} |
|||
<li> |
|||
<a href="{% url 'admin:ocorrencias_ocorrencia_add' %}" class="btn-floating tooltipped waves-effect waves-light" data-position="left" data-tooltip="{% trans 'Add' %}"> |
|||
<i class="material-icons" aria-hidden="true">add</i> |
|||
</a> |
|||
</li> |
|||
{% endif %} |
|||
{% endblock %} |
|||
</ul> |
|||
</div> |
|||
<div class="modal-footer"> |
|||
<a href="#!" class="modal-close waves-effect waves-green btn-flat">Agree</a> |
|||
<div id="float-filter" class="modal"> |
|||
<form id="filter-form" method="get"> |
|||
<div id="side-wrapper" class="modal-content"> |
|||
{% block filters %} |
|||
{% if filter %} |
|||
<h4>{% trans 'Filter' %}</h4> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<a href="?">{% trans "Clear all filters" %}</a> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
{{ filter.form }} |
|||
</div> |
|||
{% endif %} |
|||
{% endblock %} |
|||
</div> |
|||
<div class="modal-footer"> |
|||
<a href="#!" class="modal-close waves-effect waves-green btn-flat">{% trans "Close" %}</a> |
|||
<button id="apply-filters" type="submit" class="waves-effect waves-green btn-flat">{% trans 'Filtrar' %}</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
<div class="card-content"> |
|||
<ul class="collection"> |
|||
<li class="collection-item avatar"> |
|||
{% if usuario.foto %} |
|||
<img class="circle commenter-image" src="{{ MEDIA_URL }}{{ servidor_registro.foto }}"/> |
|||
{% else %} |
|||
<i class="material-icons circle">account_circle</i> |
|||
{% endif %} |
|||
<form class="row" id="comentar_ocorrencia_{{ ocorrencia.id|safe }}" action="#!" method="post" data-ocorrencia-id="{{ ocorrencia.id|safe }}"> |
|||
{% csrf_token %} |
|||
<p>{% trans "Comentar" %}:</p> |
|||
{% for field in comentario_form %} |
|||
{% if field.name == 'ocorrencia' %} |
|||
<input type='hidden' name='ocorrencia' value='{{ ocorrencia.id|safe }}'/> |
|||
{% elif field.name == 'novo_status' %} |
|||
<div class="input-field col m4 s12"> |
|||
<select name="novo_status" id="id_novo_status_{{ ocorrencia.id|safe }}" class="browser-default"> |
|||
{% for value, label in field.field.widget.choices %} |
|||
{% if value == '' %} |
|||
<option value="{{ value|stringformat:'s' }}">{{ label }}</option> |
|||
{% elif value != 1 %} |
|||
{% if ocorrencia.status < 3 and value > 2 %} |
|||
<option value="{{ value|stringformat:'s' }}">{{ label }}</option> |
|||
{% endif %} |
|||
{% if ocorrencia.status > 2 and value == 2 %} |
|||
<option value="{{ value|stringformat:'s' }}">{{ label }}</option> |
|||
{% endif %} |
|||
{% endif %} |
|||
{% endblock %} |
|||
|
|||
{% block ocorrencia_cards %} |
|||
{% for ocorrencia in ocorrencias %} |
|||
{% include 'ocorrencias/painel_snippet.html' %} |
|||
{% endfor %} |
|||
</select> |
|||
</div> |
|||
{% endblock ocorrencia_cards %} |
|||
|
|||
{% block paginator %} |
|||
{% if is_paginated %} |
|||
<ul class="pagination"> |
|||
{% if page_obj.has_previous %} |
|||
<li class="waves-effect"><a href="?{{ filter.preserve_filter }}&page={{ page_obj.previous_page_number }}"><i class="material-icons">chevron_left</i></a></li> |
|||
{% else %} |
|||
<div class="input-field col m8 s12"> |
|||
{{ field }} |
|||
</div> |
|||
<li class="disabled"><a href="?{{ filter.preserve_filter }}"><i class="material-icons">chevron_left</i></a></li> |
|||
{% endif %} |
|||
{% for page_number in page_obj.paginator.page_range %} |
|||
<li class=" {% if page_number == page_obj.number %}active{% else %}waves-effect{% endif %}"><a href="?{{ filter.preserve_filter }}&page={{ page_number }}">{{ page_number }}</a></li> |
|||
{% endfor %} |
|||
<button type="submit" class="secondary-content"><i class="material-icons">send</i></button> |
|||
</form> |
|||
</li> |
|||
{% for comentario in ocorrencia.comentarios.all %} |
|||
<li class="collection-item avatar"> |
|||
{% if comentario.usuario.foto %} |
|||
<img class="circle" src="{{ MEDIA_URL }}{{ comentario.usuario.foto }}"/> |
|||
{% if page_obj.has_next %} |
|||
<li class="waves-effect"><a href="?{{ filter.preserve_filter }}&page={{ page_obj.next_page_number }}"><i class="material-icons">chevron_right</i></a></li> |
|||
{% else %} |
|||
<i class="material-icons circle ">account_circle</i> |
|||
{% endif %} |
|||
<p>{% blocktranslate with data=comentario.data_criacao nome=comentario.usuario.get_apelido %} |
|||
Em {{ data }}, {{ nome }} disse: |
|||
{% endblocktranslate %}</p> |
|||
<span class="title">{{ comentario.descricao }}</span> |
|||
{% if comentario.novo_status %} |
|||
<p>{% blocktranslate with status=comentario.get_novo_status_display|default:"-" %} |
|||
Status: {{ status }} |
|||
{% endblocktranslate %}</p> |
|||
<li class="disabled"><a href="?{{ filter.preserve_filter }}"><i class="material-icons">chevron_right</i></a></li> |
|||
{% endif %} |
|||
</li> |
|||
{% endfor %} |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endfor %} |
|||
{% endif %} |
|||
{% endblock paginator %} |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
{{ block.super }} |
|||
<script> |
|||
$(document).ready(function(){ |
|||
var elems = document.querySelectorAll('.dropdown-trigger'); |
|||
var instances = M.Dropdown.init(elems, {}); |
|||
var elems = document.querySelectorAll('.modal'); |
|||
var instances = M.Modal.init(elems, {}); |
|||
}); |
|||
</script> |
|||
<script type="text/javascript" src="{% static 'ocorrencias/js/painel_ocorrencias.js' %}"></script> |
|||
{% endblock %} |
@ -0,0 +1,153 @@ |
|||
{% load i18n %} |
|||
|
|||
<div id="ocorrencia-{{ ocorrencia.id|safe }}" class="row"> |
|||
<div class="col s12"> |
|||
<div class="card hoverable"> |
|||
<div class="card-content"> |
|||
<span class="card-title"> |
|||
{% block edit_link %} |
|||
{% if user.is_staff %} |
|||
{% if has_change_permission %} |
|||
<a href="{% url "admin:ocorrencias_ocorrencia_change" ocorrencia.id %}"><i class="material-icons right">edit</i></a> |
|||
{% endif %} |
|||
{{ ocorrencia.casa_legislativa.nome }}, {{ ocorrencia.casa_legislativa.municipio.uf.sigla }} |
|||
{% else %} |
|||
{{ ocorrencia.assunto }} |
|||
{% endif %} |
|||
{% endblock edit_link %} |
|||
<p class="card-details"> |
|||
{% blocktrans with data_criacao=ocorrencia.data_criacao|date:"SHORT_DATE_FORMAT" tipo_contato=ocorrencia.tipo_contato categoria=ocorrencia.categoria status=ocorrencia.get_status_display prioridade=ocorrencia.get_prioridade_display %} |
|||
Criado em {{ data_criacao }} via {{ tipo_contato }} solicitando {{ categoria }}, com status {{ status }}. Prioridade: {{ prioridade }} |
|||
{% endblocktrans %} |
|||
</p> |
|||
</span> |
|||
<div class="row"> |
|||
<div class="col s3 m1 center-align"> |
|||
{% if ocorrencia.servidor_registro.foto %} |
|||
<img class="circle user-image" src="{{ MEDIA_URL }}{{ ocorrencia.servidor_registro.foto }}"/> |
|||
{% else %} |
|||
<i class="material-icons circle user-image">account_circle</i> |
|||
{% endif %} |
|||
<span class="user-name">{{ ocorrencia.servidor_registro.get_apelido }}</span> |
|||
</div> |
|||
<div class="col s9 m11"> |
|||
<p>{{ ocorrencia.descricao }}</p> |
|||
</div> |
|||
</div> |
|||
|
|||
{% block card-adesao %} |
|||
{% if 'solicita_convenio' in ocorrencia.infos %} |
|||
<div class="row card-inbox"> |
|||
<span class="inbox-title">{% trans "Solicitação de convênio" %}</span> |
|||
{% if user.is_staff %} |
|||
<a class="default waves-effect waves-light btn-small right" href="{% url 'ocorrencias_painel_convenio' ocorrencia.id %}{% if filter.preserve_filter %}?list_filter={{ filter.preserve_filter|urlencode }}{% endif %}">Gerenciar</a> |
|||
{% endif %} |
|||
<p> |
|||
{% for key, value in ocorrencia.get_infos_details.items %} |
|||
<span class="span-list"> |
|||
<i class="material-icons {% if value.0 %}green-text{% else %}red-text{% endif %}">{% if value.0 %}done{% else %}clear{% endif %}</i> |
|||
{{ value.1 }} |
|||
</span> |
|||
{% endfor %} |
|||
</p> |
|||
</div> |
|||
{% endif %} |
|||
{% endblock card-adesao %} |
|||
|
|||
{% block card-oficina %} |
|||
{% if 'solicita_oficinas' in ocorrencia.infos %} |
|||
<div class="row card-inbox"> |
|||
<span class="inbox-title">{% trans "Solicitação de oficinas" %}</span> |
|||
{% if user.is_staff %} |
|||
<a class="default waves-effect waves-light btn-small right" href="{% url 'ocorrencias_painel_oficina' ocorrencia.id %}{% if filter.preserve_filter %}?list_filter={{ filter.preserve_filter|urlencode }}{% endif %}">Gerenciar</a> |
|||
{% endif %} |
|||
<p> |
|||
<span class="strong">{% trans "Oficinas solicitadas:" %}</span> |
|||
{% for oficina in ocorrencia.get_infos_oficinas %} |
|||
<span class="span-list">{{ oficina.nome }}</span> |
|||
{% endfor %} |
|||
</p> |
|||
<p> |
|||
<span class="strong">{% trans "Senadores selecionados:" %}</span> |
|||
{% for senador in ocorrencia.get_infos_senadores %} |
|||
<span class="span-list">{{ senador.nome_completo }} ({{ senador.partido.sigla }})</span> |
|||
{% endfor %} |
|||
</p> |
|||
</div> |
|||
{% endif %} |
|||
{% endblock card-oficina %} |
|||
|
|||
{% block card-anexos %} |
|||
<div class="row card-inbox"> |
|||
<span class="inbox-title">{% trans "Anexos" %}</span> |
|||
<table class="striped"> |
|||
<thead> |
|||
<tr> |
|||
<th>{% trans "Data de publicação" %}</th> |
|||
<th>{% trans "Descrição" %}</th> |
|||
<th>{% trans "Arquivo" %}</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for anexo in ocorrencia.anexo_set.all %} |
|||
<tr> |
|||
<td>{{ anexo.data_pub|date:"SHORT_DATE_FORMAT" }}</td> |
|||
<td>{{ anexo.descricao }}</td> |
|||
<td><a href="{{ anexo.arquivo.url }}" download><i class="material-icons">file_download</i></a></td> |
|||
</tr> |
|||
{% empty %} |
|||
<tr><td colspan="3">{% trans "Nenhum anexo" %}</td></tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{% if anexo_form %} |
|||
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %} |
|||
<button type="submit" name="anexo_save" class="right waves-effect waves-light btn-small"><i class="material-icons left">send</i></button> |
|||
{{ anexo_form }} |
|||
<input type="hidden" name="ocorrencia_id" value="{{ ocorrencia.id|safe }}"/> |
|||
</form> |
|||
{% endif %} |
|||
</div> |
|||
{% endblock card-anexos %} |
|||
{% block card-comentarios %} |
|||
<div class="row card-inbox"> |
|||
<span class="inbox-title">{% trans "Comentários" %}</span> |
|||
<ul class="collection"> |
|||
{% for comentario in ocorrencia.comentarios.all %} |
|||
{% if user.is_staff or comentario.interno == False %} |
|||
<li class="collection-item avatar"> |
|||
{% if comentario.usuario.foto %} |
|||
<img class="circle" src="{{ comentario.usuario.foto.url }}"/> |
|||
{% else %} |
|||
<i class="material-icons circle ">account_circle</i> |
|||
{% endif %} |
|||
<p>{% blocktranslate with data=comentario.data_criacao nome=comentario.usuario.get_apelido %} |
|||
Em {{ data }}, {{ nome }} disse: |
|||
{% endblocktranslate %}</p> |
|||
<span class="title">{{ comentario.descricao }}</span> |
|||
{% if comentario.novo_status %} |
|||
<p>{% blocktranslate with status=comentario.get_novo_status_display|default:"-" %} |
|||
Status: {{ status }} |
|||
{% endblocktranslate %}</p> |
|||
{% endif %} |
|||
</li> |
|||
{% endif %} |
|||
{% empty %} |
|||
<li class="collection-item">{% trans "Nenhum comentário" %}</li> |
|||
{% endfor %} |
|||
{% if comentario_form %} |
|||
<li class="collection-item"> |
|||
<form action="" method="post">{% csrf_token %} |
|||
<button type="submit" name="comentario_save" class="right waves-effect waves-light btn-small"><i class="material-icons left">send</i></button> |
|||
{{ comentario_form }} |
|||
<input type="hidden" name="ocorrencia_id" value="{{ ocorrencia.id|safe }}"/> |
|||
</form> |
|||
</li> |
|||
{% endif %} |
|||
</ul> |
|||
</div> |
|||
{% endblock card-comentarios %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
@ -0,0 +1,44 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n static %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<link rel="stylesheet" href="{% static 'ocorrencias/css/painel_ocorrencias.css' %}"> |
|||
<style> |
|||
.pagination span { |
|||
font-weight: bold; |
|||
} |
|||
.pagination i { |
|||
vertical-align: middle; |
|||
margin: 0 24px; |
|||
color: #000 !important; |
|||
} |
|||
</style> |
|||
{% endblock extrastyle %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="breadcrumbs"> |
|||
{% for status_code, status_label in statuses %} |
|||
{% if status_code in selected_status %} |
|||
<a class="waves-effect waves-light btn-small" href="{% url 'ocorrencias:ocorrencia_listview' %}?{% for s in selected_status %}{%if s != status_code %}status={{ s }}&{% endif %}{% endfor %}"> |
|||
<i class="material-icons left">checked</i> |
|||
{{ status_label }} |
|||
</a> |
|||
{% else %} |
|||
<a class="waves-effect waves-light btn-small" href="{% url 'ocorrencias:ocorrencia_listview' %}?status={{ selected_status|join:'&status=' }}&status={{ status_code }}"> |
|||
{{ status_label }} |
|||
</a> |
|||
{% endif %} |
|||
{% endfor %} |
|||
</div> |
|||
|
|||
{% for ocorrencia in object_list %} |
|||
{% include 'ocorrencias/painel_snippet.html' %} |
|||
{% endfor %} |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
{{ block.super }} |
|||
<script type="text/javascript" src="{% static 'ocorrencias/js/painel_ocorrencias.js' %}"></script> |
|||
{% endblock %} |
@ -0,0 +1,61 @@ |
|||
{% extends 'convenios/oficio_padrao.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block text_body %} |
|||
<p> |
|||
{% trans "OFÍCIO Nº:" %} {{ ocorrencia.infos.solicita_oficinas.numero_oficio }} |
|||
<span class="right">{{ casa.municipio.nome }}, {{ casa.municipio.uf.sigla }}, {% now "DATE_FORMAT" %}.</p> |
|||
</p> |
|||
<br/> |
|||
<p>{% trans "À Sua Excelência o(a) Sr(a). Senador(a)." %}</p> |
|||
<p>{% trans "ASSUNTO:" %}<strong> {% trans "Solicitação de oficinas/encontros Interlegis." %}</strong></p> |
|||
<br/> |
|||
<p>{% trans "Excelentíssimo(a) Sr(a). Senador(a)," %}</p> |
|||
<p class="justify-align">{% blocktranslate %} |
|||
É do conhecimento desta Câmara Municipal que o ILB-Instituto Legislativo |
|||
Brasileiro, gestor do programa Interlegis, tornou-se há muito a referência |
|||
nacional de instrumento de apoio no processo de modernização e integração |
|||
do Poder Legislativo brasileiro. Indubitavelmente, colabora de maneira |
|||
efetiva no cumprimento da Lei no. 12.527, de 2011 (sobre Acesso à |
|||
Informação), da Lei no. 13.709, de 2018 (sobre Proteção de Dados), e da Lei |
|||
Complementar no. 101, de 2000 (sobre Responsabilidade Fiscal e Transparência |
|||
na Gestão Pública), bem como auxilia na aderência aos marcos jurídicos |
|||
municipais.{% endblocktranslate %} |
|||
</p> |
|||
<p class="justify-align">{% blocktranslate %} |
|||
Da mesma forma, esta Casa reconhece que o Interlegis realiza sua missão, |
|||
em grande parte, com a transferência de tecnologia (disponibilização de |
|||
ferramentas tecnológicas para as Câmaras) e as ações de capacitação |
|||
(conhecidas como Oficinas e Encontros Interlegis), sem ônus direto e por |
|||
meio da colaboração de seus servidores especializados.{% endblocktranslate %} |
|||
</p> |
|||
<p class="justify-align">{% blocktranslate %} |
|||
Também temos ciência de que a solicitação de Oficinas e Encontros deve |
|||
observar as condições físicas, operacionais e de pessoal das Casas |
|||
legislativas.{% endblocktranslate %} |
|||
</p> |
|||
<p class="justify-align">{% blocktranslate %} |
|||
Assim, vimos solicitar a Vossa Excelência apoio para a realização dos |
|||
eventos a seguir, com o objetivo de habilitar os servidores desta Casa |
|||
legislativa e das Câmaras Municipais vizinhas para o uso dos produtos e |
|||
serviços do Programa Interlegis:{% endblocktranslate %} |
|||
</p> |
|||
<p><strong>{% trans "Na modalidade:" %}</strong>{% if ocorrencia.infos.solicita_oficinas.modalidade == 'R' %}{% trans "REMOTA (videoconferência)" %}{% else %}{% trans "PRESENCIAL" %}{% endif %}</p> |
|||
<p><strong>{% blocktranslate count counter=oficinas|length %}A seguinte oficina:{% plural %}As seguintes oficinas:{% endblocktranslate %}</strong></p> |
|||
<ul>{% for oficina in oficinas %} |
|||
<li>{{ oficina }}</li> |
|||
{% endfor %}</ul> |
|||
<p class="justify-align">{% blocktranslate %} |
|||
Confiamos também que o atendimento a esta solicitação permitirá, além da |
|||
qualificação técnica dos servidores, uma economia significativa de recursos |
|||
financeiros, tanto na área de Tecnologia da Informação quanto na capacitação |
|||
de Recursos Humanos.{% endblocktranslate %} |
|||
</p> |
|||
<br/> |
|||
<p>{% trans "Respeitosamente," %}</p> |
|||
<br/><br/><br/> |
|||
<p class="center-align">_______________________________________________</p> |
|||
<p class="center-align"><strong>{{ casa.presidente.nome_completo|upper }}</strong></p> |
|||
<p class="center-align">{% trans "Presidente" %}</p> |
|||
|
|||
{% endblock %} |
@ -0,0 +1,57 @@ |
|||
{% extends "public/base_site.html" %} |
|||
{% load static i18n %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css" /> |
|||
<link rel="stylesheet" href="{% static "admin/css/changelists.css" %}" type="text/css" /> |
|||
<link rel="stylesheet" href="{% static 'ocorrencias/css/ocorrencia.css' %}" type="text/css" /> |
|||
{% endblock %} |
|||
|
|||
{% block usertools %} |
|||
<div id="user-tools"> |
|||
<a href="/">{% trans "Início" %}</a> |
|||
<a href="{% url 'home_index' %}">{% trans "Entrar" %}</a> |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block side_nav %}{% endblock %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{{ title }}</span> |
|||
<p>{{ summary|safe }}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Identifique sua Casa Legislativa" %}</span> |
|||
<p>{% trans "Informe o nome do município ou Estado da sua Casa Legislativa" %}:</p> |
|||
<div class="input-field"> |
|||
<i class="material-icons prefix">search</i> |
|||
<input type="text" class="search-text" placeholder="{% trans "Procurar" %}" aria-label="{% trans "Procurar" %}" data-source="{% url 'openmapsearch' %}" data-param="q"> |
|||
<div class="search-result hide" data-item-click="seleciona_casa"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
{{ block.super }} |
|||
<script type="text/javascript" src="{% static 'js/search.js' %}"></script> |
|||
<script> |
|||
function seleciona_casa(data) { |
|||
$(location).attr("href", `{{ success_url }}?{{ parameter_name }}=${data.id}`); |
|||
} |
|||
</script> |
|||
{% endblock %} |
@ -0,0 +1,252 @@ |
|||
{% extends "public/base_site.html" %} |
|||
{% load static i18n %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{{ ocorrencia.assunto }} # {{ ocorrencia.id|safe }}</span> |
|||
<p> |
|||
{% blocktrans with name=ocorrencia.casa_legislativa.nome %} |
|||
A solicitação da {{ name }} está na nossa base de dados |
|||
{% endblocktrans %} |
|||
</p> |
|||
</div> |
|||
<div class="card-tabs"> |
|||
<ul class="tabs tabs-fixed-width"> |
|||
{% if not 'aplicados' in infos or 'casa_legislativa' not in infos.aplicados %} |
|||
<li class="tab"> |
|||
<a {% if tab_name == 'casa' %}class="active" {% endif %}href="{% url 'ocorrencias:solicita_convenio' pk=ocorrencia.id tab='casa' %}">{% trans "Casa legislativa" %}</a> |
|||
</li> |
|||
{% endif %} |
|||
{% if not 'aplicados' in infos or 'presidente' not in infos.aplicados %} |
|||
<li class="tab"> |
|||
<a {% if tab_name == 'presidente' %}class="active" {% endif %}href="{% url 'ocorrencias:solicita_convenio' pk=ocorrencia.id tab='presidente' %}">{% trans "Presidente" %}</a> |
|||
</li> |
|||
{% endif %} |
|||
{% if not 'aplicados' in infos or 'contato' not in infos.aplicados %} |
|||
<li class="tab"> |
|||
<a {% if tab_name == 'contato' %}class="active" {% endif %}href="{% url 'ocorrencias:solicita_convenio' pk=ocorrencia.id tab='contato' %}">{% trans "Contato Interlegis" %}</a> |
|||
</li> |
|||
{% endif %} |
|||
{% if not 'aplicados' in infos %} |
|||
<li class="tab"> |
|||
<a {% if tab_name == 'documentos' %}class="active" {% endif %}href="{% url 'ocorrencias:solicita_convenio' pk=ocorrencia.id tab='documentos' %}">{% trans "Documentos" %}</a> |
|||
</li> |
|||
{% endif %} |
|||
<li class="tab"> |
|||
<a {% if tab_name == 'resumo' %}class="active" {% endif %}href="{% url 'ocorrencias:solicita_convenio' pk=ocorrencia.id tab='resumo' %}">{% trans "Resumo" %}</a> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
</div> |
|||
{% if tab_name == 'casa' %} |
|||
{% if not 'aplicados' in infos or 'casa_legislativa' not in infos.aplicados %} |
|||
<div id="casa" class="col s12"> |
|||
<div class="tab-panel"> |
|||
<div class="tab-content"> |
|||
<form action="" method="post" name="casa_legislativa" enctype="multipart/form-data"> |
|||
{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title"> |
|||
{% trans "Atualizar as informações cadastrais da Casa" %} |
|||
</span> |
|||
{{ form }} |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="tab" value="casa"> |
|||
{% trans "Save" %} |
|||
<i class="material-icons right">send</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
{% endif %} |
|||
{% if tab_name == 'presidente' %} |
|||
{% if not 'aplicados' in infos or 'presidente' not in infos.aplicados %} |
|||
<div id="presidente" class="col s12"> |
|||
<div class="tab-panel"> |
|||
<div class="tab-content"> |
|||
<form action="" method="post" name="presidente"> |
|||
{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title"> |
|||
{% trans "Selecionar e atualizar o presidente" %} |
|||
</span> |
|||
{{ form }} |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="tab" value="presidente"> |
|||
{% trans "Save" %} |
|||
<i class="material-icons right">send</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
{% endif %} |
|||
{% if tab_name == 'contato' %} |
|||
{% if not 'aplicados' in infos or 'contato' not in infos.aplicados %} |
|||
<div id="contato" class="col s12 tabpanel"> |
|||
<div class="tab-panel"> |
|||
<div class="tab-content"> |
|||
<form action="" method="post" name="contato"> |
|||
{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Contato Interlegis" %}</span> |
|||
<p>Designe um servidor da Casa Legislativa para ser o contato técnico junto ao Interlegis.</p> |
|||
<p>Este servidor será o responsável por acompanhar a formalização do ACT, prestar informações e esclarecimentos, e solicitar a instalação de produtos e serviços ao Interlegis.</p> |
|||
{{ form }} |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="tab" value="contato"> |
|||
{% trans "Save" %} |
|||
<i class="material-icons right">send</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
{% endif %} |
|||
{% if tab_name == "documentos" %} |
|||
<div id="documentos" class="col s12 tabpanel"> |
|||
<div class="tab-panel"> |
|||
<div class="tab-content"> |
|||
<form action="" method="post" name="documentos" enctype="multipart/form-data"> |
|||
{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Documentos de formalização" %}</span> |
|||
<p>Os documentos para formalização do convênio foram gerados e estão disponíveis abaixo.</p> |
|||
<p>Você precisa realizar os seguintes passos para que possamos dar prosseguimento ao processo:</p> |
|||
<ul> |
|||
<li>Baixe (dowload) o ofício de solicitação do convênio.</li> |
|||
<li>Providencie que o ofício de solicitação seja assinado pelo Presidente da Casa. Se for possível, assine o PDF com uma assinatura digital. Se o Presidente não possui uma assinatura digital válida, pode-se imprimir o documento, assinar com caneta azul, e escanear o documento assinado.</li> |
|||
<li>Suba (upload) o ofício assinado no campo Arquivo, abaixo, em formato PDF</li> |
|||
<li>O documento Minuta de ACT é a minuta do convênio que tramitará no Senado e está disponível para consulta e avaliação da consultoria jurídica da sua Casa Legislativa. Após assinatura do ACt pela diretoria do Senado, a cópia definitiva será enviada à sua Casa para colher também a assinatura do Presidente.</p> |
|||
</ul> |
|||
<p>Assim que recebermos o ofício devidamente assinado, iniciaremos o procedimento burocrático para formalização do convênio. Você poderá acompanhar a evolução deste processo nesta tela, na aba RESUMO</p> |
|||
<table class="striped"> |
|||
<thead> |
|||
<caption>Arquivos do processo</caption> |
|||
<tr> |
|||
<th>Descrição</th><th>Arquivo</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for anexo in ocorrencia.anexo_set.all %} |
|||
<tr> |
|||
<td>{{ anexo.descricao }}</td> |
|||
<td><a href="{{ anexo.arquivo.url }}">{{ anexo.arquivo.name }}</a></td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{{ form }} |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="tab" value="documentos"> |
|||
{% trans "Save" %} |
|||
<i class="material-icons right">send</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
{% if tab_name == "resumo" %} |
|||
<div id="resumo" class="col s12 tabpanel"> |
|||
<div class="tab-panel"> |
|||
<div class="tab-content"> |
|||
<form action="" method="post" name="comentario"> |
|||
{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<table> |
|||
<tr> |
|||
<th>{% trans "Casa legislativa" %}</th><td>{{ ocorrencia.casa_legislativa.nome }}</td> |
|||
<th>{% trans "Descrição" %}</th><td>{{ ocorrencia.descricao }}</td> |
|||
<th>{% trans "Solicitado em" %}</th><td>{{ ocorrencia.data_criacao|date:"DATE_FORMAT" }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>{% trans "Situação" %}</th><td>{{ ocorrencia.get_status_display }}</td> |
|||
<th>{% trans "Prioridade" %}</th><td>{{ ocorrencia.get_prioridade_display }}</td> |
|||
<th>{% trans "Última atualização" %}</th><td>{{ ocorrencia.data_modificacao|date:"DATE_FORMAT" }}</td> |
|||
</tr> |
|||
</table> |
|||
<table> |
|||
<thead> |
|||
<caption><span class="card-title">{% trans "Progresso do processo" %}</span></caption> |
|||
<tr><th>{% trans "Data" %}</th><th>{% trans "Descrição" %}</th><th>{% trans "Novo status" %}</th><th>{% trans "Registrado por" %}</th></tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for comentario in ocorrencia.comentarios.all %} |
|||
{% if not comentario.interno %} |
|||
<tr> |
|||
<td>{{ comentario.data_criacao|date:"SHORT_DATE_FORMAT" }}</td> |
|||
<td>{{ comentario.descricao }}</td> |
|||
<td>{{ comentario.get_novo_status_display|default:"-" }}</td> |
|||
<td>{{ comentario.usuario }}</td> |
|||
</tr> |
|||
{% endif %} |
|||
{% empty %} |
|||
<tr><td colspan="4">{% trans "Aguardando andamento no Senado" %}</td></tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
{{ form }} |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="tab" value="resumo"> |
|||
{% trans "Comentar" %} |
|||
<i class="material-icons left">comment</i> |
|||
</button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
</div> |
|||
{% endblock %} |
|||
|
|||
{% block footer %} |
|||
{{ block.super }} |
|||
<script> |
|||
$(document).ready(function() { |
|||
$("select#id_presidente-parlamentar").on("change", function() { |
|||
$.get("{% url 'parlamentares:parlamentar_data' %}", `id=${this.value}`, function(data) { |
|||
for(var campo of Object.keys(data[0].fields)) { |
|||
$(`#id_presidente-${campo}`).val(data[0].fields[campo]); |
|||
} |
|||
}) |
|||
}) |
|||
}); |
|||
function seleciona_casa(data) { |
|||
$(location).attr("href", `{% url 'ocorrencias:ocorrencia_convenio_seleciona_casa' %}?casa_id=${data.id}`); |
|||
} |
|||
</script> |
|||
{% endblock %} |
@ -0,0 +1,24 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form method="post">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans "Solicitação de treinamentos" %}</span> |
|||
{{ form }} |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="action"> |
|||
{% trans 'Solicitar' %} |
|||
<i class="material-icons right">save</i> |
|||
</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -0,0 +1,67 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block extrahead %} |
|||
{{ block.super }} |
|||
{{ form.media }} |
|||
{% endblock extrahead %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form method="post" enctype="multipart/form-data">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% blocktranslate with id=ocorrencia.id|safe %}Solicitação de treinamento #{{ id }}{% endblocktranslate %}</span> |
|||
<blockquote><h6>O ofício de solicitação de oficinas foi gerado e está disponível abaixo.</h6></blockquote> |
|||
<table> |
|||
<thead><caption>Resumo da ocorrência</caption></thead> |
|||
<tbody> |
|||
<tr> |
|||
<th colspan="2">{% trans "Descrição" %}</th><td>{{ ocorrencia.descricao }}</td> |
|||
<th>{% trans "Solicitado em" %}</th><td>{{ ocorrencia.data_criacao|date:"DATE_FORMAT" }}</td> |
|||
</tr> |
|||
<tr> |
|||
<th>{% trans "Situação" %}</th><td>{{ ocorrencia.get_status_display }}</td> |
|||
<th>{% trans "Prioridade" %}</th><td>{{ ocorrencia.get_prioridade_display }}</td> |
|||
<th>{% trans "Última atualização" %}</th><td>{{ ocorrencia.data_modificacao|date:"DATE_FORMAT" }}</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
<table class="striped"> |
|||
<thead> |
|||
<caption>Arquivos do processo</caption> |
|||
<tr> |
|||
<th>Descrição</th><th>Arquivo</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for anexo in ocorrencia.anexo_set.all %} |
|||
<tr> |
|||
<td>{{ anexo.descricao }}</td> |
|||
<td><a href="{{ anexo.arquivo.url }}">{{ anexo.arquivo.name }}</a></td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
<blockquote><h6>Você precisa realizar os seguintes passos para que possamos dar prosseguimento ao processo:</h6></blockquote> |
|||
<ul class="collection"> |
|||
<li class="collection-item">Baixe (dowload) o ofício de solicitação de oficinas.</li> |
|||
<li class="collection-item">Providencie que o ofício de solicitação seja assinado pelo Presidente da Casa. Se for possível, assine o PDF com uma assinatura digital. Se o Presidente não possui uma assinatura digital válida, pode-se imprimir o documento, assinar com caneta azul, e escanear o documento assinado.</li> |
|||
<li class="collection-item">Suba (upload) o ofício assinado no campo Arquivo, abaixo, em formato PDF</li> |
|||
</ul> |
|||
<blockquote><h6>Assim que recebermos o ofício devidamente assinado, iniciaremos o procedimento burocrático para realização da(s) oficina(s).</h6></blockquote> |
|||
{{ form }} |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit"> |
|||
{% trans "Save" %} |
|||
<i class="material-icons right">send</i> |
|||
</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
File diff suppressed because it is too large
@ -0,0 +1,17 @@ |
|||
# Generated by Django 4.0.6 on 2022-08-02 17:34 |
|||
|
|||
from django.db import migrations |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('parlamentares', '0010_alter_parlamentar_options'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='parlamentar', |
|||
options={'ordering': ('status_mandato', '-presidente', 'nome_completo'), 'verbose_name_plural': 'parlamentares'}, |
|||
), |
|||
] |
@ -0,0 +1,77 @@ |
|||
# Generated by Django 4.1 on 2022-08-19 02:27 |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
( |
|||
"contatos", |
|||
"0005_alter_mesorregiao_options_alter_microrregiao_options_and_more", |
|||
), |
|||
("parlamentares", "0011_alter_parlamentar_options"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name="Senador", |
|||
fields=[ |
|||
( |
|||
"id", |
|||
models.BigAutoField( |
|||
auto_created=True, |
|||
primary_key=True, |
|||
serialize=False, |
|||
verbose_name="ID", |
|||
), |
|||
), |
|||
("codigo", models.IntegerField(unique=True, verbose_name="código")), |
|||
( |
|||
"nome_parlamentar", |
|||
models.CharField(max_length=100, verbose_name="nome parlamentar"), |
|||
), |
|||
( |
|||
"nome_completo", |
|||
models.CharField(max_length=100, verbose_name="nome completo"), |
|||
), |
|||
( |
|||
"sexo", |
|||
models.CharField( |
|||
choices=[("M", "Masculino"), ("F", "Feminino")], |
|||
max_length=1, |
|||
verbose_name="sexo", |
|||
), |
|||
), |
|||
( |
|||
"forma_tratamento", |
|||
models.CharField(max_length=50, verbose_name="forma de tratamento"), |
|||
), |
|||
("email", models.EmailField(max_length=254, verbose_name="e-mail")), |
|||
( |
|||
"partido", |
|||
models.ForeignKey( |
|||
blank=True, |
|||
null=True, |
|||
on_delete=django.db.models.deletion.CASCADE, |
|||
to="parlamentares.partido", |
|||
verbose_name="partido", |
|||
), |
|||
), |
|||
( |
|||
"uf", |
|||
models.ForeignKey( |
|||
on_delete=django.db.models.deletion.CASCADE, |
|||
to="contatos.unidadefederativa", |
|||
verbose_name="UF", |
|||
), |
|||
), |
|||
], |
|||
options={ |
|||
"verbose_name": "senador", |
|||
"verbose_name_plural": "senadores", |
|||
"ordering": ("uf", "nome_parlamentar"), |
|||
}, |
|||
), |
|||
] |
@ -0,0 +1,84 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block extrastyle %} |
|||
{{ block.super }} |
|||
<style> |
|||
.pagination span { |
|||
font-weight: bold; |
|||
} |
|||
.pagination i { |
|||
vertical-align: middle; |
|||
margin: 0 24px; |
|||
color: #000 !important; |
|||
} |
|||
</style> |
|||
{% endblock extrastyle %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="breadcrumbs"> |
|||
{% if suplentes %} |
|||
<a class="waves-effect waves-light btn-small" href="{% url "parlamentares:parlamentar_listview" %}">{% trans 'Ocultar suplentes' %}</a> |
|||
{% else %} |
|||
<a class="waves-effect waves-light btn-small" href="{% url "parlamentares:parlamentar_listview" %}?suplentes=1">{% trans 'Mostrar suplentes' %}</a> |
|||
{% endif %} |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
<table class="striped"> |
|||
<tr> |
|||
<th>{% trans 'Foto' %}</th> |
|||
<th>{% trans 'Nome' %}</th> |
|||
<th>{% trans 'CPF' %}</th> |
|||
<th>{% trans 'Partido' %}</th> |
|||
<th>{% trans 'Ano eleição' %}</th> |
|||
<th>{% trans 'Status mandato' %}</th> |
|||
<th>{% trans 'Presidente' %}</th> |
|||
</tr> |
|||
{% for parlamentar in object_list %} |
|||
<tr> |
|||
<td> |
|||
{% if parlamentar.foto %} |
|||
<a href="{% url 'parlamentares:parlamentar_update' parlamentar.id %}"><img class="circle responsive-img" src="{{ parlamentar.foto.url }}" width="33"></a> |
|||
{% endif %} |
|||
</td> |
|||
<td><a href="{% url 'parlamentares:parlamentar_update' parlamentar.id %}">{{ parlamentar.nome_completo }}</a></td> |
|||
<td>{{ parlamentar.cpf }}</td> |
|||
<td>{{ parlamentar.partido.nome }}</td> |
|||
<td>{{ parlamentar.ano_eleicao|safe }}</td> |
|||
<td>{{ parlamentar.get_status_mandato_display }}</td> |
|||
<td> |
|||
{% if parlamentar.presidente %} |
|||
<i class="material-icons small green-text">check</i> |
|||
{% else %} |
|||
<i class="material-icons tiny grey-text">highlight_off</i> |
|||
{% endif %} |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</table> |
|||
</div> |
|||
<div class="card-action"> |
|||
<div class='pagination'> |
|||
{% if page_obj.has_previous %} |
|||
<a href='{% url "parlamentares:parlamentar_listview" %}?page={{ page_obj.previous_page_number }}{% if suplentes %}&suplentes=1{% endif %}'><i class="material-icons">skip_previous</i></a> |
|||
{% endif %} |
|||
{% if page_obj.paginator.num_pages > 1 %} |
|||
<span> |
|||
{% blocktranslate with number=page_obj.number num_pages=page_obj.paginator.num_pages %} |
|||
Página {{ number }} de {{ num_pages }} |
|||
{% endblocktranslate %} |
|||
</span> |
|||
{% endif %} |
|||
{% if page_obj.has_next %} |
|||
<a href='{% url "parlamentares:parlamentar_listview" %}?page={{ page_obj.next_page_number }}{% if suplentes %}&suplentes=1{% endif %}'><i class="material-icons">skip_next</i></a> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -0,0 +1,28 @@ |
|||
{% extends 'public/base_site.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block extrahead %} |
|||
{{ block.super }} |
|||
{{ form.media }} |
|||
{% endblock extrahead %} |
|||
|
|||
{% block content %} |
|||
{{ block.super }} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<form method="post" enctype="multipart/form-data">{% csrf_token %} |
|||
<div class="card"> |
|||
<div class="card-content"> |
|||
{{ form }} |
|||
</div> |
|||
<div class="card-action"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="action"> |
|||
{% trans 'Save' %} |
|||
<i class="material-icons right">save</i> |
|||
</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -1,11 +1,23 @@ |
|||
from django.urls import path, include |
|||
from sigi.apps.parlamentares import views |
|||
|
|||
app_name = "parlamentares" |
|||
|
|||
urlpatterns = [ |
|||
path( |
|||
"parlamentarjson/<int:casa_id>/", |
|||
"parlamentar/", |
|||
views.ParlamentarListView.as_view(), |
|||
name="parlamentar_listview", |
|||
), |
|||
path( |
|||
"parlamentar/<int:pk>/", |
|||
views.ParlamentarUpdateView.as_view(), |
|||
name="parlamentar_update", |
|||
), |
|||
path( |
|||
"parlamentar/<int:casa_id>/json/", |
|||
views.parlamentares_casa, |
|||
name="parlamentar-json", |
|||
name="parlamentar_json", |
|||
), |
|||
path("parlamentardata/", views.parlamentar_data, name="parlamentar-data"), |
|||
path("parlamentar/data/", views.parlamentar_data, name="parlamentar_data"), |
|||
] |
|||
|
@ -0,0 +1,36 @@ |
|||
# Generated by Django 4.1 on 2022-08-17 15:18 |
|||
|
|||
from django.db import migrations |
|||
|
|||
|
|||
def forwards_migration(apps, schema_editor): |
|||
Servidor = apps.get_model("servidores", "Servidor") |
|||
Servico = apps.get_model("servidores", "Servico") |
|||
|
|||
ilb = Servico.objects.filter(subordinado=None).first() |
|||
if ilb is None: |
|||
return |
|||
|
|||
sigi = { |
|||
"apelido": "SIGI", |
|||
"cargo": "Usuário do sistema", |
|||
"nome_completo": "SIGI - Sistema de Informações do Interlegis", |
|||
"servico": ilb, |
|||
} |
|||
Servidor.objects.update_or_create(defaults=sigi, sigi=True) |
|||
|
|||
|
|||
def reverse_migration(apps, schema_editor): |
|||
Servidor = apps.get_model("servidores", "Servidor") |
|||
Servidor.objects.filter(sigi=True).delete() |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
("servidores", "0010_servidor_sigi"), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.RunPython(forwards_migration, reverse_migration), |
|||
] |
@ -0,0 +1,69 @@ |
|||
{% extends 'admin/base_block.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block extrahead %} |
|||
{{ block.super }} |
|||
<style> |
|||
.input-field > label { |
|||
position: relative !important; |
|||
} |
|||
.tabs .tab a.active, .tabs .tab a:hover { |
|||
background-color: var(--selected-bg); |
|||
} |
|||
</style> |
|||
{% if form %}{{ form.media }}{% endif %} |
|||
{% endblock extrahead %} |
|||
|
|||
{% block content %} |
|||
{% if casa %} |
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="card horizontal"> |
|||
{% if casa %} |
|||
{% if casa.foto %} |
|||
<div class="card-image"> |
|||
<img src="{{ casa.foto.url }}" /> |
|||
</div> |
|||
{% endif %} |
|||
<div class="card-stacked"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{{ casa.nome }}</span> |
|||
<p>{{ casa.logradouro }}, {{ casa.bairro }}</p> |
|||
<p>{{ casa.cep }} - {{ casa.municipio }}</p> |
|||
<p>{{ casa.telefone_geral }} - {{ casa.email }} - {{ casa.pagina_web }}</p> |
|||
</div> |
|||
{% if casas %} |
|||
<div class="card-action"> |
|||
<span>Alternar para:</span> |
|||
{% for c in casas %} |
|||
{% if c.id != casa.id %} |
|||
<a href="?id={{ c.id|safe }}">{{ c }}</a> |
|||
{% endif %} |
|||
{% endfor %} |
|||
</div> |
|||
{% endif %} |
|||
</div> |
|||
{% else %} |
|||
<div class="card-stacked"> |
|||
<div class="card-content"> |
|||
<span class="card-title">{% trans 'Você não é contato de nenhuma Casa Legislativa' %}</span> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
{% endif %} |
|||
{% endblock %} |
|||
|
|||
{% block side_nav %} |
|||
{% if user.is_anonymous %} |
|||
<style> |
|||
#container.indent { |
|||
padding-left: 0 !important; |
|||
} |
|||
</style> |
|||
{% else %} |
|||
{{ block.super }} |
|||
{% endif %} |
|||
{% endblock %} |
@ -0,0 +1,83 @@ |
|||
{% extends 'material/admin/login.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block content %} |
|||
<div id="layout-content"> |
|||
<div class="text-content"> |
|||
{% if form.errors and not form.non_field_errors %} |
|||
<p class="errornote"> |
|||
{% if form.errors.items|length == 1 %} |
|||
{% trans "Please correct the error below." %} |
|||
{% else %} |
|||
{% trans "Please correct the errors below." %} |
|||
{% endif %} |
|||
</p> |
|||
{% endif %} |
|||
|
|||
{% if form.non_field_errors %} |
|||
{% for error in form.non_field_errors %} |
|||
<p class="errornote"> |
|||
{{ error }} |
|||
</p> |
|||
{% endfor %} |
|||
{% endif %} |
|||
{% if user.is_authenticated %} |
|||
<p class="errornote"> |
|||
{% blocktrans trimmed %} |
|||
You are authenticated as {{ username }}, but are not authorized to |
|||
access this page. Would you like to login to a different account? |
|||
{% endblocktrans %} |
|||
</p> |
|||
{% endif %} |
|||
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %} |
|||
|
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="row"> |
|||
<div class="input-field {% if form.username.errors %}has-error{% endif %} col s12"> |
|||
<i class="material-icons prefix" aria-hidden="true">person</i> |
|||
<input type="text" id="username-input" name="{{ form.username.name }}" |
|||
class="{% if form.username.errors %}invalid{% endif %}" |
|||
value="{{ form.username.value|default_if_none:'' }}" autofocus> |
|||
<label for="username-input">{{ form.username.label }}</label> |
|||
<div class="prefix-error">{{ form.username.errors }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="row"> |
|||
<div class="col s12"> |
|||
<div class="row"> |
|||
<div class="input-field {% if form.password.errors %}has-error{% endif %} col s12"> |
|||
<i class="material-icons prefix" aria-hidden="true">lock</i> |
|||
<input type="password" id="password-input" name="{{ form.password.name }}" |
|||
class="{% if form.password.errors %}invalid{% endif %}" |
|||
value="{{ form.password.value|default_if_none:'' }}"> |
|||
<i id="visible-on" aria-hidden="true" class="material-icons prefix password-visible">visibility</i> |
|||
<i id="visible-off" aria-hidden="true" class="material-icons prefix password-visible hide">visibility_off</i> |
|||
<label for="password-input">{{ form.password.label }}</label> |
|||
<div class="prefix-error">{{ form.password.errors }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
{% url 'password_reset' as password_reset_url %} |
|||
{% if password_reset_url %} |
|||
<div class="password-reset-link"> |
|||
<a href="{{ password_reset_url }}">{% trans 'Forgotten your password or username?' %}</a> |
|||
</div> |
|||
{% endif %} |
|||
<div class="submit-row-btn"> |
|||
<button class="btn waves-effect waves-light" type="submit" name="action">{% trans 'Log in' %} |
|||
<i class="material-icons right" aria-hidden="true">send</i> |
|||
</button> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
<div class="side-bar"> |
|||
{% include 'material/admin/includes/admin-out-bg.html' with current_theme=current_theme %} |
|||
</div> |
|||
</div> |
|||
{% endblock %} |
@ -0,0 +1,20 @@ |
|||
{% extends 'material/admin/logout.html' %} |
|||
{% load i18n %} |
|||
|
|||
{% block content %} |
|||
|
|||
<div id="layout-content"> |
|||
<div class="side-bar"> |
|||
{% include 'material/admin/includes/admin-out-bg.html' with current_theme=current_theme %} |
|||
</div> |
|||
<div class="text-content"> |
|||
<h2>{% trans "Logged out" %}</h2> |
|||
<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p> |
|||
<p><a href="{% url 'openmap' %}">{% trans 'Voltar ao mapa' %}</a></p> |
|||
<p><a class="btn waves-effect white-text waves-light" href="{% url 'login' %}">{% trans 'Log in again' %} |
|||
<i class="material-icons right" aria-hidden="true">send</i> |
|||
</a></p> |
|||
</div> |
|||
</div> |
|||
|
|||
{% endblock %} |
Loading…
Reference in new issue