public OrderDataFixture() { var _lineItems = new List <InputOrderProduct>(); var date = DateTime.Now; var guid1 = Guid.NewGuid(); var guid2 = Guid.NewGuid(); var carrierId = Guid.NewGuid(); var guid1tanks = new List <Tank> { new Tank(1, guid1, 1, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 1000), new Tank(2, guid1, 2, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 1500) }; _gasStation1 = new GasStation(guid1, guid1tanks, new TimeRange(new TimeSpan(12, 0, 0), new TimeSpan(23, 59, 0)) , Guid.NewGuid()); var guid2tanks = new List <Tank> { new Tank(1, guid2, 1, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 500), new Tank(2, guid2, 2, new Measurement(TankMeasurement.Gallons, 100, 100, 800), 2000) }; _gasStation2 = new GasStation(guid2, guid2tanks, new TimeRange(new TimeSpan(12, 0, 0), new TimeSpan(23, 59, 0)) , Guid.NewGuid()); _lineItems.Add(new InputOrderProduct { TankId = 1, Quantity = 100 }); _inputOrder = new InputOrder { Comments = "New Order", GasStationId = Guid.NewGuid(), FromTime = date, ToTime = date.AddHours(8), LineItems = _lineItems }; _gasStation1Schedule = new GasStationSchedule(_gasStation1.Id, ScheduleType.ByDay); _gasStation2Schedule = new GasStationSchedule(_gasStation2.Id, ScheduleType.ByTime); _gasStation1Tank1Schedule = new GasStationTankSchedule(1, 500); _gasStation1Tank2Schedule = new GasStationTankSchedule(2, 500); _gasStation2Tank1Schedule = new GasStationTankSchedule(3, 500); _gasStation2Tank2Schedule = new GasStationTankSchedule(4, 500); _gasStation1SchedulesByDay = new List <GasStationScheduleByDay> { new GasStationScheduleByDay(_gasStation1.Id, DayOfWeek.Monday), new GasStationScheduleByDay(_gasStation1.Id, DayOfWeek.Thursday) }; _gasStation2ScheduleByTime = new List <GasStationScheduleByTime> { new GasStationScheduleByTime(_gasStation2.Id, new TimeSpan(12)) }; _carriers = new List <Carrier> { new Carrier(carrierId, 5000, new TimeRange(new TimeSpan(6, 0, 0), new TimeSpan(18, 0, 0))) }; _gasStation1Strategy = new OrderStrategy(_gasStation1.Id, OrderType.Schedule); _gasStation2Strategy = new OrderStrategy(_gasStation2.Id, OrderType.Schedule); var order1 = Order.Create( new InputOrder { Comments = "Test Order", CarrierId = Guid.NewGuid(), FromTime = new DateTime(2020, 9, 8, 18, 0, 0), ToTime = new DateTime(2020, 9, 9, 5, 0, 0), GasStationId = GasStations.FirstOrDefault().Id, LineItems = GasStations.FirstOrDefault().Tanks.Select(x => new InputOrderProduct { Quantity = x.Measurement.Quantity, TankId = x.Id }), OrderType = OrderType.Manual }, GasStations.FirstOrDefault() ) !.Entity; var order2 = Order.Create( new InputOrder { Comments = "Test Order", CarrierId = Guid.NewGuid(), FromTime = new DateTime(2020, 9, 8, 18, 0, 0), ToTime = new DateTime(2020, 9, 9, 5, 0, 0), GasStationId = GasStations.LastOrDefault().Id, LineItems = GasStations.LastOrDefault().Tanks.Select(x => new InputOrderProduct { Quantity = x.Measurement.Quantity, TankId = x.Id }), OrderType = OrderType.Manual }, GasStations.LastOrDefault() ) !.Entity; var order3 = Order.Create( new InputOrder { Comments = "Test Order", CarrierId = Guid.NewGuid(), FromTime = new DateTime(2020, 11, 8, 6, 0, 0), ToTime = new DateTime(2020, 11, 8, 9, 0, 0), GasStationId = GasStations.FirstOrDefault().Id, LineItems = GasStations.FirstOrDefault().Tanks.Select(x => new InputOrderProduct { Quantity = x.Measurement.Quantity, TankId = x.Id }), OrderType = OrderType.Manual }, GasStations.FirstOrDefault() ) !.Entity; _orders = new List <Order> { order1 !, order2 !, order3 ! }; }
private static IOrderedEnumerable <Region> OrderRegions(this IEnumerable <Region> regions, OrderStrategy orderStrategy) { switch (orderStrategy) { default: case OrderStrategy.MostNumberOfArmies: return(regions.OrderByDescending(region => region.NbrOfArmies)); case OrderStrategy.MostQualifiedArmiesNearby: return(regions.OrderByDescending(region => region.Neighbours .Where(neighbour => neighbour.IsOccupiedBy(PlayerType.Me)) .Where(neighbor => neighbor.NbrOfArmies > 5) .Where(neighbor => neighbor.NbrOfArmies > region.NbrOfArmies * 2) .Select(reg => reg.NbrOfArmies).Sum() )); case OrderStrategy.InternalFirst: return(regions.OrderBy(region => region.Neighbours.Any(neighbor => neighbor.SuperRegion != region.SuperRegion) ? 1 : 0)); case OrderStrategy.NeutralNeighboursFirst: return(regions.OrderByDescending(region => region.Neighbours.Any(neighbor => neighbor.IsOccupiedBy(PlayerType.Neutral) && neighbor.SuperRegion == region.SuperRegion) ? 1 : 0)); case OrderStrategy.EnemyNeighboursFirst: return(regions.OrderByDescending(region => region.Neighbours.Count(neighbor => neighbor.IsOccupiedBy(PlayerType.Opponent)))); case OrderStrategy.MostArmiesNearby: return(regions.OrderByDescending(region => region.Neighbours.Where(neighbour => neighbour.IsOccupiedBy(PlayerType.Me)).Select(reg => reg.NbrOfArmies).Sum())); } }
private static IOrderedEnumerable <Region> ThenOrderRegions(this IOrderedEnumerable <Region> regions, OrderStrategy orderStrategy) { switch (orderStrategy) { default: return(regions); case OrderStrategy.MostNumberOfArmies: return(regions.ThenByDescending(region => region.NbrOfArmies)); case OrderStrategy.VeryLargeRegionsLast: return(regions.ThenByDescending(region => region.NbrOfArmies < 100 ? 1 : 0)); case OrderStrategy.SmallSuperRegionsFirst: return(regions.ThenBy(region => (region.SuperRegion.ChildRegions.OccupiedBy(PlayerType.Me).Count()))); case OrderStrategy.NeutralNeighboursFirst: return(regions.ThenByDescending(region => region.Neighbours.Any(neighbor => neighbor.IsOccupiedBy(PlayerType.Neutral) && neighbor.SuperRegion == region.SuperRegion) ? 1 : 0)); case OrderStrategy.NeutralNeighboursOnOtherSuperRegionsFirst: return(regions.ThenByDescending(region => region.Neighbours.Any(neighbor => neighbor.IsOccupiedBy(PlayerType.Neutral) && neighbor.SuperRegion != region.SuperRegion) ? 1 : 0)); case OrderStrategy.EnemyNeighboursFirst: return(regions.ThenByDescending(region => region.Neighbours.Count(neighbor => neighbor.IsOccupiedBy(PlayerType.Opponent)))); case OrderStrategy.MostArmiesNearby: return(regions.ThenByDescending(region => region.Neighbours.Where(neighbour => neighbour.IsOccupiedBy(PlayerType.Me)).Select(reg => reg.NbrOfArmies).Sum())); } }
public AdministrationDataFixture() { var _gasStationId = Guid.NewGuid(); var _dateTime1 = new DateTime(2020, 8, 1, 9, 30, 0); var _dateTime2 = new DateTime(2020, 8, 2, 9, 30, 0); _gasStation = new GasStation(_gasStationId); var tank1 = new Tank(); var product = new Product(); _orderStrategy = new OrderStrategy(); _tanks = new List <Tank>(); _tankSales = new List <TankSale>(); tank1.GasStationId = _gasStationId; tank1.Number = 1; tank1.ProductId = 1; tank1.Name = "Tank1"; tank1.AddMeasurement(new Measurement(TankMeasurement.Gallons, 100, 100, 500)); var tank2 = new Tank(); tank2.GasStationId = _gasStationId; tank2.Number = 1; tank2.Name = "Tank2"; tank2.AddMeasurement(new Measurement(TankMeasurement.Gallons, 100, 100, 500)); var tank1Sale1 = new TankSale(); tank1Sale1.Quantity = 100; tank1Sale1.SaleTime = _dateTime1; var tank1Sale2 = new TankSale(); tank1Sale2.Quantity = 100; tank1Sale2.SaleTime = _dateTime2; var tank2Sale1 = new TankSale(); tank2Sale1.Quantity = 100; tank2Sale1.SaleTime = _dateTime1; var tank2Sale2 = new TankSale(); tank2Sale2.Quantity = 100; tank2Sale2.SaleTime = _dateTime2; var dispatcherGrp = new DispatcherGroup { Name = "DP1" }; using (var context = new AdministrationContext()) { _gasStation.Tanks.Add(tank1); _gasStation.Tanks.Add(tank2); context.DispatcherGroup.Add(dispatcherGrp); if (context.GasStations.Any()) { context.GasStations.RemoveRange(context.GasStations); context.SaveChanges(); } if (context.Products.Any()) { context.Products.RemoveRange(context.Products); context.SaveChanges(); } if (context.TankSales.Any()) { context.TankSales.RemoveRange(context.TankSales); context.SaveChanges(); } context.Products.Add(product); context.SaveChanges(); tank1.ProductId = product.Id; tank2.ProductId = product.Id; _gasStation.DispatcherGroupId = dispatcherGrp.Id; context.GasStations.Add(_gasStation); context.SaveChanges(); _tanks.AddRange(new[] { tank1, tank2 }); tank1Sale1.TankId = tank1.Id; tank1Sale2.TankId = tank1.Id; tank2Sale1.TankId = tank2.Id; tank2Sale2.TankId = tank2.Id; context.TankSales.AddRange(new[] { tank1Sale1, tank1Sale2, tank2Sale1, tank2Sale2 }); _orderStrategy.GasStationId = _gasStation.Id; _orderStrategy.OrderType = OrderType.Schedule; context.OrderStrategies.Add(_orderStrategy); context.SaveChanges(); _tankSales.AddRange(new[] { tank1Sale1, tank1Sale2, tank2Sale1, tank2Sale2 }); } }