public void SaveSetting(Guid userID, SettingEnum setting, string value) { Guid setID = Setting.GetSettingID(setting); using (CommonDomain domain = new CommonDomain()) { UserSetting us = domain.UserSettings.Where(u => u.UserID == userID && u.SettingID == setID).SingleOrDefault(); if (us == null) { us = new UserSetting(); us.ID = Guid.NewGuid(); us.UserID = userID; us.SettingID = setID; us.Value = value; domain.UserSettings.InsertOnSubmit(us); domain.SubmitChanges(); } else { us.Value = value; domain.SubmitChanges(); } } }
/// <summary> /// Копирование всей спецификации из одного продукта в другой /// </summary> public void CopyConfiguration(Guid fromProductID, Guid toProductID, Guid UserID) { // копирование по аналогу вместе с составом using (CommonDomain domain = new CommonDomain()) { var confs = from p in domain.Configurations where p.ProductOwnerID == fromProductID select p; foreach (Aspect.Domain.Configuration conf in confs) { Aspect.Domain.Configuration confRow = new Aspect.Domain.Configuration(); confRow.AutoUpdate = conf.AutoUpdate; confRow.Comment = conf.Comment; confRow.GroupNumber = conf.GroupNumber; confRow.GroupToChange = conf.GroupToChange; confRow.Position = conf.Position; confRow.Quantity = conf.Quantity; confRow.QuantityInclusive = conf.QuantityInclusive; confRow.Zone = conf.Zone; confRow._dictUMID = conf._dictUMID; confRow.dt_upd = conf.dt_upd; if (Guid.Empty.Equals(conf.UserID)) { confRow.UserID = UserID; } else { confRow.UserID = conf.UserID; } confRow.ID = Guid.NewGuid(); confRow.ProductOwnerID = toProductID; confRow.ProductID = conf.ProductID; domain.Configurations.InsertOnSubmit(confRow); } domain.SubmitChanges(); } }
/// <summary> /// Копирование продукта внутри того же класса с заданием /// новой версии. Копируются внешние и внутренние свойства /// продукта. Можно указать новое значение словаря _dictNomen. /// </summary> /// <param name="oldProductID"></param> /// <param name="newVersion"></param> /// <returns>Guid созданного при копировании продукта</returns> public Guid CopyProduct(Guid oldProductID, int newVersion, Guid newDictNomen, Guid userID) { /* создать запись в dbo.Products */ Guid newProductID; Product newProduct, oldProduct; using (CommonDomain commonDomain = new CommonDomain()) { // копируем запись в таблице Product oldProduct = commonDomain.Products.SingleOrDefault(p => p.ID == oldProductID); newProductID = commonDomain.AddNewProduct(oldProductID, true, Guid.Empty.Equals(newDictNomen) ? oldProduct._dictNomenID.Value : newDictNomen, userID); newProduct = commonDomain.Products.SingleOrDefault(p => p.ID == newProductID); // копируем ссылки на словари newProduct._dictNomen1ID = oldProduct._dictNomen1ID; newProduct._dictPVDID = oldProduct._dictPVDID; newProduct._dictSFID = oldProduct._dictSFID; newProduct._dictUMID = oldProduct._dictUMID; /*newProduct.cod_Asp = oldProduct.cod_Asp; newProduct.cod_Nomen_Asp = oldProduct.cod_Nomen_Asp; newProduct.cod_Nomen1_Asp = oldProduct.cod_Nomen1_Asp;*/ commonDomain.SubmitChanges(); } /* скопировать все поля в dbo.ProductProperty */ using (CommonDomain domain = new CommonDomain()) { List<ProductProperty> props = domain.ProductProperties.Where(p => p.ProductID == oldProductID).ToList(); foreach (ProductProperty prop in props) { ProductProperty newProp = new ProductProperty(); newProp.ID = Guid.NewGuid(); newProp.PropertyID = prop.PropertyID; newProp.ProductID = newProduct.ID; newProp.Value = prop.Value; if (prop.PropertyID == new Guid("BBE170B0-28E4-4738-B365-1038B03F4552")) // основная версия { newProp.Value = "0"; } if (prop.PropertyID == new Guid("0789DB1A-9BAA-4574-B405-AE570C746C03")) // версия { newProp.Value = newVersion.ToString(); } if (prop.PropertyID == new Guid("3EA753C8-2B06-41DA-B3DB-421D110B079E")) // дата изменения продукта { // управляется триггером continue; } domain.ProductProperties.InsertOnSubmit(newProp); } domain.SubmitChanges(); } /* вернуть ID созданного продукта */ return newProductID; }
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(); }