/// <summary> /// Checks if <paramref name="IDToCheck"/> is already in use. Returns false if it does, else true. /// </summary> /// <param name="IDToCheck">The ID to check against other wares' ID.</param> /// <param name="sql">True if a sql database is in use, false otherwise.</param> /// <returns>Returns false if <paramref name="IDToCheck"/> is not unique else true.</returns> public static bool UniqueID(string IDToCheck, bool sql = false) { if (!sql) { List <string[]> information = WareInformation.GetWareInformation(); foreach (string[] specificWare in information) { if (specificWare[1] == IDToCheck) { return(false); } } } else { List <List <string> > information = SQLCode.SQLControl.GetValuesAllWare(new string[] { "id" }); foreach (List <string> list in information) { foreach (string str in list) { if (str == IDToCheck) { return(false); } } } } return(true); }
/// <summary> /// Runs the code to view the basic information of all wares. /// </summary> private void WareViewBasicMenu() { if (!SQLCode.SQLControl.DatabaseInUse) { VisualCalculator.WareDisplay(WareInformation.GetWareInformation()); } else { try { List <string[]> informationReady = SQLDataCollection(); VisualCalculator.WareDisplay(informationReady); } catch (Exception e) { Support.ErrorHandling(e, $"Could not collect data: {e.Message}"); } } Support.WaitOnKeyInput(); List <string[]> SQLDataCollection() { List <List <string> > information = SQLCode.SQLControl.GetValuesAllWare(new string[] { "name", "id", "amount", "type" }); List <string[]> informationReady = new List <string[]>(); foreach (List <string> arrayData in information) { informationReady.Add(arrayData.ToArray()); } return(informationReady); } }
/// <summary> /// Runs the code that allows the user to view specific information of all wares. /// </summary> private void WareViewMenu() { Console.Clear(); List <string> searchAttributes = WareInformation.FindAllSearchableAttributesNames(SQLCode.SQLControl.DatabaseInUse); if (!SQLCode.SQLControl.DatabaseInUse) //get attributes { searchAttributes.Add("Type"); } else { searchAttributes.Add("type"); } searchAttributes.Add("Done"); List <string> selectedAttributes = new List <string>(); byte selected; do //select attributes to view { selected = VisualCalculator.MenuRun(searchAttributes.ToArray(), "Select Information To Find"); if (selected != searchAttributes.Count - 1 && !selectedAttributes.Contains(searchAttributes[selected])) { selectedAttributes.Add(searchAttributes[selected]); } } while (selected != searchAttributes.Count - 1); List <Dictionary <string, object> > attributesAndValues; if (selectedAttributes.Count != 0) { //get the data and display it if (!SQLCode.SQLControl.DatabaseInUse) { try { attributesAndValues = WareInformation.GetWareInformation(selectedAttributes); VisualCalculator.WareDisplay(selectedAttributes, attributesAndValues); } catch (NullReferenceException e) { Support.ErrorHandling(e, $"No attibutes were selected. {e.Message}"); } } else { try { List <List <string> > wareValues = SQLCode.SQLControl.GetValuesAllWare(selectedAttributes.ToArray()); VisualCalculator.WareDisplay(selectedAttributes.ToArray(), wareValues); } catch (Exception e) { Support.ErrorHandling(e, $"Encountered an error: {e.Message}"); } } } }
/// <summary> /// Allows for the modifcation of one or more values of the ware with <paramref name="ID"/>. /// /// </summary> /// <param name="ID"></param> public static void ModifyWare(string ID) { if (!SQLCode.SQLControl.DatabaseInUse) { string[] options = null; try { options = GenerateOptions(ID, SQLCode.SQLControl.DatabaseInUse); } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); } if (options != null) { Dictionary <string, object> informations = WareInformation.GetWareInformation(ID, out List <Type> valueTypes); byte?answer; do { answer = VisualCalculator.MenuRun(options, "Select entry to modify"); if (answer != options.Length - 1) { object oldValue = informations[options[(byte)answer]]; if (valueTypes[(byte)answer].IsValueType) { try { object newValue = CollectValue(valueTypes[(byte)answer], oldValue); Publisher.PubWare.AlterWare(ID, newValue, options[(byte)answer]); } catch (Exception e) { ErrorHandling(e); } } else { //string and arrays goes here. if (valueTypes[(byte)answer].FullName == "System.String") { FillOutString(options, answer, oldValue); } else if (valueTypes[(byte)answer].BaseType.Name == "Array") { FillOutArray(options, answer, valueTypes, oldValue); } } } } while (answer != options.Length - 1); } } else //SQL { //get the type of the ID, find the attributes of that ID string[] options = GenerateOptions(ID, SQLCode.SQLControl.DatabaseInUse); string[] columns = new string[options.Length - 1]; string[] allColumns = null; string[] allColumnTypes = null; try { allColumns = SQLCode.StoredProcedures.GetColumnNamesAndTypesSP(out allColumnTypes); } catch (Exception e) { Support.ErrorHandling(e, $"Could not retrive column names and types: {e.Message}"); } if (allColumns != null && allColumnTypes != null) { for (int i = 0; i < columns.Length; i++) { columns[i] = options[i]; } List <string> values = SQLCode.SQLControl.GetValuesSingleWare(columns, $"'{ID}'"); byte? answer; do { answer = VisualCalculator.MenuRun(options, "Select entry to modify"); if (answer != options.Length - 1) { string oldValue = values[(byte)answer] != "" ? values[(byte)answer] : "Null"; OutPut.FullScreenClear(); OutPut.DisplayMessage($"Old Value was {oldValue}. Enter new Value: ", true); string newValue = Console.ReadLine(); //MSSQL does not seem like it has arrays as a datatype for (int i = 0; i < allColumns.Length; i++) { if (allColumns[i] == options[(byte)answer]) { if (allColumnTypes[i] == "nvarchar") { newValue = $"'{newValue}'"; break; } } } try { SQLCode.SQLControl.ModifyWare("Inventory", new string[] { options[(byte)answer] }, new string[] { newValue }, $"id = '{ID}'"); } catch (Exception e) { Reporter.Report(e); OutPut.FullScreenClear(); OutPut.DisplayMessage($"Could not create the ware: {e.Message}", true); Support.WaitOnKeyInput(); } } } while (answer != options.Length - 1); } } void ErrorHandling(Exception e) { Reporter.Report(e); OutPut.FullScreenClear(); OutPut.DisplayMessage(String.Format("Could not convert: {0}", e.InnerException.Message), true); Support.WaitOnKeyInput(); } void FillOutString(string[] options, byte?answer, object oldValue) { OutPut.FullScreenClear(); OutPut.DisplayMessage($"Old Value was {oldValue ?? "Null"}. Enter new Value: ", true); string newValue = Input.GetString(); try { Publisher.PubWare.AlterWare(ID, newValue, options[(byte)answer]); } catch (Exception e) { Support.ErrorHandling(e, $"Encountered an error: {e.Message}"); } } void FillOutArray(string[] options, byte?answer, List <Type> valueTypes, object oldValue) { List <object> objectList = new List <object>(); string[] addValueOptions = new string[] { "Enter Value", "Done" }; byte? valueAnswer; do { valueAnswer = VisualCalculator.MenuRun(addValueOptions, "Add Data Entry"); if (valueAnswer == 0) { if (!valueTypes[(byte)answer].Name.Contains("String")) { //non-string try { objectList.Add(CollectValue(Type.GetType(valueTypes[(byte)answer].FullName.Remove(valueTypes[(byte)answer].FullName.Length - 2, 2)), oldValue)); //code inside of Type.GetType(...) converts an array type to a non-array type } catch (Exception e) { ErrorHandling(e); } } else { //string OutPut.FullScreenClear(); objectList.Add(Input.GetString()); } } } while (valueAnswer != addValueOptions.Length - 1); object[] objectArray = objectList.ToArray(); try { Publisher.PubWare.AlterWare(ID, objectArray, options[(byte)answer]); } catch (Exception e) { Support.ErrorHandling(e, $"Encountered an erorr: {e.Message}"); } } }