Browse Source

Migração/Refatoração do urls.py da app diagnostico

stable/2.0
Breno Teixeira 11 years ago
parent
commit
c1026fed15
  1. 8
      sigi/apps/diagnosticos/admin.py
  2. 2
      sigi/apps/diagnosticos/models.py
  3. 233
      sigi/apps/diagnosticos/templates/diagnosticos/diagnostico_pdf.html
  4. 46
      sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categoria_casa_legislativa_form.html
  5. 52
      sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categoria_contatos_form.html
  6. 46
      sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categorias_form.html
  7. 63
      sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categorias_list.html
  8. 26
      sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_list.html
  9. 51
      sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_login.html
  10. 8
      sigi/apps/diagnosticos/templates/diagnosticos/email_diagnostico_atualizado.txt
  11. 10
      sigi/apps/diagnosticos/templates/diagnosticos/email_diagnostico_publicado.txt
  12. 61
      sigi/apps/diagnosticos/templates/diagnosticos/graficos.html
  13. 54
      sigi/apps/diagnosticos/templates/diagnosticos/mapa.html
  14. 49
      sigi/apps/diagnosticos/urls.py
  15. 4
      sigi/apps/diagnosticos/views.py
  16. 5
      sigi/apps/servicos/models.py
  17. 6
      sigi/apps/servicos/views.py
  18. 13
      sigi/settings.py
  19. 25
      sigi/shortcuts.py
  20. 2
      sigi/urls.py
  21. 12
      templates/404.html
  22. 12
      templates/500.html
  23. 19
      templates/503.html
  24. 17
      templates/app_index.html
  25. 55
      templates/base_mobile.html
  26. 63
      templates/index.html
  27. 11
      templates/login.html
  28. 15
      templates/mobile/404.html

8
sigi/apps/diagnosticos/admin.py

@ -56,7 +56,8 @@ class DiagnosticoAdmin(BaseEntityAdmin):
eav_fieldsets = (
(u'00. Identificação do Diagnóstico', {'fields': ('responsavel', 'data_visita_inicio', 'data_visita_fim',)}),
(u'01. Identificação da Casa Legislativa', {'fields': ('casa_legislativa',)}),
(u'02. Identificação de Competências da Casa Legislativa', {'fields': ()}))
(u'02. Identificação de Competências da Casa Legislativa', {'fields': ()})
)
# popula o eav fieldsets ordenando as categorias e as perguntas
# para serem exibidas no admin
@ -65,10 +66,11 @@ class DiagnosticoAdmin(BaseEntityAdmin):
perguntas_by_title = [(p.title, p.name) for p in categoria.perguntas.all()]
perguntas = [pergunta[1] for pergunta in sorted(perguntas_by_title)]
eav_fieldsets.append((categoria, {
eav_fieldsets += ((categoria, {
'fields': tuple(perguntas),
'classes': ['collapse']
}))
}),)
def get_uf(self, obj):
return '%s' % (obj.casa_legislativa.municipio.uf)

2
sigi/apps/diagnosticos/models.py

