private static void CheckRepoLimit(Boolean blnIsSubmit, DA_TRN record, out object PCESCEObject) { try { LimitDisplayModel PCECheckRecords = DealUIP.CheckPCE(SessionInfo, record, ProductId); LimitDisplayModel CountryCheckRecords = DealUIP.CheckCountryLimit(SessionInfo, record, ProductId); PCESCEObject = ConsoLimitDisplay(blnIsSubmit, PCECheckRecords, null, CountryCheckRecords); } catch (Exception ex) { throw new Exception(ex.Message); } }
private static void CheckFXSpotLimits(Boolean blnIsSubmit, DA_TRN record, DA_TRN record2, out object PCESCEObject) { try { LimitDisplayModel PCECheckRecords = DealUIP.CheckFXSwapPCE(SessionInfo, record, record2, ProductId); LimitDisplayModel SCECheckRecords = record.FLAG_SETTLE.Value ? DealUIP.CheckFXSwapSCE(SessionInfo, record, record2, ProductId) : null; LimitDisplayModel CountryCheckRecords = DealUIP.CheckFXSwapCountryLimit(SessionInfo, record, record2, ProductId); PCESCEObject = ConsoLimitDisplay(blnIsSubmit, PCECheckRecords, SCECheckRecords, CountryCheckRecords); } catch (Exception ex) { throw new Exception(ex.Message); } }
public LimitDisplayModel CheckCountryLimit(SessionInfo sessioninfo, DA_TRN trn, string strExcludeID) { LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); Guid guExcludeID = Guid.Empty; if (trn.KK_PCCF != null) { List<CountryLimitModel> deal_conts = new List<CountryLimitModel>(); if (trn.FLAG_SETTLE.HasValue && trn.FLAG_SETTLE.Value) { deal_conts = (from f in trn.DA_TRN_FLOW where f.FLOW_AMOUNT_THB > 0 select new CountryLimitModel { EXPOSURE_DATE = f.FLOW_DATE.Value, EXPOSURE = f.FLOW_AMOUNT_THB.Value + trn.KK_CONTRIBUTE }).ToList(); } if (trn.TRADE_DATE.Value != trn.MATURITY_DATE.Value) deal_conts.Add(new CountryLimitModel { EXPOSURE_DATE = trn.TRADE_DATE.Value, EXPOSURE = trn.KK_CONTRIBUTE.Value }); //Find original deal for exclude it from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID)) guExcludeID = Guid.Parse(strExcludeID.Replace("\"", "")); List<LimitCheckModel> ori_conts = _limitCheckBusiness.CheckAllCountry(sessioninfo.Process.CurrentDate, trn, guExcludeID, Guid.Empty); limitDisplay.LimitDisplayObject = GenerateCountryLimitDisplay(deal_conts, ori_conts, trn, null, sessioninfo.CountryOverwrite, ref limitDisplay); if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) trn.OVER_COUNTRY_AMOUNT = limitDisplay.OverAmount; } else { limitDisplay.LimitCheckStatus = eLimitCheckStatus.ERROR; limitDisplay.Message = "This deal breach allowed tenor."; } return limitDisplay; }
private static void CheckFILimit(Boolean blnIsSubmit, DA_TRN record, out object PCESCEObject) { try { LimitDisplayModel PCECheckRecords = DealUIP.CheckPCE(SessionInfo, record, ProductId); LimitDisplayModel SCECheckRecords = null; LimitDisplayModel CountryCheckRecords = DealUIP.CheckCountryLimit(SessionInfo, record, ProductId); var flagSettle = record.FLAG_SETTLE.Value && record.NOTIONAL_THB.Value > 0; if (flagSettle) { SCECheckRecords = DealUIP.CheckSCE(SessionInfo, record, ProductId); } PCESCEObject = ConsoLimitDisplay(blnIsSubmit, PCECheckRecords, SCECheckRecords, CountryCheckRecords); } catch (Exception ex) { throw new Exception(ex.Message); } }
public static object ConsoLimitDisplay(bool blnSubmit, LimitDisplayModel pce, LimitDisplayModel set, LimitDisplayModel country) { object result = new object(); if (pce.LimitCheckStatus == eLimitCheckStatus.ERROR) { result = new { Result = "ERROR", Message = pce.Message, }; } else if (set != null && set.LimitCheckStatus == eLimitCheckStatus.ERROR) { result = new { Result = "ERROR", Message = set.Message, }; } else if (country.LimitCheckStatus == eLimitCheckStatus.ERROR) { result = new { Result = "ERROR", Message = country.Message, }; } else if (pce.LimitCheckStatus == eLimitCheckStatus.NOTALLOW || (set != null ? set.LimitCheckStatus == eLimitCheckStatus.NOTALLOW : false) || country.LimitCheckStatus == eLimitCheckStatus.NOTALLOW) { result = new { Result = "NOTALLOW", Message = "", PCERecords = JsonConvert.SerializeObject(pce.LimitDisplayObject, new IsoDateTimeConverter()), SCERecords = JsonConvert.SerializeObject(set != null ? set.LimitDisplayObject : null, new IsoDateTimeConverter()), CountryRecords = JsonConvert.SerializeObject(country.LimitDisplayObject, new IsoDateTimeConverter()) }; } else if (blnSubmit && (pce.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE || (set != null ? set.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE : false) || country.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE)) { result = new { Result = "NEEDAPPROVE", Message = "", PCERecords = JsonConvert.SerializeObject(pce.LimitDisplayObject, new IsoDateTimeConverter()), SCERecords = JsonConvert.SerializeObject(set != null ? set.LimitDisplayObject : null, new IsoDateTimeConverter()), CountryRecords = JsonConvert.SerializeObject(country.LimitDisplayObject, new IsoDateTimeConverter()) }; } else { result = new { Result = "OK", Message = "", PCERecords = JsonConvert.SerializeObject(pce.LimitDisplayObject, new IsoDateTimeConverter()), SCERecords = JsonConvert.SerializeObject(set != null ? set.LimitDisplayObject : null, new IsoDateTimeConverter()), CountryRecords = JsonConvert.SerializeObject(country.LimitDisplayObject, new IsoDateTimeConverter()) }; } return result; }
public static object ConsoLimitDisplay(bool blnSubmit, LimitDisplayModel pce, LimitDisplayModel set, LimitDisplayModel country) { object result = new object(); if (pce.LimitCheckStatus == eLimitCheckStatus.ERROR) { result = new { Result = "ERROR", Message = pce.Message, }; } else if (set != null && set.LimitCheckStatus == eLimitCheckStatus.ERROR) { result = new { Result = "ERROR", Message = set.Message, }; } else if (country.LimitCheckStatus == eLimitCheckStatus.ERROR) { result = new { Result = "ERROR", Message = country.Message, }; } else if (pce.LimitCheckStatus == eLimitCheckStatus.NOTALLOW || (set != null ? set.LimitCheckStatus == eLimitCheckStatus.NOTALLOW : false) || country.LimitCheckStatus == eLimitCheckStatus.NOTALLOW) { result = new { Result = "NOTALLOW", Message = "", PCERecords = JsonConvert.SerializeObject(pce.LimitDisplayObject, new IsoDateTimeConverter()), SCERecords = JsonConvert.SerializeObject(set != null ? set.LimitDisplayObject : null, new IsoDateTimeConverter()), CountryRecords = JsonConvert.SerializeObject(country.LimitDisplayObject, new IsoDateTimeConverter()) }; } else if (blnSubmit && (pce.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE || (set != null ? set.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE : false) || country.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE)) { result = new { Result = "NEEDAPPROVE", Message = "", PCERecords = JsonConvert.SerializeObject(pce.LimitDisplayObject, new IsoDateTimeConverter()), SCERecords = JsonConvert.SerializeObject(set != null ? set.LimitDisplayObject : null, new IsoDateTimeConverter()), CountryRecords = JsonConvert.SerializeObject(country.LimitDisplayObject, new IsoDateTimeConverter()) }; } else { result = new { Result = "OK", Message = "", PCERecords = JsonConvert.SerializeObject(pce.LimitDisplayObject, new IsoDateTimeConverter()), SCERecords = JsonConvert.SerializeObject(set != null ? set.LimitDisplayObject : null, new IsoDateTimeConverter()), CountryRecords = JsonConvert.SerializeObject(country.LimitDisplayObject, new IsoDateTimeConverter()) }; } return(result); }
public LimitDisplayModel CheckFXSwapCountryLimit(SessionInfo sessioninfo, DA_TRN trn1, DA_TRN trn2, string strExcludeID) { LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); DA_TRN oldtrn1 = null; DA_TRN oldtrn2 = null; Guid guExcludeID1 = Guid.Empty; Guid guExcludeID2 = Guid.Empty; if (trn1.KK_PCCF != null && trn2.KK_PCCF != null) { List<CountryLimitModel> deal_conts = new List<CountryLimitModel>(); if (trn1.FLAG_SETTLE.HasValue && trn1.FLAG_SETTLE.Value) { deal_conts = (from f in trn1.DA_TRN_FLOW where f.FLOW_AMOUNT_THB > 0 select new CountryLimitModel { EXPOSURE_DATE = f.FLOW_DATE.Value, EXPOSURE = f.FLOW_AMOUNT_THB.Value + trn1.KK_CONTRIBUTE }).Union( (from f in trn2.DA_TRN_FLOW where f.FLOW_AMOUNT_THB > 0 select new CountryLimitModel { EXPOSURE_DATE = f.FLOW_DATE.Value, EXPOSURE = f.FLOW_AMOUNT_THB.Value + trn2.KK_CONTRIBUTE })).ToList(); } if (trn1.TRADE_DATE.Value != trn1.MATURITY_DATE.Value) deal_conts.Add(new CountryLimitModel { EXPOSURE_DATE = trn1.TRADE_DATE.Value, EXPOSURE = trn1.KK_CONTRIBUTE.Value + trn2.KK_CONTRIBUTE.Value }); //Find original deals for exclude them from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID1)) { guExcludeID1 = Guid.Parse(strExcludeID.Replace("\"", "")); oldtrn1 = GetByID(guExcludeID1); oldtrn2 = GetDealByProcessDate(sessioninfo.Process.CurrentDate).FirstOrDefault(p => p.INT_DEAL_NO == oldtrn1.INT_DEAL_NO && p.VERSION == oldtrn1.VERSION && p.ID != oldtrn1.ID); if (oldtrn2 == null || oldtrn1 == null) throw this.CreateException(new Exception(), "Cannot find original deals."); guExcludeID1 = oldtrn1.ID; guExcludeID2 = oldtrn2.ID; } List<LimitCheckModel> ori_conts = _limitCheckBusiness.CheckAllCountry(sessioninfo.Process.CurrentDate, trn2, guExcludeID1, guExcludeID2); limitDisplay.LimitDisplayObject = GenerateCountryLimitDisplay(deal_conts, ori_conts, trn1, trn2, sessioninfo.CountryOverwrite, ref limitDisplay); if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) { trn1.OVER_COUNTRY_AMOUNT = limitDisplay.OverAmount; trn2.OVER_COUNTRY_AMOUNT = limitDisplay.OverAmount; } } else { limitDisplay.LimitCheckStatus = eLimitCheckStatus.ERROR; limitDisplay.Message = "This deal breach allowed tenor."; } return limitDisplay; }
public LimitDisplayModel CheckSwapCountryLimit(SessionInfo sessioninfo, DA_TRN trn, string strExcludeID) { LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); InstrumentBusiness _insBusiness = new InstrumentBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); Guid guExcludeID = Guid.Empty; if (trn.KK_PCCF != null) { List<CountryLimitModel> deal_conts = new List<CountryLimitModel>(); MA_INSTRUMENT ins = _insBusiness.GetByID(sessioninfo, trn.INSTRUMENT_ID.Value); if (ins.LABEL == "CCS") { deal_conts = (from f in trn.DA_TRN_FLOW where f.FLOW_AMOUNT > 0 // Receive cash flows only select new { Flow_Date = f.FLOW_DATE, Flow_Amount_THB = f.FLOW_AMOUNT_THB }).GroupBy(fl => new { fl.Flow_Date }) .Select(p => new CountryLimitModel { EXPOSURE_DATE = p.Key.Flow_Date, EXPOSURE = p.Sum(x => x.Flow_Amount_THB) + trn.KK_CONTRIBUTE.Value }).OrderBy(p => p.EXPOSURE_DATE).ToList(); } else //Net cashflow for IRS { deal_conts = (from f in trn.DA_TRN_FLOW select new { Flow_Date = f.FLOW_DATE, Flow_ccy = f.FLAG_FIRST ? trn.FIRST.CCY_ID : trn.SECOND.CCY_ID, Flow_Amount_THB = f.FLOW_AMOUNT_THB }).GroupBy(fl => new { fl.Flow_Date, fl.Flow_ccy }) .Select(p => new CountryLimitModel { EXPOSURE_DATE = p.Key.Flow_Date, EXPOSURE = p.Sum(x => x.Flow_Amount_THB) + trn.KK_CONTRIBUTE.Value }).Where(t => t.EXPOSURE > 0).OrderBy(p => p.EXPOSURE_DATE).ToList(); } if (trn.TRADE_DATE.Value != trn.MATURITY_DATE.Value) deal_conts.Add(new CountryLimitModel { EXPOSURE_DATE = trn.TRADE_DATE.Value, EXPOSURE = trn.KK_CONTRIBUTE.Value }); //Find original deal for exclude it from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID)) guExcludeID = Guid.Parse(strExcludeID.Replace("\"", "")); List<LimitCheckModel> ori_conts = _limitCheckBusiness.CheckAllCountry(sessioninfo.Process.CurrentDate, trn, guExcludeID, Guid.Empty); limitDisplay.LimitDisplayObject = GenerateCountryLimitDisplay(deal_conts, ori_conts, trn, null, sessioninfo.CountryOverwrite, ref limitDisplay); if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) trn.OVER_COUNTRY_AMOUNT = limitDisplay.OverAmount; } else { limitDisplay.LimitCheckStatus = eLimitCheckStatus.ERROR; limitDisplay.Message = "This deal breach allowed tenor."; } return limitDisplay; }
public LimitDisplayModel CheckSwapSCE(SessionInfo sessioninfo, DA_TRN trn, string strExcludeID) { LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); InstrumentBusiness _insBusiness = new InstrumentBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); Guid guExcludeID = Guid.Empty; List<DA_TRN_CASHFLOW> deal_conts = new List<DA_TRN_CASHFLOW>(); MA_INSTRUMENT ins = _insBusiness.GetByID(sessioninfo, trn.INSTRUMENT_ID.Value); if (ins.LABEL == "CCS") { deal_conts = (from f in trn.DA_TRN_FLOW where f.FLOW_AMOUNT > 0 // Receive cash flows only select new { Flow_Date = f.FLOW_DATE, Flow_Amount_THB = f.FLOW_AMOUNT_THB }).GroupBy(fl => new { fl.Flow_Date }) .Select(p => new DA_TRN_CASHFLOW { FLOW_DATE = p.Key.Flow_Date, FLOW_AMOUNT_THB = p.Sum(x => x.Flow_Amount_THB) }).OrderBy(p => p.FLOW_DATE).ToList(); } else //Net cashflow for IRS { deal_conts = (from f in trn.DA_TRN_FLOW select new { Flow_Date = f.FLOW_DATE, Flow_ccy = f.FLAG_FIRST ? trn.FIRST.CCY_ID : trn.SECOND.CCY_ID, Flow_Amount_THB = f.FLOW_AMOUNT_THB }).GroupBy(fl => new { fl.Flow_Date, fl.Flow_ccy }) .Select(p => new DA_TRN_CASHFLOW { FLOW_DATE = p.Key.Flow_Date, FLOW_AMOUNT_THB = p.Sum(x => x.Flow_Amount_THB) }).Where(t => t.FLOW_AMOUNT_THB > 0).OrderBy(p => p.FLOW_DATE).ToList(); } //Find original deal for exclude it from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID)) guExcludeID = Guid.Parse(strExcludeID.Replace("\"", "")); List<LimitCheckModel> ori_conts = _limitCheckBusiness.CheckAllSET(sessioninfo.Process.CurrentDate, trn, guExcludeID, Guid.Empty); limitDisplay.LimitDisplayObject = GenerateSETDisplay(deal_conts, ori_conts, sessioninfo.SETOverwrite, ref limitDisplay); if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) trn.OVER_SETTL_AMOUNT = limitDisplay.OverAmount; return limitDisplay; }
//public LimitDisplayModel CheckPCE(SessionInfo sessioninfo, DA_TRN trn) //{ // StaticDataBusiness _staticDataBusiness = new StaticDataBusiness(); // LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); // LimitDisplayModel limitDisplay = new LimitDisplayModel(); // trn.KK_PCCF = _staticDataBusiness.GetPCCF(sessioninfo, trn); // if (trn.KK_PCCF != null) // { // trn.KK_CONTRIBUTE = Math.Ceiling(trn.NOTIONAL_THB.Value * trn.KK_PCCF.Value / 100); // List<LimitCheckModel> limits = _limitCheckBusiness.GetPCEByCriteria(sessioninfo.Process.CurrentDate, trn.CTPY_ID, trn.PRODUCT_ID.Value, "", Guid.Empty, Guid.Empty); // foreach (LimitCheckModel limit in limits) // { // limit.DEAL_CONTRIBUTION = trn.KK_CONTRIBUTE.Value; // SetLimitDisplayStatus(limit, ref limitDisplay); // } // limitDisplay.LimitDisplayObject = limits; // } // else // { // limitDisplay.LimitCheckStatus = eLimitCheckStatus.NOTALLOW; // limitDisplay.LimitErrorObj = new { Result = "ERROR", Message = "This deal breach allowed tenor." }; // } // return limitDisplay; //} public LimitDisplayModel CheckPCE(SessionInfo sessioninfo, DA_TRN trn, string strExcludeID) { StaticDataBusiness _staticDataBusiness = new StaticDataBusiness(); LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); Guid guExcludeID = Guid.Empty; trn.KK_PCCF = _staticDataBusiness.GetPCCF(sessioninfo, trn); //Find original deal for exclude it from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID)) guExcludeID = Guid.Parse(strExcludeID.Replace("\"", "")); if (trn.KK_PCCF != null) { trn.KK_CONTRIBUTE = Math.Ceiling(trn.NOTIONAL_THB.Value * trn.KK_PCCF.Value / 100); List<LimitCheckModel> limits = _limitCheckBusiness.CheckAllPCE(sessioninfo.Process.CurrentDate, trn, guExcludeID, Guid.Empty); foreach (LimitCheckModel limit in limits) { limit.DEAL_CONTRIBUTION = trn.KK_CONTRIBUTE.Value; SetLimitDisplayStatus(limit, sessioninfo.PCEOverwrite, ref limitDisplay); } if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) trn.OVER_AMOUNT = limitDisplay.OverAmount; limitDisplay.LimitDisplayObject = limits; } else { limitDisplay.LimitCheckStatus = eLimitCheckStatus.ERROR; limitDisplay.Message = "This deal breach allowed tenor."; } return limitDisplay; }
public LimitDisplayModel CheckSCE(SessionInfo sessioninfo, DA_TRN trn, string strExcludeID) { LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); Guid guExcludeID = Guid.Empty; List<DA_TRN_CASHFLOW> deal_conts = (from f in trn.DA_TRN_FLOW where f.FLOW_AMOUNT_THB > 0 select new DA_TRN_CASHFLOW { FLOW_DATE = f.FLOW_DATE.Value, FLOW_AMOUNT_THB = f.FLOW_AMOUNT_THB.Value }).ToList(); //Find original deal for exclude it from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID)) guExcludeID = Guid.Parse(strExcludeID.Replace("\"", "")); List<LimitCheckModel> ori_conts = _limitCheckBusiness.CheckAllSET(sessioninfo.Process.CurrentDate, trn, guExcludeID, Guid.Empty); limitDisplay.LimitDisplayObject = GenerateSETDisplay(deal_conts, ori_conts, sessioninfo.SETOverwrite , ref limitDisplay); if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) trn.OVER_SETTL_AMOUNT = limitDisplay.OverAmount; return limitDisplay; }
public LimitDisplayModel CheckFXSwapSCE(SessionInfo sessioninfo, DA_TRN trn1, DA_TRN trn2, string strExcludeID) { LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); DA_TRN oldtrn1 = null; DA_TRN oldtrn2 = null; Guid guExcludeID1 = Guid.Empty; Guid guExcludeID2 = Guid.Empty; List<DA_TRN_CASHFLOW> deal_conts = ((from f in trn1.DA_TRN_FLOW where f.FLOW_AMOUNT_THB > 0 select new DA_TRN_CASHFLOW { FLOW_DATE = f.FLOW_DATE.Value, FLOW_AMOUNT_THB = f.FLOW_AMOUNT_THB.Value }).Union( (from f in trn2.DA_TRN_FLOW where f.FLOW_AMOUNT_THB > 0 select new DA_TRN_CASHFLOW { FLOW_DATE = f.FLOW_DATE.Value, FLOW_AMOUNT_THB = f.FLOW_AMOUNT_THB.Value }) )).ToList(); //Find original deals for exclude them from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID1)) { guExcludeID1 = Guid.Parse(strExcludeID.Replace("\"", "")); oldtrn1 = GetByID(guExcludeID1); oldtrn2 = GetDealByProcessDate(sessioninfo.Process.CurrentDate).FirstOrDefault(p => p.INT_DEAL_NO == oldtrn1.INT_DEAL_NO && p.VERSION == oldtrn1.VERSION && p.ID != oldtrn1.ID); if (oldtrn2 == null || oldtrn1 == null) throw this.CreateException(new Exception(), "Cannot find original deals."); guExcludeID1 = oldtrn1.ID; guExcludeID2 = oldtrn2.ID; } List<LimitCheckModel> ori_conts = _limitCheckBusiness.CheckAllSET(sessioninfo.Process.CurrentDate, trn1, guExcludeID1, guExcludeID2); limitDisplay.LimitDisplayObject = GenerateSETDisplay(deal_conts, ori_conts, sessioninfo.SETOverwrite, ref limitDisplay); if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) { trn1.OVER_SETTL_AMOUNT = limitDisplay.OverAmount; trn2.OVER_SETTL_AMOUNT = limitDisplay.OverAmount; } return limitDisplay; }
private void SetLimitDisplayStatus(LimitCheckModel objLimit, bool blnOverwrite, ref LimitDisplayModel objLimitDisplay) { if (objLimit.STATUS == eLimitStatusCode.EXCEED.ToString() || objLimit.STATUS == eLimitStatusCode.EXPIRED.ToString()) { if ((objLimit.UTILIZATION - objLimit.AMOUNT) > objLimitDisplay.OverAmount) { objLimitDisplay.OverAmount = objLimit.UTILIZATION - objLimit.AMOUNT; } if (!blnOverwrite || objLimit.TEMP_AMOUNT != 0) objLimitDisplay.LimitCheckStatus = eLimitCheckStatus.NOTALLOW; else objLimitDisplay.LimitCheckStatus = eLimitCheckStatus.NEEDAPPROVE; } }
private List<LimitCheckModel> GenerateSETDisplay(List<DA_TRN_CASHFLOW> deal_conts, List<LimitCheckModel> ori_conts, bool blnOverwrite, ref LimitDisplayModel limitDisplay) { List<LimitCheckModel> tempList = null; List<LimitCheckModel> limits = new List<LimitCheckModel>(); LimitCheckModel limit = null; foreach (var deal_cont in deal_conts) { tempList = ori_conts.Where(f => f.FLOW_DATE == deal_cont.FLOW_DATE).ToList(); foreach (LimitCheckModel item in tempList) { limit = new LimitCheckModel(); limit.ORIGINAL_KK_CONTRIBUTE = item.ORIGINAL_KK_CONTRIBUTE; limit.SNAME = item.SNAME; limit.LIMIT_LABEL = item.LIMIT_LABEL; limit.FLAG_CONTROL = item.FLAG_CONTROL; limit.GEN_AMOUNT = item.GEN_AMOUNT; limit.TEMP_AMOUNT = item.TEMP_AMOUNT; //limit.AMOUNT = item.AMOUNT; limit.FLOW_DATE = deal_cont.FLOW_DATE.Value; limit.EXPIRE_DATE = item.EXPIRE_DATE; limit.PROCESSING_DATE = item.PROCESSING_DATE; limit.DEAL_CONTRIBUTION = deal_cont.FLOW_AMOUNT_THB.Value; SetLimitDisplayStatus(limit, blnOverwrite, ref limitDisplay); limits.Add(limit); } //Case that original exposure has no match date with deal exposure if (tempList.Count == 0) { //Get limit info that is not equal to deal flow date var limitinfos = ori_conts.GroupBy(p => p.SNAME) .Select(g => new { g, count = g.Count() }) .SelectMany(t => t.g.Select(b => b) .Zip(Enumerable.Range(1, t.count), (j, i) => new { j.SNAME, j.LIMIT_LABEL, j.FLAG_CONTROL, j.GEN_AMOUNT, j.TEMP_AMOUNT, j.EXPIRE_DATE, j.PROCESSING_DATE, rn = i })) .Where(w => w.rn == 1).ToList(); if (limitinfos.Count() > 0) { foreach (var check in limitinfos) { limit = new LimitCheckModel(); limit.ORIGINAL_KK_CONTRIBUTE = 0; limit.SNAME = check.SNAME; limit.LIMIT_LABEL = check.LIMIT_LABEL; limit.FLAG_CONTROL = check.FLAG_CONTROL; limit.GEN_AMOUNT = check.GEN_AMOUNT; limit.TEMP_AMOUNT = check.TEMP_AMOUNT; //limit.AMOUNT = check.AMOUNT; limit.FLOW_DATE = deal_cont.FLOW_DATE.Value; limit.EXPIRE_DATE = check.EXPIRE_DATE; limit.PROCESSING_DATE = check.PROCESSING_DATE; limit.DEAL_CONTRIBUTION = deal_cont.FLOW_AMOUNT_THB.Value; SetLimitDisplayStatus(limit, blnOverwrite, ref limitDisplay); limits.Add(limit); } } } } return limits.OrderBy(p => p.SNAME).ThenBy(p => p.FLOW_DATE).ToList() ; }
private List<LimitCheckModel> GenerateCountryLimitDisplay(List<CountryLimitModel> deal_conts, List<LimitCheckModel> ori_conts, DA_TRN trn1, DA_TRN trn2, bool blnOverwrite, ref LimitDisplayModel limitDisplay) { CountryLimitModel tempCountry = null; List<LimitCheckModel> limits = new List<LimitCheckModel>(); decimal decExp = trn1.KK_CONTRIBUTE.Value + (trn2 != null ? trn2.KK_CONTRIBUTE.Value : 0); foreach (var ori_cont in ori_conts) { tempCountry = deal_conts.FirstOrDefault(f => f.EXPOSURE_DATE == ori_cont.FLOW_DATE); ori_cont.DEAL_CONTRIBUTION = tempCountry != null ? tempCountry.EXPOSURE.Value : decExp; SetLimitDisplayStatus(ori_cont, blnOverwrite, ref limitDisplay); if ((ori_cont.FLOW_DATE == trn1.TRADE_DATE || ori_cont.FLOW_DATE == trn1.MATURITY_DATE) || (trn2 != null && (ori_cont.FLOW_DATE == trn2.TRADE_DATE || ori_cont.FLOW_DATE == trn2.MATURITY_DATE)) || (ori_cont.STATUS == eLimitStatusCode.EXCEED.ToString() || ori_cont.STATUS == eLimitStatusCode.EXPIRED.ToString())) { limits.Add(ori_cont); } } return limits; }
public LimitDisplayModel CheckFXSwapPCE(SessionInfo sessioninfo, DA_TRN trn1, DA_TRN trn2, string strExcludeID) { StaticDataBusiness _staticDataBusiness = new StaticDataBusiness(); LimitCheckBusiness _limitCheckBusiness = new LimitCheckBusiness(); LimitDisplayModel limitDisplay = new LimitDisplayModel(); DA_TRN oldtrn1 = null; DA_TRN oldtrn2 = null; Guid guExcludeID1 = Guid.Empty; Guid guExcludeID2 = Guid.Empty; //Exposure include far leg only -> set near leg to 0 trn1.KK_PCCF = 0; trn2.KK_PCCF = _staticDataBusiness.GetPCCF(sessioninfo, trn2); //Find original deals for exclude them from limit calculation if (strExcludeID != null && Guid.TryParse(strExcludeID.Replace("\"", ""), out guExcludeID1)) { guExcludeID1 = Guid.Parse(strExcludeID.Replace("\"", "")); oldtrn1 = GetByID(guExcludeID1); oldtrn2 = GetDealByProcessDate(sessioninfo.Process.CurrentDate).FirstOrDefault(p => p.INT_DEAL_NO == oldtrn1.INT_DEAL_NO && p.VERSION == oldtrn1.VERSION && p.ID != oldtrn1.ID); if (oldtrn2 == null || oldtrn1 == null) throw this.CreateException(new Exception(), "Cannot find original deals."); guExcludeID1 = oldtrn1.ID; guExcludeID2 = oldtrn2.ID; } if (trn1.KK_PCCF != null && trn2.KK_PCCF != null) { trn1.KK_CONTRIBUTE = 0; trn2.KK_CONTRIBUTE = Math.Ceiling(trn2.NOTIONAL_THB.Value * trn2.KK_PCCF.Value / 100); List<LimitCheckModel> limits = _limitCheckBusiness.CheckAllPCE(sessioninfo.Process.CurrentDate, trn1, guExcludeID1, guExcludeID2); foreach (LimitCheckModel limit in limits) { limit.DEAL_CONTRIBUTION = trn1.KK_CONTRIBUTE.Value + trn2.KK_CONTRIBUTE.Value; SetLimitDisplayStatus(limit, sessioninfo.PCEOverwrite, ref limitDisplay); } if (limitDisplay.LimitCheckStatus == eLimitCheckStatus.NEEDAPPROVE) { trn1.OVER_AMOUNT = limitDisplay.OverAmount; trn2.OVER_AMOUNT = limitDisplay.OverAmount; } limitDisplay.LimitDisplayObject = limits; } else { limitDisplay.LimitCheckStatus = eLimitCheckStatus.ERROR; limitDisplay.Message = "This deal breach allowed tenor."; } return limitDisplay; }