Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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)
Esempio n. 4
0
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
Esempio n. 5
0
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)
Esempio n. 6
0
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
Esempio n. 7
0
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)
Esempio n. 8
0
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
Esempio n. 9
0
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