@ -19,7 +19,7 @@ class Diagnostico(BaseEntity):
# campo de busca em caixa baixa e sem acento
search_text = SearchField(field_names=['casa_legislativa'])
casa_legislativa.casa_uf_filter = True
# casa_legislativa.casa_tipo_filter = True
# casa_legislativa.casa_tipo_filter = True
data_visita_inicio = models.DateField(
u'data inicial da visita',
null=True,

233
sigi/apps/diagnosticos/templates/diagnosticos/diagnostico_pdf.html

@ -0,0 +1,233 @@
{% load smart_if %}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Diagnóstico em PDF</title>
<style type="text/css">
div#capa h3 {
text-align: center;
margin-top: 5px;
margin-bottom: 0px;
}
div#capa p {
text-align: center;
}
td.logo {
text-align: center;
}
td.header_text p {
margin: 0px;
font-size: 1.4em;
}
td.header_text {
width: 550px;
}
ul {
list-style-type: none;
padding-left: 15px;
}
li {
padding-left: 5px;
color: #999;
}
li.selected {
list-style-type: disc;
color: #000;
font-weight: bold;
}
p.strong {
margin-left: 25px;
line-height: 1em;
}
h1 {
font-size: 2em;
text-align: center;
}
h2 {
font-size: 1.7em;
}
h3 {
margin-top: 10px;
margin-bottom: 0px;
}
body {
font-family: "Helvetica, Arial, sans-serif";
font-size: 1.3em;
line-height: 1em;
}
div.new_page {
page-break-before: always;
}
div.same_page_ {
-pdf-keep-with-next: true;
}
@page {
size: {{ pagesize }};
margin: 4cm 1cm 1cm 2cm;
font-family: "Helvetica, Arial, sans-serif";
font-size: 2em;
@frame header {
-pdf-frame-content: header;
top: 1cm;
}
@frame footer {
-pdf-frame-content: footer;
bottom: 0cm;
margin-left: 9cm;
margin-right: 9cm;
height: 1cm;
}
}
</style>
</head>
<body>
<div id="header">
<table>
<tr>
<td class="logo"><img src="{{MEDIA_URL}}images/logo-senado.jpg"/></td>
<td class="header_text">
<p><strong>SENADO FEDERAL</strong></p>
<p><strong>SECRETARIA ESPECIAL DO INTERLEGIS – SINTER</strong></p>
<p>SUBSECRETARIA DE PLANEJAMENTO E FOMENTO – SSPLF</p>
</td>
<td class="logo"><img src="{{MEDIA_URL}}images/logo-interlegis.jpg"/></td>
</tr>
</table>
</div>
<div id="capa">
<center>
<img src="{{MEDIA_URL}}images/logo-interlegis-grande.jpg"/>
</center>
<h1>
PROJETO DE MODERNIZAÇÃO DO LEGISLATIVO
</br>
</br>
QUESTIONÁRIO DE DIAGNÓSTICO
</h1>
<h2 style="text-align: center;">
{{ diagnostico.casa_legislativa }} - {{ diagnostico.casa_legislativa.municipio.uf.sigla }}
</h2>
<h3>Data do Questionário:</h3>
<p>De {{diagnostico.data_visita_inicio}} à {{diagnostico.data_visita_fim}}</p>
<h3>Chefe da equipe de diagnóstico:</h3>
<p>{{diagnostico.responsavel}}</p>
<h3>Membros da equipe de diagnóstico:</h3>
{% for membro in diagnostico.equipe_set.all %}
<p>{{membro}}</p>
{% endfor %}
{% for funcionario in funcionarios %}
{% if funcionario.setor == 'contato_interlegis' %}
<h3>Nome do responsável pelas Informações:</h3>
<p>{{funcionario.nome|default_if_none:""}}</p>
<h3>Cargo / função do responsável pelas informações:</h3>
<p>{{funcionario.cargo|default_if_none:""}} / {{funcionario.funcao|default_if_none:""}}</p>
<h3>E-mail do responsável pelas informações:</h3>
<p>{{funcionario.email|default_if_none:""}}</p>
{% for telefone in funcionario.telefones.all %}
<h3>Telefone {{telefone.get_tipo_display}} do responsável pelas informações</h3>
<p>{{telefone}}</p>
{% endfor %}
{% endif %}
{% endfor %}
</table>
<!--
<h3>Cargo do Responsável pelas Informações:</h3>
<p>{{diagnostico.responsavel.cargo|default_if_none:""}}&nbsp;</p>
<h3>E-mail do Responsável pelas Informações:</h3>
<p>{{diagnostico.responsavel.email|default_if_none:""}}&nbsp;</p>
{% for telefone in diagnostico.responsavel.telefones.all %}
<h3>Telefone {{telefone.get_tipo_display}} do Responsável pelas Informações:</h3>
<p>{{telefone}}</p>
{% endfor %}
-->
</div>
<div class="new_page">
<h2>Bloco 01. Identificação da {{casa_legislativa.tipo}}</h2>
<h3>01. Municipio - Estado:</h3>
<p class="strong">{{casa_legislativa.municipio|default_if_none:""}}&nbsp;</p>
<h3>02. Data de criação do Município:</h3>
<p class="strong">{{casa_legislativa.municipio.data_criacao|default_if_none:""}}&nbsp;</p>
<h3>03. Nome da {{casa_legislativa.tipo}}</h3>
<p class="strong">{{casa_legislativa.municipio.nome|default_if_none:""}}&nbsp;</p>
<h3>04. Data de instalação da {{casa_legislativa.tipo}}</h3>
<p class="strong">{{casa_legislativa.data_instalacao|default_if_none:""}}&nbsp;</p>
<h3>05. Endereço:</h3>
<p class="strong">{{casa_legislativa.logradouro|default_if_none:""}} - {{casa_legislativa.cep|default_if_none:""}}</p>
<h3>06. CNPJ:</h3>
<p class="strong">{{casa_legislativa.cnpj|default_if_none:""}}&nbsp;</p>
<h3>07. E-mail:</h3>
<p class="strong">{{casa_legislativa.email|default_if_none:""}}&nbsp;</p>
<h3>08. Página web:</h3>
<p class="strong">{{casa_legislativa.pagina_web|default_if_none:""}}&nbsp;</p>
</div>
<div class="new_page">
<h2>Bloco 02. Identificação de Competências na Câmara Municipal</h2>
{% for funcionario in funcionarios %}
<div class="same_page">
<h3>{{funcionario.get_setor_display}}</h3>
<p class="strong">Nome completo: {{funcionario.nome|default_if_none:""}}</p>
<p class="strong">E-mail: {{funcionario.email|default_if_none:""}}</p>
<p class="strong">Tempo de serviço: {{funcionario.tempo_de_servico|default_if_none:""}}</p>
{% for telefone in funcionario.telefones.all %}
<p class="strong">Telefone {{telefone.get_tipo_display}}: {{telefone}}</p>
{% endfor %}
</div>
{% endfor %}
</div>
{% for categoria, schemas in schemas_by_categoria %}
<div class="new_page">
<h2>Bloco {{categoria.nome}}</h2>
{% for schema in schemas %}
<div class="same_page">
<h3>{{ schema.title }}</h3>
{% if schema.datatype == schema.TYPE_MANY or schema.datatype == schema.TYPE_ONE %}
<ul class="{{ schema.datatype }}">
{% for choice in schema.get_choices %}
{% if choice.pk in schema.value %}
<li class="selected"> {{ choice.title }} </li>
{% else %}
<li> {{ choice.title }} </li>
{% endif %}
{% endfor %}
</ul>
{% else %}
<p class="strong">
{% if schema.datatype == schema.TYPE_FLOAT %}
{{ schema.value|floatformat|default_if_none:"sem resposta"}}
{% else %}
{{ schema.value|default_if_none:"sem resposta"}}
{% endif %}
&nbsp;</p>
{% endif %}
</div>
{% endfor %}
</div>
{% endfor %}
<div id="footer">
{%block page_foot%}
Página <pdf:pagenumber>
{%endblock%}
</div>
</body>
</html>

