Пример #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 static object Update(SessionInfo sessioninfo, MA_COUTERPARTY record)
 {
     try
     {
         if (record.ID == record.GROUP_CTPY_ID)
         {
             throw new Exception("Group can't same as Counterparty.");
         }
         CounterpartyBusiness _counterpartyBusiness = new CounterpartyBusiness();
         record.SNAME              = record.SNAME.ToUpper();
         record.TBMA_NAME          = record.TBMA_NAME.ToUpper();
         record.FNAME              = record.FNAME.ToUpper();
         record.BUSINESS           = record.BUSINESS.ToUpper();
         record.ISACTIVE           = record.ISACTIVE == null || !record.ISACTIVE.Value ? false : true;
         record.LOG.MODIFYBYUSERID = sessioninfo.CurrentUserId;
         record.LOG.MODIFYDATE     = DateTime.Now;
         record.GROUP_CTPY_ID      = record.GROUP_CTPY_ID == Guid.Empty ? null : record.GROUP_CTPY_ID;
         var addedRecord = _counterpartyBusiness.Update(sessioninfo, record);
         return(new { Result = "OK", Record = addedRecord });
     }
     catch (Exception ex)
     {
         return(new { Result = "ERROR", Message = ex.Message });
     }
 }
Пример #3
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);
        }
Пример #4
0
        public void CreateTest()
        {
            CounterpartyBusiness target       = new CounterpartyBusiness(); // TODO: Initialize to an appropriate value
            SessionInfo          sessioninfo  = null;                       // TODO: Initialize to an appropriate value
            MA_COUTERPARTY       counterparty = null;                       // TODO: Initialize to an appropriate value
            MA_COUTERPARTY       expected     = null;                       // TODO: Initialize to an appropriate value
            MA_COUTERPARTY       actual;

            actual = target.Create(sessioninfo, counterparty);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("Verify the correctness of this test method.");
        }
Пример #5
0
        public static object Create(SessionInfo sessioninfo, MA_COUTERPARTY record)
        {
            try
            {
                CounterpartyBusiness _counterpartyBusiness = new CounterpartyBusiness();
                LookupBusiness       _lookupBusiness       = new LookupBusiness();
                MA_CTPY_LIMIT        cplimit;

                record.ID                 = Guid.NewGuid();
                record.SNAME              = record.SNAME.ToUpper();
                record.TBMA_NAME          = record.TBMA_NAME.ToUpper();
                record.FNAME              = record.FNAME.ToUpper();
                record.BUSINESS           = record.BUSINESS.ToUpper();
                record.ISACTIVE           = record.ISACTIVE == null || !record.ISACTIVE.Value ? false : true;
                record.LOG.INSERTDATE     = DateTime.Now;
                record.LOG.INSERTBYUSERID = sessioninfo.CurrentUserId;
                record.GROUP_CTPY_ID      = record.GROUP_CTPY_ID == Guid.Empty ? null : record.GROUP_CTPY_ID;

                //Prepare Counterparty-Limit data
                List <MA_LIMIT> limits = _lookupBusiness.GetLimitAll();

                foreach (MA_LIMIT limit in limits)
                {
                    cplimit = new MA_CTPY_LIMIT();

                    cplimit.ID                 = Guid.NewGuid();
                    cplimit.CTPY_ID            = record.ID;
                    cplimit.LIMIT_ID           = limit.ID;
                    cplimit.FLAG_CONTROL       = true;
                    cplimit.AMOUNT             = 0;
                    cplimit.EXPIRE_DATE        = sessioninfo.Process.CurrentDate;
                    cplimit.LOG.INSERTDATE     = DateTime.Now;
                    cplimit.LOG.INSERTBYUSERID = sessioninfo.CurrentUserId;

                    record.MA_CTPY_LIMIT.Add(cplimit);
                }

                var addedRecord = _counterpartyBusiness.Create(sessioninfo, record);

                addedRecord.MA_CTPY_LIMIT.Clear();

                return(new { Result = "OK", Record = addedRecord });
            }
            catch (Exception ex)
            {
                return(new { Result = "ERROR", Message = ex.Message });
            }
        }
