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 courses.models import Course if __name__ == '__main__': Payment.objects.all().delete() Bill.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()