46
sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categoria_casa_legislativa_form.html

@ -0,0 +1,46 @@
{% extends "base_mobile.html" %}
{% block media %}
{{ block.super }}
<link rel="stylesheet" href="{{MEDIA_URL}}css/diagnosticos/diagnosticos_categoria_model_form.css" />
{% endblock %}
{% block cabecalho %}
<h1>01. Identificação da Camara Municipal</h1>
<a href="{% url 'lista_categorias' diagnostico.id %}?c=1" data-icon="arrow-l"
data-direction="reverse" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock cabecalho %}
{% block corpo %}
{% if form %}
<div id="waiting">
<!-- Exibe as perguntas apos o carregamento completo do javascript -->
<h2>Aguarde carregando perguntas para essa categoria...</h2>
</div>
<div id="form" style="display:none;">
<div data-role="fieldcontain">
<b>{{ casa_legislativa.municipio }}</b>
</div>
<div data-role="fieldcontain">
<b>{{ casa_legislativa.nome }}</b>
</div>
<form id="diagnostico" action="." method="post">
{% for field in form %}
<div data-role="fieldcontain" id="{{ field.name }}">
<label class="attr" for="{{ field.name }}">{{ field.label }}</label>
{{ field }}
<span class="errors"></span>
</div>
{% endfor %}
</form>
</div>
{% else %}
<h2>Nenhuma existem perguntas para essa categoria.</h2>
{% endif %}
{% endblock corpo %}
{% block rodape %}
{{ block.super }}
<li><a href="{% url 'lista_categorias' diagnostico.id %}" data-icon="grid" class="ui-state-persist">Listar</a></li>
<li><a href="{% url 'logout' %}" data-icon="delete">Sair</a></li>
{% endblock rodape %}

52
sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categoria_contatos_form.html

@ -0,0 +1,52 @@
{% extends "base_mobile.html" %}
{% block media %}
{{ block.super }}
<link rel="stylesheet" href="{{MEDIA_URL}}css/diagnosticos/diagnosticos_categoria_model_form.css" />
{% endblock %}
{% block cabecalho %}
<h1>02. Identificação de Competências</h1>
<a href="{% url 'lista_categorias' diagnostico.id %}?c=2" data-icon="arrow-l"
data-direction="reverse" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock cabecalho %}
{% block corpo %}
<div id="waiting">
<!-- Exibe as perguntas apos o carregamento completo do javascript -->
<h2>Aguarde carregando perguntas para essa categoria...</h2>
</div>
<div id="form" style="display:none;">
<form id="diagnostico" action="." method="post">
{% for form in forms %}
<h3>{{ form.instance.get_setor_display }}</h3>
{% for field in form %}
<div data-role="fieldcontain">
<label class="attr" for="{{ field.name }}">{{ field.label }}</label>
{{ field }}
<span id="{{ field.html_name }}-errors" class="errors"></span>
</div>
{% endfor %}
<h4>Telefones</h4>
{% for form in form.telefones.forms %}
<div class="phone" data-role="fieldcontain">
{{ form.tipo }} {{ form.numero }}
{% for field in form.hidden_fields %}
{{ field }}
<span id="{{ field.html_name }}-errors" class="errors"></span>
{% endfor %}
</div>
{% endfor %}
<span id="{{ form.prefix }}"></span>
{{ form.telefones.management_form }}
<hr/>
{% endfor %}
</form>
</div>
{% endblock corpo %}
{% block rodape %}
{{ block.super }}
<li><a href="{% url 'lista_categorias' diagnostico.id %}" data-icon="grid" class="ui-state-persist">Listar</a></li>
<li><a href="{% url 'logout' %}" data-icon="delete">Sair</a></li>
{% endblock rodape %}

46
sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categorias_form.html

