Mochinov

Untitled

Mar 23rd, 2021 (edited)
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.60 KB | None | 0 0
  1. class Subscription(models.Model):
  2.  
  3.     CHOICES_MOUNTH = (
  4.         ('1', '1 month'),
  5.         ('2', '2 month'),
  6.         ('3', '3 month'),
  7.     )
  8.  
  9.     user = models.ForeignKey(Patient, on_delete=models.SET_NULL, null = True)
  10.     subscription_date = models.DateTimeField("Дата оформления подписки", default=datetime.now(), db_index=True)
  11.     duration = models.CharField(max_length=12, choices=CHOICES_MOUNTH , default="1 month")
  12.     cost = models.IntegerField('Стоимость услуги')
  13.     subscription_end_date = models.DateTimeField("Конец подписки", default=datetime.now(), db_index=True)
  14.     status = models.BooleanField("Статуc подписки : ", default = False)
  15.  
  16.     def __str__(self):
  17.         return self.duration
  18.  
  19. class HistoryBalance(models.Model):
  20.     amount = models.IntegerField('Сумма операции')
  21.     current_amount = models.IntegerField('Сумма текущего счёта')
  22.     write_off = models.BooleanField('Снята ли блокировка с текущей суммы', default=False)
  23.     billing_account = models.ForeignKey(BillingAccount, verbose_name= 'Пользовател', on_delete=models.CASCADE)
  24.     datetime_create = models.DateTimeField('Дата создания операции',default=datetime.now(), db_index=True)
  25.  
  26.  
  27. class BillingAccount(models.Model):
  28.     user = models.ForeignKey(Patient, on_delete=models.SET_NULL, null = True)
  29.     datetime_create = models.DateTimeField('Дата создания аккаунта',default=datetime.now(), db_index=True)
  30.     amount = models.IntegerField('Cумма на счету', default=0, null=False)
  31.  
  32.  
  33.     def paymant_operation(self, amount):
  34.         history = HistoryBalance.objects.create(
  35.             current_amount = self.amount,
  36.             amount = amount,
  37.             write_off = True,
  38.             billing_account = self
  39.         )
  40.         self.amount = self.amount - amount
  41.         self.save()
  42.     def check_status_amount(pacient_id):
  43.         """Проверка суммы для списания со счёта !"""
  44.         block_amount = Block_amount.objects.filter(write_off = False, billing_account__user = pacient_id)
  45.         return block_amount.exists()
  46.  
  47.     def block_amount(self, amount):
  48.         """Блокирование суммы для дальнейшего списания"""
  49.         Block_amount.objects.create(billing_account = self, amount = amount, write_off = False)
  50.  
  51.     def take_away_block_amount(self, id):
  52.         """отмена заблокированной суммы !"""
  53.         block_amount = Block_amount.objects.get(id = id)
  54.         block_amount.write_off = True
  55.         block_amount.save()
  56.  
  57.     def get_summ_in_account(self):
  58.         return self.amount
  59.  
  60. class Block_amount(models.Model):
  61.     amount = models.IntegerField('Сумма для блокировки аккаунта')
  62.     write_off = models.BooleanField('Снята ли блокировка с текущей суммы', default=False)
  63.     billing_account = models.ForeignKey(BillingAccount, verbose_name= 'Пользовател с заблокированной суммой', on_delete=models.CASCADE)
  64.     datetime_block = models.DateTimeField('Дата создания аккаунта',default=datetime.now(), db_index=True)
  65.  
  66. @receiver(post_save, sender=Patient)
  67. def save_or_create_account(sender, instance, created, **kwargs):
  68.     if created:
  69.         BillingAcount.objects.create(user=instance)
  70.     else:
  71.         try:
  72.             instance.billingacount.save()
  73.         except ObjectDoesNotExist:
  74.             BillingAcount.objects.create(user=instance)
Add Comment
Please, Sign In to add comment