public string GetAccountBookNameForFund(CSMAmFund fund)
    {
        string result        = null;
        int    fundFolioCode = fund.GetTradingPortfolio();
        string SQLQuery      = "select SICOVAM ID, substr(b.name, 1,4) IDB_ACCOUNT_BOOK from FUNDS f, account_book_folio bf , account_book b where b.ID=bf.ACCOUNT_BOOK_ID and record_type=1 and f.TRADINGFOLIO=bf.FOLIO_ID  AND f.FUNDTYPE=1";

        using (OracleCommand myCommand = new OracleCommand(SQLQuery, DBContext.Connection))
        {
            using (OracleDataReader myReader = myCommand.ExecuteReader())
            {
                if (myReader.Read())
                {
                    result = myReader["IDB_ACCOUNT_BOOK"].ToString();
                }
            }
        }
        return(result);
    }
Beispiel #2
0
        public string GetAccountBookNameForFund(CSMAmFund fund)
        {
            string result        = "";
            int    fundFolioCode = fund.GetTradingPortfolio();
            string SQLQuery      = "select substr(b.name, 1,4) IDB_ACCOUNT_BOOK from account_book_folio bf , account_book b where b.ID=bf.ACCOUNT_BOOK_ID and bf.FOLIO_ID = " + fundFolioCode + " and record_type=1";

            using (OracleCommand myCommand = new OracleCommand(SQLQuery, DBContext.Connection))
            {
                using (OracleDataReader myReader = myCommand.ExecuteReader())
                {
                    while (myReader.Read())
                    {
                        result = myReader["IDB_ACCOUNT_BOOK"].ToString();
                        break;
                    }
                }
            }
            return(result);
        }
Beispiel #3
0
        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);
                    }
                }
            }
        }