def acoes(self, request): periodo = None associacao_uuid = request.query_params.get('associacao_uuid') periodo_uuid = request.query_params.get('periodo_uuid') conta_associacao_uuid = self.request.query_params.get('conta-associacao') if not conta_associacao_uuid or not associacao_uuid or not periodo_uuid: erro = { 'erro': 'parametros_requeridos', 'mensagem': 'É necessário enviar o uuid do período, uuid da associação e o uuid da conta da associação.' } return Response(erro, status=status.HTTP_400_BAD_REQUEST) if periodo_uuid: periodo = Periodo.by_uuid(periodo_uuid) if not periodo: periodo = Periodo.periodo_atual() conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid) info_acoes = info_acoes_associacao_no_periodo(associacao_uuid=associacao_uuid, periodo=periodo, conta=conta_associacao) result = { 'info_acoes': [info for info in info_acoes if info['saldo_reprogramado'] or info['receitas_no_periodo'] or info['despesas_no_periodo']] } return Response(result)
def copia_atribuicoes_de_um_periodo(dados): if not dados.get('periodo_atual') or not dados.get( 'periodo_copiado') or not dados.get('dre_uuid'): raise Exception("Os parâmetros não podem ser vazios ou nulos.") for unidade in Unidade.objects.filter(dre__uuid=dados.get('dre_uuid')): kwargs = { "unidade__uuid": unidade.uuid, "periodo__uuid": dados.get('periodo_copiado') } atribuicao = Atribuicao.search(**kwargs).first() if atribuicao: kwargs = { "unidade__uuid": unidade.uuid, "periodo__uuid": dados.get('periodo_atual') } atribuicao_atual = Atribuicao.search(**kwargs).first() periodo_atual = Periodo.by_uuid(dados.get('periodo_atual')) if atribuicao_atual: atribuicao_atual.tecnico = atribuicao.tecnico atribuicao_atual.periodo = periodo_atual atribuicao_atual.save() else: Atribuicao.objects.create(tecnico=atribuicao.tecnico, unidade=atribuicao.unidade, periodo=periodo_atual) else: kwargs = { "unidade__uuid": unidade.uuid, "periodo__uuid": dados.get('periodo_atual') } atribuicao_atual = Atribuicao.search(**kwargs).first() if atribuicao_atual: atribuicao_atual.delete()
def relacao_bens_info(self, request): conta_associacao_uuid = self.request.query_params.get( 'conta-associacao') periodo_uuid = self.request.query_params.get('periodo') periodo = Periodo.by_uuid(periodo_uuid) conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid) prestacao_conta = PrestacaoConta.objects.filter( associacao=conta_associacao.associacao, periodo__uuid=periodo_uuid).first() relacao_bens = RelacaoBens.objects.filter( conta_associacao__uuid=conta_associacao_uuid, prestacao_conta=prestacao_conta).first() msg = "" if not relacao_bens: rateios = RateioDespesa.rateios_da_conta_associacao_no_periodo( conta_associacao=conta_associacao, periodo=periodo, aplicacao_recurso=APLICACAO_CAPITAL) if rateios: msg = 'Documento pendente de geração' else: msg = "Não houve bem adquirido ou produzido no referido período." else: msg = str(relacao_bens) return Response(msg)
def concluir_prestacao_de_contas_async(periodo_uuid, associacao_uuid, usuario="", criar_arquivos=True): from sme_ptrf_apps.core.services.prestacao_contas_services import ( _criar_documentos, _criar_fechamentos, _apagar_previas_documentos) periodo = Periodo.by_uuid(periodo_uuid) associacao = Associacao.by_uuid(associacao_uuid) prestacao = PrestacaoConta.abrir(periodo=periodo, associacao=associacao) acoes = associacao.acoes.filter(status=AcaoAssociacao.STATUS_ATIVA) contas = associacao.contas.filter(status=ContaAssociacao.STATUS_ATIVA) _criar_fechamentos(acoes, contas, periodo, prestacao) logger.info('Fechamentos criados para a prestação de contas %s.', prestacao) _apagar_previas_documentos(contas=contas, periodo=periodo, prestacao=prestacao) logger.info('Prévias apagadas.') _criar_documentos(acoes, contas, periodo, prestacao, usuario=usuario, criar_arquivos=criar_arquivos) logger.info('Documentos gerados para a prestação de contas %s.', prestacao) prestacao = prestacao.concluir() logger.info('Concluída a prestação de contas %s.', prestacao)
def gerar_previa_relacao_de_bens_async(periodo_uuid, conta_associacao_uuid, data_inicio, data_fim): logger.info( f'Iniciando criação da Previa de relação de bens para a conta {conta_associacao_uuid} e período {periodo_uuid}.' ) from sme_ptrf_apps.core.services.prestacao_contas_services import ( _criar_previa_relacao_de_bens, _apagar_previas_relacao_bens) periodo = Periodo.by_uuid(periodo_uuid) periodo_previa = PeriodoPrevia(periodo.uuid, periodo.referencia, data_inicio, data_fim) conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid) _apagar_previas_relacao_bens(conta=conta_associacao, periodo=periodo) relacao_de_bens = _criar_previa_relacao_de_bens( periodo=periodo, conta=conta_associacao, ) logger.info( f'Previa de Relação de Bens criado para a conta {conta_associacao} e período {periodo}.' ) logger.info(f'Previa de Relação de Bens arquivo {relacao_de_bens}.')
def notificar_usuario(dado): logging.info("Criando notificações.") associacao = Associacao.by_uuid(dado['associacao']) periodo = Periodo.by_uuid(dado['periodo']) comentarios = [ ComentarioAnalisePrestacao.by_uuid(uuid) for uuid in dado['comentarios'] ] tipo = TipoNotificacao.objects.filter(nome="Aviso").first() categoria = Categoria.objects.filter( nome="Comentário na prestação de contas").first() remetente = Remetente.objects.filter(nome="DRE").first() titulo = f"Comentário feito em sua prestação de contas de {periodo.referencia}." cargos = [ MembroEnum.PRESIDENTE_DIRETORIA_EXECUTIVA.name, MembroEnum.VICE_PRESIDENTE_DIRETORIA_EXECUTIVA.name ] membros = associacao.cargos.filter(cargo_associacao__in=cargos) for membro in membros: usuario = None if membro.codigo_identificacao: usuario = User.objects.filter( username=membro.codigo_identificacao).first() else: usuario = User.objects.filter(username=membro.cpf).first() if usuario: for comentario in comentarios: Notificacao.objects.create(tipo=tipo, categoria=categoria, remetente=remetente, titulo=titulo, descricao=comentario.comentario, usuario=usuario) logger.info("Notificações criadas com sucesso.")
def salvar_atualizar_atribuicao_em_lote(dados_atribuicoes): if not dados_atribuicoes.get('tecnico') or not dados_atribuicoes.get( 'periodo') or not dados_atribuicoes.get('unidades'): raise Exception("Os parâmetros não podem ser vazios ou nulos.") tecnico = TecnicoDre.by_uuid(dados_atribuicoes.get('tecnico')) periodo = Periodo.by_uuid(dados_atribuicoes.get('periodo')) for unidade_dict in dados_atribuicoes.get('unidades'): unidade = Unidade.by_uuid(unidade_dict['uuid']) kwargs = { "unidade__uuid": unidade_dict['uuid'], "periodo__uuid": periodo.uuid } atribuicao = Atribuicao.search(**kwargs).first() if atribuicao: atribuicao.tecnico = tecnico atribuicao.save() else: Atribuicao.objects.create(tecnico=tecnico, unidade=unidade, periodo=periodo)
def gerar_previa_demonstrativo_financeiro_async(periodo_uuid, conta_associacao_uuid, data_inicio, data_fim, usuario=""): logger.info( f'Iniciando criação da Previa de demonstrativo financeiro para a conta {conta_associacao_uuid} e período {periodo_uuid}.' ) from sme_ptrf_apps.core.services.prestacao_contas_services import ( _criar_previa_demonstrativo_financeiro, _apagar_previas_demonstrativo_financeiro) periodo = Periodo.by_uuid(periodo_uuid) periodo_previa = PeriodoPrevia(periodo.uuid, periodo.referencia, data_inicio, data_fim) conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid) acoes = conta_associacao.associacao.acoes.filter( status=AcaoAssociacao.STATUS_ATIVA) _apagar_previas_demonstrativo_financeiro(conta=conta_associacao, periodo=periodo) demonstrativo_financeiro = _criar_previa_demonstrativo_financeiro( acoes=acoes, periodo=periodo, conta=conta_associacao, usuario=usuario, ) logger.info( f'Previa de demonstrativo financeiro criado para a conta {conta_associacao} e período {periodo}.' ) logger.info( f'Previa de demonstrativo financeiro arquivo {demonstrativo_financeiro}.' )
def notificar_comentario_pc(dado): logging.info("Criando notificações.") associacao = Associacao.by_uuid(dado['associacao']) periodo = Periodo.by_uuid(dado['periodo']) comentarios = [ ComentarioAnalisePrestacao.by_uuid(uuid) for uuid in dado['comentarios'] ] tipo = Notificacao.TIPO_NOTIFICACAO_AVISO categoria = Notificacao.CATEGORIA_NOTIFICACAO_COMENTARIO_PC remetente = Notificacao.REMETENTE_NOTIFICACAO_DRE titulo = f"Comentário feito em sua prestação de contas de {periodo.referencia}." cargos = [ MembroEnum.PRESIDENTE_DIRETORIA_EXECUTIVA.name, MembroEnum.VICE_PRESIDENTE_DIRETORIA_EXECUTIVA.name ] membros = associacao.cargos.filter(cargo_associacao__in=cargos) for membro in membros: usuario = None if membro.codigo_identificacao: usuario = User.objects.filter( username=membro.codigo_identificacao).first() else: usuario = User.objects.filter(username=membro.cpf).first() if usuario: for comentario in comentarios: Notificacao.objects.create(tipo=tipo, categoria=categoria, remetente=remetente, titulo=titulo, descricao=comentario.comentario, usuario=usuario) logger.info("Notificações criadas com sucesso.")
def test_periodo_da_data_metodo_encontrando_periodo(periodo, periodo_anterior): data_consultada = periodo.data_inicio_realizacao_despesas + timedelta(days=1) periodo_da_data = Periodo.da_data(data_consultada) assert periodo_da_data == periodo
def test_periodo_da_data_metodo_periodo_aberto(periodo_fim_em_aberto): data_consultada = periodo_fim_em_aberto.data_inicio_realizacao_despesas + timedelta(days=1) periodo_da_data = Periodo.da_data(data_consultada) assert periodo_da_data == periodo_fim_em_aberto
def test_periodo_da_data_metodo_encontrando_periodo_anterior(periodo, periodo_anterior): data_consultada = periodo_anterior.data_fim_realizacao_despesas periodo_da_data = Periodo.da_data(data_consultada) assert periodo_da_data == periodo_anterior
def test_periodo_da_data_metodo_encontrando_periodo_data_inicial_limite(periodo, periodo_anterior): data_consultada = periodo.data_inicio_realizacao_despesas periodo_da_data = Periodo.da_data(data_consultada) assert periodo_da_data == periodo