Exemple #1
0
        public void Return(Bike bike, RentPoint rentPoint, bool IsBroken)
        {
            if (bike == null)
            {
                throw new ArgumentNullException(nameof(bike));
            }

            if (rentPoint == null)
            {
                throw new ArgumentNullException(nameof(rentPoint));
            }



            Rent rent = _rentRepository
                        .All()
                        .SingleOrDefault(
                x => x.Bike == bike && !x.IsEnded);

            if (rent == null)
            {
                throw new InvalidOperationException("Rent not found");
            }

            DateTime endTime = DateTime.UtcNow;
            decimal  sum     = _rentSumCalculate.Calcilate(rent.StartedAt, endTime, rent.HourCost);

            rent.End(rentPoint, endTime, sum);

            if (IsBroken)
            {
                bike.IsBroken = true;
                rentPoint.CashBox.PutMoney(bike.Cost);
            }
        }
        public void Return(Bike bike, RentPoint rentPoint)
        {
            if (bike == null)
            {
                throw new ArgumentNullException(nameof(bike));
            }

            if (rentPoint == null)
            {
                throw new ArgumentNullException(nameof(rentPoint));
            }

            Rent rent = _rentRepository
                        .All()
                        .SingleOrDefault(
                x => x.Bike == bike && !x.IsEnded);

            if (rent == null)
            {
                throw new InvalidOperationException("Rent not found");
            }

            bike.Return();

            rent.End(rentPoint);
        }
        public IActionResult Create(BikeViewModel vm)
        {
            _commandBuilder.Execute(new AddBikeCommandContext
            {
                Name     = vm.Name,
                Cost     = vm.Cost,
                HourCost = vm.HourCost
            });

            Bike currentBike = _queryBuilder
                               .For <Bike>()
                               .With(new BikeNameCriterion
            {
                Name = vm.Name
            });

            RentPoint currentRentPoint = _queryBuilder
                                         .For <RentPoint>()
                                         .With
                                             (new AdressCriterion
            {
                Adress = vm.RentPointAdress
            });

            _commandBuilder.Execute(new MoveBikeCommandContext
            {
                Bike      = currentBike,
                RentPoint = currentRentPoint
            });

            return(RedirectToAction("Edit", "RentPoint", new { adress = vm.RentPointAdress }));
        }
Exemple #4
0
 public void MoveBike(Bike bike, RentPoint rentPoint)
 {
     _commandBuilder.Execute(new MoveBikeCommandContext()
     {
         Bike      = bike,
         RentPoint = rentPoint
     });
 }
Exemple #5
0
 public IEnumerable <Bike> GetBikesInRentPoint(RentPoint rentPoint)
 {
     return(_queryBuilder
            .For <IEnumerable <Bike> >()
            .With(new RentPointCriterion()
     {
         RentPoint = rentPoint
     }));
 }
        public IActionResult View(string name)
        {
            RentPoint rentPoint = _queryBuilder.For <RentPoint>().With(new NameCriterion()
            {
                Name = name
            });

            return(View(rentPoint));
        }
Exemple #7
0
 public void ReturnBike(Bike bike, RentPoint rentPoint, bool IsBroken)
 {
     _commandBuilder.Execute(new ReturnBikeCommandContext()
     {
         Bike      = bike,
         RentPoint = rentPoint,
         IsBroken  = IsBroken
     });
 }
Exemple #8
0
 public void AddBike(string name, decimal hourCost, decimal cost, RentPoint myRentPoint)
 {
     _commandBuilder.Execute(new AddBikeCommandContext()
     {
         Name      = name,
         HourCost  = hourCost,
         Cost      = cost,
         RentPoint = myRentPoint
     });
 }
Exemple #9
0
        public IActionResult GetRentPoint(int id)
        {
            RentPoint rentPoint = rentPointRepository.GetOne(id);

            if (rentPoint is null)
            {
                return(NotFound());
            }
            return(Ok(rentPoint));
        }
Exemple #10
0
 public IEnumerable<Bike> GetAllFreeBikesOnRentPoint(RentPoint rentPoint)
 {
     return _queryBuilder
         .For<IEnumerable<Bike>>()
         .With(new RentPointCriterion
         {
             RentPoint = rentPoint
         }
         )
     ;
 }
Exemple #11
0
 public IActionResult EditRentPoint([FromBody] RentPoint rentPoint, int id)
 {
     try
     {
         rentPointRepository.Edit(id, rentPoint);
         return(Ok());
     }
     catch (Exception exe)
     {
         return(BadRequest(exe.Message));
     }
 }
