# -*- coding: utf-8 -*-
import os
import sys
import csv
from rh.models import *
from rh.gfp.models import *
from datetime import datetime, date,timedelta
from django.db.models import Q
import csv, StringIO
import calendar
class UnicodeWriter(object):
"""
Like UnicodeDictWriter, but takes lists rather than dictionaries.
Usage example:
fp = open('my-file.csv', 'wb')
writer = UnicodeWriter(fp)
writer.writerows([
[u'Bob', 22, 7],
[u'Sue', 28, 6],
[u'Ben', 31, 8],
# \xc3\x80 is LATIN CAPITAL LETTER A WITH MACRON
['\xc4\x80dam'.decode('utf8'), 11, 4],
])
fp.close()
"""
def __init__(self, f, dialect=csv.excel_tab, encoding="utf-16", **kwds):
# Redirect output to a queue
self.queue = StringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect,delimiter=';',quotechar='|', quoting=csv.QUOTE_MINIMAL, **kwds)
self.stream = f
self.encoding = encoding
def writerow(self, row):
# Modified from original: now using unicode(s) to deal with e.g. ints
self.writer.writerow([unicode(s).encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = data.encode(self.encoding)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
class Gerador(object):
colunas = []
registros = []
print_colunas= True
NOMEARQUIVO = 'NOME_PADRAO'
PASTA_ARQUIVO = '/pasta_padrao/'
CAMINHO_PASTA = NOME_PASTA = settings.UPLOAD_STORE_DIR
def __init__(self,**kwds):
self.colunas = []
self.registros = []
self.print_colunas= True
self.NOMEARQUIVO = 'NOME_PADRAO'
self.NOME_PASTA = '/pasta_padrao/'
def query(self):
return None
def set_colunas(self,colunas):
self.colunas = colunas
def get_file_name(self):
return self.NOMEARQUIVO
def set_registros(self,registros):
self.registros = registros
def get_registros():
return self.registros
def gerar_arquivo(self):
print self.CAMINHO_PASTA + self.NOME_PASTA
if not os.path.exists(self.CAMINHO_PASTA + self.NOME_PASTA):
os.makedirs(self.CAMINHO_PASTA + self.NOME_PASTA)
with open(self.CAMINHO_PASTA + self.NOME_PASTA+self.get_file_name(), 'wb') as csvfile:
print self.CAMINHO_PASTA + self.NOME_PASTA+self.get_file_name()
writer = UnicodeWriter(csvfile)
filewriter = csv.writer(csvfile, delimiter=';',quotechar='|', quoting=csv.QUOTE_MINIMAL)
if self.print_colunas:
writer.writerow(self.colunas)
for registro in self.get_registros():
print registro
writer.writerow(registro)
def start(self):
self.gerar_arquivo()
class LotacaoAp(Gerador):
def __init__(self,**kwds):
self.colunas = []
self.registros = []
self.print_colunas= True
self.NOMEARQUIVO = 'LOTACAO.csv'
self.NOME_PASTA = '/pasta_padrao/'
self.colunas = ['ID','DESCRICAO']
def get_registros(self):
registro = [
'1',
'MPPI'
]
registos = []
registos.append(registro)
self.registros = registos
return self.registros
class CargoAp(Gerador):
def __init__(self,**kwds):
self.colunas = []
self.registros = []
self.print_colunas= True
self.NOMEARQUIVO = 'CARGO.csv'
self.NOME_PASTA = '/pasta_padrao/'
self.colunas = ['ID','DESCRICAO']
def get_registros(self):
registros = []
registros.append(['99999','SERVIDOR APOSENTADO'])
registros.append(['999999','PROMOTOR DE JUSTIÇA APOSENTADO'])
registros.append(['9999999','PROCURADOR DE JUSTIÇA APOSENTADO'])
self.registros = registros
return self.registros
class DadosFuncionaisAP(Gerador):
def __init__(self,**kwds):
self.month = 2
self.year = 2022
self.colunas = []
self.registros = []
self.print_colunas= True
self.NOMEARQUIVO = 'DADOS_FUNCIONAIS.csv'
self.NOME_PASTA = '/pasta_padrao/'
self.colunas = ['CPF','Dependente_Imp_Renda','Dependente_Sal_Renda','Data_admissao','Cargo_id','Lotacao_id','Orgao_id','Orgao_lotacao','Status_id','Plano','Plano_Grupo','Plano_Cargo','Plano_Classe','Cargo']
def get_aposentados(self):
query = Servidor.objects.filter(
entries__folha__periodo__ano=self.year,
entries__folha__periodo__mes=self.month,
entries__folha__tipo_folha__titulo='APOSENTADOS',
).exclude(matricula=17061).order_by('pessoa_fisica__nome').distinct()
return query
def get_cpf(self,servidor):
if servidor.pessoa_fisica.cpf:
return servidor.pessoa_fisica.cpf
else:
return u''
def get_dependente_Imp_Renda(self,servidor):
return u'0'
def Dependente_Sal_Renda(self,servidor):
return u'0'
def get_matriculas_aposentados(self):
matriculas = [
17060,17031,17083,16047,17116,17103,17087,17094,17058,17045,
17102,17067,17123,17124,17105,17118,17046,17080,17099,17095,
17044,16034,16013,17059,16019,17076,17086,15933,17089,17122,
16186,17054,17071,16081,17075,15953,17074,17085,17117,17013,
16035,17120,17106,17056,17110,17018,16080,17070,17069,17125,
16067,17082,17109,16407,16082,17068,17077,17101,17104,17100,
17064,17073,17072,16339,17048,17004,17026,17078,17121,17108,
17040,17141,17065,17139,17127,17144,17143,17142,17129,17111,
17134,17138,17135,17132,17133,17137,17145,17112,17131,17088,
17092,17128,17126,17136,17140,17130,17091]
return matriculas
def get_data_aposentadoria(self,servidor):
data_aposentadoria = [u'23/01/1998',u'13/07/1989',u'13/03/2007',u'14/12/2021',u'28/09/2016',u'19/08/2011',u'06/11/2007',u'10/11/2009',u'15/02/1996',u'13/07/1992',u'29/07/2011',u'11/08/2000',u'20/12/2017',u'20/12/2017',u'28/06/2012',u'20/12/2017',u'10/08/1992',u'23/02/2006',u'31/03/2010',u'19/02/2015',u'08/07/1992',u'20/12/2021',u'14/12/2021',u'28/06/1996',u'08/12/2020',u'06/10/2003',u'17/07/2007',u'03/09/2014',u'22/09/2008',u'20/12/2017',u'01/12/2021',u'17/03/1995',u'02/07/2003',u'10/12/2021',u'15/12/2003',u'02/12/2021',u'11/12/2003',u'21/08/2007',u'05/10/2017',u'17/10/1985',u'17/11/2021',u'20/12/2017',u'20/08/2012',u'19/07/1995',u'09/08/2013',u'20/02/1984',u'18/11/2021',u'09/12/2002',u'14/01/2002',u'02/07/2019',u'07/12/2021',u'21/06/2006',u'19/04/2013',u'29/10/2021',u'10/01/2022',u'31/05/2001',u'26/08/2004',u'04/04/2011',u'11/06/2008',u'10/08/2010',u'18/06/1998',u'11/11/2003',u'31/10/2003',u'05/04/2021',u'09/12/1992',u'25/04/1989',u'22/02/1990',u'26/04/2005',u'20/12/2017',u'06/05/2003',u'13/08/1995',u'14/12/2021',u'28/08/1998',u'13/12/2021',u'13/11/2019',u'20/12/2021',u'14/12/2021',u'14/12/2021',u'07/12/2020',u'03/09/2014',u'01/12/2021',u'10/12/2021',u'01/12/2021',u'17/11/2021',u'18/11/2021',u'07/12/2021',u'10/01/2022',u'10/10/2014',u'29/10/2021',u'29/01/2008',u'26/04/2011',u'25/11/2019',u'13/11/2019',u'07/12/2021',u'13/12/2021',u'29/03/2021',u'20/03/2009']
index_aposentadoria = self.get_matriculas_aposentados().index(servidor.matricula)
return data_aposentadoria[index_aposentadoria]
def get_tipo_cargo_aposentado(self,servidor):
tipo_aposentadoria = ['PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTORA DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','SERVIDOR APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROCURADOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','SERVIDOR APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','SERVIDOR APOSENTADO','PROMOTOR DE JUSTIÇA APOSENTADO','SERVIDOR APOSENTADO']
index_aposentadoria = self.get_matriculas_aposentados().index(servidor.matricula)
return tipo_aposentadoria[index_aposentadoria]
def get_admissao(self,servidor):
return u''
def get_id_cargo(self,servidor):
id_cargo = u'0'
if servidor.tipo =='S':
id_cargo = '99999'
elif get_tipo_cargo_aposentado(servidor) == 'PROCURADOR DE JUSTIÇA APOSENTADO':
id_cargo = '9999999'
else:
id_cargo = '999999'
return id_cargo
def get_lotacao_id(self,servidor):
def get_registros(self):
query = self.get_aposentados()
registros = []
for s in query:
registo = [
self.get_cpf(s),
self.get_dependente_Imp_Renda(s),
self.Dependente_Sal_Renda(s),
self.get_admissao(s),
self.get_id_cargo(servidor),
]
registros.append(registo)
self.registros = registros
return self.registros