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