def createPDF(db: Session, vaga: PessoaProjeto): colab = get_pessoa_by_id(db, vaga.pessoa_id) projeto = get_projeto(db, vaga.projeto_id) idealizador = get_pessoa_by_id(db, projeto.pessoa_id) acordo = get_tipo_acordo_by_id(db, vaga.tipo_acordo_id) pdf = PDF() pdf.add_page() # Espaço de formatação pdf.cell(20, 20, txt='', ln=1) pdf.cell(175, 10, txt=projeto.nome, ln=1, align="C") pdf.set_font("Arial", size=16) pdf.cell(175, 10, txt=idealizador.nome, ln=1, align="C") # Corpo pdf.set_font("Arial", size=14) pdf.cell(200, 10, txt=colab.nome, ln=1, align="L") # Observar após refatoração if(vaga.papel_id == 1): pdf.cell(200, 10, txt="Aliado", ln=1, align="L") elif(vaga.papel_id == 2): pdf.cell(200, 10, txt="Colaborador", ln=1, align="L") pdf.cell(200, 10, txt=vaga.titulo, ln=1, align="L") pdf.cell(200, 10, txt=acordo.descricao, ln=1, align="L") saida = "PDF/acordo" + str(vaga.id) + str(colab.id) + str(idealizador.id) + ".pdf" pdf.output(saida) return saida
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 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(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 createPDFacordo(db: Session, vaga: PessoaProjeto): contratado = get_pessoa_by_id(db, vaga.pessoa_id) projeto = get_projeto(db, vaga.projeto_id) contratante = get_pessoa_by_id(db, projeto.pessoa_id) acordo = get_tipo_acordo_by_id(db, vaga.tipo_acordo_id) # Observar após refatoração if (vaga.papel_id == 1): papel = "aliado" elif (vaga.papel_id == 2): papel = "colaborador" elif (vaga.papel_id == 3): papel = "idealizador" pdf = FPDF() pdf.add_page(orientation='P') espacamento = 8 pdf.set_margins(20, 20, 20) pdf.set_font("Arial", 'B', size=16) # Espaço de formatação pdf.cell(20, 20, txt='', ln=1) pdf.cell(175, 12, txt='ACORDO DE PRESTAÇÃO DE SERVIÇOS', ln=1, align="C") pdf.set_font("Arial", 'B', size=14) pdf.cell(175, 12, txt='IDENTIFICAÇÃO DAS PARTES CONTRATANTES', ln=1, align="L") # Corpo pdf.set_font("Arial", 'B', size=12) pdf.cell(pdf.get_string_width('CONTRATANTE: '), espacamento, txt='CONTRATANTE: ', align="L") pdf.set_font("Arial", size=12) w = pdf.get_x() pdf.cell(w, espacamento, txt=contratante.nome, ln=1, align="L") pdf.set_font("Arial", 'B', size=12) pdf.cell(pdf.get_string_width('CONTRATADO: '), espacamento, txt='CONTRATADO: ', align="L") pdf.set_font("Arial", size=12) w = pdf.get_x() pdf.cell(w, espacamento, txt=contratado.nome, ln=1, align="L") pdf.cell(20, 5, txt='', ln=1) pdf.multi_cell( 0, espacamento, txt= 'As partes acima identificadas têm, entre si, justo e acertado o presente Acordo de Prestação de Serviços, que se regerá pelo objeto do acordo pelas condições de remuneração, forma e termo de pagamento descritas no presente.', align="J") pdf.set_font("Arial", 'B', size=14) pdf.cell(175, 15, txt='DO OBJETO DE ACORDO', ln=1, align="L") pdf.set_font("Arial", size=12) pdf.multi_cell( 0, espacamento, txt='É objeto do presente acordo a prestação do serviço no projeto ' + projeto.nome + ' como ' + papel + ' na vaga de ' + vaga.titulo + ' por meio de um contrato como ' + acordo.descricao + '.', align="J") if (vaga.remunerado): pdf.multi_cell( 0, espacamento, txt= 'Esta prestação de serviços será remunerada com valores e pagamentos a serem negociados entre ambas as partes.', align="J") else: pdf.multi_cell( 0, espacamento, txt= 'Esta prestação de serviços não será remunerada conforme anunciado na plataforma Conectar.', align="J") pdf.cell(20, 10, txt='', ln=1) pdf.multi_cell( 0, espacamento, txt= 'A execução da prestação de serviço aqui acordada será de responsabilidade das partes envolvidas, eximindo da plataforma Conectar de qualquer obrigação com o contratante ou contratado.', align="J") hoje = datetime.now() data_str = 'Dois Vizinhos, ' + \ str(hoje.day) + " de " + MESES[hoje.month] + " de " + str(hoje.year) pdf.cell(20, 7, txt='', ln=1) pdf.cell(200, espacamento, txt=data_str, ln=1, align="L") pdf.cell(20, 20, txt='', ln=1) pdf.cell(175, espacamento, txt='___________________ ___________________', ln=1, align="C") pdf.cell(175, espacamento, txt='Contratante Contratado', ln=1, align="C") saida = str(uuid.uuid4().hex) + ".pdf" pdf.output(PDF_PATH + saida) if not os.getenv("DEV_ENV"): upload_object(PDF_PATH + saida, 'conectar') os.remove(PDF_PATH + saida) return saida