Exemple #12
0
 public IActionResult CreateRentPoint([FromBody] RentPoint rentPoint)
 {
     try
     {
         rentPointRepository.Create(rentPoint);
         return(Ok());
     }
     catch (Exception exe)
     {
         return(BadRequest(exe.Message));
     }
 }
 public RentPointViewModel(RentPoint rp)
 {
     Name               = rp.Name;
     Adress             = rp.Adress;
     EmployeeName       = rp.Employee.FirstName;
     EmployeeSurname    = rp.Employee.Surname;
     EmployeePatronymic = rp.Employee.Patronymic;
     Bikes              = rp.Bikes.ToList();
     MoneyInCashBox     = rp.CashBox.Money;
     MoneyInSafe        = rp.Safe.Money;
     PassportsInsafe    = rp.Safe.PassportDeposits.ToList();
 }
Exemple #14
0
        public void ReturnDeposit(Deposit deposit, RentPoint rentPoint)
        {
            switch (deposit.Type)
            {
            case DepositTypes.Money:
                rentPoint.Cashbox.TakeMoney(((MoneyDeposit)deposit).Sum);
                break;

            case DepositTypes.Passport:
                rentPoint.Safe.returnPassport((PassportDeposit)deposit);
                break;
            }
        }
        public IActionResult Details(string adress)
        {
            RentPoint rp = _queryBuilder
                           .For <RentPoint>()
                           .With
                               (new AdressCriterion
            {
                Adress = adress
            });
            var vm = new RentPointViewModel(rp);

            return(View(vm));
        }
        public IActionResult GetAllBikesOnRentPoint(string name)
        {
            RentPoint rentPoint = _queryBuilder.For <RentPoint>().With(new NameCriterion()
            {
                Name = name
            });
            IEnumerable <Bike> listBikes = _queryBuilder.For <IEnumerable <Bike> >().With(new RentPointCriterion()
            {
                RentPoint = rentPoint
            });

            ViewData["Message"] = string.Format("Байки с точки проката {0}", name);
            return(View(listBikes));
        }
Exemple #17
0
        public RentPoint AddRentPoint(string name, string adress, Employee employee, decimal money)
        {
            if (money < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(money));
            }

            CashBox cashbox = new CashBox(money);
            Safe    safe    = new Safe();

            RentPoint rentPoint = new RentPoint(name, adress, employee, safe, cashbox);

            _rentPointRepository.Add(rentPoint);

            return(rentPoint);
        }
        public void AddBike(string name, decimal hourCost, decimal cost, RentPoint myRentPoint)
        {
            _commandBuilder.Execute(new AddBikeCommandContext
            {
                Name     = name,
                Cost     = cost,
                HourCost = hourCost
            });

            Bike currentBike = GetBikeByName(name);

            _commandBuilder.Execute(new MoveBikeCommandContext
            {
                Bike      = currentBike,
                RentPoint = myRentPoint
            });
        }
Exemple #19
0
        public void PutDeposit(Deposit deposit, RentPoint rentPoint)
        {
            if (deposit == null)
            {
                throw new ArgumentNullException(nameof(deposit));
            }

            switch (deposit.Type)
            {
            case DepositTypes.Money:
                rentPoint.Cashbox.PutMoney(((MoneyDeposit)deposit).Sum);
                break;

            case DepositTypes.Passport:
                rentPoint.Safe.putPassport((PassportDeposit)deposit);
                break;
            }
        }
Exemple #20
0
        public void MoveBike(Bike bike, RentPoint rentPoint)
        {
            Rent rent = _rentRepository.All().SingleOrDefault(x => x.Bike == bike);

            if (rent != null)
            {
                throw new InvalidOperationException("Bike is not free");
            }

            Reserve reserve = _reserveRepository.All().SingleOrDefault((x) => (x.Bike == bike && x.Status == ReserveStatus.Wait));

            if (reserve != null)
            {
                throw new InvalidOperationException("Bike reserved");
            }

            bike.MoveTo(rentPoint);
        }
Exemple #21
0
        public void AddBikeToRentPoint(string bikeName, Employee employee)
        {
            if (_bikeNameVerifier.IsFree(bikeName))
            {
                throw new InvalidOperationException("Bike doesn't exist");
            }

            Bike bike = _bikeRepository.All().SingleOrDefault <Bike>(x => x.Name == bikeName);

            RentPoint rentPoint = _rentPointRepository.All().SingleOrDefault <RentPoint>(x => x.Employee.Equals(employee));

            if (!rentPoint.Bikes.All <Bike>(x => x != bike))
            {
                throw new InvalidOperationException("Bike with same name already exists");
            }

            bike.LockOnRentPoint(rentPoint);
            rentPoint.AddBike(bike);
        }
