コード例 #1
0
        private void Handle(PaymentReceived evt)
        {
            var saga = this.repo.GetById <ShippingSaga>(evt.OrderId);

            saga.ConfirmPayment(dispatcher);
            this.repo.Save(saga);
        }
コード例 #2
0
        public async Task DailyUsageAllowance_IsUpdated_EveryTime_A_New_PaymentReceived_Comes()
        {
            var initialLoan = _loansProvider.GetLoan(EXISTING_CUSTOMER_ID);

            var payingHalfOfWhatsLeft = initialLoan.RemainingAmountToPay() / 2;
            var firstPayment          = new PaymentReceived()
            {
                CustomerId    = EXISTING_CUSTOMER_ID,
                PaymentAmount = payingHalfOfWhatsLeft,
            };

            var loanAfterFirstPayment = await _loansProvider.UpdateLoanAsync(firstPayment);

            var dailyAllowance = loanAfterFirstPayment.DailyUsageAllowance();

            dailyAllowance.Should().Be(loanAfterFirstPayment.TotalLoanPayed / loanAfterFirstPayment.DailyRate);
            dailyAllowance.Should().BeGreaterThan(0);

            var secondPayment = new PaymentReceived()
            {
                CustomerId    = EXISTING_CUSTOMER_ID,
                PaymentAmount = payingHalfOfWhatsLeft,
            };

            var loanAfterLastPayment = await _loansProvider.UpdateLoanAsync(secondPayment);

            var updatedDailyAllowance = loanAfterLastPayment.DailyUsageAllowance();

            updatedDailyAllowance.Should().BeGreaterThan(dailyAllowance);
            updatedDailyAllowance.Should().Be(loanAfterFirstPayment.TotalLoanPayed / loanAfterFirstPayment.DailyRate);
            updatedDailyAllowance.Should().BeGreaterThan(0);
            loanAfterFirstPayment.State().Should().Be(LoanState.FINISHED);
        }
コード例 #3
0
        public void Handle(PaymentReceived evt)
        {
            var process = this.repo.GetById <ShippingProcess>(evt.OrderId);

            process.ConfirmPayment(dispatcher);
            this.repo.Save(process);
        }
コード例 #4
0
        /// Updates Loan
        /// Assume deduplication of messages is handled somewhere else
        /// ASK PM: What do we do with Payments received for loans that don't exists or are inactive / fully paid?
        public async Task <Loan> UpdateLoanAsync(PaymentReceived paymentReceived)
        {
            if (ActiveLoanExists(paymentReceived.CustomerId))
            {
                var loan = GetLoan(paymentReceived.CustomerId);

                loan.UpdateTotalLoanPayed(paymentReceived.PaymentAmount);
                _loans[loan.CustomerId] = loan;

                if (loan.State() == LoanState.FINISHED)
                {
                    var loanFinished = new LoanFinished(loan.CustomerId, paymentReceived.CorrelationId);
                    await _eventSender.SendLoanFinishedAsync(loanFinished);
                }
                else
                {
                    var loanUpdated = new LoanUpdated(paymentReceived.CustomerId, loan.DailyUsageAllowance(), paymentReceived.CorrelationId);
                    await _eventSender.SendLoanUpdatedAsync(loanUpdated);
                }

                return(loan);
            }

            return(null);
        }
コード例 #5
0
 public void FromEmail()
 {
     string      emailBody = File.ReadAllText(@"C:\Users\perscholas_student\Desktop\uipath\CaseStudy\EmailProcessing\SendMail\PaymentReceived\Payment Received - Pericles Comidas clásicas.txt");
     MailMessage email     = new MailMessage
     {
         Subject = "Payment Received",
         Body    = emailBody
     };
     PaymentReceived notice = PaymentReceived.FromEmail(email);
 }
コード例 #6
0
 public void FromEmail()
 {
     foreach (string fpath in Directory.GetFiles("PaymentReceived", "*.txt"))
     {
         MailMessage email = new MailMessage
         {
             Subject = "Payment Received",
             Body    = File.ReadAllText(fpath)
         };
         PaymentReceived notice = PaymentReceived.FromEmail(email);
     }
 }
