コード例 #1
0
ファイル: ScheduleSteps.cs プロジェクト: mokus1975/opencbs
        public void WhenIRepayOn_WithForCommissionWithForPenaltiesWithForInterest(string amountString,
                                                                                  string dateString,
                                                                                  string commissionString,
                                                                                  string penaltyString,
                                                                                  string interestString)
        {
            var amount     = Convert.ToDecimal(amountString, _cultureInfo);
            var date       = DateTime.Parse(dateString, _cultureInfo, DateTimeStyles.AssumeLocal);
            var commission = Convert.ToDecimal(commissionString, _cultureInfo);
            var penalty    = Convert.ToDecimal(penaltyString, _cultureInfo);
            var interest   = Convert.ToDecimal(interestString, _cultureInfo);
            var re         = new RepaymentService
            {
                Settings = new RepaymentSettings
                {
                    Loan       = _loan,
                    Amount     = amount,
                    Date       = date,
                    Commission = commission,
                    Penalty    = penalty,
                    Interest   = interest,
                    Principal  = amount - commission - penalty - interest,
                    ScriptName = "1_NormalRepayment.py"
                }
            };

            _loan = re.Repay();
        }
コード例 #2
0
        public RepaymentServiceShould()
        {
            _lenderFileParserMock    = new Mock <ILenderFileParser>();
            _interestCalculatorMock  = new Mock <IInterestCalculator>();
            _repaymentCalculatorMock = new Mock <IRepaymentCalculator>();
            var lenders = new[] { new Lender(1000, 1.0m) };

            _lenderFileParserMock.Setup(parser => parser.GetLenders(_fileName)).Returns(lenders);
            _repaymentService = new RepaymentService(_lenderFileParserMock.Object, _interestCalculatorMock.Object, _repaymentCalculatorMock.Object);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            try
            {
                IZopaPrintAndIO    zopaPrintAndIOService = new ZopaPrintAndIOService();
                IList <LenderData> lenderData            = zopaPrintAndIOService.ReadCvsFile("market_data.txt");

                /*
                 * new List<LenderData>
                 * {
                 *  new LenderData {Available = 150, Lender = "Joe Blogs", Rate = (float) 0.052},
                 *  new LenderData {Available = 230, Lender = "Martin Okello", Rate = (float) 0.022},
                 *  new LenderData {Available = 650, Lender = "Joshua Lent", Rate = (float) 0.032}
                 * };*/

                decimal loanAmountRequest       = 1010;//decimal.Parse(args[1]);
                var     monthsDurationOfPayment = 36;

                if (args.Length > 0)
                {
                    lenderData        = zopaPrintAndIOService.ReadCvsFile(args[0]);
                    loanAmountRequest = decimal.Parse(args[1]);
                }


                IZopaLoanPool zopaLoanService = new ZopaLoanPoolService(lenderData);

                var canZopaSatisfy = zopaLoanService.CanZopaFulFillLoan(loanAmountRequest);
                if (canZopaSatisfy)
                {
                    ILowLoanLender lowLoanLenderService = new LowLenderService();


                    var lenderLowLenderSatisiyingList = lowLoanLenderService.GetLenderContributors(loanAmountRequest, lenderData);

                    IRepayment repaymentService = new RepaymentService(lowLoanLenderService);

                    var repaymentAmount = repaymentService.ComputeTotalRepaymentAmount(lenderLowLenderSatisiyingList);
                    var interestRate    = repaymentService.ComputeTotalRateOfRepayment(lenderLowLenderSatisiyingList);
                    var monthlyPayments = repaymentService.ComputeMonthlyRepaymentAmount(lenderLowLenderSatisiyingList, monthsDurationOfPayment);

                    zopaPrintAndIOService.PrintLine((decimal)repaymentService.RoundToTheNearest((double)loanAmountRequest, 2), (double)repaymentService.RoundToTheNearest(interestRate, 1), (decimal)repaymentService.RoundToTheNearest((double)monthlyPayments, 2), (decimal)repaymentService.RoundToTheNearest((double)repaymentAmount, 2));
                }
                else
                {
                    Console.Out.WriteLine(string.Format("Zopa cannot satisfy the loan request for £{0} Pounds",
                                                        loanAmountRequest));
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine("Your data may be inadequate for the machine. check the Program inputs");
            }
        }
コード例 #4
0
        public void Test_ComputeTotalRateOfRepayment_Given_Lent_100()
        {
            _lenderData[0].AmountLent = 100;
            _lenderData[1].AmountLent = 100;
            _lenderData[2].AmountLent = 100;

            IRepayment repaymentService = new RepaymentService(_lowLoanLender);

            var rate = repaymentService.ComputeTotalRateOfRepayment(_lenderData);

            Assert.AreEqual(rate, 3.53);
        }
コード例 #5
0
        public void Test_ComputeTotalRepaymentAmount_Given_Lent_100()
        {
            _lenderData[0].AmountLent = 100;
            _lenderData[1].AmountLent = 100;
            _lenderData[2].AmountLent = 100;

            IRepayment repaymentService = new RepaymentService(_lowLoanLender);

            var repayable = (decimal)repaymentService.RoundToTheNearest((double)repaymentService.ComputeTotalRepaymentAmount(_lenderData), 2);

            Assert.AreEqual(repayable, (decimal)310.6);
        }
コード例 #6
0
        public void Test_ComputeMonthlyRepaymentAmount_Given_Lent_100_repayable_18_months()
        {
            _lenderData[0].AmountLent = 100;
            _lenderData[1].AmountLent = 100;
            _lenderData[2].AmountLent = 100;

            IRepayment repaymentService = new RepaymentService(_lowLoanLender);

            var monthlyRepayments = (decimal)repaymentService.RoundToTheNearest((double)repaymentService.ComputeMonthlyRepaymentAmount(_lenderData, 18), 2);

            Assert.AreEqual(monthlyRepayments, (decimal)17.26);
        }
コード例 #7
0
 public ReceiptController()
 {
     _groupService          = new GroupService();
     _referenceValueService = new ReferenceValueService();
     _panchayatService      = new PanchayatService();
     _bankService           = new BankService();
     _groupReceiptService   = new GroupReceiptService();
     _ClusterService        = new ClusterService();
     _villageService        = new VillageService();
     _employeeService       = new EmployeeService();
     _accountheadService    = new AccountHeadService();
     _repaymentService      = new RepaymentService();
 }
コード例 #8
0
 public MemberReceiptController()
 {
     _groupService          = new GroupService();
     _referenceValueService = new ReferenceValueService();
     _bankService           = new BankService();
     _groupReceiptService   = new GroupReceiptService();
     _employeeService       = new EmployeeService();
     _memberservice         = new MemberService();
     _memberReceiptService  = new MemberReceiptService();
     _repaymentService      = new RepaymentService();
     _accountheadService    = new AccountHeadService();
     _ContraEntryService    = new ContraEntryService();
 }
コード例 #9
0
        public void Test_RoundToTheNearest()
        {
            IRepayment repaymentService = new RepaymentService(_lowLoanLender);
            double     number1          = 383.6789;
            double     number2          = 575.235764;
            double     number3          = 4765.235764;

            number1 = repaymentService.RoundToTheNearest(number1, 1);
            number2 = repaymentService.RoundToTheNearest(number2, 3);
            number3 = repaymentService.RoundToTheNearest(number3, 2);
            Assert.AreEqual(number1, 383.7);
            Assert.AreEqual(number2, 575.236);
            Assert.AreEqual(number3, 4765.24);
        }
コード例 #10
0
        public void WhenIRepayOn_(string amountString, string dateString)
        {
            var date   = DateTime.Parse(dateString, _cultureInfo, DateTimeStyles.AssumeLocal);
            var amount = Convert.ToDecimal(amountString, _cultureInfo);
            var re     = new RepaymentService
            {
                Settings = new RepaymentSettings
                {
                    Loan          = _loan,
                    Amount        = amount,
                    AmountChanged = true,
                    Date          = date,
                }
            };

            _loan = re.Repay();
        }
コード例 #11
0
        public void Test_ComputeAmountRepayable_Given_Lent_100()
        {
            _lenderData[0].AmountLent = 100;
            _lenderData[1].AmountLent = 100;
            _lenderData[2].AmountLent = 100;

            IRepayment repaymentJobeBlogs    = new RepaymentService(_lowLoanLender);
            IRepayment repaymentMartinOkello = new RepaymentService(_lowLoanLender);
            IRepayment repaymentJoshuaLent   = new RepaymentService(_lowLoanLender);

            var repayableJB = (decimal)repaymentJobeBlogs.RoundToTheNearest((double)repaymentJobeBlogs.ComputeAmountRepayable(_lenderData[0]), 2);
            var repayableMO = (decimal)repaymentMartinOkello.RoundToTheNearest((double)repaymentMartinOkello.ComputeAmountRepayable(_lenderData[1]), 2);
            var repayableJL = (decimal)repaymentJoshuaLent.RoundToTheNearest((double)repaymentJoshuaLent.ComputeAmountRepayable(_lenderData[2]), 2);

            Assert.AreEqual(repayableJB, (decimal)105.2);
            Assert.AreEqual(repayableMO, (decimal)102.2);
            Assert.AreEqual(repayableJL, (decimal)103.2);
        }