/// <summary> /// Runs the menu for removing a ware. /// </summary> private void WareRemoveMenu() { string ID = CollectID(); if (Support.IDExist(ID, SQLCode.SQLControl.DatabaseInUse)) { if (WareModifier.RemoveWare(ID)) { ProgressInformer("{0} was removed.", ID); } else { ProgressInformer("{0} was not removed.", ID); } } else { OutPut.DisplayMessage("ID does not exist"); Support.WaitOnKeyInput(); } void ProgressInformer(string message, string part) { OutPut.FullScreenClear(); string text = String.Format(message, part); OutPut.DisplayMessage(text); Support.WaitOnKeyInput(); } }
static void Main(string[] args) { Menu menu = new Menu(); try { Input.RunInputThread(); } catch (Exception e) { Console.WriteLine($"Program encountered an error under upstart: {e.Message}"); Support.WaitOnKeyInput(); int exitCode; if (e is OutOfMemoryException) { exitCode = (int)ExitCode.OutOfMemory; } else { exitCode = (int)ExitCode.UnknownException; } Environment.Exit(exitCode); } menu.DatabaseSelectionMenu(); new WareCreator(Publisher.PubWare); menu.MainMenu(); }
/// <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); } }
private static void RunNonBasicInformationDisplay(string[,] textToDisplay, string[] columnNames, int[] columnStartLocation, int totalLength) //rename { byte maxLength = (byte)textToDisplay.GetLength(0); while (columnStartLocation[maxLength - 1] > OutPut.UIWidth()) { maxLength--; } OutPut.FullScreenClear(); string underscore = "|".PadRight(totalLength, '-'); int y = 1; OutPut.DisplayColouredMessageAtLocation(underscore, 0, y, Colours.White); for (int n = 0; n < maxLength; n++) //displays all information in the 2D array textToDisplay { y = 0; OutPut.DisplayColouredMessageAtLocation("|" + columnNames[n], columnStartLocation[n], y, Colours.White); for (int m = 0; m < textToDisplay.GetLength(1); m++) { OutPut.DisplayColouredMessageAtLocation("|" + textToDisplay[n, m], columnStartLocation[n], m + 2, Colours.White); } } Support.WaitOnKeyInput(); Support.ActiveCursor(); }
/// <summary> /// Runs the menu for removing any amount from a ware. /// </summary> private void WareRemoveAmountMenu() { string ID = CollectID(); if (Support.IDExist(ID, SQLCode.SQLControl.DatabaseInUse)) { WareModifier.RemoveFromWare(ID, CollectAmount()); } else { OutPut.DisplayMessage("ID does not exist"); Support.WaitOnKeyInput(); } }
/// <summary> /// Function used to set database (or no database). /// </summary> public void DatabaseSelectionMenu() { string[] options = new string[] { "Window login Authentication", "SQL Server Authentication", "No SQL Database" }; string[] sqlInfo; string firstConnection; bool run = true; Reporter.Log("Program starting"); do { byte answer = VisualCalculator.MenuRun(options, "Database"); switch (answer) { case 0: sqlInfo = new string[2]; sqlInfo[0] = Support.CollectString("Enter Servername"); sqlInfo[1] = Support.CollectString("Enter database"); if (!ShallDatabaseInitialiseMenu()) { try { SQLCode.SQLControl.DataBase = sqlInfo[1]; firstConnection = SQLCode.SQLControl.CreateConnectionString(sqlInfo[0], "master"); run = !SQLCode.SQLControl.InitalitionOfDatabase(sqlInfo, firstConnection, true); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } else { try { SQLCode.SQLControl.DataBase = sqlInfo[1]; run = !SQLCode.SQLControl.CreateConnection(sqlInfo, true); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } break; case 1: sqlInfo = new string[4]; sqlInfo[0] = Support.CollectString("Enter Servername"); sqlInfo[1] = Support.CollectString("Enter SQL Username"); sqlInfo[2] = Support.HiddenText("Enter Password"); sqlInfo[3] = Support.CollectString("Enter database"); if (!ShallDatabaseInitialiseMenu()) { try { SQLCode.SQLControl.DataBase = sqlInfo[3]; firstConnection = SQLCode.SQLControl.CreateConnectionString(sqlInfo[0], sqlInfo[1], sqlInfo[2], "master"); run = !SQLCode.SQLControl.InitalitionOfDatabase(sqlInfo, firstConnection, false); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } else { try { SQLCode.SQLControl.DataBase = sqlInfo[3]; run = !SQLCode.SQLControl.CreateConnection(sqlInfo, false); SQLCode.SQLControl.DatabaseInUse = true; } catch (Exception e) { Support.ErrorHandling(e, $"Encounted an error: {e.Message}"); run = true; } } break; case 2: WareInformation.AddWareDefault(); SQLCode.SQLControl.DatabaseInUse = false; break; } if (answer == options.Length - 1) { run = false; } if (run == true) { Console.Clear(); Console.WriteLine("Could not establish connection to the database"); Support.WaitOnKeyInput(); } } while (run); }
/// <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}"); } } }