Mi sitio va a tener un sistema de crédito que básicamente funciona como una tarjeta de crédito. Cada usuario tiene un límite de crédito ilimitado, pero al final de cada semana, tienen que pagarlo. Por ejemplo, un usuario puede realizar varias compras entre el 1 y el 7 de marzo, y luego, al final del 7 de marzo, recibirá por correo electrónico una factura que enumera todas sus compras durante la semana y un total que vence el día 14. Si no lo pagan, su cuenta simplemente se desactivará hasta que lo hagan. Solo estoy tratando de entender cómo implementar esto.¿Implementación del sistema de tarjeta de crédito?
Tengo una lista de todas sus compras, eso no es un problema, pero solo estoy tratando de averiguar qué hacer con él. Al final del séptimo día, podría configurar un cronjob para generar una factura, que básicamente tendría un id y una fecha de vencimiento, y luego necesitaría otra tabla de muchos a muchos para vincular todas las compras con la factura. . Entonces, cuando un usuario agrega dinero a su cuenta, ¿supongo que se aplica a su factura pendiente actual? Y, ¿qué sucede si no pagan la factura en el momento en que se presenta una nueva factura, por lo que ahora tienen 2 pendientes, ¿cómo sé contra qué aplicarla? ¿O hago el cronjob para ver si hay facturas pendientes pendientes, las cancelo y agrego un nuevo artículo a la nueva factura como "saldo adelante (+ interés)"? ¿Cómo aplicaría el dinero contra una factura? ¿Habría que vincular cada pago a una factura, o podría simplemente depositarlo en el crédito de su cuenta, y de alguna manera averiguar qué se pagó y qué no? ¿Qué pasa si pagan por adelantado, antes de que se haya generado su factura? ¿Lo deduzco de su crédito de la factura en la generación, o al final de la semana cuando es debido? Hay muchas maneras de hacerlo ...
¿Alguien puede describir qué enfoque tomarían?
Si alguien está interesado, mi modelo de Factura tiene el siguiente aspecto (en Django). Los FacturasItems están vinculados a "productos" reales mediante un Id. Reverso (el FK está en el producto, no el ítem de factura para permitir diferentes tipos de ítems (diferentes tablas)), pero creo que voy a cambiar eso.
class Invoice(models.Model):
user = models.ForeignKey(User, related_name='invoices')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
closed_date = models.DateTimeField(null=True, blank=True)
due_date = models.DateTimeField(default=_next_weekday())
payment_date = models.DateTimeField(null=True, blank=True) # date the invoice was fully paid
total_payments = CurrencyField(default=0)
interest_charges = CurrencyField(default=0)
@property
def days_overdue(self):
dt = self.due_date - datetime.date.today()
return dt.days if dt.days > 0 else 0
@property
def item_total(self):
return self.items.filter(amount__gt=0).aggregate(t=Sum('amount'))['t'] or Decimal('0.00')
@property
def daily_interest(self):
return _round((self.item_total - self.total_payments) * settings.INTEREST_RATE/Decimal('365.242199'))
@property
def subtotal(self):
return self.item_total + self.interest_charges
@property
def tax(self):
return _round(self.subtotal * settings.GST)
@property
def total(self):
return self.subtotal + self.tax
@property
def balance_owing(self):
return self.total - self.total_payments
@property
def is_paid(self):
return self.payment_date != None
@property
def is_open(self):
return self.closed_date == None
@property
def is_overdue(self):
return not self.is_paid and self.due_date < datetime.date.today()
class InvoiceItem(models.Model):
invoice = models.ForeignKey(Invoice, related_name='items')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
description = models.CharField(max_length=200)
trans_date = models.DateTimeField(verbose_name='transaction date')
amount = CurrencyField()
Tengo un crontab configurar para funcionar a la medianoche cada noche para agregar cargos de interés a todos los elementos atrasados, y las facturas se envían por correo a cabo todos los viernes por la mañana.
Con balance hacia adelante, no puede realizar un seguimiento de lo vencido y de qué cobrar intereses? – mpen
Parece que tengo que ir con la contabilidad de artículos abierta para saber cuándo está vencido, entonces ... ¡esto será divertido de implementar! Muchas gracias por su ayuda, ojalá pudiera votarte varias veces. – mpen
Acabo de agregar una aclaración sobre las nuevas facturas. Con el saldo hacia adelante, cualquier interés generalmente se carga en el saldo adeudado al final del período, al igual que con su tarjeta de crédito. Utilizo la contabilidad de elementos abiertos ya que proporciona un control más detallado sobre el historial de pagos (usted sabe exactamente lo que está pagando su cliente, no solo poniendo todo en un cubo grande). Sin embargo, la contabilidad de saldos adeudados es apropiada para cosas como facturas de teléfono, tarjetas de crédito, etc. Depende de su caso de uso. –