mirror of https://github.com/interlegis/sigi.git
Sesostris Vieira
2 years ago
8 changed files with 654 additions and 23 deletions
@ -0,0 +1,58 @@ |
|||||
|
# Generated by Django 4.0.6 on 2022-07-16 02:40 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import django.db.models.deletion |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('eventos', '0022_alter_anexo_data_pub'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='Cronograma', |
||||
|
fields=[ |
||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('etapa', models.CharField(max_length=10, verbose_name='sigla da etapa')), |
||||
|
('nome', models.CharField(max_length=100, verbose_name='nome da etapa')), |
||||
|
('descricao', models.TextField(help_text='Descrição detalhada das atividades realizadas na etapa', verbose_name='descrição da etapa')), |
||||
|
('duracao', models.PositiveBigIntegerField(verbose_name='duração (em dias)')), |
||||
|
('data_prevista_inicio', models.DateField(blank=True, null=True, verbose_name='data prevista de início')), |
||||
|
('data_prevista_termino', models.DateField(blank=True, null=True, verbose_name='data prevista de término')), |
||||
|
('data_inicio', models.DateField(blank=True, null=True, verbose_name='data de início')), |
||||
|
('data_termino', models.DateField(blank=True, null=True, verbose_name='data de término')), |
||||
|
('dependencia', models.CharField(blank=True, help_text='Sigla da etapa que precisa ser concluída para que esta seja iniciada', max_length=200, verbose_name='depende da etapa')), |
||||
|
('responsaveis', models.TextField(blank=True, help_text='Pessoas, setores, órgãos.', verbose_name='responsáveis pela tarefa')), |
||||
|
('comunicar_inicio', models.TextField(blank=True, help_text='Lista de pessoas/órgãos para comunicar quando a tarefa for iniciada. Coloque um por linha.', verbose_name='comunicar inicio para')), |
||||
|
('comunicar_termino', models.TextField(blank=True, help_text='Lista de pessoas/órgãos para comunicar quando a tarefa for concluída. Coloque um por linha.', verbose_name='comunicar término para')), |
||||
|
('recursos', models.TextField(help_text='Lista de recursos necessários para desenvolver a tarefa', verbose_name='recursos necessários')), |
||||
|
('evento', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eventos.evento')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'cronograma', |
||||
|
'verbose_name_plural': 'cronogramas', |
||||
|
}, |
||||
|
), |
||||
|
migrations.CreateModel( |
||||
|
name='Checklist', |
||||
|
fields=[ |
||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('etapa', models.CharField(max_length=10, verbose_name='sigla da etapa')), |
||||
|
('nome', models.CharField(max_length=100, verbose_name='nome da etapa')), |
||||
|
('descricao', models.TextField(help_text='Descrição detalhada das atividades realizadas na etapa', verbose_name='descrição da etapa')), |
||||
|
('duracao', models.PositiveBigIntegerField(verbose_name='duração (em dias)')), |
||||
|
('dependencia', models.CharField(blank=True, help_text='Siglas das etapas que precisam ser concluídas para que esta seja iniciada. Separe cada uma com um espaço.', max_length=200, verbose_name='depende da etapa')), |
||||
|
('responsaveis', models.TextField(blank=True, help_text='Pessoas, setores, órgãos.', verbose_name='responsáveis pela tarefa')), |
||||
|
('comunicar_inicio', models.TextField(blank=True, help_text='Lista de e-mails para comunicar quando a tarefa for iniciada', verbose_name='comunicar inicio para')), |
||||
|
('comunicar_termino', models.TextField(blank=True, help_text='Lista de e-mails para comunicar quando a tarefa for concluída', verbose_name='comunicar término para')), |
||||
|
('recursos', models.TextField(help_text='Lista de recursos necessários para desenvolver a tarefa', verbose_name='recursos necessários')), |
||||
|
('tipo_evento', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eventos.tipoevento')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'checklist', |
||||
|
'verbose_name_plural': 'checklists', |
||||
|
}, |
||||
|
), |
||||
|
] |
@ -0,0 +1,61 @@ |
|||||
|
{% extends 'pdf/base_report.html' %} |
||||
|
{% load static i18n %} |
||||
|
|
||||
|
{% block page_size %}A4 landscape{% endblock %} |
||||
|
|
||||
|
{% block main_content %} |
||||
|
<h3>{% trans 'Check list' %}</h3> |
||||
|
<table repeat="1"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th rowspan="2">{% trans 'Etapa' %}</th> |
||||
|
<th rowspan="2">{% trans 'Descrição' %}</th> |
||||
|
<th rowspan="2">{% trans 'Duração (dias)' %}</th> |
||||
|
<th colspan="2">{% trans 'Previsão' %}</th> |
||||
|
<th colspan="2">{% trans 'Realizado' %}</th> |
||||
|
<th rowspan="2">{% trans 'Depende de' %}</th> |
||||
|
<th rowspan="2">{% trans 'Dependentes' %}</th> |
||||
|
<th rowspan="2">{% trans 'Responsáveis' %}</th> |
||||
|
<th colspan="2">{% trans 'Comunicar' %}</th> |
||||
|
<th rowspan="2">{% trans 'Recursos necessários' %}</th> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<th>{% trans 'Início' %}</th> |
||||
|
<th>{% trans 'Término' %}</th> |
||||
|
<th>{% trans 'Início' %}</th> |
||||
|
<th>{% trans 'Término' %}</th> |
||||
|
<th>{% trans 'Início' %}</th> |
||||
|
<th>{% trans 'Término' %}</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
{% for etapa in cronograma %} |
||||
|
<tr> |
||||
|
<td>{{ etapa }}</td> |
||||
|
<td>{{ etapa.descricao }}</td> |
||||
|
<td class="center-align">{{ etapa.duracao }}</td> |
||||
|
<td class="center-align">{{ etapa.data_prevista_inicio|date:"SHORT_DATE_FORMAT" }}</td> |
||||
|
<td class="center-align">{{ etapa.data_prevista_termino|date:"SHORT_DATE_FORMAT" }}</td> |
||||
|
<td class="center-align">{{ etapa.data_inicio|date:"SHORT_DATE_FORMAT" }}</td> |
||||
|
<td class="center-align">{{ etapa.data_termino|date:"SHORT_DATE_FORMAT" }}</td> |
||||
|
<td> |
||||
|
<ul> |
||||
|
{% for e in etapa.get_dependencias %} |
||||
|
<li>{{ e }}</li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</td> |
||||
|
<td> |
||||
|
<ul> |
||||
|
{% for e in etapa.get_dependentes %} |
||||
|
<li>{{ e }}</li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</td> |
||||
|
<td>{{ etapa.responsaveis }}</td> |
||||
|
<td>{{ etapa.comunicar_inicio }}</td> |
||||
|
<td>{{ etapa.comunicar_termino }}</td> |
||||
|
<td>{{ etapa.recursos }}</td> |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
{% endblock %} |
@ -0,0 +1,125 @@ |
|||||
|
{% extends 'pdf/base_report.html' %} |
||||
|
{% load static i18n %} |
||||
|
|
||||
|
{% block page_size %}A4 landscape{% endblock %} |
||||
|
|
||||
|
{% block extra_style %} |
||||
|
{{ block.super }} |
||||
|
.rotate { |
||||
|
text-align: center; |
||||
|
white-space: nowrap; |
||||
|
vertical-align: middle; |
||||
|
min-width: 5px; |
||||
|
width: 5px; |
||||
|
height: 6em; |
||||
|
} |
||||
|
.rotate div { |
||||
|
transform: rotate(-90.0deg); |
||||
|
margin-left: -10em; |
||||
|
margin-right: -10em; |
||||
|
#padding: 5px; |
||||
|
} |
||||
|
table, th, td { |
||||
|
border: 1px solid white; |
||||
|
width: 100%; |
||||
|
border-collapse: collapse; |
||||
|
} |
||||
|
th,td { |
||||
|
border-bottom: 1px solid #808080; |
||||
|
padding: 4px; |
||||
|
} |
||||
|
tr:nth-child(even) { |
||||
|
background-color: white; |
||||
|
} |
||||
|
|
||||
|
.atrasado { |
||||
|
background-color: #f44336; # red |
||||
|
} |
||||
|
.iniciou-atrasado { |
||||
|
background-color: #ff9800; # orange |
||||
|
} |
||||
|
.iniciar-hoje { |
||||
|
background-color: #ffe0b2; # orange-lighten-4 |
||||
|
} |
||||
|
.iniciado { |
||||
|
background-color: #4caf50; # green |
||||
|
} |
||||
|
.concluido-com-atraso { |
||||
|
background-color: #ffee58; # yellow-lighten-1 |
||||
|
} |
||||
|
.concluido-no-prazo { |
||||
|
background-color: #2196f3; # blue |
||||
|
} |
||||
|
.previsao { |
||||
|
background-color: #b0bec5; # blue-grey-lighten-2 |
||||
|
} |
||||
|
.hoje { |
||||
|
border: 1px solid black; |
||||
|
} |
||||
|
.inicio-previsto { |
||||
|
border-left: 3px solid #ffb74d; # orange lighten-2 |
||||
|
} |
||||
|
.inicio-real { |
||||
|
border-left: 3px solid #1b5e20; # green darken-4 |
||||
|
} |
||||
|
.inicio-previsto.inicio-real { |
||||
|
border-left: 3px solid #4caf50; # green |
||||
|
} |
||||
|
.termino-previsto { |
||||
|
border-right: 3px solid #0d47a1; # blue darken-4 |
||||
|
} |
||||
|
.termino-real { |
||||
|
border-right: 3px solid #1a237e; # indigo darken-4 |
||||
|
} |
||||
|
.termino-previsto.termino-real { |
||||
|
border-right: 3px solid #2196f3; # blue |
||||
|
} |
||||
|
.legenda { |
||||
|
display: flex; |
||||
|
} |
||||
|
.legenda, .legenda>div { |
||||
|
padding: 8px; |
||||
|
font-weight: bolder; |
||||
|
} |
||||
|
.legenda>div { |
||||
|
text-align: center; |
||||
|
margin-right: 24px; |
||||
|
} |
||||
|
{% endblock %} |
||||
|
{% block main_content %} |
||||
|
<div class="legenda"> |
||||
|
<div>Legenda:</div> |
||||
|
<div class="previsao">{% trans "Planejado" %}</div> |
||||
|
<div class="iniciar-hoje">{% trans "Iniciar hoje" %}</div> |
||||
|
<div class="iniciado">{% trans "Iniciado" %}</div> |
||||
|
<div class="iniciou-atrasado">{% trans "Iniciou atrasado" %}</div> |
||||
|
<div class="atrasado">{% trans "Atrasado" %}</div> |
||||
|
<div class="concluido-no-prazo">{% trans "Concluído no prazo" %}</div> |
||||
|
<div class="concluido-com-atraso">{% trans "Concluído com atraso" %}</div> |
||||
|
</div> |
||||
|
<div class="legenda"> |
||||
|
<div>Marcadores:</div> |
||||
|
<div class="inicio-previsto">{% trans "Início planejado" %}</div> |
||||
|
<div class="inicio-real">{% trans "Início real" %}</div> |
||||
|
<div class="termino-previsto">{% trans "Término planejado" %}</div> |
||||
|
<div class="termino-real">{% trans "Término real" %}</div> |
||||
|
</div> |
||||
|
<table repeat="1"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th>{% trans 'Etapa' %}</th> |
||||
|
{% for data in datas %} |
||||
|
<th class="rotate{% if data == hoje %} hoje{% endif %}"><div>{{ data|date:"SHORT_DATE_FORMAT" }}</div></th> |
||||
|
{% endfor %} |
||||
|
</tr> |
||||
|
</thead> |
||||
|
{% for etapa in cronograma %} |
||||
|
<tr> |
||||
|
<td>{{ etapa }}</td> |
||||
|
{% for data in datas %} |
||||
|
<td class="{% include 'admin/eventos/evento/gant_report_classes.html' %}"></td> |
||||
|
{% endfor %} |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
{% endblock main_content %} |
@ -0,0 +1,27 @@ |
|||||
|
{% spaceless %} |
||||
|
{% if data == hoje %} hoje{% endif %} |
||||
|
|
||||
|
{% if data >= etapa.data_prevista_inicio and data <= etapa.data_prevista_termino or data >= etapa.data_inicio and data <= etapa.data_termino %} |
||||
|
{% if not etapa.data_inicio and etapa.data_prevista_inicio == hoje %} |
||||
|
iniciar-hoje |
||||
|
{% elif not etapa.data_inicio and etapa.data_prevista_inicio < hoje %} |
||||
|
atrasado |
||||
|
{% elif etapa.data_termino and etapa.data_termino <= etapa.data_prevista_termino %} |
||||
|
concluido-no-prazo |
||||
|
{% elif etapa.data_termino and etapa.data_termino > etapa.data_prevista_termino %} |
||||
|
concluido-com-atraso |
||||
|
{% elif not etapa.data_termino and etapa.data_prevista_termino < hoje %} |
||||
|
atrasado |
||||
|
{% elif etapa.data_inicio and not etapa.data_termino and etapa.data_inicio <= etapa.data_prevista_inicio and etapa.data_prevista_termino <= hoje %} |
||||
|
iniciado |
||||
|
{% elif etapa.data_inicio and not etapa.data_termino and etapa.data_inicio > etapa.data_prevista_inicio and etapa.data_prevista_termino <= hoje %} |
||||
|
iniciou-atrasado |
||||
|
{% else %} |
||||
|
previsao |
||||
|
{% endif %} |
||||
|
{% endif %} |
||||
|
{% if data == etapa.data_prevista_inicio %} inicio-previsto{% endif %} |
||||
|
{% if data == etapa.data_prevista_termino %} termino-previsto{% endif %} |
||||
|
{% if data == etapa.data_inicio %} inicio-real{% endif %} |
||||
|
{% if data == etapa.data_termino %} termino-real{% endif %} |
||||
|
{% endspaceless %} |
@ -0,0 +1,35 @@ |
|||||
|
{% extends 'pdf/base_report.html' %} |
||||
|
{% load static i18n %} |
||||
|
|
||||
|
{% block page_size %}A4 landscape{% endblock %} |
||||
|
|
||||
|
{% block main_content %} |
||||
|
<h3>{% trans 'Plano de comunicação' %}</h3> |
||||
|
<table repeat="1"> |
||||
|
<thead> |
||||
|
<tr> |
||||
|
<th rowspan="2">{% trans 'Responsável' %}</th> |
||||
|
<th colspan="{{ destinatarios|length }}">{% trans 'Destinatários' %}</th> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
{% for d in destinatarios %} |
||||
|
<th>{{ d }}</th> |
||||
|
{% endfor %} |
||||
|
</tr> |
||||
|
</thead> |
||||
|
{% for resp, com in matrix.items %} |
||||
|
<tr> |
||||
|
<td>{{ resp }}</td> |
||||
|
{% for d, lista in com.items %} |
||||
|
<td> |
||||
|
<ul> |
||||
|
{% for item in lista %} |
||||
|
<li>{{ item }}</li> |
||||
|
{% endfor %} |
||||
|
</ul> |
||||
|
</td> |
||||
|
{% endfor %} |
||||
|
</tr> |
||||
|
{% endfor %} |
||||
|
</table> |
||||
|
{% endblock %} |
Loading…
Reference in new issue