/*Валидирует файл содержащий партии (id и nomenclatuer id) * если в файле партий есть id которого небыло в файле с материалами выбрасывается исключение*/ public static bool validatePartiesFile(string filePath) { Excel xlsxfile = new Excel(); xlsxfile.FileOpen(filePath); Nomenclatures.validateColumnsInFile(columnsInParties, xlsxfile.Rows); Regex regex = new Regex(@"[0-9]+$"); for (int i = 1; i < xlsxfile.Rows.Count; i++) { if (!Nomenclatures.validate(regex, xlsxfile.Rows[i][1])) { throw new NomenclaturesException($"Не верное id материала, ожидается:\n 'Числовое значение в столбце nomenclature id'\n получено:\n Имя: {xlsxfile.Rows[i][1]}\n Строка: {i}"); } if (!Nomenclatures.checkMaterialInParties(xlsxfile.Rows[i][1])) { throw new DataIntegrityException($"Не найден данный id в списке материалов:\n получено:\n id: {xlsxfile.Rows[i][1]}\n Строка: {i}"); } if (!Nomenclatures.canMaterialProcessedOrNot(xlsxfile.Rows[i][1])) { throw new DataIntegrityException($"Ни одна из загруженных машин не обрабатывает материал {viewMaterialById(xlsxfile.Rows[i][1])} :\n получено:\n id: {xlsxfile.Rows[i][1]}\n Название: {viewMaterialById(xlsxfile.Rows[i][1])} \n Строка: {i}"); } } return(true); }
//Вывод партии в ListView public static void renderPartiesInListView(ListView lv) { for (int i = 1; i < Nomenclatures.parties.Count; i++) { ListViewItem lvi = new ListViewItem(Nomenclatures.parties[i][0]); lvi.SubItems.Add(Nomenclatures.viewMaterialById(Nomenclatures.parties[i][1])); lv.Items.Add(lvi); } }
private void button3_Click(object sender, EventArgs e) { if (Nomenclatures.ovens.Count == 0 || Nomenclatures.materials.Count == 0) { MessageBox.Show("Пожалуйста, сначала выберите файл с именами, идентификаторами машин, а так-же файл с материалами", "Недостаточно данных", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } Nomenclatures.openSpecificationsFile(); }
private void button1_Click(object sender, EventArgs e) { if (Nomenclatures.materials.Count == 0 || Nomenclatures.ovens.Count == 0 || Nomenclatures.ovensSpecifications.Count == 0) { MessageBox.Show("Пожалуйста, сначала загрузите файлы с данными о материалах и машинах", "Недостаточно данных", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } Nomenclatures.openPartiesFile(listView1); }
//Валидирует файл содержащий название материала и его id public static bool validateMaterialsFile(string filePath) { Excel xlsxfile = new Excel(); xlsxfile.FileOpen(filePath); Nomenclatures.validateColumnsInFile(columnsInMaterials, xlsxfile.Rows); Regex regex = new Regex(@"[А-Яа-я]+\s?[А-Яа-я]*$"); for (int i = 1; i < xlsxfile.Rows.Count; i++) { if (!Nomenclatures.validate(regex, xlsxfile.Rows[i][1])) { throw new NomenclaturesException($"Не верное имя сырья, ожидается:\n 'Одно или два слова на кирилице разделенных пробелом или переносом строки'\n получено:\n Имя: {xlsxfile.Rows[i][1]}\n Строка: {i}"); } } return(true); }
//Валидирует файл с записями о названиях и id машин public static bool validateMachineToolsFile(string filePath) { Excel xlsxfile = new Excel(); xlsxfile.FileOpen(filePath); Nomenclatures.validateColumnsInFile(columnsInOvensIdName, xlsxfile.Rows); Regex regex = new Regex(@"Печь [0-9]"); for (int i = 1; i < xlsxfile.Rows.Count; i++) { if (!Nomenclatures.validate(regex, xlsxfile.Rows[i][1])) { throw new NomenclaturesException($"Не верное имя печи, ожидается:\n 'Печь [номер] (например: Печь 7)'\n получено:\n Имя: {xlsxfile.Rows[i][1]}\n Строка: {i}"); } } return(true); }
//Валидирует файл содержащий характеристики печей public static bool validateSpecificationFile(string filePath) { Excel xlsxfile = new Excel(); xlsxfile.FileOpen(filePath); Nomenclatures.validateColumnsInFile(columnsInOvensSpecifications, xlsxfile.Rows); Regex regex = new Regex(@"[0-9]+$"); for (int j = 0; j < xlsxfile.Rows[0].Count; j++) { for (int i = 1; i < xlsxfile.Rows.Count; i++) { if (!Nomenclatures.validate(regex, xlsxfile.Rows[i][j])) { throw new NomenclaturesException($"Ожидается числовое значение в столбце {xlsxfile.Rows[0][j]}, \n получено:\n id: {xlsxfile.Rows[i][j]}\n Строка: {i}"); } } } return(true); }
//Открыть файл с именами машин public static void openMachineToolsFile(ListView lv) { try { Nomenclatures.setOvensByFile(lv); } catch (NomenclaturesException ex) { MessageBox.Show("Ошибка структуры файла:\n" + ex.Message, "Ошибка структуры файла", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (System.IO.IOException ex) { MessageBox.Show("Ошибка доступа к файлу:\n" + ex.Message, "Ошибка доступа", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (DataIntegrityException ex) { MessageBox.Show("Ошибка целостности данных:\n" + ex.Message, "Нарушение целостности данных", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
//Метод сохраняющий материалы в переменную materials public static void setMaterialsByFile(ListView lv, ListView lvp) { if (materials.Count == 0) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validateMaterialsFile(openFile.FileName); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); materials.AddRange(xlsxfile.Rows); Nomenclatures.renderMaterialsInListView(lv); } } else { DialogResult result = MessageBox.Show("Вы уже загружали ранее файл с описанием материалов, хотите ли вы перезаписать данные?(При перезаписи данные о партии будут сброшены, для сохранения целостности данных)" , "Подтвердите действие" , MessageBoxButtons.OKCancel , MessageBoxIcon.Warning ); if (result == DialogResult.OK) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validateMaterialsFile(openFile.FileName); Nomenclatures.parties.Clear(); Nomenclatures.materials.Clear(); lvp.Items.Clear(); lv.Items.Clear(); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); materials.AddRange(xlsxfile.Rows); Nomenclatures.renderMaterialsInListView(lv); } } } }
//Метод сохраняющий спецификации машин в переменную ovensSpecifications public static void setOvensSpecifications() { if (ShopPlanner.shop.Count == 0) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validateSpecificationFile(openFile.FileName); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); Nomenclatures.ovensSpecifications.AddRange(xlsxfile.Rows); ShopPlanner.constructShop(); MessageBox.Show("Характеристики загруженны, цэх успешно создан"); } } else { DialogResult result = MessageBox.Show("Спецификации машин уже загружены, хотите обновить?" , "Подтвердите действие" , MessageBoxButtons.OKCancel , MessageBoxIcon.Warning ); if (result == DialogResult.OK) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validateSpecificationFile(openFile.FileName); Nomenclatures.ovensSpecifications.Clear(); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); Nomenclatures.ovensSpecifications.AddRange(xlsxfile.Rows); ShopPlanner.shop.Clear(); ShopPlanner.constructShop(); MessageBox.Show("Характеристики загруженны, цэх успешно создан"); } } } }
//Метод сохраняющий печи в переменную parties public static void setOvensByFile(ListView lv) { if (ovens.Count == 0) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validateMachineToolsFile(openFile.FileName); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); ovens.AddRange(xlsxfile.Rows); machineTools.renderOvensInListView(lv); } } else { DialogResult result = MessageBox.Show("Вы уже загружали ранее файл с идентификаторма машин, хотите ли вы перезаписать данные?(Сведения о машинах будут сброшены, для сохранения целостности данных)" , "Подтвердите действие" , MessageBoxButtons.OKCancel , MessageBoxIcon.Warning ); if (result == DialogResult.OK) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validateMachineToolsFile(openFile.FileName); Nomenclatures.ovens.Clear(); Nomenclatures.ovensSpecifications.Clear(); lv.Items.Clear(); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); ovens.AddRange(xlsxfile.Rows); machineTools.renderOvensInListView(lv); } } } }
//Открыть файл с описание и id материалов public static void openMaterialsFile(ListView lv, ListView lvp) { try { Nomenclatures.setMaterialsByFile(lv, lvp); } //toDo узнать можно ли как-то обертку в try - catch вынести в функцию или сократить для избежания использования повторного кода catch (NomenclaturesException ex) { MessageBox.Show("Ошибка структуры файла:\n" + ex.Message, "Ошибка структуры файла", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (System.IO.IOException ex) { MessageBox.Show("Ошибка доступа к файлу:\n" + ex.Message, "Ошибка доступа", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (DataIntegrityException ex) { MessageBox.Show("Ошибка целостности данных:\n" + ex.Message, "Нарушение целостности данных", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
//Метод сохраняющий партии в переменную parties public static void setPartiesByFile(ListView lv) { if (parties.Count == 0) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validatePartiesFile(openFile.FileName); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); parties.AddRange(xlsxfile.Rows); Nomenclatures.renderPartiesInListView(lv); } } else { DialogResult result = MessageBox.Show("Вы уже загружали ранее файл с партиями, хотите ли вы перезаписать данные?" , "Подтвердите действие" , MessageBoxButtons.OKCancel , MessageBoxIcon.Warning ); if (result == DialogResult.OK) { OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "Excel files(*.xlsx)|*.xlsx"; if (openFile.ShowDialog() == DialogResult.OK) { Nomenclatures.validatePartiesFile(openFile.FileName); Nomenclatures.parties.Clear(); lv.Items.Clear(); Excel xlsxfile = Nomenclatures.openXslxFile(openFile.FileName); parties.AddRange(xlsxfile.Rows); Nomenclatures.renderPartiesInListView(lv); } } } }
//Рендер формы с спецификациями машин public static TabControl renderFormWithOvensSpecifications() { //Создание tabControl объекта на форме TabControl tabControl1 = new TabControl(); tabControl1.Location = new Point(5, 5); tabControl1.Size = new Size(386, 200); for (int i = 0; i < shop.Count; i++) { //Создание страницы у tabControl TabPage page1 = new TabPage(); page1.Text = machineTools.getOvenNameById(ShopPlanner.shop[i].id); //Создание listView внутри таба ListView lv = new ListView(); lv.Size = new Size(352, 150); lv.Location = new Point(5, 5); lv.View = View.Details; lv.Columns.Add("id", -2); lv.Columns.Add("Имя", -2); lv.Columns.Add("Материал", -2); lv.Columns.Add("Время обработки", -2); ListViewItem lvi = new ListViewItem(new string[] { shop[i].id, shop[i].name, Nomenclatures.viewMaterialById(shop[i].materialsTimes[0][1]), shop[i].materialsTimes[0][2] + " мин" }); lv.Items.Add(lvi); for (int j = 1; j < shop[i].materialsTimes.Count; j++) { ListViewItem lviMaterials = new ListViewItem(new string[] { "", "", Nomenclatures.viewMaterialById(shop[i].materialsTimes[j][1]), shop[i].materialsTimes[j][2] + " мин" }); lv.Items.Add(lviMaterials); } tabControl1.Controls.Add(page1); page1.Controls.Add(lv); } return(tabControl1); }
private void button4_Click(object sender, EventArgs e) { Nomenclatures.openMaterialsFile(listView2, listView1); }
private void button2_Click(object sender, EventArgs e) { Nomenclatures.openMachineToolsFile(listView3); }
public void renderStatistic() { this.Controls.Add(ShopPlanner.renderFormWithStatisticAboutBatch(Nomenclatures.setStatisticAboutBatch())); }
private void button1_Click(object sender, EventArgs e) { Nomenclatures.saveStatInXlsxFile(); }