parent
c27f4fb103
commit
e6d4988b9e
5 changed files with 71 additions and 3 deletions
@ -0,0 +1,54 @@ |
||||
import json |
||||
from datetime import datetime, timedelta |
||||
|
||||
from django_celery_beat.models import CrontabSchedule, PeriodicTask |
||||
from yandex_money.models import Payment |
||||
|
||||
from finance.models import Invoice |
||||
from lms import celery_app |
||||
|
||||
|
||||
def setup_periodic_billing(invoice_id): |
||||
# TODO: настроить периодичность и срок окончания |
||||
schedule, _ = CrontabSchedule.objects.get_or_create( |
||||
minute='*', |
||||
hour='*', |
||||
day_of_week='*', |
||||
day_of_month='*', |
||||
month_of_year='*' |
||||
) |
||||
PeriodicTask.objects.create( |
||||
crontab=schedule, |
||||
name='Periodic billing #{}'.format(invoice_id), |
||||
task='finance.tasks.periodic_billing', |
||||
args=json.dumps([invoice_id]), |
||||
expires=datetime.utcnow() + timedelta(minutes=5) |
||||
) |
||||
|
||||
|
||||
@celery_app.task |
||||
def periodic_billing(invoice_id): |
||||
try: |
||||
sample = Invoice.objects.get(id=invoice_id) |
||||
except Invoice.DoesNotExist: |
||||
raise ValueError('Платеж с id={} не найден'.format(invoice_id)) |
||||
bill = sample.bill |
||||
invoice = Invoice.objects.create( |
||||
status='P', |
||||
price=sample.price, |
||||
method=sample.method, |
||||
rebilling=True, |
||||
bill=bill |
||||
) |
||||
if invoice.method == 'Y': |
||||
user = bill.user |
||||
yandex_pay = Payment.objects.create( |
||||
invoice_id=sample.yandex_pay.invoice_id, |
||||
order_amount=invoice.price, |
||||
customer_number=user.id, |
||||
user=user, |
||||
cps_email=user.email |
||||
) |
||||
invoice.yandex_pay = yandex_pay |
||||
invoice.save() |
||||
# TODO: запрос repeatCardPayment |
||||
Loading…
Reference in new issue