Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 3
Vamos começar a aula 3 criando a tabela de cupons de desconto
class CupomDesconto(models.Model):
codigo = models.CharField(max_length=8, unique=True)
desconto = models.FloatField()
usos = models.IntegerField(default=0)
ativo = models.BooleanField(default=True)
def __str__(self):
return self.codigo
@admin.register(CupomDesconto)
class CupomDescontoAdmin(admin.ModelAdmin):
list_display = ('codigo', 'desconto', 'ativo')
readonly_fields=('usos',)
Feito isso, quando o usuário clicar em finalizar compra em carrinho.html vamos redirecionar ele:
urlpatterns = [
path("finalizar_pedido/", views.finalizar_pedido, name='finalizar_pedido'),
path("validaCupom/", views.validaCupom, name='validaCupom'),
Aula 3 1
'categorias': categorias,
'total': total,
'erro': erro})
else:
if len(request.session['carrinho']) > 0:
x = request.POST
total = sum([float(i['preco']) for i in request.session['carrinho']])
cupom = CupomDesconto.objects.filter(codigo=x['cupom'])
cupom_salvar = None
if len(cupom) > 0 and cupom[0].ativo:
total = total - ((total*cupom[0].desconto)/100)
cupom[0].usos += 1
cupom[0].save()
cupom_salvar = cupom[0]
carrinho = request.session.get('carrinho')
listaCarrinho = []
for i in carrinho:
listaCarrinho.append({
'produto': Produto.objects.filter(id = i['id_produto'])[0],
'observacoes': i['observacoes'],
'preco': i['preco'],
'adicionais': i['adicionais'],
'quantidade': i['quantidade'],
})
ItemPedido.objects.bulk_create(
ItemPedido(
pedido = pedido,
produto = v['produto'],
quantidade = v['quantidade'],
preco = v['preco'],
adicionais = str(v['adicionais'])
) for v in listaCarrinho
request.session['carrinho'].clear()
request.session.save()
return render(request, 'pedido_realizado.html')
else:
return redirect('/pedidos/finalizar_pedido?erro=1')
{% extends 'base.html'%}
{% block 'head' %}
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
<script>$(document).ready(function() {
function limpa_formulário_cep() {
// Limpa valores do formulário de cep.
$("#rua").val("");
Aula 3 2
$("#bairro").val("");
}
if (!("erro" in dados)) {
//Atualiza os campos com os valores da consulta.
$("#rua").val(dados.logradouro);
$("#bairro").val(dados.bairro);
} //end if.
else {
//CEP pesquisado não foi encontrado.
limpa_formulário_cep();
alert("CEP não encontrado.");
}
});
} //end if.
else {
//cep é inválido.
limpa_formulário_cep();
alert("Formato de CEP inválido.");
}
} //end if.
else {
//cep sem valor, limpa formulário.
limpa_formulário_cep();
}
});
});
</script>
{%endblock%}
{%block 'conteudo'%}
<div class="container">
<br>
<h1 class="rosa">Ao clicar em "Efetuar pedido" será confirmado sua compra</h1>
<hr>
{%if erro == '1'%}
<div class="alert alert-danger" role="alert">
Escolha ao menos um produto antes de efetuar a compra!
</div>
{%endif%}
<div class="row">
Aula 3 3
<div class="col-sm fundo">
<br>
<h3 class="rosa">Nome*:</h3>
<input type="text" required="required" class="form-control" placeholder="Nome" name="nome">
<br>
<h3 class="rosa">Cep:</h3>
<input type="text" class="form-control" id="cep" placeholder="CEP" name="cep">
<br>
<h3 class="rosa">Cidade*:</h3>
<select class="form-control">
<option selected>Santa rita do passa quatro</option>
</select>
<br>
<h3 class="rosa">Rua*:</h3>
<input type="text" required="required" class="form-control" placeholder="Rua" id="rua" name="rua">
<br>
<h3 class="rosa">Número*:</h3>
<input type="text" required="required" class="form-control" placeholder="Número" name="numero">
<br>
<h3 class="rosa">Bairro*:</h3>
<input type="text" required="required" class="form-control" placeholder="Bairro" id="bairro" name="bairro">
<br>
<h3 class="rosa">Ponto de referência:</h3>
<input type="text" class="form-control" placeholder="Ponto de referência" name="pt_referencia">
<br>
<h3 class="rosa">Telefone*:</h3>
<input type="text" required="required" class="form-control" placeholder="Telefone" name="telefone">
<br>
</div>
</div>
<div class="row">
<div class="col-sm fundo">
</div>
</div>
<hr>
<br>
<div class="row">
<div class="col-sm fundo">
<h1 id="total">Total: R${{total}}0</h1>
</div>
</div>
<br>
<br>
<div id="pagamento">
Aula 3 4
<h3 class="rosa">Meio de pagamento*:</h3>
<select name="meio_pagamento" class="form-control" onchange="javascript:dinheiro(this);">
<option value="1">Dinheiro</option>
<option value="2">Cartão</option>
</select>
<div id="troco">
<h3 class="rosa">troco para*:</h3>
<input type="text" class="form-control" placeholder="Número" name="troco_para">
</div>
<br>
<button onclick="envia()" class="btn btn-success btn-lg">Efetuar pedido!</button>
</div>
</div>
</form>
</div>
<script>
function validaCupom(){
cupom = document.getElementById('inputCupom').value
$.ajax({
url: "{% url 'validaCupom'%}",
method: 'post',
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'cupom': cupom
},
success: function(resposta){
resposta = JSON.parse(resposta)
div_total = document.getElementById('total')
msg = document.getElementById('msg')
if(resposta['status'] == 1){
div_total.innerHTML = 'Total: R${{total}}0'
msg.innerHTML = "Cupom inválido"
msg.style.color = 'red'
}else{
div_total.innerHTML = 'De: <s>R${{total}}0</s> Por R$' + resposta['total_com_desconto'] + '0'
msg.innerHTML = resposta['desconto'] + "% aplicado com sucesso"
msg.style.color = 'green'
}
})
}
</script>
{%endblock%}
def validaCupom(request):
cupom = request.POST.get('cupom')
cupom = CupomDesconto.objects.filter(codigo = cupom)
if len(cupom) > 0 and cupom[0].ativo:
desconto = cupom[0].desconto
total = sum([float(i['preco']) for i in request.session['carrinho']])
total_com_desconto = total - ((total*desconto)/100)
data_json = json.dumps({'status': 0,
'desconto': desconto,
'total_com_desconto': str(total_com_desconto).replace('.', ',')
})
Aula 3 5
return HttpResponse(data_json)
else:
return HttpResponse(json.dumps({'status': 1}))
{% extends 'base.html'%}
{% block 'conteudo' %}
<div class="alert alert-success" role="alert">
Seu pedido foi realizado com sucesso
</div>
{%endblock%}
Aula 3 6