コード例 #7
0
ファイル: TypeLookup.cs プロジェクト: Amilenge/BankStatement
        public string getTransactionType(string description)
        {
            description = description.ToUpper();

            if (Deposit.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.Deposit.ToString());
            }
            else if (PaymentMade.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.PaymentMade.ToString());
            }
            else if (PaymentReceived.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.PaymentReceived.ToString());
            }
            else if (PointOfSale.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.PointOfSale.ToString());
            }
            else if (Withdrawal.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.Withdrawal.ToString());
            }
            else if (OverseePurchase.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.OverseePurchase.ToString());
            }
            else if (TransactionCharges.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.TransactionCharges.ToString());
            }
            else if (AdminCharges.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.AdminCharges.ToString());
            }
            else if (PrepaidAirtime.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.PrepaidAirtime.ToString());
            }
            else if (MonthlyAccountCharges.Any(n => description.IndexOf(n) != -1))
            {
                return(Enumerators.TransactionType.MonthlyAccountCharges.ToString());
            }
            // Extend transaction type here
            else
            {
                return(Enumerators.TransactionType.Unknown.ToString());
            }
        }
コード例 #8
0
        public async Task UpdateLoan_Sends_LoanFinishedEvent_When_LoanIs_Finished()
        {
            var initialLoan = _loansProvider.GetLoan(EXISTING_CUSTOMER_ID);

            var paymentReceived = new PaymentReceived()
            {
                CustomerId    = EXISTING_CUSTOMER_ID,
                PaymentAmount = initialLoan.RemainingAmountToPay(),
            };

            var expectedLoan = await _loansProvider.UpdateLoanAsync(paymentReceived);

            _eventSender.Verify(y => y.SendLoanUpdatedAsync(It.IsAny <LoanUpdated>()), Times.Never);
            _eventSender.Verify(y => y.SendLoanFinishedAsync(It.IsAny <LoanFinished>()), Times.Once);
        }
コード例 #9
0
        public void Handle(PaymentReceived @event)
        {
            var repo = this.repositoryFactory.Invoke();

            using (repo as IDisposable)
            {
                lock (lockObject)
                {
                    var saga = repo.Find <RegistrationProcessSaga>(@event.OrderId);
                    saga.Handle(@event);

                    repo.Save(saga);
                }
            }
        }
コード例 #10
0
 public bool CreatePaymentReceived(PaymentReceivedCreate model)
 {
     using (var context = new ApplicationDbContext())
     {
         var paymentReceivedEntity = new PaymentReceived()
         {
             SourceId    = context.Sources.SingleOrDefault(c => c.Name == model.SourceName && c.UserId == _userId).Id,
             MonthId     = context.Months.SingleOrDefault(m => m.BeginDate.Month == DateTime.Now.Month && m.BeginDate.Year == DateTime.Now.Year && m.UserId == _userId).Id,
             Amount      = model.Amount,
             PaymentDate = DateTime.Now,
             UserId      = _userId
         };
         context.PaymentsReceived.Add(paymentReceivedEntity);
         return(context.SaveChanges() == 1);
     }
 }
コード例 #11
0
 public void SeedPaymentReceivedForTestUser(string sourceName, decimal amount, DateTime paymentDate)
 {
     using (var context = new ApplicationDbContext())
     {
         var paymentReceived = new PaymentReceived()
         {
             SourceId    = context.Sources.SingleOrDefault(c => c.Name == sourceName && c.UserId == _userId).Id,
             MonthId     = context.Months.SingleOrDefault(m => m.BeginDate.Month == paymentDate.Month && m.BeginDate.Year == paymentDate.Year && m.UserId == _userId).Id,
             Amount      = amount,
             PaymentDate = paymentDate,
             UserId      = _userId
         };
         context.PaymentsReceived.Add(paymentReceived);
         context.SaveChanges();
     }
 }
コード例 #12
0
        public void Handle(PaymentReceived message)
        {
            if (this.State == SagaState.AwaitingPayment)
            {
                this.State = SagaState.Completed;

                this.AddCommand(new CommitSeatReservation
                {
                    ReservationId = this.ReservationId,
                    ConferenceId  = message.ConferenceId
                });
            }
            else
            {
                throw new InvalidOperationException();
            }
        }
コード例 #13
0
        public void FromEmail()
        {
            string      emailBody = File.ReadAllText("PaymentReceived\\Payment Received - Reggiani Caseifici.txt");
            MailMessage email     = new MailMessage
            {
                Subject = "Payment Received",
                Body    = emailBody
            };

            DateTime myOrderDate = new DateTime(2019, 3, 10);

            PaymentReceived notice = PaymentReceived.FromEmail(email);

            Assert.AreEqual(462.48m, notice.Amount);
            Assert.AreEqual(11062m, notice.OrderNumber);
            Assert.AreEqual(myOrderDate, notice.OrderDate);
            Assert.AreEqual(871m, notice.CheckNumber);
        }