Пример #6
0
        public MA_COUTERPARTY Create(SessionInfo sessioninfo, MA_COUTERPARTY counterparty)
        {
            using (EFUnitOfWork unitOfWork = new EFUnitOfWork())
            {
                var checkDuplicate1 = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.USERCODE == counterparty.USERCODE);
                if (checkDuplicate1 != null)
                {
                    throw this.CreateException(new Exception(), "OPICS ID is duplicated");
                }
                var checkDuplicate2 = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.SNAME == counterparty.SNAME);
                if (checkDuplicate2 != null)
                {
                    throw this.CreateException(new Exception(), "Short name is duplicated");
                }
                LogBusiness logBusiness = new LogBusiness();
                unitOfWork.DA_LOGGINGRepository.Add(logBusiness.CreateLogging(sessioninfo, counterparty.ID, LogEvent.COUNTERPARTY_AUDIT.ToString(), LookupFactorTables.MA_COUTERPARTY, "Counterparty", new { }));
                unitOfWork.MA_COUTERPARTYRepository.Add(counterparty);
                unitOfWork.Commit();
            }

            return(counterparty);
        }
Пример #7
0
        public MA_PCCF ValidatePCCFConfig(SessionInfo sessioninfo, DA_TRN record)
        {
            MA_PCCF val = null;
            bool    blnResult;

            //enter conditions
            LoggingHelper.Debug("Begin validate PCCF from config");
            using (EFUnitOfWork unitOfWork = new EFUnitOfWork())
            {
                var props   = record.GetType().GetProperties();
                var configs = unitOfWork.MA_PCCF_CONFIGRepository.GetAll()
                              .Where(p => p.PRODUCT_ID.Equals(record.PRODUCT_ID))
                              .OrderBy(p => p.PRIORITY);

                //bool isBond = string.Compare(unitOfWork.MA_PRODUCTRepository.GetById(record.PRODUCT_ID.Value).LABEL, ProductCode.BOND.ToString(), true) == 0;

                if (configs != null)
                {
                    List <bool> ismatchs = new List <bool>();
                    object      obj;
                    foreach (MA_PCCF_CONFIG p in configs.ToList())
                    {
                        ismatchs.Clear();
                        blnResult = false;

                        //List<MA_CONFIG_ATTRIBUTE> atts = unitOfWork.MA_CONFIG_ATTRIBUTERepository.All().Where(t => t.PCCF_CONFIG_ID == p.ID && t.ISACTIVE == true).ToList() ;

                        foreach (MA_CONFIG_ATTRIBUTE ca in p.MA_CONFIG_ATTRIBUTE.Where(t => t.ISACTIVE == true).ToList())
                        {
                            //Fix for Tables
                            switch (ca.TABLE)
                            {
                            case "DA_TRN":
                                var sel = props.FirstOrDefault(t => t.Name.Equals(ca.ATTRIBUTE));
                                if (sel != null)
                                {
                                    if (sel.GetValue(record, null).GetType() == typeof(Guid))
                                    {
                                        switch (ca.ATTRIBUTE)
                                        {
                                        //Fix for fields
                                        case "INSTRUMENT_ID":
                                            obj = new MA_INSTRUMENT();
                                            obj = unitOfWork.MA_INSTRUMENTRepository.GetByIDWithOutInclude(new Guid(sel.GetValue(record, null).ToString()));

                                            blnResult = ((MA_INSTRUMENT)obj).LABEL.Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase);
                                            //ismatchs.Add(blnResult);

                                            break;

                                        default:
                                            break;
                                        }
                                    }
                                    else if (sel.GetValue(record, null).GetType() == typeof(Boolean))
                                    {
                                        blnResult = sel.GetValue(record, null).Equals(ca.VALUE == "0" ? false : true);    // ismatchs.Add(fsel.GetValue(record.FIRST, null).Equals(ca.VALUE=="0" ? false : true));
                                    }
                                    else
                                    {
                                        blnResult = sel.GetValue(record, null).ToString().Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase);
                                        //ismatchs.Add(blnResult);
                                    }
                                }
                                break;

                            case "BOND_MARKET":
                                MA_INSTRUMENT insMkt = unitOfWork.MA_INSTRUMENTRepository.GetByIDWithInsMarket(record.INSTRUMENT_ID.Value);

                                if (insMkt.MA_BOND_MARKET != null)
                                {
                                    blnResult = insMkt.MA_BOND_MARKET.LABEL.Equals(ca.VALUE);
                                    //ismatchs.Add(blnResult);
                                }
                                //else
                                //ismatchs.Add(false);

                                break;

                            case "FIRST":
                                var fsel = record.FIRST.GetType().GetProperties().FirstOrDefault(f => f.Name.Equals(ca.ATTRIBUTE));
                                if (fsel != null)
                                {
                                    if (fsel.GetValue(record.FIRST, null) != null)
                                    {
                                        if (fsel.GetValue(record.FIRST, null).GetType() == typeof(Guid))
                                        {
                                            switch (ca.ATTRIBUTE)
                                            {
                                            //Fix for fields
                                            case "CCY_ID":
                                                obj = new MA_CURRENCY();
                                                obj = unitOfWork.MA_CURRENCYRepository.GetByID(new Guid(fsel.GetValue(record.FIRST, null).ToString()));

                                                blnResult = ((MA_CURRENCY)obj).LABEL.Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase);
                                                //ismatchs.Add();

                                                break;

                                            default:
                                                break;
                                            }
                                        }
                                        else if (fsel.GetValue(record.FIRST, null).GetType() == typeof(Boolean))
                                        {
                                            blnResult = fsel.GetValue(record.FIRST, null).Equals(ca.VALUE == "0" ? false : true);    // ismatchs.Add(fsel.GetValue(record.FIRST, null).Equals(ca.VALUE=="0" ? false : true));
                                        }
                                        else
                                        {
                                            blnResult = fsel.GetValue(record.FIRST, null).ToString().Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase);     //ismatchs.Add(fsel.GetValue(record.FIRST, null).ToString().Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase));
                                        }
                                    }
                                    //else ismatchs.Add(false);
                                }
                                break;

                            case "SECOND":
                                //var secprop = props.FirstOrDefault(f => f.Name.Equals("SECOND"));
                                var ssel = record.SECOND.GetType().GetProperties().FirstOrDefault(f => f.Name.Equals(ca.ATTRIBUTE));
                                if (ssel != null)
                                {
                                    if (ssel.GetValue(record.SECOND, null) != null)
                                    {
                                        if (ssel.GetValue(record.SECOND, null).GetType() == typeof(Guid))
                                        {
                                            switch (ca.ATTRIBUTE)
                                            {
                                            //Fix for fields
                                            case "CCY_ID":
                                                obj = new MA_CURRENCY();
                                                obj = unitOfWork.MA_CURRENCYRepository.GetByID(new Guid(ssel.GetValue(record.SECOND, null).ToString()));

                                                blnResult = ((MA_CURRENCY)obj).LABEL.Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase);
                                                //ismatchs.Add(((MA_CURRENCY)obj).LABEL.Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase));

                                                break;

                                            default:
                                                break;
                                            }
                                        }
                                        else if (ssel.GetValue(record.SECOND, null).GetType() == typeof(Boolean))
                                        {
                                            blnResult = ssel.GetValue(record.SECOND, null).Equals(ca.VALUE == "0" ? false : true);    // ismatchs.Add(ssel.GetValue(record.SECOND, null).Equals(ca.VALUE == "0" ? false : true));
                                        }
                                        else
                                        {
                                            blnResult = ssel.GetValue(record.SECOND, null).ToString().Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase);    // ismatchs.Add(ssel.GetValue(record.SECOND, null).ToString().Equals(ca.VALUE, StringComparison.CurrentCultureIgnoreCase));
                                        }
                                    }
                                    //else ismatchs.Add(false);
                                }
                                break;

                            case "COUNTERPARTY":
                                MA_COUTERPARTY ctpy = unitOfWork.MA_COUTERPARTYRepository.GetAll().FirstOrDefault(z => z.ID == record.CTPY_ID);

                                switch (ca.ATTRIBUTE)
                                {
                                case "SNAME":
                                    blnResult = ctpy.SNAME.ToUpper() == ca.VALUE.ToUpper();

                                    break;

                                case "CSA_TYPE":

                                    MA_CSA_AGREEMENT csa = unitOfWork.MA_CSA_AGREEMENTRepository.GetAll().FirstOrDefault(y => y.ID == record.CTPY_ID);

                                    if (csa != null &&
                                        csa.MA_CSA_TYPE.LABEL.ToUpper() == ca.VALUE.ToUpper() &&
                                        csa.MA_CSA_PRODUCT.FirstOrDefault(y => y.PRODUCT_ID == record.PRODUCT_ID) != null)
                                    {
                                        blnResult = true;
                                    }
                                    //else if (csa == null && ca.VALUE == "")
                                    //    blnResult = true;
                                    else
                                    {
                                        blnResult = false;
                                    }

                                    break;

                                default:
                                    break;
                                }

                                break;
                            }

                            ismatchs.Add(blnResult);

                            //Check result -> if false then go to next config
                            if (!blnResult)
                            {
                                break;
                            }
                        }

                        if (ismatchs.Where(m => m.Equals(false)).Count() == 0)
                        {
                            val = unitOfWork.MA_PCCFRepository.GetByID(p.PCCF_ID);
                            LoggingHelper.Debug("PCCF: " + val.LABEL);
                            break;
                        }
                        else
                        {
                            continue;
                        }
                    }
                }
                else
                {
                    val = null;
                }
            }
            LoggingHelper.Debug("End validate PCCF from config");
            return(val);
        }
