コード例 #1
0
        private void BankStmtAction_Execute(object sender, SingleChoiceActionExecuteEventArgs e)
        {
            var caption = e.SelectedChoiceActionItem.Caption;

            switch (caption)
            {
            case mapCaption:
                MapSelected();
                break;

            case importCaption:
                ShowImportBankStmtForm(e.ShowViewParameters);
                break;

            case "Reconcile Forecast":
                ReconcileForecastChoice(Application, View);
                break;

            case "Auto-Reconcile Forecast":
                var reconciler = new BankStmtForecastReconciler((XPObjectSpace)View.ObjectSpace);
                reconciler.AutoreconcileTransfers(View.SelectedObjects);
                break;

            case recalcFuncCaption:
                var calculator = new BankStmtCalculator((XPObjectSpace)View.ObjectSpace);
                calculator.Process(View.SelectedObjects);
                break;

            case "Test":

                break;
            }
        }
コード例 #2
0
        void reconcileForecastDialog_Accepting(object sender, DevExpress.ExpressApp.SystemModule.DialogControllerAcceptingEventArgs e)
        {
            var reconciler = new BankStmtForecastReconciler((XPObjectSpace)View.ObjectSpace);

            // Record the Cash Flow Forecast that was reconciled with the Bank Stmt
            reconciler.ReconcileItem((BankStmt)View.CurrentObject, (CashFlow)e.AcceptActionArgs.CurrentObject);
        }
コード例 #3
0
        public void AutoreconcileBankStmtToCashFlow()
        {
            #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;
            decimal rate3 = 0.87M;
            decimal rate2 = 0.99M;

            #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 = ObjectSpace.GetObjectByKey <Activity>(SetOfBooks.CachedInstance.ForexSettleActivity.Oid);

            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;
            #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 cfCouForex2 = ObjectSpace.CreateObject <CashFlow>();
            cfCouForex2.CalculateEnabled = false;
            cfCouForex2.TranDate         = new DateTime(2013, 11, 30);
            cfCouForex2.Account          = couAccount;
            cfCouForex2.Activity         = forexActivity;
            cfCouForex2.Counterparty     = inCounterparty;
            cfCouForex2.AccountCcyAmt    = 50;
            cfCouForex2.FunctionalCcyAmt = 50 / rate2;
            cfCouForex2.CounterCcyAmt    = 50;
            cfCouForex2.CounterCcy       = ccyUSD;
            cfCouForex2.ForexSettleType  = CashFlowForexSettleType.In;
            cfCouForex2.Description      = "cfCouForex2";
            cfCouForex2.Save();

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

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

            var cfPriForex3 = ObjectSpace.CreateObject <CashFlow>();
            cfPriForex3.CalculateEnabled = false;
            cfPriForex3.TranDate         = new DateTime(2013, 11, 30);
            cfPriForex3.Account          = priAccount;
            cfPriForex3.Activity         = forexActivity;
            cfPriForex3.Counterparty     = inCounterparty;
            cfPriForex3.AccountCcyAmt    = -30 / rate3;
            cfPriForex3.FunctionalCcyAmt = -30 / rate3;
            cfPriForex3.CounterCcyAmt    = -30;
            cfPriForex3.CounterCcy       = ccyUSD;
            cfPriForex3.ForexSettleType  = CashFlowForexSettleType.In;
            cfPriForex3.Description      = "cfPriForex3";
            cfPriForex3.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();

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

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

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

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

            #endregion

            #region Act Autoreconciliation

            ObjectSpace.CommitChanges();
            var bankStmts  = ObjectSpace.GetObjects <BankStmt>();
            var reconciler = new BankStmtForecastReconciler((XPObjectSpace)ObjectSpace);
            reconciler.AutoreconcileTransfers(bankStmts);

            #endregion

            #region Assert
            Assert.AreEqual(0, bankStmts.Sum(x => x.FunctionalCcyAmt));
            Assert.AreEqual(6, bankStmts.Where(x => x.Activity.Name == forexActivity.Name).Count());
            Assert.AreEqual(6, bankStmts.Where(x => x.Counterparty.Name == inCounterparty.Name).Count());
            #endregion
        }
コード例 #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
        }