private string GetCpvValuePropertyName() { if (string.IsNullOrEmpty(_cpvValuePropertyName)) { _cpvValuePropertyName = CpvHelper.GetPropertyName(typeof(T), CustomParamValue.CPVValuePropertyName); } return(_cpvValuePropertyName); }
protected override void SourceObjectPropertyChanged(object sender, PropertyChangedEventArgs e) { base.SourceObjectPropertyChanged(sender, e); if (Source != null && e.PropertyName == GetCpvValuePropertyName()) { if (string.IsNullOrEmpty(Source.CPVValue) && Source.Cp != null && !string.IsNullOrEmpty(Source.Cp.CustomParamDefault)) { Source.CPVValue = Source.Cp.CustomParamDefault; return; } Source.FormattedValue = CpvHelper.GetFormattedValue(Source); } OnNeedRefresh(); }
private CustomParamValue CreateItem(CustomParam cp, decimal?parentCpvId) { var cpv = (CustomParamValue)Activator.CreateInstance(typeof(T)); cpv.CPVID = --_cpvid; cpv.CustomParamCode = cp.GetKey <string>(); cpv.CPV2Entity = CpEntity; cpv.CPVKey = CpKey; cpv.CPVValue = cp.CustomParamDefault; cpv.VCustomParamParent = cp.CustomParamParent; cpv.Cp = cp; cpv.FormattedValue = CpvHelper.GetFormattedValue(cpv); cpv.CPVParent = parentCpvId; cpv.VCustomParamCount = cp.CustomParamCount; cpv.VCustomParamDesc = cp.CustomParamDesc; return(cpv); }
protected override ObservableCollection <DataField> GetFields(SettingDisplay displaySetting) { var result = base.GetFields(displaySetting); var field = result.SingleOrDefault(p => p.FieldName == GetCpvValuePropertyName()); var countField = result.FirstOrDefault(p => p.FieldName == CpvHelper.GetPropertyName(typeof(T), CustomParamValue.VCUSTOMPARAMCOUNTPropertyName)); var descField = result.FirstOrDefault(p => p.FieldName == CpvHelper.GetPropertyName(typeof(T), CustomParamValue.VCUSTOMPARAMDESCPropertyName)); DataField mustSetField = null; DataField mustHaveField = null; result.Clear(); if (field == null) { throw new DeveloperException("Can't find item with FieldName '{0}' in Fields.", GetCpvValuePropertyName()); } field.IsChangeLookupCode = true; field.IsEnabled = false; if (Source != null && Source.Cp != null) { field.LookupCode = Source.Cp.ObjectlookupCode_R; field.DisplayFormat = Source.Cp.CustomParamFormat; var isnotlookup = string.IsNullOrEmpty(field.LookupCode); field.FieldType = CpvHelper.GetValueType(Source); field.IsEnabled = !(Source.Cp.CustomparamInputdisable || Source.Cp.IsReadOnly || field.FieldType == null); //Пост-обработка if (field.FieldType != null) { var type = field.FieldType.GetNonNullableType(); if (type == typeof(DateTime)) { field.Set(ValueDataFieldConstants.BindingIValueConverter, new StringToDateTimeConverter()); field.Set(ValueDataFieldConstants.Parameter, CpvHelper.GetDateTimeFormat()); } else if (type == typeof(bool)) { field.Set(ValueDataFieldConstants.BindingIValueConverter, new StringToDbBool()); } else if (type.IsPrimitive || type == typeof(decimal)) { field.Set(ValueDataFieldConstants.BindingIValueConverter, new StringToNumericConverter()); field.Set(ValueDataFieldConstants.Parameter, field.FieldType); if (isnotlookup) { field.Set(ValueDataFieldConstants.UseSpinEdit, true); } } //if (isnotlookup && string.IsNullOrEmpty(field.DisplayFormat) && // ((type == typeof(float) || type == typeof(double) || type == typeof(decimal)))) // field.DisplayFormat = "N4"; } mustSetField = new DataField() { Name = CustomParamValue.IsMustSetPropertyName, FieldName = CustomParamValue.IsMustSetPropertyName, SourceName = CustomParamValue.IsMustSetPropertyName, IsEnabled = false, Visible = true, Caption = MustSetCaption, Description = MustSetDescription, FieldType = typeof(bool) }; mustHaveField = new DataField() { Name = CustomParamValue.IsMustHavePropertyName, FieldName = CustomParamValue.IsMustHavePropertyName, SourceName = CustomParamValue.IsMustHavePropertyName, IsEnabled = false, Visible = true, Caption = MustHaveCaption, Description = MustHaveDescription, FieldType = typeof(bool) }; } result.Add(field); if (countField != null) { countField.IsEnabled = false; result.Add(countField); } if (descField != null) { descField.IsEnabled = false; result.Add(descField); } if (mustSetField != null) { result.Add(mustSetField); } if (mustHaveField != null) { result.Add(mustHaveField); } return(result); }
private void OnDelete() { if (!ConnectionManager.Instance.AllowRequest()) { return; } if (!CanDelete()) { return; } try { if (GetViewService().ShowDialog(StringResources.Confirmation , StringResources.ConfirmationDeleteObject , MessageBoxButton.YesNo , MessageBoxImage.Question , MessageBoxResult.Yes) != MessageBoxResult.Yes) { return; } var selectedItem = (CustomParamValue)CurrentItem; var deletes = CpvHelper.GetChildsCpvByParentCpv <CustomParamValue>(Source.Cast <CustomParamValue>(), selectedItem, true); if (ShouldUpdateSeparately) { var uowFactory = IoC.Instance.Resolve <IUnitOfWorkFactory>(); using (var uow = uowFactory.Create(false)) { try { uow.BeginChanges(); var mng = GetManager(_itemType); mng.SetUnitOfWork(uow); foreach (var p in deletes) { mng.Delete(p); } mng.Delete(CurrentItem); uow.CommitChanges(); } catch { uow.RollbackChanges(); throw; } } if (ParentViewModel != null) { ParentViewModel.RefreshData(); } } else { foreach (var p in deletes) { Source.Remove(p); } Source.Remove(CurrentItem); } } catch (Exception ex) { throw new OperationException(ExceptionResources.ItemCantDelete, ex); } }
private bool OnSaveInternal(bool canSave) { if (!canSave) { return(true); } if (!ConnectionManager.Instance.AllowRequest()) { return(false); } try { _isUpdating = true; WaitStart(); var changes = GetChanges(Source, true); var relatedChanges = CollectRelatedParams(Source, changes); if (!Validation(relatedChanges)) { return(false); } var selectedItem = SelectedItems[0]; if (ShouldUpdateSeparately) { var uowFactory = IoC.Instance.Resolve <IUnitOfWorkFactory>(); using (var uow = uowFactory.Create(false)) { try { uow.BeginChanges(); var mng = GetManager(); mng.SetUnitOfWork(uow); var sources = Source.OrderByDescending(cpv => cpv.CPVParent, new SpecialComparer()); foreach (var cpv in sources) { var key = cpv.GetKey <decimal>(); if (key < 0) { var item = cpv; if (!string.IsNullOrEmpty(cpv.CPVValue) || //Если были проставлены значения по умолчанию - сохраняем cpv.Cp.CUSTOMPARAMSAVEMODE || HasChanges(GetChanges(CpvHelper.GetChildsCpvByParentCpv <T>(sources, cpv, false), true))) { mng.Insert(ref item); item.Cp = cpv.Cp; item.FormattedValue = CpvHelper.GetFormattedValue(item); SourceUpdate(item, cpv); var childs = sources.Where(i => i.CPVParent == key); foreach (var child in childs) { child.CPVParent = item.CPVID; } } else { cpv.AcceptChanges(); } } else { //Удаляем параметры, у которых не установлен CUSTOMPARAMSAVEMODE и CPVValue is null и нет деток if (string.IsNullOrEmpty(cpv.CPVValue) && !cpv.Cp.CUSTOMPARAMSAVEMODE && CpvHelper.GetChildsCpvByParentCpv <T>(sources, cpv, false).Length == 0) { mng.Delete(cpv); cpv.AcceptChanges(); } else if (cpv.IsDirty) { mng.Update(cpv); } } } uow.CommitChanges(); } catch { uow.RollbackChanges(); throw; } } } _hasAddCpv = false; if (selectedItem != null) { SelectedItem = selectedItem; } OnSourceUpdated(); } catch (Exception ex) { if (!ExceptionHandler(ex, ExceptionResources.ItemCantSave)) { throw; } return(false); } finally { _isUpdating = false; WaitStop(); } return(true); }
private List <T> GetEditModelSource(out double lastQueryExecutionTime) { lastQueryExecutionTime = 0; if (_cps != null) { _cps.Clear(); } _cps = null; if (string.IsNullOrEmpty(CpEntity)) { throw new DeveloperException("Property CpEntity is undefined."); } if (string.IsNullOrEmpty(CpKey)) { throw new DeveloperException("Property CpKey is undefined."); } //Получаем список cpv var mto = IoC.Instance.Resolve <IManagerForObject>(); var modeltype = typeof(T); var mgrType = mto.GetManagerByTypeName(modeltype.Name); if (mgrType == null) { throw new DeveloperException(string.Format("Unknown source type '{0}'.", modeltype.Name)); } List <CustomParamValue> items; using (var mgr = IoC.Instance.Resolve(mgrType, null) as IBaseManager) { if (mgr == null) { throw new DeveloperException(string.Format("Can't resolve IBaseManager by '{0}'.", mgrType.Name)); } var cpvtype = typeof(CustomParamValue); items = mgr.GetFiltered(string.Format("{0} = '{1}' AND {2} = '{3}'", SourceNameHelper.Instance.GetPropertySourceName(cpvtype, CustomParamValue.CPV2EntityPropertyName), CpEntity, SourceNameHelper.Instance.GetPropertySourceName(cpvtype, CustomParamValue.CPVKeyPropertyName), CpKey), GetModeEnum.Partial) .OfType <CustomParamValue>().ToList(); lastQueryExecutionTime += mgr.LastQueryExecutionTime; } using (var mgr = IoC.Instance.Resolve <IBaseManager <CustomParam> >()) { //Получаем список параметров для данного item.CustomParamCode с учетом манданта _cps = ((ICustomParamManager)mgr).GetCPByInstance(CpEntity, CpKey, null, CpSource, CpTarget).ToList(); lastQueryExecutionTime += mgr.LastQueryExecutionTime; } //проверяем наличие родительских параметров в CP var badcps = ValidateParentCustomParam(_cps); if (badcps.Length > 0) { CustomParam[] cpall; using (var mgr = IoC.Instance.Resolve <IBaseManager <CustomParam> >()) { //Получаем список параметров для данного item.CustomParamCode без учета манданта cpall = mgr.GetFiltered(string.Format("{0} = '{1}'", SourceNameHelper.Instance.GetPropertySourceName(typeof(CustomParam), CustomParam.CustomParam2EntityPropertyName), CpEntity), GetModeEnum.Partial) .ToArray(); lastQueryExecutionTime += mgr.LastQueryExecutionTime; } foreach (var bcp in badcps) { var parent = GetParentCustomParam(cpall, bcp); if (parent == null) { throw new DeveloperException("Can't find parent for '{0}'.", bcp); } if (_cps.Any(p => p.GetKey <string>() == parent.GetKey <string>())) { continue; } parent.IsReadOnly = true; _cps.Add(parent); } } if (_cps == null || !_cps.Any()) { _errorMessage = string.IsNullOrEmpty(MandantCode) ? "Проверьте привязку параметров к манданту." : string.Format("Проверьте привязку параметров к манданту '{0}'.", MandantCode); } foreach (var item in items) { item.Cp = _cps.FirstOrDefault(i => i.GetKey <string>() == item.CustomParamCode); item.FormattedValue = CpvHelper.GetFormattedValue(item); } // получим корневые элементы cp - они обязаны быть var rootElements = _cps.Where(i => string.IsNullOrEmpty(i.CustomParamParent)).ToArray(); if (rootElements.Length == 0 && string.IsNullOrEmpty(_errorMessage)) { throw new DeveloperException("Отсутствуют корневые элементы параметров!"); } // добавим корневые cpv, которые отсутствуют foreach (var root in rootElements) { var exist = items.FirstOrDefault(i => i.CustomParamCode.EqIgnoreCase(root.GetKey <string>())); if (exist == null) { items.Add(CreateItem(root, null)); } } var rootCpvs = items.Where(i => i.CPVParent == null).ToArray(); // проходим по всем корневым cpv и добираем отсутствущие элементы foreach (var cpv in rootCpvs) { CollectItems(cpv, _cps.ToArray(), items); } //cpv, которые не должны были быть показаны, но показываем var badcpvs = items.Where(cpv => cpv.Cp == null).ToArray(); if (badcpvs.Any()) { using (var mgr = IoC.Instance.Resolve <IBaseManager <CustomParam> >()) { foreach (var cpv in badcpvs) { var cp = mgr.Get(cpv.CustomParamCode); lastQueryExecutionTime += mgr.LastQueryExecutionTime; if (cp == null) { items.Remove(cpv); } else { cp.IsReadOnly = true; cpv.Cp = cp; if (string.IsNullOrEmpty(cpv.CPVValue)) { cpv.CPVValue = cp.CustomParamDefault; } cpv.FormattedValue = CpvHelper.GetFormattedValue(cpv); } } } } var result = new List <T>(); items.ForEach(p => { p.AcceptChanges(); result.Add((T)p); }); return(result); }
protected override void Delete() { if (!CanDelete()) { return; } try { WaitStart(); if (!ConnectionManager.Instance.AllowRequest()) { return; } var selectedItem = SelectedItems[0]; var deletes = CpvHelper.GetChildsCpvByParentCpv <T>(Source, selectedItem, true); var message = StringResources.ConfirmationDeleteCpv; var messageFormat = StringResources.CpvChanges; if (deletes.Length > 1) { deletes = deletes.OrderByDescending(p => p.CPVParent).ToArray(); message = StringResources.ConfirmationDeleteCpvs; messageFormat = StringResources.CpvsChange; } if (HasChanges(GetChanges(deletes))) { message = string.Format(messageFormat, message); } if (!DeleteConfirmation(message)) { return; } if (ShouldUpdateSeparately) { var dbdeletes = deletes.Where(p => p.CPVID >= 0).ToArray(); if (dbdeletes.Any()) { using (var mng = GetManager()) { mng.Delete(dbdeletes); } } } foreach (var d in deletes) { Source.Remove(d); } OnSourceUpdated(); if (HasSelectedItems()) { SelectedItem = SelectedItems[0]; } } catch (Exception ex) { if (!ExceptionHandler(ex, ExceptionResources.ItemsCantDelete)) { throw; } } finally { WaitStop(); OnNeedChangeFocusRow(); } }