Exemple #22
0
        public IActionResult Return(string bikeName, string rentPointName)
        {
            RentPoint rentPoint = _queryBuilder.For <RentPoint>().With(new NameCriterion()
            {
                Name = rentPointName
            });
            Bike bike = _queryBuilder.For <Bike>().With(new NameCriterion()
            {
                Name = bikeName
            });

            _commandBuilder.Execute(new ReturnBikeCommandContext()
            {
                Bike      = bike,
                RentPoint = rentPoint,
                IsBroken  = false
            });
            return(View());
        }
        public RentPoint AddRentPoint(Employee employee, decimal money)
        {
            if (employee == null)
            {
                throw new ArgumentNullException(nameof(employee));
            }

            if (money < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(money));
            }

            CashBox cashbox = new CashBox(money);
            Safe    safe    = new Safe();

            RentPoint rentPoint = new RentPoint(employee, safe, cashbox);

            _rentPointRepository.Add(rentPoint);

            return(rentPoint);
        }
Exemple #24
0
        public void Return(Bike bike, RentPoint rentPoint)
        {
            if (bike == null)
            {
                throw new ArgumentNullException(nameof(bike));
            }

            if (rentPoint == null)
            {
                throw new ArgumentNullException(nameof(rentPoint));
            }

            Rent rent = _rentRepository
                        .All()
                        .SingleOrDefault(
                x => x.Bike == bike);

            if (rent == null)
            {
                throw new InvalidOperationException("Rent not found");
            }

            decimal sum = Sum(rent, rent.StartedAt);

            if (bike.Crushed)
            {
                rentPoint.Cashbox.PutMoney(sum);
                if (rent.Deposit.Type == DepositTypes.Passport)
                {
                    _depositService.ReturnDeposit(rent.Deposit, rentPoint);
                }
                _bikeService.Remove(bike);
            }
            else
            {
                _depositService.ReturnDeposit(rent.Deposit, rentPoint);
                rent.End(rentPoint, sum);
            }
            _rentRepository.Remove(rent);
        }
 public ReturnBikeCommandContext(Bike bike, RentPoint rentPoint)
 {
     Bike      = bike;
     RentPoint = rentPoint;
 }
 public void CloseRentPoint(RentPoint rentPoint)
 {
     throw new NotImplementedException();
 }
Exemple #27
0
        public static void Main(string[] args)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder
            .RegisterGeneric(typeof(Repository <>))
            .As(typeof(IRepository <>))
            .SingleInstance();

            containerBuilder
            .RegisterType <BikeNameVerifier>()
            .As <IBikeNameVerifier>();

            containerBuilder
            .RegisterType <BikeService>()
            .As <IBikeService>();

            containerBuilder
            .RegisterType <RentPointService>()
            .As <IRentPointService>();

            containerBuilder
            .RegisterType <EmployeeService>()
            .As <IEmployeeService>();

            containerBuilder
            .RegisterType <RentService>()
            .As <IRentService>();

            containerBuilder
            .RegisterType <DepositCalculator>()
            .As <IDepositCalculator>();

            containerBuilder
            .RegisterType <RentSumCalculate>()
            .As <IRentSumCalculate>();

            containerBuilder.RegisterTypedFactory <ICommandFactory>();
            containerBuilder.RegisterTypedFactory <IQueryFactory>();
            containerBuilder.RegisterTypedFactory <IQueryBuilder>();
            containerBuilder
            .RegisterGeneric(typeof(QueryFor <>))
            .As(typeof(IQueryFor <>));

            containerBuilder
            .RegisterAssemblyTypes(typeof(GetAllRentPointsQuery).GetTypeInfo().Assembly)
            .AsClosedTypesOf(typeof(IQuery <,>));

            containerBuilder
            .RegisterType <CommandBuilder>()
            .As <ICommandBuilder>();
            containerBuilder
            .RegisterAssemblyTypes(typeof(AddBikeCommand).GetTypeInfo().Assembly)
            .AsClosedTypesOf(typeof(ICommand <>));

            containerBuilder.RegisterType <App>();

            IContainer container = containerBuilder.Build();



            App app = container.Resolve <App>();

            Employee  myEmployee = app.CreateEmployee("Nya", "Nyan", "Nyanyan");
            RentPoint rp         = app.AddRentPoint("Компрос", myEmployee);

            Employee otherEmployee = app.CreateEmployee("otherNya", "otherNyan", "otherNyanyan");

            app.AddRentPoint("Ленина", otherEmployee);

            Client client = app.CreateClient("Keke", "Ke", "Kekekeke");
            Client clientWhoWantTakeReservedBike = app.CreateClient("aaa", "a", "aaaaa");

            Deposit deposit = new MoneyDeposit(5000);

            app.AddBike("Кама", 50, 4500, rp);
            app.AddBike("Кама", 100, 4500, rp);

            //Bike iChooseThisBike = app.GetBikes().FirstOrDefault(x => x.Name == "Кама");

            //app.ReserveBike(client, iChooseThisBike, DateTime.UtcNow.AddDays(1));

            //app.GetBikeInRent(client, iChooseThisBike, deposit);

            //bool iBrokeBike = true;
            //app.GetBikeInRent(client, iChooseThisBike, deposit);
            //app.ReturnBike(iChooseThisBike, otherRentPoint, iBrokeBike);
            container.Dispose();
        }
 public GetFreeBikesAtRentPointCriteria(RentPoint rentPoint)
 {
     RentPoint = rentPoint;
 }
