public async void CreateTwoTripBagsForTrip() { var dow = new DayOfWork { User = user, Elements = new List <TripElement> { new TripElement { Id = 1, Weight = 30 }, new TripElement { Id = 2, Weight = 30 }, new TripElement { Id = 3, Weight = 1 }, new TripElement { Id = 4, Weight = 1 } } }; var result = await calculationService.CalculateTripAsync(dow); Assert.Equal(2, result.Bags.Count); Assert.True(result.Bags.All(b => b.BagWeight == 31)); }
public async void CreateThreeTripBagWhenThereIsTooMuchElements() { var dow = new DayOfWork { User = user, Elements = new List <TripElement> { new TripElement { Id = 1, Weight = 9 }, new TripElement { Id = 2, Weight = 19 }, new TripElement { Id = 3, Weight = 29 }, new TripElement { Id = 4, Weight = 39 }, new TripElement { Id = 5, Weight = 49 }, new TripElement { Id = 6, Weight = 59 } } }; var result = await calculationService.CalculateTripAsync(dow); Assert.Equal(3, result.Bags.Count); }
public async Task <JsonResult> Post([FromBody] DayOfWork days, [FromHeader] string Authorization) { string token = Authorization.Split(' ')[1]; var user = (from bb in _context.Auths join aa in _context.Tokens on bb.id equals aa.user_id where aa.access == token select bb).FirstOrDefault(); if (user.role == "staff") { var temp = await _context.EmployeeOwners.Where(x => x.id_user == user.id).FirstOrDefaultAsync(); days.accountId = temp.id; } try { days.dttmStart = days.dttmStart.AddHours(3); days.dttmEnd = days.dttmEnd.AddHours(3); await _context.dayOfWorks.AddAsync(days); await _context.SaveChangesAsync(); return(new JsonResult(_responce.Return_Responce(System.Net.HttpStatusCode.Created, days, null))); } catch (Exception ex) { return(new JsonResult(_responce.Return_Responce(System.Net.HttpStatusCode.BadRequest, null, ex.Message))); } }
public async Task <Trip> CalculateTripAsync(DayOfWork dow) { _logger.Log(LogLevel.Information, $"{nameof(TripCalculationService)}: {nameof(CalculateTripAsync)}: started", dow); var user = _userService.GetUserByIdentityNumber(dow.User.IdentityNumber); if (user == null) { dow.User = await _userService.AddUserAsync(dow.User); } dow = await _dayOfWorkService.AddDayOfWorkAsync(dow); var trip = new Trip(); while (trip.ElementsAmount < dow.Elements.Count) { var tripBag = CreateTripBag(dow.Elements.Where(e => !trip.Bags.Any(b => b.Elements.Contains(e)))); if (tripBag.AparentBagWeight < _maxWeight) { MergeBagToLighestBag(trip, tripBag); } else { trip.Bags.Add(tripBag); } } trip = await _tripService.AddTripAsync(trip); _logger.LogInformation($"{nameof(TripCalculationService)}: {nameof(CalculateTripAsync)}: finished", trip); return(trip); }
private void SetTime(DayOfWork ts, TimePicker tp1, TimePicker tp2) { if (tp1.Value != null && tp2.Value != null) { ts.start = tp1.Value.Value.TimeOfDay; ts.end = tp2.Value.Value.TimeOfDay; } }
public async Task <DayOfWork> AddDayOfWorkAsync(DayOfWork dow) { var result = await _context.DayOfWorks.AddAsync(dow); await _context.SaveAsync(); return(result.Entity); }
public async Task <ActionResult <TripDto> > CalculateTrip([FromBody] DayOfWork dow) { _logger.Log(LogLevel.Information, $"{nameof(TripController)}: {nameof(CalculateTrip)}", dow); if (string.IsNullOrEmpty(dow.User.IdentityNumber)) { var ex = new NullReferenceException("IdentityNumber in DayOfWork.User is empty or null"); _logger.LogError($"{nameof(TripController)}: {nameof(CalculateTrip)}", ex); return(null); } var trip = await _calculationService.CalculateTripAsync(dow); var tripDto = _mapper.Map <TripDto>(trip); return(Ok(tripDto)); }
public async void CreateTwoTripBagsWhenThereIsRoom() { var dow = new DayOfWork { User = user, Elements = new List <TripElement> { new TripElement { Id = 1, Weight = 1 }, new TripElement { Id = 2, Weight = 2 }, new TripElement { Id = 3, Weight = 3 }, new TripElement { Id = 4, Weight = 4 }, new TripElement { Id = 5, Weight = 5 }, new TripElement { Id = 6, Weight = 6 }, new TripElement { Id = 7, Weight = 7 }, new TripElement { Id = 8, Weight = 8 }, new TripElement { Id = 9, Weight = 9 }, new TripElement { Id = 10, Weight = 10 }, new TripElement { Id = 11, Weight = 11 } } }; var result = await calculationService.CalculateTripAsync(dow); Assert.Equal(2, result.Bags.Count); Assert.True(result.Bags.All(b => b.BagWeight < maxWeight)); }
public async void CreateEightTripBagsForTheBorderCase() { var dow = new DayOfWork { User = user, Elements = new List <TripElement> { new TripElement { Id = 1, Weight = 32 }, new TripElement { Id = 2, Weight = 56 }, new TripElement { Id = 3, Weight = 76 }, new TripElement { Id = 4, Weight = 8 }, new TripElement { Id = 5, Weight = 44 }, new TripElement { Id = 6, Weight = 60 }, new TripElement { Id = 7, Weight = 47 }, new TripElement { Id = 8, Weight = 85 }, new TripElement { Id = 9, Weight = 71 }, new TripElement { Id = 10, Weight = 91 } } }; var result = await calculationService.CalculateTripAsync(dow); Assert.Equal(8, result.Bags.Count); }
public async void CreateOneTripBagWhenThereIsNoOption() { var dow = new DayOfWork { User = user, Elements = new List <TripElement> { new TripElement { Id = 1, Weight = 20 }, new TripElement { Id = 2, Weight = 20 }, new TripElement { Id = 3, Weight = 20 } } }; var result = await calculationService.CalculateTripAsync(dow); Assert.Equal(1, result.Bags.Count); Assert.Equal(60, result.Bags.Sum(b => b.BagWeight)); }