Browse Source

Inserindo ações para definir o status de um ou mais diagnósticos como publicado ou não publicado. Ao publicar o mesmo, será enviado um email para o responsável que criou e editou esse registro, notificando o que foi feito com esses dados.

diagnosticos
Gilson Filho 13 years ago
parent
commit
ef366238db
  1. 45
      sigi/apps/diagnosticos/admin.py
  2. 46
      sigi/apps/diagnosticos/models.py
  3. 2
      sigi/apps/diagnosticos/views.py
  4. 8
      sigi/settings.py
  5. 8
      sigi/templates/diagnosticos/email_diagnostico_atualizado.txt
  6. 10
      sigi/templates/diagnosticos/email_diagnostico_publicado.txt

45
sigi/apps/diagnosticos/admin.py

@ -4,35 +4,59 @@ from eav.admin import BaseEntityAdmin, BaseSchemaAdmin
from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria from sigi.apps.diagnosticos.models import Diagnostico, Pergunta, Escolha, Equipe, Anexo, Categoria
from sigi.apps.diagnosticos.forms import DiagnosticoForm from sigi.apps.diagnosticos.forms import DiagnosticoForm
"""
Actions do Admin
"""
# Ação de alterar o status das publicações no modo Draft para Publicado.
def alterar_status_publicacao(self, request, queryset):
for registro in queryset:
diagnostico = Diagnostico.objects.get(pk=registro.id)
diagnostico.status = True
diagnostico.save()
# Enviando o email avisando que o diagnóstico foi publicado
diagnostico.email_diagnostico_publicado(diagnostico.responsavel.email_pessoal, request.get_host())
self.message_user(request, "Diagnóstico(s) publicado(s) com sucesso!")
alterar_status_publicacao.short_description = u"""
Definir diagnósticos como publicado"""
# Ação de alterar o status das publicações no modo Publicado para Draft.
def alterar_status_draft(self, request, queryset):
queryset.update(status=False)
alterar_status_draft.short_description = u"""
Definir diagnósticos como não publicado"""
class EquipeInline(admin.TabularInline): class EquipeInline(admin.TabularInline):
model = Equipe model = Equipe
extra = 4 extra = 4
class AnexosInline(admin.TabularInline): class AnexosInline(admin.TabularInline):
model = Anexo model = Anexo
extra = 2 extra = 2
exclude = ['data_pub',] exclude = ['data_pub', ]
class AnexoAdmin(admin.ModelAdmin): class AnexoAdmin(admin.ModelAdmin):
date_hierarchy = 'data_pub' date_hierarchy = 'data_pub'
exclude = ['data_pub',] exclude = ['data_pub', ]
list_display = ('arquivo', 'descricao', 'data_pub', 'diagnostico') list_display = ('arquivo', 'descricao', 'data_pub', 'diagnostico')
raw_id_fields = ('diagnostico',) raw_id_fields = ('diagnostico',)
search_fields = ('descricao', 'diagnostico__id', 'arquivo', search_fields = ('descricao', 'diagnostico__id', 'arquivo',
'diagnostico__casa_legislativa__nome') 'diagnostico__casa_legislativa__nome')
# Ação de alterar o status das publicações no modo Draft.
def alterar_status_publicacao(modeladmin, request, queryset):
queryset.update(status=True)
alterar_status_publicacao.short_description = u"""
Publicar diagnósticos selecionados"""
class DiagnosticoAdmin(BaseEntityAdmin): class DiagnosticoAdmin(BaseEntityAdmin):
form = DiagnosticoForm form = DiagnosticoForm
date_hierarchy = 'data_questionario' date_hierarchy = 'data_questionario'
actions = [alterar_status_publicacao] actions = [alterar_status_publicacao, alterar_status_draft]
inlines = (EquipeInline, AnexosInline) inlines = (EquipeInline, AnexosInline)
list_display = ('casa_legislativa', 'data_questionario', 'status')
raw_id_fields = ('casa_legislativa', 'responsavel') raw_id_fields = ('casa_legislativa', 'responsavel')
eav_fieldsets = [ eav_fieldsets = [
@ -59,8 +83,9 @@ class PerguntaAdmin (BaseSchemaAdmin):
list_display = ('title', 'categoria', 'datatype', 'help_text', 'required') list_display = ('title', 'categoria', 'datatype', 'help_text', 'required')
list_filter = ('datatype', 'categoria', 'required') list_filter = ('datatype', 'categoria', 'required')
class EscolhaAdmin(admin.ModelAdmin): class EscolhaAdmin(admin.ModelAdmin):
search_fields = ('title',) search_fields = ('title',)
list_display = ('title', 'schema', 'schema_to_open') list_display = ('title', 'schema', 'schema_to_open')
raw_id_fields = ('schema', 'schema_to_open') raw_id_fields = ('schema', 'schema_to_open')
ordering = ('schema', 'title') ordering = ('schema', 'title')

46
sigi/apps/diagnosticos/models.py

@ -1,7 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from sigi.apps.utils import SearchField from sigi.apps.utils import SearchField
from sigi.apps.utils.email import enviar_email
from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute from eav.models import BaseChoice, BaseEntity, BaseSchema, BaseAttribute
@ -23,7 +25,7 @@ class Diagnostico(BaseEntity):
blank=True, blank=True,
) )
data_questionario = models.DateField( data_questionario = models.DateField(
'data do questionario', u'data do questionário',
null=True, null=True,
blank=True, blank=True,
) )
@ -35,9 +37,48 @@ class Diagnostico(BaseEntity):
status = models.BooleanField(u'status do diagnóstico', default=False) status = models.BooleanField(u'status do diagnóstico', default=False)
responsavel = models.ForeignKey('servidores.Servidor', verbose_name=u'responsável') responsavel = models.ForeignKey('servidores.Servidor', verbose_name=u'responsável')
class Meta: class Meta:
verbose_name, verbose_name_plural = u'diagnóstico', u'diagnósticos' verbose_name, verbose_name_plural = u'diagnóstico', u'diagnósticos'
def email_diagnostico_publicado(self, from_email, host):
"""Enviando email quando o diagnóstico for publicado. Os
argumentos acima são:
* from_email - Email de remetente
* host - O Host do sistema, para ser usado na
construção do endereço do diagnóstico
"""
enviar_email(from_email, u"Diagnóstico publicado",
'diagnosticos/email_diagnostico_publicado.txt',
{
'responsavel': self.responsavel.nome_completo,
'casa_legislativa': self.casa_legislativa,
'data_diagnostico': self.data_questionario,
'host': host,
'url_diagnostico': self.get_absolute_url(),
'status': u"Publicado"
}
)
def email_diagnostico_alterado(self, from_email, host):
"""Enviando email quando o status do diagnóstico
for alterado. Os argumentos acima são:
* from_email - Email do destinatário
* host - O Host do sistema, para ser usado na
construção do endereço do diagnóstico
"""
enviar_email(from_email, u"Diagnóstico alterado",
'diagnosticos/email_diagnostico_alterado.txt',
{
'servidor': self.responsavel.nome_completo,
'casa_legislativa': self.casa_legislativa,
'data_diagnostico': self.data_questionario,
'host': host,
'url_diagnostico': self.get_absolute_url,
'status': "Alterado"
}
)
@classmethod @classmethod
def get_schemata_for_model(self): def get_schemata_for_model(self):
return Pergunta.objects.all() return Pergunta.objects.all()
@ -45,6 +86,9 @@ class Diagnostico(BaseEntity):
def __unicode__(self): def __unicode__(self):
return str(self.casa_legislativa) return str(self.casa_legislativa)
def get_absolute_url(self):
return "/diagnosticos/diagnostico/%i/" % (self.id, )
class Categoria(models.Model): class Categoria(models.Model):
""" Modelo para representar a categoria de uma pergunta """ Modelo para representar a categoria de uma pergunta