Exemple #29
0
        public static void Main(string[] args)
        {
            var containerBuilder = new ContainerBuilder();

            containerBuilder
            .RegisterGeneric(typeof(Repository <>))
            .As(typeof(IRepository <>))
            .SingleInstance();

            containerBuilder
            .RegisterType <BikeNameVerifier>()
            .As <IBikeNameVerifier>();

            containerBuilder
            .RegisterType <BikeService>()
            .As <IBikeService>();

            containerBuilder
            .RegisterType <RentPointService>()
            .As <IRentPointService>();

            containerBuilder
            .RegisterType <EmployeeService>()
            .As <IEmployeeService>();

            containerBuilder
            .RegisterType <RentService>()
            .As <IRentService>();

            containerBuilder
            .RegisterType <DepositCalculator>()
            .As <IDepositCalculator>();

            containerBuilder
            .RegisterType <RentSumCalculate>()
            .As <IRentSumCalculate>();

            containerBuilder
            .RegisterType <ReserveService>()
            .As <IReserveService>();

            containerBuilder.RegisterAssemblyTypes(typeof(RentPointCriterion).GetTypeInfo().Assembly).AsClosedTypesOf(typeof(IQuery <,>));
            containerBuilder.RegisterGeneric(typeof(QueryFor <>)).As(typeof(IQueryFor <>));
            containerBuilder.RegisterTypedFactory <IQueryBuilder>().InstancePerLifetimeScope();
            containerBuilder.RegisterTypedFactory <IQueryFactory>().InstancePerLifetimeScope();

            containerBuilder.RegisterAssemblyTypes(typeof(AddRentPointCommand).GetTypeInfo().Assembly).AsClosedTypesOf(typeof(ICommand <>));
            containerBuilder.RegisterType <CommandBuilder>().As <ICommandBuilder>().InstancePerLifetimeScope();
            containerBuilder.RegisterTypedFactory <ICommandFactory>().InstancePerLifetimeScope();

            containerBuilder.RegisterType <App>();

            IContainer container = containerBuilder.Build();



            App app = container.Resolve <App>();

            Employee  myEmployee  = app.CreateEmployee("Nya", "Nyan", "Nyanyan");
            RentPoint myRentPoint = app.AddRentPoint("rp1", "adress1", myEmployee);

            Employee  otherEmployee  = app.CreateEmployee("otherNya", "otherNyan", "otherNyanyan");
            RentPoint otherRentPoint = app.AddRentPoint("rp2", "adress2", otherEmployee);

            Client client = app.CreateClient("Keke", "Ke", "Kekekeke");
            Client clientWhoWantTakeReservedBike = app.CreateClient("aaa", "a", "aaaaa");

            Deposit deposit = new MoneyDeposit(5000);


            app.AddBike("Кама", 50, 4500, myRentPoint);
            app.AddBike("Rainbow Dash", 50, 5000, myRentPoint);
            app.AddBike("Rainbow Crash", 60, 4700, myRentPoint);
            //app.AddBike("Кама", 100, myRentPoint);

            Bike iChooseThisBike = app.GetBikes().FirstOrDefault(x => x.Name == "Кама");


            app.ReserveBike(client, iChooseThisBike, DateTime.UtcNow.AddDays(1));

            //app.GetBikeInRent(client, iChooseThisBike, deposit);

            bool iBrokeBike = true;

            app.GetBikeInRent(client, iChooseThisBike, deposit);
            app.ReturnBike(iChooseThisBike, otherRentPoint, iBrokeBike);

            app.GetRentPoints();

            app.GetAllFreeBikesOnRentPoint(myRentPoint);

            Bike likeItBike = app.GetBikes().FirstOrDefault(x => x.Name == "Rainbow Dash");

            app.ReserveBike(client, likeItBike, DateTime.UtcNow.AddDays(1));

            app.GetOpenReserveByBike(likeItBike);

            app.GetBikes();
            Console.ReadLine();

            container.Dispose();
        }
Exemple #30
0
        public void Execute(AddRentPointCommandContext commandContext)
        {
            RentPoint rp = _rentPointService.AddRentPoint(commandContext.Name, commandContext.Employee, commandContext.Money);

            commandContext.CreatedRentPoint = rp;
        }