コード例 #14
0
        public void Handle(PaymentReceived @event)
        {
            var repo = this.repositoryFactory.Invoke();

            using (repo as IDisposable)
            {
                lock (lockObject)
                {
                    var saga = repo.Query <RegistrationProcessSaga>().FirstOrDefault(x => x.OrderId == @event.OrderId);
                    if (saga != null)
                    {
                        saga.Handle(@event);

                        repo.Save(saga);
                    }
                }
            }
        }
コード例 #15
0
        public void FromEmail()
        {
            string      emailBody = File.ReadAllText("PaymentReceived\\Payment Received - Bólido Comidas preparadas.txt");
            MailMessage email     = new MailMessage
            {
                Subject = "Payment Received",
                Body    = emailBody
            };

            DateTime myOrderDate = new DateTime(2019, 3, 12);

            PaymentReceived notice = PaymentReceived.FromEmail(email);

            Assert.AreEqual(545.98M, notice.Amount);
            Assert.AreEqual(11078, notice.OrderNumber);
            Assert.AreEqual(myOrderDate, notice.OrderDate);
            Assert.AreEqual(495, notice.CheckNumber);
        }
コード例 #16
0
 public void TestAllEmails()
 {
     foreach (string fpath in Directory.GetFiles("PaymentReceived", "*.txt"))
     {
         MailMessage msg = new MailMessage
         {
             Subject = "Payment Received",
             Body    = File.ReadAllText(fpath)
         };
         Console.WriteLine(fpath);
         PaymentReceived notice = PaymentReceived.FromEmail(msg);
         Assert.IsTrue(notice.Amount > 0);
         Assert.IsTrue(notice.OrderNumber > 0);
         Assert.IsNotNull(notice.CheckNumber);
         Assert.IsNotNull(notice.OrderDate);
         Assert.IsNotNull(notice.CheckNumber);
         Assert.IsTrue(notice.CheckNumber > 0);
     }
 }
コード例 #17
0
        public async Task UpdateLoan_When_PaymentsComes_With_Not_AllRemainingAmount_Sets_Loan_As_Unfinished()
        {
            var initialLoan = _loansProvider.GetLoan(EXISTING_CUSTOMER_ID);

            initialLoan.State().Should().Be(LoanState.UNFINISHED);
            initialLoan.TotalLoanPayed.Should().BeLessThan(initialLoan.TotalLoanAmount);

            var paymentReceived = new PaymentReceived()
            {
                CustomerId    = EXISTING_CUSTOMER_ID,
                PaymentAmount = initialLoan.RemainingAmountToPay() - 1,
            };

            var expectedLoan = await _loansProvider.UpdateLoanAsync(paymentReceived);

            expectedLoan.State().Should().Be(LoanState.UNFINISHED);
            expectedLoan.TotalLoanPayed.Should().BeLessThan(expectedLoan.TotalLoanAmount);
            expectedLoan.CustomerId.Should().Be(paymentReceived.CustomerId);
        }
コード例 #18
0
        private void GeneratePayments()
        {
            for (int i = 0; i < 5; i++)
            {
                var p = new Payment
                {
                    Amount          = $"{i}",
                    AssetCode       = "B1",
                    AssetIssuer     = "AssetIssuerId",
                    AssetType       = "Native",
                    CreatedAt       = DateTime.Now.ToString(),
                    PagingToken     = $"{i}",
                    From            = $"FromAccountId{i}",
                    To              = $"ToAccountId{i}",
                    TransactionHash = $"TransactionHash{i}"
                };

                PaymentReceived?.Invoke(this, new PaymentEventArgs(p));
            }
        }
コード例 #19
0
 public Order When(PaymentReceived @event)
 {
     Payed = true;
     return(this);
 }
コード例 #20
0
            public void Handle(PaymentReceived message)
            {
                Assert.AreEqual(OrderState.Billed, Data.State);

                Data.State = OrderState.Paid;
            }
コード例 #21
0
 public async Task HandleAsync(PaymentReceived @event)
 {
     await ExecuteSaveAsync(@event.AggregateId, model => model.Pay());
 }
コード例 #22
0
 public async Task HandleAsync(PaymentReceived @event)
 {
     await ExecuteAsync(@event.AggregateId, shippingSaga => shippingSaga.ConfirmPayment());
 }
コード例 #23
0
ファイル: Order.cs プロジェクト: lulzzz/EasyEventSourcing
 public void Apply(PaymentReceived evt)
 {
     this.paidFor = true;
 }
コード例 #24
0
 public Order When(PaymentReceived @event) => this;
コード例 #25
0
 private void Apply(PaymentReceived e)
 {
     this.Payment = new Payment(e.PaymentId, e.PaymentDate, this.PayableId);
 }
コード例 #26
0
 public static ICommand When(PaymentReceived @event, Order state) => Ship(state.When(@event));