def finaliza_notificacao_vaga(db: Session, pessoa_projeto: PessoaProjeto): vaga = pessoa_projeto if (vaga.situacao != "FINALIZADO"): raise HTTPException( status.HTTP_404_NOT_FOUND, detail="Vaga não finalizada", ) notificacao = [] link = createPDF(db, vaga) colab = get_pessoa(db, vaga.pessoa_id) proj = get_projeto(db, vaga.projeto_id) idealizador = get_pessoa(db, proj.pessoa_id) # notificacao idealizador db_notificacao = models.Notificacao( remetente_id=colab.id, destinatario_id=idealizador.id, projeto_id=vaga.projeto_id, pessoa_projeto_id=vaga.id, situacao=link, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) # notificacao colab db_notificacao = models.Notificacao( remetente_id=idealizador.id, destinatario_id=colab.id, projeto_id=vaga.projeto_id, pessoa_projeto_id=vaga.id, situacao=link, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) return notificacao
def notificacao_pendente_idealizador(db: Session): ''' Cria notificacoes periodicamente para PessoaProjetos com situacao PENDENTE_IDEALIZADOR Entrada: Saída: lista de Esquemas das notificacoes criadas Exceções: Item Necessário Faltante ''' pessoa_projetos = db.query(models.PessoaProjeto)\ .filter(models.PessoaProjeto.situacao == "PENDENTE_IDEALIZADOR")\ .all() # garante que somente uma notificacao será enviada para cada projeto projetos = [] notificacao = [] for pessoa_projeto in pessoa_projetos: if pessoa_projeto.projeto_id in projetos: continue projeto_id = pessoa_projeto.projeto_id projeto = get_projeto(db, projeto_id) projetos.append(pessoa_projeto.projeto_id) situacao = "Existem pessoas a serem avaliadas para o projeto <strong>"\ + projeto.nome + "</strong>. Dê uma olhada!" if existe_notificacao(db, situacao, projeto.pessoa_id): continue try: db_notificacao = models.Notificacao( remetente_id=projeto.pessoa_id, destinatario_id=projeto.pessoa_id, projeto_id=projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, foto=projeto.foto_capa, lido=False, link='/projeto/{}/vagas/{}'.format(projeto_id, pessoa_projeto.id)) except: raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Item necessário faltante") db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) return notificacao
def notificacao_aceito_recusado(db: Session, colaborador_id: int, pessoa_projeto: PessoaProjeto): ''' Cria uma notificacao baseada na situação de PessoaProjeto Entrada: ID do remetente, esquema de PessoaProjeto Saída: Esquema da notificacao criada Exceções: PessoaProjeto não recusado/aceito Item Necessário faltante ''' if pessoa_projeto.situacao != "RECUSADO" and pessoa_projeto.situacao != "ACEITO": raise HTTPException( status.HTTP_404_NOT_FOUND, detail="PessoaProjeto não recusado/aceito", ) projeto_id = pessoa_projeto.projeto_id projeto = get_projeto(db, projeto_id) colaborador = get_pessoa_by_id(db, colaborador_id) if pessoa_projeto.situacao == "RECUSADO": situacao = "<strong>" + colaborador.nome + \ "</strong> recusou seu convite para o projeto <strong>" + \ projeto.nome + "</strong>. Realize uma nova busca." elif pessoa_projeto.situacao == "ACEITO": situacao = "<strong>" + colaborador.nome + \ "</strong> aceitou seu convite para o projeto <strong>" + \ projeto.nome + "</strong>. Finalize o acordo e preencha essa vaga!" if existe_notificacao(db, situacao, projeto.pessoa_id): return try: db_notificacao = models.Notificacao( remetente_id=colaborador_id, destinatario_id=projeto.pessoa_id, projeto_id=projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, foto=colaborador.foto_perfil, lido=False, link='/projeto/{}/vagas/{}'.format(projeto_id, pessoa_projeto.id)) except: raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Item necessário faltante") db.add(db_notificacao) db.commit() db.refresh(db_notificacao) return db_notificacao
def notificacao_seguindo(db: Session, seguido: int, seguidor: int): seguidor = get_pessoa_by_id(db, seguidor) db_notificacao = models.Notificacao( remetente_id=seguidor.id, destinatario_id=seguido, situacao="<strong>" + seguidor.nome + "</strong> está te seguindo.", foto=seguidor.foto_perfil, lido=False, link='/perfil/{}'.format(seguidor.usuario)) db.add(db_notificacao) db.commit() db.refresh(db_notificacao)
def notificacao_pendente_colaborador(db: Session, idealizador_id: int, pessoa_projeto: PessoaProjeto): ''' Cria uma notificacao baseada na situacao PENDENTE_COLABORADOR da PessoaProjeto Entrada: Esquema de PessoaProjeto, ID do idealizador Saída: Esquemas da notificaca criada Exceções: PessoaProjeto não pendente_colaborador Item Necessário faltante ''' if (pessoa_projeto.situacao != "PENDENTE_COLABORADOR"): raise HTTPException( status.HTTP_404_NOT_FOUND, detail="PessoaProjeto não pendente_colaborador", ) projeto_id = pessoa_projeto.projeto_id projeto = get_projeto(db, projeto_id) idealizador = get_pessoa_by_id(db, idealizador_id) situacao = "<strong>" + idealizador.nome + "</strong> te convidou para o projeto <strong>" + \ projeto.nome + "</strong>. Confira!", if existe_notificacao(db, situacao, pessoa_projeto.pessoa_id): return try: db_notificacao = models.Notificacao( remetente_id=idealizador_id, destinatario_id=pessoa_projeto.pessoa_id, projeto_id=projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, foto=projeto.foto_capa, lido=False, link='/projeto/{}/vagas/{}'.format(projeto_id, pessoa_projeto.id)) except: raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Item necessário faltante") db.add(db_notificacao) db.commit() db.refresh(db_notificacao) return db_notificacao
def create_notificacao_vaga(db: Session, remetente_id: int, pessoa_projeto: PessoaProjeto): hoje = datetime.today() projeto_id = pessoa_projeto.projeto_id projeto = get_projeto(db, projeto_id) pessoa = get_pessoa(db, remetente_id) if pessoa_projeto.situacao == "PENDENTE_IDEALIZADOR": situacao = "Finalize o cadastro do projeto " + \ projeto.nome + " e encontre o time ideal" destinatario_id = remetente_id elif pessoa_projeto.situacao == "RECUSADO": situacao = pessoa.nome + " recusou seu convite para o projeto " + \ projeto.nome + ". Realize uma nova busca" destinatario_id = projeto.pessoa_id elif pessoa_projeto.situacao == "ACEITO": situacao = pessoa.nome + " aceitou seu convite para o projeto " + \ projeto.nome + ". Finalize o acordo e preencha essa vaga!" destinatario_id = projeto.pessoa_id elif pessoa_projeto.situacao == "PENDENTE_COLABORADOR": if (hoje.day == pessoa_projeto.data_atualizacao.day): situacao = pessoa.nome + " te fez um convite para o projeto " + \ projeto.nome + ". Confira!" destinatario_id = pessoa_projeto.pessoa_id db_notificacao = models.Notificacao( remetente_id=remetente_id, destinatario_id=destinatario_id, projeto_id=projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) return db_notificacao
def notificacao_favorito(db: Session, remetente_id: int, projeto_id: int): projeto = get_projeto(db, projeto_id) remetente = get_pessoa_by_id(db, remetente_id) db_notificacao = models.Notificacao( remetente_id=remetente_id, destinatario_id=projeto.pessoa_id, projeto_id=projeto.id, pessoa_projeto_id=None, situacao="<strong>" + remetente.nome + "</strong> favoritou o projeto <strong>" + projeto.nome + "</strong>!", foto=projeto.foto_capa, lido=False, link='/projeto/{}'.format(projeto_id)) if existe_notificacao(db, db_notificacao.situacao, db_notificacao.destinatario_id): return db.add(db_notificacao) db.commit() db.refresh(db_notificacao)
def notificacao_checagem_projeto(db: Session): projetos = db.query(models.Projeto)\ .filter(models.Projeto.areas == None, models.Projeto.habilidades == None)\ .join(models.Habilidades, models.Projeto.habilidades, full=True, isouter=True)\ .join(models.Area, models.Projeto.areas, full=True, isouter=True)\ .all() notificacao = [] # projetos a serem ignorados na verificação das vagas projetos_ignorados = [] for projeto in projetos: projetos_ignorados.append(projeto.id) db_notificacao = models.Notificacao( remetente_id=projeto.pessoa_id, destinatario_id=projeto.pessoa_id, projeto_id=projeto.id, pessoa_projeto_id=None, situacao="Finalize o cadastro do projeto <strong>" + projeto.nome + "</strong> e encontre o time ideal!", foto=projeto.foto_capa, lido=False, link='/projeto/{}'.format(projeto.id)) if not existe_notificacao(db, db_notificacao.situacao, db_notificacao.destinatario_id): db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) vagas = db.query(models.PessoaProjeto)\ .filter(models.PessoaProjeto.areas == None, models.PessoaProjeto.habilidades == None)\ .filter(models.PessoaProjeto.projeto_id.notin_(projetos_ignorados))\ .join(models.Habilidades, models.PessoaProjeto.habilidades, full=True, isouter=True)\ .join(models.Area, models.PessoaProjeto.areas, full=True, isouter=True)\ .all() for vaga in vagas: if vaga.projeto_id in projetos_ignorados: break projetos_ignorados.append(vaga.projeto_id) projeto = get_projeto(db, vaga.projeto_id) db_notificacao = models.Notificacao( remetente_id=projeto.pessoa_id, destinatario_id=projeto.pessoa_id, projeto_id=projeto.id, pessoa_projeto_id=None, situacao="Finalize o cadastro das vagas do projeto <strong>" + projeto.nome + "</strong> e encontre o time ideal!", foto=projeto.foto_capa, lido=False, link='/projeto/{}'.format(projeto.id)) if not existe_notificacao(db, db_notificacao.situacao, db_notificacao.destinatario_id): db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) return notificacao
def notificacao_checagem(db: Session): ''' Cria notificacoes periodicamente para PessoaProjetos com situacao PENDENTE_COLABORADOR Entrada: Saída: lista de Esquemas das notificacoes criadas Exceções: ''' hoje = datetime.today() pessoa_projetos = db.query(models.PessoaProjeto)\ .filter(models.PessoaProjeto.situacao == "PENDENTE_COLABORADOR")\ .all() listaRetirados = [] for pessoa_projeto in pessoa_projetos: projeto = get_projeto(db, pessoa_projeto.projeto_id) att_str = datetime.strftime(pessoa_projeto.data_atualizacao, "%Y-%m-%d") att = datetime.strptime(att_str, "%Y-%m-%d") diff = hoje - att if (diff.days < 6): remetente = get_pessoa_by_id(db, projeto.pessoa_id) situacao = "<strong>Se liga:</strong> você tem " + str(6-diff.days) + " dias para responder ao convite de <strong>" + \ remetente.nome + "</strong> para o projeto <strong>" + projeto.nome + "</strong>.", destinatario_id = pessoa_projeto.pessoa_id if not existe_notificacao(db, situacao, destinatario_id): db_notificacao = models.Notificacao( remetente_id=remetente.id, destinatario_id=destinatario_id, projeto_id=pessoa_projeto.projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, foto=projeto.foto_capa, lido=False, link='/projeto/{}/vagas/{}'.format(projeto.id, pessoa_projeto.id)) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) elif (diff.days >= 6): remetente = get_pessoa_by_id(db, pessoa_projeto.pessoa_id) situacao = "O prazo de resposta de <strong>" + \ remetente.nome + "</strong> para o projeto " + projeto.nome + \ " expirou! Realize uma nova busca e complete seu time!" destinatario_id = projeto.pessoa_id if not existe_notificacao(db, situacao, destinatario_id): listaRetirados.append(pessoa_projeto.id) db_notificacao = models.Notificacao( remetente_id=remetente.id, destinatario_id=destinatario_id, projeto_id=pessoa_projeto.projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, foto=projeto.foto_capa, lido=False, link='/projeto/{}/vagas/{}'.format(projeto.id, pessoa_projeto.id)) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) return listaRetirados
def notificacao_finalizado(db: Session, pessoa_projeto: PessoaProjeto): ''' Cria uma notificacao baseada na situacao FINALIZADO da PessoaProjeto Entrada: Esquema de PessoaProjeto Saída: Dois Esquemas das notificacoes criadas Exceções: PessoaProjeto não finalizada ''' if (pessoa_projeto.situacao != "FINALIZADO"): raise HTTPException( status.HTTP_404_NOT_FOUND, detail="PessoaProjeto não finalizada", ) colaborador = get_pessoa_by_id(db, pessoa_projeto.pessoa_id) projeto = get_projeto(db, pessoa_projeto.projeto_id) idealizador = get_pessoa_by_id(db, projeto.pessoa_id) situacao = "Seu acordo com <strong>" + colaborador.nome + "</strong> para participação no projeto <strong>" + \ projeto.nome + "</strong> foi finalizado! Clique aqui para baixar seu documento.", if existe_notificacao(db, situacao, idealizador.id): return anexo = createPDFacordo(db, pessoa_projeto) # notificacao idealizador db_notificacao = models.Notificacao(remetente_id=colaborador.id, destinatario_id=idealizador.id, projeto_id=pessoa_projeto.projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao=situacao, foto=projeto.foto_capa, anexo=anexo, lido=False, link='/projeto/{}/vagas/{}'.format( pessoa_projeto.projeto_id, pessoa_projeto.id)) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) # notificacao colab db_notificacao = models.Notificacao( remetente_id=idealizador.id, destinatario_id=colaborador.id, projeto_id=pessoa_projeto.projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao="Seu acordo com <strong>" + idealizador.nome + "</strong> para participação no projeto <strong>" + projeto.nome + "</strong> foi finalizado! Clique aqui para baixar seu documento.", foto=projeto.foto_capa, anexo=anexo, lido=False, link='/projeto/{}/vagas/{}'.format(projeto.id, pessoa_projeto.id)) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) delete_pessoas_ignoradas_by_vaga(db, pessoa_projeto.id)
def notificacao_finalizado(db: Session, pessoa_projeto: PessoaProjeto): ''' Cria uma notificacao baseada na situacao FINALIZADO da PessoaProjeto Entrada: Esquema de PessoaProjeto Saída: Dois Esquemas das notificacoes criadas Exceções: PessoaProjeto não finalizada ''' if (pessoa_projeto.situacao != "FINALIZADO"): raise HTTPException( status.HTTP_404_NOT_FOUND, detail="PessoaProjeto não finalizada", ) notificacao = [] anexo = createPDF(db, pessoa_projeto) colaborador = get_pessoa_by_id(db, pessoa_projeto.pessoa_id) projeto = get_projeto(db, pessoa_projeto.projeto_id) idealizador = get_pessoa_by_id(db, projeto.pessoa_id) # notificacao idealizador db_notificacao = models.Notificacao( remetente_id=colaborador.id, destinatario_id=idealizador.id, projeto_id=pessoa_projeto.projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao= "<strong>Seu acordo foi finalizado!</strong> Clique aqui e veja seu PDF top!", foto=projeto.foto_capa, anexo=anexo, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) # notificacao colab db_notificacao = models.Notificacao( remetente_id=idealizador.id, destinatario_id=colaborador.id, projeto_id=pessoa_projeto.projeto_id, pessoa_projeto_id=pessoa_projeto.id, situacao= "<strong>Seu acordo foi finalizado!</strong> aqui e veja seu PDF top!", foto=projeto.foto_capa, anexo=anexo, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) delete_pessoas_ignoradas_by_vaga(db, pessoa_projeto.id) return notificacao
def check_notificacao_vaga(db: Session): hoje = datetime.today() vagas = db.query(models.PessoaProjeto)\ .filter(models.PessoaProjeto.situacao == "PENDENTE_COLABORADOR")\ .all() notificacao = [] for vaga in vagas: projeto = get_projeto(db, vaga.projeto_id) att_str = datetime.strftime(vaga.data_atualizacao, "%Y-%m-%d") att = datetime.strptime(att_str, "%Y-%m-%d") diff = hoje - att if (diff.days < 6): remetente = get_pessoa(db, projeto.pessoa_id) situacao = "Você tem " + str(6-diff.days) + " dias para responder ao convite de " + \ remetente.nome + " para o projeto " + projeto.nome, destinatario_id = vaga.pessoa_id filtro = db.query(models.Notificacao)\ .filter(models.Notificacao.destinatario_id == destinatario_id)\ .filter(models.Notificacao.situacao == situacao)\ .first() if not filtro: db_notificacao = models.Notificacao( remetente_id=remetente.id, destinatario_id=destinatario_id, projeto_id=vaga.projeto_id, pessoa_projeto_id=vaga.id, situacao=situacao, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) elif (diff.days == 6): remetente = get_pessoa(db, vaga.pessoa_id) situacao = "O prazo de resposta de " + \ remetente.nome + " expirou! Faça uma nova busca." destinatario_id = projeto.pessoa_id filtro = db.query(models.Notificacao)\ .filter(models.Notificacao.destinatario_id == destinatario_id)\ .filter(models.Notificacao.situacao == situacao)\ .first() if not filtro: db_notificacao = models.Notificacao( remetente_id=remetente.id, destinatario_id=destinatario_id, projeto_id=vaga.projeto_id, pessoa_projeto_id=vaga.id, situacao=situacao, lido=False, ) db.add(db_notificacao) db.commit() db.refresh(db_notificacao) notificacao.append(db_notificacao) return notificacao