public ReturnForm(Sale sale) { InitializeComponent(); ReturnDGV.AutoGenerateColumns = false; List <OperationDetails> returnList = PartsDAL.FindReturnDetails(sale.OperationId); //Находим список товара кот. уже был возвращен по данной расходу. //Отнимаем из всего списка продажи, товар кот. уже был возвращен. foreach (OperationDetails operDet in returnList) { OperationDetails opDet = sale.OperationDetailsList.First(od => od.SparePart.SparePartId == operDet.SparePart.SparePartId); opDet.Count -= operDet.Count; if (opDet.Count == 0) { sale.OperationDetailsList.Remove(opDet); } }//foreach //Заполняем таблицу sale.OperationDetailsList.ToList().ForEach(od => od.Tag = od.Count); //Запоминаем в Tag каждого объекта его начальное значение количества. ReturnDGV.DataSource = sale.OperationDetailsList; operationIdTextBox.Text = sale.OperationId.ToString(); ContragentTextBox.Text = sale.Contragent.ContragentName; }//
} //CancelButton_MouseClick private void okButton_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //Если все данные введены корректно if (IsRequiredFieldsValid()) { //Присваиваем объект заполненный данными с формы. _contragent = GetContragentFromForm(); //Добавляем новую запись или редактируем существующую. if (_contragent.ContragentId == 0) { PartsDAL.AddContragent(_contragent); } else { PartsDAL.UpdateContragent(_contragent); } this.DialogResult = DialogResult.OK; this.Close(); } //if } //if } //OkButton_MouseClick
}//CancelButton_MouseClick private void OkButton_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //Если все корректно. if (IsRequiredFieldsValid()) { this.Cursor = Cursors.WaitCursor; FillTheSparePartFromForm(_sparePart); //Заполняем объект данными с формы. try { //Редактируем существующий объект или добавляем новый. if (_sparePart.SparePartId != 0) PartsDAL.UpdateSparePart(_sparePart); else PartsDAL.AddSparePart(_sparePart); }//try catch { MessageBox.Show("Операция завершена неправильно! Попробуйте ещё раз."); this.Cursor = Cursors.Default; return; }//catch CopyPhotoToTheFolder(_sparePart.Photo); //Копируем фото в папку 'Товар', если необходимо. this.Close(); }//if }//if }//
}//ContragentOperationsInfoForm_Load /// <summary> /// Метод стартовой инициализации формы. /// </summary> private void FormInitialize() { //Заполняем таблицы инф-цией в зависимости от типа операции. List <IContragent> contragList = null; if (_contragType == typeof(Supplier)) { contragList = PartsDAL.FindSuppliers().OrderBy(s => s.ContragentName).ToList(); ContragentsGroupBox.Text = "Поставщики"; OperationsGroupBox.Text = "Поставки"; OperationDetailsGroupBox.Text = "Доп. инф-ция по поставкам."; }//if else { contragList = PartsDAL.FindCustomers().OrderBy(s => s.ContragentName).ToList(); ContragentsGroupBox.Text = "Покупатели"; OperationsGroupBox.Text = "Покупки"; OperationDetailsGroupBox.Text = "Доп. инф-ция по покупкам."; }//else //Заполняем лист контрагентами. foreach (IContragent contrag in contragList) { ListViewItem item = new ListViewItem(contrag.ContragentName); item.SubItems.Add(contrag.Balance == null ? null : ((double)contrag.Balance).ToString("0.00")); item.Tag = contrag; ContragentsListView.Items.Add(item); } //foreach } //FormInitialize
} //passwordAgainTextBox_Leave private void loginTextBox_Leave(object sender, EventArgs e) { Point location = new Point(bottomPanel.Location.X + loginBackPanel.Location.X, bottomPanel.Location.Y + loginBackPanel.Location.Y); if (String.IsNullOrWhiteSpace(loginTextBox.Text)) { WrongValueInput(loginTextBox, loginBackPanel, loginStarLabel, location, "Введите имя (логин) учетной записи.", 3000); }//if else { if (PartsDAL.FindEmployees().Where(empl => empl.Login == loginTextBox.Text.Trim()).Count() > 0) //Если такой логин уже имеется в базе. { //Если редактируется существующий сотрудник, и логин не изменен, то всё корректно. Иначе проверяем на совпадение с другими логинами в базе. if (_editEmployee != null && _editEmployee.Login == loginTextBox.Text.Trim()) { CorrectValueInput(loginTextBox, loginBackPanel, loginStarLabel); } else { WrongValueInput(loginTextBox, loginBackPanel, loginStarLabel, location, "Такой логин уже существует, введите другой.", 3000); } } //if else //если фамилия введена правильно { CorrectValueInput(loginTextBox, loginBackPanel, loginStarLabel); } //else } //else } //loginTextBox_Leave
} //CancelButton_MouseClick private void okButton_MouseClick(object sender, MouseEventArgs e) { //Если в таблице нет ни одной корректной записи, выдаём ошибку. if (!ReturnDGV.Rows.Cast <DataGridViewRow>().Any(r => r.Cells[CountCol.Index].Style.ForeColor == Color.Black)) { toolTip.Show("Выберети хотя бы один товар из таблицы.", this, okButton.Location, 3000); return; }//if //Записываем данные в базу Purchase purchase = CreatePurchaseFromForm(); string note = (String.IsNullOrWhiteSpace(noteRichTextBox.Text)) ? null : noteRichTextBox.Text.Trim(); try { PartsDAL.AddReturn(purchase, note); }//try catch (Exception) { MessageBox.Show("Операция завершена неправильно! Попробуйте ещё раз."); return; }//catch this.Close(); } //
} //firstNameTextBox_Leave private void passportNumTextBox_Leave(object sender, EventArgs e) { if (String.IsNullOrWhiteSpace(passportNumTextBox.Text)) { CorrectValueInput(passportNumTextBox, passportNumBackPanel, passportNumBackPanel); } else { if (PartsDAL.FindEmployees().Where(empl => empl.PassportNum == passportNumTextBox.Text.Trim()).Count() > 0) //Если такой номер паспорта уже имеется в базе. { //Если редактируется существующий сотрудник, и паспортные данные не изменены, то всё корректно. Иначе проверяем на совпадение с другими паспортными данными. if (_editEmployee != null && _editEmployee.PassportNum == passportNumTextBox.Text.Trim()) { CorrectValueInput(passportNumTextBox, passportNumBackPanel, passportNumBackPanel); } else { WrongValueInput(passportNumTextBox, passportNumBackPanel, passportNumBackPanel, "Такие паспортные данные уже имеются в базе.", 3000); } } //if else //если фамилия введена правильно { CorrectValueInput(passportNumTextBox, passportNumBackPanel, passportNumBackPanel); } //else } //else } //passportNumTextBox_Leave
} //CancelButton_MouseClick private void okButton_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (CheckAllConditionsForWrightValues() == true) { this.Cursor = Cursors.WaitCursor; Employee employee = GetEmployeeFromForm(); try { //Проверяем добавляется новая ед. товара или модиф-ся уже сущ-щая. if (_editEmployee == null) { PartsDAL.AddEmployee(employee); }//if else { employee.EmployeeId = _editEmployee.EmployeeId; UpdateEmployee(employee); } //else } //try catch { MessageBox.Show("Операция завершена неправильно! Попробуйте ещё раз."); this.Cursor = Cursors.Default; return; }//catch this.DialogResult = DialogResult.OK; this.Close(); } //if } //if }
}//editOperDescriptToolStripMenuItem_Click private void OperationsInfoDGV_CellEndEdit(object sender, DataGridViewCellEventArgs e) { //Делаем недоступными для редактирования все ячейки столбца 'Комментарий'. OperationsInfoDGV.Columns[DescriptionCol.Index].ReadOnly = true; //Обновляем запись в базе. DataGridViewCell cell = OperationsInfoDGV[e.ColumnIndex, e.RowIndex]; int operId = (int)OperationsInfoDGV[OperationIdCol.Index, e.RowIndex].Value; string descr = (cell.Value == null || String.IsNullOrWhiteSpace(cell.Value.ToString())) ? null : cell.Value.ToString().Trim(); try { Cursor = Cursors.WaitCursor; if (_contragType == typeof(Supplier)) { PartsDAL.UpdatePurchase(operId, descr); } else { PartsDAL.UpdateSale(operId, descr); } (cell.OwningRow.Tag as IOperation).Description = descr; Cursor = Cursors.Default; }//try catch { MessageBox.Show("Не удалось редактировать запись. Попробуйте ещё раз."); cell.Value = (cell.OwningRow.Tag as IOperation).Description; } //catch } //OperationsInfoDGV_CellEndEdit
} //AddSparePartsProviders //Добавление в БД новой записи, или увеличение количества уже существующей. public static void AddSparePartsWithUpdateCount(IList <SparePart> spareParts) { using (SQLiteConnection connection = GetDatabaseConnection("SparePartConfig") as SQLiteConnection) { connection.Open(); for (int i = 0; i < spareParts.Count; ++i) { //Проверяем есть ли уже в БД запчасть с таким артикулом. IList <int> sparePartsId = PartsDAL.FindSparePartsIdByArticul(spareParts[i].Articul, connection); //если запчасти с таким артикулом в Базе нет, то записываем запись в БД. if (sparePartsId.Count == 0) { AddSparePart(spareParts[i], connection); } //если запчасть с таким артикулом есть, необходимо сравнивать их по Описанию. else { sparePartsId = PartsDAL.FindSparePartsIdByTitle(spareParts[i].Title, sparePartsId, connection); //на данный момент у нас может либо быть найдена 1 запись с таким Описанием, либо ниодной. //если ниодной, просто вставляем запись в БД. if (sparePartsId.Count == 0) { AddSparePart(spareParts[i], connection); } //если точно такая же запись уже есть в БД, то увеличиваем количество. else { PartsDAL.ChangeSparePartCount(sparePartsId[0], spareParts[i].Count, connection); } } //else } //for connection.Close(); } //using } //AddSparePartsWithIncreasingCount
}//AddUnitOfMeasure //Нахождение всех данных БД. public static IList <SparePart> FindAllSpareParts() { const string selectString = "SELECT * FROM SparePart"; IList <SparePart> spareParts = new List <SparePart>(); using (SQLiteConnection connection = GetDatabaseConnection("SparePartConfig") as SQLiteConnection) { connection.Open(); SQLiteCommand selectCommand = new SQLiteCommand(selectString, connection); var dataReader = selectCommand.ExecuteReader(); while (dataReader.Read()) { SparePart sparePart = new SparePart { Photo = dataReader["Photo"] as string, Id = Convert.ToInt32(dataReader["Id"]), Articul = dataReader["Articul"] as string, Title = dataReader["Title"] as string, Manufacturer = PartsDAL.FindManufacturerTitleById(Convert.ToInt32(dataReader["ManufacturerId"])), Price = Convert.ToDouble(dataReader["Price"]), Markup = Convert.ToDouble(dataReader["Markup"]), Count = Convert.ToDouble(dataReader["Count"]), Unit = dataReader["Unit"] as string }; sparePart.SellingPrice = CalculationOfSellingPrice(sparePart.Price, sparePart.Markup); sparePart.Providers = FindSparePartProvidersById(sparePart.Id, connection); spareParts.Add(sparePart); } //while connection.Close(); } //using return(spareParts); } //FindAllSpareParts
}// /// <summary> /// Конструктор для создания объекта из БД. /// </summary> /// <param name="employeeId"></param> /// <param name="lastName"></param> /// <param name="firstName"></param> /// <param name="middleName"></param> /// <param name="birthDate"></param> /// <param name="hireDate"></param> /// <param name="dismissalDate"></param> /// <param name="photo"></param> /// <param name="note"></param> /// <param name="passportNum"></param> /// <param name="title"></param> /// <param name="accessLayer"></param> /// <param name="login"></param> /// <param name="password"></param> public Employee(int employeeId, string lastName, string firstName, string middleName, DateTime?birthDate, DateTime?hireDate, DateTime?dismissalDate, string photo, string note, string passportNum, string title, string accessLayer, string login, string password) : this(employeeId, lastName, firstName, middleName, birthDate, hireDate, dismissalDate, photo, note, passportNum, title, accessLayer, login, password, null) { _contactInfo = new Lazy <ContactInfo>(() => PartsDAL.FindContactInfo(this)); }//
} //ContragentsListBox_MouseDown private void EditContragentToolStripMenuItem_Click(object sender, EventArgs e) { IContragent contragent = ContragentsListView.SelectedItems[0] as IContragent; contragent = (contragent is Supplier) ? PartsDAL.FindSuppliers(contragent.ContragentId) : PartsDAL.FindCustomers(contragent.ContragentId); //Передаём в форму 'свежую'инф-цию из базы, на случай если она обновилась. new AddContragentForm(contragent).Show(); }//EditContragentToolStripMenuItem_Click
private void EmployeeOperationsInfoForm_Load(object sender, EventArgs e) { //Находим список всех сотрудников (сортируем по фамилии и имени) и делаем источником данных для ListBox. EmployeeListBox.DataSource = PartsDAL.FindEmployees().OrderBy(emp => emp.LastName).ThenBy(emp => emp.FirstName).ToList(); //Устанавливаем стартовый период в месяц. EndDateDTP.Value = DateTime.Now; BeginDateDTP.Value = DateTime.Today.AddMonths(-1); }//EmployeeOperationsInfoForm_Load
}//AddSparePartForm private void AddSparePartForm_Load(object sender, EventArgs e) { //добавляем все варианты выбора единицы измерения. MeasureUnitComboBox.DataSource = Models.MeasureUnit.GetDescriptions(); MeasureUnitComboBox.SelectedItem = (_sparePart == null) ? null : _sparePart.MeasureUnit; //Добавляем в выпадающий список всех Производителей. /*ERROR!!!*/ ManufacturerTextBox.AutoCompleteCustomSource.AddRange(PartsDAL.FindAllManufacturersName()); }//Form1_Load
}// public SparePartOperationsInfoForm(SparePart sparePart) { InitializeComponent(); List <IOperation> operList = PartsDAL.FindOperations(sparePart); //Заполняем таблицу. FillTheOperationDGV(operList, sparePart.SparePartId); }//
public AuthorizationForm() { InitializeComponent(); //Заполняем выпадающий список контрола для ввода ФИО. IList <Employee> employees = PartsDAL.FindEmployees(); foreach (Employee employee in employees) { loginTextBox.AutoCompleteCustomSource.Add(employee.Login); } }
}// public Purchase(int operationId, Employee employee, IContragent contragent, string contragentEmployee, DateTime operationDate, string description) { OperationId = operationId; Employee = employee; Contragent = contragent; ContragentEmployee = contragentEmployee; OperationDate = operationDate; Description = description; _operationDetailsList = new Lazy <IList <OperationDetails> >(() => PartsDAL.FindPurchaseDetails(this)); } //
}// private void ReturnForm_Load(object sender, EventArgs e) { //Устанавливаем даты для DateTimePicker. OperationDateTimePicker.MaxDate = DateTime.Now.Date.AddDays(7); OperationDateTimePicker.MinDate = DateTime.Now.Date.AddDays(-7); OperationDateTimePicker.Value = DateTime.Now; //Заполняем список автоподстановки для ввода контрагента. ContragentTextBox.AutoCompleteCustomSource.AddRange(PartsDAL.FindCustomers().Select(c => c.ContragentName).ToArray()); AgentEmployeerTextBox.Text = String.Format("{0} {1}", Form1.CurEmployee.LastName, Form1.CurEmployee.FirstName); }//ReturnForm_Load
//Добавление записи в таблицу "SparePartsProviders". public static void AddSparePart(IList <SparePart> spareParts) { using (SQLiteConnection connection = GetDatabaseConnection("SparePartConfig") as SQLiteConnection) { connection.Open(); //var insertSQL = new SQLiteCommand("INSERT INTO SparePart(Photo, Articul, Title, Category, ManufacturerId, Unit, Count, Price, Markup) VALUES(@Photo, @Articul, @Title, @Category, @ManufacturerId, @Unit, @Count, @Price, @Markup)", connection); for (int i = 0; i < spareParts.Count; ++i) { PartsDAL.AddSparePart(spareParts[i], connection); } connection.Close(); } //using } //AddSparePart
}//LoadExcelFile public static void AddSparePartsFromExcelFile(string excelPath) { //Сравнить разницу в быстродействии двух вариантов!!! IList <SparePart> spareParts = PartsDAL.LoadExcelFile(excelPath); //1)Медленный вариант. Открытие connection для каждой итерации. //foreach (var part in spareParts) // PartsDAL.AddSparePart(part); //2)Более быстрый вариант. connection открывается один раз для всей коллекции. //PartsDAL.AddSparePart(spareParts); PartsDAL.AddSparePartsWithUpdateCount(spareParts); }//AddSparePartsFromExcelFile
/// <summary> /// Конструктор для добавления нового объекта в БД. /// </summary> public SparePart(int sparePartId, string photo, string manufacturer, string articul, string title, string description, string measureUnit) { SparePartId = sparePartId; Photo = photo; Manufacturer = manufacturer; Articul = articul; Title = title; Description = description; MeasureUnit = measureUnit; _availabilityList = new Lazy <List <Availability> >(() => PartsDAL.FindAvailability(this)); }//
}//DatesDTP_ValueChanged /// <summary> /// Заполняем таблицу операций для выделенного сотрудника. /// </summary> private void FillTheOperationDGV() { OperationsInfoDGV.Rows.Clear(); //Очищаем список операций. //Находим начальную и конечную дату требуемых операций. DateTime?beginDate = BeginDateDTP.Enabled ? BeginDateDTP.Value : (DateTime?)null; DateTime?endDate = EndDateDTP.Enabled ? EndDateDTP.Value : (DateTime?)null; //Выводим список операций соответствующий заданным требованиям. List <IOperation> operList = PartsDAL.FindOperations(EmployeeListBox.SelectedItem as Employee, beginDate, endDate); FillTheOperationDGV(operList); //Изменяем видимость строк по типу операции. OperationsCheckBox_CheckedChanged(null, null); }//FillTheOperationDGV
}//FindSparePartsByArticulOrTitle public static IList <SparePart> FindSparePartsByArticuls(IList <string> articuls) { IList <SparePart> spareParts = new List <SparePart>(); using (SQLiteConnection connection = GetDatabaseConnection("SparePartConfig") as SQLiteConnection) { connection.Open(); var cmd = new SQLiteCommand(null, connection); cmd.CommandText = "SELECT * FROM SparePart WHERE Articul LIKE @Articul"; SQLiteParameter param = new SQLiteParameter(); param.ParameterName = "@Articul"; cmd.Parameters.Add(param); cmd.Prepare(); for (int i = 0; i < articuls.Count; ++i) { param.Value = articuls[i]; var dataReader = cmd.ExecuteReader(); while (dataReader.Read()) { SparePart sparePart = new SparePart { Photo = dataReader["Photo"] as string, Id = Convert.ToInt32(dataReader["Id"]), Articul = dataReader["Articul"] as string, Title = dataReader["Title"] as string, Manufacturer = PartsDAL.FindManufacturerTitleById(Convert.ToInt32(dataReader["ManufacturerId"])), Price = Convert.ToDouble(dataReader["Price"]), Markup = Convert.ToDouble(dataReader["Markup"]), Count = Convert.ToDouble(dataReader["Count"]), Unit = dataReader["Unit"] as string }; sparePart.SellingPrice = CalculationOfSellingPrice(sparePart.Price, sparePart.Markup); sparePart.Providers = FindSparePartProvidersById(sparePart.Id, connection); spareParts.Add(sparePart); } //while dataReader.Dispose(); //Спорный момент с dataReader. Без Dispose выдаёт ошибку "dataReader already activate". } //for connection.Close(); } //using return(spareParts); } //FindSparePartsByArticuls
} //FormInitialize private void ContragentsListBox_SelectedIndexChanged(object sender, EventArgs e) { if (ContragentsListView.SelectedItems.Count != 0) { //int contragId = (int)ContragentsListBox.SelectedValue; int contragId = (ContragentsListView.SelectedItems[0].Tag as IContragent).ContragentId; //Если инф-ции об операциях данного контрагента ещё нет в коллекции, находим её в базе и добавляем в коллекцию. List <IOperation> operList; if (_contragentsOperations.TryGetValue(contragId, out operList) == false) { operList = (_contragType == typeof(Supplier)) ? PartsDAL.FindPurchases(contragId, null) : PartsDAL.FindSales(contragId, null); _contragentsOperations.Add(contragId, operList);//добавляем в коллекцию. }//if FillTheOperationsInfoDGV(operList); //Заполняем таблицу Операций. }//if }//ContragentsListBox_SelectedIndexChanged
} //FindSparePartsByTitle public static IList <SparePart> FindSparePartsByArticulOrTitle(string TitleOrArticul) { IList <SparePart> spareParts = new List <SparePart>(); using (SQLiteConnection connection = GetDatabaseConnection("SparePartConfig") as SQLiteConnection) { connection.Open(); var cmd = new SQLiteCommand(null, connection); cmd.CommandText = "SELECT * FROM SparePart WHERE Title LIKE @TitleOrArticul OR Articul LIKE @TitleOrArticul"; SQLiteParameter param = new SQLiteParameter(); param.ParameterName = "@TitleOrArticul"; param.Value = TitleOrArticul; cmd.Parameters.Add(param); cmd.Prepare(); var dataReader = cmd.ExecuteReader(); while (dataReader.Read()) { var sparePart = new SparePart { Photo = dataReader["Photo"] as string, Id = Convert.ToInt32(dataReader["Id"]), Articul = dataReader["Articul"] as string, Title = dataReader["Title"] as string, Manufacturer = PartsDAL.FindManufacturerTitleById(Convert.ToInt32(dataReader["ManufacturerId"])), Price = Convert.ToDouble(dataReader["Price"]), Markup = Convert.ToDouble(dataReader["Markup"]), Count = Convert.ToDouble(dataReader["Count"]), Unit = dataReader["Unit"] as string }; sparePart.SellingPrice = CalculationOfSellingPrice(sparePart.Price, sparePart.Markup); sparePart.Providers = FindSparePartProvidersById(sparePart.Id, connection); spareParts.Add(sparePart); }//while connection.Close(); } return(spareParts); }//FindSparePartsByArticulOrTitle
} //SetDivider ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endregion /// <summary> /// Возвращает объект типа Operation, созданный из данных формы. /// </summary> /// <returns></returns> public Purchase CreatePurchaseFromForm() { //Находим весь возвращаемый товар. List <OperationDetails> operDetList = new List <OperationDetails>(); var correctRows = ReturnDGV.Rows.Cast <DataGridViewRow>().Where(r => r.Cells[CountCol.Index].Style.ForeColor == Color.Black); correctRows.ToList().ForEach(r => operDetList.Add(r.DataBoundItem as OperationDetails)); Purchase purchase = new Purchase ( employee: Form1.CurEmployee, contragent: PartsDAL.FindSuppliers("Возврат"), contragentEmployee: (!String.IsNullOrWhiteSpace(ContragentEmployeeTextBox.Text)) ? ContragentEmployeeTextBox.Text.Trim() : null, operationDate: OperationDateTimePicker.Value, description: (!String.IsNullOrWhiteSpace(noteRichTextBox.Text)) ? noteRichTextBox.Text.Trim() : null, operDetList: operDetList ); return(purchase); }//CreatePurchaseFromForm
} //FindSparePartsByArticuls public static SparePart FindSparePartById(int id) { SparePart sparePart = null; using (SQLiteConnection connection = GetDatabaseConnection("SparePartConfig") as SQLiteConnection) { connection.Open(); var cmd = new SQLiteCommand(null, connection); cmd.CommandText = "SELECT * FROM SparePart WHERE Id = @Id"; SQLiteParameter param = new SQLiteParameter(); param.ParameterName = "@Id"; param.Value = id; cmd.Parameters.Add(param); cmd.Prepare(); var dataReader = cmd.ExecuteReader(); dataReader.Read(); sparePart = new SparePart { Photo = dataReader["Photo"] as string, Id = Convert.ToInt32(dataReader["Id"]), Articul = dataReader["Articul"] as string, Title = dataReader["Title"] as string, Manufacturer = PartsDAL.FindManufacturerTitleById(Convert.ToInt32(dataReader["ManufacturerId"])), Price = Convert.ToDouble(dataReader["Price"]), Markup = Convert.ToDouble(dataReader["Markup"]), Count = Convert.ToDouble(dataReader["Count"]), Unit = dataReader["Unit"] as string }; sparePart.SellingPrice = CalculationOfSellingPrice(sparePart.Price, sparePart.Markup); sparePart.Providers = FindSparePartProvidersById(sparePart.Id, connection); connection.Close(); } //using return(sparePart); } //FindSparePartById
} //FindSparePartById public static IList <SparePart> FindSparePartById(IList <int> sparePartsId, SQLiteConnection openConnection) { IList <SparePart> spareParts = new List <SparePart>(); var cmd = new SQLiteCommand("SELECT * FROM SparePart WHERE Id = @Id", openConnection); SQLiteParameter param = new SQLiteParameter(); param.ParameterName = "@Id"; cmd.Parameters.Add(param); cmd.Prepare(); for (int i = 0; i < sparePartsId.Count; ++i) { param.Value = sparePartsId[i]; var dataReader = cmd.ExecuteReader(); while (dataReader.Read()) { SparePart sparePart = new SparePart { Photo = dataReader["Photo"] as string, Id = Convert.ToInt32(dataReader["Id"]), Articul = dataReader["Articul"] as string, Title = dataReader["Title"] as string, Manufacturer = PartsDAL.FindManufacturerTitleById(Convert.ToInt32(dataReader["ManufacturerId"])), Price = Convert.ToDouble(dataReader["Price"]), Markup = Convert.ToDouble(dataReader["Markup"]), Count = Convert.ToDouble(dataReader["Count"]), Unit = dataReader["Unit"] as string }; sparePart.SellingPrice = CalculationOfSellingPrice(sparePart.Price, sparePart.Markup); sparePart.Providers = FindSparePartProvidersById(sparePart.Id, openConnection); spareParts.Add(sparePart); } //while dataReader.Dispose(); //Спорный момент с dataReader. Без Dispose выдаёт ошибку "dataReader already activate". } //for return(spareParts); } //FindSparePartById
} //SetTheAccessLayerConstraints /// <summary> /// Метод обновляющий данные переданного сотрудника в базе. /// </summary> /// <param name="employee">Сотрудник чьи данные обновляются.</param> private void UpdateEmployee(Employee employee) { //Если редактируемый юзер это и есть тот кто сейчас авторизован if (employee.EmployeeId == Form1.CurEmployee.EmployeeId) { //Если права "Админ" if (Form1.CurEmployee.AccessLayer == Employee.AccessLayers.Admin.ToDescription()) { //Если пароль не менялся, обновляем без пароля, иначе обновляем полностью. if (passwordTextBox.Text.Trim() == Form1.CurEmployee.Password) { PartsDAL.UpdateEmployeeWithoutPassword(employee); } else { PartsDAL.UpdateEmployee(employee); } }//if //если права "Обычные" else { //Если введен новый пароль, то обновляем его в базе, иначе ничего не делаем. if (passwordTextBox.Text.Trim() != Form1.CurEmployee.Password) { PartsDAL.UpdateEmployee(employee); } }//else Form1.CurEmployee = employee; } //if else //Если редактируемый юзер не является авторизованным юзером { //если права "Админ" if (employee.AccessLayer == Employee.AccessLayers.Admin.ToDescription()) { PartsDAL.UpdateEmployeeWithoutPassword(employee); } } //else } //UpdateEmployee