@ -0,0 +1,46 @@
{% extends "base_mobile.html" %}
{% block media %}
{{ block.super }}
<link rel="stylesheet" href="{{MEDIA_URL}}css/diagnosticos/diagnosticos_categorias_form.css" />
{% endblock %}
{% block cabecalho %}
<h1>{{ categoria.nome }}</h1>
<a href="{% url 'lista_categorias' diagnostico.id %}" data-icon="arrow-l"
data-direction="reverse" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock cabecalho %}
{% block corpo %}
{% if form %}
<div id="waiting">
<!-- Exibe as perguntas apos o carregamento completo do javascript -->
<h2>Aguarde carregando perguntas para essa categoria...</h2>
</div>
<div id="form" style="display:none;">
<form id="diagnostico" action="." method="post">
{% for field in form %}
<div data-role="fieldcontain" id="{{ field.name }}">
<label for="{{ field.name }}">
{% if field.help_text %}
{{ field.label }} ({{ field.help_text }})
{% else %}
{{ field.label }}
{% endif %}
</label>
{{ field }}
<span class="errors"></span>
</div>
{% endfor %}
</form>
</div>
{% else %}
<h2>Nenhuma existem perguntas para essa categoria.</h2>
{% endif %}
{% endblock corpo %}
{% block rodape %}
{{ block.super }}
<li><a href="{% url 'lista_categorias' diagnostico.id %}" data-icon="grid" class="ui-state-persist">Listar</a></li>
<li><a href="{% url 'logout' %}" data-icon="delete">Sair</a></li>
{% endblock rodape %}

63
sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_categorias_list.html

@ -0,0 +1,63 @@
{% extends "base_mobile.html" %}
{% block cabecalho %}
<h1>Categorias</h1>
<a href="{% url 'lista_diagnosticos' %}" data-icon="arrow-l" data-direction="reverse" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock cabecalho %}
{% block media %}
{{ block.super }}
<link href="{{ MEDIA_URL }}css/diagnosticos/diagnosticos_categorias.css" rel="stylesheet" />
{% endblock media %}
{% block corpo %}
{% if categorias %}
<ul data-role="listview">
{% if ultima_categoria == 1 %}
<li class="ui-btn-last-c">
{% else %}
<li>
{% endif %}
<a href="{% url 'detalhes_categoria_casa_legislativa' diagnostico.id %}">
<h4 class="ui-li-heading-read">01. Identificação da Casa Legislativa</h4>
</a>
</li>
{% if ultima_categoria == 2 %}
<li class="ui-btn-last-c">
{% else %}
<li>
{% endif %}
<a href="{% url 'detalhes_categoria_contatos' diagnostico.id %}">
{% if diagnostico.contatos_respondidos %}
<h4 class="ui-li-heading-read">02. Identificação de Competências</h4>
{% else %}
<h4>02. Identificação de Competências</h4>
{% endif %}
</a>
</li>
{% for categoria in categorias %}
{% if ultima_categoria == categoria.id %}
<li class="ui-btn-last-c">
{% else %}
<li>
{% endif %}
<a href="{% url 'detalhes_categoria' diagnostico.id categoria.id %}">
{% if categoria in diagnostico.categorias_respondidas %}
<h4 class="ui-li-heading-read">{{ categoria.nome }}</h4>
{% else %}
<h4>{{ categoria.nome }}</h4>
{% endif %}
</a>
</li>
{% endfor %}
</ul>
{% else %}
<h2>Nenhuma categoria existente.</h2>
{% endif %}
{% endblock corpo %}
<ul>
{% block rodape %}
{{ block.super }}
<li><a href="{% url 'logout' %}" data-icon="delete">Sair</a></li>
{% endblock rodape %}
</ul>

26
sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_list.html

@ -0,0 +1,26 @@
{% extends "base_mobile.html" %}
{% block cabecalho %}
<h1>Diagnósticos</h1>
<a href="{% url 'logout' %}" data-icon="delete" class="ui-btn-left">Sair</a>
{% endblock cabecalho %}
{% block corpo %}
{% if diagnosticos %}
<ul data-role="listview">
{% for diagnostico in diagnosticos %}
<li>
<a href="{% url 'lista_categorias' diagnostico.id %}">
<h4>{{ diagnostico.casa_legislativa.nome }}</h4>
<p><strong>Data:</strong> {{ diagnostico.data_visita_inicio|date:"d/m/Y" }} à {{ diagnostico.data_visita_fim|date:"d/m/Y" }} </p>
<p><strong>Responsável:</strong> {{ diagnostico.responsavel.nome_completo }}</p>
</a>
</li>
{% endfor %}
</ul>
{% else %}
<h2>Nenhum diagnóstico aberto.</h2>
{% endif %}
{% endblock corpo %}
{% block rodape %}{% endblock rodape %}

51
sigi/apps/diagnosticos/templates/diagnosticos/diagnosticos_login.html

@ -0,0 +1,51 @@
<!DOCTYPE HTML>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SIGI - Login de Acesso</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script language=javascript>
$(document).bind("mobileinit", function () {
$.mobile.ajaxEnabled = false;
$.mobile.loadingMessage = 'salvando';
});
</script>
<script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
</head>
<body>
<div data-role="header" data-theme="d">
<img src="{{ MEDIA_URL }}images/mobile/logointerlegis_mobile.png" alt="Interlegis"/>
</div> <!-- header -->
{% if form.errors %}
<div data-role="header" data-theme="b">
<h2>Erro ao logar</h2>
<ul>
{% for field in form %}
{% if field.errors %}
<li>{{ field.errors|striptags }}</li>
{% endif %}
{% endfor %}
</ul>
<p>Verifique se seu login e senha foram preenchidos corretamente.</p>
</div> <!-- error messages -->
{% endif %}
<div data-role="content">
<form action="{% url 'django.contrib.auth.views.login' %}" method="POST">
{% csrf_token %}
<div data-role="fieldcontain" class="ui-hide-label ui-body">
<label for="username">Usuário:</label>
<input type="text" name="username" id="id_username" placeholder="Usuário">
</div>
<div data-role="fieldcontain" class="ui-hide-label">
<label for="password">Senha de Acesso:</label>
<input type="password" name="password" id="id_password" placeholder="Senha de Acesso">
</div>
<input type="hidden" name="next" value="{% url 'lista_diagnosticos' %}" />
<button type="submit">Entrar</button>
</form>
</div>
</body>
</html>

