Il 0% ha trovato utile questo documento (0 voti)
9 visualizzazioni4 pagine

Aula 1

aula de conteúdo valioso

Caricato da

jjeansilva
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
9 visualizzazioni4 pagine

Aula 1

aula de conteúdo valioso

Caricato da

jjeansilva
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 4

Aula 3

Acesse diretamente pelo Notion:

https://grizzly-amaranthus-f6a.notion.site/Aula-3-f86922b024ef4456b49bddeb77fbb9cd?pvs=4

Curso completo de Python com certificado do MEC e reuniões com professores.

Conheça nosso curso completo de Python e Django que te da acesso à:

Mais de 630 aulas

Agendamento de reuniões com professores

Reconhecido pelo MEC

Análises de códigos

Eventos entre alunos

Exercícios automáticos

E muito mais

Para quem participou da PSW 11 terá um desconto especial, confira no link abaixo:

https://youtu.be/yG57JRGRXTc

Sugestão
Crie o css de investidores:

.cont-sugestao{
padding: 40px;
}

Crie uma URL para ver as empresas:

path('ver_empresa/<int:id>', views.ver_empresa, name="ver_empresa"),

Crie a view ver_empresa:

def ver_empresa(request, id):


empresa = Empresas.objects.get(id=id)
return render(request, 'ver_empresa.html', {'empresa': empresa})

Crie o HTML ver_empresa:

{% extends "base.html" %}
{% load static %}
{% block 'head' %}

<link rel="stylesheet" href="{% static 'empresarios/css/listar_empresas.css' %}">


<link rel="stylesheet" href="{% static 'empresarios/css/empresa.css' %}">
<link rel="stylesheet" href="{% static 'usuarios/css/usuarios.css' %}">

{% endblock 'head' %}

{% block 'body' %}
{% include "partials/barra_navegacao.html" %}
<br><br>
<div class="container">
<div class="row">
<div class="col-md-7">
<div class="row">
{% if messages %}
{% for message in messages %}
<section class="alert {{message.tags}}">
{{message}}

</section>
{% endfor %}
{% endif %}
<div class="col-md-3">
<img src="{{empresa.logo.url}}" class="foto-empresa" alt="">
</div>
<div class="col-md">
<h3>{{empresa.nome}}</h3>
<span class="badge bg-primary">{{empresa.area}}</span>
</div>

</div>
<br><br>
<div class="progress" wtyle="80%">
<div class="progress-bar bg-primary"
style="width: %"></div>
<div class="progress-bar bg-success"
style="width:%"></div>
</div>
<br>

<span class="badge bg-success">V</span><span>&nbsp &nbsp A empresa já atingiu 80% do percentual captado, portanto seu investimento será concretizado.</span>

<!-- <span class="badge bg-warning">x</span><span>&nbsp &nbsp Seu investimento será concretizado caso a empresa atinja pelo meno 80% do valor esperado até a data final.</span>-->

Aula 3 1
<hr>
<p>{{empresa.descricao}}</p>
<div class="col-md">
<h5>Valuation esperado</h5>
<span class="sub-fonte">Esperado: {{empresa.valuation}}</span>
<br>
<br>
<h5>Percentual</h5>
<span class="sub-fonte">Total a venda: {{empresa.percentual_equity}}%</span>
<br>
<span class="sub-fonte">Disponivel à compra: %</span>
</div>
<br>
<span class="badge bg-warning">{{empresa.publico_alvo}}</span>
<br><br>
<h4 style="color: #92D5EB">Indicadores |</h4>

<div class="row">
<div class="col-md-3" >
<div class="dark-color" style="padding: 20px; text-align: center;">
<h5>CAC</h5>
<h6>R$ 200</h6>
</div>
</div>
<div class="col-md-3" >
<div class="dark-color" style="padding: 20px; text-align: center;">
<h5>CAC</h5>
<h6>R$ 200</h6>
</div>
</div>

</div>

<hr>
<div class="row">
<h4>Faça sua proposta</h4>
<br><br>
<div class="col-md">
<form action="" method="POST"> {% csrf_token %}
<input type="number" name="valor" class="form-control" placeholder="Valor para investir">
<br>
<input type="submit" class="btn btn-indigo-normal" value="Salvar">
</div>
<div class="col-md">
<input type="number" name="percentual" class="form-control" placeholder="Percentual desejado">
</form>
</div>

</div>
</div>
<div class="col-md-5 intereses-investimentos">
<video name='demo' controls autoplay width='100%'>
<source src="{{empresa.pitch.url}}" type="video/mp4"></source>
</video>

<hr>

<div class="list_documentos">
<div class="row">
<div class="col-md-2" style="text-align: center">
<a href="#">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" style="color: white;" fill="currentColor" class="bi bi-download" viewBox="0 0 16 16">
<path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5"/>
<path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z"/>
</svg>
</a>

</div>
<div class="col-md-6"></div>
<div class="col-md-4" style="text-align: right;">

