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.
 
 
 
 
 
 

75 lines
2.8 KiB

import csv
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.other import Progress
from course_service.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)
bill_kwarg['route'] = Course.objects.get(id=row.pop('course__id', None)).route.out_key
opener_id = row.pop('opener__id', None)
bill_kwarg['opener'] = get_user_model().objects.get(id=opener_id) if opener_id \
else get_user_model().objects.get(email="kate.gazukina@skillbox.ru")
email = row.pop('user__email', 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)
try:
bill = Bill.objects.create(**bill_kwarg)
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
inv = Invoice.objects.create(bill=bill, method=method, price=price, real_price=real_price, **row)
inv.date = row['date']
inv.save()
if method == 'Y' and not row['status'] == 'W':
row['yandex_pay'], _is_create = Payment.objects.get_or_create(
order_amount=price,
order_number=inv.id,
customer_number=bill.user.id,
user=bill.user,
cps_email=bill.user.email,
shop_amount=real_price,
status='Processed' if 'P' else ('Success' if 'F' else 'Fail')
)
except IntegrityError:
pass