{"version":3,"file":"moex-client-backend.mjs","sources":["../../../projects/moex-client-backend/src/lib/moex-client-backend.service.ts","../../../projects/moex-client-backend/src/lib/moex-client-backend.component.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/config.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/db-configs/db-config-0011.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/db-configs/db-2023-01-08-config-12.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/db-configs/db-2023-02-25-config-13.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/db-configs/db-2023-05-04-config-14.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/db-configs/db-2023-05-31-config-15.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/db.helper.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/console-error.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/shared/dexie.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/portfolios/portfolios-base.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/operations/helpers/operations.mapper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/operations/operations-base.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/operations/copy-operations-to-portfolio.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/operations/delete-operations.ts","../../../projects/moex-client-backend/src/lib/api-public/models/operations.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/operations/get-paged-operations.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/operations/operations.helper.ts","../../../projects/moex-client-backend/src/lib/api-public/models/assets-history.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/assets-history/helpers/mapper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/assets-history/assets-history-base.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/assets-history/get-paged-history.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/assets-history/assets-history.helper.ts","../../../projects/moex-client-backend/src/lib/store-api/dexie-db/portfolios/portfolios.helper.ts","../../../projects/moex-client-backend/src/lib/shared/promise-api2.service.ts","../../../projects/moex-client-backend/src/lib/store/portfolios.store.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-portfolios.service.ts","../../../projects/moex-client-backend/src/lib/store/operations.store.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/date.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-timeline-calculator/helpers/assets-history2.helper.ts","../../../projects/moex-client-backend/src/lib/api-public/models/common-biz.ts","../../../projects/moex-client-backend/src/lib/api-public/mappers/ticker-currency.mapper.ts","../../../projects/moex-client-backend/src/lib/api-public/mappers/count-price.mapper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-timeline-calculator/assets-timeline2.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/merge-prices-calculator2/helpers/day-calculations.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/merge-prices-calculator2/helpers/abstract/merge-values-to-timeline.ts","../../../projects/moex-client-backend/src/lib/calculators/merge-prices-calculator2/merge-prices-to-assets/merge-prices-to-assets.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/merge-prices-calculator2/merge-prices2.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/shared/operations.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/portfolio-summaries.calculator2.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/accounts-history-helper/count-price.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/accounts-history-helper/account-history-helper.ts","../../../projects/moex-client-backend/src/lib/api-public/models/securities-events.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/process-by-ticker-name.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/process-by-currency-change.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/process-by-split.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/process-by-dividends.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/process-by-coupon.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/process-by-amortization.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/events-processor/events-process.helper.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/helpers/assets-history.calculator3.ts","../../../projects/moex-client-backend/src/lib/calculators/assets-history-calculator3/assets-history-calculator3.service.ts","../../../projects/moex-client-backend/src/lib/store/assets-history.store.ts","../../../projects/moex-client-backend/src/lib/store/assets-history-consistence.store.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-assets-history.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-operations.service.ts","../../../projects/moex-client-backend/src/lib/api-public/models/securities.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/dict-array.mapper.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/_currencies-mappers/currencies.mappers.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-securities.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-securities.service.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-securities-prices.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-securities-prices.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-db.service.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-currencies.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-currencies.service.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/uid-generator.helper.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/transliterate.helper.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-demo-creator2.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/shared/excel-binary-reader.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/tinkoff/models.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/isin-detector.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/tinkoff/items-processor.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/tinkoff/report-reader-tinkoff.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/sber/report-reader-sber.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/bks/models.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/bks/mapper-operation.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/bks/mapper-currency.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/bks/items-processor.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/bks/report-reader-bks.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/app/models.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/app/mapper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/shared/excel-writer.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/app/report-reader-app.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/alfa/models.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/alfa/items-processor.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/alfa/report-reader-alfa.service.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/array.helper.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/shared/securities-check-connector2.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/report-parser.store.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-report-parser.service.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-misc.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-misc.service.ts","../../../projects/moex-client-backend/src/lib/store/report-parser/report-maker.store.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-export.service.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-securities-sectors.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-securities-sectors.service.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-securities-events.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-securities-events.service.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/api-securities-data.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/api-securities-data.service.ts","../../../projects/moex-client-backend/src/lib/api-public/services/store-api2.module.ts","../../../projects/moex-client-backend/src/lib/moex-client-backend.module.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/file.helper.ts","../../../projects/moex-client-backend/src/lib/api-public/helpers/_public-api.ts","../../../projects/moex-client-backend/src/lib/api-public/mappers/_public-api.ts","../../../projects/moex-client-backend/src/lib/api-public/models/_public-api.ts","../../../projects/moex-client-backend/src/lib/api-public/services/_public-api.ts","../../../projects/moex-client-backend/src/lib/api-public/public-api.ts","../../../projects/moex-client-backend/src/lib/store-api/api-external/_public-api.ts","../../../projects/moex-client-backend/src/public-api.ts","../../../projects/moex-client-backend/src/moex-client-backend.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class MoexClientBackendService {\r\n\r\n  constructor() { }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-moex-client-backend',\r\n  template: `\r\n    <p>\r\n      moex-client-backend works!\r\n    </p>\r\n  `,\r\n  styles: [\r\n  ]\r\n})\r\nexport class MoexClientBackendComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","export enum AppTable {\r\n  portfolios = 'portfolios',\r\n  operations = 'operations',\r\n  // assetsEvents = 'assetsEvents',\r\n  assetsHistory = 'assetsHistory'\r\n}\r\n\r\n/**//*\r\nexport enum AppTableDeprecated {\r\n  assets = 'assets',\r\n  securities = 'securities',\r\n  securitiesPrices = 'securitiesPrices',\r\n}*/\r\n\r\n","// & unique key\r\n// [...] compound index\r\n\r\n// это не описание таблицы, а описание индексов, поэтому некоторые поля в комментариях\r\nimport {AppTable} from '../config';\r\nimport Dexie from 'dexie';\r\n\r\nconst tablesConfig8 = {\r\n  [AppTable.portfolios]: '++id,title,&urlName',\r\n  [AppTable.operations]: '++id,[ticker+portfolioId+currency],date,type,ticker,count,unitPrice,portfolioId,currency', // exchange, broker\r\n  // [AppTable.assetsEvents]: '&id', // type,date,ticker,data,isOn\r\n  [AppTable.assetsHistory]: '++id,portfolioId'\r\n};\r\n\r\nexport const doDbConfig11 = (dbDexie: Dexie) => {\r\n  dbDexie.version(11).stores(tablesConfig8).upgrade(db => {\r\n    dbDexie.delete().then(() => {\r\n      console.log('Database successfully deleted');\r\n      location.reload();\r\n    }).catch((err: any) => {\r\n      console.error('Could not delete database ' + err);\r\n    });\r\n  });\r\n};\r\n\r\nexport const doDbConfig10 = (dbDexie: Dexie) => {\r\n  dbDexie.version(10).stores(tablesConfig8).upgrade(db => {\r\n    dbDexie.delete().then(() => {\r\n      console.log('Database successfully deleted');\r\n      location.reload();\r\n    }).catch((err: any) => {\r\n      console.error('Could not delete database ' + err);\r\n    });\r\n  });\r\n};\r\n\r\nexport const doDbConfig9 = (dbDexie: Dexie) => {\r\n  dbDexie.version(9).stores(tablesConfig8).upgrade(db => {\r\n    dbDexie.delete().then(() => {\r\n      console.log('Database successfully deleted');\r\n      location.reload();\r\n    }).catch((err: any) => {\r\n      console.error('Could not delete database ' + err);\r\n    });\r\n  });\r\n};\r\n\r\n","import {AppTable} from '../config';\r\nimport Dexie from 'dexie';\r\nimport {Currency} from '../../../../api-public/models/common-biz';\r\n\r\n// https://stackoverflow.com/questions/46729607/indexeddb-correct-way-to-store-big-amount-of-data\r\n\r\n// ++ auto generated unique key\r\n// & unique key\r\n// [...] compound index\r\n\r\n// это не описание таблицы, а описание индексов, поэтому некоторые поля в комментариях\r\nconst tablesConfig12 = {\r\n  [AppTable.portfolios]: '++id,title,&urlName',\r\n  [AppTable.operations]: '++id,[ticker+portfolioId+currency],date,type,ticker,count,unitPrice,portfolioId,currency', // exchange, broker\r\n  ['assetsEvents']: null, // '&id', // type,date,ticker,data,isOn\r\n  [AppTable.assetsHistory]: '++id,portfolioId'\r\n};\r\n\r\n// зафиксируем модели на тот момент, так как те что в проекте будут менятся, к ним прияззыватся нельзя\r\n// модификатор полностью автономный\r\ntype PartialRecord11<K extends keyof any, T> = { [P in K]?: T; };\r\ntype TickerCurrency11 = string; // 'GAZP|RUB'\r\nenum Currency11 { rub = 'RUB', usd = 'USD', eur = 'EUR', cny = 'CNY', undefined = 'undefined' }\r\ninterface AssetsHistoryTickerData11 {\r\n  ticker: string;\r\n  currency: Currency11;\r\n  count: number;\r\n  basePrice: number;\r\n}\r\nexport interface AssetsHistoryAccountsData11 {\r\n  assetsDict: PartialRecord11<TickerCurrency11, AssetsHistoryTickerData11>;\r\n  currenciesAccounts: PartialRecord11<Currency, number>;\r\n}\r\n\r\ntype CountPrice12 = string; // '12|234.45'\r\nexport interface AssetsHistoryAccountsData12 {\r\n  assetsDict: PartialRecord11<TickerCurrency11, CountPrice12>;\r\n  currenciesAccounts: PartialRecord11<Currency, number>;\r\n}\r\n\r\ninterface SrvAssetHistoryItem11 {\r\n  id?: number;\r\n  operationId: number;\r\n  portfolioId: number;\r\n  totalOperations: number;\r\n  date: Date;\r\n  accountsData: AssetsHistoryAccountsData11 | AssetsHistoryAccountsData12;\r\n}\r\n\r\nexport const doDbConfig12 = (dbDexie: Dexie) => {\r\n  dbDexie.version(12).stores(tablesConfig12).upgrade(db => {\r\n    return db.table(AppTable.assetsHistory).toCollection()\r\n      .modify((item: SrvAssetHistoryItem11) => {\r\n        item.accountsData = {\r\n          ...Mapper.accountsData11to12(item.accountsData as AssetsHistoryAccountsData11)\r\n        };\r\n      }).catch((err: any) => {\r\n      console.error('Could not modify database to version 12' + err);\r\n    });\r\n  });\r\n};\r\n\r\nclass Mapper {\r\n  static accountsData11to12(data11: AssetsHistoryAccountsData11): AssetsHistoryAccountsData12 {\r\n    const accountsData12: AssetsHistoryAccountsData12 = {\r\n      assetsDict: this.assetsDictTo12(data11.assetsDict),\r\n      currenciesAccounts: data11.currenciesAccounts\r\n    };\r\n    return accountsData12;\r\n  }\r\n\r\n  private static assetsDictTo12(assetsDict: PartialRecord11<TickerCurrency11, AssetsHistoryTickerData11>)\r\n    : PartialRecord11<TickerCurrency11, CountPrice12> {\r\n\r\n    const ret: PartialRecord11<TickerCurrency11, CountPrice12> = {};\r\n    Object.keys(assetsDict).forEach(key => {\r\n      const data: AssetsHistoryTickerData11 | undefined = assetsDict[key];\r\n      ret[key] = `${data?.count}|${data?.basePrice}`;\r\n    });\r\n    return ret;\r\n  }\r\n}\r\n","import {AppTable} from '../config';\r\nimport Dexie from 'dexie';\r\nimport {Currency} from '../../../../api-public/models/common-biz';\r\n\r\n// https://stackoverflow.com/questions/46729607/indexeddb-correct-way-to-store-big-amount-of-data\r\n\r\n// ++ auto generated unique key\r\n// & unique key\r\n// [...] compound index\r\n\r\n// это не описание таблицы, а описание индексов, поэтому некоторые поля в комментариях\r\nconst tablesConfig13 = {\r\n  [AppTable.portfolios]: '++id,title,&urlName',\r\n  [AppTable.operations]: '++id,[ticker+portfolioId+currency],date,type,ticker,count,unitPrice,portfolioId,currency', // exchange, broker\r\n  ['assetsEvents']: null, // '&id', // type,date,ticker,data,isOn\r\n  [AppTable.assetsHistory]: '++id,portfolioId'\r\n};\r\n\r\nexport const doDbConfig13 = (dbDexie: Dexie) => {\r\n  dbDexie.version(13).stores(tablesConfig13).upgrade(db => {\r\n    return db.table(AppTable.assetsHistory).clear().then(() => {\r\n      console.log(`Table {AppTable.assetsHistory} has been cleared successfully`);\r\n      location.reload();\r\n    }).catch((err: any) => {\r\n      console.error('Could not delete database ' + err);\r\n    });\r\n  });\r\n};\r\n\r\n","import {AppTable} from '../config';\r\nimport Dexie from 'dexie';\r\nimport {Currency} from '../../../../api-public/models/common-biz';\r\n\r\n// https://stackoverflow.com/questions/46729607/indexeddb-correct-way-to-store-big-amount-of-data\r\n\r\n// ++ auto generated unique key\r\n// & unique key\r\n// [...] compound index\r\n\r\n// это не описание таблицы, а описание индексов, поэтому некоторые поля в комментариях\r\nconst tablesConfig13 = {\r\n  [AppTable.portfolios]: '++id,title,&urlName',\r\n  [AppTable.operations]: '++id,[ticker+portfolioId+currency],date,type,ticker,count,unitPrice,portfolioId,currency', // exchange, broker\r\n  ['assetsEvents']: null, // '&id', // type,date,ticker,data,isOn\r\n  [AppTable.assetsHistory]: '++id,portfolioId'\r\n};\r\n\r\nexport const doDbConfig14 = (dbDexie: Dexie) => {\r\n  dbDexie.version(14).stores(tablesConfig13).upgrade(db => {\r\n    return db.table(AppTable.assetsHistory).clear().then(() => {\r\n      console.log(`Table {AppTable.assetsHistory} has been cleared successfully`);\r\n      location.reload();\r\n    }).catch((err: any) => {\r\n      console.error('Could not delete database ' + err);\r\n    });\r\n  });\r\n};\r\n\r\n","import {AppTable} from '../config';\r\nimport Dexie from 'dexie';\r\nimport {Currency} from '../../../../api-public/models/common-biz';\r\n\r\n// https://stackoverflow.com/questions/46729607/indexeddb-correct-way-to-store-big-amount-of-data\r\n\r\n// ++ auto generated unique key\r\n// & unique key\r\n// [...] compound index\r\n\r\n// это не описание таблицы, а описание индексов, поэтому некоторые поля в комментариях\r\nconst tablesConfig15 = {\r\n  [AppTable.portfolios]: '++id,title,&urlName',\r\n  [AppTable.operations]: '++id,[ticker+portfolioId+currency],date,type,ticker,count,unitPrice,portfolioId,currency', // exchange, broker\r\n  ['assetsEvents']: null, // '&id', // type,date,ticker,data,isOn\r\n  [AppTable.assetsHistory]: '++id,portfolioId,date'\r\n};\r\n\r\nexport const doDbConfig15 = (dbDexie: Dexie) => {\r\n  dbDexie.version(15).stores(tablesConfig15).upgrade(db => {\r\n    return db.table(AppTable.assetsHistory).clear().then(() => {\r\n      console.log(`Table {AppTable.assetsHistory} has been cleared successfully`);\r\n      location.reload();\r\n    }).catch((err: any) => {\r\n      console.error('Could not delete database ' + err);\r\n    });\r\n  });\r\n};\r\n\r\n","import Dexie from 'dexie';\r\nimport {\r\n  doDbConfig10, doDbConfig11,\r\n  doDbConfig9\r\n} from './db-configs/db-config-0011';\r\nimport {doDbConfig12} from './db-configs/db-2023-01-08-config-12';\r\nimport {doDbConfig13} from './db-configs/db-2023-02-25-config-13';\r\nimport {doDbConfig14} from './db-configs/db-2023-05-04-config-14';\r\nimport {doDbConfig15} from './db-configs/db-2023-05-31-config-15';\r\n\r\n// @dynamic\r\nexport class DexieDbHelper {\r\n  public static db$: Promise<Dexie>;\r\n\r\n  static dbVersion(): Promise<string> {\r\n    return this.db$.then((db) => {\r\n     return db.verno.toString();\r\n    });\r\n  }\r\n\r\n  static openDb(): Promise<Dexie> {\r\n    const dbDexie = new Dexie('my-invest-data-db');\r\n\r\n    doDbConfig15(dbDexie);\r\n    doDbConfig14(dbDexie);\r\n    doDbConfig13(dbDexie);\r\n    doDbConfig12(dbDexie);\r\n    doDbConfig11(dbDexie);\r\n    doDbConfig10(dbDexie);\r\n    doDbConfig9(dbDexie);\r\n\r\n    const dbPromise = dbDexie\r\n      .open()\r\n      .then(db => {\r\n        return db;\r\n      })\r\n      .catch('NoSuchDatabaseError', (e) => {\r\n        // Database with that name did not exist\r\n        console.error('Database not found');\r\n      })\r\n      .catch((e) => {\r\n        console.error('Oh uh: ' + e);\r\n      });\r\n    this.db$ = dbPromise as Promise<Dexie>;\r\n    return this.db$;\r\n  }\r\n\r\n  public static deleteDb(): Promise<any> {\r\n    return this.db$.then((db) => {\r\n      db.delete().then(() => {\r\n        console.log('Database successfully deleted');\r\n      }).catch((err: any) => {\r\n        console.error('Could not delete database ' + err);\r\n      });\r\n    });\r\n  }\r\n\r\n  private static displayConfigInfo(db: Dexie): void {\r\n    console.log('Found database: ' + db.name);\r\n    console.log('Database version: ' + db.verno);\r\n    db.tables.forEach((table) => {\r\n      console.log('Found table: ' + table.name);\r\n      console.log('Table Schema: ' + JSON.stringify(table.schema, null, 4));\r\n    });\r\n  }\r\n}\r\n","\r\nexport class ConsoleError extends Error {\r\n  constructor(...args: any[]) {\r\n    const returnValue = super(...args);\r\n    console.error(...args);\r\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\r\n    /*if (Error.captureStackTrace) {\r\n      Error.captureStackTrace(this, ConsoleError);\r\n    }*/\r\n\r\n    this.name = 'ConsoleError';\r\n    this.message = args[0];\r\n    // Pass remaining arguments (including vendor specific ones) to parent constructor\r\n    // return returnValue;\r\n  }\r\n}\r\n// window.ConsoleError = ConsoleError;\r\n","import {AppTable} from './config';\r\nimport Dexie from 'dexie';\r\nimport {DexieDbHelper} from './db.helper';\r\nimport {ConsoleError} from '../../../api-public/helpers/console-error';\r\n\r\n// @dynamic\r\nexport class DexieHelper {\r\n  static runTransactionDB<T>(tables: AppTable[], func: (db: Dexie) => Promise<T>): Promise<T> {\r\n    const func2 = (db2: Dexie): Promise<T> => {\r\n      return this.runTransaction(db2, tables, func);\r\n    };\r\n    return this.getDB(func2);\r\n  }\r\n\r\n  static runTransaction<T>(db: Dexie, tables: AppTable[], func: (db: Dexie) => Promise<T>): Promise<T> {\r\n    const tbls = tables.map(name => db.table(name));\r\n    return db.transaction('rw', tbls, () => {\r\n      return func(db);\r\n    }).then((result: T) => { // success\r\n      return result;\r\n    }).catch((error) => {\r\n      throw new ConsoleError('app transaction error: ' + error);\r\n    });\r\n  }\r\n\r\n  static getDB<T>(func: (db: Dexie) => Promise<T>): Promise<T> {\r\n    return DexieDbHelper.db$.then(db2 => {\r\n      return func(db2);\r\n    });\r\n  }\r\n}\r\n","import Dexie from 'dexie';\r\nimport {AppTable} from '../shared/config';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\nimport {Portfolio2, PortfolioId} from '../../../api-public/models/portfolio';\r\n\r\nexport type BeforeDeletePortfolioFunc = (db: Dexie, portfolioId: PortfolioId) => Promise<any>;\r\n\r\n// @dynamic\r\nexport class DexiePortfoliosBaseHelper {\r\n\r\n  static getPortfolios2(): Promise<Portfolio2[]> {\r\n    const getPortfoliosTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.portfolios).toArray();\r\n    };\r\n\r\n    const tables = [AppTable.portfolios];\r\n    return DexieHelper.runTransactionDB(tables, getPortfoliosTransaction);\r\n  }\r\n\r\n  static getPortfolio2(dbIn: Dexie | null, portfolioId: PortfolioId): Promise<Portfolio2> {\r\n    const getPortfolioTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.portfolios).where('id').equals(portfolioId as PortfolioId).toArray()\r\n        .then((portfolios) => {\r\n          return portfolios[0];\r\n        });\r\n    };\r\n\r\n    if (dbIn) {\r\n      return getPortfolioTransaction(dbIn);\r\n    } else {\r\n      const tables = [AppTable.portfolios];\r\n      return DexieHelper.runTransactionDB(tables, getPortfolioTransaction);\r\n    }\r\n  }\r\n\r\n  static savePortfolio2(dbIn: Dexie | null, portfolio: Portfolio2): Promise<Portfolio2> {\r\n    const savePortfolioTransaction = (db: Dexie) => {\r\n      const params = Mapper.portfolioToDb(portfolio);\r\n      return db.table(AppTable.portfolios).put(params).then(id => {\r\n        return {...portfolio, id} as Portfolio2;\r\n      });\r\n    };\r\n\r\n    if (dbIn) {\r\n      return savePortfolioTransaction(dbIn);\r\n    } else {\r\n      const tables = [AppTable.portfolios];\r\n      return DexieHelper.runTransactionDB(tables, savePortfolioTransaction);\r\n    }\r\n  }\r\n\r\n  static deletePortfolio2(portfolioId: PortfolioId, beforeDeletePortfolioFunc: BeforeDeletePortfolioFunc): Promise<PortfolioId> {\r\n\r\n    const deletePortfolioTransaction = (db: Dexie) => {\r\n      return beforeDeletePortfolioFunc(db, portfolioId).then(() => {\r\n        return db.table(AppTable.portfolios).where('id').equals(portfolioId).delete()\r\n          .then(() => portfolioId);\r\n      });\r\n    };\r\n\r\n    const tables = [AppTable.portfolios, AppTable.assetsHistory, AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, deletePortfolioTransaction);\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n  static portfolioToDb(portfolio: Portfolio2): any {\r\n    const params = {...portfolio};\r\n    if (!params.id) {\r\n      // @ts-ignore\r\n      delete params.id;\r\n    }\r\n    return params;\r\n  }\r\n}\r\n","import {SrvOperation} from '../models';\r\nimport {Operation2} from '../../../../api-public/models/operations';\r\nimport {Exchange, OperationSource, OperationType} from '../../../../api-public/models/common-biz';\r\nimport {PortfolioId} from '../../../../api-public/models/portfolio';\r\n\r\n// @dynamic\r\nexport class OperationsMapper {\r\n  static operationsToClient(srvOperations: SrvOperation[]): Operation2[] {\r\n    return srvOperations.map(op => this.operationToClient(op));\r\n  }\r\n\r\n  static operationToClient(item: SrvOperation): Operation2 {\r\n    const ret: Operation2 = {\r\n      id: item.id as number,\r\n      date: item.date,\r\n      count: item.count,\r\n      ticker: item.ticker,\r\n      type: item.type as OperationType,\r\n      unitPrice: item.unitPrice,\r\n      currency: item.currency,\r\n      portfolioId: item.portfolioId,\r\n      exchange: item.exchange as Exchange,\r\n      // broker: item.broker as Broker,\r\n      isOn: item.isOn,\r\n      source: item.source as OperationSource\r\n    };\r\n    return ret;\r\n  }\r\n\r\n\r\n  static operationsToDb(operations: Operation2[]): SrvOperation[] {\r\n    return operations.map(op => this.operationToDb(op));\r\n  }\r\n\r\n  static operationToDb(operation: Operation2): SrvOperation {\r\n    const ret: SrvOperation = {\r\n      date: operation.date,\r\n      count: operation.count,\r\n      ticker: operation.ticker,\r\n      type: operation.type,\r\n      unitPrice: operation.unitPrice,\r\n      currency: operation.currency,\r\n      portfolioId: operation.portfolioId as PortfolioId,\r\n      exchange: operation.exchange,\r\n      // broker: operation.broker,\r\n      isOn: operation.isOn,\r\n      source: operation.source\r\n    };\r\n    if (operation.id) {\r\n      ret.id = operation.id;\r\n    }\r\n    return ret;\r\n  }\r\n}\r\n","import Dexie, {IndexableType, Table} from 'dexie';\r\nimport {AppTable} from '../shared/config';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {ItemsPage2, PageInfo, Sorting} from '../../../api-public/models/common';\r\nimport {\r\n  Operation2,\r\n  OperationId,\r\n  OperationsItemsPage,\r\n  OperationsTableField\r\n} from '../../../api-public/models/operations';\r\nimport {Exchange, OperationSource, OperationType} from '../../../api-public/models/common-biz';\r\nimport {SrvOperation} from './models';\r\nimport {OperationsMapper} from './helpers/operations.mapper';\r\n\r\n// @dynamic\r\nexport class DexieOperationsBaseHelper {\r\n\r\n  static getOperationsByIds(ids: OperationId[]): Promise<Operation2[]> {\r\n    const getOperationsByIdsTransaction = (db: Dexie): Promise<Operation2[]> => {\r\n      return db.table(AppTable.operations).bulkGet(ids);\r\n    };\r\n    const tables = [AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, getOperationsByIdsTransaction);\r\n  }\r\n\r\n  // caution all operation must be with same portfolio and ticker\r\n  static saveOperations2(operations: Operation2[]): Promise<Operation2[]> {\r\n\r\n    const saveOperationsTransaction = (db: Dexie): Promise<Operation2[]> => {\r\n      const params: any = OperationsMapper.operationsToDb(operations);\r\n      return db.table(AppTable.operations).bulkPut(params, {allKeys: true} )\r\n        .then((ids: IndexableType[]) => {\r\n          const ret = ids.map((id, index) => ({...operations[index], id: id as number}));\r\n          console.log('ret : ' + JSON.stringify(ret));\r\n          return ret;\r\n        });\r\n    };\r\n\r\n    const tables = [AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, saveOperationsTransaction);\r\n  }\r\n\r\n  static changeOperationIsOnStates(operationIds: OperationId[]): Promise<boolean> {\r\n\r\n    const changeStatesTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.operations).bulkGet(operationIds)\r\n        .then((ops) => {\r\n          const opsUpdates$ = ops.map(op => {\r\n            const isOn = !op.isOn;\r\n            return db.table(AppTable.operations).update(op.id, {isOn});\r\n          });\r\n          return Promise.all(opsUpdates$).then((test) => {\r\n            return true;\r\n          });\r\n        });\r\n    };\r\n\r\n    const tables = [AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, changeStatesTransaction);\r\n  }\r\n\r\n  static totalOperationsCount(db: Dexie): Promise<number> {\r\n    const coll: Table = db.table(AppTable.operations);\r\n    return coll.count();\r\n  }\r\n}\r\n","import {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {OperationId} from '../../../api-public/models/operations';\r\nimport Dexie from 'dexie';\r\nimport {AppTable} from '../shared/config';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\nimport {SrvOperation} from './models';\r\n\r\n// @dynamic\r\nexport class CopyOperationsToPortfolio {\r\n  static do(portfolioId: PortfolioId, operationIds: OperationId[], move?: boolean): Promise<boolean> {\r\n\r\n    const copyOperationsTransaction = (db: Dexie) => {\r\n      return Helper.getOpsByIds(db, operationIds)\r\n        .then((ops: SrvOperation[]) => {\r\n          return move ? this.doMove(db, ops, portfolioId) : this.doCopy(db, ops, portfolioId);\r\n        });\r\n    };\r\n\r\n    const tables = [AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, copyOperationsTransaction);\r\n  }\r\n\r\n  private static doCopy(db: Dexie, ops: SrvOperation[], portfolioId: PortfolioId): Promise<boolean> {\r\n    const newOps: SrvOperation[] = ops.map(op => ({...op, id: undefined, portfolioId}));\r\n    return db.table(AppTable.operations).bulkAdd(newOps).then(\r\n      (test) => {\r\n        return true;\r\n      }\r\n    );\r\n  }\r\n\r\n  private static doMove(db: Dexie, ops: SrvOperation[], portfolioId: PortfolioId): Promise<boolean> {\r\n    const opsUpdates$ = ops.map(op => {\r\n      return db.table(AppTable.operations).update(op.id, {portfolioId});\r\n    });\r\n    return Promise.all(opsUpdates$).then((test) => {\r\n      return true;\r\n    });\r\n  }\r\n\r\n}\r\n\r\nclass Helper {\r\n  static getOpsByIds(db: Dexie, operationIds: OperationId[]): Promise<SrvOperation[]> {\r\n    return db.table(AppTable.operations).bulkGet(operationIds);\r\n  }\r\n}\r\n","import Dexie, {IndexableType} from 'dexie';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {AppTable} from '../shared/config';\r\nimport {OperationId} from '../../../api-public/models/operations';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\n\r\n// @dynamic\r\nexport class DeleteOperations {\r\n\r\n  static do(portfolioId: PortfolioId, ids?: OperationId[]): Promise<any> {\r\n\r\n    const deleteOperationsTransaction = (db: Dexie) => {\r\n      return !!ids ? this.deleteByIds(db, ids) : this.deleteAll(db, portfolioId);\r\n    };\r\n\r\n    const tables = [AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, deleteOperationsTransaction);\r\n  }\r\n\r\n  static deleteByIds(db: Dexie, ids: OperationId[]): Promise<any> {\r\n    return db.table(AppTable.operations).bulkDelete(ids).then((test) => {\r\n      return test;\r\n    });\r\n  }\r\n\r\n  static deleteAll(db: Dexie, portfolioId: PortfolioId): Promise<any> {\r\n    return db.table(AppTable.operations).where('portfolioId').anyOf(portfolioId).delete()\r\n      .then((test) => {\r\n        return test;\r\n      });\r\n  }\r\n}\r\n\r\n/*\r\n\r\n  static deleteOperations2(dbIn: Dexie | null, portfolioId: PortfolioId,\r\n                           afterDeletePortfolioOperationsFunc: AfterDeletePortfolioOperationsFunc): Promise<number[]> {\r\n\r\n    const deleteOperationsTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.operations).where('portfolioId').anyOf(portfolioId).toArray()\r\n        .then((operations: Operation2[]) => {\r\n          const keys: IndexableType[] = operations.map(o => o.id as IndexableType);\r\n          return db.table(AppTable.operations).bulkDelete(keys)\r\n            .then(() => {\r\n              return afterDeletePortfolioOperationsFunc(db, portfolioId).then(() => keys as number[]);\r\n            });\r\n        });\r\n    };\r\n\r\n    if (!!dbIn) {\r\n      return deleteOperationsTransaction(dbIn);\r\n    } else {\r\n      const tables = [AppTable.assetsHistory, AppTable.operations, AppTable.portfolios];\r\n      return DexieHelper.runTransactionDB(tables, deleteOperationsTransaction);\r\n    }\r\n  }\r\n\r\n  static deleteOperation(operation: Operation2): Promise<OperationId> {\r\n    const deleteOperationTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.operations).where('id').equals(operation.id as OperationId).delete()\r\n        .then((deletedCount: number) => {\r\n          return operation.id as OperationId;\r\n        });\r\n    };\r\n\r\n    const tables = [AppTable.operations];\r\n    return DexieHelper.runTransactionDB(tables, deleteOperationTransaction);\r\n  }\r\n\r\n*/\r\n","import {\r\n  PortfolioId\r\n} from './portfolio';\r\nimport {Currency, Exchange, OperationSource, OperationType, SecuritySource} from './common-biz';\r\nimport {Security3} from './securities';\r\nimport {Dict, ItemsPage2, PartialRecord} from './common';\r\nimport {Ticker} from './assets-history';\r\n\r\nexport enum OperationsTableField { // exactly as table db names\r\n  date = 'date',\r\n  name = 'ticker',\r\n  id = 'id'\r\n}\r\n\r\nexport type OperationId = number;\r\n\r\nexport interface Operation2 {\r\n  id: OperationId | null;\r\n  date: Date;\r\n  type: OperationType;\r\n  ticker: string;\r\n  count: number;\r\n  unitPrice: number;\r\n  currency: Currency;\r\n  portfolioId: PortfolioId;\r\n  isOn: boolean;\r\n  source: OperationSource;\r\n  exchange: Exchange; // ?? пока оставлю все таки пока так для инфы, но кажись егго вообще надо на сервер перенести в секюрити\r\n}\r\n\r\nexport interface ParsedOperation {\r\n  operation: Operation2;\r\n  isin: string; // isin здесь потому что он постоянно в security, но его как-то надо перенести из парсеров\r\n  originTicker?: string; // если тикер откорректирвоан по исин, то тут старое значение, для визуальной проверки\r\n}\r\n\r\n// распарсенные операции как есть (чтобы показать превью, и секьюрити которые удалость найти)\r\nexport interface ParsedOperationsData {\r\n  operations: ParsedOperation[]; // с оригинальными тикерами сырое как выпарсено (для диагностики)\r\n  securitiesDict: PartialRecord<Ticker, Security3>; // словарь по оригинальными тикерам\r\n}\r\n\r\nexport type OperationsItemsPage = ItemsPage2<Operation2, OperationsTableField, null>;\r\n\r\n/*\r\nexport interface ParsedOperation extends Operation2 {\r\n  isin: string; // isin временно здесь потому что он постоянно в security\r\n  security: Security3 | null; // секьюрити, которое проверено что оно есть на внешнем апи (бирже),\r\n  и от него будут прокачиваться дневные цены\r\n}\r\n*/\r\n","import {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {PageInfo, Sorting} from '../../../api-public/models/common';\r\nimport Dexie, {Table} from 'dexie';\r\nimport {OperationsItemsPage, OperationsTableField} from '../../../api-public/models/operations';\r\nimport {AppTable} from '../shared/config';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\nimport {OperationsMapper} from './helpers/operations.mapper';\r\n\r\n// @dynamic\r\nexport class GetPagedOperationsHelper {\r\n\r\n  // https://dexie.org/docs/Collection/Collection.offset()#paged-or-queries\r\n  static getPagedOperations3(dbIn: Dexie | null, portfolioId: PortfolioId, pageInfo: PageInfo,\r\n                             sorting: Sorting<OperationsTableField>): Promise<OperationsItemsPage> {\r\n\r\n    const getPagedOperationsTransaction = (db: Dexie) => {\r\n      const coll: Table = db.table(AppTable.operations);\r\n      const sorting2: Sorting<OperationsTableField> = {...sorting, field: EnumHelper.getLegalField(sorting.field) };\r\n\r\n      const sortedPageData$ = sorting2.isAsc ? coll.orderBy(sorting2.field) : coll.orderBy(sorting2.field).reverse();\r\n      const sortedPageData2$ = sortedPageData$.filter(op => op.portfolioId === portfolioId);\r\n\r\n      const pageData$ = sortedPageData2$\r\n        .offset((pageInfo.page - 1) * pageInfo.pageSize).limit(pageInfo.pageSize);\r\n\r\n      const totalCount$ = coll.where('portfolioId').anyOf(portfolioId as PortfolioId).count();\r\n      return Promise.all([totalCount$, pageData$.toArray()]).then(([totalCount, data]) => {\r\n        const itemsPage: OperationsItemsPage = {\r\n          items: OperationsMapper.operationsToClient(data),\r\n          total: totalCount,\r\n          pagedParams: {\r\n            pageInfo: {...pageInfo},\r\n            searchParams: null,\r\n            sorting: sorting2\r\n          }\r\n        };\r\n        return itemsPage;\r\n      });\r\n    };\r\n\r\n    if (!!dbIn) {\r\n      return getPagedOperationsTransaction(dbIn);\r\n    } else {\r\n      const tables = [AppTable.operations];\r\n      return DexieHelper.runTransactionDB(tables, getPagedOperationsTransaction);\r\n    }\r\n  }\r\n\r\n}\r\n\r\nclass EnumHelper {\r\n  static getLegalField(field: OperationsTableField): OperationsTableField {\r\n    if (Object.values(OperationsTableField).includes(field)) {\r\n      return field;\r\n    }\r\n    return OperationsTableField.date;\r\n  }\r\n}\r\n","import {\r\n  DexieOperationsBaseHelper\r\n} from './operations-base.helper';\r\nimport Dexie from 'dexie';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport { ItemsPage2, PageInfo, Sorting} from '../../../api-public/models/common';\r\nimport {\r\n  Operation2,\r\n  OperationId,\r\n  OperationsItemsPage,\r\n  OperationsTableField\r\n} from '../../../api-public/models/operations';\r\nimport {CopyOperationsToPortfolio} from './copy-operations-to-portfolio';\r\nimport {DeleteOperations} from './delete-operations';\r\nimport {GetPagedOperationsHelper} from './get-paged-operations.helper';\r\n\r\n// @dynamic\r\nexport class DexieOperationsHelper {\r\n\r\n  static getPagedOperations2(db: Dexie | null,\r\n                             portfolioId: PortfolioId, pageInfo: PageInfo,\r\n                             sorting: Sorting<OperationsTableField>)\r\n    : Promise<OperationsItemsPage> {\r\n    return GetPagedOperationsHelper.getPagedOperations3(db, portfolioId, pageInfo, sorting);\r\n  }\r\n\r\n  static getOperationsByIds(ids: OperationId[]): Promise<Operation2[]> {\r\n    return DexieOperationsBaseHelper.getOperationsByIds(ids);\r\n  }\r\n\r\n  static saveOperations2(operations: Operation2[]): Promise<Operation2[]> {\r\n    return DexieOperationsBaseHelper.saveOperations2(operations);\r\n  }\r\n\r\n  static deleteOperations(portfolioId: PortfolioId, ids?: OperationId[]): Promise<any> {\r\n    return DeleteOperations.do(portfolioId, ids);\r\n  }\r\n\r\n  static changeOperationIsOnStates(operationIds: OperationId[]): Promise<boolean> {\r\n    return DexieOperationsBaseHelper.changeOperationIsOnStates(operationIds);\r\n  }\r\n\r\n  static copyOperationsToPortfolio(portfolioId: PortfolioId, operationIds: OperationId[], move?: boolean): Promise<boolean> {\r\n    return CopyOperationsToPortfolio.do(portfolioId, operationIds, move);\r\n  }\r\n}\r\n\r\n","import {Dict, ItemsPage2, PagedParams, PartialRecord} from './common';\r\nimport {Currency, DayString, Price} from './common-biz';\r\nimport {OperationId} from './operations';\r\nimport {SecurityEventId} from './securities-events';\r\nimport {SecuritiesTableField} from './securities';\r\nimport {PortfolioId} from './portfolio';\r\n\r\n// https://bestbets.atlassian.net/browse/MYEX-191\r\nexport type TickerCurrency = string; // 'GAZP|RUB'\r\nexport type CountPrice = string; // '12|234.45'\r\n\r\nexport interface AssetsHistoryAccountsData {\r\n  assetsDict: PartialRecord<TickerCurrency, CountPrice>;\r\n  balanceInRub: number;\r\n}\r\n\r\nexport enum AppliedObjectType { operation = 'o', event = 'e' }\r\n\r\nexport interface AppliedObjectData {\r\n  appliedCount: number;\r\n}\r\n\r\nexport interface AppliedObject {\r\n  id: OperationId | SecurityEventId | null;\r\n  type: AppliedObjectType;\r\n  data?: AppliedObjectData;\r\n}\r\n\r\nexport type AssetsHistoryItemId = number;\r\n\r\nexport interface AssetsHistoryItem2 {\r\n  id: AssetsHistoryItemId;\r\n  date: Date;\r\n  appliedObject: AppliedObject; // слепки хранятся и после операций и после событий\r\n  portfolioId: PortfolioId;\r\n  totalOperations: number;\r\n  accountsData: AssetsHistoryAccountsData;\r\n}\r\n\r\nexport interface TimeLineAsset {\r\n  ticker: string;\r\n  basePriceCurrency: Currency;\r\n  basePrice: number;\r\n  count: number;\r\n  price: number | undefined;\r\n  currency: Currency | undefined;\r\n}\r\n\r\nexport type IsPricesMerged = boolean;\r\nexport type PricesStatuses = PartialRecord<Ticker | Currency, IsPricesMerged>;\r\n\r\nexport interface TimeLineData {\r\n  daysData: TimeLineDayData[];\r\n  pricesStatuses: PricesStatuses; // for querying prices\r\n}\r\n\r\nexport interface AssetsByCurr { // активы в определенной валюте\r\n  count: number; // количество активов\r\n  value: number; // стоимость в валюте\r\n  valueInRub: number; // стоимость в рублях\r\n  priceInRub: number; // стоимость единицы валюты в рублях\r\n}\r\n\r\nexport interface AssetsTotals {\r\n  totalsByCurr: PartialRecord<Currency, AssetsByCurr>;\r\n  totalInRub: number;\r\n}\r\n\r\nexport interface TimeLineDayCalculations {\r\n  assetsTotals: AssetsTotals;\r\n}\r\n\r\nexport interface TimeLineDayData {\r\n  date: DayString;\r\n  totalOperations: number;\r\n  assets: TimeLineAsset[];\r\n  balanceInRub: number;\r\n\r\n  // это производные суммы, по сути дубликаты преведенных выше,\r\n  // но нужны чтобы один раз из рассчитать, (график, сводная таблица, таблица активов)\r\n  calculations?: TimeLineDayCalculations; // появляется при мердже цен\r\n}\r\n\r\nexport type Ticker = string;\r\n\r\nexport type PricesDictByTicker3 = PartialRecord<Ticker, PricesDictByDate3>;\r\nexport type PricesDictByDate3 = PartialRecord<DayString, Price>;\r\n\r\nexport enum PeriodScale { days = 'days', weeks = 'weeks', months = 'months' }\r\n\r\nexport enum AssetsHistoryTableField {\r\n  date = 'date'\r\n}\r\n\r\nexport interface AssetsHistorySearchParams {\r\n  portfolioId?: PortfolioId;\r\n  type?: AppliedObjectType;\r\n}\r\n\r\nexport type AssetsHistoryPagedParams = PagedParams<AssetsHistoryTableField, AssetsHistorySearchParams>;\r\nexport type AssetsHistoryIdsItemsPage = ItemsPage2<AssetsHistoryItemId, AssetsHistoryTableField, AssetsHistorySearchParams>;\r\n","import {\r\n  AppliedObject,\r\n  AssetsHistoryAccountsData,\r\n  AssetsHistoryItem2, AssetsHistoryItemId\r\n} from '../../../../api-public/models/assets-history';\r\nimport {PortfolioId} from '../../../../api-public/models/portfolio';\r\n\r\nexport interface SrvAssetHistoryItem {\r\n  id: number;\r\n  appliedObject: AppliedObject;\r\n  portfolioId: PortfolioId;\r\n  totalOperations: number;\r\n  date: Date;\r\n  accountsData: AssetsHistoryAccountsData;\r\n}\r\n\r\n// @dynamic\r\nexport class AssetsHistoryMapper {\r\n\r\n  static assetsHistoryToClientIds(srvItems: SrvAssetHistoryItem[]): AssetsHistoryItemId[] {\r\n    return srvItems.map((item) => {\r\n      return item.id;\r\n    });\r\n  }\r\n\r\n  static assetsHistoryToClient(srvItems: SrvAssetHistoryItem[]): AssetsHistoryItem2[] {\r\n    return srvItems.map((item) => {\r\n      const ret: AssetsHistoryItem2 = {\r\n        id: item.id,\r\n        date: item.date, appliedObject: item.appliedObject,\r\n        totalOperations: item.totalOperations, accountsData: {...item.accountsData},\r\n        portfolioId: item.portfolioId\r\n      };\r\n      return ret;\r\n    });\r\n  }\r\n\r\n  static assetsHistoryToServer(assetsHistory: AssetsHistoryItem2[]): SrvAssetHistoryItem[] {\r\n    return assetsHistory.map((item) => {\r\n      const ret: SrvAssetHistoryItem = {\r\n        id: undefined as any, // auto increment\r\n        portfolioId: item.portfolioId,\r\n        appliedObject: item.appliedObject, // operationId: item.operationId,\r\n        totalOperations: item.totalOperations,\r\n        date: item.date, accountsData: item.accountsData,\r\n      };\r\n      return ret;\r\n    });\r\n  }\r\n}\r\n","import Dexie, {IndexableType, Table} from 'dexie';\r\nimport {AppTable} from '../shared/config';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\nimport {Operation2, OperationId} from '../../../api-public/models/operations';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {\r\n  AssetsHistoryItem2, AssetsHistoryItemId, AssetsHistoryTableField\r\n} from '../../../api-public/models/assets-history';\r\nimport {AssetsHistoryMapper, SrvAssetHistoryItem} from './helpers/mapper';\r\n\r\n// @dynamic\r\nexport class DexieAssetsHistoryBaseHelper {\r\n\r\n  static saveAssetsHistory(assetsHistory: AssetsHistoryItem2[]): Promise<AssetsHistoryItem2[]> {\r\n\r\n    const srvAssetsHistory: SrvAssetHistoryItem[] = AssetsHistoryMapper.assetsHistoryToServer(assetsHistory);\r\n\r\n    const saveAssetsTransaction = (db: Dexie) => {\r\n        return db.table(AppTable.assetsHistory).bulkPut(srvAssetsHistory, {allKeys: true})\r\n          .then((ids: IndexableType[]) => {\r\n            return ids.map((id, index) => ({...assetsHistory[index], id: id as number}));\r\n          });\r\n    };\r\n\r\n    return DexieHelper.runTransactionDB([AppTable.assetsHistory], saveAssetsTransaction);\r\n  }\r\n\r\n  static deleteAssetsHistory(dbIn: Dexie | null, portfolioId: PortfolioId): Promise<any> {\r\n\r\n    const getPortfolioAssetsHistory = (db: Dexie): Promise<Operation2[]> => {\r\n      return db.table(AppTable.assetsHistory).where('portfolioId').anyOf(portfolioId).toArray();\r\n    };\r\n\r\n    const deletePortfolioAssetsHistory = (db: Dexie, operations: Operation2[]): Promise<any> => {\r\n      const keys: IndexableType[] = operations.map(o => o.id as IndexableType);\r\n      return db.table(AppTable.assetsHistory).bulkDelete(keys);\r\n    };\r\n\r\n    const deleteHistoryTransaction = (db: Dexie) => {\r\n      return getPortfolioAssetsHistory(db).then((operations: Operation2[]) => {\r\n        return deletePortfolioAssetsHistory(db, operations);\r\n      });\r\n    };\r\n\r\n    if (!!dbIn) {\r\n      return deleteHistoryTransaction(dbIn);\r\n    } else {\r\n      return DexieHelper.runTransactionDB([AppTable.assetsHistory], deleteHistoryTransaction);\r\n    }\r\n  }\r\n\r\n  static getAssetsHistory(portfolioId: PortfolioId): Promise<AssetsHistoryItem2[]> {\r\n\r\n    const getAssetsTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.assetsHistory).where('portfolioId').anyOf(portfolioId).toArray()\r\n        .then((srvItems: SrvAssetHistoryItem[]) => {\r\n          return AssetsHistoryMapper.assetsHistoryToClient(srvItems);\r\n        });\r\n    };\r\n\r\n    return DexieHelper.runTransactionDB([AppTable.assetsHistory], getAssetsTransaction);\r\n  }\r\n\r\n  static getFullAssetsHistories(): Promise<AssetsHistoryItem2[]> {\r\n\r\n    const getAssetsTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.assetsHistory).orderBy(AssetsHistoryTableField.date).reverse().toArray()\r\n        .then((srvItems: SrvAssetHistoryItem[]) => {\r\n          return AssetsHistoryMapper.assetsHistoryToClient(srvItems);\r\n        });\r\n    };\r\n\r\n    return DexieHelper.runTransactionDB([AppTable.assetsHistory], getAssetsTransaction);\r\n  }\r\n\r\n  static getAssetsHistoryItemsByIds(ids: AssetsHistoryItemId[]): Promise<AssetsHistoryItem2[]> {\r\n    const getAssetsTransaction = (db: Dexie) => {\r\n      return db.table(AppTable.assetsHistory).where('id').anyOf(ids).toArray()\r\n        .then((srvItems: SrvAssetHistoryItem[]) => {\r\n          return AssetsHistoryMapper.assetsHistoryToClient(srvItems);\r\n        });\r\n    };\r\n\r\n    return DexieHelper.runTransactionDB([AppTable.assetsHistory], getAssetsTransaction);\r\n  }\r\n\r\n  static totalItemsCount(db: Dexie): Promise<number> {\r\n    const coll: Table = db.table(AppTable.assetsHistory);\r\n    return coll.count();\r\n  }\r\n}\r\n\r\n","// @dynamic\r\nimport {Portfolio2, PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {PageInfo, Sorting} from '../../../api-public/models/common';\r\nimport {\r\n  AssetsHistoryIdsItemsPage, AssetsHistoryItem2,\r\n  AssetsHistoryPagedParams, AssetsHistorySearchParams,\r\n  AssetsHistoryTableField\r\n} from '../../../api-public/models/assets-history';\r\nimport {AppTable} from '../shared/config';\r\nimport {DexieHelper} from '../shared/dexie.helper';\r\nimport Dexie, {Collection, PromiseExtended, Table} from 'dexie';\r\nimport {AssetsHistoryMapper} from './helpers/mapper';\r\n\r\nexport class GetPagedHistoryHelper {\r\n\r\n  static getPagedAssetsHistory(params: AssetsHistoryPagedParams): Promise<AssetsHistoryIdsItemsPage> {\r\n\r\n    const getPagedAssetsHistoryTransaction = (db: Dexie): Promise<AssetsHistoryIdsItemsPage> => {\r\n\r\n      const table: Table = db.table(AppTable.assetsHistory);\r\n\r\n      // order\r\n      const sorting = params.sorting;\r\n      let coll: Collection = sorting.isAsc ? table.orderBy(sorting.field) : table.orderBy(sorting.field).reverse();\r\n\r\n      // where (https://github.com/dexie/Dexie.js/issues/169)\r\n      coll = coll.and(item => FilterHelper.isLegal(item, params.searchParams)); // filter also works\r\n\r\n      // count\r\n      const totalCount$: PromiseExtended = coll.count();\r\n\r\n      // pagination\r\n      const pageInfo = params.pageInfo;\r\n      const pageData$ = coll.offset((pageInfo.page - 1) * pageInfo.pageSize).limit(pageInfo.pageSize);\r\n\r\n      return Promise.all([totalCount$, pageData$.toArray()]).then(([totalCount, data]) => {\r\n        const itemsPage: AssetsHistoryIdsItemsPage = {\r\n          items: AssetsHistoryMapper.assetsHistoryToClientIds(data),\r\n          total: totalCount,\r\n          pagedParams: {\r\n            pageInfo: {...params.pageInfo},\r\n            searchParams: {...params.searchParams},\r\n            sorting: {...sorting}\r\n          }\r\n        };\r\n        return itemsPage;\r\n      });\r\n    };\r\n\r\n    const tables = [AppTable.assetsHistory];\r\n    return DexieHelper.runTransactionDB(tables, getPagedAssetsHistoryTransaction);\r\n  }\r\n}\r\n\r\nclass FilterHelper {\r\n  static isLegal(item: AssetsHistoryItem2, searchParams: AssetsHistorySearchParams): boolean {\r\n    const isPortfolioLegal = !searchParams?.portfolioId ? true : item.portfolioId === searchParams.portfolioId;\r\n    const isTypeLegal = !searchParams?.type ? true : item.appliedObject.type === searchParams.type;\r\n    return isPortfolioLegal && isTypeLegal;\r\n  }\r\n}\r\n\r\n","import Dexie, {IndexableType, Table} from 'dexie';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {\r\n  AppliedObject,\r\n  AssetsHistoryAccountsData,\r\n  AssetsHistoryItem2, AssetsHistoryIdsItemsPage, AssetsHistoryItemId, AssetsHistoryPagedParams,\r\n} from '../../../api-public/models/assets-history';\r\nimport {PageInfo} from '../../../api-public/models/common';\r\nimport {Observable} from 'rxjs';\r\nimport {DexieAssetsHistoryBaseHelper} from './assets-history-base.helper';\r\nimport {GetPagedHistoryHelper} from './get-paged-history.helper';\r\n\r\n// @dynamic\r\nexport class DexieAssetsHistoryHelper {\r\n\r\n  static saveAssetsHistory(assetsHistory: AssetsHistoryItem2[]): Promise<AssetsHistoryItem2[]> {\r\n    return DexieAssetsHistoryBaseHelper.saveAssetsHistory(assetsHistory);\r\n  }\r\n\r\n  static deleteAssetsHistory(dbIn: Dexie | null, portfolioId: PortfolioId): Promise<any> {\r\n    return DexieAssetsHistoryBaseHelper.deleteAssetsHistory(dbIn, portfolioId);\r\n  }\r\n\r\n  static getAssetsHistory(portfolioId: PortfolioId): Promise<AssetsHistoryItem2[]> {\r\n    return DexieAssetsHistoryBaseHelper.getAssetsHistory(portfolioId);\r\n  }\r\n\r\n  static getFullAssetsHistories(): Promise<AssetsHistoryItem2[]> {\r\n    return DexieAssetsHistoryBaseHelper.getFullAssetsHistories();\r\n  }\r\n\r\n  static totalItemsCount(db: Dexie): Promise<number> {\r\n    return DexieAssetsHistoryBaseHelper.totalItemsCount(db);\r\n  }\r\n\r\n  static getPagedAssetsHistory(params: AssetsHistoryPagedParams): Promise<AssetsHistoryIdsItemsPage> {\r\n    return GetPagedHistoryHelper.getPagedAssetsHistory(params);\r\n  }\r\n\r\n  static getAssetsHistoryItemsByIds(ids: AssetsHistoryItemId[]): Promise<AssetsHistoryItem2[]> {\r\n    return DexieAssetsHistoryBaseHelper.getAssetsHistoryItemsByIds(ids);\r\n  }\r\n}\r\n","import Dexie from 'dexie';\r\nimport {BeforeDeletePortfolioFunc, DexiePortfoliosBaseHelper} from './portfolios-base.helper';\r\nimport {DexieOperationsHelper} from '../operations/operations.helper';\r\nimport {Portfolio2, PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {DexieAssetsHistoryHelper} from '../assets-history/assets-history.helper';\r\n\r\n// @dynamic\r\nexport class DexiePortfoliosHelper {\r\n\r\n  static getPortfolios(): Promise<Portfolio2[]> {\r\n    return DexiePortfoliosBaseHelper.getPortfolios2();\r\n  }\r\n\r\n  static getPortfolio(db: Dexie | null, portfolioId: PortfolioId): Promise<Portfolio2> {\r\n    return DexiePortfoliosBaseHelper.getPortfolio2(db, portfolioId);\r\n  }\r\n\r\n  static savePortfolio(db: Dexie | null, portfolio: Portfolio2): Promise<Portfolio2> {\r\n    return DexiePortfoliosBaseHelper.savePortfolio2(db, portfolio);\r\n  }\r\n\r\n  static deletePortfolio(portfolioId: PortfolioId): Promise<PortfolioId> {\r\n    return DexiePortfoliosBaseHelper.deletePortfolio2(portfolioId, Helper.beforeDeletePortfolioFunc);\r\n  }\r\n}\r\n\r\nclass Helper {\r\n  static beforeDeletePortfolioFunc: BeforeDeletePortfolioFunc = (db: Dexie, portfolioId: PortfolioId) => {\r\n    return DexieOperationsHelper.deleteOperations(portfolioId).then(() => {\r\n      return DexieAssetsHistoryHelper.deleteAssetsHistory(null, portfolioId);\r\n    });\r\n  }\r\n}\r\n","import {Injectable, NgZone} from '@angular/core';\r\nimport {Observable, Observer} from 'rxjs';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiPromise2Service {\r\n  constructor(private ngZone: NgZone) {\r\n  }\r\n\r\n  fromPromise<T>(promise: Promise<T>): Observable<T> {\r\n    return new Observable((observer: Observer<T>) => {\r\n      promise\r\n        .then((data: T) => {\r\n          this.ngZone.run(() => {\r\n            observer.next(data);\r\n            observer.complete();\r\n          });\r\n        })\r\n        .catch((err: any) => {\r\n          this.ngZone.run(() => {\r\n            observer.error(err);\r\n          });\r\n        });\r\n    });\r\n  }\r\n}\r\n","import {Observable, of} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\nimport Dexie from 'dexie';\r\nimport {ApiPromise2Service} from '../shared/promise-api2.service';\r\nimport {Portfolio2, PortfolioId} from '../api-public/models/portfolio';\r\nimport {DexiePortfoliosHelper} from '../store-api/dexie-db/portfolios/portfolios.helper';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class PortfoliosStore {\r\n  constructor(private apiPromise2Service: ApiPromise2Service) {\r\n  }\r\n\r\n  getPortfolios(): Observable<Portfolio2[]> {\r\n    const promise = DexiePortfoliosHelper.getPortfolios();\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  getPortfolio(db: Dexie | null, portfolioId: PortfolioId): Observable<Portfolio2> {\r\n    const promise = DexiePortfoliosHelper.getPortfolio(db, portfolioId);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  savePortfolio(db: Dexie | null, portfolio: Portfolio2): Observable<Portfolio2> {\r\n    const promise = DexiePortfoliosHelper.savePortfolio(db, portfolio);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  deletePortfolio(portfolio: Portfolio2): Observable<PortfolioId> {\r\n    const promise = DexiePortfoliosHelper.deletePortfolio(portfolio.id as PortfolioId);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n}\r\n\r\n","import {Observable} from 'rxjs';\r\nimport {Portfolio2, PortfolioId} from '../models/portfolio';\r\nimport {Injectable} from '@angular/core';\r\nimport {PortfoliosStore} from '../../store/portfolios.store';\r\n\r\n@Injectable()\r\nexport class ApiPortfoliosService {\r\n  constructor(private portfoliosStore: PortfoliosStore) {\r\n  }\r\n\r\n  getPortfolios(): Observable<Portfolio2[]> {\r\n    return this.portfoliosStore.getPortfolios();\r\n  }\r\n\r\n  savePortfolio(portfolio: Portfolio2): Observable<Portfolio2> {\r\n    return this.portfoliosStore.savePortfolio(null, portfolio);\r\n  }\r\n\r\n  deletePortfolio(portfolio: Portfolio2): Observable<PortfolioId> {\r\n    return this.portfoliosStore.deletePortfolio(portfolio);\r\n  }\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiPromise2Service} from '../shared/promise-api2.service';\r\nimport {Operation2, OperationId, OperationsItemsPage, OperationsTableField} from '../api-public/models/operations';\r\nimport {DexieOperationsHelper} from '../store-api/dexie-db/operations/operations.helper';\r\nimport {PortfolioId} from '../api-public/models/portfolio';\r\nimport {PageInfo, Sorting} from '../api-public/models/common';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class OperationsStore {\r\n  constructor(private apiPromise2Service: ApiPromise2Service) {\r\n  }\r\n\r\n  getPagedOperations2(portfolioId: PortfolioId, pageInfo: PageInfo, sorting: Sorting<OperationsTableField>)\r\n    : Observable<OperationsItemsPage> {\r\n    const promise = DexieOperationsHelper.getPagedOperations2(null, portfolioId, pageInfo, sorting);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  getOperationsByIds(ids: OperationId[]): Observable<Operation2[]> {\r\n    const promise = DexieOperationsHelper.getOperationsByIds(ids);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  saveOperations2(operations: Operation2[]): Observable<Operation2[]> {\r\n    const promise = DexieOperationsHelper.saveOperations2(operations);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  changeOperationIsOnStates(operationIds: OperationId[]): Observable<boolean> {\r\n    const promise = DexieOperationsHelper.changeOperationIsOnStates(operationIds);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  copyOperationsToPortfolio(portfolioId: PortfolioId, operationIds: OperationId[], move?: boolean): Observable<boolean> {\r\n    const promise = DexieOperationsHelper.copyOperationsToPortfolio(portfolioId, operationIds, move);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  deleteOperations(portfolioId: PortfolioId, ids?: OperationId[]): Observable<any> {\r\n    const promise = DexieOperationsHelper.deleteOperations(portfolioId, ids);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n}\r\n\r\n/*\r\n  deleteOperation(operation: Operation2): Observable<OperationId> {\r\n    const promise = DexieOperationsHelper.deleteOperation(operation);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  deleteAll(portfolioId: PortfolioId): Observable<any> {\r\n    const promise = DexieOperationsHelper.deleteOperations(null, portfolioId);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n*/\r\n\r\n","import moment from 'moment';\r\nimport {DayString} from '../models/common-biz';\r\nimport { Moment } from 'moment';\r\n\r\n// @dynamic\r\nexport class DateHelper {\r\n\r\n  static momentToDayString(m: Moment): DayString {\r\n    return m.format('YYYY-MM-DD');\r\n  }\r\n\r\n  static dateToDayString(date: Date): DayString {\r\n    return this.momentToDayString(moment(date));\r\n  }\r\n\r\n  static dayStringToDate(dayString: DayString): Date {\r\n    return this.dayStringToMoment(dayString).toDate();\r\n  }\r\n\r\n  static dayStringToMoment(dayString: DayString): Moment {\r\n    return moment(dayString);\r\n  }\r\n\r\n  static isValidDate(date: Date | any): boolean {\r\n    if (Object.prototype.toString.call(date) === '[object Date]') {\r\n      // it is a date\r\n      if (isNaN(date)) { // d.getTime() or d.valueOf() will also work\r\n        // date object is not valid\r\n        return false;\r\n      } else {\r\n        // date object is valid\r\n        return true;\r\n      }\r\n    } else {\r\n      // not a date object\r\n      return false;\r\n    }\r\n    return false;\r\n  }\r\n}\r\n","import {AssetsHistoryItem2} from '../../../api-public/models/assets-history';\r\nimport {DateHelper} from '../../../api-public/helpers/date.helper';\r\nimport {DayString} from '../../../api-public/models/common-biz';\r\n\r\n// @dynamic\r\nexport class AssetsHistory2Helper {\r\n\r\n  private static assetsHistory: AssetsHistoryItem2[];\r\n  private static assetsHistoryIndex: number;\r\n\r\n  static init(assetsHistory: AssetsHistoryItem2[]): void {\r\n    this.assetsHistoryIndex = 0;\r\n    this.assetsHistory = [...assetsHistory].sort((a, b) => a.date < b.date ? -1 : 1);\r\n  }\r\n\r\n  static getThatDayHistoryItem(day: DayString): AssetsHistoryItem2 | null {\r\n    let item: AssetsHistoryItem2 = this.assetsHistory[this.assetsHistoryIndex];\r\n\r\n    if (!!item && day < DateHelper.dateToDayString(item.date)) {\r\n      return null;\r\n    }\r\n\r\n    let shifted = false;\r\n    while (!!item && day >= DateHelper.dateToDayString(item.date)) {\r\n      this.assetsHistoryIndex++;\r\n      shifted = true;\r\n      item = this.assetsHistory[this.assetsHistoryIndex];\r\n    }\r\n\r\n    if (shifted) {\r\n      this.assetsHistoryIndex--;\r\n      item = this.assetsHistory[this.assetsHistoryIndex];\r\n    }\r\n    return item;\r\n  }\r\n\r\n  // тест 72 - когда последняя цена закончилась, а операция была позже (не реальная вроде ситуаця,\r\n  // но на всякий быстрый фикс)\r\n  /*static getRestHistory(): AssetsHistoryItem2[] {\r\n    return this.assetsHistory.slice(this.assetsHistoryIndex);\r\n  }*/\r\n}\r\n","import {PartialRecord} from './common';\r\nimport {Ticker} from './assets-history';\r\n\r\n// export enum PricesScale { month = 'month', halfYear = 'halfYear' }\r\n\r\n// 1mo 3mo 6mo 1y 5y max\r\nexport enum PricesScale {\r\n  month = 'month',\r\n  months3 = 'month3',\r\n  months6 = 'months6',\r\n  year = 'year',\r\n  years5 = 'years5',\r\n  max = 'max'\r\n}\r\n\r\nexport enum OperationSource {\r\n  tinkoffReports = 'tink',\r\n  sberReports = 'sber',\r\n  bksReports = 'bks',\r\n  alfaReports = 'alfa',\r\n  appReport = 'app',\r\n  manual = 'manual'\r\n}\r\n\r\nexport enum Exchange {\r\n  moex = 'moex', // московская биржа\r\n  spb = 'spb', // санкт-петербуржская биржа\r\n  vnb = 'vnb' // внебиржевой рынок\r\n}\r\n\r\nexport enum OperationType { buy = 'buy', sell = 'sell' }\r\n\r\nexport enum Currency { rub = 'RUB', usd = 'USD', eur = 'EUR', cny = 'CNY', hkd = 'HKD', undefined = 'undefined' }\r\n\r\nexport enum SecuritySource { moexApi = 'm', yahooApi = 'y', undefined = '-'}\r\n\r\nexport type DayString = string; // format: 2021-12-30\r\n\r\nexport interface Price { amount: number; currency: Currency; }\r\n\r\nexport interface CurrencyMap {\r\n  currencyFromTicker: PartialRecord<Ticker, Currency>;\r\n  tickerFromCurrency: PartialRecord<Currency, Ticker>;\r\n}\r\n\r\nexport const currencyMap: CurrencyMap = {\r\n  currencyFromTicker: {\r\n    CNY_RUB: Currency.cny,\r\n    USD_RUB: Currency.usd,\r\n    HKD_RUB: Currency.hkd,\r\n    EUR_RUB: Currency.eur\r\n  },\r\n  tickerFromCurrency: {\r\n    [Currency.cny]: 'CNY_RUB',\r\n    [Currency.usd]: 'USD_RUB',\r\n    [Currency.hkd]: 'HKD_RUB',\r\n    [Currency.eur]: 'EUR_RUB'\r\n  }\r\n};\r\n","import {CountPrice, Ticker, TickerCurrency} from '../models/assets-history';\r\nimport {Currency} from '../models/common-biz';\r\n\r\nexport class TickerCurrencyMapper {\r\n\r\n  static toTicker(tickerCurrency: TickerCurrency): Ticker | undefined {\r\n    const parts: string[] = tickerCurrency.split('|');\r\n    return parts[0];\r\n  }\r\n\r\n  static toCurrency(countPrice: CountPrice): Currency | undefined {\r\n    const parts: string[] = countPrice.split('|');\r\n    if (parts[1]) {\r\n      return parts[1] as Currency;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  static toTickerCurrency(ticker: Ticker, currency: Currency): TickerCurrency {\r\n    return `${ticker}|${currency}`;\r\n  }\r\n\r\n  static replaceTicker(tickerCurrency: TickerCurrency, newTicker: Ticker): TickerCurrency {\r\n    const currency = this.toCurrency(tickerCurrency);\r\n    if (currency) {\r\n      return this.toTickerCurrency(newTicker, currency);\r\n    }\r\n    return tickerCurrency;\r\n  }\r\n\r\n  static replaceCurrency(tickerCurrency: TickerCurrency, newCurrency: Currency): TickerCurrency {\r\n    const ticker = this.toTicker(tickerCurrency);\r\n    if (ticker) {\r\n      return this.toTickerCurrency(ticker, newCurrency);\r\n    }\r\n    return tickerCurrency;\r\n  }\r\n}\r\n","import {CountPrice} from '../models/assets-history';\r\n\r\ntype ChangeNumberFunc = (prev: number) => number;\r\n\r\n// @dynamic\r\nexport class CountPriceMapper {\r\n  static toCount(countPrice: CountPrice): number | undefined {\r\n    const parts: string[] = countPrice.split('|');\r\n    if (parts[0]) {\r\n      return parseFloat(parts[0]);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  static toPrice(countPrice: CountPrice): number | undefined {\r\n    const parts: string[] = countPrice.split('|');\r\n    if (parts[1]) {\r\n      return parseFloat(parts[1]);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  static toReserveCount(countPrice: CountPrice): number | undefined {\r\n    const parts: string[] = countPrice.split('|');\r\n    if (parts[2]) {\r\n      return parseFloat(parts[2]);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n\r\n  private static changePrice(countPrice: CountPrice, changeFunc: ChangeNumberFunc): CountPrice | undefined {\r\n    return this.changeCountAndPrice(countPrice, null, changeFunc);\r\n  }\r\n\r\n  static toCountPrice(count: number, price: number, reserveCount?: number): CountPrice {\r\n    const ret = `${count}|${price}`;\r\n    if (reserveCount !== undefined) {\r\n      return ret + `|${reserveCount}`;\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  static setReserveCount(countPrice: CountPrice, reserveCount: number): CountPrice | undefined {\r\n    const prevCount = this.toCount(countPrice);\r\n    const prevPrice = this.toPrice(countPrice);\r\n    if (prevCount !== undefined && prevPrice !== undefined) {\r\n      return this.toCountPrice(prevCount, prevPrice, reserveCount);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  static changeCount(countPrice: CountPrice, changeFunc: ChangeNumberFunc): CountPrice | undefined {\r\n    return this.changeCountAndPrice(countPrice, changeFunc, null);\r\n  }\r\n\r\n  private static changeCountAndPrice(countPrice: CountPrice,\r\n                                     changeCountFunc: ChangeNumberFunc | null,\r\n                                     changePriceFunc: ChangeNumberFunc | null): CountPrice | undefined {\r\n    const prevCount = this.toCount(countPrice);\r\n    const prevPrice = this.toPrice(countPrice);\r\n    if (prevCount !== undefined && prevPrice !== undefined) {\r\n      const newCount = changeCountFunc ? changeCountFunc(prevCount) : prevCount;\r\n      const newPrice = changePriceFunc ? changePriceFunc(prevPrice) : prevPrice;\r\n      return this.toCountPrice(newCount, newPrice);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  static subtractPrice(countPrice: CountPrice, price: number): CountPrice {\r\n    const subtract = (prevPrice: number) => prevPrice - price;\r\n    return this.changePrice(countPrice, subtract) || countPrice;\r\n  }\r\n\r\n  static subtractCount(countPrice: CountPrice, count: number): CountPrice {\r\n    const subtract = (prevCount: number) => prevCount - count;\r\n    return this.changeCount(countPrice, subtract) || countPrice;\r\n  }\r\n\r\n  static addCount(countPrice: CountPrice, count: number): CountPrice {\r\n    const subtract = (prevCount: number) => prevCount + count;\r\n    return this.changeCount(countPrice, subtract) || countPrice;\r\n  }\r\n\r\n  static applyRatio(countPrice: CountPrice, ratio: number): CountPrice | undefined {\r\n\r\n    const changeCountFunc: ChangeNumberFunc = (prev: number) => prev * ratio; // не округлять, лучше дальше\r\n    const changePriceFunc: ChangeNumberFunc = (prev: number) => prev / ratio;\r\n\r\n    return this.changeCountAndPrice(countPrice, changeCountFunc, changePriceFunc);\r\n  }\r\n\r\n  static applyRate(countPrice: CountPrice, rate: number): CountPrice | undefined {\r\n    const changePriceFunc: ChangeNumberFunc = (prev: number) => prev * rate;\r\n    return this.changeCountAndPrice(countPrice, null, changePriceFunc);\r\n  }\r\n}\r\n","import {\r\n  AssetsHistoryItem2,\r\n  CountPrice,\r\n  // CurrencyAccount,\r\n  IsPricesMerged,\r\n  PricesStatuses,\r\n  Ticker,\r\n  TickerCurrency,\r\n  TimeLineAsset,\r\n  TimeLineData,\r\n  TimeLineDayData\r\n} from '../../api-public/models/assets-history';\r\nimport {AssetsHistory2Helper} from './helpers/assets-history2.helper';\r\nimport moment from 'moment';\r\nimport {DateHelper} from '../../api-public/helpers/date.helper';\r\nimport {Currency, DayString, PricesScale} from '../../api-public/models/common-biz';\r\nimport {PartialRecord} from '../../api-public/models/common';\r\nimport {TickerCurrencyMapper} from '../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceMapper} from '../../api-public/mappers/count-price.mapper';\r\n\r\ninterface Aggregators {\r\n  tickersDict: PricesStatuses;\r\n  // currenciesDict: PartialRecord<Currency, CurrencyAccount>;\r\n}\r\n\r\n// @dynamic\r\nexport class AssetsTimeline2Helper {\r\n\r\n  static assetsHistoryToTimeLine(assetsHistory: AssetsHistoryItem2[], scale: PricesScale): TimeLineData {\r\n    AssetsHistory2Helper.init(assetsHistory);\r\n    const pricesDates: DayString[] = Mapper.pricesDates2(scale);\r\n\r\n    const aggregators: Aggregators = { tickersDict: {}, /*currenciesDict: {}*/ };\r\n\r\n    const daysData: TimeLineDayData[] = pricesDates.map((dayString) => {\r\n      return this.priceDayToTimeLineDayData(dayString, aggregators);\r\n    });\r\n\r\n    const ret: TimeLineData = {\r\n      daysData, pricesStatuses: this.mergeAggregators(aggregators)\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static priceDayToTimeLineDayData(dayString: DayString, aggregators: Aggregators): TimeLineDayData {\r\n    const thatDayHistoryItem: AssetsHistoryItem2 | null = AssetsHistory2Helper.getThatDayHistoryItem(dayString);\r\n    const assets: TimeLineAsset[] = Mapper.historyItemToTimeLineDataItems(thatDayHistoryItem, aggregators);\r\n    // const currenciesAccounts: PartialRecord<Currency, CurrencyAccount> = Mapper.historyCurrsToTimelineCurrs(thatDayHistoryItem);\r\n\r\n    const timeLineItem: TimeLineDayData = {\r\n      date: dayString,\r\n      totalOperations: (thatDayHistoryItem || {totalOperations: 0}).totalOperations,\r\n      assets, balanceInRub: thatDayHistoryItem?.accountsData.balanceInRub || 0 // currenciesAccounts\r\n    };\r\n\r\n    // aggregators.currenciesDict = {...aggregators.currenciesDict, ...timeLineItem.currenciesAccounts};\r\n    return timeLineItem;\r\n  }\r\n\r\n  private static mergeAggregators(aggregators: Aggregators): PricesStatuses {\r\n    const ret: PartialRecord<Ticker | Currency, IsPricesMerged> = {\r\n      // ...Object.keys(aggregators.currenciesDict).reduce((acc, curr) => ({...acc, [curr]: false}), {}),\r\n      ...aggregators.tickersDict,\r\n    };\r\n    return ret;\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n\r\n  /*static historyCurrsToTimelineCurrs(thatDayHistoryItem: AssetsHistoryItem2 | null): PartialRecord<Currency, CurrencyAccount> {\r\n\r\n    const currenciesAccounts: PartialRecord<Currency, number> = thatDayHistoryItem?.accountsData?.currenciesAccounts || {};\r\n\r\n    const ret: PartialRecord<Currency, CurrencyAccount> = {};\r\n    Object.keys(currenciesAccounts).forEach((key) => {\r\n      const currency: Currency = key as Currency;\r\n      ret[currency] = { amount: currenciesAccounts[currency] as number, fixInRub: undefined };\r\n    });\r\n    return ret;\r\n  }*/\r\n\r\n  static historyItemToTimeLineDataItems(thatDayHistoryItem: AssetsHistoryItem2 | null,\r\n                                        aggregators: Aggregators): TimeLineAsset[] {\r\n    const assetsDict: PartialRecord<TickerCurrency, CountPrice> =\r\n      thatDayHistoryItem?.accountsData?.assetsDict || {};\r\n\r\n    return Object.keys(assetsDict).map((tickerCurrency: TickerCurrency) => {\r\n      return this.assetsDictItemToTimeLineAsset(tickerCurrency, assetsDict[tickerCurrency] as any, aggregators); // !!!!\r\n    }).filter(i => !!i);\r\n  }\r\n\r\n  private static assetsDictItemToTimeLineAsset(tickerCurrency: TickerCurrency,\r\n                                               countPrice: CountPrice,\r\n                                               aggregators: Aggregators): TimeLineAsset {\r\n    const ticker = TickerCurrencyMapper.toTicker(tickerCurrency) || 'undefined';\r\n    const basePriceCurrency = TickerCurrencyMapper.toCurrency(tickerCurrency) || Currency.undefined;\r\n    const count = CountPriceMapper.toCount(countPrice) || 0;\r\n    const basePrice = CountPriceMapper.toPrice(countPrice) || 0;\r\n\r\n    aggregators.tickersDict[ticker] = false;\r\n    const ret: TimeLineAsset = {\r\n      ticker, count, basePriceCurrency, basePrice,\r\n      price: undefined,\r\n      currency: undefined\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static pricesDates2(scale: PricesScale): DayString[] {\r\n    const monthsAgo = {\r\n      [PricesScale.max]: 12 * 50,\r\n      [PricesScale.years5]: 12 * 5,\r\n      [PricesScale.year]: 12,\r\n      [PricesScale.months6]: 6,\r\n      [PricesScale.months3]: 3,\r\n      [PricesScale.month]: 1\r\n    };\r\n\r\n    const now = moment();\r\n    const currentDate = moment().subtract(monthsAgo[scale], 'month'); // todo: да, ошибка но других интервалов пока еще нигде нет\r\n    const ret: DayString[] = [];\r\n    while (now.diff(currentDate, 'days') >= 0) { // until today >=\r\n      const ds: DayString = DateHelper.dateToDayString(currentDate.toDate());\r\n      ret.push(ds);\r\n      currentDate.add(1, 'day');\r\n    }\r\n    return ret;\r\n  }\r\n}\r\n\r\n\r\n\r\n","import {\r\n  AssetsByCurr,\r\n  AssetsTotals,\r\n  // FixInRubTotals,\r\n  TimeLineAsset,\r\n  TimeLineDayCalculations,\r\n  TimeLineDayData\r\n} from '../../../api-public/models/assets-history';\r\nimport {Currency, currencyMap, CurrencyMap} from '../../../api-public/models/common-biz';\r\n\r\n// @dynamic\r\nexport class DayCalculationsHelper {\r\n\r\n  static getCalculations(newDayData: TimeLineDayData/*, currencyMap: CurrencyMap*/): TimeLineDayCalculations {\r\n\r\n    /*const currencyTotals: FixInRubTotals = {\r\n      totalCurrencyInRub: {},\r\n      totalInRub: 0\r\n    };*/\r\n\r\n    const assetsTotals: AssetsTotals = {\r\n      totalsByCurr: {},\r\n      totalInRub: 0\r\n    };\r\n\r\n    // todo: тут будут только рубли (баланс) - потом переписать\r\n    /*Object.keys(newDayData.currenciesAccounts).forEach((key) => {\r\n      const currency: Currency = key as Currency;\r\n      const newFixInRub = this.addAccountValueToCurrencyTotal(currency, currencyTotals, newDayData);\r\n      currencyTotals.totalCurrencyInRub[currency] = newFixInRub;\r\n      currencyTotals.totalInRub += newFixInRub;\r\n    });*/\r\n\r\n    newDayData.assets.forEach((asset: TimeLineAsset) => {\r\n      const currency = asset.currency as Currency;\r\n      let currencyAsset: TimeLineAsset | undefined;\r\n      if (currency !== Currency.rub) {\r\n        // todo: это можно оптимизировать\r\n        currencyAsset = newDayData.assets.find(a => a.ticker === currencyMap.tickerFromCurrency[currency]);\r\n      }\r\n      const assetsByCurr: AssetsByCurr = this.addAssetValueToAssetsTotal(assetsTotals, asset, currencyAsset);\r\n      assetsTotals.totalsByCurr[currency] = assetsByCurr;\r\n    });\r\n\r\n    Object.values(assetsTotals.totalsByCurr).forEach((assetsByCurr) => {\r\n      assetsTotals.totalInRub += (assetsByCurr as AssetsByCurr).valueInRub;\r\n    });\r\n\r\n    const ret: TimeLineDayCalculations = { assetsTotals,  /*currencyTotals,*/ };\r\n    return ret;\r\n  }\r\n\r\n  private static addAssetValueToAssetsTotal(assetsTotals: AssetsTotals, asset: TimeLineAsset,\r\n                                            currencyAsset: TimeLineAsset | undefined)\r\n    : AssetsByCurr {\r\n\r\n    const currency = asset.currency as Currency;\r\n    const assetsByCurr: AssetsByCurr = assetsTotals.totalsByCurr[currency] || { count: 0, value: 0, valueInRub: 0, priceInRub: 1 };\r\n\r\n    let fixInRub;\r\n    if (currency === Currency.rub) {\r\n      fixInRub = 1;\r\n    }\r\n    if (currency !== Currency.rub && !!currencyAsset) {\r\n      fixInRub = currencyAsset.price;\r\n    }\r\n    if (asset && asset.price && asset.count && fixInRub) {\r\n      const value: number = assetsByCurr.value + (asset.count * asset.price);\r\n      const newAssetsByCurr: AssetsByCurr = {\r\n        count: assetsByCurr.count + 1, // считается просто виды активов ()\r\n        value,\r\n        valueInRub: value * fixInRub,\r\n        priceInRub: fixInRub\r\n      };\r\n      return newAssetsByCurr;\r\n    }\r\n\r\n    return assetsByCurr;\r\n  }\r\n\r\n\r\n  /*private static addAccountValueToCurrencyTotal(currency: Currency, currencyTotals: FixInRubTotals,\r\n                                                newDayData: TimeLineDayData): number {\r\n    let newCurrencyTotal: number = currencyTotals.totalCurrencyInRub[currency] || 0;\r\n\r\n    const account = newDayData.currenciesAccounts[currency];\r\n    if (account && account.amount && account.fixInRub) {\r\n      newCurrencyTotal += account.amount * account.fixInRub;\r\n    }\r\n\r\n    return newCurrencyTotal;\r\n  }*/\r\n}\r\n","import {DayString} from '../../../../api-public/models/common-biz';\r\n\r\nexport interface DayShell<T> {\r\n  day: DayString;\r\n  item: T;\r\n}\r\n\r\nexport type MergeFunc<T, V> = (item: T, value: V) => T;\r\n\r\n// @dynamic\r\nexport class MergeValuesToTimeline {\r\n  static mergeValuesToTimeLine<T, V>(timeLine: DayShell<T>[],\r\n                                     daysValues: DayShell<V>[],\r\n                                     mergeFunc: MergeFunc<T, V>): DayShell<T>[] {\r\n\r\n    let restDays: DayShell<V>[] = daysValues;\r\n    return timeLine.reduce((acc: DayShell<T>[], item: DayShell<T>) => {\r\n      restDays = this.getRestDays(item.day, restDays);\r\n      const newItem: DayShell<T> = this.mergeValuesToItem(item, restDays[0], mergeFunc);\r\n      return [...acc, newItem];\r\n    }, []);\r\n\r\n  }\r\n\r\n  private static getRestDays<V>(day: DayString, allDays: DayShell<V>[]): DayShell<V>[] {\r\n    const beforeDays: DayShell<V>[] = allDays.filter(d => d.day <= day);\r\n    const afterDays: DayShell<V>[] = allDays.filter(d => d.day > day);\r\n    if (beforeDays.length > 0) { // ищем последний из предыдущих\r\n      const closestBeforeDay: DayShell<V> = beforeDays[beforeDays.length - 1];\r\n      afterDays.unshift(closestBeforeDay); // этот день еще будет нужен в следующих итерациях\r\n    }\r\n    return afterDays;\r\n  }\r\n\r\n  private static mergeValuesToItem<T, V>(item: DayShell<T>,\r\n                                         valuesItem: DayShell<V>,\r\n                                         mergeFunc: MergeFunc<T, V>): DayShell<T> {\r\n    const newItem: T = mergeFunc(item.item, valuesItem?.item);\r\n    return {...item, item: newItem};\r\n  }\r\n}\r\n","import {Ticker, TimeLineAsset} from '../../../api-public/models/assets-history';\r\nimport {Currency, currencyMap, CurrencyMap, Price} from '../../../api-public/models/common-biz';\r\nimport {PartialRecord} from '../../../api-public/models/common';\r\n\r\ntype TickersPrices = PartialRecord<Ticker, Price>;\r\n\r\ntype GetCurrencyPrice = (currency: Currency) =>  Price | undefined;\r\n\r\nexport class MergePricesToAssetsHelper {\r\n\r\n  static mergePricesToAssets(assets: TimeLineAsset[], tickersPrices: TickersPrices/*, currencyMap: CurrencyMap*/): TimeLineAsset[] {\r\n    const newAssets: TimeLineAsset[] = assets.map(asset => {\r\n      return this.mergePricesToAsset(asset, tickersPrices/*, currencyMap*/);\r\n    });\r\n    return newAssets;\r\n  }\r\n\r\n  private static mergePricesToAsset(asset: TimeLineAsset, tickersPrices: TickersPrices/*, currencyMap: CurrencyMap*/): TimeLineAsset {\r\n    const newPrice: Price | undefined = tickersPrices[asset.ticker];\r\n    const getCurrencyPrice: GetCurrencyPrice = (currency: Currency) => this.getCurrencyPrice(currency, tickersPrices/*, currencyMap*/);\r\n    if (newPrice) {\r\n      // валюты совпали\r\n      if (asset.basePriceCurrency === newPrice.currency) {\r\n        return this.baseAndPriceCurrencyEquals(asset, newPrice);\r\n      }\r\n      // ассет купили в валюте, цена в рублях\r\n      if (asset.basePriceCurrency !== Currency.rub && newPrice.currency === Currency.rub) {\r\n        return this.baseCurrencyNonRubPriceRub(asset, newPrice, getCurrencyPrice);\r\n      }\r\n      // ассет купили в рублях, цена в валюте\r\n      if (asset.basePriceCurrency === Currency.rub && newPrice.currency !== Currency.rub) {\r\n        return this.baseCurrencyRubPriceNonRub(asset, newPrice, getCurrencyPrice);\r\n      }\r\n      // валюты все не в рублях и не совпали https://bestbets.atlassian.net/browse/MYEX-209\r\n      return this.baseCurrencyNonRubPriceNonRub(asset, newPrice, getCurrencyPrice);\r\n    }\r\n    return asset;\r\n  }\r\n\r\n  private static baseAndPriceCurrencyEquals(asset: TimeLineAsset, newPrice: Price): TimeLineAsset {\r\n    const newAsset: TimeLineAsset = {\r\n      ...asset,\r\n      price: newPrice.amount,\r\n      currency: newPrice.currency\r\n    };\r\n    return newAsset;\r\n  }\r\n\r\n  private static baseCurrencyNonRubPriceRub(asset: TimeLineAsset, newPrice: Price,\r\n                                            getCurrencyPrice: GetCurrencyPrice): TimeLineAsset {\r\n    const currencyPrice: Price | undefined = getCurrencyPrice(asset.basePriceCurrency);\r\n\r\n    const newAsset: TimeLineAsset = {...asset};\r\n    if (currencyPrice) {\r\n      newAsset.price = newPrice.amount / currencyPrice.amount;\r\n      newAsset.currency = newAsset.basePriceCurrency;\r\n    }\r\n    return newAsset;\r\n  }\r\n\r\n  private static baseCurrencyRubPriceNonRub(asset: TimeLineAsset, newPrice: Price,\r\n                                            getCurrencyPrice: GetCurrencyPrice): TimeLineAsset {\r\n    const currencyPrice: Price | undefined = getCurrencyPrice(newPrice.currency);\r\n\r\n    const newAsset: TimeLineAsset = {...asset};\r\n    if (currencyPrice) {\r\n      newAsset.price = newPrice.amount * currencyPrice.amount;\r\n      newAsset.currency = newAsset.basePriceCurrency;\r\n    }\r\n    return newAsset;\r\n  }\r\n\r\n  private static baseCurrencyNonRubPriceNonRub(asset: TimeLineAsset, newPrice: Price,\r\n                                               getCurrencyPrice: GetCurrencyPrice): TimeLineAsset {\r\n\r\n    const basePriceCurrencyPrice: Price | undefined = getCurrencyPrice(asset.basePriceCurrency); // базовая цена в рублях\r\n    const newPriceCurrencyPrice: Price | undefined = getCurrencyPrice(newPrice.currency); // текущаая цена в рублях\r\n\r\n    const newAsset: TimeLineAsset = {...asset};\r\n    if (basePriceCurrencyPrice && newPriceCurrencyPrice) {\r\n      newAsset.price = newPrice.amount * newPriceCurrencyPrice.amount / basePriceCurrencyPrice.amount; // кросс-курс через рубли\r\n      newAsset.currency = newAsset.basePriceCurrency;\r\n    }\r\n    return newAsset;\r\n  }\r\n\r\n  private static getCurrencyPrice(currency: Currency, tickersPrices: TickersPrices/*, currencyMap: CurrencyMap*/): Price | undefined {\r\n    const priceCurrencyTicker = currencyMap.tickerFromCurrency[currency] || '';\r\n    const currencyPrice: Price | undefined = tickersPrices[priceCurrencyTicker];\r\n    return currencyPrice;\r\n  }\r\n}\r\n","import {\r\n  // CurrencyAccount,\r\n  PricesDictByDate3,\r\n  PricesDictByTicker3,\r\n  Ticker,\r\n  TimeLineDayData\r\n} from '../../api-public/models/assets-history';\r\nimport {PartialRecord} from '../../api-public/models/common';\r\nimport {CurrencyMap, DayString, Price} from '../../api-public/models/common-biz';\r\nimport {DayCalculationsHelper} from './helpers/day-calculations.helper';\r\nimport {DayShell, MergeFunc, MergeValuesToTimeline} from './helpers/abstract/merge-values-to-timeline';\r\nimport {MergePricesToAssetsHelper} from './merge-prices-to-assets/merge-prices-to-assets.helper';\r\n\r\ntype TickersPrices = PartialRecord<Ticker, Price>;\r\ninterface DayValues {\r\n  day: DayString;\r\n  tickersPrices: TickersPrices;\r\n}\r\n\r\n// @dynamic\r\nexport class MergePrices2Helper {\r\n\r\n  static mergePricesToTimeLine(timeline: TimeLineDayData[], pricesDict: PricesDictByTicker3\r\n                               /*currencyMap: CurrencyMap*/): TimeLineDayData[] {\r\n\r\n    const timelineShells: DayShell<TimeLineDayData>[] = Helper.timelineToShells(timeline);\r\n    const dayValuesShells: DayShell<DayValues>[] = Helper.pricesDictToDaysValuesShells(pricesDict);\r\n    // аккумулируем ближайшие предыдущие цены, бывает что прилетает нет цены,\r\n    // тогда берем известную ближайшую предыдуюю\r\n    // иначе провалы в графике получаются\r\n    let accTickerPrices: TickersPrices = Helper.getFirstPrices(pricesDict);\r\n    const mergeFunc: MergeFunc<TimeLineDayData, DayValues> = (item: TimeLineDayData, value: DayValues) => {\r\n      if (value?.tickersPrices) {\r\n        accTickerPrices = {...accTickerPrices, ...value.tickersPrices};\r\n      }\r\n      return Helper.mergeDayValues(item, accTickerPrices/*, currencyMap*/);\r\n    };\r\n\r\n    const newShells: DayShell<TimeLineDayData>[] = MergeValuesToTimeline\r\n      .mergeValuesToTimeLine<TimeLineDayData, DayValues>(timelineShells, dayValuesShells, mergeFunc);\r\n\r\n    return newShells.map(sh => sh.item);\r\n  }\r\n}\r\n\r\nclass Helper {\r\n\r\n  static mergeDayValues(item: TimeLineDayData, tickersPrices: TickersPrices,\r\n                        /*currencyMap: CurrencyMap*/): TimeLineDayData {\r\n\r\n    const newItem: TimeLineDayData = {...item};\r\n    newItem.assets = MergePricesToAssetsHelper.mergePricesToAssets(item.assets, tickersPrices/*, currencyMap*/);\r\n    // newItem.currenciesAccounts = Helper.mergeToCurrencies(item.currenciesAccounts, tickersPrices, currencyMap);\r\n    newItem.calculations = DayCalculationsHelper.getCalculations(newItem/*, currencyMap*/);\r\n    return newItem;\r\n  }\r\n\r\n  static getFirstPrices(pricesDict: PricesDictByTicker3): TickersPrices {\r\n    const ret: TickersPrices = {};\r\n    // покаждому тикеру ищем первые цены, убрать провалы в начале графиков\r\n    Object.keys(pricesDict).forEach(ticker => {\r\n      const daysPrices: PricesDictByDate3 = pricesDict[ticker] as PricesDictByDate3;\r\n      const price: Price | undefined = Object.values(daysPrices)[0];\r\n      if (price) {\r\n        ret[ticker] = price;\r\n      }\r\n    });\r\n    return ret;\r\n  }\r\n\r\n  static pricesDictToDaysValuesShells(pricesDict: PricesDictByTicker3): DayShell<DayValues>[] {\r\n    let retDays: PartialRecord<DayString, TickersPrices> = {};\r\n    Object.keys(pricesDict).forEach(ticker => {\r\n      const daysPrices: PricesDictByDate3 = pricesDict[ticker] as PricesDictByDate3;\r\n      retDays = this.dayPricesToTickerPrices(retDays, ticker, daysPrices);\r\n    });\r\n    return Object.keys(retDays).sort((day1, day2) => day1 < day2 ? -1 : 1)\r\n      .map(day => {\r\n        const dayValue: DayValues = { day, tickersPrices: retDays[day] as TickersPrices };\r\n        const shell: DayShell<DayValues> = { day, item: dayValue };\r\n        return shell;\r\n      });\r\n  }\r\n\r\n  private static dayPricesToTickerPrices(retDays: PartialRecord<DayString, TickersPrices>,\r\n                                         ticker: Ticker, daysPrices: PricesDictByDate3): PartialRecord<DayString, TickersPrices> {\r\n    Object.keys(daysPrices).forEach(day => {\r\n      const dayPrice: Price = daysPrices[day] as Price;\r\n      const oldTickersPrices: TickersPrices = retDays[day] || {};\r\n      const newTickersPrices: TickersPrices = {...oldTickersPrices, [ticker]: dayPrice };\r\n      retDays[day] = newTickersPrices;\r\n    });\r\n    return retDays;\r\n  }\r\n\r\n  static timelineToShells(timeline: TimeLineDayData[]): DayShell<TimeLineDayData>[] {\r\n    return timeline.reduce((acc: DayShell<TimeLineDayData>[], item: TimeLineDayData) => {\r\n      const shell: DayShell<TimeLineDayData> = { day: item.date, item };\r\n      return [...acc, shell];\r\n    }, []);\r\n  }\r\n}\r\n\r\n/*private static mergeToCurrencies(currenciesAccounts: PartialRecord<Currency, CurrencyAccount>,\r\n                                 tickersPrices: TickersPrices,\r\n                                 currencyMap: CurrencyMap): PartialRecord<Currency, CurrencyAccount> {\r\n  const newCurrAccounts: PartialRecord<Currency, CurrencyAccount> = {};\r\n  Object.keys(currenciesAccounts).forEach(key => {\r\n    const currency: Currency = key as Currency;\r\n    const currAccount: CurrencyAccount = currenciesAccounts[currency] as CurrencyAccount;\r\n    if (currAccount) {\r\n      const newCurrAccount: CurrencyAccount = {...currAccount};\r\n      // тут мы хотим, узнать курс валюты на тот день, поэтому ищем тикер валюты с ценой\r\n      const currencyTicker: Ticker | undefined = currencyMap.tickerFromCurrency[currency];\r\n      const newPrice: Price | undefined = tickersPrices[currencyTicker as any];\r\n      if (currency === Currency.rub) {\r\n        newCurrAccount.fixInRub = 1;\r\n      }\r\n      if (newPrice) {\r\n        newCurrAccount.fixInRub = newPrice.amount;\r\n      }\r\n      newCurrAccounts[currency] = newCurrAccount;\r\n    }\r\n  });\r\n  return newCurrAccounts;\r\n}*/\r\n","import {PortfolioId} from '../../api-public/models/portfolio';\r\nimport {Observable} from 'rxjs';\r\nimport {PageInfo, Sorting} from '../../api-public/models/common';\r\nimport {Operation2, OperationsTableField} from '../../api-public/models/operations';\r\nimport {map} from 'rxjs/operators';\r\nimport {OperationsStore} from '../../store/operations.store';\r\n\r\nexport class OperationsHelper {\r\n\r\n  static getAllOperations(operationsStore: OperationsStore, portfolioId: PortfolioId): Observable<Operation2[]> {\r\n    const maxPage: PageInfo = { page: 1, pageSize: 10000000 };\r\n    const sorting: Sorting<OperationsTableField> = {field: OperationsTableField.date, isAsc: true};\r\n    return operationsStore\r\n      .getPagedOperations2(portfolioId, maxPage, sorting)\r\n      .pipe(map(opsPage => {\r\n        return opsPage.items; // .filter(op => op.isOn);\r\n      }));\r\n  }\r\n\r\n}\r\n","import {Portfolio2, PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {Operation2} from '../../../api-public/models/operations';\r\nimport {OperationType} from '../../../api-public/models/common-biz';\r\nimport {PortfoliosStore} from '../../../store/portfolios.store';\r\n\r\n// @dynamic\r\nexport class PortfolioSummariesCalculator3 {\r\n\r\n  static saveOperationsSummaries(portfoliosStore: PortfoliosStore, portfolioId: PortfolioId,\r\n                                 operations: Operation2[]): Observable<any> {\r\n\r\n    return portfoliosStore.getPortfolio(null, portfolioId).pipe(\r\n      map((portfolio: Portfolio2) => {\r\n        const newPortfolio: Portfolio2 = Helper.operationsToPortfolioSummaries(operations, portfolio);\r\n        return portfoliosStore.savePortfolio(null, newPortfolio);\r\n      })\r\n    );\r\n  }\r\n\r\n}\r\n\r\nclass Helper {\r\n  static operationsToPortfolioSummaries(operations: Operation2[], portfolio: Portfolio2): Portfolio2 {\r\n    const operationsIsOn: Operation2[] = operations.filter(op => op.isOn);\r\n    return {\r\n      ...portfolio,\r\n      totalOperations: operationsIsOn.length,\r\n      buyOperations: operationsIsOn.filter(op => op.type === OperationType.buy).length,\r\n      sellOperations: operationsIsOn.filter(op => op.type === OperationType.sell).length,\r\n      excludedOperations: operations.length - operationsIsOn.length\r\n    };\r\n  }\r\n}\r\n","import {CountPrice, TickerCurrency} from '../../../../api-public/models/assets-history';\r\nimport {Operation2} from '../../../../api-public/models/operations';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\nimport {OperationType} from '../../../../api-public/models/common-biz';\r\nimport {PartialRecord} from '../../../../api-public/models/common';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\n\r\n// @dynamic\r\nexport class CountPriceHelper {\r\n\r\n  static resultCountOperation(prevCountPrice: CountPrice, operation: Operation2): number {\r\n    const prevCount = CountPriceMapper.toCount(prevCountPrice) || 0;\r\n    if (operation.isOn) {\r\n      if (operation.type === OperationType.buy) {\r\n        return prevCount + operation.count;\r\n      }\r\n      if (operation.type === OperationType.sell) {\r\n        return prevCount - operation.count;\r\n      }\r\n    }\r\n    return prevCount;\r\n  }\r\n\r\n  static resultBasePriceOperation(prevCountPrice: CountPrice, operation: Operation2): number {\r\n    const prevBasePrice =  CountPriceMapper.toPrice(prevCountPrice) || 0;\r\n    const prevCount = CountPriceMapper.toCount(prevCountPrice) || 0;\r\n    if (operation.type === OperationType.buy) {\r\n      const totalSum = (prevBasePrice * prevCount) + (operation.unitPrice * operation.count);\r\n      const newBasePrice = totalSum / (prevCount + operation.count);\r\n      return newBasePrice;\r\n    } else {\r\n      return prevBasePrice;\r\n    }\r\n  }\r\n\r\n  static prevCountPrice(assetsDict: PartialRecord<TickerCurrency, CountPrice>, operation: Operation2)\r\n    : CountPrice {\r\n    const emptyRet: CountPrice = CountPriceMapper.toCountPrice(0, 0);\r\n    const tickerCurrency: TickerCurrency = TickerCurrencyMapper.toTickerCurrency(operation.ticker, operation.currency);\r\n    return assetsDict[tickerCurrency] || emptyRet;\r\n  }\r\n}\r\n","import {\r\n  AppliedObjectType,\r\n  AssetsHistoryAccountsData,\r\n  AssetsHistoryItem2,\r\n  CountPrice,\r\n  Ticker,\r\n  TickerCurrency\r\n} from '../../../../api-public/models/assets-history';\r\nimport {Operation2} from '../../../../api-public/models/operations';\r\nimport {PartialRecord} from '../../../../api-public/models/common';\r\nimport {Currency, currencyMap, CurrencyMap, OperationType} from '../../../../api-public/models/common-biz';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceHelper} from './count-price.helper';\r\nimport {PortfolioId} from '../../../../api-public/models/portfolio';\r\n\r\n// @dynamic\r\nexport class AccountsHistoryHelper {\r\n\r\n  static prevItemMock(portfolioId: PortfolioId): AssetsHistoryItem2 {\r\n    const accountsData: AssetsHistoryAccountsData = {assetsDict: {}, balanceInRub: 0};\r\n    const newItem: AssetsHistoryItem2 = {accountsData,\r\n      id: 0, portfolioId,\r\n      date: new Date(1900), appliedObject: { id: '', type: AppliedObjectType.operation }, // todo: ?? важно ли это\r\n      totalOperations: 0\r\n    };\r\n    return newItem;\r\n  }\r\n\r\n  static newAccountsDataFromOperation(prevAccountsData: AssetsHistoryAccountsData,\r\n                                      operation: Operation2,\r\n                                      // currencyMap: CurrencyMap\r\n  )\r\n    : AssetsHistoryAccountsData {\r\n    const ret: AssetsHistoryAccountsData = {\r\n      assetsDict: this.mergeOperation(prevAccountsData.assetsDict, operation/*, currencyMap*/),\r\n      balanceInRub: this.mergeToBalanceRub(prevAccountsData.balanceInRub, operation)\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static mergeToBalanceRub(oldBalanceRub: number, operation: Operation2): number {\r\n    // в рублевых операциях фиксируем вычет в балансе\r\n    if (operation.currency !== Currency.rub) { return oldBalanceRub; }\r\n\r\n    const ret = oldBalanceRub || 0;\r\n    const totalAmount = operation.count * operation.unitPrice;\r\n    if (operation.type === OperationType.buy) {\r\n      return ret - totalAmount;\r\n    }\r\n    if (operation.type === OperationType.sell) {\r\n      return ret + totalAmount;\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  private static mergeOperation(assetsDict: PartialRecord<TickerCurrency, CountPrice>,\r\n                                operation: Operation2,\r\n                                // currencyMap: CurrencyMap\r\n  ): PartialRecord<TickerCurrency, CountPrice> {\r\n\r\n    // в рублевых опреациях фикисруем вычет в балансе\r\n    // валюты считаем активами https://bestbets.atlassian.net/browse/MYEX-232\r\n    const assetChange = this.getAssetChangeFromOperation(assetsDict, operation);\r\n    // в операциях за валюту - фиксируем вычеты в активах-валютах\r\n    const currencyAssetChange = this.getCurrencyAssetChangeFromNonRubOperation(assetsDict, operation/*, currencyMap*/);\r\n\r\n    return {...assetsDict, ...assetChange, ...currencyAssetChange};\r\n  }\r\n\r\n  private static getAssetChangeFromOperation(assetsDict: PartialRecord<TickerCurrency, CountPrice>,\r\n                                             operation: Operation2)\r\n    : PartialRecord<TickerCurrency, CountPrice> {\r\n\r\n    const prevCountPrice: CountPrice = CountPriceHelper.prevCountPrice(assetsDict, operation);\r\n\r\n    const count: number = CountPriceHelper.resultCountOperation(prevCountPrice, operation);\r\n    const basePrice: number = CountPriceHelper.resultBasePriceOperation(prevCountPrice, operation);\r\n    const newCountPrice: CountPrice = CountPriceMapper.toCountPrice(count, basePrice);\r\n    const tickerCurrency: TickerCurrency = TickerCurrencyMapper.toTickerCurrency(operation.ticker, operation.currency);\r\n\r\n    return { [tickerCurrency]: newCountPrice };\r\n  }\r\n\r\n  // если находим изменяем, сумму валюты на которую была совершена сделка\r\n  private static getCurrencyAssetChangeFromNonRubOperation(assetsDict: PartialRecord<TickerCurrency, CountPrice>,\r\n                                                           operation: Operation2/*, currencyMap: CurrencyMap*/)\r\n    : PartialRecord<TickerCurrency, CountPrice> {\r\n\r\n    if (operation.currency !== Currency.rub) {\r\n      const currTicker: Ticker | undefined = currencyMap.tickerFromCurrency[operation.currency];\r\n      const currencyAssetGUID: TickerCurrency = TickerCurrencyMapper.toTickerCurrency(currTicker || '', Currency.rub);\r\n      // если актив валюты не найден, то создаем фиктивный для буфера\r\n      const currencyAssetCountPrice: CountPrice = assetsDict[currencyAssetGUID] || CountPriceMapper.toCountPrice(0, 0);\r\n      if (!!currencyAssetCountPrice) {\r\n        let newCurrencyAssetCountPrice = currencyAssetCountPrice;\r\n        if (operation.type === OperationType.buy) {\r\n          newCurrencyAssetCountPrice = CountPriceMapper.subtractCount(currencyAssetCountPrice, operation.unitPrice * operation.count);\r\n        }\r\n        if (operation.type === OperationType.sell) {\r\n          newCurrencyAssetCountPrice = CountPriceMapper.addCount(currencyAssetCountPrice, operation.unitPrice * operation.count);\r\n        }\r\n        return { [currencyAssetGUID]: newCurrencyAssetCountPrice };\r\n      }\r\n    }\r\n    return {};\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n// @deprecated\r\n/*static prevAccountsData(history: AssetsHistoryItem2[]): AssetsHistoryItem2 {\r\n  const lastItem: AssetsHistoryItem2 = history[history.length - 1];\r\n  if (!lastItem) {\r\n    const accountsData: AssetsHistoryAccountsData = {assetsDict: {}, balanceInRub: 0};\r\n    const newItem: AssetsHistoryItem2 = {accountsData,\r\n      date: new Date(1900), appliedObject: { id: '', type: AppliedObjectType.operation }, // todo: ?? важно ли это\r\n      totalOperations: 0\r\n    };\r\n    return newItem;\r\n  }\r\n  return lastItem;\r\n}*/\r\n","import {Currency, DayString} from './common-biz';\r\nimport {GUID, ItemsPage2, PagedParams} from './common';\r\nimport {Ticker} from './assets-history';\r\n\r\nexport enum SecurityEventType {\r\n  dividends = 'dividends',\r\n  tickerNameChange = 'tickerNameChange',\r\n  currencyChange = 'currencyChange',\r\n  split = 'split',\r\n  bondOffer = 'bondOffer',\r\n  bondCoupon = 'bondCoupon',\r\n  bondAmortization = 'bondAmortization',\r\n}\r\n\r\nexport interface SecurityEventDataDividends {\r\n  amount: number;\r\n  currency: Currency;\r\n}\r\n\r\nexport interface SecurityEventBondData {\r\n  amount: number;\r\n  currency: Currency;\r\n}\r\n\r\nexport interface SecurityEventDataTickerNameChange {\r\n  newTickerName: string;\r\n}\r\n\r\nexport interface SecurityEventDataCurrencyChange {\r\n  oldCurrency: Currency;\r\n  newCurrency: Currency;\r\n  rate: number;\r\n}\r\n\r\nexport interface SecurityEventDataSplit {\r\n  fromCount: number;\r\n  toCount: number;\r\n}\r\n\r\nexport enum SecurityEventTableField { // exactly as table db names\r\n  date = 'date',\r\n  ticker = 'ticker',\r\n}\r\n\r\nexport type SecurityEventData = SecurityEventDataDividends | SecurityEventBondData\r\n  | SecurityEventDataTickerNameChange | SecurityEventDataCurrencyChange | SecurityEventDataSplit;\r\n\r\nexport type SecurityEventId = GUID;\r\n\r\nexport interface SecurityEvent {\r\n  id: SecurityEventId;\r\n  type: SecurityEventType;\r\n  date: Date;\r\n  ticker: string;\r\n  data: SecurityEventData;\r\n  isApproved: boolean; // moderated?\r\n  isCancelled: boolean;\r\n}\r\n\r\nexport interface SecurityEventSearchParams {\r\n  tickers?: Ticker[];\r\n  fromDate?: DayString;\r\n  toDate?: DayString;\r\n  eventType?: SecurityEventType;\r\n}\r\n\r\nexport type SecuritiesEventsPagedParams = PagedParams<SecurityEventTableField, SecurityEventSearchParams>;\r\nexport type SecuritiesEventsItemsPage = ItemsPage2<SecurityEvent, SecurityEventTableField, SecurityEventSearchParams>;\r\n","import {SecurityEvent, SecurityEventDataTickerNameChange} from '../../../../api-public/models/securities-events';\r\nimport {\r\n  AssetsHistoryAccountsData,\r\n  CountPrice,\r\n  TickerCurrency\r\n} from '../../../../api-public/models/assets-history';\r\nimport {PartialRecord} from '../../../../api-public/models/common';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\n\r\nexport class ProcessByTickerNameHelper {\r\n\r\n  static process(prevData: AssetsHistoryAccountsData, event: SecurityEvent): AssetsHistoryAccountsData {\r\n\r\n    const newAssetsDict = Object.keys(prevData.assetsDict).reduce((acc, item) => {\r\n      const currItem: CountPrice | undefined = prevData.assetsDict[item];\r\n      return this.applyEvent(acc, item, currItem as CountPrice, event);\r\n    }, {});\r\n\r\n    return {...prevData, assetsDict: newAssetsDict};\r\n  }\r\n\r\n  // !!! есть потенциальная проблема, если тикер поменялся и как то был уже такой, то он затрется\r\n  // https://bestbets.atlassian.net/browse/MYEX-278\r\n  // потенциальная проблема, если сделка зафиксирована после события в старом формате,\r\n  // например, тикер сменился, событие прошло но сделка сверху по старому (!!!???)\r\n\r\n  private static applyEvent(assetsDict: PartialRecord<TickerCurrency, CountPrice>,\r\n                            tickerCurrency: TickerCurrency,\r\n                            countPrice: CountPrice,\r\n                            event: SecurityEvent)\r\n    : PartialRecord<TickerCurrency, CountPrice> {\r\n\r\n    const eventData: SecurityEventDataTickerNameChange = event.data as SecurityEventDataTickerNameChange;\r\n\r\n    let newTickerCurrency = tickerCurrency;\r\n    const ticker = TickerCurrencyMapper.toTicker(tickerCurrency);\r\n    if (ticker === event.ticker) {\r\n       newTickerCurrency = TickerCurrencyMapper.replaceTicker(tickerCurrency, eventData.newTickerName);\r\n    }\r\n    return { ...assetsDict, [newTickerCurrency]: countPrice };\r\n  }\r\n}\r\n","import {\r\n  SecurityEvent,\r\n  SecurityEventDataCurrencyChange,\r\n} from '../../../../api-public/models/securities-events';\r\nimport {AssetsHistoryAccountsData, CountPrice, TickerCurrency} from '../../../../api-public/models/assets-history';\r\nimport {PartialRecord} from '../../../../api-public/models/common';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\n\r\nexport class ProcessByCurrencyChangeHelper {\r\n\r\n  static process(prevData: AssetsHistoryAccountsData, event: SecurityEvent): AssetsHistoryAccountsData {\r\n\r\n    const newAssetsDict = Object.keys(prevData.assetsDict).reduce((acc, item) => {\r\n      const currItem: CountPrice | undefined = prevData.assetsDict[item];\r\n      return this.applyEvent(acc, item, currItem as CountPrice, event);\r\n    }, {});\r\n\r\n    return {...prevData, assetsDict: newAssetsDict};\r\n  }\r\n\r\n  // !!! есть потенциальная проблема, если валюта поменялась и как то была уже такая, то затрется\r\n  // https://bestbets.atlassian.net/browse/MYEX-278\r\n  // потенциальная проблема, если сделка зафиксирована после события в старом формате,\r\n  // например, тикер сменился, событие прошло но сделка сверху по старому (!!!???)\r\n\r\n  private static applyEvent(assetsDict: PartialRecord<TickerCurrency, CountPrice>,\r\n                            tickerCurrency: TickerCurrency,\r\n                            countPrice: CountPrice,\r\n                            event: SecurityEvent)\r\n    : PartialRecord<TickerCurrency, CountPrice> {\r\n\r\n    const eventData: SecurityEventDataCurrencyChange = event.data as SecurityEventDataCurrencyChange;\r\n\r\n    let newTickerCurrency = tickerCurrency;\r\n    let newCountPrice = countPrice;\r\n    const ticker = TickerCurrencyMapper.toTicker(tickerCurrency);\r\n    if (ticker === event.ticker) {\r\n      newTickerCurrency = TickerCurrencyMapper.replaceCurrency(tickerCurrency, eventData.newCurrency);\r\n      newCountPrice = CountPriceMapper.applyRate(countPrice, eventData.rate) || countPrice;\r\n    }\r\n    return { ...assetsDict, [newTickerCurrency]: newCountPrice };\r\n  }\r\n}\r\n","import {\r\n  SecurityEvent,\r\n  SecurityEventDataSplit\r\n} from '../../../../api-public/models/securities-events';\r\nimport {AssetsHistoryAccountsData, CountPrice, TickerCurrency} from '../../../../api-public/models/assets-history';\r\nimport {PartialRecord} from '../../../../api-public/models/common';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\n\r\nexport class ProcessBySplitHelper {\r\n\r\n  static process(prevData: AssetsHistoryAccountsData, event: SecurityEvent): AssetsHistoryAccountsData {\r\n\r\n    const newAssetsDict = Object.keys(prevData.assetsDict).reduce((acc, item) => {\r\n      const currItem: CountPrice | undefined = prevData.assetsDict[item];\r\n      return this.applyEvent(acc, item, currItem as CountPrice, event);\r\n    }, {});\r\n\r\n    return {...prevData, assetsDict: newAssetsDict};\r\n  }\r\n\r\n  private static applyEvent(assetsDict: PartialRecord<TickerCurrency, CountPrice>,\r\n                            tickerCurrency: TickerCurrency,\r\n                            countPrice: CountPrice,\r\n                            event: SecurityEvent)\r\n    : PartialRecord<TickerCurrency, CountPrice> {\r\n\r\n    const eventData: SecurityEventDataSplit = event.data as SecurityEventDataSplit;\r\n    const ratio =  eventData.toCount / eventData.fromCount;\r\n\r\n    let newCountPrice = countPrice;\r\n    const ticker = TickerCurrencyMapper.toTicker(tickerCurrency);\r\n    if (ticker === event.ticker) {\r\n      newCountPrice = CountPriceMapper.applyRatio(countPrice, ratio) || countPrice;\r\n    }\r\n    return { ...assetsDict, [tickerCurrency]: newCountPrice };\r\n  }\r\n}\r\n\r\n","import {AssetsHistoryAccountsData, Ticker, TickerCurrency} from '../../../../api-public/models/assets-history';\r\nimport {SecurityEvent, SecurityEventDataDividends} from '../../../../api-public/models/securities-events';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\nimport {Currency, currencyMap, CurrencyMap} from '../../../../api-public/models/common-biz';\r\n\r\nexport class ProcessByDividendsHelper {\r\n\r\n  static process(prevData: AssetsHistoryAccountsData, event: SecurityEvent,\r\n                          /*currencyMap: CurrencyMap*/): AssetsHistoryAccountsData | null {\r\n\r\n    const appliedAssets: TickerCurrency[] = Object.keys(prevData.assetsDict).filter(key => {\r\n      const ticker = TickerCurrencyMapper.toTicker(key);\r\n      const count = CountPriceMapper.toCount(prevData.assetsDict[key] || CountPriceMapper.toCountPrice(0, 0)) || 0;\r\n      return ticker === event.ticker && count > 0;\r\n    });\r\n\r\n    const totalCount = appliedAssets.reduce((acc, item) => {\r\n      const countPrice = prevData.assetsDict[item] || CountPriceMapper.toCountPrice(0, 0);\r\n      const count = CountPriceMapper.toCount(countPrice) || 0;\r\n      return acc + count;\r\n    }, 0);\r\n\r\n    if (totalCount > 0) {\r\n\r\n      // todo: тут суммировать к RUS USD EUR CNY (в своих тикерах)\r\n      const divsData: SecurityEventDataDividends = event.data as SecurityEventDataDividends;\r\n      const totalAmount = divsData.amount * totalCount;\r\n      if (divsData.currency === Currency.rub) {\r\n        return { ...prevData,\r\n          balanceInRub: prevData.balanceInRub + totalAmount\r\n        };\r\n      } else {\r\n        const curTicker: Ticker | undefined = currencyMap.tickerFromCurrency[divsData.currency];\r\n        if (curTicker) {\r\n          const tickerCurrency = TickerCurrencyMapper.toTickerCurrency(curTicker, Currency.rub);\r\n          const countPrice = prevData.assetsDict[tickerCurrency] || CountPriceMapper.toCountPrice(0, 0);\r\n          const newCountPrice = CountPriceMapper.addCount(countPrice, totalAmount);\r\n          return {\r\n            ...prevData,\r\n            assetsDict: { ...prevData.assetsDict, [tickerCurrency]: newCountPrice }\r\n          };\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import {AssetsHistoryAccountsData, Ticker, TickerCurrency} from '../../../../api-public/models/assets-history';\r\nimport {\r\n  SecurityEvent,\r\n  SecurityEventBondData,\r\n  SecurityEventDataDividends\r\n} from '../../../../api-public/models/securities-events';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\nimport {Currency, currencyMap, CurrencyMap} from '../../../../api-public/models/common-biz';\r\n\r\nexport class ProcessByCouponHelper {\r\n\r\n  static process(prevData: AssetsHistoryAccountsData, event: SecurityEvent): AssetsHistoryAccountsData | null {\r\n\r\n    const appliedAssets: TickerCurrency[] = Object.keys(prevData.assetsDict).filter(key => {\r\n      const ticker = TickerCurrencyMapper.toTicker(key);\r\n      const count = CountPriceMapper.toCount(prevData.assetsDict[key] || CountPriceMapper.toCountPrice(0, 0)) || 0;\r\n      return ticker === event.ticker && count > 0;\r\n    });\r\n\r\n    const totalCount = appliedAssets.reduce((acc, item) => {\r\n      const countPrice = prevData.assetsDict[item] || CountPriceMapper.toCountPrice(0, 0);\r\n      const count = CountPriceMapper.toCount(countPrice) || 0;\r\n      return acc + count;\r\n    }, 0);\r\n\r\n    if (totalCount > 0) {\r\n\r\n      const bondData: SecurityEventBondData = event.data as SecurityEventBondData;\r\n      const totalAmount = bondData.amount * totalCount;\r\n      if (bondData.currency === Currency.rub) {\r\n        return { ...prevData,\r\n          balanceInRub: prevData.balanceInRub + totalAmount\r\n        };\r\n      } else {\r\n        const curTicker: Ticker | undefined = currencyMap.tickerFromCurrency[bondData.currency];\r\n        if (curTicker) {\r\n          const tickerCurrency = TickerCurrencyMapper.toTickerCurrency(curTicker, Currency.rub);\r\n          const countPrice = prevData.assetsDict[tickerCurrency] || CountPriceMapper.toCountPrice(0, 0);\r\n          const newCountPrice = CountPriceMapper.addCount(countPrice, totalAmount);\r\n          return {\r\n            ...prevData,\r\n            assetsDict: { ...prevData.assetsDict, [tickerCurrency]: newCountPrice }\r\n          };\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import {\r\n  AssetsHistoryAccountsData, AssetsHistoryItem2, CountPrice,\r\n  Ticker,\r\n  TickerCurrency\r\n} from '../../../../api-public/models/assets-history';\r\nimport {\r\n  SecurityEvent,\r\n  SecurityEventBondData,\r\n} from '../../../../api-public/models/securities-events';\r\nimport {TickerCurrencyMapper} from '../../../../api-public/mappers/ticker-currency.mapper';\r\nimport {CountPriceMapper} from '../../../../api-public/mappers/count-price.mapper';\r\nimport {Currency, currencyMap, CurrencyMap} from '../../../../api-public/models/common-biz';\r\nimport {SecurityDataBond} from '../../../../api-public/models/securities-data';\r\nimport {DateHelper} from '../../../../api-public/helpers/date.helper';\r\nimport {CountPriceHelper} from '../accounts-history-helper/count-price.helper';\r\n\r\nexport class ProcessByAmortizationHelper {\r\n\r\n  static process(prevItem: AssetsHistoryItem2, event: SecurityEvent, dataBond: SecurityDataBond | null): AssetsHistoryAccountsData | null {\r\n\r\n    const prevData = prevItem.accountsData;\r\n    const appliedAssets = this.appliedAssets(prevData, event);\r\n    const totalAppliedCount = this.appliedAssetsCount(appliedAssets, prevData);\r\n\r\n    let ret: AssetsHistoryAccountsData | null = null;\r\n\r\n    if (totalAppliedCount > 0) {\r\n\r\n      const bondData: SecurityEventBondData = event.data as SecurityEventBondData;\r\n      const totalAmount = bondData.amount * totalAppliedCount;\r\n      if (bondData.currency === Currency.rub) {\r\n        ret = { ...prevData,\r\n          balanceInRub: prevData.balanceInRub + totalAmount,\r\n        };\r\n      } else {\r\n        const curTicker: Ticker | undefined = currencyMap.tickerFromCurrency[bondData.currency];\r\n        if (curTicker) {\r\n          const tickerCurrency = TickerCurrencyMapper.toTickerCurrency(curTicker, Currency.rub);\r\n          const countPrice = prevData.assetsDict[tickerCurrency] || CountPriceMapper.toCountPrice(0, 0);\r\n          const newCountPrice = CountPriceMapper.addCount(countPrice, totalAmount);\r\n          ret = {\r\n            ...prevData,\r\n            assetsDict: { ...prevData.assetsDict, [tickerCurrency]: newCountPrice },\r\n          };\r\n        }\r\n      }\r\n\r\n      ret = this.zeroBondsCountsIfMaturate(ret, dataBond, event.date, appliedAssets);\r\n    }\r\n\r\n    return ret;\r\n  }\r\n\r\n  private static zeroBondsCountsIfMaturate(dataIn: AssetsHistoryAccountsData | null,\r\n                                           dataBond: SecurityDataBond | null,\r\n                                           historyItemDate: Date,\r\n                                           appliedAssets: TickerCurrency[])\r\n    : AssetsHistoryAccountsData | null {\r\n\r\n    if (!dataIn) { return null; }\r\n    if (!dataBond?.maturityDate) { return dataIn; }\r\n\r\n    const data = {...dataIn, assetsDict: { ...dataIn.assetsDict }};\r\n\r\n    const maturityDayString = DateHelper.dateToDayString(dataBond.maturityDate);\r\n    const itemDayString = DateHelper.dateToDayString(historyItemDate);\r\n    if (maturityDayString === itemDayString) {\r\n      appliedAssets.forEach((tickerCurrency: TickerCurrency) => {\r\n        const countPrice = data.assetsDict[tickerCurrency] || CountPriceMapper.toCountPrice(0, 0);\r\n        const reserveCount: number | undefined = CountPriceMapper.toCount(countPrice);\r\n        const newCountPrice: CountPrice | undefined = CountPriceMapper.changeCount(countPrice, () => 0);\r\n        if (newCountPrice !== undefined && reserveCount !== undefined) {\r\n          const newCountPrice2: CountPrice | undefined = CountPriceMapper.setReserveCount(newCountPrice, reserveCount);\r\n          data.assetsDict[tickerCurrency] = newCountPrice2;\r\n        }\r\n      });\r\n    }\r\n\r\n    return data;\r\n  }\r\n\r\n  private static appliedAssets(prevData: AssetsHistoryAccountsData, event: SecurityEvent): TickerCurrency[] {\r\n    const appliedAssets: TickerCurrency[] = Object.keys(prevData.assetsDict).filter(key => {\r\n      const ticker = TickerCurrencyMapper.toTicker(key);\r\n      const count = CountPriceMapper.toCount(prevData.assetsDict[key] || CountPriceMapper.toCountPrice(0, 0)) || 0;\r\n      return ticker === event.ticker && count > 0;\r\n    });\r\n    return appliedAssets;\r\n  }\r\n\r\n  private static appliedAssetsCount(appliedAssets: TickerCurrency[], prevData: AssetsHistoryAccountsData): number {\r\n    const totalCount = appliedAssets.reduce((acc, item) => {\r\n      const countPrice = prevData.assetsDict[item] || CountPriceMapper.toCountPrice(0, 0);\r\n      const count = CountPriceMapper.toCount(countPrice) || 0;\r\n      return acc + count;\r\n    }, 0);\r\n\r\n    return totalCount;\r\n  }\r\n}\r\n\r\n","import {SecurityEvent, SecurityEventType} from '../../../../api-public/models/securities-events';\r\nimport {ProcessByTickerNameHelper} from './process-by-ticker-name.helper';\r\nimport {ProcessByCurrencyChangeHelper} from './process-by-currency-change.helper';\r\nimport {ProcessBySplitHelper} from './process-by-split.helper';\r\nimport {AssetsHistoryAccountsData, AssetsHistoryItem2, Ticker} from '../../../../api-public/models/assets-history';\r\nimport {ProcessByDividendsHelper} from './process-by-dividends.helper';\r\nimport {ProcessByCouponHelper} from './process-by-coupon.helper';\r\nimport {DateHelper} from '../../../../api-public/helpers/date.helper';\r\nimport {ProcessByAmortizationHelper} from './process-by-amortization.helper';\r\nimport {SecurityDataBond} from '../../../../api-public/models/securities-data';\r\nimport {PartialRecord} from '../../../../api-public/models/common';\r\n\r\nexport class EventsProcessorHelper {\r\n\r\n  static newAccountsDataFromEvent(prevItem: AssetsHistoryItem2, ev: SecurityEvent,\r\n                                  dataBondsDict: PartialRecord<Ticker, SecurityDataBond>)\r\n    : AssetsHistoryAccountsData | null {\r\n\r\n    // будущие исключаем todo: https://bestbets.atlassian.net/browse/MYEX-306\r\n    if (DateHelper.dateToDayString(ev.date) > DateHelper.dateToDayString(new Date())) {\r\n      return null;\r\n    }\r\n\r\n    if (ev.type === SecurityEventType.tickerNameChange) {\r\n      return ProcessByTickerNameHelper.process(prevItem.accountsData, ev);\r\n    }\r\n    if (ev.type === SecurityEventType.currencyChange) {\r\n      return ProcessByCurrencyChangeHelper.process(prevItem.accountsData, ev);\r\n    }\r\n    if (ev.type === SecurityEventType.split) {\r\n      return ProcessBySplitHelper.process(prevItem.accountsData, ev);\r\n    }\r\n    if (ev.type === SecurityEventType.dividends) {\r\n      return ProcessByDividendsHelper.process(prevItem.accountsData, ev);\r\n    }\r\n    if (ev.type === SecurityEventType.bondCoupon) {\r\n      return ProcessByCouponHelper.process(prevItem.accountsData, ev);\r\n    }\r\n    if (ev.type === SecurityEventType.bondAmortization) {\r\n      const dataBond = dataBondsDict[ev.ticker] || null;\r\n      return ProcessByAmortizationHelper.process(prevItem, ev, dataBond);\r\n    }\r\n    return null; // если событие не обработано, то нулл, чтобы не плодить одинаковые состояния\r\n  }\r\n}\r\n","import {\r\n  AppliedObjectType,\r\n  AssetsHistoryAccountsData,\r\n  AssetsHistoryItem2, Ticker,\r\n} from '../../../api-public/models/assets-history';\r\nimport {Operation2} from '../../../api-public/models/operations';\r\nimport {AccountsHistoryHelper} from './accounts-history-helper/account-history-helper';\r\nimport {SecurityEvent} from '../../../api-public/models/securities-events';\r\nimport {EventsProcessorHelper} from './events-processor/events-process.helper';\r\nimport {PartialRecord} from '../../../api-public/models/common';\r\nimport {SecurityDataBond} from '../../../api-public/models/securities-data';\r\nimport {CalculateData, PortfolioId} from '../../../api-public/models/portfolio';\r\n\r\nconst MAX_DATE: Date = new Date(8640000000000000);\r\n\r\ntype GetDateField<T> = (t: T) => Date;\r\ninterface DatedItems<T1, T2> {\r\n  getDate1: GetDateField<T1>;\r\n  getDate2: GetDateField<T2>;\r\n  items1: T1[];\r\n  items2: T2[];\r\n}\r\ntype ProcessItem<T> = (t: T) => void;\r\n\r\n// @dynamic\r\nclass ChronoIterator {\r\n  static iterate<T1, T2>(datedItems: DatedItems<T1, T2>,\r\n                         processItem1: ProcessItem<T1>,\r\n                         processItem2: ProcessItem<T2>): void {\r\n\r\n    const {getDate1, getDate2, items1, items2 } = datedItems;\r\n\r\n    let curIndex1 = 0;\r\n    let curIndex2 = 0;\r\n\r\n    while (!!items1[curIndex1] || !!items2[curIndex2]) {\r\n      const date1: Date = !!items1[curIndex1] ? getDate1(items1[curIndex1]) : MAX_DATE;\r\n      const date2: Date = !!items2[curIndex2] ? getDate2(items2[curIndex2]) : MAX_DATE;\r\n      if (date1 < date2) {\r\n        processItem1(items1[curIndex1++]);\r\n      } else {\r\n        processItem2(items2[curIndex2++]);\r\n      }\r\n     }\r\n  }\r\n}\r\n\r\n\r\n// @dynamic\r\nexport class AssetsHistoryCalculator3 {\r\n\r\n  static operationsToHistoryItems2(\r\n          portfolioId: PortfolioId,\r\n          operationsSorted: Operation2[],\r\n          calculateData: CalculateData): AssetsHistoryItem2[] {\r\n\r\n    // нужны слепки и по опреациям и по ивентам\r\n    const history: AssetsHistoryItem2[] = [];\r\n    let prevItem: AssetsHistoryItem2 = AccountsHistoryHelper.prevItemMock(portfolioId);\r\n\r\n    // прогоняем в хронологическом порядке, отсортированные массивы\r\n    const datedItems: DatedItems<Operation2, SecurityEvent> = {\r\n      getDate1: (op: Operation2) => op.date,\r\n      getDate2: (sec: SecurityEvent) => sec.date,\r\n      items1: operationsSorted,\r\n      items2: calculateData.securitiesEvents\r\n    };\r\n\r\n    ChronoIterator.iterate<Operation2, SecurityEvent>(datedItems,\r\n      (op: Operation2) => {\r\n        prevItem = this.getOperationHistoryItem(prevItem, op);\r\n        history.push(prevItem);\r\n      },\r\n      (securityEvent: SecurityEvent) => {\r\n        const prevItemLocal = this.getSecEventHistoryItem(prevItem, securityEvent, calculateData.dataBondsDict);\r\n        if (prevItemLocal) {\r\n          prevItem = {...prevItemLocal};\r\n          history.push(prevItem);\r\n        }\r\n      });\r\n\r\n    return history;\r\n  }\r\n\r\n  private static getOperationHistoryItem(prevItem: AssetsHistoryItem2, operation: Operation2)\r\n    : AssetsHistoryItem2 {\r\n    const historyItem: AssetsHistoryItem2 = {\r\n      id: undefined as any,\r\n      portfolioId: prevItem.portfolioId,\r\n      appliedObject: { id: operation.id, type: AppliedObjectType.operation },\r\n      totalOperations: prevItem.totalOperations + 1,\r\n      date: operation.date,\r\n      accountsData: AccountsHistoryHelper.newAccountsDataFromOperation(prevItem.accountsData, operation),\r\n    };\r\n    return historyItem;\r\n  }\r\n\r\n  private static getSecEventHistoryItem(prevItem: AssetsHistoryItem2, securityEvent: SecurityEvent,\r\n                                        dataBondsDict: PartialRecord<Ticker, SecurityDataBond>): AssetsHistoryItem2 | null {\r\n\r\n    const accountsData: AssetsHistoryAccountsData | null = EventsProcessorHelper\r\n                .newAccountsDataFromEvent({...prevItem}, securityEvent, dataBondsDict);\r\n\r\n    if (accountsData) {\r\n      const historyItem: AssetsHistoryItem2 = {\r\n        id: undefined as any,\r\n        portfolioId: prevItem.portfolioId,\r\n        appliedObject: { id: securityEvent.id, type: AppliedObjectType.event },\r\n        totalOperations: prevItem.totalOperations,\r\n        date: securityEvent.date,\r\n        accountsData,\r\n      };\r\n      return historyItem;\r\n    }\r\n    return null;\r\n  }\r\n}\r\n\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {combineLatest, Observable, of} from 'rxjs';\r\nimport {OperationsHelper} from '../shared/operations.helper';\r\nimport {map, mergeMap, switchMap} from 'rxjs/operators';\r\nimport {PortfolioSummariesCalculator3} from './helpers/portfolio-summaries.calculator2';\r\nimport {AssetsHistoryCalculator3} from './helpers/assets-history.calculator3';\r\nimport {AssetsHistoryItem2, Ticker} from '../../api-public/models/assets-history';\r\nimport {CalculateData, CalculateDataFunc, PortfolioId} from '../../api-public/models/portfolio';\r\nimport {Operation2} from '../../api-public/models/operations';\r\nimport {PortfoliosStore} from '../../store/portfolios.store';\r\nimport {OperationsStore} from '../../store/operations.store';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class AssetsHistoryCalculator3Service {\r\n  constructor(private operationsStore: OperationsStore,\r\n              private portfoliosStore: PortfoliosStore,\r\n  ) {\r\n  }\r\n\r\n  calculate(portfolioId: PortfolioId, getCalculateData: CalculateDataFunc): Observable<AssetsHistoryItem2[]> {\r\n    const operations$: Observable<Operation2[]> = OperationsHelper.getAllOperations(this.operationsStore, portfolioId);\r\n    return operations$.pipe(\r\n      map((operations: Operation2[]) => operations.filter(op => op.isOn)),\r\n      mergeMap((operations: Operation2[]) => this.saveOperationsSummaries$(operations, portfolioId)),\r\n      switchMap((operations: Operation2[]) => {\r\n        const tickers: Ticker[] = operations.map(op => op.ticker);\r\n        if (tickers.length < 1) { return of([]); }\r\n        return getCalculateData(tickers).pipe(\r\n          map((calculateData) => {\r\n            return AssetsHistoryCalculator3.operationsToHistoryItems2(portfolioId, operations, calculateData);\r\n          })\r\n        );\r\n      }),\r\n    );\r\n  }\r\n\r\n  private saveOperationsSummaries$(operations: Operation2[], portfolioId: PortfolioId): Observable<Operation2[]> {\r\n    return PortfolioSummariesCalculator3.saveOperationsSummaries(this.portfoliosStore, portfolioId, operations)\r\n      .pipe(map(() => operations));\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiPromise2Service} from '../shared/promise-api2.service';\r\nimport {PortfolioId} from '../api-public/models/portfolio';\r\nimport {\r\n  AssetsHistoryItem2,\r\n  AssetsHistoryIdsItemsPage,\r\n  AssetsHistoryItemId,\r\n  AssetsHistoryPagedParams\r\n} from '../api-public/models/assets-history';\r\nimport {DexieAssetsHistoryHelper} from '../store-api/dexie-db/assets-history/assets-history.helper';\r\nimport {PagedParams, PageInfo} from '../api-public/models/common';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class AssetsHistoryStore {\r\n\r\n  constructor(\r\n    private apiPromise2Service: ApiPromise2Service\r\n  ) {\r\n  }\r\n\r\n  saveAssetsHistory(assetsHistory: AssetsHistoryItem2[]): Observable<AssetsHistoryItem2[]> {\r\n    const promise = DexieAssetsHistoryHelper.saveAssetsHistory(assetsHistory);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  deleteAssetsHistory(portfolioId: PortfolioId): Observable<any> {\r\n    const promise = DexieAssetsHistoryHelper.deleteAssetsHistory(null, portfolioId);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  // @deprecated: ask in store (full info there)\r\n  getAssetsHistory(portfolioId: PortfolioId): Observable<AssetsHistoryItem2[]> { // @deprecated use paged\r\n    const promise = DexieAssetsHistoryHelper.getAssetsHistory(portfolioId);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  getFullAssetsHistories(): Observable<AssetsHistoryItem2[]> {\r\n    const promise = DexieAssetsHistoryHelper.getFullAssetsHistories();\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n\r\n  // @deprecated: ask in store (full info there)\r\n  getPagedAssetsHistory(params: AssetsHistoryPagedParams): Observable<AssetsHistoryIdsItemsPage> {\r\n    const promise = DexieAssetsHistoryHelper.getPagedAssetsHistory(params);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  getAssetsHistoryItemsByIds(ids: AssetsHistoryItemId[]): Observable<AssetsHistoryItem2[]> {\r\n    const promise = DexieAssetsHistoryHelper.getAssetsHistoryItemsByIds(ids);\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiPromise2Service} from '../shared/promise-api2.service';\r\nimport {PortfolioId} from '../api-public/models/portfolio';\r\nimport {AssetsHistoryItem2} from '../api-public/models/assets-history';\r\nimport {DexieAssetsHistoryHelper} from '../store-api/dexie-db/assets-history/assets-history.helper';\r\nimport {DexieHelper} from '../store-api/dexie-db/shared/dexie.helper';\r\nimport {AppTable} from '../store-api/dexie-db/shared/config';\r\nimport Dexie from 'dexie';\r\nimport {DexieOperationsBaseHelper} from '../store-api/dexie-db/operations/operations-base.helper';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class AssetsHistoryConsistenceStore { // для восстановления историй после апдейта формата таблицы истории\r\n\r\n  constructor(\r\n    private apiPromise2Service: ApiPromise2Service\r\n  ) {\r\n  }\r\n\r\n  isHistoryUnConsistence(): Observable<boolean> { // идея такая проверяем если есть сделки но нет истории , то запускаем пересчет\r\n    const promise = this.isHistoryUnConsistenceLocal();\r\n    return this.apiPromise2Service.fromPromise(promise);\r\n  }\r\n\r\n  private isHistoryUnConsistenceLocal(): Promise<boolean> { // идея такая проверяем если есть сделки но нет истории , то запускаем пересчет\r\n    const tables = [AppTable.operations, AppTable.assetsHistory];\r\n    const checkHistoryConsistenceTransaction = (db: Dexie): Promise<any> => {\r\n\r\n      const operationsCount$ = DexieOperationsBaseHelper.totalOperationsCount(db);\r\n      const historyItemsCount$ = DexieAssetsHistoryHelper.totalItemsCount(db);\r\n\r\n      return Promise.all([operationsCount$, historyItemsCount$]).then(([operationsCount, historyItemsCount]) => {\r\n        return operationsCount > 0 && historyItemsCount < 1;\r\n      });\r\n    };\r\n    return DexieHelper.runTransactionDB(tables, checkHistoryConsistenceTransaction);\r\n  }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {CalculateDataFunc, PortfolioId} from '../models/portfolio';\r\nimport {Observable, of} from 'rxjs';\r\nimport {\r\n  AssetsHistoryItem2,\r\n  AssetsHistoryIdsItemsPage,\r\n  PricesDictByTicker3,\r\n  TimeLineData,\r\n  TimeLineDayData, AssetsHistoryItemId, AssetsHistoryPagedParams\r\n} from '../models/assets-history';\r\nimport {map, switchMap} from 'rxjs/operators';\r\nimport {AssetsHistoryCalculator3Service} from '../../calculators/assets-history-calculator3/assets-history-calculator3.service';\r\nimport {AssetsTimeline2Helper} from '../../calculators/assets-timeline-calculator/assets-timeline2.helper';\r\nimport {AssetsHistoryStore} from '../../store/assets-history.store';\r\nimport {MergePrices2Helper} from '../../calculators/merge-prices-calculator2/merge-prices2.helper';\r\nimport {PricesScale} from '../models/common-biz';\r\nimport {AssetsHistoryConsistenceStore} from '../../store/assets-history-consistence.store';\r\nimport {PageInfo} from '../models/common';\r\n\r\n@Injectable()\r\nexport class ApiAssetsHistoryService {\r\n  constructor(private assetsHistoryCalculator3Service: AssetsHistoryCalculator3Service,\r\n              private assetsHistoryStore: AssetsHistoryStore,\r\n              private assetsHistoryConsistenceStore: AssetsHistoryConsistenceStore) {\r\n  }\r\n\r\n  isHistoryUnConsistence(): Observable<boolean> { // идея такая проверяем если есть сделки но нет истории , то запускаем пересчет\r\n    return this.assetsHistoryConsistenceStore.isHistoryUnConsistence();\r\n  }\r\n\r\n  // todo: return value obsolete\r\n  calculate2(portfolioId: PortfolioId, getCalculateData: CalculateDataFunc): Observable<AssetsHistoryItem2[]> { // return obsolete\r\n    return this.assetsHistoryCalculator3Service.calculate(portfolioId, getCalculateData).pipe(\r\n      switchMap((assetsHistory: AssetsHistoryItem2[]) => {\r\n        return this.assetsHistoryStore.deleteAssetsHistory(portfolioId).pipe(map(() => assetsHistory));\r\n      }),\r\n      switchMap((assetsHistory: AssetsHistoryItem2[]) => {\r\n        return this.assetsHistoryStore.saveAssetsHistory(assetsHistory);\r\n      })\r\n    );\r\n  }\r\n\r\n  getFullAssetsHistories(): Observable<AssetsHistoryItem2[]> {\r\n    return this.assetsHistoryStore.getFullAssetsHistories();\r\n  }\r\n\r\n  // todo: deprecated: full history loaded\r\n  getAssetsHistory(portfolioId: PortfolioId): Observable<AssetsHistoryItem2[]> {\r\n    return this.assetsHistoryStore.getAssetsHistory(portfolioId);\r\n  }\r\n\r\n  // todo: deprecated: full history loaded\r\n  getAssetsHistoryItemsByIds(ids: AssetsHistoryItemId[]): Observable<AssetsHistoryItem2[]> {\r\n    return this.assetsHistoryStore.getAssetsHistoryItemsByIds(ids);\r\n  }\r\n\r\n  // todo: deprecated: full history loaded\r\n  getPagedAssetsHistory(params: AssetsHistoryPagedParams): Observable<AssetsHistoryIdsItemsPage> {\r\n    return this.assetsHistoryStore.getPagedAssetsHistory(params);\r\n  }\r\n\r\n  produceTimeLine(assetsHistory: AssetsHistoryItem2[], scale: PricesScale): TimeLineData {\r\n    return AssetsTimeline2Helper.assetsHistoryToTimeLine(assetsHistory, scale);\r\n  }\r\n\r\n  mergePricesToTimeLine$(timeline: TimeLineDayData[], pricesDict: PricesDictByTicker3): Observable<TimeLineDayData[]> {\r\n    return of(MergePrices2Helper.mergePricesToTimeLine(timeline, pricesDict));\r\n  }\r\n\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {CalculateData, CalculateDataFunc, PortfolioId} from '../models/portfolio';\r\nimport { ItemsPage2, PageInfo, Sorting } from '../models/common';\r\nimport {Operation2, OperationId, OperationsItemsPage, OperationsTableField} from '../models/operations';\r\nimport {AssetsHistoryItem2} from '../models/assets-history';\r\nimport {ApiAssetsHistoryService} from './api-assets-history.service';\r\nimport {ApiPromise2Service} from '../../shared/promise-api2.service';\r\nimport {OperationsStore} from '../../store/operations.store';\r\n\r\n@Injectable()\r\nexport class ApiOperationsService {\r\n  constructor(private apiPromiseService: ApiPromise2Service,\r\n              private operationsStore: OperationsStore,\r\n              private apiAssetsHistoryService: ApiAssetsHistoryService\r\n  ) {}\r\n\r\n  calculateAssetsSummaries2(portFolioId: PortfolioId, getCalculateData: CalculateDataFunc): Observable<AssetsHistoryItem2[]> {\r\n    return this.apiAssetsHistoryService.calculate2(portFolioId, getCalculateData);\r\n  }\r\n\r\n  getOperationsByIds(operationsIds: OperationId[]): Observable<Operation2[]> {\r\n    return this.operationsStore.getOperationsByIds(operationsIds);\r\n  }\r\n\r\n  getPagedOperations2(portfolioId: PortfolioId, pageInfo: PageInfo, sorting: Sorting<OperationsTableField>)\r\n    : Observable<OperationsItemsPage> {\r\n      return this.operationsStore.getPagedOperations2(portfolioId, pageInfo, sorting);\r\n  }\r\n\r\n  // with assets history\r\n  saveOperations4(operations: Operation2[]): Observable<Operation2[]> {\r\n    return this.operationsStore.saveOperations2(operations);\r\n  }\r\n\r\n  changeOperationIsOnStates(operationIds: OperationId[]): Observable<boolean> {\r\n    return this.operationsStore.changeOperationIsOnStates(operationIds);\r\n  }\r\n\r\n  copyOperationsToPortfolio(portfolioId: PortfolioId, operationIds: OperationId[], move?: boolean): Observable<boolean> {\r\n    return this.operationsStore.copyOperationsToPortfolio(portfolioId, operationIds, move);\r\n  }\r\n\r\n  deleteOperations(portfolioId: PortfolioId, ids?: OperationId[]): Observable<OperationId> {\r\n    return this.operationsStore.deleteOperations(portfolioId, ids); // если ids null, то удалить все из портфеля\r\n  }\r\n}\r\n\r\n","import {Currency, DayString, Exchange, SecuritySource} from './common-biz';\r\nimport {ItemsPage2, PagedParams} from './common';\r\n\r\nexport type SecurityData = SecurityBondData;\r\n\r\nexport interface SecurityBondData {\r\n  parValue: number; // номинальная стоимость облигации\r\n}\r\n\r\nexport enum SecurityType { share = 's', bond = 'b', fond = 'f', currency = 'c', metal = 'm' }\r\n\r\nexport type SecurityId = number;\r\n\r\nexport interface Security3 {\r\n  id: SecurityId | undefined;\r\n  ticker: string;\r\n  isin: string;\r\n  shortName: string;\r\n  fullName: string;\r\n  currency: Currency;\r\n  updated: Date;\r\n  source: SecuritySource;\r\n  logoFileName: string | null;\r\n  securitySectorId: SecuritySectorId | null;\r\n  // exchange: Exchange; todo: пока не знаю переносить или нет сюда\r\n  type: SecurityType;\r\n  data?: SecurityData;\r\n}\r\n\r\n/* @deprecated */\r\nexport interface SecurityDayPrice {\r\n  ticker: string;\r\n  date: DayString;\r\n  price: number;\r\n  currency: Currency;\r\n  updated: Date;\r\n}\r\n\r\nexport interface SecuritySearchData {\r\n  ticker: string;\r\n  isin: string;\r\n  exchange: Exchange;\r\n}\r\n\r\nexport type SecuritySectorId = number;\r\n\r\nexport interface SecuritySector {\r\n  id: SecuritySectorId;\r\n  title: string;\r\n}\r\n\r\nexport enum SecuritiesTableField {\r\n  ticker = 'ticker',\r\n  isin = 'isin',\r\n  shortName = 'shortName',\r\n  securitySectorId = 'securitySectorId',\r\n  fullName = 'fullName',\r\n  source = 'source',\r\n  isApproved = 'isApproved',\r\n  createdAt = 'createdAt',\r\n  logoFileName = 'logoFileName',\r\n}\r\n\r\nexport interface SecuritySearchParams {\r\n  foo: any; // todo:\r\n}\r\n\r\nexport type SecuritiesPagedParams = PagedParams<SecuritiesTableField, void>;\r\nexport type SecuritiesItemsPage = ItemsPage2<Security3, SecuritiesTableField, SecuritySearchParams>;\r\n","import {Dict, PartialRecord} from '../models/common';\r\n\r\n// @dynamic\r\nexport class DictArrayMapper {\r\n\r\n  static dictToArray<T>(dict: Dict<T>): T[] {\r\n    return Object.keys(dict).map(key => dict[key]);\r\n  }\r\n\r\n  // @deprecated: use arrayToPartialRecord\r\n  static arrayToDict(arr: any[], byName = 'id'): Dict<any> {\r\n    const dict: { [id: number]: any } = {};\r\n    arr.forEach(item => {\r\n      dict[item[byName]] = item;\r\n    });\r\n    return dict;\r\n  }\r\n\r\n  // @deprecated: use arrayToPartialRecord\r\n  static arrayToTrueDict(arr: any[], byName = 'id'): Dict<true> {\r\n    const dict: Dict<true> = {};\r\n    arr.forEach(item => {\r\n      dict[item[byName]] = true;\r\n    });\r\n    return dict;\r\n  }\r\n\r\n  static distinctArray<T>(arr: T[]): T[] {\r\n    const onlyUnique = (value: any, index: any, self: any) => {\r\n      return self.indexOf(value) === index;\r\n    };\r\n    return arr.filter(onlyUnique);\r\n  }\r\n\r\n  static arrayToPartialRecord<TItem>(array: TItem[], keyField: (item: TItem) => string): PartialRecord<string, TItem> {\r\n    const partRec: PartialRecord<string, TItem> = {};\r\n    array.forEach(item => partRec[keyField(item)] = item);\r\n    return partRec;\r\n  }\r\n}\r\n","import {PartialRecord} from '../../../api-public/models/common';\r\nimport {PricesDictByTicker3, Ticker} from '../../../api-public/models/assets-history';\r\nimport {Security3} from '../../../api-public/models/securities';\r\nimport {DictArrayMapper} from '../../../api-public/helpers/dict-array.mapper';\r\n\r\nconst dictToReal: PartialRecord<Ticker, Ticker> = {\r\n  USD_RUB: 'USD000UTSTOM',\r\n  EUR_RUB: 'EUR_RUB__TOM',\r\n  CNY_RUB: 'CNYRUB_TOM',\r\n  HKD_RUB: 'HKDRUB_TOM'\r\n};\r\n\r\nexport class CurrenciesMappers {\r\n\r\n  static tickersOrIsinsToReal(tickersOrIsins: Ticker[]): Ticker[] {\r\n    const ret: Ticker[] = (tickersOrIsins || []).map(i => {\r\n      const newTicker = dictToReal[i];\r\n      return !!newTicker ? newTicker : i;\r\n    });\r\n    return ret;\r\n  }\r\n\r\n  static tickersOrIsinsToClient(tickersOrIsinsOrigin: Ticker[], securities: Security3[]): Security3[] {\r\n    const dictSec = DictArrayMapper.arrayToPartialRecord<Security3>(securities, sec => sec.ticker);\r\n    const ret = tickersOrIsinsOrigin\r\n      .map(ticker => {\r\n        const realTicker = dictToReal[ticker];\r\n        if (!!realTicker) {\r\n          const security = dictSec[realTicker];\r\n          if (security) {\r\n            return {...security, ticker};\r\n          }\r\n        }\r\n        return null;\r\n      }).filter(i => !!i) as Security3[];\r\n    return [...securities, ...ret];\r\n  }\r\n\r\n  static pricesToClient(tickersOrigin: Ticker[], dict: PricesDictByTicker3): PricesDictByTicker3 {\r\n    const dictAdd: PricesDictByTicker3 = {};\r\n    tickersOrigin.forEach((tickerOrigin) => {\r\n      const realTicker = dictToReal[tickerOrigin];\r\n      if (!!realTicker && dict[realTicker]) {\r\n        dictAdd[tickerOrigin] = dict[realTicker];\r\n      }\r\n    });\r\n    return {...dict, ...dictAdd};\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {Currency, SecuritySource} from '../../api-public/models/common-biz';\r\nimport {\r\n  SecuritiesItemsPage,\r\n  SecuritiesPagedParams,\r\n  SecuritiesTableField,\r\n  Security3,\r\n  SecuritySearchData,\r\n  SecuritySectorId,\r\n  SecurityType\r\n} from '../../api-public/models/securities';\r\nimport {Ticker} from '../../api-public/models/assets-history';\r\nimport {CurrenciesMappers} from './_currencies-mappers/currencies.mappers';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalSecuritiesService {\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n  }\r\n\r\n  /*getSecurityByTicker(ticker: string, exchange: Exchange): Observable<Security3 | null> {\r\n    const searchData: SecuritySearchData = {\r\n      exchange, ticker, isin: ''\r\n    };\r\n    return this.getSecurityBySearchData(searchData);\r\n  }*/\r\n\r\n  getSecuritiesByTerm(term: string, source: SecuritySource): Observable<Security3[]> {\r\n    const url = 'api/securities/by-term';\r\n    const params = {\r\n      term, source\r\n    };\r\n    return this.httpClient.get(url, {params}).pipe(\r\n      map(data => {\r\n        return Mapper.securitiesToClient(data as ServerSecurity[]);\r\n      })\r\n    );\r\n  }\r\n\r\n  getSecurityByTickerOrIsin(tickerOrIsins: Ticker[]): Observable<Security3[]> {\r\n    const url = 'api/securities/by-tickers-or-isins';\r\n    const params = { tickersOrIsins: CurrenciesMappers.tickersOrIsinsToReal(tickerOrIsins) };\r\n    return this.httpClient.post(url, params).pipe(\r\n      map(data => {\r\n        const srvSecurities: ServerSecurity[] = data as ServerSecurity[];\r\n        const ret = Mapper.securitiesToClient(srvSecurities);\r\n        const ret2 = CurrenciesMappers.tickersOrIsinsToClient(tickerOrIsins, ret);\r\n        return ret2;\r\n      })\r\n    );\r\n  }\r\n\r\n  getSecuritiesPage(pagedParams: SecuritiesPagedParams): Observable<SecuritiesItemsPage> {\r\n    const url = 'api/securities/page';\r\n    const params: any = Mapper.paramsToServer(pagedParams);\r\n    return this.httpClient.get(url, {params}).pipe(\r\n      map((resp) => {\r\n        const ret = Mapper.itemsPageToClient(resp as any as SrvItemsPage);\r\n        return ret;\r\n      })\r\n    );\r\n  }\r\n\r\n}\r\n\r\ninterface ServerSecurity {\r\n  id: number;\r\n  ticker: string;\r\n  isin: string;\r\n  shortName: string;\r\n  fullName: string;\r\n  currency: Currency;\r\n  source: SecuritySource;\r\n  logoFileName: string | null;\r\n  securitySectorId: SecuritySectorId | null;\r\n  data: any;\r\n  type: any; // SecurityType\r\n}\r\n\r\ninterface SrvSecuritiesParams {\r\n  page: number;\r\n  pageSize: number;\r\n  sorting?: string;\r\n  asc?: boolean;\r\n}\r\n\r\ninterface SrvItemsPage {\r\n  items: ServerSecurity[];\r\n  total: number;\r\n\r\n  pagedParams: {\r\n    page: number;\r\n    pageSize: number;\r\n    sorting: {\r\n      field: string;\r\n      isAsc: boolean;\r\n    };\r\n  };\r\n}\r\n\r\nclass Mapper {\r\n\r\n  static paramsToServer(params: SecuritiesPagedParams): SrvSecuritiesParams {\r\n    const ret: SrvSecuritiesParams = {\r\n      page: params.pageInfo.page,\r\n      pageSize: params.pageInfo.pageSize,\r\n    };\r\n    if (!!params.sorting.field) {\r\n      ret.sorting = params.sorting.field;\r\n      ret.asc = params.sorting.isAsc;\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  static itemsPageToClient(srvItemsPage: SrvItemsPage): SecuritiesItemsPage {\r\n    const ret: SecuritiesItemsPage = {\r\n      items: this.securitiesToClient(srvItemsPage.items),\r\n      total: srvItemsPage.total,\r\n\r\n      pagedParams: {\r\n        pageInfo: {\r\n          page: srvItemsPage.pagedParams.page,\r\n          pageSize: srvItemsPage.pagedParams.pageSize,\r\n        },\r\n        sorting: {\r\n          field: srvItemsPage.pagedParams.sorting.field as SecuritiesTableField,\r\n          isAsc: srvItemsPage.pagedParams.sorting.isAsc\r\n        },\r\n        searchParams: { foo: '' }\r\n      },\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static securitiesToClient(items: ServerSecurity[]): Security3[] {\r\n    return items.map(item => this.securityToClient(item));\r\n  }\r\n\r\n  static securityToClient(item: ServerSecurity): Security3 {\r\n    const ret: Security3 = {\r\n      id: item.id,\r\n      currency: item.currency,\r\n      isin: item.isin,\r\n      shortName: item.shortName,\r\n      fullName: item.fullName,\r\n      source: item.source,\r\n      ticker: item.ticker,\r\n      updated: new Date(),\r\n      logoFileName: item.logoFileName,\r\n      securitySectorId: item.securitySectorId,\r\n      data: item.data,\r\n      type: item.type\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static emptySecurity(securitySearchData: SecuritySearchData): Security3 {\r\n    const ret: Security3 = {\r\n      id: undefined,\r\n      currency: Currency.undefined,\r\n      isin: securitySearchData.isin,\r\n      shortName: '',\r\n      fullName: '',\r\n      source: SecuritySource.undefined,\r\n      ticker: securitySearchData.ticker,\r\n      updated: new Date(),\r\n      logoFileName: null,\r\n      securitySectorId: null,\r\n      type: SecurityType.share\r\n    };\r\n    return ret;\r\n  }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport { SecuritySource} from '../models/common-biz';\r\nimport {SecuritiesItemsPage, SecuritiesPagedParams, Security3} from '../models/securities';\r\nimport {ApiExternalSecuritiesService} from '../../store-api/api-external/api-securities.service';\r\nimport {Ticker} from '../models/assets-history';\r\n\r\n@Injectable()\r\nexport class ApiSecuritiesService {\r\n\r\n  constructor(private apiExternalSecuritiesService: ApiExternalSecuritiesService) {\r\n  }\r\n\r\n  getSecurities(tickersOrIsins: Ticker[]): Observable<Security3[]> {\r\n    return this.apiExternalSecuritiesService.getSecurityByTickerOrIsin(tickersOrIsins);\r\n  }\r\n\r\n  // used by client: while creating operation manually\r\n  getSecuritiesByTerm(term: string, preferredSource: SecuritySource): Observable<Security3[]> {\r\n    return this.apiExternalSecuritiesService.getSecuritiesByTerm(term, preferredSource);\r\n  }\r\n\r\n  getSecuritiesPage(pagedParams: SecuritiesPagedParams): Observable<SecuritiesItemsPage> {\r\n    return this.apiExternalSecuritiesService.getSecuritiesPage(pagedParams);\r\n  }\r\n}\r\n\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {Price, PricesScale} from '../../api-public/models/common-biz';\r\nimport {PeriodScale, PricesDictByDate3, PricesDictByTicker3, Ticker} from '../../api-public/models/assets-history';\r\nimport {CurrenciesMappers} from './_currencies-mappers/currencies.mappers';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalSecuritiesPricesService {\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n  }\r\n\r\n  // @deprecated: unused\r\n  /*getSecuritiesPricesGroups2(tickers: Ticker[], scale: PricesScale): Observable<PricesDictByTicker3> {\r\n    const url = 'api/securities-prices/groups2';\r\n    const body = { tickers, scale };\r\n    return this.httpClient.post(url, body).pipe(\r\n      map(data => {\r\n        return Mapper.pricesToClient(data as ServerPricesData);\r\n      })\r\n    );\r\n  }\r\n\r\n  // @deprecated: unused\r\n  getSecuritiesPricesGroups3(tickers: Ticker[], scale: PeriodScale): Observable<PricesDictByTicker3> {\r\n    const url = 'api/securities-prices/groups3';\r\n    const body = { tickers, scale: Mapper.periodScaleToPricesScale(scale) };\r\n    return this.httpClient.post(url, body).pipe(\r\n      map(data => {\r\n        return Mapper.pricesToClient(data as ServerPricesData);\r\n      })\r\n    );\r\n  }*/\r\n\r\n  getSecuritiesPricesGroups4(tickers: Ticker[], scale: PeriodScale, limit: number): Observable<PricesDictByTicker3> {\r\n    const url = 'api/securities-prices/groups4';\r\n    const body = { tickers: CurrenciesMappers.tickersOrIsinsToReal(tickers), scale, limit };\r\n    return this.httpClient.post(url, body).pipe(\r\n      map(data => {\r\n        const ret = Mapper.pricesToClient(data as ServerPricesData);\r\n        const ret2 = CurrenciesMappers.pricesToClient(tickers, ret);\r\n        return ret2;\r\n      })\r\n    );\r\n  }\r\n}\r\n\r\ninterface ServerPricesData {\r\n  prices: {[ticker: string]: {[date: string]: any[]}};\r\n}\r\n\r\nclass Mapper {\r\n\r\n /* static periodScaleToPricesScale(period: PeriodScale): PricesScale {\r\n    const scales = {\r\n      [PeriodScale.days]: PricesScale.months6,\r\n      [PeriodScale.weeks]: PricesScale.year,\r\n      [PeriodScale.months]: PricesScale.max\r\n    };\r\n    return scales[period];\r\n  }*/\r\n\r\n  static pricesToClient(srvData: ServerPricesData): PricesDictByTicker3 {\r\n    const ret: PricesDictByTicker3 = {};\r\n\r\n    const prices = srvData.prices;\r\n    Object.keys(prices).forEach(ticker => {\r\n      ret[ticker] = this.byDatesToClient(prices[ticker]);\r\n    });\r\n\r\n    return ret;\r\n  }\r\n\r\n  private static byDatesToClient(srvByDatesDict: {[date: string]: any[]}): PricesDictByDate3 {\r\n    const ret: PricesDictByDate3 = {};\r\n\r\n    Object.keys(srvByDatesDict).forEach(date => {\r\n      const price: Price = this.priceToClient(srvByDatesDict[date]);\r\n      if (price.amount !== 0) { // нулевые цены пока игнорируем, заведена задаа для админки, почему они образовываются\r\n        ret[date] = this.priceToClient(srvByDatesDict[date]);\r\n      }\r\n    });\r\n    return ret;\r\n  }\r\n\r\n  private static priceToClient(data: any[]): Price {\r\n    const price: Price = {\r\n      amount: data[0],\r\n      currency: data[1]\r\n    };\r\n    return price;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {PeriodScale, PricesDictByTicker3, Ticker} from '../models/assets-history';\r\nimport {ApiExternalSecuritiesPricesService} from '../../store-api/api-external/api-securities-prices.service';\r\n\r\n@Injectable()\r\nexport class ApiSecuritiesPricesService {\r\n\r\n  constructor(\r\n    private apiExternalSecuritiesPricesService: ApiExternalSecuritiesPricesService,\r\n  ) {\r\n  }\r\n\r\n  getSecuritiesPricesGroups4(tickers: Ticker[], scale: PeriodScale, limit: number): Observable<PricesDictByTicker3> {\r\n    return this.apiExternalSecuritiesPricesService.getSecuritiesPricesGroups4(tickers, scale, limit);\r\n  }\r\n\r\n  // @deprecated: use getSecuritiesPricesGroups3\r\n  /*getSecuritiesPricesGroups2_deprecated(tickers: Ticker[]): Observable<PricesDictByTicker3> {\r\n    return this.apiExternalSecuritiesPricesService.getSecuritiesPricesGroups2(tickers, PricesScale.months6);\r\n  }\r\n\r\n  getSecuritiesPricesGroups3(tickers: Ticker[], scale: PeriodScale): Observable<PricesDictByTicker3> {\r\n    return this.apiExternalSecuritiesPricesService.getSecuritiesPricesGroups3(tickers, scale);\r\n  }*/\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {DexieDbHelper} from '../../store-api/dexie-db/shared/db.helper';\r\nimport {ApiPromise2Service} from '../../shared/promise-api2.service';\r\n\r\n@Injectable()\r\nexport class ApiDbService {\r\n\r\n  constructor(private apiPromiseService: ApiPromise2Service) {\r\n  }\r\n\r\n  openDb(): Observable<any> {\r\n    const promise = DexieDbHelper.openDb(/*this.autoTriggersService*/);\r\n    return this.apiPromiseService.fromPromise(promise);\r\n  }\r\n\r\n  deleteDb(): Observable<any> {\r\n    const promise = DexieDbHelper.deleteDb();\r\n    return this.apiPromiseService.fromPromise(promise);\r\n  }\r\n\r\n  dbVersion(): Observable<string> {\r\n    const promise = DexieDbHelper.dbVersion();\r\n    return this.apiPromiseService.fromPromise(promise);\r\n  }\r\n}\r\n\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable, of} from 'rxjs';\r\nimport {CurrencyPrice} from '../../api-public/models/currencies';\r\nimport {map} from 'rxjs/operators';\r\nimport {Currency, DayString} from '../../api-public/models/common-biz';\r\nimport {PartialRecord} from '../../api-public/models/common';\r\nimport {Ticker} from '../../api-public/models/assets-history';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalCurrenciesService {\r\n\r\n  constructor(\r\n    private httpClient: HttpClient\r\n  ) {\r\n  }\r\n\r\n  getCurrenciesPrices(): Observable<CurrencyPrice[]> {\r\n    const url = 'api/misc/currencies-prices';\r\n    return this.httpClient.get(url).pipe(\r\n      map(data => {\r\n        return Mapper.currenciesToClient(data as ServerCurrencyFix[]);\r\n      })\r\n    );\r\n  }\r\n}\r\n\r\ninterface ServerCurrencyFix {\r\n  currency: Currency;\r\n  date: DayString;\r\n  fixInRub: number;\r\n}\r\n\r\nclass Mapper {\r\n  static currenciesToClient(items: ServerCurrencyFix[]): CurrencyPrice[] {\r\n    return items.map(item => this.currencyToClient(item));\r\n  }\r\n\r\n  static currencyToClient(item: ServerCurrencyFix): CurrencyPrice {\r\n    const ret: CurrencyPrice = {\r\n      currency: item.currency,\r\n      date: item.date,\r\n      fixInRub: item.fixInRub\r\n    };\r\n    return ret;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {CurrencyPrice} from '../models/currencies';\r\nimport {ApiExternalCurrenciesService} from '../../store-api/api-external/api-currencies.service';\r\n// import {CurrenciesStore} from '../../store/currencies.store';\r\nimport {CurrencyMap} from '../models/common-biz';\r\n\r\n@Injectable()\r\nexport class ApiCurrenciesService {\r\n  constructor(private apiExternalCurrenciesService: ApiExternalCurrenciesService,\r\n              /*private currenciesStore: CurrenciesStore*/) {\r\n  }\r\n\r\n  getCurrenciesPrices(): Observable<CurrencyPrice[]> {\r\n    return this.apiExternalCurrenciesService.getCurrenciesPrices();\r\n  }\r\n\r\n  /*getCurrencyMap(): Observable<CurrencyMap> {\r\n    return this.currenciesStore.getCurrencyMap();\r\n  }*/\r\n}\r\n","\r\n// @dynamic\r\nexport class UidGeneratorHelper {\r\n  private static idNumber = Number.MAX_SAFE_INTEGER;\r\n\r\n  static newId(): string {\r\n    return this.makeId(15);\r\n  }\r\n\r\n  static makeId(length: number): string {\r\n    let result = '';\r\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n    const charactersLength = characters.length;\r\n    for (let i = 0; i < length; i++ ) {\r\n      result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  static newIdNumber(): number {\r\n    return --this.idNumber;\r\n  }\r\n}\r\n","export class TransliterateHelper {\r\n  static transliterate(text: string): string {\r\n    text = text\r\n      .replace(/\\u0401/g, 'YO')\r\n      .replace(/\\u0419/g, 'I')\r\n      .replace(/\\u0426/g, 'TS')\r\n      .replace(/\\u0423/g, 'U')\r\n      .replace(/\\u041A/g, 'K')\r\n      .replace(/\\u0415/g, 'E')\r\n      .replace(/\\u041D/g, 'N')\r\n      .replace(/\\u0413/g, 'G')\r\n      .replace(/\\u0428/g, 'SH')\r\n      .replace(/\\u0429/g, 'SCH')\r\n      .replace(/\\u0417/g, 'Z')\r\n      .replace(/\\u0425/g, 'H')\r\n      .replace(/\\u042A/g, '')\r\n      .replace(/\\u0451/g, 'yo')\r\n      .replace(/\\u0439/g, 'i')\r\n      .replace(/\\u0446/g, 'ts')\r\n      .replace(/\\u0443/g, 'u')\r\n      .replace(/\\u043A/g, 'k')\r\n      .replace(/\\u0435/g, 'e')\r\n      .replace(/\\u043D/g, 'n')\r\n      .replace(/\\u0433/g, 'g')\r\n      .replace(/\\u0448/g, 'sh')\r\n      .replace(/\\u0449/g, 'sch')\r\n      .replace(/\\u0437/g, 'z')\r\n      .replace(/\\u0445/g, 'h')\r\n      .replace(/\\u044A/g, '\\'')\r\n      .replace(/\\u0424/g, 'F')\r\n      .replace(/\\u042B/g, 'I')\r\n      .replace(/\\u0412/g, 'V')\r\n      .replace(/\\u0410/g, 'a')\r\n      .replace(/\\u041F/g, 'P')\r\n      .replace(/\\u0420/g, 'R')\r\n      .replace(/\\u041E/g, 'O')\r\n      .replace(/\\u041B/g, 'L')\r\n      .replace(/\\u0414/g, 'D')\r\n      .replace(/\\u0416/g, 'ZH')\r\n      .replace(/\\u042D/g, 'E')\r\n      .replace(/\\u0444/g, 'f')\r\n      .replace(/\\u044B/g, 'i')\r\n      .replace(/\\u0432/g, 'v')\r\n      .replace(/\\u0430/g, 'a')\r\n      .replace(/\\u043F/g, 'p')\r\n      .replace(/\\u0440/g, 'r')\r\n      .replace(/\\u043E/g, 'o')\r\n      .replace(/\\u043B/g, 'l')\r\n      .replace(/\\u0434/g, 'd')\r\n      .replace(/\\u0436/g, 'zh')\r\n      .replace(/\\u044D/g, 'e')\r\n      .replace(/\\u042F/g, 'Ya')\r\n      .replace(/\\u0427/g, 'CH')\r\n      .replace(/\\u0421/g, 'S')\r\n      .replace(/\\u041C/g, 'M')\r\n      .replace(/\\u0418/g, 'I')\r\n      .replace(/\\u0422/g, 'T')\r\n      .replace(/\\u042C/g, '\\'')\r\n      .replace(/\\u0411/g, 'B')\r\n      .replace(/\\u042E/g, 'YU')\r\n      .replace(/\\u044F/g, 'ya')\r\n      .replace(/\\u0447/g, 'ch')\r\n      .replace(/\\u0441/g, 's')\r\n      .replace(/\\u043C/g, 'm')\r\n      .replace(/\\u0438/g, 'i')\r\n      .replace(/\\u0442/g, 't')\r\n      .replace(/\\u044C/g, '\\'')\r\n      .replace(/\\u0431/g, 'b')\r\n      .replace(/\\u044E/g, 'yu');\r\n\r\n    return text;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ApiPortfoliosService} from './api-portfolios.service';\r\nimport {ApiOperationsService} from './api-operations.service';\r\nimport {UidGeneratorHelper} from '../helpers/uid-generator.helper';\r\nimport {CalculateData, CalculateDataFunc, Portfolio2, PortfolioId} from '../models/portfolio';\r\nimport {TransliterateHelper} from '../helpers/transliterate.helper';\r\nimport {map, switchMap} from 'rxjs/operators';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiAssetsHistoryService} from './api-assets-history.service';\r\nimport {Operation2} from '../models/operations';\r\nimport {Currency, Exchange, OperationSource, OperationType} from '../models/common-biz';\r\nimport {Ticker} from '../models/assets-history';\r\n\r\n@Injectable()\r\nexport class ApiDemoCreator2Service {\r\n  constructor(private apiPortfoliosService: ApiPortfoliosService,\r\n              private apiOperationsService: ApiOperationsService,\r\n              private apiAssetsHistoryService: ApiAssetsHistoryService\r\n  ) {\r\n  }\r\n\r\n  createDemoPortfolio$(getCalculateData: CalculateDataFunc): Observable<Operation2[]> {\r\n    return this.createPortfolio$().pipe(\r\n      switchMap((portfolio: Portfolio2) => {\r\n        const operations = MockOperations.getOperations(portfolio.id as PortfolioId);\r\n        return this.apiOperationsService.saveOperations4(operations);\r\n      }),\r\n      switchMap((savedOperations: Operation2[]) => {\r\n        return this.apiAssetsHistoryService.calculate2(savedOperations[0].portfolioId, getCalculateData).pipe(\r\n          map(() => savedOperations)\r\n        );\r\n      })\r\n    );\r\n  }\r\n\r\n  private createPortfolio$(): Observable<Portfolio2> {\r\n    const title = 'Демо-портфель-' + UidGeneratorHelper.makeId(5) + '';\r\n    const portfolio: Portfolio2 = {\r\n      id: null,\r\n      title,\r\n      totalOperations: 0,\r\n      urlName: TransliterateHelper.transliterate(title),\r\n      excludedOperations: 0,\r\n      buyOperations: 0,\r\n      sellOperations: 0,\r\n      assetsOrder: [],\r\n    };\r\n    return this.apiPortfoliosService.savePortfolio(portfolio);\r\n  }\r\n}\r\n\r\nclass MockOperations {\r\n  static rnd(max: number, min: number): number {\r\n    min = Math.ceil(min);\r\n    max = Math.floor(max);\r\n    return Math.floor(Math.random() * (max - min)) + min; // Максимум не включается, минимум включается\r\n  }\r\n\r\n  static getOperations(portfolioId: PortfolioId): Operation2[] {\r\n    const operation1: Operation2 = {\r\n      count: MockOperations.rnd(10, 50), date: new Date(2022, 1, 18), id: null, portfolioId, ticker: 'GAZP',\r\n      type: OperationType.buy, unitPrice: 224.74, currency: Currency.rub, exchange: Exchange.moex, // broker: Broker.sber,\r\n      isOn: true, source: OperationSource.manual // SecuritySource.moexApi\r\n    };\r\n    const operation2: Operation2 = {\r\n      count: MockOperations.rnd(1, 10), date: new Date(2017, 7, 17), id: null, portfolioId, ticker: 'GMKN',\r\n      type: OperationType.buy, unitPrice: 8930, currency: Currency.rub, exchange: Exchange.moex, // broker: Broker.sber,\r\n      isOn: true, source: OperationSource.manual // SecuritySource.moexApi\r\n    };\r\n    const operation3: Operation2 = {\r\n      count: MockOperations.rnd(1, 20), date: new Date(2017, 5, 27), id: null, portfolioId, ticker: 'SBER',\r\n      type: OperationType.buy, unitPrice: 145.59,\r\n      currency: Currency.rub, exchange: Exchange.moex, //  broker: Broker.sber,\r\n      isOn: true, source: OperationSource.manual // SecuritySource.moexApi\r\n    };\r\n    const operation4: Operation2 = {\r\n      count: MockOperations.rnd(1, 20), date: new Date(2022, 0, 19), id: null, portfolioId, ticker: 'SBER',\r\n      type: OperationType.buy, unitPrice: 231, currency: Currency.rub, exchange: Exchange.moex, // broker: Broker.sber,\r\n      isOn: true, source: OperationSource.manual // SecuritySource.moexApi\r\n    };\r\n    const operation5: Operation2 = {\r\n      count: MockOperations.rnd(1, 5), date: new Date(2021, 10, 26), id: null, portfolioId, ticker: 'MAIL',\r\n      type: OperationType.buy, unitPrice: 1206.8, currency: Currency.rub, exchange: Exchange.moex, // broker: Broker.sber,\r\n      isOn: true, source: OperationSource.manual // SecuritySource.moexApi\r\n    };\r\n    return [operation1, operation2, operation3, operation4, operation5];\r\n  }\r\n}\r\n","import * as XLSX from 'xlsx';\r\nimport {Sheet2JSONOpts} from 'xlsx';\r\n\r\n// @dynamic\r\nexport class ExcelBinaryReaderHelper {\r\n  static excelNumberToDate(excelSerialDate: number): Date {\r\n    const ret = new Date(Date.UTC(0, 0, excelSerialDate - 1));\r\n    return ret;\r\n  }\r\n\r\n  static binaryToObject(binaryData: any): any[] {\r\n    return this.binaryToObjectFull(binaryData);\r\n  }\r\n\r\n  static binaryToObject2(binaryData: any, blankRows = false): any[] {\r\n    return this.binaryToObjectFull(binaryData, blankRows);\r\n  }\r\n\r\n  static binaryToObjectFull(binaryData: any, blankRows = false, sheetNum = 0): any[] {\r\n    const workbook = XLSX.read(binaryData, {type: 'binary'});\r\n    const name = workbook.SheetNames[sheetNum];\r\n    const sheet = workbook.Sheets[name];\r\n\r\n    const opts: Sheet2JSONOpts = {\r\n      blankrows: blankRows,\r\n      header: 'A',\r\n    };\r\n    const data: any[] = XLSX.utils.sheet_to_json(sheet, opts);\r\n    return data;\r\n  }\r\n}\r\n","import {ParsedOperation} from '../../../api-public/models/operations';\r\n\r\nexport enum ParserActionTypeT {\r\n  doSearchOperationsMainTitle = 'doSearchOperationsMainTitle', // Ищи заголовок - 2.1 Сделки\r\n\r\n  doSearchOperationsHeaders = 'doSearchOperationsHeaders', // Ищи строку заголовков сделок\r\n  doSearchOperationRow = 'doSearchOperationRow', // Ищи строку сделки\r\n\r\n  // doSearchSubOperationsBlock = 'doSearchSubOperationsBlock', // Ищи начало блока предмета сделок: Акция/Пай\r\n  // doSearchOperationsBlockCurrency = 'doSearchOperationsBlockCurrency', // Ищи строку указания валюты блока\r\n  // doSearchOperationsColumnsInfo = 'doSearchOperationsColumnsInfo', // Ищи строку о столбцами\r\n  // doSearchOperationsTickerInfo = 'doSearchOperationsTickerInfo', // Ищи строку информации о тикере\r\n  // doSearchOperationsOperationInfo = 'doSearchOperationsOperationInfo', // Ищи строку информации о сделке\r\n\r\n  doFinish = 'finish' // выходи, блок сделок прошли\r\n}\r\n\r\nexport class ExpectedReportTextT {\r\n  static operationsMainTitle = '1.1 Информация о совершенных и исполненных сделках на конец отчетного периода';\r\n  static operationsFinished = '1.2 Информация о неисполненных сделках на конец отчетного периода';\r\n}\r\n\r\nexport interface ParserActionT {\r\n  type: ParserActionTypeT;\r\n  payload: {\r\n    headers: {[title: string]: string}\r\n    operations: ParsedOperation[];\r\n  };\r\n}\r\n\r\nenum ImportItemTypeT {\r\n  buy = 'Покупка',\r\n  sell = 'Продажа'\r\n}\r\n\r\nenum ImportItemCurrencyT {\r\n  rub = 'RUB',\r\n  usd = 'USD'\r\n}\r\n\r\nexport type ImportItemT = any;\r\n\r\n","// @dynamic\r\nexport class IsinDetectorHelper {\r\n  static isIsin(str: string): boolean {\r\n\r\n    // https://regex101.com/r/aI9hN9/1\r\n    const regexIsin = /\\b([A-Z]{2})((?![A-Z]{10}\\b)[A-Z0-9]{10})\\b/g;\r\n    const ret = this.matchExact(regexIsin, str);\r\n    return ret;\r\n\r\n  }\r\n\r\n  private static matchExact(r: RegExp, str: string): boolean {\r\n    const match = str.match(r);\r\n    if (!!match) {\r\n      return str === match[0];\r\n    }\r\n    return false;\r\n  }\r\n}\r\n","import {\r\n  ExpectedReportTextT,\r\n  ImportItemT, ParserActionT, ParserActionTypeT\r\n} from './models';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\nimport {Currency, Exchange, OperationSource, OperationType} from '../../../api-public/models/common-biz';\r\nimport moment from 'moment';\r\nimport {Ticker} from '../../../api-public/models/assets-history';\r\nimport {IsinDetectorHelper} from '../../../api-public/helpers/isin-detector.helper';\r\n\r\nexport class ItemsProcessorHelperTink {\r\n\r\n  private static findExpected(item: ImportItemT, expectedValue: string): any {\r\n    const ret = Object.values(item).find(val => val === expectedValue);\r\n    return ret;\r\n  }\r\n\r\n  private static isEmptyString(item: ImportItemT, count: number = 15): boolean {\r\n    const isSomeExist = Object.values(item).slice(0, count).find(val => `${val}`.length > 0);\r\n    return !isSomeExist;\r\n  }\r\n\r\n  static processItem(itemIn: ImportItemT, action: ParserActionT): ParserActionT {\r\n    const item = itemIn || {};\r\n\r\n    if (action.type === ParserActionTypeT.doSearchOperationsMainTitle) {\r\n      const value = this.findExpected(item, ExpectedReportTextT.operationsMainTitle);\r\n      if (value) {\r\n        console.log('Найден главный заголовок блока всех сделок: ' + JSON.stringify(value));\r\n        return {...action, type: ParserActionTypeT.doSearchOperationsHeaders, payload: {...action.payload}};\r\n      }\r\n    }\r\n\r\n    if (action.type === ParserActionTypeT.doSearchOperationsHeaders) {\r\n      const value = this.findExpected(item, ExpectedReportTextT.operationsFinished);\r\n      if (value) {\r\n        return {...action, type: ParserActionTypeT.doFinish, payload: {...action.payload}};\r\n      }\r\n      const headers = Helper.importItemToHeaders(item);\r\n      console.log('Найдены заголовки блока всех сделок: ' + JSON.stringify(headers));\r\n      return {...action, type: ParserActionTypeT.doSearchOperationRow, payload: {...action.payload, headers}};\r\n    }\r\n\r\n    if (action.type === ParserActionTypeT.doSearchOperationRow) {\r\n      const valueOpsFinished = this.findExpected(item, ExpectedReportTextT.operationsFinished);\r\n      if (valueOpsFinished) {\r\n        console.log('Найден заголовок о неисполненных сделках, завершаем парсинг.');\r\n        return {...action, type: ParserActionTypeT.doFinish, payload: {...action.payload}};\r\n      }\r\n      if (this.isEmptyString(item)) {\r\n         console.log('Блок строк сделок закончился (пустая строка), ищем следующий: ' + JSON.stringify(item));\r\n         return {...action, type: ParserActionTypeT.doSearchOperationsHeaders, payload: {...action.payload}};\r\n      }\r\n      console.log('Найдена строка сделки: ' + JSON.stringify(item));\r\n      const newOperation: ParsedOperation = Helper.itemToOperation(action, item);\r\n      return { ...action, type: ParserActionTypeT.doSearchOperationRow,\r\n        payload: {...action.payload, operations: [...action.payload.operations, newOperation] }\r\n      };\r\n    }\r\n\r\n    return action;\r\n  }\r\n}\r\n\r\nexport enum HeaderTitle {\r\n  date = 'Дата заключения',\r\n  kodAktiva = 'Код актива',\r\n  vidSdelky = 'Вид сделки',\r\n  kolichestvo = 'Количество',\r\n  cenaZaEdinizy = 'Цена за единицу',\r\n  valutaCeny = 'Валюта цены',\r\n  torgovayaPloshadka = 'Торговая площадка'\r\n}\r\n\r\nclass Helper {\r\n  static importItemToHeaders(item: ImportItemT): {[title: string]: string} {\r\n    const headers: any = {};\r\n    Object.keys(item).forEach(key => {\r\n      const title = (item[key] || '').replace(/\\r?\\n|\\r/g, '');\r\n      if (title.length > 0) {\r\n        headers[title] = key;\r\n      }\r\n    });\r\n    return headers;\r\n  }\r\n\r\n  static itemToOperation(action: ParserActionT, item: ImportItemT): ParsedOperation {\r\n    const headers = action.payload.headers;\r\n    const operation: Operation2 = { portfolioId: 0,\r\n      id: null,\r\n      ticker: this.itemToTicker(item, headers[HeaderTitle.kodAktiva]),\r\n      date: this.dateStringToDate(item, headers[HeaderTitle.date]),\r\n      type: this.itemToOperationType(item, headers[HeaderTitle.vidSdelky]),\r\n      count: this.itemToCount(item, headers[HeaderTitle.kolichestvo]),\r\n      unitPrice: this.itemToUnitPrice(item, headers[HeaderTitle.cenaZaEdinizy]),\r\n      currency: this.itemToCurrency(item, headers[HeaderTitle.valutaCeny]),\r\n      exchange: this.itemToExchange(item, headers[HeaderTitle.torgovayaPloshadka]),\r\n      isOn: true,\r\n      source: OperationSource.tinkoffReports\r\n    };\r\n    const ret: ParsedOperation = {\r\n      operation, isin: IsinDetectorHelper.isIsin(operation.ticker) ? operation.ticker : ''\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static itemToTicker(item: ImportItemT, coll: string): Ticker {\r\n    const predefined: any = {\r\n      // USD000UTSTOM: 'APP_USD',\r\n      // GLDRUB_TOM: 'APP_GLD',\r\n      // CNYRUB_TOM: 'APP_CNY'\r\n    };\r\n    const kod = item[coll];\r\n    const ret = predefined[kod] || kod || '';\r\n    return ret;\r\n  }\r\n\r\n  static dateStringToDate(item: ImportItemT, coll: string): Date { // 11.08.2022\r\n    const str = item[coll] || '';\r\n    const ret = moment(str, 'DD.MM.YYYY').toDate();\r\n    return ret;\r\n  }\r\n\r\n  static itemToOperationType(item: ImportItemT, coll: string): OperationType {\r\n    const types: any = {\r\n      ['Покупка']: OperationType.buy,\r\n      ['Продажа']: OperationType.sell,\r\n    };\r\n    const typeStr = item[coll];\r\n    return types[typeStr];\r\n  }\r\n\r\n  static itemToCount(item: ImportItemT, coll: string): number {\r\n    const countStr = item[coll];\r\n    const ret = this.parseFloatT(countStr);\r\n    return ret;\r\n  }\r\n\r\n  static itemToUnitPrice(item: ImportItemT, coll: string): number {\r\n    const countStr = item[coll];\r\n    const ret = this.parseFloatT(countStr);\r\n    return ret;\r\n  }\r\n\r\n  static itemToCurrency(item: ImportItemT, coll: string): Currency {\r\n    const curr: any = {\r\n      ['RUB']: Currency.rub,\r\n      ['USD']: Currency.usd,\r\n      ['EUR']: Currency.eur,\r\n      ['CNY']: Currency.cny,\r\n      ['HKD']: Currency.hkd,\r\n    };\r\n    const currStr = item[coll];\r\n    return curr[currStr];\r\n  }\r\n\r\n  static itemToExchange(item: ImportItemT, coll: string): Exchange {\r\n    const exchanges: any = {\r\n      ['ММВБ']: Exchange.moex,\r\n      ['СПБ']: Exchange.spb,\r\n      ['ВНБ']: Exchange.vnb\r\n    };\r\n    const exStr = item[coll];\r\n    return exchanges[exStr];\r\n  }\r\n\r\n  static parseFloatT(str: string): number {\r\n    const ret = parseFloat(str.replace(',', '.'));\r\n    return ret;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {ParsedOperation} from '../../../api-public/models/operations';\r\nimport {ExcelBinaryReaderHelper} from '../shared/excel-binary-reader.helper';\r\nimport {ImportItemT, ParserActionT, ParserActionTypeT} from './models';\r\nimport {ItemsProcessorHelperTink} from './items-processor.helper';\r\n\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportReaderTinkoffService {\r\n\r\n  constructor() {\r\n  }\r\n\r\n  excelBinaryToParsedOperations(portfolioId: PortfolioId, binaryData: any): ParsedOperation[] {\r\n    const items: any[] = ExcelBinaryReaderHelper.binaryToObject(binaryData);\r\n    const operations: ParsedOperation[] = Mapper.itemsToOperations(portfolioId, items);\r\n    return operations;\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n  static itemsToOperations(portfolioId: PortfolioId, items: ImportItemT[]): ParsedOperation[] {\r\n    let action: ParserActionT = {\r\n      type: ParserActionTypeT.doSearchOperationsMainTitle,\r\n      payload: {\r\n        headers: {},\r\n        operations: []\r\n      }\r\n    };\r\n    items.forEach(item => {\r\n      action = ItemsProcessorHelperTink.processItem(item, action);\r\n    });\r\n    return action.payload.operations;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ExcelBinaryReaderHelper} from '../shared/excel-binary-reader.helper';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {Currency, Exchange, OperationSource, OperationType} from '../../../api-public/models/common-biz';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportReaderSberService {\r\n  constructor() {\r\n  }\r\n\r\n  excelBinaryToParsedOperations(portfolioId: PortfolioId, binaryData: any): ParsedOperation[] {\r\n    const items: any[] = ExcelBinaryReaderHelper.binaryToObject(binaryData);\r\n    const operations: ParsedOperation[] = Mapper.itemsToOperations(portfolioId, items);\r\n    return operations;\r\n  }\r\n}\r\n\r\nenum ImportItemName {\r\n  date = 'Дата заключения',\r\n  count = 'Количество',\r\n  ticker = 'Код финансового инструмента',\r\n  type = 'Операция',\r\n  price = 'Цена',\r\n  currency = 'Валюта'\r\n}\r\n\r\nenum ImportItemType {\r\n  buy = 'Покупка',\r\n  sell = 'Продажа'\r\n}\r\n\r\nenum ImportItemCurrency {\r\n  rub = 'RUB',\r\n  usd = 'USD'\r\n}\r\n\r\n/*interface ImportItem {\r\n  [ImportItemName.date]: number;\r\n  [ImportItemName.count]: number;\r\n  [ImportItemName.ticker]: string;\r\n  [ImportItemName.type]: ImportItemType;\r\n  [ImportItemName.price]: number;\r\n  [ImportItemName.currency]: ImportItemCurrency;\r\n}*/\r\n\r\ninterface ImportItem2 {\r\n  C: number; // дата\r\n  E: string; // тикер\r\n  H: ImportItemType; // покупка/продажа\r\n  I: number; // количество\r\n  J: number; // unit price\r\n  M: ImportItemCurrency; // currency\r\n}\r\n\r\nclass Mapper {\r\n  static itemsToOperations(portfolioId: PortfolioId, items: ImportItem2[]): ParsedOperation[] {\r\n    const items1 = [...items];\r\n    items1.shift();\r\n    return items1.map(item => this.itemToOperation(portfolioId, item));\r\n  }\r\n\r\n  static itemToOperation(portfolioId: PortfolioId, item: ImportItem2): ParsedOperation {\r\n    const operation: Operation2 = {\r\n      portfolioId,\r\n      id: null, // UidGeneratorHelper.makeId(10),\r\n      date: ExcelBinaryReaderHelper.excelNumberToDate(item.C),\r\n      count: item.I,\r\n      ticker: item.E,\r\n      type: this.typeToClient(item.H),\r\n      unitPrice: item.J,\r\n      currency: this.currencyToClient(item.M),\r\n      exchange: Exchange.moex,\r\n      isOn: true,\r\n      source: OperationSource.sberReports // SecuritySource.moexApi\r\n    };\r\n    const ret: ParsedOperation = {\r\n      operation, isin: ''\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static typeToClient(itemType: ImportItemType): OperationType {\r\n    const types = {\r\n      [ImportItemType.buy]: OperationType.buy,\r\n      [ImportItemType.sell]: OperationType.sell\r\n    };\r\n    return types[itemType];\r\n  }\r\n\r\n  static currencyToClient(itemCurrency: ImportItemCurrency): Currency {\r\n    const maps = {\r\n      [ImportItemCurrency.rub]: Currency.rub,\r\n      [ImportItemCurrency.usd]: Currency.usd\r\n    };\r\n    return maps[itemCurrency];\r\n  }\r\n}\r\n\r\n","import {ParsedOperation} from '../../../api-public/models/operations';\r\n\r\nexport enum ParserActionType {\r\n  doSearchOperationsMainTitle = 'doSearchOperationsMainTitle', // Ищи заголовок - 2.1 Сделки\r\n  doSearchSubOperationsBlock = 'doSearchSubOperationsBlock', // Ищи начало блока предмета сделок: Акция/Пай/Иностранная валюта\r\n\r\n  // ветка распарсивания обычных операций (у них свой формат таблицы)\r\n  doSearchOperationsBlockCurrency = 'doSearchOperationsBlockCurrency', // Ищи строку указания валюты блока\r\n  doSearchOperationsColumnsInfo = 'doSearchOperationsColumnsInfo', // Ищи строку о столбцами\r\n  doSearchOperationsTickerInfo = 'doSearchOperationsTickerInfo', // Ищи строку информации о тикере\r\n  doSearchOperationsOperationInfo = 'doSearchOperationsOperationInfo', // Ищи строку информации о сделке\r\n\r\n  // ветка распарсивания операций с валютами (у них свой формат таблицы)\r\n  doSearchCurrenciesOperationsHeaders = 'doSearchCurrenciesOperationsHeaders', // Ищи строку-заголовки бсего блока операций с валютами\r\n  doSearchSingleCurrencyOperationsHeaders = 'doSearchSingleCurrencyOperationsHeaders', // Ищи строку-заголовки блока одной валюты\r\n  doSearchSingleCurrencyOperationsOperationInfo = 'doSearchSingleCurrencyOperationsOperationInfo', // Ищи строку информации о валютной сделке\r\n\r\n  doFinish = 'finish' // выходи, блок сделок прошли\r\n}\r\n\r\nexport interface ParserAction {\r\n  type: ParserActionType;\r\n  payload: {\r\n    currentIsin: string | null;\r\n    currentTicker: string | null;\r\n    operations: ParsedOperation[];\r\n  };\r\n}\r\n\r\nexport interface ImportItem2 {\r\n  B: string;\r\n  E: string | number;\r\n  F: string | number;\r\n  H: string | number;\r\n  I: string | number;\r\n  K: string;\r\n  R: string;\r\n}\r\n\r\nexport class ExpectedReportText {\r\n  static allOperationsHeader = '2.1. Сделки:';\r\n  static operationsGroupsHeaders = ['Акция', 'Пай', 'АДР'];\r\n  static operationsGroupsHeadersCurrency = ['Иностранная валюта'];\r\n  static currencyHeaderStart = 'Валюта цены = ';\r\n  static summaryHeaderStart = 'Итого по ';\r\n}\r\n","import {ImportItem2, ParserAction} from './models';\r\nimport moment from 'moment';\r\nimport {\r\n  Currency,\r\n  Exchange,\r\n  OperationSource,\r\n  OperationType\r\n} from '../../../api-public/models/common-biz';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\n\r\n// @dynamic\r\nexport class MapperOperation {\r\n\r\n  static itemToISIN(item: ImportItem2): string {\r\n    return item.H as string;\r\n  }\r\n\r\n  static itemToOperation(action: ParserAction, item: ImportItem2): ParsedOperation {\r\n    const payload = action.payload;\r\n    const operation: Operation2 = { portfolioId: 0,\r\n      id: null,\r\n      ticker: payload.currentTicker as string,\r\n      date: this.itemDateToCorrectDate(item),\r\n      type: this.itemToOperationType(item),\r\n      count: this.itemToCount(item) as number,\r\n      unitPrice: this.itemToUnitPrice(item) as number,\r\n      currency: this.itemToCurrency(item) as Currency,\r\n      exchange: this.itemToExchange(item) as Exchange,\r\n      isOn: true,\r\n      source: OperationSource.bksReports, // SecuritySource.moexApi\r\n    };\r\n    const ret: ParsedOperation = {\r\n      operation, isin: payload.currentIsin as string\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static itemToExchange(item: ImportItem2): Exchange | string {\r\n    const fieldValue = item.R || '';\r\n    if (fieldValue.toUpperCase() === 'СПБ') {\r\n      return Exchange.spb;\r\n    }\r\n    if (fieldValue.toUpperCase() === 'ММВБ') {\r\n      return Exchange.moex;\r\n    }\r\n    return fieldValue;\r\n  }\r\n\r\n  private static itemDateToCorrectDate(item: ImportItem2): Date {\r\n    const mDate = moment(item.B, 'DD.MM.YY');\r\n    return mDate.toDate();\r\n  }\r\n\r\n  private static buyCount = (item: ImportItem2): number => item.E as number;\r\n  private static buyUnitPrice = (item: ImportItem2) => item.F as number;\r\n  private static sellCount = (item: ImportItem2): number => item.H as number;\r\n  private static sellUnitPrice = (item: ImportItem2) => item.I as number;\r\n\r\n  private static itemToOperationType(item: ImportItem2): OperationType {\r\n    if (this.buyCount(item) > 0) {\r\n      return OperationType.buy;\r\n    }\r\n    if (this.sellCount(item) > 0) {\r\n      return OperationType.sell;\r\n    }\r\n    return 'unknown' as any;\r\n  }\r\n\r\n  private static itemToCount(item: ImportItem2): number | undefined {\r\n    if (this.buyCount(item) > 0) {\r\n      return this.buyCount(item);\r\n    }\r\n    if (this.sellCount(item) > 0) {\r\n      return this.sellCount(item);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private static itemToUnitPrice(item: ImportItem2): number | undefined {\r\n    if (this.buyUnitPrice(item) > 0) {\r\n      return this.buyUnitPrice(item);\r\n    }\r\n    if (this.sellUnitPrice(item) > 0) {\r\n      return this.sellUnitPrice(item);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private static itemToCurrency(item: ImportItem2): Currency | undefined {\r\n    const fieldValue = item.K;\r\n    if (fieldValue === 'Рубль') {\r\n      return Currency.rub;\r\n    }\r\n    if (fieldValue === 'USD') {\r\n      return Currency.usd;\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n\r\n/*\r\nclass Helper {\r\n  static isNotEmptyString(str: string): boolean {\r\n    return !!str && !!str.length && str.length > 0;\r\n  }\r\n\r\n  static isEmptyString(str: string): boolean {\r\n    return !str || !str.length || str.length > 0;\r\n  }\r\n}*/\r\n","import {ImportItem2, ParserAction} from './models';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\nimport {Currency, Exchange, OperationSource, OperationType} from '../../../api-public/models/common-biz';\r\nimport moment from 'moment';\r\n\r\n// @dynamic\r\nexport class MapperCurrency {\r\n\r\n  static itemToOperation(action: ParserAction, item: any): ParsedOperation {\r\n    const payload = action.payload;\r\n    const operation: Operation2 = { portfolioId: 0,\r\n      id: null,\r\n      ticker: payload.currentTicker as string,\r\n      date: this.itemDateToCorrectDate(item),\r\n      type: this.itemToOperationType(item),\r\n      count: this.itemToCount(item) as number,\r\n      unitPrice: this.itemToUnitPrice(item) as number,\r\n      currency: Currency.rub,\r\n      exchange: Exchange.moex,\r\n      isOn: true,\r\n      source: OperationSource.bksReports, // SecuritySource.moexApi\r\n    };\r\n    const ret: ParsedOperation = {\r\n      operation, isin: payload.currentIsin as string\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static itemDateToCorrectDate(item: ImportItem2): Date {\r\n    const mDate = moment(item.B, 'DD.MM.YY');\r\n    return mDate.toDate();\r\n  }\r\n\r\n  private static buyCount = (item: ImportItem2): number => item.F as number;\r\n  private static buyUnitPrice = (item: ImportItem2) => item.E as number;\r\n  private static sellCount = (item: ImportItem2): number => item.I as number;\r\n  private static sellUnitPrice = (item: ImportItem2) => item.H as number;\r\n\r\n  private static itemToOperationType(item: ImportItem2): OperationType {\r\n    if (this.buyCount(item) > 0) {\r\n      return OperationType.buy;\r\n    }\r\n    if (this.sellCount(item) > 0) {\r\n      return OperationType.sell;\r\n    }\r\n    return 'unknown' as any;\r\n  }\r\n\r\n  private static itemToCount(item: any): number | undefined {\r\n    if (this.buyCount(item) > 0) {\r\n      return this.buyCount(item);\r\n    }\r\n    if (this.sellCount(item) > 0) {\r\n      return this.sellCount(item);\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  private static itemToUnitPrice(item: any): number | undefined {\r\n    if (this.buyUnitPrice(item) > 0) {\r\n      return this.buyUnitPrice(item);\r\n    }\r\n    if (this.sellUnitPrice(item) > 0) {\r\n      return this.sellUnitPrice(item);\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import {ExpectedReportText, ImportItem2, ParserAction, ParserActionType} from './models';\r\nimport {MapperOperation} from './mapper-operation';\r\nimport {ParsedOperation} from '../../../api-public/models/operations';\r\nimport {MapperCurrency} from './mapper-currency';\r\n\r\nexport class ItemsProcessorHelper {\r\n\r\n  static processItem(item: ImportItem2, action: ParserAction): ParserAction {\r\n    // const itemValue = item[ImportItemName2.brokerReport];\r\n\r\n    if (action.type === ParserActionType.doSearchOperationsMainTitle) {\r\n      if (item.B === ExpectedReportText.allOperationsHeader) {\r\n        console.log('Найден заголовок блока всех сделок: ' + item.B);\r\n        return {...action, type: ParserActionType.doSearchSubOperationsBlock, payload: { ...action.payload }};\r\n      }\r\n    }\r\n\r\n    if (action.type === ParserActionType.doSearchSubOperationsBlock) {\r\n      if (!item.B) { // пропустить пустая строка\r\n        return { ...action, type: ParserActionType.doSearchSubOperationsBlock };\r\n      }\r\n      if (ExpectedReportText.operationsGroupsHeaders.includes(item.B)) {\r\n        console.log('Найден заголовок группы сделок: ' + item.B);\r\n        return {...action, type: ParserActionType.doSearchOperationsBlockCurrency};\r\n      }\r\n      if (ExpectedReportText.operationsGroupsHeadersCurrency.includes(item.B)) {\r\n        console.log('Найден заголовок группы сделок c валютами: ' + item.B);\r\n        return {...action, type: ParserActionType.doSearchCurrenciesOperationsHeaders};\r\n      }\r\n      console.log('Блок не наш, ищем следующий ' + item.B);\r\n      return {...action, type: ParserActionType.doSearchSubOperationsBlock} ;\r\n    }\r\n\r\n    const nextUsualOperationAction = this.processUsualOperations(action, item);\r\n    if (!!nextUsualOperationAction) {\r\n      return nextUsualOperationAction;\r\n    }\r\n\r\n    const nextCurrOperationAction = this.processCurrOperations(action, item);\r\n    if (!!nextCurrOperationAction) {\r\n      return nextCurrOperationAction;\r\n    }\r\n\r\n    return action;\r\n  }\r\n\r\n  private static processUsualOperations(action: ParserAction, item: ImportItem2): ParserAction | null {\r\n    // const itemValue = item[ImportItemName2.brokerReport];\r\n\r\n    if (action.type === ParserActionType.doSearchOperationsBlockCurrency) {\r\n      console.log('Найден заголовок валюты сделок: ' + item.B);\r\n      return { ...action, type: ParserActionType.doSearchOperationsColumnsInfo };\r\n    }\r\n\r\n    if (action.type === ParserActionType.doSearchOperationsColumnsInfo) {\r\n      console.log('Найдена строка столбцов: ' + JSON.stringify(item));\r\n      return { ...action, type: ParserActionType.doSearchOperationsTickerInfo };\r\n    }\r\n\r\n    if (action.type === ParserActionType.doSearchOperationsTickerInfo) {\r\n      if (!item.B) { // пустая сторка\r\n        console.log('Больше тикеры не найдены. Закончился блок сделок, ищем следующий ' + item.B);\r\n        return { ...action, type: ParserActionType.doSearchSubOperationsBlock };\r\n      } else if (item.B.startsWith(ExpectedReportText.currencyHeaderStart)) {\r\n        console.log('Блок сделок не закончился, просто смена валюты. Продолжаем читать инфу о столбцах. ' + item.B);\r\n        return { ...action, type: ParserActionType.doSearchOperationsColumnsInfo };\r\n      }\r\n      else {\r\n        console.log('Найдена строка указания тикера ' + item.B);\r\n        const isin = MapperOperation.itemToISIN(item);\r\n        return { ...action, type: ParserActionType.doSearchOperationsOperationInfo,\r\n          payload: {...action.payload, currentTicker: item.B, currentIsin: isin} };\r\n      }\r\n    }\r\n\r\n    if (action.type === ParserActionType.doSearchOperationsOperationInfo) {\r\n      if (item.B.startsWith(ExpectedReportText.summaryHeaderStart)) {\r\n        console.log('Найдена строка тикера Итого ' + item.B);\r\n        return { ...action, type: ParserActionType.doSearchOperationsTickerInfo };\r\n      } else {\r\n        console.log('Найдена строка сделки по тикеру: ' + action.payload.currentTicker + '  ' + JSON.stringify(item));\r\n        const newOperation: ParsedOperation = MapperOperation.itemToOperation(action, item);\r\n        return { ...action, type: ParserActionType.doSearchOperationsOperationInfo,\r\n          payload: {...action.payload, operations: [...action.payload.operations, newOperation] }\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private static processCurrOperations(action: ParserAction, item: ImportItem2): ParserAction | null {\r\n    // const itemValue = item[ImportItemName2.brokerReport];\r\n\r\n    if (action.type === ParserActionType.doSearchCurrenciesOperationsHeaders) {\r\n      if (item.B === undefined) { // пустая сторка\r\n        console.log('Пустая строка меджу заголовком \"Иностранная валюта\" и таблицей сделок с валютами.');\r\n        return null;\r\n      }\r\n      console.log('Найдена строка заголовка таблицы сделок с валютаим: ' + JSON.stringify(item));\r\n      return { ...action, type: ParserActionType.doSearchSingleCurrencyOperationsHeaders };\r\n    }\r\n\r\n    if (action.type === ParserActionType.doSearchSingleCurrencyOperationsHeaders) {\r\n      if (item.B === undefined) { // пустая сторка\r\n        console.log('Больше валюты не найдены. Закончился блок сделок с валютами, ищем следующий ' + item);\r\n        return { ...action, type: ParserActionType.doSearchSubOperationsBlock };\r\n      }\r\n      console.log('Найдена строка заголовка сделок одной валюты: ' + JSON.stringify(item));\r\n      return { ...action, type: ParserActionType.doSearchSingleCurrencyOperationsOperationInfo,\r\n        payload: {...action.payload,  currentTicker: item.B, currentIsin: null } };\r\n    }\r\n\r\n    if (action.type === ParserActionType.doSearchSingleCurrencyOperationsOperationInfo) {\r\n      if (item.B.startsWith(ExpectedReportText.summaryHeaderStart)) {\r\n        console.log('Найдена строка одной валюты Итого ' + item.B);\r\n        return { ...action, type: ParserActionType.doSearchSingleCurrencyOperationsHeaders };\r\n      } else {\r\n        console.log('Найдена строка сделки по валюте: ' + action.payload.currentTicker + '  ' + JSON.stringify(item));\r\n        const newOperation: ParsedOperation = MapperCurrency.itemToOperation(action, item);\r\n        return { ...action, type: ParserActionType.doSearchSingleCurrencyOperationsOperationInfo,\r\n          payload: {...action.payload, operations: [...action.payload.operations, newOperation] }\r\n        };\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {ExcelBinaryReaderHelper} from '../shared/excel-binary-reader.helper';\r\nimport {ImportItem2, ParserAction, ParserActionType} from './models';\r\nimport {ItemsProcessorHelper} from './items-processor.helper';\r\nimport {ParsedOperation} from '../../../api-public/models/operations';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportReaderBksService {\r\n  constructor() {\r\n  }\r\n\r\n  excelBinaryToParsedOperations(portfolioId: PortfolioId, binaryData: any): ParsedOperation[] {\r\n    const blankRows = true;\r\n    const items: any[] = ExcelBinaryReaderHelper.binaryToObject2(binaryData, blankRows);\r\n    const operations: ParsedOperation[] = Helper.itemsToOperations(portfolioId, items);\r\n    return operations.map(op => ({...op, portfolioId}));\r\n  }\r\n}\r\n\r\nclass Helper {\r\n  static itemsToOperations(portfolioId: PortfolioId, items: ImportItem2[]): ParsedOperation[] {\r\n    let action: ParserAction = {\r\n      type: ParserActionType.doSearchOperationsMainTitle,\r\n      payload: {\r\n        currentIsin: null,\r\n        currentTicker: null,\r\n        operations: []\r\n      }\r\n    };\r\n    items.forEach(item => {\r\n      action = ItemsProcessorHelper.processItem(item, action);\r\n    });\r\n    return action.payload.operations;\r\n  }\r\n}\r\n\r\n","/*export enum ExcelRowName {\r\n  date = 'Дата',\r\n  type = 'Тип',\r\n  ticker = 'Тикер',\r\n  count = 'Количество',\r\n  unitPrice = 'Цена',\r\n  currency = 'Валюта',\r\n  exchange = 'Биржа'\r\n}*/\r\n\r\nexport interface ExcelRow {\r\n  A: Date | number;  //  date\r\n  B: ExcelRowOperationType; // buy-sell\r\n  C: string; // ticker\r\n  D: number; // count\r\n  E: number; // unit price\r\n  F: ExcelRowCurrency; // currency\r\n  G: ExcelRowExchange; // exchange\r\n}\r\n\r\nexport enum ExcelRowOperationType {\r\n  buy = 'Покупка',\r\n  sell = 'Продажа'\r\n}\r\n\r\nexport enum ExcelRowCurrency {\r\n  rub = 'RUB',\r\n  usd = 'USD'\r\n}\r\n\r\nexport enum ExcelRowExchange {\r\n  moex = 'MMВБ',\r\n  spb = 'СПБ'\r\n}\r\n","import {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {ExcelRowExchange, ExcelRow, ExcelRowCurrency, ExcelRowOperationType} from './models';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\nimport {ExcelBinaryReaderHelper} from '../shared/excel-binary-reader.helper';\r\nimport {Currency, Exchange, OperationSource, OperationType} from '../../../api-public/models/common-biz';\r\n\r\n// @dynamic\r\nexport class AppReportMapper {\r\n\r\n  static operationsToExcelRows(operations: Operation2[]): ExcelRow[] {\r\n    return operations.map(operation => this.operationToExcelRow(operation));\r\n  }\r\n\r\n  static operationToExcelRow(operation: Operation2): ExcelRow {\r\n    const ret: ExcelRow = {\r\n      A: operation.date,\r\n      B: this.operationTypeToRowType(operation.type),\r\n      C: operation.ticker,\r\n      D: operation.count,\r\n      E: operation.unitPrice,\r\n      F: operation.currency as unknown as ExcelRowCurrency,\r\n      G: this.exchangeToRowExchange(operation.exchange)\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static excelRowsToOperations(portfolioId: PortfolioId, rows: ExcelRow[]): ParsedOperation[] {\r\n    const rows1 = [...rows];\r\n    rows1.shift();\r\n    return rows1.map(row => this.excelRowToOperation(portfolioId, row));\r\n  }\r\n\r\n  private static excelRowToOperation(portfolioId: PortfolioId, row: ExcelRow): ParsedOperation {\r\n    const operation: Operation2 = {\r\n      portfolioId,\r\n      id: null,\r\n      date: ExcelBinaryReaderHelper.excelNumberToDate(row.A as number),\r\n      type: this.rowTypeToOperationType(row.B),\r\n      ticker: row.C,\r\n      count: row.D,\r\n      unitPrice: row.E,\r\n      currency: this.rowCurrencyToOperationCurrency(row.F),\r\n      exchange: this.rowExchangeToExchange(row.G),\r\n      isOn: true,\r\n      source: OperationSource.appReport\r\n    };\r\n    const ret: ParsedOperation = {\r\n      operation, isin: ''\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static rowTypeToOperationType(rowOperationType: ExcelRowOperationType): OperationType {\r\n    const types = {\r\n      [ExcelRowOperationType.buy]: OperationType.buy,\r\n      [ExcelRowOperationType.sell]: OperationType.sell\r\n    };\r\n    return types[rowOperationType];\r\n  }\r\n\r\n  private static operationTypeToRowType(type: OperationType): ExcelRowOperationType {\r\n    const types = {\r\n      [OperationType.buy]: ExcelRowOperationType.buy,\r\n      [OperationType.sell]: ExcelRowOperationType.sell\r\n    };\r\n    return types[type];\r\n  }\r\n\r\n  private static rowCurrencyToOperationCurrency(rowCurrency: ExcelRowCurrency): Currency {\r\n    const maps = {\r\n      [ExcelRowCurrency.rub]: Currency.rub,\r\n      [ExcelRowCurrency.usd]: Currency.usd\r\n    };\r\n    return maps[rowCurrency];\r\n  }\r\n\r\n  private static rowExchangeToExchange(rowExchange: ExcelRowExchange): Exchange {\r\n    const types = {\r\n      [ExcelRowExchange.moex]: Exchange.moex,\r\n      [ExcelRowExchange.spb]: Exchange.spb\r\n    };\r\n    return types[rowExchange];\r\n  }\r\n\r\n  private static exchangeToRowExchange(exchange: Exchange): ExcelRowExchange {\r\n    const types: any = {\r\n      [Exchange.moex]: ExcelRowExchange.moex,\r\n      [Exchange.spb]: ExcelRowExchange.spb\r\n    };\r\n    return types[exchange];\r\n  }\r\n}\r\n","import * as XLSX from 'xlsx';\r\n\r\nexport class ExcelDataArraySaver {\r\n\r\n  static saveArrayToExcelFile<T>(data: T[], sheetTitle: string, fileName: string): void {\r\n    const worksheet = XLSX.utils.json_to_sheet<T>(data);\r\n\r\n    const workbook = XLSX.utils.book_new();\r\n    XLSX.utils.book_append_sheet(workbook, worksheet, sheetTitle);\r\n\r\n    XLSX.writeFile(workbook, `${fileName}.xlsx`);\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\nimport {ExcelBinaryReaderHelper} from '../shared/excel-binary-reader.helper';\r\nimport {AppReportMapper} from './mapper';\r\nimport {ExcelDataArraySaver} from '../shared/excel-writer.helper';\r\nimport {ExcelRow} from './models';\r\nimport {DateHelper} from '../../../api-public/helpers/date.helper';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportReaderAppService {\r\n  constructor() {\r\n  }\r\n\r\n  excelBinaryToParsedOperations(portfolioId: PortfolioId, binaryData: any): ParsedOperation[] {\r\n    const items: any[] = ExcelBinaryReaderHelper.binaryToObject(binaryData);\r\n    const operations: ParsedOperation[] = AppReportMapper.excelRowsToOperations(portfolioId, items);\r\n    return operations;\r\n  }\r\n\r\n  operationsToExcelFile(operationsIn: Operation2[]): void {\r\n    if (operationsIn.length < 1) {\r\n      alert('нет операций для экспорта');\r\n      return;\r\n    }\r\n    const operations = operationsIn.sort((a, b) => a.date < b.date ? -1 : 1);\r\n    const excelRows: ExcelRow[] = AppReportMapper.operationsToExcelRows(operations);\r\n\r\n    const fileName = Mapper.operationsToFileName(operations);\r\n    const sheetTitle = 'Сделки';\r\n    ExcelDataArraySaver.saveArrayToExcelFile(excelRows, sheetTitle, fileName);\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n  static operationsToFileName(operations: Operation2[]): string {\r\n    const from = DateHelper.dateToDayString(operations[0].date);\r\n    const to = DateHelper.dateToDayString(operations[operations.length - 1].date);\r\n    const ret = `my-invest-data-${from}-${to}`;\r\n    return ret;\r\n  }\r\n}\r\n\r\n","import {ParsedOperation} from '../../../api-public/models/operations';\r\n\r\nexport class ExpectedReportTextT {\r\n  static completedOperationsTitle = 'Завершенные сделки';\r\n  static operationsHeadersRowFirstTitle = '№ сделки';\r\n}\r\n\r\nexport enum ParserActionTypeT {\r\n  doSearchCompletedOperationsTitle = 'doSearchCompletedOperationsTitle', // Ищи заголовок - Завершенные сделки\r\n  doSearchOperationsHeadersRow = 'doSearchOperationsHeadersRow', // Ищи строку заголовков сделок - № сделки\r\n  doSearchOperationRow = 'doSearchOperationRow', // Ищи строку операции\r\n  doFinish = 'doFinish'\r\n}\r\n\r\nexport interface ParserActionT {\r\n  type: ParserActionTypeT;\r\n  payload: {\r\n    headers: {[title: string]: string}\r\n    operations: ParsedOperation[];\r\n  };\r\n}\r\n\r\nexport interface ImportItemT {\r\n  H: string; // дата заключения сделки\r\n  M: string; // isin\r\n  Q: number; // количество\r\n  S: number; // цена unitPrice\r\n  V: string; // валюта\r\n}\r\n","import {ExpectedReportTextT, ImportItemT, ParserActionT, ParserActionTypeT} from './models';\r\nimport {Operation2, ParsedOperation} from '../../../api-public/models/operations';\r\nimport {Currency, Exchange, OperationSource, OperationType} from '../../../api-public/models/common-biz';\r\nimport moment from 'moment';\r\n\r\nexport class ItemsProcessorHelperAlfa {\r\n\r\n  private static findExpected(item: ImportItemT, expectedValue: string): any {\r\n    const ret = Object.values(item).find(val => val === expectedValue);\r\n    return ret;\r\n  }\r\n\r\n  /*private static isEmptyString(item: ImportItemT, count: number = 15): boolean {\r\n    const isSomeExist = Object.values(item).slice(0, count).find(val => `${val}`.length > 0);\r\n    return !isSomeExist;\r\n  }*/\r\n\r\n  static processItem(itemIn: ImportItemT, action: ParserActionT): ParserActionT {\r\n    const item = itemIn || {};\r\n\r\n    if (action.type === ParserActionTypeT.doSearchCompletedOperationsTitle) {\r\n      const value = this.findExpected(item, ExpectedReportTextT.completedOperationsTitle);\r\n      if (value) {\r\n        console.log('Найден главный заголовок блока всех завершенных сделок: ' + JSON.stringify(value));\r\n        return {...action, type: ParserActionTypeT.doSearchOperationsHeadersRow, payload: {...action.payload}};\r\n      }\r\n    }\r\n\r\n    if (action.type === ParserActionTypeT.doSearchOperationsHeadersRow) {\r\n      const value = this.findExpected(item, ExpectedReportTextT.operationsHeadersRowFirstTitle);\r\n      if (value) {\r\n        console.log('Найдена строка заголовков всех сделок: ' + JSON.stringify(value));\r\n        return {...action, type: ParserActionTypeT.doSearchOperationRow, payload: {...action.payload}};\r\n      }\r\n    }\r\n\r\n    if (action.type === ParserActionTypeT.doSearchOperationRow) {\r\n      if (!item.M) {\r\n        console.log('Закончились сделки, завершаем парсинг.');\r\n        return {...action, type: ParserActionTypeT.doFinish, payload: {...action.payload}};\r\n      }\r\n\r\n      console.log('Найдена строка сделки: ' + JSON.stringify(item));\r\n      const newOperation: ParsedOperation = Helper.itemToOperation(action, item);\r\n      return { ...action, type: ParserActionTypeT.doSearchOperationRow,\r\n        payload: {...action.payload, operations: [...action.payload.operations, newOperation] }\r\n      };\r\n    }\r\n\r\n    return action;\r\n  }\r\n}\r\n\r\nclass Helper {\r\n  static itemToOperation(action: ParserActionT, item: ImportItemT): ParsedOperation {\r\n    const operation: Operation2 = { portfolioId: 0,\r\n      id: null,\r\n      ticker: '???', // item.M, // спепециально такой, потом прокачаются и попроавятся из исинов - item.M,\r\n      date: this.dateStringToDate(item.H),\r\n      type: this.itemToOperationType(item.Q),\r\n      count: Math.abs(item.Q),\r\n      unitPrice: item.S,\r\n      currency: this.itemToCurrency(item.V),\r\n      exchange: Exchange.moex,\r\n      isOn: true,\r\n      source: OperationSource.alfaReports\r\n    };\r\n    const ret: ParsedOperation = {\r\n      operation, isin: item.M, // IsinDetectorHelper.isIsin(operation.ticker) ? operation.ticker : ''\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static dateStringToDate(date: string): Date { // 11.08.2022\r\n    const ret = moment(date, 'DD.MM.YYYY').toDate();\r\n    return ret;\r\n  }\r\n\r\n  static itemToOperationType(quantity: number): OperationType {\r\n    return quantity >= 0 ? OperationType.buy : OperationType.sell;\r\n  }\r\n\r\n  static itemToCurrency(val: string): Currency {\r\n    return val.toLowerCase() in Currency ? val as Currency : Currency.undefined;\r\n  }\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../../../api-public/models/portfolio';\r\nimport {ParsedOperation} from '../../../api-public/models/operations';\r\nimport {ExcelBinaryReaderHelper} from '../shared/excel-binary-reader.helper';\r\nimport {ImportItemT, ParserActionT, ParserActionTypeT} from './models';\r\nimport {ItemsProcessorHelperAlfa} from './items-processor.helper';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportReaderAlfaService {\r\n  constructor() {\r\n  }\r\n\r\n  excelBinaryToParsedOperations(portfolioId: PortfolioId, binaryData: any): ParsedOperation[] {\r\n    const blankRows = false;\r\n    const sheetNUm = 1; // вторая вкладка\r\n    const items: any[] = ExcelBinaryReaderHelper.binaryToObjectFull(binaryData, blankRows, sheetNUm);\r\n    const operations: ParsedOperation[] = Mapper.itemsToOperations(portfolioId, items);\r\n    return operations.map(op => ({...op, portfolioId}));\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n  static itemsToOperations(portfolioId: PortfolioId, items: ImportItemT[]): ParsedOperation[] {\r\n    let action: ParserActionT = {\r\n      type: ParserActionTypeT.doSearchCompletedOperationsTitle,\r\n      payload: {\r\n        headers: {},\r\n        operations: []\r\n      }\r\n    };\r\n    items.forEach(item => {\r\n      action = ItemsProcessorHelperAlfa.processItem(item, action);\r\n    });\r\n    return action.payload.operations;\r\n  }\r\n}\r\n","\r\n// @dynamic\r\nexport class ArrayHelper {\r\n  static distinct(arr: any[]): any[] {\r\n    const onlyUnique = (value: any, index: any, self: any) => {\r\n      return self.indexOf(value) === index;\r\n    };\r\n    return arr.filter(onlyUnique);\r\n  }\r\n\r\n  // @deprecated: use DictArrayMapper arrayToPartialRecord\r\n  static arrayToDict(array: any[], field?: string): object {\r\n    const dict: object = {};\r\n    if (!field) {\r\n      // @ts-ignore\r\n      array.forEach(item => dict[item] = item);\r\n    } else {\r\n      // @ts-ignore\r\n      array.forEach(item => dict[item[field]] = item);\r\n    }\r\n    return dict;\r\n  }\r\n\r\n  // @deprecated: use DictArrayMapper arrayToPartialRecord\r\n  static dictToArray(dict: object): any[] {\r\n    // @ts-ignore\r\n    return Object.keys(dict).map(key => dict[key]);\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {combineLatest, Observable, of} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {Security3, SecuritySearchData} from '../../../api-public/models/securities';\r\nimport {Dict, PartialRecord} from '../../../api-public/models/common';\r\nimport {\r\n  Operation2,\r\n  ParsedOperation,\r\n  ParsedOperationsData\r\n} from '../../../api-public/models/operations';\r\nimport {ApiExternalSecuritiesService} from '../../../store-api/api-external/api-securities.service';\r\nimport {Ticker} from '../../../api-public/models/assets-history';\r\nimport {ArrayHelper} from '../../../api-public/helpers/array.helper';\r\n\r\n// когда выпарсили операции из отчетов, то по тикерами исинам, в этом сервисе прокачиваем секьютити\r\n// чтобы показать в предпросмотре, что они найдены на внешних источниках (api moex yahoo)\r\n@Injectable({providedIn: 'root'})\r\nexport class SecuritiesCheckConnector2Service {\r\n\r\n  constructor(private apiExternalSecuritiesService: ApiExternalSecuritiesService) {\r\n  }\r\n\r\n  // берем распарсенные опреации и прокачиваем секюрии из сервера,\r\n  // причем переписывая тикеры типа BABA_US по isin\r\n  connectSecurities2$(operations: ParsedOperation[]): Observable<ParsedOperationsData> {\r\n\r\n    const tickersOrIsins: Ticker[] = Mapper.operationsToTickersOrIsins(operations).filter(i => i !== '???');\r\n\r\n    if (tickersOrIsins.length < 1) {\r\n      return of({operations: [], securitiesDict: {}});\r\n    }\r\n\r\n    return this.apiExternalSecuritiesService.getSecurityByTickerOrIsin(tickersOrIsins).pipe(\r\n      map((secs: Security3[]) => {\r\n        const securitiesDict: PartialRecord<Ticker, Security3> = Mapper.securitiesTiDict(secs);\r\n        const ret3: ParsedOperationsData = {\r\n          operations: Mapper.correctMissingTickersByIsins(operations, securitiesDict),\r\n          securitiesDict\r\n        };\r\n        return ret3;\r\n      })\r\n    );\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n\r\n  static correctMissingTickersByIsins(operations: ParsedOperation[], securitiesDict: PartialRecord<Ticker, Security3>): ParsedOperation[] {\r\n    return operations.map((operation: ParsedOperation) => {\r\n      if (!securitiesDict[operation.operation.ticker]) {\r\n        const secByIsin: Security3 | undefined = securitiesDict[operation.isin];\r\n        if (!!secByIsin) {\r\n          return {\r\n            ...operation,\r\n            originTicker: operation.operation.ticker,\r\n            operation: {...operation.operation, ticker: secByIsin.ticker }\r\n          };\r\n        }\r\n      }\r\n      return operation;\r\n    });\r\n  }\r\n\r\n  static operationsToTickersOrIsins(operations: ParsedOperation[]): Ticker[] {\r\n    const tickersOrIsinsDict: PartialRecord<Ticker, Ticker> = operations.reduce((acc, item) => {\r\n      const newItem: PartialRecord<Ticker, Ticker> = {...acc};\r\n      if (item.isin?.length > 0) {\r\n        newItem[item.isin] = item.isin;\r\n      }\r\n      if (item.operation.ticker?.length > 0) {\r\n        newItem[item.operation.ticker] = item.operation.ticker;\r\n      }\r\n      return newItem;\r\n    }, {});\r\n    const tickersOrIsins: Ticker[] = ArrayHelper.dictToArray(tickersOrIsinsDict);\r\n    return tickersOrIsins;\r\n  }\r\n\r\n  static securitiesTiDict(securities: Security3[]): PartialRecord<Ticker, Security3> {\r\n    const dict: PartialRecord<Ticker, Security3> = {};\r\n    securities.forEach((security: Security3) => {\r\n      if (security.ticker?.length > 0) {\r\n        dict[security.ticker] = security;\r\n      }\r\n      if (security.isin?.length > 0) {\r\n        dict[security.isin] = security;\r\n      }\r\n    });\r\n    return dict;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../../api-public/models/portfolio';\r\nimport {Dict, ExcelBinary, PartialRecord} from '../../api-public/models/common';\r\nimport {Observable} from 'rxjs';\r\nimport {ReportReaderSberService} from './sber/report-reader-sber.service';\r\nimport {ReportReaderBksService} from './bks/report-reader-bks.service';\r\nimport {SecuritiesCheckConnector2Service} from './shared/securities-check-connector2.service';\r\nimport {ParsedOperation, ParsedOperationsData} from '../../api-public/models/operations';\r\nimport {OperationSource} from '../../api-public/models/common-biz';\r\nimport {map} from 'rxjs/operators';\r\nimport {ReportReaderAppService} from './app/report-reader-app.service';\r\nimport {ReportReaderTinkoffService} from './tinkoff/report-reader-tinkoff.service';\r\nimport {Ticker} from '../../api-public/models/assets-history';\r\nimport {DateHelper} from '../../api-public/helpers/date.helper';\r\nimport {ReportReaderAlfaService} from './alfa/report-reader-alfa.service';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportParserStore {\r\n\r\n  constructor(\r\n    private importTinkoffService: ReportReaderTinkoffService,\r\n    private importSberService: ReportReaderSberService,\r\n    private importBksService: ReportReaderBksService,\r\n    private importAppService: ReportReaderAppService,\r\n    private importAlfaService: ReportReaderAlfaService,\r\n    private securitiesCheckConnector2Service: SecuritiesCheckConnector2Service) {\r\n  }\r\n\r\n  getOperationsFromExcelBinaries$(source: OperationSource, portfolioId: PortfolioId, binaryDataItems: ExcelBinary[])\r\n    : Observable<ParsedOperationsData> {\r\n\r\n    let parsedOperations: ParsedOperation[] = [];\r\n\r\n    binaryDataItems.forEach(binaryData => {\r\n      const newOperations: ParsedOperation[] = this.getOperationsFromExcelBinary(source, portfolioId, binaryData);\r\n      parsedOperations = [...parsedOperations, ...newOperations];\r\n    });\r\n\r\n    // https://bestbets.atlassian.net/browse/MYEX-283 для непраивльных форматов\r\n    parsedOperations = Mapper.removeBadOperations(parsedOperations);\r\n    // костыль: тут меняем некоторые тикеры\r\n    // https://bestbets.atlassian.net/browse/MYEX-251\r\n    // parsedOperations = Mapper.badFixTickers(parsedOperations);\r\n\r\n    // unify currencies https://bestbets.atlassian.net/browse/MYEX-303\r\n    parsedOperations = Mapper.unifyCurrencies(parsedOperations);\r\n\r\n    return this.securitiesCheckConnector2Service.connectSecurities2$(parsedOperations).pipe(\r\n      map((parsedOperationsData: ParsedOperationsData) => {\r\n        return Mapper.addPortfolioIdToParsedOperationsData(parsedOperationsData, portfolioId);\r\n      })\r\n    );\r\n  }\r\n\r\n  private getOperationsFromExcelBinary(source: OperationSource, portfolioId: PortfolioId, binaryData: ExcelBinary): ParsedOperation[] {\r\n    let parsedOperations: ParsedOperation[] = [];\r\n    if (source === OperationSource.tinkoffReports) {\r\n      parsedOperations = this.importTinkoffService.excelBinaryToParsedOperations(portfolioId, binaryData);\r\n    }\r\n    if (source === OperationSource.sberReports) {\r\n      parsedOperations = this.importSberService.excelBinaryToParsedOperations(portfolioId, binaryData);\r\n    }\r\n    if (source === OperationSource.bksReports) {\r\n      parsedOperations = this.importBksService.excelBinaryToParsedOperations(portfolioId, binaryData);\r\n    }\r\n    if (source === OperationSource.appReport) {\r\n      parsedOperations = this.importAppService.excelBinaryToParsedOperations(portfolioId, binaryData);\r\n    }\r\n    if (source === OperationSource.alfaReports) {\r\n      parsedOperations = this.importAlfaService.excelBinaryToParsedOperations(portfolioId, binaryData);\r\n    }\r\n    return parsedOperations;\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n\r\n  static removeBadOperations(parsedOperations: ParsedOperation[]): ParsedOperation[] {\r\n    return parsedOperations.filter(op => !this.isBadOperation(op));\r\n  }\r\n\r\n  static isBadOperation(op: ParsedOperation): boolean {\r\n    if (!op.operation.ticker) { return true; }\r\n    if (op.operation.count === undefined) { return true; }\r\n    if (op.operation.currency === undefined) { return true; }\r\n    if (op.operation.type === undefined) { return true; }\r\n    if (op.operation.unitPrice === undefined) { return true; }\r\n    if (!DateHelper.isValidDate(op.operation.date)) { return true; }\r\n    return false;\r\n  }\r\n\r\n  static addPortfolioIdToParsedOperationsData(parsedOperationsData: ParsedOperationsData,\r\n                                              portfolioId: PortfolioId): ParsedOperationsData {\r\n    const ret: ParsedOperationsData = {\r\n      ...parsedOperationsData,\r\n      operations: this.addPortfolioIdToParsedOperations(parsedOperationsData.operations, portfolioId)\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static addPortfolioIdToParsedOperations(parsedOperations: ParsedOperation[],\r\n                                                  portfolioId: PortfolioId): ParsedOperation[] {\r\n    return parsedOperations.map(parsedOperation => this.addPortfolioIdToParsedOperation(parsedOperation, portfolioId));\r\n  }\r\n\r\n  private static addPortfolioIdToParsedOperation(parsedOperation: ParsedOperation,\r\n                                                 portfolioId: PortfolioId): ParsedOperation {\r\n    const ret: ParsedOperation = {\r\n      ...parsedOperation,\r\n      operation: {...parsedOperation.operation, portfolioId}\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  static unifyCurrencies(parsedOperations: ParsedOperation[]): ParsedOperation[] {\r\n    const tickersMap: PartialRecord<Ticker, Ticker> = {\r\n      USDRUB_TOM: 'USD_RUB',\r\n      USDRUB_TOD: 'USD_RUB',\r\n      USD000000TOD: 'USD_RUB',\r\n      USD000UTSTOM: 'USD_RUB',\r\n      EUR_RUB__TOM: 'EUR_RUB',\r\n      EURRUB_TOD: 'EUR_RUB',\r\n      CNYRUB_TOM: 'CNY_RUB',\r\n      HKDRUB_TOM: 'HKD_RUB',\r\n    };\r\n    return parsedOperations.map(o => {\r\n      const newTicker = tickersMap[o.operation.ticker];\r\n      if (!!newTicker) {\r\n        return {...o , isin: '', originTicker: o.operation.ticker,\r\n          operation: { ...o.operation, ticker: newTicker }\r\n        };\r\n      } else {\r\n        return o;\r\n      }\r\n    });\r\n  }\r\n\r\n\r\n /* static badFixTickers(parsedOperations: ParsedOperation[]): ParsedOperation[] {\r\n    const tickersMap: PartialRecord<Ticker, Ticker> = {\r\n      USDRUB_TOM: 'USD000UTSTOM',\r\n      USDRUB_TOD: 'USD000UTSTOM',\r\n      USD000000TOD: 'USD000UTSTOM'\r\n    };\r\n    return parsedOperations.map(o => {\r\n      const newTicker = tickersMap[o.operation.ticker];\r\n      if (!!newTicker) {\r\n        return {...o , isin: newTicker};\r\n      } else {\r\n        return o;\r\n      }\r\n    });\r\n  }*/\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../models/portfolio';\r\nimport {Dict, ExcelBinary, PartialRecord} from '../models/common';\r\nimport {Observable} from 'rxjs';\r\nimport {OperationSource} from '../models/common-biz';\r\nimport {Operation2, ParsedOperation, ParsedOperationsData} from '../models/operations';\r\nimport {Security3} from '../models/securities';\r\nimport {ReportParserStore} from '../../store/report-parser/report-parser.store';\r\nimport {Ticker} from '../models/assets-history';\r\n\r\n@Injectable()\r\nexport class ApiReportParserService {\r\n  constructor(private reportParserStore: ReportParserStore) {\r\n  }\r\n\r\n  getOperationsFromExcelBinaries$(source: OperationSource, portfolioId: PortfolioId, binaryDataItems: ExcelBinary[])\r\n    : Observable<ParsedOperationsData>\r\n  {\r\n    return this.reportParserStore.getOperationsFromExcelBinaries$(source, portfolioId, binaryDataItems);\r\n  }\r\n\r\n  parsedOperationsDataToOperations(parsedOperationsData: ParsedOperationsData): Operation2[] {\r\n    return Mapper.parsedOperationsDataToOperations(parsedOperationsData);\r\n  }\r\n}\r\n\r\nclass Mapper {\r\n  static parsedOperationsDataToOperations(parsedOperationsData: ParsedOperationsData): Operation2[] {\r\n    if (!parsedOperationsData || !parsedOperationsData.operations || !parsedOperationsData.securitiesDict) {\r\n      return [];\r\n    }\r\n\r\n    const securitiesDict: PartialRecord<Ticker, Security3> = parsedOperationsData.securitiesDict;\r\n    return parsedOperationsData.operations.map((parsedOperation: ParsedOperation) => {\r\n      return this.parsedOperationToOperation(parsedOperation, securitiesDict);\r\n    });\r\n  }\r\n\r\n  // иногда отчеты содержать левые тикеры типа BABA_US, и во внешнем апи их нет,\r\n  // тогда они выдергиваются по isin, и тикеры из за этого корректируем\r\n  private static parsedOperationToOperation(parsedOperation: ParsedOperation,\r\n                                            securitiesDict: PartialRecord<Ticker, Security3>): Operation2 {\r\n    const operation = parsedOperation.operation;\r\n    const oldTicker = operation.ticker;\r\n    const ret: Operation2 = {\r\n      ...operation,\r\n      ticker: !!securitiesDict[oldTicker] ? (securitiesDict[oldTicker] as Security3).ticker : oldTicker\r\n    };\r\n    return ret;\r\n  }\r\n\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalMiscService {\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n  }\r\n\r\n  getApiVersion(): Observable<string> { // todo: not best way\r\n    const url = 'api/misc/api-version';\r\n    return this.httpClient.get(url, { responseType: 'text' }).pipe(\r\n      map(data => {\r\n        return data as string;\r\n      })\r\n    );\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiExternalMiscService} from '../../store-api/api-external/api-misc.service';\r\n\r\n@Injectable()\r\nexport class ApiMiscService {\r\n\r\n  constructor(private apiExternalMiscService: ApiExternalMiscService) {\r\n  }\r\n\r\n  getApiVersion(): Observable<string> { // todo: not best way\r\n    return this.apiExternalMiscService.getApiVersion();\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ReportReaderAppService} from './app/report-reader-app.service';\r\nimport {Operation2} from '../../api-public/models/operations';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ReportMakerStore {\r\n\r\n  constructor(private exportAppService: ReportReaderAppService) {\r\n  }\r\n\r\n  operationsToExcelFile(operations: Operation2[]): void {\r\n    this.exportAppService.operationsToExcelFile(operations);\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {PortfolioId} from '../models/portfolio';\r\nimport {Observable} from 'rxjs';\r\nimport {OperationsHelper} from '../../calculators/shared/operations.helper';\r\nimport {tap} from 'rxjs/operators';\r\nimport {OperationsStore} from '../../store/operations.store';\r\nimport {ReportMakerStore} from '../../store/report-parser/report-maker.store';\r\nimport {OperationId} from '../models/operations';\r\n\r\n@Injectable()\r\nexport class ApiExportService {\r\n\r\n  constructor(private operationsStore: OperationsStore,\r\n              private reportMakerStore: ReportMakerStore) {\r\n  }\r\n\r\n  exportToExcel(portfolioId: PortfolioId, operationsIds?: OperationId[]): Observable<any> {\r\n    let operations$ = OperationsHelper.getAllOperations(this.operationsStore, portfolioId);\r\n    if (!!operationsIds) {\r\n      operations$ = this.operationsStore.getOperationsByIds(operationsIds);\r\n    }\r\n    return operations$.pipe(\r\n      tap(operations => {\r\n        this.reportMakerStore.operationsToExcelFile(operations);\r\n      })\r\n    );\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {SecuritySector, SecuritySectorId} from '../../api-public/models/securities';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalSecuritiesSectorsService {\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n  }\r\n\r\n  getSecuritiesSectors(): Observable<SecuritySector[]> {\r\n    const url = 'api/securities-sectors';\r\n    return this.httpClient.get(url).pipe(\r\n      map(data => {\r\n        return Mapper.sectorsToClient(data as ServerSecuritySector[]);\r\n      })\r\n    );\r\n  }\r\n\r\n}\r\n\r\ninterface ServerSecuritySector {\r\n  id: SecuritySectorId;\r\n  title: string;\r\n}\r\n\r\nclass Mapper {\r\n  static sectorsToClient(items: ServerSecuritySector[]): SecuritySector[] {\r\n    return items.map(item => this.sectorToClient(item));\r\n  }\r\n\r\n  private static sectorToClient(item: ServerSecuritySector): SecuritySector {\r\n    const ret: SecuritySector = {\r\n      ...item\r\n    };\r\n    return ret;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiExternalSecuritiesSectorsService} from '../../store-api/api-external/api-securities-sectors.service';\r\nimport {SecuritySector} from '../models/securities';\r\n\r\n@Injectable()\r\nexport class ApiSecuritiesSectorsService {\r\n\r\n  constructor(private apiExternalSecuritiesPricesService: ApiExternalSecuritiesSectorsService) {\r\n  }\r\n\r\n  getSecuritiesSectors(): Observable<SecuritySector[]> {\r\n    return this.apiExternalSecuritiesPricesService.getSecuritiesSectors();\r\n  }\r\n\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {\r\n  SecuritiesEventsItemsPage,\r\n  SecuritiesEventsPagedParams,\r\n  SecurityEvent, SecurityEventBondData,\r\n  SecurityEventData,\r\n  SecurityEventDataDividends, SecurityEventId, SecurityEventTableField,\r\n  SecurityEventType\r\n} from '../../api-public/models/securities-events';\r\nimport {Currency, DayString} from '../../api-public/models/common-biz';\r\nimport {Ticker} from '../../api-public/models/assets-history';\r\nimport {GUID} from '../../api-public/models/common';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalSecuritiesEventsService {\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n  }\r\n\r\n  getSecurityEvents(tickers: Ticker[]): Observable<SecurityEvent[]> {\r\n    const pagedParams: SecuritiesEventsPagedParams = {\r\n      pageInfo: {page: 1, pageSize: 100000},\r\n      searchParams: { tickers }, sorting: { field: SecurityEventTableField.ticker, isAsc: true }\r\n    };\r\n    return this.getSecurityEventsPage(pagedParams).pipe(\r\n      map(data => data.items)\r\n    );\r\n\r\n    // todo: deprecated: use getSecurityEventsPage\r\n    /*const url = 'api/securities-events/by-tickers';\r\n    return this.httpClient.post(url, { tickers }).pipe(\r\n      map(data => {\r\n        return Mapper.eventsToClient(data as ServerSecurityEvent[]);\r\n      })\r\n    );*/\r\n  }\r\n\r\n  getSecurityEventsIds(ids: SecurityEventId[]): Observable<SecurityEvent[]> {\r\n    const url = 'api/securities-events/by-ids';\r\n    return this.httpClient.post(url, { ids }).pipe(\r\n      map(data => {\r\n        return Mapper.eventsToClient(data as ServerSecurityEvent[]);\r\n      })\r\n    );\r\n  }\r\n\r\n  getSecurityEventsPage(pagedParams: SecuritiesEventsPagedParams): Observable<SecuritiesEventsItemsPage> {\r\n    const url = 'api/securities-events/page2';\r\n    const params: any = Mapper.paramsToServer(pagedParams);\r\n    return this.httpClient.post(url, params).pipe(\r\n      map((resp) => {\r\n        const ret = Mapper.itemsPageToClient(resp as any as SrvItemsPage);\r\n        return ret;\r\n      })\r\n    );\r\n  }\r\n}\r\n\r\ninterface SrvDataDivs {\r\n  amount: number; // 7.2,\r\n  currency: string; // \"RUB\"\r\n}\r\n\r\ninterface SrvBondData {\r\n  amount: number; // 7.2,\r\n  currency: string; // \"RUB\"\r\n}\r\n\r\ntype SrvData = SrvDataDivs | SrvBondData;\r\n\r\ninterface ServerSecurityEvent {\r\n  id: GUID;\r\n  date: string; // \"2014-07-16T21:00:00.000Z\",\r\n  ticker: string; // \"GAZP\",\r\n  type: string; // \"dividends\",\r\n  data: SrvData;\r\n  isApproved: boolean; // moderated\r\n  isCancelled: boolean;\r\n  createdAt: string; // \"2022-10-20T05:25:52.722Z\",\r\n  updatedAt: string; // \"2022-10-21T01:47:34.393Z\"\r\n}\r\n\r\ninterface SrvSecuritiesEventsParams {\r\n  page: number;\r\n  pageSize: number;\r\n  sorting?: string;\r\n  asc?: boolean;\r\n\r\n  tickers?: Ticker[];\r\n  fromDate?: DayString;\r\n  toDate?: DayString;\r\n  eventType?: SecurityEventType;\r\n}\r\n\r\ninterface SrvItemsPage {\r\n  items: ServerSecurityEvent[];\r\n  total: number;\r\n\r\n  pagedParams: {\r\n    page: number;\r\n    pageSize: number;\r\n    sorting: {\r\n      field: string;\r\n      isAsc: boolean;\r\n    };\r\n  };\r\n}\r\n\r\nclass Mapper {\r\n\r\n  static paramsToServer(params: SecuritiesEventsPagedParams): SrvSecuritiesEventsParams {\r\n    const ret: SrvSecuritiesEventsParams = {\r\n      page: params.pageInfo.page,\r\n      pageSize: params.pageInfo.pageSize,\r\n    };\r\n    if (!!params.sorting.field) {\r\n      ret.sorting = params.sorting.field;\r\n      ret.asc = params.sorting.isAsc;\r\n    }\r\n    if (!!params.searchParams) {\r\n      if (!!params.searchParams.tickers && params.searchParams.tickers.length > 0) { ret.tickers = [...params.searchParams.tickers]; }\r\n      if (!!params.searchParams.fromDate) { ret.fromDate = params.searchParams.fromDate; }\r\n      if (!!params.searchParams.toDate) { ret.toDate = params.searchParams.toDate; }\r\n      if (!!params.searchParams.eventType) { ret.eventType = params.searchParams.eventType; }\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  static itemsPageToClient(srvItemsPage: SrvItemsPage): SecuritiesEventsItemsPage {\r\n    const ret: SecuritiesEventsItemsPage = {\r\n      items: this.eventsToClient2(srvItemsPage.items),\r\n      total: srvItemsPage.total,\r\n\r\n      pagedParams: {\r\n        pageInfo: {\r\n          page: srvItemsPage.pagedParams.page,\r\n          pageSize: srvItemsPage.pagedParams.pageSize,\r\n        },\r\n        sorting: {\r\n          field: srvItemsPage.pagedParams.sorting.field as SecurityEventTableField,\r\n          isAsc: srvItemsPage.pagedParams.sorting.isAsc\r\n        },\r\n        searchParams: null as any // todo:\r\n      }\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  // @deprecated\r\n  static eventsToClient(items: ServerSecurityEvent[]): SecurityEvent[] {\r\n    return items.map(item => this.eventToClient(item))\r\n      .sort((a, b) => a.date < b.date ? -1 : 1); // todo: сразу это делать на бекенде\r\n  }\r\n\r\n  static eventsToClient2(items: ServerSecurityEvent[]): SecurityEvent[] {\r\n    return items.map(item => this.eventToClient(item));\r\n  }\r\n\r\n  private static eventToClient(item: ServerSecurityEvent): SecurityEvent {\r\n    const ret: SecurityEvent = {\r\n      id: item.id,\r\n      date: new Date(item.date),\r\n      ticker: item.ticker,\r\n      type: item.type as SecurityEventType,\r\n      data: this.dataToClient(item.data, item.type as SecurityEventType),\r\n      isApproved: item.isApproved,\r\n      isCancelled: item.isCancelled\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static dataToClient(data: SrvData, type: SecurityEventType): SecurityEventData {\r\n    if (type === SecurityEventType.dividends) {\r\n      return this.divsDataToClient(data);\r\n    }\r\n    const bondsTypes = [SecurityEventType.bondOffer, SecurityEventType.bondCoupon, SecurityEventType.bondAmortization];\r\n    if (bondsTypes.includes(type)) {\r\n      return this.bondsDataToClient(data);\r\n    }\r\n\r\n    return data as SecurityEventData;\r\n  }\r\n\r\n  private static divsDataToClient(data: SrvDataDivs): SecurityEventDataDividends {\r\n    const ret: SecurityEventDataDividends = {\r\n      amount: data.amount,\r\n      currency: data.currency as Currency\r\n    };\r\n    return ret;\r\n  }\r\n\r\n  private static bondsDataToClient(data: SrvDataDivs): SecurityEventBondData {\r\n    const ret: SecurityEventBondData = {\r\n      amount: data.amount,\r\n      currency: data.currency as Currency\r\n    };\r\n    return ret;\r\n  }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {ApiExternalSecuritiesEventsService} from '../../store-api/api-external/api-securities-events.service';\r\nimport {\r\n  SecuritiesEventsItemsPage,\r\n  SecuritiesEventsPagedParams,\r\n  SecurityEvent,\r\n} from '../models/securities-events';\r\nimport {Ticker} from '../models/assets-history';\r\n\r\n\r\n@Injectable()\r\nexport class ApiSecuritiesEventsService {\r\n\r\n  constructor(private apiExternalSecuritiesEventsService: ApiExternalSecuritiesEventsService) {\r\n  }\r\n\r\n  // todo: deprecated\r\n  getSecurityEvents(tickers: Ticker[]): Observable<SecurityEvent[]> {\r\n    return this.apiExternalSecuritiesEventsService.getSecurityEvents(tickers);\r\n  }\r\n\r\n  getSecurityEventsByIds(ids: Ticker[]): Observable<SecurityEvent[]> {\r\n    return this.apiExternalSecuritiesEventsService.getSecurityEventsIds(ids);\r\n  }\r\n\r\n  getSecurityEventsPage(pagedParams: SecuritiesEventsPagedParams): Observable<SecuritiesEventsItemsPage> {\r\n    return this.apiExternalSecuritiesEventsService.getSecurityEventsPage(pagedParams);\r\n  }\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {Currency, SecuritySource} from '../../api-public/models/common-biz';\r\nimport {\r\n  SecuritiesItemsPage,\r\n  SecuritiesPagedParams,\r\n  SecuritiesTableField,\r\n  Security3, SecurityId,\r\n  SecuritySearchData,\r\n  SecuritySectorId,\r\n  SecurityType\r\n} from '../../api-public/models/securities';\r\nimport {Ticker} from '../../api-public/models/assets-history';\r\nimport {CurrenciesMappers} from './_currencies-mappers/currencies.mappers';\r\nimport {SecurityDataBond} from '../../api-public/models/securities-data';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ApiExternalSecuritiesDataService {\r\n\r\n  constructor(private httpClient: HttpClient) {\r\n  }\r\n\r\n  getSecuritiesDataBondsByIds(securitiesIds: SecurityId[]): Observable<SecurityDataBond[]> {\r\n    const url = 'api/securities-data/bonds/by-ids';\r\n    const body = {\r\n      ids: securitiesIds\r\n    };\r\n    return this.httpClient.post(url, body).pipe(\r\n      map(data => {\r\n        return data as SecurityDataBond[];\r\n      })\r\n    );\r\n  }\r\n}\r\n\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {SecurityId} from '../models/securities';\r\nimport {SecurityDataBond} from '../models/securities-data';\r\nimport {ApiExternalSecuritiesDataService} from '../../store-api/api-external/api-securities-data.service';\r\n\r\n@Injectable()\r\nexport class ApiSecuritiesDataService {\r\n\r\n  constructor(private apiExternalSecuritiesDataService: ApiExternalSecuritiesDataService) {\r\n  }\r\n\r\n  getSecuritiesDataByIds(securitiesIds: SecurityId[]): Observable<SecurityDataBond[]> {\r\n    return this.apiExternalSecuritiesDataService.getSecuritiesDataBondsByIds(securitiesIds);\r\n  }\r\n\r\n}\r\n\r\n\r\n","import {NgModule} from '@angular/core';\r\nimport {ApiPortfoliosService} from './api-portfolios.service';\r\nimport {ApiOperationsService} from './api-operations.service';\r\nimport {ApiSecuritiesService} from './api-securities.service';\r\nimport {ApiSecuritiesPricesService} from './api-securities-prices.service';\r\nimport {ApiDbService} from './api-db.service';\r\nimport {HttpClientModule} from '@angular/common/http';\r\nimport {ApiCurrenciesService} from './api-currencies.service';\r\nimport {ApiDemoCreator2Service} from './api-demo-creator2.service';\r\nimport {ApiReportParserService} from './api-report-parser.service';\r\n// import {ApiAssetsEventsService} from './api-assets-events.service';\r\nimport {ApiMiscService} from './api-misc.service';\r\nimport {ApiAssetsHistoryService} from './api-assets-history.service';\r\nimport {ApiExportService} from './api-export.service';\r\nimport {ApiSecuritiesSectorsService} from './api-securities-sectors.service';\r\nimport {ApiSecuritiesEventsService} from './api-securities-events.service';\r\nimport {ApiSecuritiesDataService} from './api-securities-data.service';\r\n\r\n@NgModule({\r\n  imports: [\r\n    HttpClientModule\r\n  ],\r\n  providers: [\r\n    // ApiAssetsEventsService,\r\n    ApiAssetsHistoryService,\r\n    ApiCurrenciesService,\r\n    ApiDbService,\r\n    ApiDemoCreator2Service,\r\n    ApiExportService,\r\n    ApiMiscService,\r\n    ApiOperationsService,\r\n    ApiPortfoliosService,\r\n    ApiReportParserService,\r\n    ApiSecuritiesService,\r\n    ApiSecuritiesDataService,\r\n    ApiSecuritiesEventsService,\r\n    ApiSecuritiesPricesService,\r\n    ApiSecuritiesSectorsService\r\n  ]\r\n})\r\nexport class StoreApi2Module {}\r\n","import { NgModule } from '@angular/core';\r\nimport { MoexClientBackendComponent } from './moex-client-backend.component';\r\nimport {StoreApi2Module} from './api-public/services/store-api2.module';\r\n\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    StoreApi2Module\r\n  ],\r\n  declarations: [\r\n    MoexClientBackendComponent\r\n  ],\r\n  exports: [\r\n    StoreApi2Module,\r\n    MoexClientBackendComponent\r\n  ]\r\n})\r\nexport class MoexClientBackendModule { }\r\n","import {Observable, Observer} from 'rxjs';\r\n\r\n// @dynamic\r\nexport class FileHelper {\r\n  static fileToBinary$(blob: Blob): Observable<string | null> {\r\n    return new Observable((observer: Observer<string | null>) => {\r\n      const fileReader = new FileReader();\r\n      fileReader.readAsBinaryString(blob);\r\n      fileReader.onload = (event: ProgressEvent) => {\r\n        const fileReader2: FileReader | null = event.target as FileReader;\r\n        if (!fileReader2) {\r\n          observer.next(null);\r\n        } else {\r\n          const binaryData: string = fileReader2.result as string;\r\n          observer.next(binaryData);\r\n        }\r\n        observer.complete();\r\n      };\r\n    });\r\n  }\r\n\r\n  /*static fileToString(file: File): Observable<string> {\r\n    return new Observable((observer: Observer<string>) => {\r\n      file.text().then((text) => {\r\n        observer.next(text);\r\n        observer.complete();\r\n      });\r\n    });\r\n  }*/\r\n}\r\n","/*\r\n * Public API Surface of moex-client-backend\r\n */\r\n\r\nexport * from './array.helper';\r\nexport * from './dict-array.mapper';\r\nexport * from './date.helper';\r\nexport * from './file.helper';\r\nexport * from './isin-detector.helper';\r\n\r\nexport * from './transliterate.helper';\r\nexport * from './uid-generator.helper';\r\n\r\n","/*\r\n * Public API Surface of moex-client-backend\r\n */\r\n\r\nexport * from './count-price.mapper';\r\nexport * from './ticker-currency.mapper';\r\n","/*\r\n * Public API Surface of moex-client-backend\r\n */\r\n\r\nexport * from './assets-history';\r\nexport * from './common';\r\nexport * from './common-biz';\r\nexport * from './currencies';\r\nexport * from './operations';\r\nexport * from './portfolio';\r\nexport * from './securities';\r\nexport * from './securities-data';\r\nexport * from './securities-events';\r\n","/*\r\n * Public API Surface of moex-client-backend\r\n */\r\n\r\n// export * from './api-assets-events.service';\r\nexport * from './api-assets-history.service';\r\nexport * from './api-currencies.service';\r\nexport * from './api-db.service';\r\nexport * from './api-demo-creator2.service';\r\nexport * from './api-export.service';\r\nexport * from './api-misc.service';\r\nexport * from './api-operations.service';\r\nexport * from './api-portfolios.service';\r\nexport * from './api-securities.service';\r\nexport * from './api-securities-data.service';\r\nexport * from './api-securities-events.service';\r\nexport * from './api-securities-prices.service';\r\nexport * from './api-securities-sectors.service';\r\nexport * from './store-api2.module';\r\n\r\nexport * from './api-report-parser.service';\r\n","/*\r\n * Public API Surface of moex-client-backend\r\n */\r\n\r\nexport * from './helpers/_public-api';\r\nexport * from './mappers/_public-api';\r\nexport * from './models/_public-api';\r\nexport * from './services/_public-api';\r\n","\r\n// for mock testing\r\n// export * from './api-assets-events.service';\r\nexport * from './api-currencies.service';\r\nexport * from './api-securities.service';\r\nexport * from './api-securities-prices.service';\r\n","/*\r\n * Public API Surface of moex-client-backend\r\n */\r\n\r\nexport * from './lib/moex-client-backend.service';\r\nexport * from './lib/moex-client-backend.component';\r\nexport * from './lib/moex-client-backend.module';\r\n\r\nexport * from './lib/api-public/public-api';\r\n\r\n// for tests mocking\r\nexport * from './lib/store-api/api-external/_public-api';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Mapper","tablesConfig13","Helper","i1.ApiPromise2Service","i1.PortfoliosStore","i1.OperationsStore","i2.PortfoliosStore","i1.AssetsHistoryCalculator3Service","i2.AssetsHistoryStore","i3.AssetsHistoryConsistenceStore","i2.OperationsStore","i3.ApiAssetsHistoryService","i1.ApiExternalSecuritiesService","i1.ApiExternalSecuritiesPricesService","i1.ApiExternalCurrenciesService","i1.ApiPortfoliosService","i2.ApiOperationsService","ParserActionTypeT","ExpectedReportTextT","i1.ReportReaderTinkoffService","i2.ReportReaderSberService","i3.ReportReaderBksService","i4.ReportReaderAppService","i5.ReportReaderAlfaService","i6.SecuritiesCheckConnector2Service","i1.ReportParserStore","i1.ApiExternalMiscService","i1.ReportReaderAppService","i2.ReportMakerStore","i1.ApiExternalSecuritiesSectorsService","i1.ApiExternalSecuritiesEventsService","i1.ApiExternalSecuritiesDataService"],"mappings":"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"}