2
sigi/apps/diagnosticos/views.py

@ -14,7 +14,7 @@ def lista(request):
# TODO Implementar pesquisa de diagnosticos, em que esses registros # TODO Implementar pesquisa de diagnosticos, em que esses registros
# devem ser criado pelo servidor logado. # devem ser criado pelo servidor logado.
diagnosticos = Diagnostico.objects.all() diagnosticos = Diagnostico.objects.filter(status=False)
context = RequestContext(request, {'diagnosticos': diagnosticos}) context = RequestContext(request, {'diagnosticos': diagnosticos})
return render_to_response('diagnosticos/diagnosticos_list.html', context) return render_to_response('diagnosticos/diagnosticos_list.html', context)

8
sigi/settings.py

@ -29,6 +29,14 @@ DEFAULT_FROM_EMAIL = 'noreply@localhost'
INTERNAL_IPS = ('127.0.0.1',) INTERNAL_IPS = ('127.0.0.1',)
DEFAULT_FROM_EMAIL = ''
EMAIL_SUBJECT_PREFIX = u'[SIGI]'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True
#DATABASE_ENGINE = 'postgresql_psycopg2' #DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_ENGINE = 'sqlite3' DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'devel.db' DATABASE_NAME = 'devel.db'

8
sigi/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/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 }}
Loading…
Cancel
Save