コード例 #1
0
        private static BankStmtCashFlowForecast ReconcileForecast(Session session, BankStmt bankStmtObj, CashFlow cashFlowObj, bool commit)
        {
            // use the same session for both BankStmt and CashFlow object
            BankStmt bankStmt = bankStmtObj;

            if (session != bankStmtObj.Session)
            {
                bankStmt = session.GetObjectByKey <BankStmt>(session.GetKeyValue(bankStmtObj));
            }
            CashFlow cashFlow = cashFlowObj;

            if (session != cashFlowObj.Session)
            {
                cashFlow = session.GetObjectByKey <CashFlow>(session.GetKeyValue(cashFlowObj));
            }

            // associate the bank stmt object with the cash flow forecast object using a link object (BankStmtCashFlowForecast)
            // if link object does not exist, then create it
            var bsCff = session.FindObject <BankStmtCashFlowForecast>(CriteriaOperator.Parse(
                                                                          "BankStmt = ?", bankStmt));

            if (bsCff == null)
            {
                bsCff          = new BankStmtCashFlowForecast(session);
                bsCff.BankStmt = bankStmt;
            }
            bsCff.CashFlow = cashFlow;
            if (commit)
            {
                session.CommitTransaction();
            }
            return(bsCff);
        }
コード例 #2
0
        public void AutoreconcileTransfers(System.Collections.IEnumerable bankStmts, bool commit)
        {
            // get session from first BankStmt. This assumes the same sessions are being used.
            Session session = null;

            foreach (BankStmt bs in bankStmts)
            {
                session = bs.Session;
                break;
            }
            var snapshot = SetOfBooks.GetInstance(session).CurrentCashFlowSnapshot;

            if (session == null)
            {
                return;
            }
            var transferActivity = session.GetObjectByKey <Activity>(
                SetOfBooks.CachedInstance.ForexSettleActivity.Oid);

            foreach (BankStmt bsi in bankStmts)
            {
                //Debug.Print(string.Format("Autoreconcile Activity {0} with {1}", bsi.Activity.Name, transferActivity.Name));
                if (bsi.Activity != null && bsi.Activity.Oid == transferActivity.Oid)
                {
                    // reconcile transfer
                    var cf = session.FindObject <CashFlow>(CriteriaOperator.Parse(
                                                               "TranDate = ? And Activity = ? And AccountCcyAmt = ? And Snapshot = ?",
                                                               bsi.TranDate, transferActivity, bsi.TranAmount, snapshot));
                    if (cf == null)
                    {
                        break;
                    }

                    BankStmtCashFlowForecast bsCff = ReconcileForecast(session, bsi, cf);
                    ChangeBankStmtToCashFlowForecast(bsCff.BankStmt, bsCff.CashFlow);
                }
                else
                {
                    // reconcile anything else with matching date and amount
                    var cf = session.FindObject <CashFlow>(CriteriaOperator.Parse(
                                                               "TranDate = ? And AccountCcyAmt = ? And Snapshot = ?",
                                                               bsi.TranDate, bsi.TranAmount, snapshot));
                    if (cf == null)
                    {
                        break;
                    }

                    BankStmtCashFlowForecast bsCff = ReconcileForecast(session, bsi, cf);
                    ChangeBankStmtToCashFlowForecast(bsCff.BankStmt, bsCff.CashFlow);
                }
            }
            if (commit)
            {
                session.CommitTransaction();
            }
        }
コード例 #3
0
        public BankStmtCashFlowForecast ReconcileItem(BankStmt bankStmt, CashFlow cashFlow)
        {
            // TODO: can selected objects be cast into a List?
            // Record the Cash Flow Forecast that was reconciled with the Bank Stmt
            BankStmtCashFlowForecast bsCff = ReconcileForecast(objSpace.Session,
                                                               bankStmt, cashFlow);

            ChangeBankStmtToCashFlowForecast(bsCff.BankStmt, bsCff.CashFlow);
            return(bsCff);
        }
