@@ -34,4 +34,18 @@ def delete_method_with_exceeded_attempts( sender: Type[PaymentMethod], instance: PaymentMethod, created: bool, **kwargs ): if instance.attempts >= settings.MAX_RECURRING_ATTEMPTS: - instance.delete() \ No newline at end of file + instance.delete() + + +@receiver(post_save, sender=PaymentPlanUserInfo) +def clear_recurrent_on_individual_plan_assignment( + sender: Type[PaymentPlanUserInfo], instance: PaymentPlanUserInfo, created: bool, **kwargs +): + if not instance.plan.individual: + return + + method_id = instance.method_id + PaymentPlanUserInfo.objects.filter(pk=instance.pk).update(next_payment_at=None, method=None) + + if method_id: + PaymentMethod.objects.filter(pk=method_id).delete() \ No newline at end of file @@ -52,7 +52,7 @@ def execute_recurring_payments() -> None: free_plan = PaymentPlanSelector(customer).get_free_plan(plan.is_corporate) overdue_payment.next_payment_at = None overdue_payment.plan = free_plan - overdue_payment.current_token_balance = free_plan.tokens_per_plan + overdue_payment.current_token_balance = 0 canceled_recurring_payments.append(overdue_payment) continue product_title = f'Вы восстановили баланс по плану {plan.tokens_per_plan} токенов'