public static ProcessingDepartment HighestWeightProcessingDepartment(this ProcessingDepartment[] departments) { ProcessingDepartment foundDep = null; for (int i = 0; i < departments.Length; i++) { if (departments[i].SortsHigherWeights) { foundDep = departments[i]; } } return(foundDep); }
public static void SortParcels(this Department[] departments, Parcel[] parcels) { List <Parcel> sortableParcels = parcels.ToList(); bool InsurDepExists = departments.ContainsInsuranceDepartment(); InsuranceDepartment inDep = null; if (InsurDepExists) { inDep = departments.GetInsuranceDepartment(); } foreach (Parcel parcel in parcels) { Parcel sortedParcel = null; //Sort into insurance department if (InsurDepExists) { if (!parcel.IsSignedOff() && parcel.Value >= inDep.MinSigningPrice) { inDep.AddParcel(parcel); sortedParcel = parcel; sortableParcels.Remove(sortedParcel); continue; } } //Sort based on weight into correct departments for (int i = 0; i < departments.Length; i++) { if (departments[i] is ProcessingDepartment) { ProcessingDepartment pD = (ProcessingDepartment)departments[i]; float weight = parcel.Weight; if (weight < pD.WeightClass) { pD.AddParcel(parcel); sortedParcel = parcel; sortableParcels.Remove(sortedParcel); break; } } } } ProcessingDepartment pDs = departments.GetProcessingDepartments().HighestWeightProcessingDepartment(); pDs.AddParcels(sortableParcels.ToArray()); }
public static ProcessingDepartment[] SortProcessingDepartmentsAscending(this ProcessingDepartment[] departments) { List <ProcessingDepartment> newProcDeps = new List <ProcessingDepartment>(); for (int i = 0; i < departments.Length; i++) { newProcDeps.Add(departments[i]); } Dictionary <ProcessingDepartment, int> nameWeight = new Dictionary <ProcessingDepartment, int>(); for (int i = 0; i < newProcDeps.Count; i++) { nameWeight.Add(newProcDeps[i], newProcDeps[i].WeightClass); } //remove highest department sorter from list temporarily ProcessingDepartment maxDep = newProcDeps.ToArray().HighestWeightProcessingDepartment(); newProcDeps.Remove(maxDep); //reorder newProcDeps = newProcDeps.OrderBy(x => nameWeight[x]).ToList(); //add highest department sorter to the list again and set new highest weight if (newProcDeps.Count != 0) { maxDep.SetWeight(newProcDeps[newProcDeps.Count - 1].WeightClass); } else { maxDep.SetWeight(0); } newProcDeps.Add(maxDep); return(newProcDeps.ToArray()); }
public static Department[] RemoveProcessingDepartmentAndResort(this Department[] departments, int arrayRowNr) { if (departments[arrayRowNr] == null) { Debug.WriteLine("Department not found"); return(null); } if (departments[arrayRowNr] is InsuranceDepartment) { Debug.WriteLine("Can't remove insurance department"); return(null); } if (departments[arrayRowNr] is ProcessingDepartment) { ProcessingDepartment pDp = (ProcessingDepartment)departments[arrayRowNr]; if (pDp.SortsHigherWeights) { Debug.WriteLine("Can't remove max processing department"); return(null); } List <Department> deps = departments.ToList(); Parcel[] ResortParcels = departments[arrayRowNr].Parcels.ToArray(); int removedWeightClass = pDp.WeightClass; deps.RemoveAt(arrayRowNr); bool updateMaxWeights = false; if (arrayRowNr < deps.Count - 1) { if (deps[arrayRowNr] is ProcessingDepartment) { ProcessingDepartment NewPDp = (ProcessingDepartment)deps[arrayRowNr]; if (NewPDp.SortsHigherWeights) { updateMaxWeights = true; } } else if (deps[arrayRowNr + 1] is ProcessingDepartment) { ProcessingDepartment NewPDp = (ProcessingDepartment)deps[arrayRowNr + 1]; if (NewPDp.SortsHigherWeights) { updateMaxWeights = true; } } } if (updateMaxWeights) { ProcessingDepartment NewPDp = deps.ToArray().HighestWeightProcessingDepartment(); InsuranceDepartment NewIDp = deps.ToArray().GetInsuranceDepartment(); if (arrayRowNr > 0) { ProcessingDepartment lowerPDp = (ProcessingDepartment)deps[arrayRowNr - 1]; NewPDp.SetWeight(lowerPDp.WeightClass); } else { NewPDp.SetWeight(0); } deps.Remove(NewPDp); deps.Remove(NewIDp); deps.Add(NewPDp); deps.Add(NewIDp); } deps.ToArray().SortParcels(ResortParcels); return(deps.ToArray()); } else { Debug.WriteLine("Something went wrong?"); return(null); } }