コード例 #4
0
        public void ReconcileBankStmtToCashFlowSnapshot()
        {
            #region Arrange Forex objects
            // Currencies
            var ccyAUD = ObjectSpace.FindObject <Currency>(CriteriaOperator.Parse("Name = ?", "AUD"));
            var ccyUSD = ObjectSpace.FindObject <Currency>(CriteriaOperator.Parse("Name = ?", "USD"));

            // Forex Rates
            var rate = ObjectSpace.CreateObject <ForexRate>();
            rate.ConversionDate = new DateTime(2013, 11, 01);
            rate.FromCurrency   = ccyAUD;
            rate.ToCurrency     = ccyUSD;
            rate.ConversionRate = 0.9M;
            rate.Save();
            ObjectSpace.CommitChanges();

            // Constants
            decimal rate1 = 0.95M;
            #endregion

            #region Arrange Lookup Objects

            var priAccount = ObjectSpace.CreateObject <Account>();
            priAccount.Name     = "VHA ANZ 70086";
            priAccount.Currency = ccyAUD;

            var couAccount = ObjectSpace.CreateObject <Account>();
            couAccount.Name     = "VHA ANZ USD";
            couAccount.Currency = ccyUSD;

            var forexActivity = SetOfBooks.GetInstance(ObjectSpace).ForexSettleActivity;

            var outActivity = ObjectSpace.CreateObject <Activity>();
            outActivity.Name = "AP Pymt";

            var outCounterparty = ObjectSpace.CreateObject <Counterparty>();
            outCounterparty.Name = "UNDEFINED";

            var inCounterparty = ObjectSpace.CreateObject <Counterparty>();
            inCounterparty.Name = "ANZ";

            var forexCounterparty = ObjectSpace.CreateObject <ForexCounterparty>();
            forexCounterparty.Name = "ANZ";
            forexCounterparty.CashFlowCounterparty = inCounterparty;

            var snapshot1 = ObjectSpace.CreateObject <CashFlowSnapshot>();
            snapshot1.Name = "Snapshot 1";
            #endregion


            #region Create Cash Flow Forex Trade Objects

            var cfCouForex1 = ObjectSpace.CreateObject <CashFlow>();
            cfCouForex1.CalculateEnabled = false;
            cfCouForex1.TranDate         = new DateTime(2013, 11, 16);
            cfCouForex1.Account          = couAccount;
            cfCouForex1.Activity         = forexActivity;
            cfCouForex1.Counterparty     = inCounterparty;
            cfCouForex1.AccountCcyAmt    = 100;
            cfCouForex1.FunctionalCcyAmt = 100 / rate1;
            cfCouForex1.CounterCcyAmt    = 100;
            cfCouForex1.CounterCcy       = ccyUSD;
            cfCouForex1.ForexSettleType  = CashFlowForexSettleType.In;
            cfCouForex1.Description      = "cfCouForex1";
            cfCouForex1.Save();

            var cfPriForex1 = ObjectSpace.CreateObject <CashFlow>();
            cfPriForex1.CalculateEnabled = false;
            cfPriForex1.TranDate         = new DateTime(2013, 11, 16);
            cfPriForex1.Account          = priAccount;
            cfPriForex1.Activity         = forexActivity;
            cfPriForex1.Counterparty     = inCounterparty;
            cfPriForex1.AccountCcyAmt    = -100 / rate1;
            cfPriForex1.FunctionalCcyAmt = -100 / rate1;
            cfPriForex1.CounterCcyAmt    = 100;
            cfPriForex1.CounterCcy       = ccyUSD;
            cfPriForex1.ForexSettleType  = CashFlowForexSettleType.In;
            cfPriForex1.Description      = "cfPriForex1";
            cfPriForex1.Save();

            var cfCouForex1a = ObjectSpace.CreateObject <CashFlow>();
            cfCouForex1a.CalculateEnabled = false;
            cfCouForex1a.TranDate         = new DateTime(2013, 11, 16);
            cfCouForex1a.Account          = couAccount;
            cfCouForex1a.Activity         = forexActivity;
            cfCouForex1a.Counterparty     = inCounterparty;
            cfCouForex1a.AccountCcyAmt    = 100;
            cfCouForex1a.FunctionalCcyAmt = 100 / rate1;
            cfCouForex1a.CounterCcyAmt    = 100;
            cfCouForex1a.CounterCcy       = ccyUSD;
            cfCouForex1a.ForexSettleType  = CashFlowForexSettleType.In;
            cfCouForex1a.Description      = "cfCouForex1a";
            cfCouForex1a.Snapshot         = snapshot1;
            cfCouForex1a.Save();

            var cfPriForex1a = ObjectSpace.CreateObject <CashFlow>();
            cfPriForex1a.CalculateEnabled = false;
            cfPriForex1a.TranDate         = new DateTime(2013, 11, 16);
            cfPriForex1a.Account          = priAccount;
            cfPriForex1a.Activity         = forexActivity;
            cfPriForex1a.Counterparty     = inCounterparty;
            cfPriForex1a.AccountCcyAmt    = -100 / rate1;
            cfPriForex1a.FunctionalCcyAmt = -100 / rate1;
            cfPriForex1a.CounterCcyAmt    = 100;
            cfPriForex1a.CounterCcy       = ccyUSD;
            cfPriForex1a.ForexSettleType  = CashFlowForexSettleType.In;
            cfPriForex1a.Description      = "cfPriForex1a";
            cfPriForex1a.Snapshot         = snapshot1;
            cfPriForex1a.Save();

            #endregion

            #region Arrange Bank Stmt Forex Trade objects

            var bsCouForex1 = ObjectSpace.CreateObject <BankStmt>();
            bsCouForex1.TranDate           = new DateTime(2013, 11, 16);
            bsCouForex1.Account            = couAccount;
            bsCouForex1.Activity           = forexActivity;
            bsCouForex1.Counterparty       = outCounterparty;
            bsCouForex1.TranAmount         = 100;
            bsCouForex1.ForexSettleType    = CashFlowForexSettleType.In;
            bsCouForex1.SummaryDescription = "bsCouForex1";
            bsCouForex1.Save();

            var bsPriForex1 = ObjectSpace.CreateObject <BankStmt>();
            bsPriForex1.TranDate           = new DateTime(2013, 11, 16);
            bsPriForex1.Account            = priAccount;
            bsPriForex1.Activity           = forexActivity;
            bsPriForex1.Counterparty       = outCounterparty;
            bsPriForex1.TranAmount         = -100 / rate1;
            bsPriForex1.ForexSettleType    = CashFlowForexSettleType.In;
            bsPriForex1.SummaryDescription = "bsPriForex1";
            bsPriForex1.Save();

            #endregion

            #region Reconcile Bank Stmt

            ObjectSpace.CommitChanges();
            var bankStmts  = ObjectSpace.GetObjects <BankStmt>();
            var reconciler = new BankStmtForecastReconciler((XPObjectSpace)ObjectSpace);
            BankStmtCashFlowForecast bsCff = reconciler.ReconcileItem(bsCouForex1, cfCouForex1a);
            ObjectSpace.CommitChanges();
            #endregion

            #region Assert
            Assert.AreEqual("cfCouForex1a", bsCouForex1.SummaryDescription);
            #endregion
        }