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);
        }
Example #5
0
 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);
        }
Example #7
0
        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));
        }