8
sigi/apps/diagnosticos/templates/diagnosticos/email_diagnostico_atualizado.txt

@ -0,0 +1,8 @@
Foi atualizado um diagnóstico no SIGI. Os dados do diagnóstico são:
Criador do Diagnóstico: {{ servidor }}
Dados do Diagnóstico: {{ casa_legislativa }}
Data do Diagnóstico: {{ data_diagnostico }}
Data do Relatório do Diagnóstico: {{ data_relatorio_diagnostico }}
O seu status está como {{ status }}

10
sigi/apps/diagnosticos/templates/diagnosticos/email_diagnostico_publicado.txt

@ -0,0 +1,10 @@
Olá {{ responsavel }}
Foi publicado um diagnóstico no SIGI.
Os dados do diagnóstico são:
Dados do Diagnóstico: {{ casa_legislativa }}
Data do Diagnóstico: {{ data_diagnostico }}
Para mais detalhes, acesse:
http://{{ host }}{{ url_diagnostico }}

61
sigi/apps/diagnosticos/templates/diagnosticos/graficos.html

@ -0,0 +1,61 @@
{% extends "index.html" %}
{% block content_title %}<h1>Graficos dos Diagnósticos</h1>{% endblock %}
{% block extrahead %}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script language=javascript>
jQuery(document).ready(function () {
jQuery("form#categoria select").change(function () {
jQuery("form#categoria").submit()
});
jQuery("#perguntas a").click(function(event){
event.preventDefault();
id = jQuery(this).attr('id')
output_id = '#output_'+id
jQuery.ajax({
url: jQuery(this).attr('href'),
success: function(data) {
jQuery("img", output_id).attr('src',data['url'])
jQuery("img", output_id).slideDown()
},
error: function(errorSender, errorMsg) {
jQuery(output_id).html(errorSender + ' ' + errorMsg);
}
});
return false
});
});
</script>
{% endblock %}
{% block content %}
<div id="content-main">
<form id="categoria" action="." method="POST">
<select name="categoria">
{% for categoria in categorias %}
<option value="{{categoria.id}}" {% if categoria.id == sel_categoria %}selected="selected"{% endif %}>{{categoria.nome}}</option>
{% endfor %}
</select>
</form>
<div id="perguntas">
<ul>
{% for pergunta in perguntas %}
<li>
{% if pergunta.datatype == 'many' or pergunta.datatype == 'one' %}
<a id="{{pergunta.name}}" href="/sigi/api/diagnosticos/?id={{pergunta.name}}"><p>{{pergunta.title}}</p></a>
<div id="output_{{pergunta.name}}" class="grafico">
<img style="display:none"/>
</div>
{% else %}
<p>{{pergunta.title}}</p>
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</div>
{% endblock %}

54
sigi/apps/diagnosticos/templates/diagnosticos/mapa.html

@ -0,0 +1,54 @@
{% extends "admin/index.html" %}
{% block title %}SIGI{% endblock %}
{% block extrahead %}
{{ block.super }}
{% load staticfiles %}
<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="https://maps.google.com/maps/api/js?sensor=false"> </script>
<script type="text/javascript">
(function($) {
$(document).ready(function($) {
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
$.get("/sigi/diagnosticos/mundiagjson/", function(municipios) {
for (var i in municipios) {
var municipio = municipios[i];
var markData = {
map: map,
position: new google.maps.LatLng(municipio.lat, municipio.lng),
title: municipio.nome,
icon: '{{ MEDIA_URL }}images/mapmarker.png' //'/sigi/media/images/mapmarker.png'
}
var mark = new google.maps.Marker(markData);
var infoWin = new google.maps.InfoWindow({content:
'<strong>' + municipio.nome + '</strong><br/>' +
'<strong>Início da visita:</strong><br/>' + municipio.inicio + '<br/>' +
'<strong>Término da visita:</strong><br/>' + municipio.fim + '<br/>' +
'<strong>Equipe:</trong><br/>' + municipio.equipe });
linkMarkMessage(mark, infoWin, map);
}
});
function linkMarkMessage(mark, infoWin, map) {
google.maps.event.addListener(mark, 'click', function() {
infoWin.open(map, mark);});
}
})})(django.jQuery);
</script>
{% endblock %}
{% block content %}
<div id="map" style="width:100%; height: 800px; float: left;"></div>
{% endblock %}

49
sigi/apps/diagnosticos/urls.py

