Untitled

 avatar
unknown
python
3 years ago
12 kB
2
Indexable
# -*- 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