private ItemCounts UpdateList() { // Declare lists List <Tent> tentTypes = new List <Tent>(); List <string> tentSizes = new List <string>(); List <int> tentQties = new List <int>(); List <string> tentCoverTypes = new List <string>(); List <string> tentHoldDowns = new List <string>(); List <string> tentWalls = new List <string>(); List <string> tentLegs = new List <string>(); ItemCounts counts = new ItemCounts(); // Loop through tentDGV and store data in lists if (tentDGV.Rows.Count != 0) { foreach (DataGridViewRow row in tentDGV.Rows) { tentTypes.Add((Tent)row.Cells[0].Value); tentSizes.Add(row.Cells[1].Value.ToString()); tentQties.Add(Convert.ToInt32(row.Cells[2].Value)); tentCoverTypes.Add(row.Cells[3].Value.ToString()); tentHoldDowns.Add(row.Cells[4].Value.ToString()); tentWalls.Add(row.Cells[5].Value.ToString()); tentLegs.Add(row.Cells[6].Value.ToString()); } // Create object with the lists and send for processing var ListOfLists = new ListNames(tentTypes, tentSizes, tentQties, tentCoverTypes, tentHoldDowns, tentWalls, tentLegs); DataHandler handler = new DataHandler(); counts = handler.CountTents(ref ListOfLists); } if (counts != null) { PopulatePreview(counts); } return(counts); }
public ItemCounts CountTents(ref ListNames ListOfLists) { // Declare lists of TentItems List <TentItems> MetalItemList = new List <TentItems>(); List <TentItems> WallList = new List <TentItems>(); List <TentItems> CoverList = new List <TentItems>(); List <TentItems> HoldDownList = new List <TentItems>(); // Declare object of ItemCounts class ItemCounts counts = new ItemCounts(); // Declare variables. Legs leg = Legs.none; string legTentType = null; IDatabase db = new SmallTentDB(); IEnumerable <SmallTentDB> SmallDB = ReadTentDatabase <SmallTentDB>(UserInterface.Tent.Small); List <SmallTentDB> Small = SmallDB.ToList(); IEnumerable <LargeTentDB> LargeDB = ReadTentDatabase <LargeTentDB>(UserInterface.Tent.Large); List <LargeTentDB> Large = LargeDB.ToList(); IEnumerable <FrameDB> FrameDB = ReadTentDatabase <FrameDB>(UserInterface.Tent.Frame); List <FrameDB> Frame = FrameDB.ToList(); IEnumerable <ClearSpanDB> ClearSpanDB = ReadTentDatabase <ClearSpanDB>(UserInterface.Tent.ClearSpan); List <ClearSpanDB> ClearSpan = ClearSpanDB.ToList(); // Loop through all tents for (int i = 0; i < ListOfLists.tentType.Count; ++i) { // Get the quantity of that particular tent int qty = ListOfLists.tentQties[i]; // Get the cover size, type of cover and type of tent string size = ListOfLists.tentSizes[i]; UserInterface.Tent typeOfTent = ListOfLists.tentType[i]; string coverType = ListOfLists.tentCoverTypes[i]; // Depending on the type and size of tent, get the appropriate row in the database. switch (ListOfLists.tentType[i]) { case UserInterface.Tent.Small: { legTentType = "ST"; // Get the appropriate row from the small tent database, depending on the size of the tent. SmallTentDB SmallRow = Small.Find(b => b.Size == size); db = SmallRow; if (SmallRow != null) { // Metal list // TODO: string builder for legs, cable, poteau de milieu HandleList("Pipe", SmallRow.Pipe * qty, MetalItemList); HandleList("Pipe 5ft", SmallRow.Pipe5 * qty, MetalItemList); HandleList("T - 20", SmallRow.SmallTee * qty, MetalItemList); HandleList("T - 30", SmallRow.LargeTee * qty, MetalItemList); HandleList("Entures", SmallRow.Enture * qty, MetalItemList); if (size == "Hexagon") { HandleList("Coins Hex", SmallRow.Corner * qty, MetalItemList); HandleList("Hexagone", qty, CoverList); } else { HandleList("Coins", SmallRow.Corner * qty, MetalItemList); HandleList(SmallRow.Size + " " + coverType, qty, CoverList); } HandleList("Brace - 30", SmallRow.Brace * qty, MetalItemList); HandleList(string.Format("PM {0}", size), SmallRow.MiddlePost * qty, MetalItemList); HandleList(string.Format("Cables {0}", size), SmallRow.Cable * qty, WallList); } } break; case UserInterface.Tent.Large: legTentType = "BT"; // Get the appropriate row from the large tent database, depending on the size of the tent. LargeTentDB LargeRow = Large.Find(b => b.Size == size); db = LargeRow; if (LargeRow != null) { HandleList(string.Format("PM {0}", size.Substring(0, 2)), LargeRow.MiddlePost * qty, MetalItemList); HandleList("Plates", LargeRow.Plates * qty, MetalItemList); HandleList(string.Format("Mid {0}' x 20' {1}", size.Substring(0, 2), coverType), LargeRow.Mid20 * qty, CoverList); HandleList(string.Format("Mid {0}' x 30' {1}", size.Substring(0, 2), coverType), LargeRow.Mid30 * qty, CoverList); HandleList(string.Format("End {0}' {1}", size.Substring(0, 2), coverType), 2 * qty, CoverList); } break; case UserInterface.Tent.Frame: // Get the appropriate row from the frame database, depending on the size of the tent. FrameDB FrameRow = Frame.Find(b => b.Size == size); db = FrameRow; if (FrameRow != null) { // TODO: Handle mids and ends after database is fixed HandleList("Mid 10' " + coverType, FrameRow.Cover10 * qty, CoverList); HandleList("Mid 15' " + coverType, FrameRow.Cover15 * qty, CoverList); HandleList("End Frame " + coverType, qty, CoverList); } break; case UserInterface.Tent.ClearSpan: // Get the appropriate row from the ClearSpan database, depending on the size of the tent. ClearSpanDB ClearSpanRow = ClearSpan.Find(b => b.Size == size); db = ClearSpanRow; // Get the width of the ClearSpan int ClearSpanWidth = Convert.ToInt32(size.Substring(0, 2)); if (ClearSpanRow != null) { HandleList(string.Format("ClearSpan {0}' x 10' {1}", ClearSpanWidth.ToString(), coverType), ClearSpanRow.Cover10 * qty, CoverList); HandleList(string.Format("ClearSpan {0}' x 15' {1}", ClearSpanWidth.ToString(), coverType), ClearSpanRow.Cover15 * qty, CoverList); switch (ClearSpanWidth) { case 30: HandleList("Triangle 30'", ClearSpanRow.Triangle * qty, CoverList); break; case 40: HandleList("Triangle 40'", ClearSpanRow.Triangle * qty, CoverList); break; case 50: HandleList("Triangle 50'", ClearSpanRow.Triangle * qty, CoverList); break; } if (ListOfLists.tentWalls[i] != "None") { switch (ListOfLists.tentWalls[i]) { case "Full Plain": HandleList("Mur CSP 10'", ClearSpanRow.CSPWalls10 * qty, WallList); HandleList("Mur CSP 15'", ClearSpanRow.CSPWalls15 * qty, WallList); HandleList("Mur CSP 20'", ClearSpanRow.CSPWalls20 * qty, WallList); break; case "Full Bay Window": HandleList("Mur CSP 10' Bay", ClearSpanRow.CSPWalls10 * qty, WallList); HandleList("Mur CSP 15' Bay", ClearSpanRow.CSPWalls15 * qty, WallList); HandleList("Mur CSP 20' Bay", ClearSpanRow.CSPWalls20 * qty, WallList); break; case "Full French Window": HandleList("Mur CSP 10' FW", ClearSpanRow.CSPWalls10 * qty, WallList); HandleList("Mur CSP 15' FW", ClearSpanRow.CSPWalls15 * qty, WallList); HandleList("Mur CSP 20' FW", ClearSpanRow.CSPWalls20 * qty, WallList); break; case "Half Plain Half Bay Window": HandleList("Mur CSP 10'", (int)System.Math.Ceiling((double)ClearSpanRow.CSPWalls10 / 2) * qty, WallList); HandleList("Mur CSP 15'", (int)System.Math.Ceiling((double)ClearSpanRow.CSPWalls15 / 2) * qty, WallList); HandleList("Mur CSP 20'", (int)System.Math.Ceiling((double)ClearSpanRow.CSPWalls20 / 2) * qty, WallList); HandleList("Mur CSP 10' Bay", (int)System.Math.Ceiling((double)ClearSpanRow.CSPWalls10 / 2) * qty, WallList); HandleList("Mur CSP 15' Bay", (int)System.Math.Ceiling((double)ClearSpanRow.CSPWalls15 / 2) * qty, WallList); HandleList("Mur CSP 20' Bay", (int)System.Math.Ceiling((double)ClearSpanRow.CSPWalls20 / 2) * qty, WallList); break; } } } break; } // Hold Down list switch (ListOfLists.tentHoldDowns[i]) { case "Pins": HandleList("White Pins", db.PinsW * qty, HoldDownList); HandleList("Red Pins", db.PinsR * qty, HoldDownList); break; case "Water Barrels": HandleList("Water Barrels", db.Barrels * qty, HoldDownList); break; case "250 lb Concrete Block": HandleList("250 lb Block", db.Concrete250 * qty, HoldDownList); break; case "400 lb Concrete Block": HandleList("400 lb Block", db.Concrete400 * qty, HoldDownList); break; case "600 lb Concrete Block": HandleList("600 lb Block", db.Concrete600 * qty, HoldDownList); break; case "1/2 ton Concrete Block": HandleList("1/2 ton Block", db.ConcreteHalfTon * qty, HoldDownList); break; case "1 ton Concrete Block": HandleList("1 ton Block", db.ConcreteTon * qty, HoldDownList); break; } //Comealongs HandleList("Come Along", db.ComeAlong * qty, HoldDownList); // If the tent is not hexagon, build the string for type of legs and handle it string tentLegs = ListOfLists.tentLegs[i]; if (tentLegs != "Hexagon") { string LegsForList = string.Format("Pattes {0} {1}", tentLegs, legTentType); HandleList(LegsForList, db.Legs * qty, MetalItemList); // Assign enum depending on leg type if (tentLegs == "8 ft" || tentLegs == "8 ft Adjustable") { leg = Legs.shortLegs; } else if (tentLegs == "10 ft" || tentLegs == "10 ft Adjustable") { leg = Legs.longLegs; } } else { // If the size of the cover selected is not hexagon, throw an error. if (ListOfLists.tentSizes[i] != "Hexagon") { throw new Exception("Hexagon legs were chosen, but the cover type for this tent is not Hexagon."); } else { // Assign shortLegs enum to leg variable because hex tents have 8' high walls... leg = Legs.shortLegs; HandleList("Pattes Hex", db.Legs * qty, MetalItemList); } } // This can definitely be optimized but it works... // Insert walls in list. if (leg != Legs.none && ListOfLists.tentWalls[i] != "None") { string leg_length = null; if (leg == Legs.longLegs) { leg_length = ", 10'"; } switch (ListOfLists.tentWalls[i]) { case "Full Plain": HandleList(string.Format("Murs 10' P{0}", leg_length), db.Walls10 * qty, WallList); HandleList(string.Format("Murs 15' P{0}", leg_length), db.Walls15 * qty, WallList); HandleList(string.Format("Murs 20' P{0}", leg_length), db.Walls20 * qty, WallList); break; case "Full Window": HandleList(string.Format("Murs 10' W{0}", leg_length), db.Walls10 * qty, WallList); HandleList(string.Format("Murs 15' W{0}", leg_length), db.Walls15 * qty, WallList); HandleList(string.Format("Murs 20' W{0}", leg_length), db.Walls20 * qty, WallList); break; case "Half Plain Half Window": HandleList(string.Format("Murs 10' P{0}", leg_length), (int)System.Math.Ceiling((double)db.Walls10 / 2) * qty, WallList); HandleList(string.Format("Murs 15' P{0}", leg_length), (int)System.Math.Ceiling((double)db.Walls15 / 2) * qty, WallList); HandleList(string.Format("Murs 20' P{0}", leg_length), (int)System.Math.Ceiling((double)db.Walls20 / 2) * qty, WallList); HandleList(string.Format("Murs 10' W{0}", leg_length), (int)System.Math.Ceiling((double)db.Walls10 / 2) * qty, WallList); HandleList(string.Format("Murs 15' W{0}", leg_length), (int)System.Math.Ceiling((double)db.Walls15 / 2) * qty, WallList); HandleList(string.Format("Murs 20' W{0}", leg_length), (int)System.Math.Ceiling((double)db.Walls20 / 2) * qty, WallList); break; case "Full Plain Fiesta": HandleList(string.Format("Murs 10' PF, {0}", leg_length), db.Walls10 * qty, WallList); HandleList(string.Format("Murs 15' PF, {0}", leg_length), db.Walls15 * qty, WallList); HandleList(string.Format("Murs 20' PF, {0}", leg_length), db.Walls20 * qty, WallList); break; case "Full Window Fiesta": HandleList(string.Format("Murs 10' WF, {0}", leg_length), db.Walls10 * qty, WallList); HandleList(string.Format("Murs 15' WF, {0}", leg_length), db.Walls15 * qty, WallList); HandleList(string.Format("Murs 20' WF, {0}", leg_length), db.Walls20 * qty, WallList); break; case "Half Plain Half Window Fiesta": HandleList(string.Format("Murs 10' PF, {0}", leg_length), (int)System.Math.Ceiling((double)db.Walls10 / 2) * qty, WallList); HandleList(string.Format("Murs 15' PF, {0}", leg_length), (int)System.Math.Ceiling((double)db.Walls15 / 2) * qty, WallList); HandleList(string.Format("Murs 20' PF, {0}", leg_length), (int)System.Math.Ceiling((double)db.Walls20 / 2) * qty, WallList); HandleList(string.Format("Murs 10' WF, {0}", leg_length), (int)System.Math.Ceiling((double)db.Walls10 / 2) * qty, WallList); HandleList(string.Format("Murs 15' WF, {0}", leg_length), (int)System.Math.Ceiling((double)db.Walls15 / 2) * qty, WallList); HandleList(string.Format("Murs 20' WF, {0}", leg_length), (int)System.Math.Ceiling((double)db.Walls20 / 2) * qty, WallList); break; } } } // Collect all the lists into the "counts" object to be returned. counts.Covers = CoverList; counts.Metal = MetalItemList; counts.TieDowns = HoldDownList; counts.Walls = WallList; return(counts); }