@ -1,4 +1,4 @@
from datetime import da te
from django . utils import timezon e
from django . db import models
from django . db import models
from sigi . apps . casas . models import Orgao , Funcionario
from sigi . apps . casas . models import Orgao , Funcionario
from django . utils . translation import gettext as _
from django . utils . translation import gettext as _
@ -48,6 +48,14 @@ class TipoServico(models.Model):
class Servico ( models . Model ) :
class Servico ( models . Model ) :
RESULTADO_CHOICES = (
( " N " , _ ( " Não verificado " ) ) ,
( " F " , _ ( " Funcionando " ) ) ,
( " U " , _ ( " Nunca foi usado " ) ) ,
( " D " , _ ( " Acesso negado " ) ) ,
( " O " , _ ( " Fora do ar " ) ) ,
( " I " , _ ( " Dados imcompatíveis - não é serviço Interlegis " ) ) ,
)
casa_legislativa = models . ForeignKey (
casa_legislativa = models . ForeignKey (
Orgao , on_delete = models . PROTECT , verbose_name = _ ( " Casa Legislativa " )
Orgao , on_delete = models . PROTECT , verbose_name = _ ( " Casa Legislativa " )
)
)
@ -58,7 +66,9 @@ class Servico(models.Model):
hospedagem_interlegis = models . BooleanField (
hospedagem_interlegis = models . BooleanField (
_ ( " Hospedagem no Interlegis? " ) , default = False
_ ( " Hospedagem no Interlegis? " ) , default = False
)
)
data_ativacao = models . DateField ( _ ( " Data de ativação " ) , default = date . today )
data_ativacao = models . DateField (
_ ( " Data de ativação " ) , default = timezone . localdate
)
data_alteracao = models . DateField (
data_alteracao = models . DateField (
_ ( " Data da última alteração " ) , blank = True , null = True , auto_now = True
_ ( " Data da última alteração " ) , blank = True , null = True , auto_now = True
)
)
@ -68,6 +78,15 @@ class Servico(models.Model):
motivo_desativacao = models . TextField (
motivo_desativacao = models . TextField (
_ ( " Motivo da desativação " ) , blank = True
_ ( " Motivo da desativação " ) , blank = True
)
)
data_verificacao = models . DateTimeField (
_ ( " data da última verificação " ) , blank = True , null = True
)
resultado_verificacao = models . CharField (
_ ( " resultado da verificação " ) ,
choices = RESULTADO_CHOICES ,
default = " N " ,
max_length = 1 ,
)
data_ultimo_uso = models . DateField (
data_ultimo_uso = models . DateField (
_ ( " Data da última utilização " ) ,
_ ( " Data da última utilização " ) ,
blank = True ,
blank = True ,
@ -99,6 +118,8 @@ class Servico(models.Model):
def reset ( ) :
def reset ( ) :
if self . data_ultimo_uso is not None :
if self . data_ultimo_uso is not None :
self . data_verificacao = None
self . resultado_verificacao = " N "
self . data_ultimo_uso = None
self . data_ultimo_uso = None
self . erro_atualizacao = " "
self . erro_atualizacao = " "
self . save ( )
self . save ( )
@ -109,6 +130,7 @@ class Servico(models.Model):
if len ( param_pesquisa ) != 3 :
if len ( param_pesquisa ) != 3 :
return {
return {
" data " : " " ,
" data " : " " ,
" resultado " : " N " ,
" erro " : _ ( " String de pesquisa mal configurada " ) ,
" erro " : _ ( " String de pesquisa mal configurada " ) ,
" comment " : _ ( " Corrija a string de pesquisa " ) ,
" comment " : _ ( " Corrija a string de pesquisa " ) ,
}
}
@ -124,6 +146,7 @@ class Servico(models.Model):
except Exception as e :
except Exception as e :
return {
return {
" data " : " " ,
" data " : " " ,
" resultado " : " O " ,
" erro " : str ( e ) ,
" erro " : str ( e ) ,
" comment " : _ (
" comment " : _ (
" Não foi possível conectar com o servidor. "
" Não foi possível conectar com o servidor. "
@ -135,6 +158,7 @@ class Servico(models.Model):
if req . status_code != 200 :
if req . status_code != 200 :
return {
return {
" data " : " " ,
" data " : " " ,
" resultado " : " D " ,
" erro " : req . reason ,
" erro " : req . reason ,
" comment " : _ (
" comment " : _ (
" Não foi possível receber os dados do "
" Não foi possível receber os dados do "
@ -150,6 +174,7 @@ class Servico(models.Model):
else :
else :
return {
return {
" data " : " " ,
" data " : " " ,
" resultado " : " N " ,
" erro " : _ ( " String de pesquisa mal configurada " ) ,
" erro " : _ ( " String de pesquisa mal configurada " ) ,
" comment " : " " ,
" comment " : " " ,
}
}
@ -159,6 +184,7 @@ class Servico(models.Model):
if ( len ( data ) - 1 ) < c :
if ( len ( data ) - 1 ) < c :
return {
return {
" data " : " " ,
" data " : " " ,
" resultado " : " U " ,
" erro " : _ ( " Sem dados para verificação " ) ,
" erro " : _ ( " Sem dados para verificação " ) ,
" comment " : _ ( " Parece que nunca foi usado " ) ,
" comment " : _ ( " Parece que nunca foi usado " ) ,
}
}
@ -173,10 +199,16 @@ class Servico(models.Model):
data = data . firstChild . nodeValue
data = data . firstChild . nodeValue
data = data [ : 10 ]
data = data [ : 10 ]
data = data . replace ( " / " , " - " )
data = data . replace ( " / " , " - " )
return { " data " : data , " erro " : " " , " comment " : " " }
return {
" data " : data ,
" resultado " : " F " ,
" erro " : " " ,
" comment " : " " ,
}
except Exception as e :
except Exception as e :
return {
return {
" data " : " " ,
" data " : " " ,
" resultado " : " I " ,
" erro " : str ( e ) ,
" erro " : str ( e ) ,
" comment " : _ (
" comment " : _ (
" Parece que não é um {tipo} " . format (
" Parece que não é um {tipo} " . format (
@ -194,6 +226,7 @@ class Servico(models.Model):
if not url :
if not url :
reset ( )
reset ( )
self . erro_atualizacao = _ ( " Serviço sem URL " )
self . erro_atualizacao = _ ( " Serviço sem URL " )
self . data_verificacao = timezone . localtime ( )
self . save ( )
self . save ( )
return
return
@ -206,6 +239,12 @@ class Servico(models.Model):
resultados . append ( ultimo_uso ( url , string_pesquisa ) )
resultados . append ( ultimo_uso ( url , string_pesquisa ) )
data = max ( [ r [ " data " ] for r in resultados ] )
data = max ( [ r [ " data " ] for r in resultados ] )
resultado = { r [ " resultado " ] for r in resultados }
if " F " in resultado :
self . resultado_verificacao = " F "
else :
self . resultado_verificacao = resultado . pop ( )
if data == " " :
if data == " " :
# Nenhuma busca deu resultado, guardar log de erro
# Nenhuma busca deu resultado, guardar log de erro
@ -213,20 +252,19 @@ class Servico(models.Model):
self . erro_atualizacao = " <br/> " . join (
self . erro_atualizacao = " <br/> " . join (
set (
set (
[
[
" {erro} ( {comment} ) " . format (
f " { r [ ' erro ' ] } ( { r [ ' comment ' ] } ) "
erro = r [ " erro " ] , comment = r [ " comment " ]
)
for r in resultados
for r in resultados
if r [ " erro " ] != " " and r [ " comment " ] != " "
if r [ " erro " ] != " " and r [ " comment " ] != " "
]
]
)
)
)
)
self . save ( )
else :
else :
# Atualiza a maior data de atualização
# Atualiza a maior data de atualização
self . data_ultimo_uso = data [ : 10 ] # Apenas YYYY-MM-DD
self . data_ultimo_uso = data [ : 10 ] # Apenas YYYY-MM-DD
self . erro_atualizacao = " "
self . erro_atualizacao = " "
self . save ( )
self . data_verificacao = timezone . localtime ( )
self . save ( )
return
return
@ -287,7 +325,7 @@ class LogServico(models.Model):
Servico , on_delete = models . CASCADE , verbose_name = _ ( " Serviço " )
Servico , on_delete = models . CASCADE , verbose_name = _ ( " Serviço " )
)
)
descricao = models . CharField ( _ ( " Breve descrição da ação " ) , max_length = 60 )
descricao = models . CharField ( _ ( " Breve descrição da ação " ) , max_length = 60 )
data = models . DateField ( _ ( " Data da ação " ) , default = date . today )
data = models . DateField ( _ ( " Data da ação " ) , default = timezone . localdate )
log = models . TextField ( _ ( " Log da ação " ) )
log = models . TextField ( _ ( " Log da ação " ) )
def __str__ ( self ) :
def __str__ ( self ) :