You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Gestor_pagos/tasks/models.py

46 lines
2.0 KiB

from django.db import models
from django.contrib.auth.models import User
from django.db.models import Sum
# Create your models here.
class RegistrarCompra(models.Model):
nombre_compra = models.CharField(max_length=100)
monto_pago = models.DecimalField(max_digits=10, decimal_places=2)
observacion = models.TextField(blank=True)
user_compra = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
def calcular_estado(self):
# Usamos 'pagos' en lugar de 'registropagos_set' y sumamos 'monto_extra'
pagos = self.pagos.aggregate(total_pagado=Sum('monto_pagado'))['total_pagado'] or 0
pagos_extra = self.pagos.aggregate(total_extra=Sum('monto_extra'))['total_extra'] or 0
total_pagado = pagos + pagos_extra
if total_pagado == 0:
return "Pendiente"
elif total_pagado < self.monto_pago:
return "Pagado Parcialmente"
else:
return "Completado"
def calcular_restante(self):
# Usamos 'pagos' en lugar de 'registropagos_set' y sumamos 'monto_extra'
pagos = self.pagos.aggregate(total_pagado=Sum('monto_pagado'))['total_pagado'] or 0
pagos_extra = self.pagos.aggregate(total_extra=Sum('monto_extra'))['total_extra'] or 0
total_pagado = pagos + pagos_extra
return max(self.monto_pago - total_pagado, 0)
class RegistroPagos(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
registro_compra = models.ForeignKey(RegistrarCompra, on_delete=models.CASCADE, related_name='pagos') # Aquí agregamos `related_name`
fecha_pago = models.DateField(auto_now_add=True)
monto_pagado = models.DecimalField(max_digits=10, decimal_places=2, null=True)
monto_extra = models.DecimalField(max_digits=10, decimal_places=2, null=True)
observaciones = models.TextField(blank=True)
def __str__(self):
return f"Pago de {self.user.username} - {self.monto_pagado} (+{self.monto_extra})"
@property
def total_pagado(self):
return self.monto_pagado + self.monto_extra