You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.1 KiB
88 lines
3.1 KiB
import csv
|
|
import random
|
|
import string
|
|
|
|
import django
|
|
import os
|
|
import sys
|
|
|
|
from django.contrib.auth import get_user_model
|
|
from django.db import IntegrityError
|
|
|
|
sys.path.append("../")
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
|
|
django.setup()
|
|
|
|
from yandex_money.models import Payment
|
|
from finance.models import Bill, Invoice
|
|
from access.models import Progress
|
|
from courses.models import Course
|
|
|
|
if __name__ == '__main__':
|
|
Payment.objects.all().delete()
|
|
Bill.objects.all().delete()
|
|
Progress.objects.all().delete()
|
|
with open('./finance/bill.csv') as bill_csv:
|
|
bill_reader = csv.DictReader(bill_csv)
|
|
for row in bill_reader:
|
|
bill_kwarg = dict()
|
|
row = dict(row)
|
|
bill_kwarg['id'] = row.pop('id', None)
|
|
opener = row.pop('opener', None)
|
|
bill_kwarg['opener'] = get_user_model().objects.get(email=opener) if opener \
|
|
else get_user_model().objects.get(email="kate.gazukina@skillbox.ru")
|
|
|
|
email = row.pop('user', None)
|
|
try:
|
|
email = email[:email.index("\n")]
|
|
except ValueError:
|
|
pass
|
|
|
|
try:
|
|
bill_kwarg['user'] = get_user_model().objects.get(email=email.lower())
|
|
except get_user_model().DoesNotExist:
|
|
print([email, bill_kwarg['id']])
|
|
|
|
bill_kwarg['comment'] = row.pop('comment', None)
|
|
bill_kwarg['description'] = row.pop('description', None)
|
|
bill_kwarg['course_token'] = Course.objects.get(slug=row.pop('course', None)).token
|
|
|
|
try:
|
|
bill = Bill.objects.create(**bill_kwarg)
|
|
except IntegrityError:
|
|
bill = Bill.objects.get(course_token=bill_kwarg['course_token'], user=bill_kwarg['user'])
|
|
|
|
method = row.pop('bill_method', None)
|
|
|
|
try:
|
|
price = int(row.pop('price', None))
|
|
except ValueError:
|
|
price = None
|
|
|
|
try:
|
|
real_price = int(row.pop('real_price', None))
|
|
except ValueError:
|
|
real_price = None
|
|
|
|
key = row.pop('key', None)
|
|
if not key:
|
|
key = ''.join(random.choice(string.ascii_letters) for x in range(16))
|
|
|
|
inv = Invoice.objects.create(bill=bill, method=method, price=price, real_price=real_price, key=key, **row)
|
|
inv.date = row['date']
|
|
inv.save()
|
|
|
|
if method == 'Y' and not row['status'] == 'W' and price:
|
|
yandex_pay, _is_create = Payment.objects.get_or_create(
|
|
order_amount=price,
|
|
order_number=inv.id,
|
|
customer_number=bill.user.out_key,
|
|
user=bill.user,
|
|
cps_email=bill.user.email,
|
|
shop_amount=real_price,
|
|
status=Payment.STATUS.PROCESSED if row['status'] == 'P' else
|
|
(Payment.STATUS.SUCCESS if row['status'] == 'F' else Payment.STATUS.FAIL)
|
|
)
|
|
|
|
inv.yandex_pay = yandex_pay
|
|
inv.save()
|
|
|