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 })); }
public void MoveBike(Bike bike, RentPoint rentPoint) { _commandBuilder.Execute(new MoveBikeCommandContext() { Bike = bike, RentPoint = rentPoint }); }
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)); }
public void ReturnBike(Bike bike, RentPoint rentPoint, bool IsBroken) { _commandBuilder.Execute(new ReturnBikeCommandContext() { Bike = bike, RentPoint = rentPoint, IsBroken = IsBroken }); }
public void AddBike(string name, decimal hourCost, decimal cost, RentPoint myRentPoint) { _commandBuilder.Execute(new AddBikeCommandContext() { Name = name, HourCost = hourCost, Cost = cost, RentPoint = myRentPoint }); }
public IActionResult GetRentPoint(int id) { RentPoint rentPoint = rentPointRepository.GetOne(id); if (rentPoint is null) { return(NotFound()); } return(Ok(rentPoint)); }
public IEnumerable<Bike> GetAllFreeBikesOnRentPoint(RentPoint rentPoint) { return _queryBuilder .For<IEnumerable<Bike>>() .With(new RentPointCriterion { RentPoint = rentPoint } ) ; }
public IActionResult EditRentPoint([FromBody] RentPoint rentPoint, int id) { try { rentPointRepository.Edit(id, rentPoint); return(Ok()); } catch (Exception exe) { return(BadRequest(exe.Message)); } }
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(); }
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)); }
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 }); }
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; } }
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); }
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); }
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); }
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(); }
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; }
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(); }
public void Execute(AddRentPointCommandContext commandContext) { RentPoint rp = _rentPointService.AddRentPoint(commandContext.Name, commandContext.Employee, commandContext.Money); commandContext.CreatedRentPoint = rp; }