</div>
</div>
</div>

</div>
</div>
</div>
<br><br>
{% endblock 'body' %}

Melhore a exibição da área:

<span class="badge bg-primary">{{empresa.get_area_display}}</span>

Liste todo os documentos:

documentos = Documento.objects.filter(empresa=empresa)

{% for doc in documentos %}


<div class="list_documentos">
<div class="row">
<div class="col-md-2" style="text-align: center">
<a href="{{doc.arquivo.url}}">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" style="color: white;" fill="currentColor" class="bi bi-download" viewBox="0 0 16 16">
<path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5"/>
<path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708z"/>
</svg>
</a>

</div>
<div class="col-md-6">{{doc.titulo}}</div>
<div class="col-md-4" style="text-align: right;">

</div>
</div>
</div>
{% endfor %}

Proposta de investimento

Agora vamos para model para armazenar as propostas de investimentos:

class PropostaInvestimento(models.Model):
status_choices = (
('AS', 'Aguardando assinatura'),
('PE', 'Proposta enviada'),
('PA', 'Proposta aceita'),
('PR', 'Proposta recusada')
)
valor = models.DecimalField(max_digits=9, decimal_places=2)
percentual = models.FloatField()
empresa = models.ForeignKey(Empresas, on_delete=models.DO_NOTHING)
investidor = models.ForeignKey(User, on_delete=models.DO_NOTHING)
status = models.CharField(max_length=2, choices=status_choices, default='AS')
selfie = models.FileField(upload_to="selfie", null=True, blank=True)
rg = models.FileField(upload_to="rg", null=True, blank=True)

def __str__(self):
return str(self.valor)

Execute as migrações!!

Crie a URL para realizar uma proposta:

path('realizar_proposta/<int:id>', views.realizar_proposta, name="realizar_proposta"),

Na view realizar_proposta:

Aula 3 2
def realizar_proposta(request, id):
valor = request.POST.get('valor')
percentual = request.POST.get('percentual')
empresa = Empresas.objects.get(id=id)

propostas_aceitas = PropostaInvestimento.objects.filter(empresa=empresa).filter(status='PA')
total = 0

for pa in propostas_aceitas:
total = total + pa.percentual

if total + int(percentual) > empresa.percentual_equity:


messages.add_message(request, constants.WARNING, 'O percentual solicitado ultrapassa o percentual máximo.')
return redirect(f'/investidores/ver_empresa/{id}')

valuation = (100 * int(valor)) / int(percentual)

if valuation < (int(empresa.valuation) / 2):


messages.add_message(request, constants.WARNING, f'Seu valuation proposto foi R${valuation} e deve ser no mínimo R${empresa.valuation/2}')
return redirect(f'/investidores/ver_empresa/{id}')

pi = PropostaInvestimento(
valor = valor,
percentual = percentual,
empresa = empresa,
investidor = request.user,
)

pi.save()

#messages.add_message(request, constants.SUCCESS, f'Proposta enviada com sucesso')


return redirect(f'/investidores/assinar_contrato/{pi.id}')

Em ver empresa redirecione o form para a view criada:

<form action="{% url 'realizar_proposta' empresa.id %}" method="POST"> {% csrf_token %}

Assinar contrato
Crie a URL de assinar contrato:

path('assinar_contrato/<int:id>', views.assinar_contrato, name="assinar_contrato")

Crie a view para assinar o contrato:

def assinar_contrato(request, id):


pi = PropostaInvestimento.objects.get(id=id)
if pi.status != "AS":
raise Http404()

if request.method == "GET":
return render(request, 'assinar_contrato.html', {'id': id})
elif request.method == "POST":
selfie = request.FILES.get('selfie')
rg = request.FILES.get('rg')
print(request.FILES)

pi.selfie = selfie
pi.rg = rg
pi.status = 'PE'
pi.save()

messages.add_message(request, constants.SUCCESS, f'Contrato assinado com sucesso, sua proposta foi enviada a empresa.')
return redirect(f'/investidores/ver_empresa/{pi.empresa.id}')

Crie o HTML de assinar contrato:

{% extends "base.html" %}
{% load static %}
{% block 'head' %}

<link rel="stylesheet" href="{% static 'empresarios/css/listar_empresas.css' %}">


<link rel="stylesheet" href="{% static 'empresarios/css/empresa.css' %}">
<link rel="stylesheet" href="{% static 'usuarios/css/usuarios.css' %}">

{% endblock 'head' %}

{% block 'body' %}
{% include "partials/barra_navegacao.html" %}
<br><br>
<div class="container">
<div class="row">
<div class="col-md-7">
<div class="row">
{% if messages %}
{% for message in messages %}
<section class="alert {{message.tags}}">
{{message}}

</section>
{% endfor %}
{% endif %}
<div class="col-md-3">
<img src="{% static 'geral/img/foto_perfil.webp' %}" class="foto-empresa" alt="">
</div>
<div class="col-md">
<h3>Assinar contrato</h3>
</div>

