Ejemplo n.º 1
0
 def obterEventosPresentes(self, dep_id, data_inicial, data_final, reunioes,
                           comissoes, orgaos_nomes):
     eventos_todos = self.com.obterReunioesComissoes()
     presencas = self.com.obterPresencaReunioesComissoes()
     presencas = [x for x in presencas if x["idDeputado"] == dep_id]
     presencas_reunioes_id = [x["idReuniao"] for x in presencas]
     for e in eventos_todos:
         if (self.obterDatetimeDeStr(e["data"]) > data_inicial
                 and self.obterDatetimeDeStr(e["data"]) < data_final):
             evento = Evento()
             evento.id = e['id']
             evento.data_inicial = self.brasilia_tz.localize(
                 self.obterDatetimeDeStr(e["data"]))
             evento.nome = e['convocacao']
             evento.situacao = e['situacao']
             if e['id'] in reunioes:
                 for r in reunioes[e['id']]:
                     proposicao = Proposicao()
                     proposicao.id = r['idDocumento']
                     proposicao.pauta = r['idDocumento']
                     proposicao.url_documento = \
                         'https://www.al.sp.gov.br/propositura/?id={}'.format(r['idDocumento'])
                     proposicao.voto = self.obterVotoDescritivo(r['voto'])
                     proposicao.tipo = r['idDocumento']
                     evento.pautas.append(proposicao)
             orgao = Orgao()
             orgao.nome = comissoes[e['idComissao']]['nome']
             orgao.apelido = comissoes[e['idComissao']]['sigla']
             evento.orgaos.append(orgao)
             if e["id"] in presencas_reunioes_id:
                 evento.set_presente()
                 self.relatorio.eventos_presentes.append(evento)
             else:
                 evento.set_ausencia_evento_nao_esperado()
                 if (comissoes[e["idComissao"]]["sigla"] in orgaos_nomes
                         and e['situacao'].lower() in [
                             'em preparação', 'em preparacao', 'realizada',
                             'encerrada'
                         ]):
                     evento.set_ausente_evento_previsto()
                     self.relatorio.eventos_previstos.append(evento)
                 self.relatorio.eventos_ausentes.append(evento)
 def obter_relatorio(self,
                     parlamentar_id,
                     data_final=datetime.now(),
                     periodo_dias=7):
     try:
         start_time = time()
         self.relatorio = Relatorio()
         self.relatorio.aviso_dados = u'Dados de sessões de comissões não disponível.'
         self.set_period(periodo_dias)
         data_final = datetime.strptime(data_final, '%Y-%m-%d')
         data_inicial = self.obterDataInicial(data_final, **self.periodo)
         logging.info('[SAO PAULO] Parlamentar: {}'.format(parlamentar_id))
         logging.info('[SAO PAULO] Data final: {}'.format(data_final))
         logging.info('[SAO PAULO] Intervalo: {}'.format(periodo_dias))
         vereador = self.obter_parlamentar(parlamentar_id)
         logging.info(
             '[SAO PAULO] Vereador obtido em {0:.5f}s'.format(time() -
                                                              start_time))
         self.relatorio.data_inicial = self.brasilia_tz.localize(
             data_inicial)
         self.relatorio.data_final = self.brasilia_tz.localize(data_final)
         presenca = []
         sessao_total = 0
         presenca_total = 0
         for dia in self.ver.obterPresenca(data_inicial, data_final):
             if dia:
                 for v in dia['vereadores']:
                     if str(v['chave']) == vereador.id:
                         for s in v['sessoes']:
                             if s['presenca'] == 'Presente':
                                 presenca.append(s['nome'])
                         sessao_total += int(dia['totalOrd']) + int(
                             dia['totalExtra'])
                         presenca_total += sum([
                             int(v['presenteOrd']),
                             int(v['presenteExtra'])
                         ])
                 for key, value in dia['sessoes'].items():
                     evento = Evento()
                     orgao = Orgao()
                     orgao.nome = 'Plenário'
                     orgao.apelido = 'PLENÁRIO'
                     evento.orgaos.append(orgao)
                     evento.nome = key
                     evento.id = str(uuid4())
                     if value['data']:
                         try:
                             evento.data_inicial = self.brasilia_tz.localize(
                                 datetime.strptime(value['data'],
                                                   "%d/%m/%Y"))
                             evento.data_final = self.brasilia_tz.localize(
                                 datetime.strptime(value['data'],
                                                   "%d/%m/%Y"))
                         except ValueError:
                             pass
                     for prop in value['pautas']:
                         proposicao = Proposicao()
                         proposicao.pauta = prop['projeto']
                         proposicao.tipo = prop['pauta']
                         for v in prop['votos']:
                             if str(v['chave']) == parlamentar_id:
                                 proposicao.voto = v['voto']
                         evento.pautas.append(proposicao)
                     if key in presenca:
                         evento.set_presente()
                         self.relatorio.eventos_presentes.append(evento)
                     else:
                         evento.set_ausencia_evento_esperado()
                         self.relatorio.eventos_ausentes.append(evento)
         logging.info(
             '[SAO PAULO] Eventos obtidos em {0:.5f}s'.format(time() -
                                                              start_time))
         self.relatorio.eventos_ausentes_esperados_total = sessao_total - presenca_total
         self.obter_proposicoes_parlamentar(vereador.id, data_inicial,
                                            data_final)
         logging.info('[SAO PAULO] Proposicoes obtidas em {0:.5f}s'.format(
             time() - start_time))
         logging.info(
             '[SAO PAULO] Relatorio obtido em {0:.5f}s'.format(time() -
                                                               start_time))
         return self.relatorio
     except Exception as e:
         logging.error(e)
         raise ModelError(str(e))