public List <PriceHistory> GetPriceHistory(int instrumentId, DateTime startDate, DateTime endDate) { var results = new List <PriceHistory>(); Exception ex = null; _context.Send(state => { using (var instrument = CSMInstrument.GetInstance(instrumentId)) { if (instrument is null) { ex = new InstrumentNotFoundException(); return; } int refCount = 0; var history = instrument.NEW_HistoryList(DataTypeExtensions.ConvertDateTime(startDate), DataTypeExtensions.ConvertDateTime(endDate), ref refCount, null); for (var i = 0; i < refCount; i++) { using (SSMHistory price = history.GetNthElement(i)) { if (price.day != DataTypeExtensions.SophisNull) { var ph = new PriceHistory() { Ask = (double?)DataTypeExtensions.ConvertDouble(price.ask, eMNullValueType.M_nvUndefined), Bid = (double?)DataTypeExtensions.ConvertDouble(price.bid, eMNullValueType.M_nvUndefined), First = (double?)DataTypeExtensions.ConvertDouble(price.first, eMNullValueType.M_nvUndefined), High = (double?)DataTypeExtensions.ConvertDouble(price.high, eMNullValueType.M_nvUndefined), Low = (double?)DataTypeExtensions.ConvertDouble(price.low, eMNullValueType.M_nvUndefined), Last = (double?)DataTypeExtensions.ConvertDouble(price.last, eMNullValueType.M_nvUndefined), Theoretical = (double?)DataTypeExtensions.ConvertDouble(price.theorical, eMNullValueType.M_nvUndefined), Volume = (double?)DataTypeExtensions.ConvertDouble(price.volume, eMNullValueType.M_nvUndefined), Date = (DateTime)price.day.GetDateTime() }; results.Add(ph); } } } } }, null); if (ex is null) { return(results); } else { throw ex; } }
public override void GetCell(CSMAccPostingData data, ref SSMCellValue value, SSMCellStyle style) { using (var log = LogHelper.GetLogger(GetType().Name, MethodBase.GetCurrentMethod().Name)) { style.kind = eMDataType.M_dNullTerminatedString; var accountData = data.GetAccPosting(); var tradeId = accountData.fTradeID; var accountId = 0; SSMFinalPosting _fPosting = data.GetAccPosting(); if (_fPosting != null) { accountId = _fPosting.fAccountNameID; if (_fPosting.fPostingType == 11) { CSMPosition pos = CSMPosition.GetCSRPosition(_fPosting.fPositionID); if (pos != null) { CSMPortfolio port = pos.GetPortfolio(); if (port != null) { CSMAmFund fund = CSMAmFund.GetFundFromFolio(port); if (fund != null) { string accountBookName = GetAccountBookNameForFund(fund); value.SetString(accountBookName); return; } } } return; } } if (tradeId == 0 || accountId == 0) { return; } CSMTransaction trade = CSMTransaction.newCSRTransaction(tradeId); if (trade == null) { return; } //Business Event int type = (int)trade.GetTransactionType(); //Any Posting linked to the IDB Group should have account book 1000 if (_fPosting.fAccountNameID == 33528) { value.SetString(GetNostroIDBAccountBook(_fPosting.fID)); return; } int PostingId = _fPosting.fID; int NostroId = _fPosting.fNostroAccountID; if (NostroId > 0) { int EntityId = 0; if (fDataLoaded == false) { LoadAccountEntities(); } fNostroAndEntity.TryGetValue(NostroId, out EntityId); if (IsIDBGroupEntity(EntityId)) { value.SetString("1000"); return; } } var cacheKey = string.Format("AccountBook_{0}", accountData.fID); var strValue = CacheManager.GetItem <string>(cacheKey); try { if (!string.IsNullOrEmpty(strValue)) { value.SetString(strValue); return; } //if value is not cached already we loaded it strValue = CSxDataFacade.GetAccountBookName(accountData.fAccountingBookID); //Filter on the account defined in the config file if (CSxIslamicInstrumentsHelperCLI.IsForbiddenAccountId(accountId)) { var parentId = 0; try { //parentId = CSxIslamicInstrumentsHelperCLI.GetParentTrade(tradeId); //couponS and redemption sukuk are not taken in account in this function parentId = CSxIdbTradeId.GetParentIDBMergingAllocatedTrade(type, tradeId); } catch (Exception) { log.WriteSystemError("Failed to check if tarde is merged"); } // AccountExceptions.Contains(accountData.fAccountingBookID) //FILTER on merged trades if (parentId != 0) { try { var t = CSMTransaction.newCSRTransaction(tradeId); if (t == null) { throw new Exception("Failed to open trade"); } var fid = 0; //if(CSxIslamicInstrumentsHelperCLI.IsInterFundCashTransferBusinessEvent(type)) //{ // var tr = CSMTransaction.newCSRTransaction(parentId); // if (tr == null) // throw new Exception("Failed to open trade"); // fid = CSxIslamicInstrumentsHelperCLI.GetFundForEntity(tr.GetEntity()); //} //else //{ fid = CSxIslamicInstrumentsHelperCLI.GetFundForEntity(t.GetEntity()); //} CSMAmFund f = CSMInstrument.GetInstance(fid); if (f == null) { throw new Exception("Failed to find fund for settlement entity"); } strValue = CSxDataFacade.GetAccountBookIdForFolio(f.GetTradingPortfolio()); } catch (Exception e) { log.WriteSystemError("Failed to get Account Book Id from Settlement Entity for merged trade {0} : {1}", tradeId, e.Message); } } //if (strValue != null) //{ // //strValue = strValue.Substring(0, Math.Min(4, strValue.Length)); // //we cache the value for next time // CacheManager.SetItem(cacheKey, strValue); //} } if (strValue != null) { strValue = strValue.Substring(0, Math.Min(4, strValue.Length)); value.SetString(strValue); } } catch (Exception e) { log.WriteSystemError("Failed to get Account Book Name for trade {0} : {1}", tradeId, e.Message); if (IDB.IslamicInstruments.CSxIslamicInstrumentsHelperCLI.IsInGUIMode()) { MessageBox.Show("Failed to get Account Book Name for trade " + tradeId + " Error:" + e.Message); } } } }