Skip to content

Commit

Permalink
Adicionando ao carrinho preco de acordo com o tamanho do produto
Browse files Browse the repository at this point in the history
  • Loading branch information
dudaa28 committed Sep 10, 2024
1 parent 7be9db7 commit d42d335
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 21 deletions.
7 changes: 5 additions & 2 deletions app/loja/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@
# Registrar o modelo Bolo no admin
@admin.register(Bolo)
class BoloAdmin(admin.ModelAdmin):
list_display = ('sabor', 'descricao', 'imagem_url') # Exibe essas colunas na lista de bolos
search_fields = ('sabor',) # Permite pesquisar por sabor
# Exibe colunas adicionais, incluindo os preços para cada tamanho
list_display = ('sabor', 'descricao', 'imagem_url', 'preco_pequeno', 'preco_medio', 'preco_grande')

# Permite pesquisar pelo sabor
search_fields = ('sabor',)
66 changes: 47 additions & 19 deletions app/loja/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from decimal import Decimal


class Bolo(models.Model):
TAMANHOS = [
Expand All @@ -10,50 +12,76 @@ class Bolo(models.Model):
('G', 'Grande'),
]

PRECO_POR_TAMANHO = {
'P': 15.00,
'M': 25.00,
'G': 35.00,
}

sabor = models.CharField(max_length=100)
descricao = models.TextField()
imagem_url = models.URLField()
tamanho = models.CharField(max_length=1, choices=TAMANHOS) # Campo para tamanho
preco = models.DecimalField(max_digits=6, decimal_places=2, editable=False) # Preço baseado no tamanho

# Preços para cada tamanho
preco_pequeno = models.DecimalField(max_digits=6, decimal_places=2, default=15.00)
preco_medio = models.DecimalField(max_digits=6, decimal_places=2, default=25.00)
preco_grande = models.DecimalField(max_digits=6, decimal_places=2, default=35.00)

def save(self, *args, **kwargs):
# Define o preço baseado no tamanho escolhido
self.preco = self.PRECO_POR_TAMANHO[self.tamanho]
super().save(*args, **kwargs)
def get_preco_por_tamanho(self, tamanho):
if tamanho == 'P':
return self.preco_pequeno
elif tamanho == 'M':
return self.preco_medio
elif tamanho == 'G':
return self.preco_grande
else:
return None

def __str__(self):
return f'{self.sabor} ({self.get_tamanho_display()})'
return self.sabor


class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
carrinho = models.JSONField(default=list) # Carrinho como lista de dicionários
valor_total_carrinho = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

def __str__(self):
return self.user.username

def adicionar_bolo_ao_carrinho(self, bolo):
# Verifica se o bolo já está no carrinho
def adicionar_bolo_ao_carrinho(self, bolo, tamanho):
# Obtém o preço de acordo com o tamanho
preco = bolo.get_preco_por_tamanho(tamanho)
if preco is None:
raise ValueError("Tamanho inválido")

# Converte o preço de Decimal para float
preco = float(preco)

# Verifica se o bolo de tamanho específico já está no carrinho
for item in self.carrinho:
if item['bolo_id'] == bolo.id:
if item['bolo_id'] == bolo.id and item['tamanho'] == tamanho:
# Incrementa a quantidade se o bolo já estiver no carrinho
item['quantidade'] += 1
# Atualiza o valor total
self.valor_total_carrinho += Decimal(preco)
break
else:
# Adiciona o bolo ao carrinho com quantidade 1 se ainda não estiver
self.carrinho.append({'bolo_id': bolo.id, 'quantidade': 1})
# Salva o perfil com o carrinho atualizado
# Adiciona o bolo ao carrinho com quantidade 1
self.carrinho.append({'bolo_id': bolo.id, 'tamanho': tamanho, 'preco': preco, 'quantidade': 1})
# Atualiza o valor total
self.valor_total_carrinho += Decimal(preco)

# Salva o perfil com o carrinho atualizado e o valor total
self.save()

def listar_carrinho(self):
return self.carrinho

def obter_valor_total(self):
return self.valor_total_carrinho

def limpar_carrinho(self):
# Limpa o carrinho e zera o valor total
self.carrinho = []
self.valor_total_carrinho = 0.00
self.save()



@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
Expand Down

0 comments on commit d42d335

Please sign in to comment.