Ejemplo n.º 1
0
 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),
         )
Ejemplo n.º 2
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()
Ejemplo n.º 3
0
 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
     )
Ejemplo n.º 4
0
 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)
     )
Ejemplo n.º 5
0
 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']
             )