</div>
</div>
<div style="margin-top: 40px; padding: 20px" class="contrato dark-color">
<h3>Contrato de investimento</h3>
<p>Ao assinar esse contrato você concorda com todas as cláusulas abaixo</p>

<ol>
<li>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy</li>
<li>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy</li>
<li>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy</li>
</ol>

</div>
<form action="{% url 'assinar_contrato' id %}" enctype='multipart/form-data' method="POST" style="margin-top: 20px;"> {% csrf_token %}
<input type="file" name="selfie" class="form-control" style="width: 40%">
<br>
<input type="file" name="rg" class="form-control" style="width: 40%">
<br>
<input type="submit" class="btn btn-indigo-normal" value="Assinar contrato">
</form>
</div>
<br><br>
{% endblock 'body' %}

Ver empresa (empresário)


Na view empresa de empresários adicione:

proposta_investimentos = PropostaInvestimento.objects.filter(empresa=empresa)
proposta_investimentos_enviada = proposta_investimentos.filter(status='PE')
return render(request, 'empresa.html', {'empresa': empresa, 'documentos': documentos, 'proposta_investimentos_enviada': proposta_investimentos_enviada})

Liste as propostas de investimentos:

{% for pi in proposta_investimentos_enviada %}
<div class="bg-color-dark card-investimento">
<div class="row">

Aula 3 3
<div class="col-md">
<img src="{% static 'geral/img/foto_perfil.webp' %}" class="foto-perfil" alt="">
</div>
<div class="col-md-5" style="text-align: left">
<span class="sub-fonte">{{pi.investidor}}</span>
<br>
<span class="sub-fonte2">R$ {{pi.valor}}</span>
<br>
<span class="sub-fonte2">{{pi.percentual}}%

</span>
</div>
<div class="col-md">
<a href="#" class="btn btn-indigo-normal">Aceitar</a>
<br>
<a href="#" style="margin-top: 5px;" class="btn btn-danger">Negar</a>
</div>
</div>
</div>
<br>
{% endfor %}

Crie o valuation da proposta de investimento:

def valuation(self):
return (100*float(self.valor)) / float(self.percentual)

Exiba o ícone de acordo com a proposta:

{% if pi.valuation >= empresa.valuation %}


<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-caret-up-fill" style="color: #00ff00;" viewBox="0 0 16 16">
<path d="m7.247 4.86-4.796 5.481c-.566.647-.106 1.659.753 1.659h9.592a1 1 0 0 0 .753-1.659l-4.796-5.48a1 1 0 0 0-1.506 0z"/>
</svg>
{% else %}
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" style="color: #ff0000;" class="bi bi-caret-down-fill" viewBox="0 0 16 16">
<path d="M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z"/>
</svg>
{% endif %}

Crie uma URL para aceitar ou recusar a proposta:

path('gerenciar_proposta/<int:id>', views.gerenciar_proposta, name="gerenciar_proposta")

Crie a view para gerenciar proposta?

def gerenciar_proposta(request, id):


acao = request.GET.get('acao')
pi = PropostaInvestimento.objects.get(id=id)

if acao == 'aceitar':
messages.add_message(request, constants.SUCCESS, 'Proposta aceita')
pi.status = 'PA'
elif acao == 'recusar':
messages.add_message(request, constants.SUCCESS, 'Proposta recusada')
pi.status = 'PR'

pi.save()
return redirect(f'/empresarios/empresa/{pi.empresa.id}')

Nos botões aceitar e negar redirecione para gerenciar proposta:

<a href="{% url 'gerenciar_proposta' pi.id %}?acao=aceitar" class="btn btn-indigo-normal">Aceitar</a>


<br>
<a href="{% url 'gerenciar_proposta' pi.id %}?acao=recusar" style="margin-top: 5px;" class="btn btn-danger">Negar</a>

Calcule o percentual vendido da empresa:

percentual_vendido = 0
for pi in proposta_investimentos:
if pi.status == 'PA':
percentual_vendido = percentual_vendido + pi.percentual

Calcule o total em reais que já foi captado:

total_captado = sum(proposta_investimentos.filter(status='PA').values_list('valor', flat=True))

E calcule o valuation atual

valuation_atual = (100 * float(total_captado)) / float(percentual_vendido) if percentual_vendido != 0 else 0

Ver empresa (investidor)


Calcule o percentual vendido da empresa:

percentual_vendido = 0
for pi in proposta_investimentos:
percentual_vendido = percentual_vendido + pi.percentual

Calcule se o percentual vendido é superior a 80%:

limiar = (80 * empresa.percentual_equity) / 100


concretizado = False
if percentual_vendido >= limiar:
concretizado = True

Por fim, calcule o percentual disponível:

percentual_disponivel = empresa.percentual_equity - percentual_vendido

Aula 3 4

Potrebbero piacerti anche