@ -1,35 +1,40 @@
# -*- coding: utf8 -*-
from django.conf.urls.defaults import patterns, url
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
LOGIN_REDIRECT_URL = '/sigi/mobile/diagnosticos/login'
urlpatterns = patterns('',
# Lista de Diagnósticos
url(r'^$', 'sigi.apps.diagnosticos.views.lista', name='lista_diagnosticos'),
# Login do Diagnóstico
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name':
'diagnosticos/diagnosticos_login.html'}, name='login'),
LOGIN_REDIRECT_URL = '/sigi/diagnosticos/mobile/login'
# Logout do Diagnóstico
url(r'^logout/$', 'django.contrib.auth.views.logout',
{'next_page': LOGIN_REDIRECT_URL}, name='logout'),
urlpatterns = patterns('sigi.apps.diagnosticos.views',
# Lista de Diagnósticos
url(r'^mobile/$', 'lista', name='lista_diagnosticos'),
# Lista de Categorias
url(r'^(?P<id_diagnostico>\d+)/categorias/$', 'sigi.apps.diagnosticos.views.categorias', name='lista_categorias'),
url(r'^mobile/(?P<id_diagnostico>\d+)/categorias/$',
'categorias', name='lista_categorias'),
# Detalhes da Categoria da Casa Legislativa
url(r'^(?P<id_diagnostico>\d+)/categorias/1/$',
'sigi.apps.diagnosticos.views.categoria_casa_legislativa',
name='detalhes_categoria_casa_legislativa'),
url(r'^mobile/(?P<id_diagnostico>\d+)/categorias/1/$',
'categoria_casa_legislativa', name='detalhes_categoria_casa_legislativa'),
# Detalhes da Categoria de Contatos
url(r'^(?P<id_diagnostico>\d+)/categorias/2/$',
'sigi.apps.diagnosticos.views.categoria_contatos',
name='detalhes_categoria_contatos'),
url(r'^mobile/(?P<id_diagnostico>\d+)/categorias/2/$',
'categoria_contatos', name='detalhes_categoria_contatos'),
# Detalhes de Categorias Dinamicas
url(r'^(?P<id_diagnostico>\d+)/categorias/(?P<id_categoria>\d+)/$',
'sigi.apps.diagnosticos.views.categoria_detalhes',
name='detalhes_categoria'),
url(r'^mobile/(?P<id_diagnostico>\d+)/categorias/(?P<id_categoria>\d+)/$',
'categoria_detalhes', name='detalhes_categoria'),
url(r'^mapa/$', TemplateView.as_view(template_name="diagnosticos/mapa.html"), name='template-mapa'),
url(r'^mundiagjson/$', 'municipios_diagnosticados', name='municipios-diagnosticados')
)
urlpatterns += patterns('django.contrib.auth.views',
# Login do Diagnóstico
url(r'^mobile/login/$', 'login', {'template_name':
'diagnosticos/diagnosticos_login.html'}, name='login'),
# Logout do Diagnóstico
url(r'^mobile/logout/$', 'logout',
{'next_page': LOGIN_REDIRECT_URL}, name='logout'),
)

4
sigi/apps/diagnosticos/views.py

@ -344,8 +344,8 @@ def municipios_diagnosticados(self):
for d in Diagnostico.objects.all():
m = d.casa_legislativa.municipio
municipio = {'nome': d.casa_legislativa.nome + ', ' + m.uf.sigla, 'lat': str(m.latitude), 'lng': str(m.longitude), 'inicio': d.data_visita_inicio.strftime('%d/%m/%Y'),
'fim': d.data_visita_fim.strftime('%d/%m/%Y'), 'equipe': "<ul><li>" + "</li><li>".join([m.user.get_full_name() for m in d.membros]) + "</li></ul>",}
municipio = {'nome': d.casa_legislativa.nome + ', ' + m.uf.sigla, 'lat': str(m.latitude), 'lng': str(m.longitude), 'inicio': d.data_visita_inicio,
'fim': d.data_visita_fim, 'equipe': "<ul><li>" + "</li><li>".join([m.user.get_full_name() for m in d.membros]) + "</li></ul>",}
municipios.append(municipio)
return HttpResponse(simplejson.dumps(municipios), mimetype="application/json")

5
sigi/apps/servicos/models.py

@ -183,8 +183,9 @@ class CasaManifesta(models.Model):
casa_legislativa = models.OneToOneField(CasaLegislativa)
data_manifestacao = models.DateTimeField(auto_now_add=True)
data_atualizacao = models.DateTimeField(auto_now=True)
informante = models.CharField(u'Nome do informante', max_length=100)
cargo = models.CharField(u'Cargo do informante', max_length=100)
informante = models.CharField(u'Nome do informante', max_length=100, blank=True)
cargo = models.CharField(u'Cargo do informante', max_length=100, blank=True)
email = models.EmailField(u'E-mail de contato', blank=True)
class ServicoManifesto(models.Model):
casa_manifesta = models.ForeignKey(CasaManifesta)

6
sigi/apps/servicos/views.py