Пример #8
0
        public MA_COUTERPARTY Update(SessionInfo sessioninfo, MA_COUTERPARTY counterparty)
        {
            using (EFUnitOfWork unitOfWork = new EFUnitOfWork())
            {
                var checkDuplicate1 = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.USERCODE == counterparty.USERCODE && p.ID != counterparty.ID);
                if (checkDuplicate1 != null)
                {
                    throw this.CreateException(new Exception(), "OPICS ID is duplicated");
                }
                var checkDuplicate2 = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.SNAME == counterparty.SNAME && p.ID != counterparty.ID);
                if (checkDuplicate2 != null)
                {
                    throw this.CreateException(new Exception(), "Short name is duplicated");
                }

                var foundData = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.ID == counterparty.ID);
                if (foundData == null)
                {
                    throw this.CreateException(new Exception(), "Data not found!");
                }
                else
                {
                    LogBusiness logBusiness     = new LogBusiness();
                    string      strOldGroupName = "";
                    string      strNewGroupName = "";

                    if (foundData.GROUP_CTPY_ID != null)
                    {
                        var oldGroup = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.GROUP_CTPY_ID == foundData.GROUP_CTPY_ID);
                        strOldGroupName = oldGroup != null ? oldGroup.SNAME : "";
                    }

                    if (counterparty.GROUP_CTPY_ID != null)
                    {
                        var newGroup = unitOfWork.MA_COUTERPARTYRepository.All().FirstOrDefault(p => p.GROUP_CTPY_ID == counterparty.GROUP_CTPY_ID);
                        strNewGroupName = newGroup != null ? newGroup.SNAME : "";
                    }

                    var oldRecord = new { USERCODE    = foundData.USERCODE
                                          , BUSINESS  = foundData.BUSINESS
                                          , FNAME     = foundData.FNAME
                                          , SNAME     = foundData.SNAME
                                          , TBMA_NAME = foundData.TBMA_NAME
                                          , GROUP     = strOldGroupName
                                          , OUTLOOK   = foundData.OUTLOOK
                                          , RATE      = foundData.RATE
                                          , ISACTIVE  = foundData.ISACTIVE };
                    var newRecord = new { USERCODE    = counterparty.USERCODE
                                          , BUSINESS  = counterparty.BUSINESS
                                          , FNAME     = counterparty.FNAME
                                          , SNAME     = counterparty.SNAME
                                          , TBMA_NAME = counterparty.TBMA_NAME
                                          , GROUP     = strNewGroupName
                                          , OUTLOOK   = counterparty.OUTLOOK
                                          , RATE      = counterparty.RATE
                                          , ISACTIVE  = counterparty.ISACTIVE };

                    var log = logBusiness.UpdateLogging(sessioninfo, foundData.ID, LogEvent.COUNTERPARTY_AUDIT.ToString(), LookupFactorTables.MA_COUTERPARTY, oldRecord, newRecord);
                    if (log != null)
                    {
                        unitOfWork.DA_LOGGINGRepository.Add(log);
                    }
                    foundData.ID                 = counterparty.ID;
                    foundData.USERCODE           = counterparty.USERCODE;
                    foundData.ISACTIVE           = counterparty.ISACTIVE;
                    foundData.LOG.MODIFYBYUSERID = sessioninfo.CurrentUserId;
                    foundData.LOG.MODIFYDATE     = DateTime.Now;
                    foundData.BUSINESS           = counterparty.BUSINESS;
                    foundData.FNAME              = counterparty.FNAME;
                    foundData.SNAME              = counterparty.SNAME;
                    foundData.OUTLOOK            = counterparty.OUTLOOK;
                    foundData.RATE               = counterparty.RATE;
                    foundData.TBMA_NAME          = counterparty.TBMA_NAME;
                    foundData.GROUP_CTPY_ID      = counterparty.GROUP_CTPY_ID;
                    foundData.COUNTRY_ID         = counterparty.COUNTRY_ID;

                    unitOfWork.Commit();
                }
            }

            return(counterparty);
        }
Пример #9
0
 public static object Update(MA_COUTERPARTY record)
 {
     return(CounterpartyUIP.Update(SessionInfo, record));
 }