Skip to content

Instantly share code, notes, and snippets.

@george-silva
Created May 8, 2013 21:23
Show Gist options
  • Save george-silva/5543771 to your computer and use it in GitHub Desktop.
Save george-silva/5543771 to your computer and use it in GitHub Desktop.
class Requerimento(UserDateAdd, UserDateUpd):
"""
BaseRequerimento
"""
tipo = models.CharField(max_length=16,
verbose_name=u"Tipo",
help_text=u"Tipo de requerimento",
choices=TIPO_REQUERIMENTO_CHOICES)
requerente = models.ForeignKey(User,
verbose_name=u"Requerente",
help_text=u"Usuário que iniciou o requerimento.",
editable=False,
related_name="%(app_label)s_%(class)s+")
justificativa = models.TextField(verbose_name=u"Justificativa",
help_text=u"Justificativa para procedência do requerimento.")
analisado_por = models.ForeignKey(User,
verbose_name=u"Analista",
help_text=u"Usuário que analisou o requerimento.",
null=True,
blank=True,
editable=False)
data_inicio_analise = models.DateTimeField(verbose_name=u"Data Início Análise",
help_text=u"Data em que o requerimento começou a ser analisado.",
null=True,
blank=True,
editable=False)
data_fim_analise = models.DateTimeField(verbose_name=u"Data Fim Análise",
help_text=u"Data em que o requerimento terminou de ser analisado e foi deferido ou indeferido.",
null=True,
blank=True,
editable=False)
status = models.CharField(max_length=32,
verbose_name=u"Status",
help_text=u"Status do requerimento.",
choices=STATUS_REQUERIMENTO_CHOICES,
editable=False)
deferido = models.NullBooleanField(verbose_name=u"Deferido?",
help_text=u"Indica se o requerimento foi deferido ou indeferido.",
editable=False)
protocolo = models.CharField(max_length=36,
verbose_name=u"Protocolo",
help_text=u"Número do protocolo",
editable=False)
laudo = models.TextField(verbose_name=u"Laudo",
help_text=u"Laudo final da análise do requerimento.",
null=True,
blank=True,
editable=False)
anexos = generic.GenericRelation(Anexo)
objects = RequerimentoManager()
def get_absolute_url(self):
return reverse("detalhe_requerimento", kwargs={"protocolo": self.protocolo})
def analisar(self, analista):
"""
marca a entrada do documento no processo de análise
"""
if self.status == STATUS_REQUERIMENTO_PROTOCOLADO:
self.analisado_por_id = analista.pk
self.status = STATUS_REQUERIMENTO_EM_ANALISE
self.data_inicio_analise = now()
self.date_upd = now()
self.user_upd_id = analista.pk
self.save()
titulo = u"BaseRequerimento %s entrou em análise" % self.protocolo
msg = u"O requerimento %s entrou em análise pelo analista %s. Assim que a análise for concluída o sistema automaticamente lhe enviará outro email com o status de seu requerimento." % (
self.protocolo, self.analisado_por)
enviar_notificacao(self.analisado_por, self.user_add, titulo, msg)
def deferir(self):
if self.status == STATUS_REQUERIMENTO_EM_ANALISE:
self.data_fim_analise = now()
self.date_upd = now()
self.status = STATUS_REQUERIMENTO_FINALIZADO
self.deferido = True
self.save()
titulo = u"Requerimento %s foi deferido" % self.protocolo
msg = u"O requerimento %s foi deferido. As alterações do requerimento já foram processadas pelo SIGEF automaticamente." % self.protocolo
enviar_notificacao(self.analisado_por, self.user_add, titulo, msg)
def indeferir(self):
if self.status == STATUS_REQUERIMENTO_EM_ANALISE:
self.data_fim_analise = now()
self.date_upd = now()
self.status = STATUS_REQUERIMENTO_FINALIZADO
self.deferido = False
self.save()
titulo = u"Requerimento %s foi indeferido" % self.protocolo
msg = u"O requerimento %s foi indeferido." % self.protocolo
enviar_notificacao(self.analisado_por, self.user_add, titulo, msg)
def save(self, *args, **kwargs):
if not self.pk:
self.protocolo = str(uuid.uuid4())
titulo = u"Requerimento %s criado" % self.protocolo
msg = u"O requerimento %s foi criado com sucesso na base de dados. Ele entrará na fila de análise e assim que a análise for iniciada lhe avisaremos denovo." % self.protocolo
enviar_notificacao(self, self.user_add, titulo, msg)
super(Requerimento, self).save(*args, **kwargs)
class Meta:
ordering = ["-date_add", ]
verbose_name = u"Requerimento"
verbose_name_plural = u"Requerimentos"
class RequerimentoParcela(models.Model):
requerimento = models.ForeignKey(Requerimento, related_name='parcelas')
object_id = models.PositiveIntegerField()
content_type = models.ForeignKey(ContentType)
parcela = generic.GenericForeignKey()
@property
def parcela_historica(self):
return False
@login_required
def dashboard(request):
usuario = request.user
perfil_analista = None
try:
perfil_analista = PerfilAnalistaFundiario.objects.get(user_id=usuario.id)
except:
raise PermissionDenied
orgao = perfil_analista.orgao_publico
municipios = orgao.municipios.all()
ufs = [uf.uf for uf in orgao.estados.all()]
municipios = municipios | Municipio.objects.filter(uf_sigla__in=ufs)
ids = municipios.values_list("id_ibge", flat=True)
content_type_id = ContentType.objects.get_for_model(Parcela)
object_ids = RequerimentoParcela.objects.filter(content_type_id=content_type_id).values_list("object_id", flat=True)
parcelas = Parcela.objects.filter(pk__in=object_ids)
parcelas_analise = RequerimentoParcela.objects.filter(parcela__municipios__id_ibge__in=ids).values_list("requerimento_id", flat=True)
requerimentos_analise = Requerimento.objects.filter(parcelas__in=parcelas_analise,
status=STATUS_REQUERIMENTO_PROTOCOLADO)
requerimentos_pendentes = Requerimento.objects.filter(analisado_por_id=request.user.pk,
status=STATUS_REQUERIMENTO_EM_ANALISE)
return render(request, "requerimentos/dashboard.html", {"cancelamentos_analise": requerimentos_analise,
"cancelamentos": requerimentos_pendentes})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment