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;
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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() ;
        }