Exemplo n.º 1
0
        public async Task <IActionResult> CreateToAsync(OwnerTransactionPaymentsCreateInputModel model)
        {
            var userId = this.userManager.GetUserId(this.User);

            if (this.ModelState.IsValid)
            {
                var modelForDb = new OwnerTransactionToRequestsCreateInputServiceModel
                {
                    Reason            = model.Reason,
                    Amount            = model.Amount,
                    RecurringSchedule = model.RecurringSchedule,
                    IsRecurring       = model.IsRecurring,
                    HomeId            = model.HomeId,
                };

                var isCreatedId = await this.transactionRequestService.CreateToAsync(userId, modelForDb);

                if (isCreatedId == null)
                {
                    var managedHomes = await this.listingService.GetManagedHomesAsync(userId);

                    var viewModel = new OwnerTransactionPaymentsCreateInputModel
                    {
                        ManagedHomesList = managedHomes,
                    };

                    return(this.View(viewModel));
                }

                // TEST the service. Put Breakpoint on Line BELLOW and when hit, press F11
                // await this.paymentService.AddPaymentRequestToUserAsync(
                //        userId,
                //        isCreatedId);

                var schedule = model.RecurringSchedule;

                var cronType = this.GetCronFromRecurringType(schedule);

                // pending payment will appear in the payments dashboard of the user
                RecurringJob.AddOrUpdate(
                    isCreatedId,
                    () => this.paymentService.AddPaymentRequestToUserAsync(
                        userId,
                        isCreatedId), cronType);

                return(this.RedirectToAction("Index", "TransactionRequests", new { area = ManagementArea })
                       .WithSuccess(string.Empty, RecordCreatedSuccessfully));
            }

            return(this.View(model));
        }
        public async Task <string> CreateToAsync(string senderId, OwnerTransactionToRequestsCreateInputServiceModel model)
        {
            var home = await this.context.Homes
                       .Include(h => h.Manager)
                       .Where(h => h.Id == model.HomeId)
                       .FirstOrDefaultAsync();

            var recipientId = home.ManagerId;
            var amount      = model.Amount;

            // at this stage of the app development, there is only one recurring payment- for the manager of the home
            var transactionRequestFromDb = home.TransactionRequests.FirstOrDefault(t => t.IsRecurring == true);

            if (transactionRequestFromDb != null)
            {
                return(null);
            }

            var transactionRequest = new TransactionRequest
            {
                Reason            = model.Reason,
                Amount            = amount,
                RecurringSchedule = model.RecurringSchedule,
                Status            = TransactionRequestStatus.Scheduled,
                IsRecurring       = model.IsRecurring,
                HomeId            = home.Id,
                SenderId          = senderId,
                RecipientId       = recipientId,
            };

            await this.context.TransactionRequests.AddAsync(transactionRequest);

            var result = await this.context.SaveChangesAsync();

            if (result == 0)
            {
                return(null);
            }

            var id = transactionRequest.Id;

            return(id);
        }
Exemplo n.º 3
0
        [Fact] // async Task<string> CreateToAsync(string senderId, OwnerTransactionToRequestsCreateInputServiceModel model)
        public async void CreateToAsync_WithGivenSenderIdAndRequestModel_ShouldCreateTransactionRequest()
        {
            // Arrange
            var country = CountryCreator.Create();
            var city    = CityCreator.Create(country.Id);
            var owner   = UserCreator.Create("Suzdurma", "Saturov", "satura", "*****@*****.**");

            var home = HomeCreator.CreateManagedHome(owner.Id, city.Id);

            await this.Context.Countries.AddAsync(country);

            await this.Context.Cities.AddAsync(city);

            await this.Context.Users.AddAsync(owner);

            await this.Context.Homes.AddAsync(home);

            await this.Context.SaveChangesAsync();

            var recipientId = Guid.NewGuid().ToString();

            var model = new OwnerTransactionToRequestsCreateInputServiceModel
            {
                Id                = Guid.NewGuid().ToString(),
                Reason            = Guid.NewGuid().ToString(),
                RecurringSchedule = RecurringScheduleType.Monthly,
                IsRecurring       = true,
                HomeId            = home.Id,
            };

            var service = new OwnerTransactionRequestService(this.Context);

            // Act
            var result = await service.CreateToAsync(owner.Id, model);

            var expected = await this.Context.TransactionRequests
                           .Where(x => x.RecipientId == home.ManagerId)
                           .FirstOrDefaultAsync();

            // Assert
            result.Should().BeOfType <string>();
            result.Should().Equals(expected.Id);
        }