def save_from_list(cls, deals): for deal in deals: account_income = Account.objects.filter(name=deal['Номер договора']).first() if not account_income: account_income = Account.objects.create(name=deal['Номер договора']) isin = deal.get('Код финансового инструмента') isin = isin if isin else deal.get('Код ЦБ') type = deal.get('Операция') type = type if type else deal.get('Вид') amount = deal.get('Количество') amount = amount if amount else deal.get('Количество, шт.') price = deal.get('Цена') price = price if price else conver_to_number(deal.get('Цена**')) volume = deal.get('Объём сделки') volume = volume if volume else conver_to_number(deal.get('Сумма')) Deal.objects.create( account=account_income, number=deal.get('Номер сделки'), conclusion_date=dmYHM_to_date(deal.get('Дата заключения')), settlement_date=dmYHM_to_date(deal.get('Дата расчётов')), isin=isin, type=type, amount=amount, price=price, nkd=deal.get('НКД'), volume=volume, currency=deal.get('Валюта'), service_fee=(deal.get('Комиссия') if deal.get('Комиссия') else 0), )
def save_from_sberbank_report(cls, data, params): for income in data: cls( account=params['account'], report=params['report'], operation_date=dmY_to_date(income['Дата операции']), sum=conver_to_number(income['Сумма, руб.']), description=income['Основание операции'], remainder_limit=conver_to_number(income['Остаток лимита (сумма к внесению), руб.']), ).save()
def convert_tinkoff_transfer(cls, operation, account, figis): if Transfer.objects.filter(account_income=account, transfer_id=operation.id).count(): return figi = tapi.extract_figi(operation.figi, figis) if operation.figi else None descriptions = [figi, get_value(operation.instrument_type), get_value(operation.operation_type)] Transfer.objects.create( account_income=account, date_of_application=operation.date, execution_date=operation.date, type=tapi.resolve_operation_type(get_value(operation.operation_type)), sum=conver_to_number(operation.payment) + conver_to_number(operation.commission), currency=get_value(operation.currency), description=' '.join(filter(None, descriptions)), status='Исполнено', transfer_id=operation.id )
def convert_tinkoff_deal(cls, operation, account, figis): if Deal.objects.filter(account=account, number=operation.id).exists(): return Deal.objects.create( account=account, number=operation.id, conclusion_date=operation.date, settlement_date=operation.date, isin=tapi.extract_figi(operation.figi, figis), type=tapi.resolve_operation_type(get_value(operation.operation_type)), amount=operation.quantity, price=conver_to_number(operation.price), nkd=0, volume=conver_to_number(operation.payment), currency=get_value(operation.currency), service_fee=conver_to_number(operation.commission.value) )
def save_from_sberbank_report(cls, rows: list, params): map = { # other 'Перевод д/с для проведения расчетов по клирингу': 'Другое', 'Сделка от': 'Другое', # commission 'Списание комиссии': 'Списание комиссии', 'Комиссия Биржи': 'Списание комиссии', 'Комиссия Брокера': 'Списание комиссии', # outcome money 'Перевод д/с': 'Вывод ДС', 'Списание д/с': 'Вывод ДС', # income money 'Зачисление купона': 'Зачисление купона', 'Амортизация по': 'Зачисление суммы от погашения ЦБ', 'Зачисление д/с (амортизация': 'Зачисление суммы от погашения ЦБ', 'Зачисление д/с (купон': 'Зачисление купона', 'Зачисление д/с': 'Ввод ДС', } if isinstance(rows, list): for row in rows[:-1]: type = [v for k, v in map.items() if row.get('Описание операции').startswith(k)] type = type[0] if type else 'Другое' if not type: print(row.get('Описание операции')) date = dmY_to_date(row.get('Дата')) cls.objects.create( execution_date=date, date_of_application=date, type=type, currency=row.get('Валюта'), sum=abs(conver_to_number(row.get('Сумма зачисления')) - conver_to_number(row.get('Сумма списания'))), status='Исполнено', description=row.get('Описание операции'), account_income=params['account'], report=params['report'] )