コード例 #1
0
        public async Task <IActionResult> FilterRents(FilterRentBindingModel bindModel)
        {
            if (!ModelState.IsValid)
            {
                TempData.AddErrorMessage(WrongInput);
                return(RedirectToAction("IndexRents"));
            }

            var model = await this.payments.FilterRentsAsync(bindModel);

            TempData.AddSuccessMessage(model.FilterDetails);
            return(View(model));
        }
コード例 #2
0
        public async Task <FilterRentsViewModel> FilterRentsAsync(FilterRentBindingModel bindModel)
        {
            string filteredDetails = "Аргументите на филтъра са: ";
            var    payments        = new List <Payment>();

            if (bindModel.FilterByDeadline)
            {
                payments = await this.Db.Payments
                           .Where(x => x.MonthlyPaymentRentId != null &&
                                  x.MonthlyPaymentRent.DeadLine >= bindModel.StartDate &&
                                  x.MonthlyPaymentRent.DeadLine <= bindModel.EndDate)
                           .OrderBy(x => x.MonthlyPaymentRent.DeadLine)
                           .ToListAsync();

                filteredDetails += "по крайна дата, ";
            }
            else
            {
                payments = await this.Db.Payments
                           .Where(x => x.MonthlyPaymentRentId != null &&
                                  x.PaidOn >= bindModel.StartDate &&
                                  x.PaidOn <= bindModel.EndDate)
                           .OrderBy(x => x.PaidOn)
                           .ToListAsync();

                filteredDetails += "по дата на плащане, ";
            }


            if (payments == null)
            {
                return(null);
            }
            //Filter only chash
            if (bindModel.OnlyCash)
            {
                payments = payments
                           .Where(x => x.CashPayment == true)
                           .ToList();
                filteredDetails += "пари платени само в борй, ";
            }
            else
            {
                filteredDetails += "всякакви плащания,  ";
            }

            // Filter by client if needed
            if (bindModel.Client != 0)
            {
                payments = payments
                           .Where(x => x.MonthlyPaymentRent.RentAgreement.ClientId == bindModel.Client)
                           .ToList();
                var client = await this.Db.Clients.FirstOrDefaultAsync(x => x.Id == bindModel.Client);

                if (client != null)
                {
                    filteredDetails += $"само за клиент {client.Name}, ";
                }
                else
                {
                    filteredDetails += "търсеният клиента няма такива плащания, ";
                }
            }
            else
            {
                filteredDetails += "всички клиенти, ";
            }

            // Filter by property if needed
            if (bindModel.Property != 0)
            {
                payments = payments
                           .Where(x => x.MonthlyPaymentRent.RentAgreement.PropertyRents.Any(p => p.PropertyId == bindModel.Property))
                           .ToList();
                var filterProperty = await this.Db.Properties.FirstOrDefaultAsync(x => x.Id == bindModel.Property);

                if (filterProperty != null)
                {
                    filteredDetails += $"само за имот {filterProperty.Name}, ";
                }
                else
                {
                    filteredDetails += "търсеният имот няма такива плащания, ";
                }
            }
            else
            {
                filteredDetails += "всички имоти, ";
            }

            // Filter by parking area if needed
            if (bindModel.ParkingArea != 0)
            {
                payments = payments
                           .Where(x => x.MonthlyPaymentRent.RentAgreement.ParkingSlots.All(y => (int)y.Area == bindModel.ParkingArea))
                           .ToList();
                if (bindModel.ParkingArea == 1)
                {
                    filteredDetails += "на преден паркинг!";
                }
                else if (bindModel.ParkingArea == 2)
                {
                    filteredDetails += "на заден паркинг!";
                }
                else
                {
                    filteredDetails += "без запазена зона!";
                }
            }
            else
            {
                filteredDetails += "всички зони за паркиране!";
            }
            var paymentsListingModel = Mapper.Map <IEnumerable <PaymentRentListingModel> >(payments);

            var model = new FilterRentsViewModel()
            {
                StartDate     = bindModel.StartDate,
                EndDate       = bindModel.EndDate,
                Payments      = paymentsListingModel,
                FilterDetails = filteredDetails
            };

            return(model);
        }
コード例 #3
0
        public async Task FilterRentsAsync_ShouldReturn_CorrectQueryResult_DependingOnInput()
        {
            var db     = GetDatabase();
            var mapper = GetMapper();

            var firstMonthConsumable = new MonthlyPaymentRent
            {
                Id            = 1,
                RentAgreement = new RentAgreement
                {
                    Id       = 1,
                    ClientId = 1
                }
            };
            var secondMonthConsumable = new MonthlyPaymentRent
            {
                Id            = 2,
                RentAgreement = new RentAgreement
                {
                    Id       = 1,
                    ClientId = 1
                }
            };
            var thirdMonthConsumable = new MonthlyPaymentRent
            {
                Id            = 3,
                RentAgreement = new RentAgreement
                {
                    Id       = 2,
                    ClientId = 2
                }
            };
            var forthMonthConsumable = new MonthlyPaymentRent
            {
                Id            = 4,
                RentAgreement = new RentAgreement
                {
                    Id       = 1,
                    ClientId = 1
                }
            };
            await db.MonthlyPaymentRents.AddRangeAsync(firstMonthConsumable, secondMonthConsumable, thirdMonthConsumable, forthMonthConsumable);

            var firstPayment = new Payment
            {
                Id                   = 1,
                PaidOn               = new DateTime(2018, 12, 12),
                Amount               = 10,
                CashPayment          = false,
                MonthlyPaymentRentId = 1,
            };
            var secndPayment = new Payment
            {
                Id                   = 2,
                PaidOn               = new DateTime(2017, 11, 6),
                Amount               = 20,
                CashPayment          = true,
                MonthlyPaymentRentId = 2,
            };
            var thirdPayment = new Payment
            {
                Id                   = 3,
                PaidOn               = new DateTime(2015, 11, 12),
                Amount               = 30,
                CashPayment          = false,
                MonthlyPaymentRentId = 3
            };
            var forthPayment = new Payment
            {
                Id                   = 4,
                PaidOn               = new DateTime(2015, 12, 15),
                Amount               = 40,
                CashPayment          = false,
                MonthlyPaymentRentId = 4
            };
            var fifthPayment = new Payment
            {
                Id     = 5,
                PaidOn = new DateTime(2017, 12, 15),
                Amount = 50,
                MonthlyPaymentRentId = null,
                CashPayment          = false
            };
            await db.Payments.AddRangeAsync(firstPayment, secndPayment, thirdPayment, forthPayment, fifthPayment);

            await db.SaveChangesAsync();

            var filterModel = new FilterRentBindingModel
            {
                Client    = 1,
                OnlyCash  = true,
                StartDate = new DateTime(2017, 1, 1),
                EndDate   = new DateTime(2018, 12, 30)
            };
            var paymentService = new PaymentsService(mapper, db, null);
            //Act
            var result = await paymentService.FilterRentsAsync(filterModel);

            //Assert
            result
            .Should()
            .BeOfType <FilterRentsViewModel>()
            .And
            .Match <FilterRentsViewModel>(x => x.TotalIncome == 20 &&
                                          x.Payments.Any(y => y.PaidOn == new DateTime(2017, 11, 6)));
        }