Мой сайт будет иметь кредитную систему, которая в основном работает как кредитная карта. Каждый пользователь имеет неограниченный кредитный лимит, но в конце каждой недели они должны его погасить. Например, пользователь может совершить несколько покупок между 1 и 7 марта, а затем в конце 7 марта им будет отправлен счет-фактура, в котором перечислены все их покупки в течение недели, и общая сумма, которая должна быть предоставлена 14-м. Если они не оплачивают его, их учетная запись просто деактивируется, пока они этого не сделают. Я просто пытаюсь обвести голову, как это реализовать.Внедрение системы кредитных карт?
У меня есть список всех их покупок, это не проблема, но я просто пытаюсь выяснить, что с ним делать. В конце 7-го дня я мог создать cronjob для создания счета-фактуры, который в основном имел бы идентификатор и дату платежа, а затем мне понадобилась бы другая таблица «многие-ко-многим», чтобы связать все покупки с факсом , Затем, когда пользователь добавляет деньги на свой счет, я предполагаю, что он применяется к их текущему счету? И что, если они не погасят свой счет до того момента, когда будет выставлен новый счет, так что теперь у них есть 2 выдающихся, как я узнаю, к чему его применить? Или я делаю проверку cronjob для любых предыдущих выставленных счетов, отменяет их и добавляет новый элемент в новый счет как «баланс вперед (+ интерес)»? Как бы вы применили деньги против счета? Будет ли каждый платеж привязан к счету или я могу просто внести его в свой кредитный счет, а затем каким-то образом выяснить, что было заплачено, а что нет? Что делать, если они платят заранее, прежде чем их счет будет сгенерирован? Вычитаю ли я его из своего кредита из счета-фактуры по генерации или в конце недели, когда это необходимо? Есть так много способов сделать это ...
Может кто-нибудь описать, какой подход они предпримут?
Если кому-то интересно, моя модель счета теперь выглядит следующим образом (в Django). InvoiceItems связаны с фактическими «продуктами» с помощью обратного идентификатора (FK находится на продукте, а не на элементе счета, чтобы разрешать разные типы элементов (разные таблицы)), но я думаю, что я собираюсь переключить это.
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()
У меня есть кронтаб настроить для запуска в полночь каждую ночь, чтобы добавить проценты по всем просроченным пунктов, а также счета-фактуры по почте каждую пятницу утром.
С балансом вперед вы не можете отслеживать, что просрочено и на что начислять проценты? – mpen
Похоже, мне нужно идти с открытыми учетными записями, чтобы знать, когда это просрочено, тогда ... это будет интересно реализовать! Огромное вам спасибо за вашу помощь, хотелось бы, чтобы я мог выложить вас несколько раз. – mpen
Просто добавлено разъяснение о новых счетах. С балансом вперед любые проценты обычно взимаются с баланса в конце периода, например, с вашей кредитной карты. Я использую открытый учет позиций, поскольку он дает более тонкий контроль над историей платежей (вы точно знаете, за что платит ваш клиент, а не просто вкладываете все в одно большое ведро). Тем не менее, баланс вперед бухгалтерский учет подходит для таких вещей, как телефонные счета, кредитные карты и т. Д. Это зависит от вашего варианта использования. –