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))