|
|
Funções úteis em Python
-
Criar id no Plone
"""
Cria id no Plone
Exemplo: return plone_utils.normalizeString('Documento das Aplicações Financeiras')
retorna documento-das-aplicacoes-financeiras
"""
plone_utils = context.plone_utils
return plone_utils.normalizeString(id)
-
Método que coloca pontos de três em três casas
Obs: Muito utilizado para formatar matrículas ou até valores monetários sem casas decimais.
def setRegistrationFormat(self, numero):
"""
Retorna numero no formato 123.456.789, ao receber 123456789.
"""
lista=[]
cont=0
tamanho=0
numero_formatado=''
if numero is not None:
tamanho = len(numero)
# transforma em lista
while cont < tamanho:
lista.insert(cont,numero[cont])
cont+=1
# coloca pontos
while tamanho > 0:
tamanho = tamanho - 3
if tamanho > 0:
lista.insert(tamanho,'.')
# transforma lista em string
for item in lista:
numero_formatado = numero_formatado + str(item)
return numero_formatado
return numero
-
Método que muda encode de latin1 para utf-8
security.declarePublic('setlatin2utf8')
def setlatin2utf8(self, string):
"""
Método que muda encode de latin1 para utf-8
"""
return string.decode("latin1").encode("utf-8")
-
Método que retorna data em formatos variados
security.declarePublic('getDateTimeFormat')
def getDateTimeFormat(self, formato):
"""
Este método retorna a data do sistema em formatos variados.
Formatos:
1: dd/mm/yyyy
2: dd/mm/yy
3: yyyy/mm/dd
4: yy/mm/dd
5: data para log
6: ano corrente
7: hash de data
8: hash de data menor
9: data modificada = 15/06/2006 16:00
10: 2006/06/16 21:49:21.957
Ex: getDateTimeFormat(1)
retorna 12/01/2006
"""
if formato == 1:
data = self.ZopeTime().strftime("%d/%m/%Y")
if formato == 2:
data = self.ZopeTime().strftime("%d/%m/%y")
if formato == 3:
data = self.ZopeTime().strftime("%Y/%m/%d")
if formato == 4:
data = self.ZopeTime().strftime("%y/%m/%d")
if formato == 5:
data = self.ZopeTime()
if formato == 6:
data = self.ZopeTime().strftime("%Y")
if formato == 7:
data = self.ZopeTime().strftime("%d%m%Y%H%M")
if formato == 8:
segundos = self.ZopeTime().strftime("%s")
data = str(self.ZopeTime().strftime("%d%m%M")) +segundos[-2:]
if formato == 9:
data = self.ZopeTime().strftime("%d/%m/%Y %H:%M")
if formato == 10:
data = str(self.ZopeTime())
data = data.replace('GMT-3','')
data = data[:23]
data = data.strip()
return data
-
Método que muda o formato de uma data
security.declarePublic('setDateFormat')
def setDateFormat(self, data, entrada, saida):
"""
Este método muda o formato da data nos seguintes formatos:
entrada/saida
1: dd/mm/yyyy
2: dd/mm/yy
3: yyyy/mm/dd
4: yy/mm/dd
Parâmetros somente de Saída:
5: yyyy
6: mm
7: dd
8: 1 ou 2 (semestre)
Ex: setDateFormat('2006/12/01',3,1)
irá retornar: 01/12/2006
Ex: setDateFormat('01/12/2006',1,3)
irá retornar: 2006/12/01
"""
##TODO: Incluir validação de tamanho de campo :-(
if entrada == 1:
"""Formato: dd/mm/yyyy"""
ano = data[6:]
mes = data[3:5]
dia = data[:2]
if entrada == 2:
"""Formato: dd/mm/yy"""
ano = data[8:]
mes = data[3:5]
dia = data[:2]
if entrada == 3:
"""Formato: yyyy/mm/dd"""
ano = data[:4]
mes = data[5:7]
dia = data[8:]
if entrada == 4:
"""Formato: yy/mm/dd"""
ano = data[:2]
mes = data[3:5]
dia = data[6:]
if saida == 1:
"""Formato: dd/mm/yyyy"""
return dia + '/' + mes + '/' + ano
if saida == 2:
"""Formato: dd/mm/yy"""
return dia + '/' + mes + '/' + ano
if saida == 3:
"""Formato: yyyy/mm/dd"""
return ano + '/' + mes + '/' + dia
if saida == 4:
"""Formato: yy/mm/dd"""
return ano + '/' + mes + '/' + dia
if saida == 5:
"""Formato: yyyy"""
return ano
if saida == 6:
"""Formato: mm"""
return mes
if saida == 7:
"""Formato: dd"""
return dia
if saida == 8:
"""Retorna semestre"""
if mes <= 6:
return 1
else:
return 2
return string.decode("latin1").encode("utf-8")
-
Método que converte valores monetários em formatos variados
security.declarePublic('setMoneyFormat')
def setMoneyFormat(self, valor, formato):
"""
Formatos:
1: nnn.nnn.nnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)
ou
nnnnnnnnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)
2: nnn.nnn.nnn,nn (Real com pontos) p/ nnnnnnnnn,nn (Real)
3: nnn,nnn,nnn.nn (Dólar com vírgulas) p/ nnnnnnnnn.nn (Dólar)
4: nnnnnnnnn.nn (Dólar - formato do banco) p/ nnn.nnn.nnn,nn (Real com pontos)
Ex: setMoneyFormat('12.000.100,50',1)
retornará: 12000100.50
Ex: setMoneyFormat('12000100,50',1)
retornará: 12000100.50
Ex: setMoneyFormat('12.000.100,50',2)
retornará: 12000100,50
Ex: setMoneyFormat('12,000,100.50',3)
retornará: 12000100.50
Ex: setMoneyFormat('12000100.5',4)
retornará: 12.000.100,50
"""
if formato == 1:
"""Formato: nnn.nnn.nnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)"""
""" ou """
"""Formato: nnnnnnnnn,nn (Real) p/ nnnnnnnnn.nn (Dólar - gravar no banco ou float do python)"""
valor = valor.replace('.','')
valor = valor.replace(',','.')
return valor
if formato == 2:
"""Formato: nnn.nnn.nnn,nn (Real com pontos) p/ nnnnnnnnn,nn (Real)"""
valor = valor.replace('.','')
return valor
if formato == 3:
"""Formato: nnn,nnn,nnn.nn (Dólar com vírgulas) p/ nnnnnnnnn.nn (Dólar)"""
valor = valor.replace(',','')
return valor
if formato == 4:
"""Formato: nnnnnnnnn.nn (Dólar - formato do banco) p/ nnn.nnn.nnn,nn (Real com pontos)"""
lista = []
cont = 0
tamanho = 0
# Preenche com zero no final
if len(valor.split('.')[1]) < 2:
valor = valor + '0'
# Troca ponto por vírgula
valor = valor.replace('.',',')
# Transforma o valor em uma lista
tamanho = len(valor)
while cont < tamanho:
lista.insert(cont,valor[cont])
cont+=1
# Coloca pontos na lista
tamanho = tamanho - 3
while tamanho > 0:
tamanho = tamanho - 3
if tamanho > 0:
lista.insert(tamanho,'.')
# Transforma lista em string
numero_formatado=''
for item in lista:
numero_formatado = numero_formatado + str(item)
return numero_formatado
|