예제 #1
0
        public List <LimitCheckModel> CheckAllSET(DateTime ProcessingDate, DA_TRN trn, Guid ExcludeID1, Guid ExcludeID2)
        {
            CounterpartyBusiness _counterpartyBusiness = new CounterpartyBusiness();

            List <LimitCheckModel> results = GetSCEByCriteria(ProcessingDate, trn.CTPY_ID, trn.PRODUCT_ID.Value, "", ExcludeID1, ExcludeID2);

            //Get group exposure
            MA_COUTERPARTY ctpy = _counterpartyBusiness.GetCounterpartyAll().FirstOrDefault(p => p.ID == trn.CTPY_ID);

            if (ctpy != null && ctpy.GROUP_CTPY_ID != null)
            {
                var group = GetSCEByCriteria(ProcessingDate, ctpy.GROUP_CTPY_ID.Value, trn.PRODUCT_ID.Value, "", ExcludeID1, ExcludeID2);
                results = results.Union(group).ToList();
            }

            //Get temp limit
            //Look for temp limit when all conditions meet
            // 1. Transaction maturity date <= Temp limit maturity date
            foreach (LimitCheckModel result in results)
            {
                MA_TEMP_CTPY_LIMIT temp_limit = _counterpartyBusiness.GetActiveTempByID(ProcessingDate, trn.MATURITY_DATE.Value, result.CTPY_LIMIT_ID);

                if (temp_limit != null)
                {
                    result.TEMP_AMOUNT = temp_limit.AMOUNT;
                }
                //result.AMOUNT = result.AMOUNT + temp_limit.AMOUNT;
            }

            return(results);
        }
예제 #2
0
        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);
        }