public List <LimitCheckModel> CheckAllCountry(DateTime ProcessingDate, DA_TRN trn, Guid ExcludeID1, Guid ExcludeID2) { CounterpartyBusiness _counterpartyBusiness = new CounterpartyBusiness(); CountryBusiness _countryBusiness = new CountryBusiness(); List <LimitCheckModel> results = new List <LimitCheckModel>(); LimitCheckModel result; LimitCheckModel temp = new LimitCheckModel(); LimitCheckModel pce = new LimitCheckModel(); MA_COUTERPARTY ctpy = _counterpartyBusiness.GetCounterpartyAll().FirstOrDefault(p => p.ID == trn.CTPY_ID); List <LimitCheckModel> sets = GetCountrySETByCriteria(ProcessingDate, ctpy.COUNTRY_ID, "", ExcludeID1, ExcludeID2); List <LimitCheckModel> pces = GetCountryPCEByCriteria(ProcessingDate, ctpy.COUNTRY_ID, "", ExcludeID1, ExcludeID2); if (pces.Count != 1) { throw new Exception("Invalid country limit data. Please contact administrator"); } else { pce = pces.FirstOrDefault(); } MA_COUNTRY_LIMIT temp_limit = _countryBusiness.GetActiveTempByCountryID(ProcessingDate, trn.MATURITY_DATE.Value, ctpy.COUNTRY_ID); DateTime dateStart = trn.TRADE_DATE.Value; DateTime dateEnd = trn.FLAG_SETTLE.HasValue && trn.FLAG_SETTLE.Value ? trn.DA_TRN_FLOW.Max(p => p.FLOW_DATE).Value : trn.TRADE_DATE.Value; while (dateStart <= dateEnd) { result = new LimitCheckModel(); temp = sets.FirstOrDefault(p => p.FLOW_DATE == dateStart); result.COUNTRY_LABEL = pce.COUNTRY_LABEL; result.COUNTRY_ID = pce.COUNTRY_ID; result.FLAG_CONTROL = pce.FLAG_CONTROL; result.GEN_AMOUNT = pce.GEN_AMOUNT; result.TEMP_AMOUNT = temp_limit != null ? temp_limit.AMOUNT : 0; //result.AMOUNT = pce.AMOUNT + (temp_limit != null ? temp_limit.AMOUNT : 0); result.PROCESSING_DATE = pce.PROCESSING_DATE; result.EXPIRE_DATE = pce.EXPIRE_DATE; result.FLOW_DATE = dateStart; result.ORIGINAL_KK_CONTRIBUTE = pce.ORIGINAL_KK_CONTRIBUTE; if (temp != null) { result.ORIGINAL_KK_CONTRIBUTE = result.ORIGINAL_KK_CONTRIBUTE + temp.ORIGINAL_KK_CONTRIBUTE; } results.Add(result); //if (dateStart.DayOfWeek == DayOfWeek.Friday) // dateStart = dateStart.AddDays(3); //else dateStart = dateStart.AddDays(1); } return(results); }
public List<LimitCheckModel> CheckAllCountry(DateTime ProcessingDate, DA_TRN trn, Guid ExcludeID1, Guid ExcludeID2) { CounterpartyBusiness _counterpartyBusiness = new CounterpartyBusiness(); CountryBusiness _countryBusiness = new CountryBusiness(); List<LimitCheckModel> results = new List<LimitCheckModel>(); LimitCheckModel result; LimitCheckModel temp = new LimitCheckModel(); LimitCheckModel pce = new LimitCheckModel(); MA_COUTERPARTY ctpy = _counterpartyBusiness.GetCounterpartyAll().FirstOrDefault(p => p.ID == trn.CTPY_ID); List<LimitCheckModel> sets = GetCountrySETByCriteria(ProcessingDate, ctpy.COUNTRY_ID, "", ExcludeID1, ExcludeID2); List<LimitCheckModel> pces = GetCountryPCEByCriteria(ProcessingDate, ctpy.COUNTRY_ID, "", ExcludeID1, ExcludeID2); if (pces.Count != 1) throw new Exception("Invalid country limit data. Please contact administrator"); else pce = pces.FirstOrDefault(); MA_COUNTRY_LIMIT temp_limit = _countryBusiness.GetActiveTempByCountryID(ProcessingDate, trn.MATURITY_DATE.Value, ctpy.COUNTRY_ID); DateTime dateStart = trn.TRADE_DATE.Value; DateTime dateEnd = trn.FLAG_SETTLE.HasValue && trn.FLAG_SETTLE.Value ? trn.DA_TRN_FLOW.Max(p => p.FLOW_DATE).Value : trn.TRADE_DATE.Value; while (dateStart <= dateEnd) { result = new LimitCheckModel(); temp = sets.FirstOrDefault(p => p.FLOW_DATE == dateStart); result.COUNTRY_LABEL = pce.COUNTRY_LABEL; result.COUNTRY_ID = pce.COUNTRY_ID; result.FLAG_CONTROL = pce.FLAG_CONTROL; result.GEN_AMOUNT = pce.GEN_AMOUNT; result.TEMP_AMOUNT = temp_limit != null ? temp_limit.AMOUNT : 0; //result.AMOUNT = pce.AMOUNT + (temp_limit != null ? temp_limit.AMOUNT : 0); result.PROCESSING_DATE = pce.PROCESSING_DATE; result.EXPIRE_DATE = pce.EXPIRE_DATE; result.FLOW_DATE = dateStart; result.ORIGINAL_KK_CONTRIBUTE = pce.ORIGINAL_KK_CONTRIBUTE; if (temp != null) result.ORIGINAL_KK_CONTRIBUTE = result.ORIGINAL_KK_CONTRIBUTE + temp.ORIGINAL_KK_CONTRIBUTE; results.Add(result); //if (dateStart.DayOfWeek == DayOfWeek.Friday) // dateStart = dateStart.AddDays(3); //else dateStart = dateStart.AddDays(1); } return results; }
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() ; }