Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guilhermecarvalhocarneiro/864302dc763dd004a8d86ce82ced4361 to your computer and use it in GitHub Desktop.
Save guilhermecarvalhocarneiro/864302dc763dd004a8d86ce82ced4361 to your computer and use it in GitHub Desktop.
from django.db import models
from nuvols.core.models import Base
from django.db.models.signals import pre_save
from django.dispatch import receiver
import hashlib
import hmac
import datetime
class Cupom(Base):
titulo = models.CharField(verbose_name='Título', max_length=150, null=True)
desconto_real = models.FloatField(verbose_name='Valor do desconto em real', null=True, blank=True)
desconto_percentual = models.FloatField(verbose_name='Valor do desconto em percentual', null=True, blank=True)
inicio = models.DateField()
fim = models.DateField()
descricao = models.CharField(verbose_name='Descrição sobre o cupom', max_length=250, blank=True, null=True)
token = models.CharField(max_length=10, blank=True, null=True)
def __str__(self):
return f"Cupom {self.titulo} gravado com sucesso."
class Meta:
verbose_name = 'Cupom de desconto'
verbose_name_plural = 'Cupons de desconto'
fields_display = ['titulo', 'inicio', 'fim', 'desconto_real', 'desconto_percentual']
class UsuarioCupom(Base):
fk_usuario = models.ForeignKey('usuario.Cliente', verbose_name='Usuário que utilizou o cupom',
on_delete=models.PROTECT)
fk_cupom = models.ForeignKey(Cupom, verbose_name='Cupom utilizado pelo usuário', on_delete=models.PROTECT)
fk_atendimento = models.ForeignKey('atendimento.Agendamento', verbose_name='Agendamneto que foi utilizado o '
'cupom', on_delete=models.PROTECT)
class Meta:
verbose_name = 'Utilização do cupom pelo usuário'
verbose_name_plural = 'Utilizações dos cupons pelos usuários'
fields_display = ['fk_usuario__email', 'fk_cupom', 'fk_atendimento']
# Signals
@receiver(pre_save, sender=Cupom)
def gerar_token(sender, instance, **kwargs):
try:
if instance.token is None:
obj_data = f"{instance.inicio}{instance.titulo}{instance.fim}{datetime.datetime.utcnow()}"
instance.token = hmac.new(bytes(obj_data, 'utf-8'), digestmod=hashlib.blake2s).hexdigest()[:8]
except Exception as error:
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment