feat: changed TPV behaviour
This commit is contained in:
@@ -8,6 +8,9 @@ from django.utils import timezone
|
||||
from django.utils.text import gettext_lazy as _
|
||||
from django.utils.text import slugify
|
||||
|
||||
from config.models import SingletonModel
|
||||
from shop.settings import CURRENCY_CODES
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
@@ -118,6 +121,9 @@ class Product(TimestampedModel):
|
||||
default="", blank=True, null=True, max_length=128, verbose_name=_("Slug")
|
||||
)
|
||||
hidden = models.BooleanField(default=False, db_index=True, verbose_name=_("oculto"))
|
||||
is_shipping_method = models.BooleanField(
|
||||
default=False, verbose_name=_("es forma de envío")
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
@@ -328,30 +334,55 @@ class OrderLine(TimestampedModel):
|
||||
verbose_name_plural = _("líneas de pedido")
|
||||
|
||||
|
||||
def create_order_code(*args, **kwargs):
|
||||
return (
|
||||
timezone.now()
|
||||
.isoformat()
|
||||
.replace("-", "")
|
||||
.replace("T", "")
|
||||
.replace(":", "")
|
||||
.replace(".", "")[:-5]
|
||||
)
|
||||
|
||||
|
||||
class Order(TimestampedModel):
|
||||
class Statuses(models.TextChoices):
|
||||
STATUS_PENDING = "PEN", _("pendiente de pago")
|
||||
STATUS_PAID = "PAI", _("pagado")
|
||||
STATUS_RETURNED = "RTN", _("devuelto")
|
||||
STATUS_ERROR = "ERR", _("Error")
|
||||
|
||||
class ShippingStatuses(models.TextChoices):
|
||||
STATUS_NOT_READY = "NOT", _("no preparado")
|
||||
STATUS_READY = "RDY", _("preparado")
|
||||
STATUS_TO_BE_SENT = "TBS", _("listo para ser enviado")
|
||||
STATUS_SENT = "SNT", _("enviado")
|
||||
STATUS_DELIVERED = "DLV", _("entregado")
|
||||
STATUS_FINISHED = "FIN", _("finalizado")
|
||||
STATUS_CANCELED = "CAN", _("cancelado")
|
||||
STATUS_REQUESTED_RETURN = "RQT", _("devolución solicitada")
|
||||
STATUS_RETURNED = "RTN", _("devuelto")
|
||||
|
||||
uuid = models.UUIDField(default=uuid4, verbose_name=_("UUID"), db_index=True)
|
||||
code = models.CharField(default=create_order_code, max_length=20, unique=True)
|
||||
|
||||
status = models.CharField(
|
||||
max_length=3, default=Statuses.STATUS_PENDING, verbose_name=_("estado")
|
||||
)
|
||||
|
||||
shipping_status = models.CharField(
|
||||
max_length=3,
|
||||
default=ShippingStatuses.STATUS_NOT_READY,
|
||||
verbose_name=_("estado de envío"),
|
||||
)
|
||||
|
||||
base_total = models.DecimalField(
|
||||
default=Decimal("0"),
|
||||
max_digits=13,
|
||||
decimal_places=2,
|
||||
verbose_name=_("base imponible"),
|
||||
)
|
||||
|
||||
total = models.DecimalField(
|
||||
default=Decimal("0"), max_digits=13, decimal_places=2, verbose_name=_("total")
|
||||
)
|
||||
@@ -536,3 +567,63 @@ class WishlistedProduct(TimestampedModel):
|
||||
"user",
|
||||
"product",
|
||||
)
|
||||
|
||||
|
||||
class Payment(models.Model):
|
||||
class MethodChoices(models.TextChoices):
|
||||
REDSYS = "REDSYS"
|
||||
|
||||
hash = models.UUIDField(verbose_name=_("Hash"), default=uuid4, primary_key=True)
|
||||
amount = models.DecimalField(
|
||||
max_digits=8,
|
||||
decimal_places=2,
|
||||
default=Decimal("0"),
|
||||
verbose_name=_("Cantidad"),
|
||||
)
|
||||
order = models.ForeignKey(
|
||||
"shop.Order",
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("pedido"),
|
||||
related_name="payments",
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
User, blank=True, null=True, on_delete=models.PROTECT, verbose_name=_("cliente")
|
||||
)
|
||||
|
||||
creation_date = models.DateTimeField(
|
||||
auto_now_add=True, verbose_name=_("Fecha de creación")
|
||||
)
|
||||
|
||||
metadata = models.JSONField(default=dict, verbose_name=_("Metadata"))
|
||||
|
||||
method = models.CharField(
|
||||
max_length=6,
|
||||
choices=MethodChoices.choices,
|
||||
default=MethodChoices.REDSYS,
|
||||
verbose_name=_("método de pago"),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Pago")
|
||||
verbose_name_plural = _("Pagos")
|
||||
|
||||
|
||||
class ShopSettings(SingletonModel):
|
||||
merchant_code = models.CharField(
|
||||
max_length=9,
|
||||
blank=False,
|
||||
null=False,
|
||||
verbose_name=_("Identificación de comercio"),
|
||||
)
|
||||
currency_code = models.CharField(
|
||||
max_length=4,
|
||||
default="978",
|
||||
choices=CURRENCY_CODES,
|
||||
verbose_name=_("Código de moneda"),
|
||||
) # 978 == EURO
|
||||
terminal = models.CharField(max_length=8, verbose_name=_("Terminal"))
|
||||
shared_secret = models.CharField(max_length=100, verbose_name=_("Clave de Redsys"))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("ajustes de la tienda")
|
||||
verbose_name_plural = _("ajustes de la tienda")
|
||||
|
||||
Reference in New Issue
Block a user