@ -41,6 +41,7 @@ class CasaManifestaProtoForm(forms.Form):
fieldsets = None
informante = forms.CharField(max_length=100, required=False)
cargo = forms.CharField(max_length=100, required=False)
email = forms.EmailField(required=False)
def set_fieldsets(self, fieldsets):
result = []
@ -66,7 +67,7 @@ def casa_manifesta_view(request):
# Criar um formulário dinâmico
campos = {}
fieldsets = ((None, ('informante', 'cargo'),),)
fieldsets = ((None, ('informante', 'cargo', 'email'),),)
for ts in TipoServico.objects.all():
campos['possui_%s' % ts.pk] = forms.BooleanField(label=u'Possui o serviço de %s' % ts.nome, required=False)
@ -83,9 +84,11 @@ def casa_manifesta_view(request):
cm, created = CasaManifesta.objects.get_or_create(casa_legislativa=casa)
cm.informante = cmf.cleaned_data['informante']
cm.cargo = cmf.cleaned_data['cargo']
cm.email = cmf.cleaned_data['email']
cm.save()
thanks.append((u'Informante', cmf.cleaned_data['informante']))
thanks.append((u'Cargo', cmf.cleaned_data['cargo']))
thanks.append((u'E-mail', cmf.cleaned_data['email']))
for ts in TipoServico.objects.all():
if cmf.cleaned_data['possui_%s' % ts.pk]:
sm, created = ServicoManifesto.objects.get_or_create(casa_manifesta=cm, servico=ts)
@ -106,6 +109,7 @@ def casa_manifesta_view(request):
values = {
'informante': cm.informante,
'cargo': cm.cargo,
'email': cm.email,
}
for sm in cm.servicomanifesto_set.all():
values['possui_%s' % sm.servico.pk] = True

13
sigi/settings.py

@ -99,7 +99,7 @@ USE_TZ = True
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/sigi/admin_media/'
# ADMIN_MEDIA_PREFIX = '/sigi/admin_media/' # Deprecated!
DEFAULT_FROM_EMAIL = 'sesostris@interlegis.leg.br'
@ -107,3 +107,14 @@ DEFAULT_FROM_EMAIL = 'sesostris@interlegis.leg.br'
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
# STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# STATICFILES_DIRS = (
# os.path.join(BASE_DIR, "sitestatic"),
# )
# STATICFILES_FINDERS = (
# "django.contrib.staticfiles.finders.FileSystemFinder",
# "django.contrib.staticfiles.finders.AppDirectoriesFinder"
# )

25
sigi/shortcuts.py

@ -0,0 +1,25 @@
import cStringIO as StringIO
import ho.pisa as pisa
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from django.conf import settings
from cgi import escape
import os
def fetch_resources(uri, rel):
path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
return path
def render_to_pdf(template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('utf-8')), result, link_callback=fetch_resources)
if not pdf.err:
return HttpResponse(result.getvalue(), mimetype='application/pdf')
return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))

2
sigi/urls.py

@ -1,3 +1,4 @@
#-*- coding:utf-8 -*-
from django.conf.urls import patterns, include, url
from django.views.generic.base import RedirectView
@ -11,6 +12,7 @@ urlpatterns = patterns('',
url(r'^sigi/parlamentares/parlamentar/', include('sigi.apps.parlamentares.urls')),
url(r'^sigi/casas/casalegislativa/', include('sigi.apps.casas.urls')),
url(r'^sigi/convenios/convenio/', include('sigi.apps.convenios.urls')),
url(r'^sigi/diagnosticos/', include('sigi.apps.diagnosticos.urls')),
url(r'^sigi/', include(admin.site.urls)),
)

12
templates/404.html

@ -0,0 +1,12 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block title %}{% trans 'Page not found' %}{% endblock %}
{% block content %}
<h2>{% trans 'Page not found' %}</h2>
<p>{% trans "We're sorry, but the requested page could not be found." %}</p>
{% endblock %}

12
templates/500.html

@ -0,0 +1,12 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans "Home" %}</a> &rsaquo; {% trans "Server error" %}</div>{% endblock %}
{% block title %}{% trans 'Server error (500)' %}{% endblock %}
{% block content %}
<h1>{% trans 'Server Error <em>(500)</em>' %}</h1>
<p>{% trans "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." %}</p>
{% endblock %}

19
templates/503.html

@ -0,0 +1,19 @@
{% extends "admin/base_site.html" %}
{% block title %}Serviço em manutenção (503) | SIGI{% endblock %}
{% block branding %}{% endblock %}
{% block nav-global %}{% endblock %}
{% block breadcrumbs %}{% endblock %}
{% block content %}
<h1>SIGI em manutenção</h1>
<p>Esta página está atualmente em manutenção! Por favor, tente
novamente mais tarde.</p>
<p>Obrigado pela paciência,<br />
Serviço de Pesquisa e Desenvolvimento Tecnológico (SPDT)</p>
{% endblock %}
{% block footer %}{% endblock %}

17
templates/app_index.html

@ -0,0 +1,17 @@
{% extends "admin/app_index.html" %}
{% block extrastyle %}
<link rel="stylesheet" type="text/css"
href="{{ MEDIA_URL }}css/base_site.css" />
<link rel="stylesheet" type="text/css"
href="{{ MEDIA_URL }}css/app_index.css" />
{% endblock %}
{% block breadcrumbs %}{% endblock %}
{% block sidebar %}
<div id="content-related">
{% include "snippets/modules/user.html" %}
{% include "snippets/modules/actions.html" %}
</div>
{% endblock %}

55
templates/base_mobile.html

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
{% block titulo %}
<title>SIGI - Diagnósticos</title>
{% endblock titulo %}
{% block media %}
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script language=javascript>
$(document).bind("mobileinit", function () {
$.mobile.ajaxEnabled = false;
$.mobile.loadingMessage = 'salvando';
});
</script>
<script type="text/javascript" src="{{MEDIA_URL}}js/jquery/jquery.maskedinput-1.1.3.min.js"/></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
<script type="text/javascript" src="{{MEDIA_URL}}js/diagnosticos/diagnosticos_categorias_form.js"></script>
{% endblock media %}
</head>
<body>
<div data-role="page" id="page" class="type-interior">
<div data-role="header" data-position="fixed">
<img id="working" src="{{MEDIA_URL}}images/loader.gif" class="ui-btn-right"/>
{% block cabecalho %}{% endblock cabecalho %}
</div> <!-- header -->
<div data-role="content" class="content-primary">
{% block corpo %}{% endblock corpo %}
</div><!-- content -->
<div data-role="footer">
<div data-role="navbar">
<ul>
{% block rodape %}
<li><a href="{% url lista_diagnosticos %}" data-icon="home">Home</a></li>
{% endblock rodape %}
</ul>
</div>
</div> <!-- footer -->
</div> <!-- page -->
<a id='open-dialog' href="#dialog" data-rel="dialog" data-transition="pop" style='display:none;'></a>
<div data-role="page" id="dialog">
<div data-role="header">
<h1>Ops! Não foi possivel salvar os dados.</h1>
</div>
<div data-role="content" id="text">
Algum erro ocorreu ao salvar os dados do diagnóstico,
verifique a sua conectividade e/ou entre em contato
com a equipe técnica o mais rápido possível.
</div>
</div>
</body>
</html>

63
templates/index.html

@ -0,0 +1,63 @@
{% extends "admin/index.html" %}
{% load adminmedia %}
{% block title %}SIGI{% endblock %}
{% block extrahead %}
{{ block.super }}
<script type="text/javascript" src="{% admin_media_prefix %}js/core.js"></script>
<script type="text/javascript" src="{% admin_media_prefix %}js/jquery.min.js"></script>
<script type="text/javascript" src="{% admin_media_prefix %}js/jquery.init.js"></script>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"> </script>
<script type="text/javascript">
(function($) {
$(document).ready(function($) {
var latlng = new google.maps.LatLng(-14.2350040, -51.925280);
var myOptions = {
zoom: 3,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
$.get("/sigi/diagnosticos/mundiagjson/", function(municipios) {
for (var i in municipios) {
var municipio = municipios[i];
var markData = {
map: map,
position: new google.maps.LatLng(municipio.lat, municipio.lng),
title: municipio.nome,
icon: '{{ MEDIA_URL }}images/mapmarker.png' //'/sigi/media/images/mapmarker.png'
}
var mark = new google.maps.Marker(markData);
var infoWin = new google.maps.InfoWindow({content:
'<strong>' + municipio.nome + '</strong><br/>' +
'<strong>Início da visita:</strong><br/>' + municipio.inicio + '<br/>' +
'<strong>Término da visita:</strong><br/>' + municipio.fim + '<br/>' +
'<strong>Equipe:</trong><br/>' + municipio.equipe });
linkMarkMessage(mark, infoWin, map);
}
});
function linkMarkMessage(mark, infoWin, map) {
google.maps.event.addListener(mark, 'click', function() {
infoWin.open(map, mark);});
}
})
})(django.jQuery);
</script>
{% endblock %}
{% block content_title %}<h1>Dashboard</h1>{% endblock %}
{% block content %}
<div id="content-main">
{% include "snippets/modules/charts-convenios.html" %}
</div>
{% endblock %}
{% block sidebar %}
<div id="content-related">
{% include "snippets/modules/user.html" %}
{% include "snippets/modules/actions.html" %}
</div>
{% endblock %}

11
templates/login.html

@ -0,0 +1,11 @@
{% extends "admin/login.html" %}
{% load i18n %}
{% block container-top %}{% endblock %}
{% block branding %}
<h1 id="site-name">SIGI</h1>
{% endblock %}
{% block nav-global %}{% endblock %}
{% block footer %}{% endblock %}

15
templates/mobile/404.html

@ -0,0 +1,15 @@
{% extends "base_mobile.html" %}
{% block cabecalho %}
<h1>Ocorreu um erro</h1>
{% endblock cabecalho %}
{% block corpo %}
<p>A página que está procurando não existe. </p>
<p>Verifique se o diagnóstico, categoria ou pergunta está cadastrado no sistema.</p>
<a href="{% url 'lista_diagnosticos' %}" data-icon="arrow-l"
data-direction="reverse" data-role="button" data-theme="c" class="ui-btn-left">Voltar</a>
{% endblock corpo %}
{% block rodape %}
{% endblock rodape %}
Loading…
Cancel
Save