protected void PackWithPrioritised(Truck truck, ITruckPackage pack, ref double totalVolume, ref double totalWeight) { var prioritisedCargos = GetOrderedEnumeration(Manager.GetPrioritisedCargos(truck.Volume, truck.Payload)).ToList(); EnumerateCargos(prioritisedCargos, truck, pack, ref totalVolume, ref totalWeight); if (prioritisedCargos.Count > pack.Cargos.Count) { pack.Warnings.Add(PrioritiseWarning); } }
protected override void EnumerateCargos(IEnumerable <Cargo> cargoes, Truck truck, ITruckPackage pack, ref double totalVolume, ref double totalWeight) { foreach (var cargo in cargoes) { if (totalWeight + cargo.Weight > truck.Payload) { break; } if (totalVolume + cargo.Volume <= truck.Volume) { totalVolume += cargo.Volume; totalWeight += cargo.Weight; pack.Cargos.Add(cargo); } } }
protected abstract void EnumerateCargos(IEnumerable <DataAccess.Contract.Models.Cargo> cargoes, Truck truck, ITruckPackage pack, ref double totalVolume, ref double totalWeight);
protected void PackWithNonPrioritised(Truck truck, ITruckPackage pack, ref double totalVolume, ref double totalWeight) { var nonPrioritisedCargos = Manager.GetNonPrioritisedCargos(truck.Volume, truck.Payload).OrderBy(x => x.Weight); EnumerateCargos(nonPrioritisedCargos, truck, pack, ref totalVolume, ref totalWeight); }
protected abstract void EnumerateCargos(IEnumerable <Cargo> cargoes, Truck truck, ITruckPackage pack, ref double totalVolume, ref double totalWeight);