protected void Page_Load(object sender, EventArgs e) { // выбираем значения из post запроса Guid[] prods = Request["products"].Split(',').Select(p => new Guid(p)).ToArray(); //120420 // List<Guid> prods = Request["products"].Split(',').Select(p => new Guid(p)).ToList(); Guid srcProductID = new Guid(Request["left_uid"]); Guid dstProductID = new Guid(Request["right_uid"]); //List<string> qdus_new = Request["qdus_new"].Split(',').ToList<string>(); //120420 string[] qdus_new = Request["qdus_new"].Split(',').ToArray(); //120420 // для каждого продукта в списке [products] выполняем // замену исходного продукта на целевой // foreach (Guid prod in prods) //120420 for (int i = 0; i < prods.Length; i++) //120420 { using (ProductProvider provider = new ProductProvider()) { // создаём новую версию продукта Guid newprod = provider.CreateNewVersionOfProduct(prods[i], Guid.Empty); // берём все исходные детали для замены // их может быть несколько List<Aspect.Domain.Configuration> srcConfs, dstConfs; srcConfs = provider.Configurations.Where(p => p.ProductOwnerID == newprod && p.ProductID == srcProductID).ToList(); dstConfs = new List<Aspect.Domain.Configuration>(); // создаём на базе исходных деталей - целевые с такими же параметрами using (ConfigurationProvider confProvider = new ConfigurationProvider()) { foreach (Aspect.Domain.Configuration conf in srcConfs) { Aspect.Domain.Configuration newconf = confProvider.CopyConfiguration(conf); newconf.ID = Guid.NewGuid(); newconf.ProductID = dstProductID; newconf.Quantity = Convert.ToDecimal(qdus_new[i]); dstConfs.Add(newconf); } } // удаляем из спецификации исходные продукты // вставляем в спецификацию новые продукты provider.Configurations.DeleteAllOnSubmit(srcConfs); provider.Configurations.InsertAllOnSubmit(dstConfs); provider.SubmitChanges(); // устанавливаем признак основной версии ProductProperty prop = provider.ProductProperties.Where( p => p.ProductID == newprod && p.PropertyID == new Guid("BBE170B0-28E4-4738-B365-1038B03F4552")).Single(); prop.Value = "1"; provider.SubmitChanges(); } } }
public static string ExchangeKmhInOrders(List<Guid> orderArticles, DateTime timeStamp, Guid prodNomenId, TechnDatesSpeciality speciality) { using (ProductProvider provider = new ProductProvider()) { var dates = from date in provider.TechnDates where orderArticles.Contains(date.OrderArticleID) && date._dictNomenID == prodNomenId select date; foreach (var date in dates) { switch (speciality) { case TechnDatesSpeciality.Main: date.gen_date = timeStamp.ToLocalTime(); break; case TechnDatesSpeciality.Svar: date.svar_date = timeStamp.ToLocalTime(); break; case TechnDatesSpeciality.Him: date.him_date = timeStamp.ToLocalTime(); break; case TechnDatesSpeciality.Techn: date.techn_date = timeStamp.ToLocalTime(); break; } } provider.SubmitChanges(); } return new PostResult("Ok", 0).ToString(); }
public static void SaveRouteInternal(Guid _Product_ID, Guid _Material_ID, string Route) { DateTime currentDT = DateTime.Now; Route = Route.Trim(); using (ProductProvider provider = new ProductProvider()) { // получаем действующие (по времени) маршруты по применяемости // для данного продукта в данной сборке // ! в идеале такой маршрут должен быть один var routes = from rt in provider.Specification_3s where rt._Product_ID == _Product_ID && rt._Material_ID == _Material_ID && rt.StartDT <= currentDT && rt.FinishDT > currentDT select rt; // завершаем маршруты текущей датой foreach (var route in routes) { route.FinishDT = currentDT; } // создаём новый маршрут по применяемости, если он не пустой if (!String.IsNullOrEmpty(Route)) { Specification_3 newRoute = new Specification_3() { id = Guid.NewGuid(), _Product_ID = _Product_ID, _Material_ID = _Material_ID, Route = Route, dtle = currentDT, StartDT = currentDT, FinishDT = DateTime.MaxValue }; try { newRoute.userID = (Guid)HttpContext.Current.Session["userID"]; } catch { } provider.Specification_3s.InsertOnSubmit(newRoute); } provider.SubmitChanges(); } }
public static string SaveKmhCard(transfer card, int saveType, Guid order_id) { DateTime CurDateTime = DateTime.Now; // saveType == 1 (сохранить как основную) // saveType == 2 (сохранить как приказную) // saveType == 3 (как приказную и как основную) using (ProductProvider provider = new ProductProvider()) { // {!} здесь может быть проблемное место, потому что надо оборачивать действия // в одну транзакцию // проходим два раза по коду // 1 - стандартная карточка // 2 - карточка по приказу for (int index = 1; index <= 2; index++) { if (saveType == 2 && index == 1) continue; if (saveType == 1 && index == 2) continue; // получаем все существующие стандарные карты для данного продукта var all_kmh = from kmh in provider.Specification_1s where Object.Equals(kmh.OrderArticleID, index == 1 ? null : new Guid?(order_id)) && kmh._Product_ID == card.prod_id select kmh; // переносим полученные данные в карту Specification_1 savedCard = new Specification_1(); savedCard.id = Guid.NewGuid(); savedCard.OrderArticleID = (index == 1 ? null : new Guid?(order_id)); LoadKmh(savedCard, card); // устанавливаем время действия карты savedCard.FinishDT = PlusInfinity; if (all_kmh.Count() == 0) { // если других карт нету, даты от -∞ до +∞ // savedCard.StartDT = MinusInfinity; savedCard.StartDT = CurDateTime; } else { // если другие карты есть, дата от CurDateTime+1 до +∞ savedCard.StartDT = CurDateTime; // выбираем актуальные карты и завершаем дату их действия List<Specification_1> actual_kmh = all_kmh.Where(c => c.StartDT <= CurDateTime && c.FinishDT > CurDateTime).ToList(); foreach (Specification_1 iter_kmh in actual_kmh) { iter_kmh.FinishDT = CurDateTime; } } savedCard.dtle = CurDateTime; try { savedCard.userID = (Guid)HttpContext.Current.Session["userID"]; } catch { } provider.Specification_1s.InsertOnSubmit(savedCard); } // Сохраняем изменения provider.SubmitChanges(); } PostResult result = new PostResult("ok", 0) { TimeStamp = CurDateTime.ToUniversalTime() }; return result.ToString(); }
public static string SaveAddMaterials(List<transfer_add> list, Guid prodid, int saveType, Guid order_id, Guid ste_id) { DateTime CurDateTime = DateTime.Now; // saveType == 1 (сохранить как основную) // saveType == 2 (сохранить как приказную) // saveType == 3 (как приказную и как основную) using (ProductProvider provider = new ProductProvider()) { // {!} здесь может быть проблемное место, потому что надо оборачивать действия // в одну транзакцию // проходим два раза по коду // 1 - стандартная карточка // 2 - карточка по приказу for (int index = 1; index <= 2; index++) { if (saveType == 2 && index == 1) continue; if (saveType == 1 && index == 2) continue; // получаем актуальные на текущий момент дополнительные материалы var all_kmh = from kmh in provider.Specification_2s where Object.Equals(kmh.OrderArticleID, index == 1 ? null : new Guid?(order_id)) && kmh._Product_ID == prodid && kmh._dictS_TEID == ste_id select kmh; // перебераем только актуальные карты // и завершаем их по текущей дате foreach (var kmh in all_kmh.Where(it => it.StartDT <= CurDateTime && it.FinishDT > CurDateTime)) { kmh.FinishDT = CurDateTime; } // если в списке нет доп. материалов, то вставляем // специальный материал с Guid = {00000000-0000-0000-0000-000000000000} if (list.Count == 0) { list.Add(new transfer_add() { material_id = Guid.Empty }); } // создаём новые карты материалов foreach (transfer_add new_kmh in list) { provider.Specification_2s.InsertOnSubmit(new Specification_2() { id = Guid.NewGuid(), _Product_ID = prodid, _Material_ID = new_kmh.material_id, // если данный материал уже применялся, то дата начинается с текущего момента // если же данный материал добавлен впервые то дата начаинается с -∞ // StartDT = all_kmh.Count(it => it._Material_ID == new_kmh.material_id) > 0 ? CurDateTime : MinusInfinity, StartDT = CurDateTime, FinishDT = PlusInfinity, no = new_kmh.no, _dictUMID = new_kmh.um_id, _dictSID = new_kmh.s_id, _dictS_TEID = ste_id, OrderArticleID = (index == 1 ? null : new Guid?(order_id)) }); } } // Сохраняем изменения provider.SubmitChanges(); } PostResult result = new PostResult("ok", 0) { TimeStamp = CurDateTime.ToUniversalTime() }; return result.ToString(); }
public static string TechDatesSave(Guid _dictNomenID, Guid OrderArticleID, DateTime? gen_date, DateTime? him_date, DateTime? svar_date, DateTime? techn_date) { try { using (ProductProvider provider = new ProductProvider()) { // select row with dates from DB var unit_dates = provider.TechnDates.SingleOrDefault(it => it._dictNomenID == _dictNomenID && it.OrderArticleID == OrderArticleID); // if row doesn't exists create new row if (unit_dates == null) { unit_dates = new TechnDate() { _dictNomenID = _dictNomenID, OrderArticleID = OrderArticleID }; provider.TechnDates.InsertOnSubmit(unit_dates); } // clear dates if needed and save dates to row if (gen_date.HasValue) { unit_dates.gen_date = (gen_date == DateTime.MinValue) ? null : gen_date; } if (him_date.HasValue) { unit_dates.him_date = (him_date == DateTime.MinValue) ? null : him_date; } if (svar_date.HasValue) { unit_dates.svar_date = (svar_date == DateTime.MinValue) ? null : svar_date; } if (techn_date.HasValue) { unit_dates.techn_date = (techn_date == DateTime.MinValue) ? null : techn_date; } // if row contain all nulled fields delete it if (unit_dates.techn_date == null && unit_dates.him_date == null && unit_dates.svar_date == null && unit_dates.gen_date == null) { provider.TechnDates.DeleteOnSubmit(unit_dates); } // save dates to DB provider.SubmitChanges(); } return new PostResult("Ok", 0).ToString(); } catch (Exception e) { return new PostResult("Unknown exception: " + e.Message, -1).ToString(); } }
public static string SetColumns(List<transfer_column> columns, Guid ClassificationTreeId) { Guid userID; try { userID = (Guid)HttpContext.Current.Session["userID"]; } catch { return new PostResult("Lose user session. Please reconnect.", 102).ToString(); } using (ProductProvider provider = new ProductProvider()) { // delete existing settings var columnIDs = columns.Select(it => it.uid); var forDelete = from col in provider.ColumnWidths where col.ClassificationTreeID == ClassificationTreeId && col.UserID == userID && columnIDs.Contains(col.ColumnID) select col; provider.ColumnWidths.DeleteAllOnSubmit(forDelete); provider.SubmitChanges(); // saving new settings foreach (var column in columns) { provider.ColumnWidths.InsertOnSubmit(new ColumnWidth() { ID = Guid.NewGuid(), ClassificationTreeID = ClassificationTreeId, UserID = userID, ColumnID = column.uid, Width = column.width, Index = column.position, Hidden = column.hidden }); } provider.SubmitChanges(); } return new PostResult("ok", 0).ToString(); }
protected void ItemCommand(Object Sender, RepeaterCommandEventArgs e) { if (e.CommandName == "com.delete") { using (ProductProvider provider = new ProductProvider()) { var userFile = provider.UserFiles.SingleOrDefault(it => it.id == new Guid((string)e.CommandArgument)); if (userFile != null) { provider.UserFiles.DeleteOnSubmit(userFile); String savePath = Path.Combine(Request.PhysicalApplicationPath, "UserFiles"); File.Delete(Path.Combine(savePath, userFile.filename)); provider.SubmitChanges(); } } } DataBind(); }
protected void UploadButton_Click(object sender, EventArgs e) { // Specify the path on the server to // save the uploaded file to. String savePath = Path.Combine(Request.PhysicalApplicationPath, "UserFiles"); // Before attempting to perform operations // on the file, verify that the FileUpload // control contains a file. if (FileUpload1.HasFile) { // Get the name of the file to upload. String fileName = FileUpload1.FileName; String savedFileName = String.Empty; int postfix = 0; // Append the name of the file to upload to the path. do { if (postfix == 0) { savedFileName = Path.Combine(new string[] {savePath, fileName}); } else { savedFileName = Path.Combine(new string[] {savePath, Path.GetFileNameWithoutExtension(fileName) + "_" + postfix + Path.GetExtension(fileName)}); } postfix++; } while (File.Exists(savedFileName)); FileUpload1.SaveAs(savedFileName); using (ProductProvider provider = new ProductProvider()) { var userFile = new UserFile() { id = Guid.NewGuid(), pid = GetPID, cid = Guid.Empty, filename = Path.GetFileName(savedFileName), username = Path.GetFileNameWithoutExtension(fileName) }; provider.UserFiles.InsertOnSubmit(userFile); provider.SubmitChanges(); } DataBind(); // Notify the user of the name of the file // was saved under. // UploadStatusLabel.Text = "Your file was saved as " + fileName; } else { // Notify the user that a file was not uploaded. // UploadStatusLabel.Text = "You did not specify a file to upload."; } }
protected void SavaFileNames(object sender, EventArgs e) { using (ProductProvider provider = new ProductProvider()) { Repeater repeater = (Repeater)FindControlRecursive(this.Master, "Repeater1"); foreach (var repeaterItem in repeater.Controls) { var hidden = (repeaterItem as RepeaterItem).FindControl("hiddenID") as HiddenField; var edit = (repeaterItem as RepeaterItem).FindControl("textUserName") as TextBox; var userFile = provider.UserFiles.Single(it => it.id == new Guid(hidden.Value)); if (userFile != null && userFile.username != edit.Text) { userFile.username = edit.Text; } } provider.SubmitChanges(); } }
public static string SaveForProduct(Guid product_id, Guid order_id, transfer_techn_dates dates) { try { using (ProductProvider provider = new ProductProvider()) { var product = provider.GetProduct(product_id); if (product == null) { return new PostResult("Certain product not found.", 404).ToString(); } // select row with dates from DB var unit_dates = provider.TechnReadinesses.SingleOrDefault(it => it._dictNomenID == product._dictNomenID && it.OrderArticleID == order_id); // if row doesn't exists create new row if (unit_dates == null) { unit_dates = new TechnReadiness() { _dictNomenID = product._dictNomenID.Value, OrderArticleID = order_id }; provider.TechnReadinesses.InsertOnSubmit(unit_dates); } // clear dates if needed and save dates to row unit_dates.techn_date = dates.techn_date; unit_dates.svar_date = dates.svar_date; unit_dates.him_date = dates.him_date; // if row contain all nulled fields delete it if (unit_dates.techn_date == null && unit_dates.him_date == null && unit_dates.svar_date == null) { provider.TechnReadinesses.DeleteOnSubmit(unit_dates); } // save dates to DB provider.SubmitChanges(); } return new PostResult("Ok", 0).ToString(); } catch (Exception e) { return new PostResult("Unknown exception: " + e.Message, -1).ToString(); } }
protected void Save_Click(object sender, EventArgs e) { this.Validate(); if (this.IsValid) { // Проверяем, является ли продукт основной версией ProductProvider productProvider = new ProductProvider(); if (productProvider.IsMainVersion(this.ProductID)) { LabelErrorMessage.Text = "[ ! ] Содержащий данную спецификацию продукт является основной версией. Сохранение отменено."; return; } JavaScriptSerializer js = new JavaScriptSerializer(); List<Dictionary<string, string>> rows = js.Deserialize<List<Dictionary<string, string>>>(hiddenStoreData.Value.ToString()); EditConfigurationProvider provider = new EditConfigurationProvider(); List<GridColumn> gridColumns = provider.GetGridColumns(); // Сохраняем данные, полученные от пользователя в списке конфигураций List<Aspect.Domain.Configuration> result = new List<Aspect.Domain.Configuration>(); #region convert Request to list of Configuration foreach (Dictionary<string, string> row in rows) { Guid productID = new Guid(row["ID"]); Aspect.Domain.Configuration conf = new Aspect.Domain.Configuration(); conf.ID = new Guid(row["ConfID"]); conf.ProductID = productID; conf.ProductOwnerID = this.ProductID; conf.UserID = this.User.ID; foreach (GridColumn column in gridColumns) { if (column is EditableGridColumn) { System.Reflection.PropertyInfo prop = typeof(Aspect.Domain.Configuration).GetProperty(column.DataItem); if (prop.PropertyType == typeof(decimal) || prop.PropertyType == typeof(Nullable<decimal>)) { prop.SetValue(conf, Convert.ToDecimal(row[column.DataItem]), null); } else if (prop.PropertyType == typeof(int) || prop.PropertyType == typeof(Nullable<int>)) { prop.SetValue(conf, Convert.ToInt32(row[column.DataItem]), null); } else if (prop.PropertyType == typeof(Guid) || prop.PropertyType == typeof(Nullable<Guid>)) { prop.SetValue(conf, new Guid(row[column.DataItem]), null); } else if (prop.PropertyType == typeof(Boolean) || prop.PropertyType == typeof(Nullable<Boolean>)) { prop.SetValue(conf, Convert.ToBoolean(row[column.DataItem]), null); } else { prop.SetValue(conf, row[column.DataItem], null); } } } result.Add(conf); } #endregion using (CommonDomain domain = new CommonDomain()) { // Проверка на включение материалов #region check_including_material foreach (Aspect.Domain.Configuration conf in result) { Product prod = domain.Products.Single(p => p.ID == conf.ProductID); if (prod._dictNomen.cod >= 1000000) { LabelErrorMessage.Text = "[ ! ] Обнаружены материалы в спецификации. Сохранение отменино."; return; } } #endregion // Проверка на циклы #region check_for_cycles Guid dictNomenID = (Guid) (from p in domain.Products where p.ID == this.ProductID select p).Single()._dictNomenID; foreach (Aspect.Domain.Configuration conf in result) { Product prod = domain.Products.Where(p => p.ID == conf.ProductID).Single(); if (dictNomenID == prod._dictNomenID) { LabelErrorMessage.Text = "[ ! ] Обнаружены циклические включения продуктов в спецификацию. Сохранение отменино."; return; } if (fnCheckContains(dictNomenID, prod.ID)) { LabelErrorMessage.Text = "[ ! ] Обнаружены циклические включения продуктов в спецификацию. Сохранение отменино."; return; } } #endregion } provider.SaveProductConfiguration(this.ProductID, result, this.User.ID); // установка признака "Основная версия" if (MadeBasicVersion.Checked) { productProvider.SetMainVersion(this.User.ID, new List<Guid>{ProductID}); } // устанавливаем основание изменений if (!String.IsNullOrEmpty(ReasonChanges.Text)) { ProductProperty reasonProperty = productProvider.ProductProperties.SingleOrDefault( pr => pr.PropertyID == new Guid("C266B994-9740-41F6-94DD-07EA5B5FA34A") && pr.ProductID == this.ProductID); if (reasonProperty == null) { reasonProperty = new ProductProperty() { ID = Guid.NewGuid(), PropertyID = new Guid("C266B994-9740-41F6-94DD-07EA5B5FA34A"), ProductID = this.ProductID, Value = ReasonChanges.Text }; productProvider.ProductProperties.InsertOnSubmit(reasonProperty); } else { reasonProperty.Value = ReasonChanges.Text; } productProvider.SubmitChanges(); } // Очищаем сообщение об ошибке и обновляем данные о спецификации LabelErrorMessage.Text = ""; this.BindGridColumns2(); this.BindData(new Dictionary<Guid, Guid>()); } }
protected void SaveButton_Click(object sender, EventArgs e) { //if (this.IsNew) //{ string version = null; string nomenValue = null; CustomValidator validator1 = null; CustomValidator validator2 = null; #region Get the @version foreach (RepeaterItem item in GeneralPropertyRepeater.Items) { if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) { Guid id = new Guid((item.FindControl("HiddenID") as HiddenField).Value); if (id == new Guid("0789DB1A-9BAA-4574-B405-AE570C746C03")) { EditControl editControl = item.FindControl("PropertyValueAdv") as EditControl; if (!editControl.Validate()) return; version = editControl.Value.ToString().Trim(); //version = (item.FindControl("PropertyValue") as TextBox).Text.Trim(); validator1 = item.FindControl("UniqueValueValidator") as CustomValidator; } } } #endregion #region Get the @nomenValue foreach (RepeaterItem item in DictionaryPropertyRepeater.Items) { if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) { Guid dictId = new Guid((item.FindControl("HiddenTreeID") as HiddenField).Value); if (dictId == new Guid("316C6BC7-D883-44C8-AAE0-602F49C73595")) { nomenValue = (item.FindControl("HiddenID") as HiddenField).Value; validator2 = item.FindControl("UniqueValueValidator") as CustomValidator; } } } #endregion #region Check the unique @version && @nomenValue if (version != null && nomenValue != null && validator1 != null && validator2 != null) { using (ProductProvider provider = new ProductProvider()) { var q = from p in provider.Products join pp in provider.ProductProperties on p.ID equals pp.ProductID where pp.PropertyID == new Guid("0789DB1A-9BAA-4574-B405-AE570C746C03") //&& p.ID == this.RequestProductID && pp.Value == version && p._dictNomenID == new Guid(nomenValue) select p; List<Product> list = q.ToList(); if (list.Count > 0 && this.IsNew) { validator1.IsValid = false; validator2.IsValid = false; return; } else if (list.Count > 0 && list.Where(p => p.ID == this.RequestProductID).Count() == 0) { validator1.IsValid = false; validator2.IsValid = false; return; } } } else { return; } #endregion #region Check the main version canceling... string mainVersionValue = null; CustomValidator mainVersionValidator = null; foreach (RepeaterItem item in GeneralPropertyRepeater.Items) { if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) { Guid id = new Guid((item.FindControl("HiddenID") as HiddenField).Value); if (id == new Guid("bbe170b0-28e4-4738-b365-1038b03f4552")) { EditControl editControl = item.FindControl("PropertyValueAdv") as EditControl; if (!editControl.Validate()) return; mainVersionValue = editControl.Value.ToString().Trim(); mainVersionValidator = item.FindControl("UniqueValueValidator") as CustomValidator; } } } if (mainVersionValue != null && mainVersionValidator != null && !this.IsNew) { using (ProductProvider provider = new ProductProvider()) { var q = from p in provider.ProductProperties where p.PropertyID == new Guid("bbe170b0-28e4-4738-b365-1038b03f4552") && p.ProductID == this.RequestProductID select p; List<ProductProperty> list = q.ToList(); if (list.Count == 1) { // попытка изменить основную версию if (list.First().Value == "1") { mainVersionValidator.IsValid = false; return; } } } } #endregion //} if (this.IsNew) { using (ProductProvider provider = new ProductProvider()) { Guid newID = provider.AddNewProduct(this.RequestProductID, User.ID); if (this.IsWithConfs) { // копирование по аналогу вместе с составом provider.CopyConfiguration(this.RequestProductID, newID, this.User.ID); } newProductID = newID; } } using (ProductProvider provider = new ProductProvider()) { Product editedProduct = provider.GetProduct(RequestProductID); if (editedProduct.userID != User.ID) { editedProduct.userID = User.ID; provider.SubmitChanges(); } } #region update dictionary values using (DictionaryProvider provider = new DictionaryProvider()) { foreach (RepeaterItem item in DictionaryPropertyRepeater.Items) { if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) { Guid dictId = new Guid((item.FindControl("HiddenTreeID") as HiddenField).Value); string valueString = (item.FindControl("HiddenID") as HiddenField).Value; DictionaryTree dict = provider.DictionaryTrees.Single(d => d.ID == dictId); if (!string.IsNullOrEmpty(valueString) && !(new Guid(valueString).Equals(Guid.Empty))) { provider.SetProductDictioanryValue(this.RequestProductID, dict.FK, valueString.Trim(), User.ID); } else { provider.DeleteProductDictionaryValue(this.RequestProductID, dict.FK, User.ID); } } } provider.SubmitChanges(); } #endregion #region update properties values using (ProductProvider provider = new ProductProvider()) { bool settingMainVersion = false; foreach (RepeaterItem item in GeneralPropertyRepeater.Items) { if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) { Guid id = new Guid((item.FindControl("HiddenID") as HiddenField).Value); //string value = (item.FindControl("PropertyValue") as TextBox).Text.Trim(); EditControl editControl = item.FindControl("PropertyValueAdv") as EditControl; if (!editControl.IsEmpty && !editControl.Validate()) { continue; } // Если поле "Вес по приказу" не заполнено, то заполняем его из номенклатуры if (id == new Guid("AC37F816-E4C1-4751-99ED-6180D7CCA142") && editControl.IsEmpty) { Product prod = provider.GetProduct(this.RequestProductID); if (prod._dictNomen.pw.HasValue) { editControl.Value = prod._dictNomen.pw.Value.ToString(CultureInfo.InvariantCulture).Replace(".", ","); } } if (editControl.IsEmpty) { ProductProperty prop = provider.ProductProperties.SingleOrDefault(pp => pp.PropertyID == id && pp.ProductID == this.RequestProductID); if (prop != null) { provider.ProductProperties.DeleteOnSubmit(prop); provider.SubmitChanges(); } continue; } string value = editControl.Value.ToString().Trim(); if (editControl.ControlType == TypeEnum.Datetime) { DateTime dt = DateTime.ParseExact(value, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture); if (dt == DateTime.MinValue) value = string.Empty; else value = dt.ToString("yyyy-MM-dd hh:mm:ss.fff"); } // установка признака "Основная версия" if (id == new Guid ("BBE170B0-28E4-4738-B365-1038B03F4552") && value == "1") { settingMainVersion = true; } ProductProperty property = provider.ProductProperties.SingleOrDefault(pp => pp.PropertyID == id && pp.ProductID == this.RequestProductID); if (property != null) { if (property.Value != value) { Aspect.Utility.TraceHelper.Log(User.ID, "Продукт: {0}. Свойство изменино: {1}. Старое значение {2}. Новое значение {3}", this.RequestProductID, property.Property.Name, property.Value, value); } property.Value = value; } else { property = new ProductProperty() { ID = Guid.NewGuid(), ProductID = this.RequestProductID, PropertyID = id, Value = value }; provider.ProductProperties.InsertOnSubmit(property); Property prop = provider.Properties.Single(p => p.ID == id); Aspect.Utility.TraceHelper.Log(User.ID, "Продукт: {0}. Свойство изменино: {1}. Старое значение NULL. Новое значение {2}", this.RequestProductID, prop.Name, value); } provider.SubmitChanges(); } } // Переносим вес из продуктов в _dictNomen, если там он отсутствует (0 или null) if (settingMainVersion) { try { // Пытаемся получить свойство с весом если оно есть string raw_pw = (from p in provider.Products join pp in provider.ProductProperties on p.ID equals pp.ProductID where p.ID == this.RequestProductID && pp.PropertyID == new Guid("AC37F816-E4C1-4751-99ED-6180D7CCA142") select pp.Value).Single(); decimal prod_pw = Convert.ToDecimal(raw_pw.Replace(',', '.'), CultureInfo.InvariantCulture); // Если свойство есть переносим его if (prod_pw != 0) { _dictNomen dict = (from p in provider.Products join d in provider._dictNomens on p._dictNomenID equals d.ID where p.ID == this.RequestProductID select d).Single(); dict.pw = prod_pw; provider.SubmitChanges(); } } catch { // перехватываем исключение, так как веса у продукта может вовсе и не быть } } } #endregion if (this.IsNew) { // добавить свойство "пустой состав" if (!this.IsWithConfs) { using (CommonDomain provider = new CommonDomain()) { var properties = from props in provider.ProductProperties where props.PropertyID == new Guid("00ACC1C7-6857-4317-8713-8B8D9479C5CC") // Свойство "Наличие состава" && props.ProductID == RequestProductID select props; if (properties.Count() > 1) { // если несколько одинаковых свойств - генерируем исключение throw new Exception("У продукта не может быть больше одного свойства \"Наличие состава\"!"); } else if (properties.Count() == 1) { // если только одно свойство - редактируем его, и сохраняемся properties.First().Value = "-"; } else { // если нет ниодного свойства, создаём его с нужным нам значеним provider.ProductProperties.InsertOnSubmit(new ProductProperty() { ID = Guid.NewGuid(), ProductID = RequestProductID, PropertyID = new Guid("00ACC1C7-6857-4317-8713-8B8D9479C5CC"), Value = "-" }); } provider.SubmitChanges(); } } // перенаправить на редактирование Response.Redirect(string.Format("Edit.aspx?ID={0}", this.RequestProductID)); return; } if(Page.IsValid) this.DataLoad(); }