Aula 1
Aula 1
https://grizzly-amaranthus-f6a.notion.site/Aula-3-f86922b024ef4456b49bddeb77fbb9cd?pvs=4
Análises de códigos
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;
}
{% extends "base.html" %}
{% load static %}
{% block 'head' %}
{% 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>    A empresa já atingiu 80% do percentual captado, portanto seu investimento será concretizado.</span>
<!-- <span class="badge bg-warning">x</span><span>    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' %}
documentos = Documento.objects.filter(empresa=empresa)
</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
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!!
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
pi = PropostaInvestimento(
valor = valor,
percentual = percentual,
empresa = empresa,
investidor = request.user,
)
pi.save()
Assinar contrato
Crie a URL de assinar contrato:
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}')
{% extends "base.html" %}
{% load static %}
{% block 'head' %}
{% 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' %}
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})
{% 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 %}
def valuation(self):
return (100*float(self.valor)) / float(self.percentual)
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}')
percentual_vendido = 0
for pi in proposta_investimentos:
if pi.status == 'PA':
percentual_vendido = percentual_vendido + pi.percentual
percentual_vendido = 0
for pi in proposta_investimentos:
percentual_vendido = percentual_vendido + pi.percentual
Aula 3 4