private void OnEditProperties(object sender, RoutedEventArgs e)
        {
            var button = sender as Button;

            if (button != null)
            {
                var data = _dataGrid.SelectedItem as ValueDataField;
                if (data == null)
                {
                    return;
                }

                var clonedCollection = new ObservableCollection <ValueDataFieldPropertiesEditorDialog.ValueDataFieldProperty>(
                    data.Properties.Select(CreateValueDataFieldProperty));

                var dialog = new ValueDataFieldPropertiesEditorDialog(clonedCollection);
                if (dialog.ShowDialog() == true)
                {
                    data.Properties.Clear();
                    foreach (var item in clonedCollection.Where(p => !string.IsNullOrEmpty(p.Name)))
                    {
                        var value = item.UseWfVariable
                            ? string.Format("{0}{1}", ValueDataFieldConstants.WfVariableFlag, item.Value)
                            : SerializationHelper.ConvertToTrueType(item.Value, item.Type);

                        data.Set(item.Name, value);
                    }
                    button.DataContext = data;
                }
            }
        }
Beispiel #2
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null || !(parameter is Type))
            {
                return(null);
            }

            return(SerializationHelper.ConvertToTrueType(value, (Type)parameter));
        }
Beispiel #3
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
            {
                return(null);
            }

            return(SerializationHelper.ConvertToTrueType(value, typeof(bool)));
        }
 protected virtual object GetCorrectedEditValue(object editValue)
 {
     // если тип поля и тип ключа лукапа не совпадают. то сами приводим к нужному
     if (editValue != null && ValueMemberType != null && !ValueMemberType.IsInstanceOfType(editValue))
     {
         return(SerializationHelper.ConvertToTrueType(editValue, ValueMemberType));
     }
     return(editValue);
 }
Beispiel #5
0
        public override void Initialize(IDictionary parameters)
        {
            base.Initialize(parameters);
            _barcodeCount = parameters.Contains(BarcodeCountParameterName)
                ? (int)SerializationHelper.ConvertToTrueType(parameters[BarcodeCountParameterName], typeof(int)) : BarcodeCountDefault;
            // получаем ШК
            var filter = "barcode2entity = 'SKU' and rownum < " + _barcodeCount + 1;

            using (var mgr = IoC.Instance.Resolve <IBaseManager <Barcode> >())
                _barcodes = mgr.GetFiltered(filter, null).Select(i => i.BarcodeValue).ToArray();
        }
Beispiel #6
0
        private object GetValueFromNode(Node node, Type valueType)
        {
            if (valueType.IsValueType || (typeof(string) == valueType))
            {
                // хитро определяем, что значения нет
                if (node.Nodes == null)
                {
                    return(valueType.IsByRef ? null : Activator.CreateInstance(valueType));
                }

                return(SerializationHelper.ConvertToTrueType(node.Value, valueType));
            }

            if (typeof(IEnumerable).IsAssignableFrom(valueType) && valueType != typeof(XmlDocument) && !typeof(IDictionary).IsAssignableFrom(valueType))
            {
                var itemType = valueType.IsGenericType ? valueType.GetGenericArguments()[0] : typeof(string);
                var listType = valueType.IsInterface ? typeof(List <>).MakeGenericType(itemType) : valueType;
                var list     = (IList)Activator.CreateInstance(listType);
                foreach (var n in node.Nodes)
                {
                    list.Add(GetValueFromNode(n, itemType));
                }

                return(list);
            }

            // если сложный объект, то разбираем его сложно
            if (typeof(IXmlSerializable).IsAssignableFrom(valueType) && (node.Value != null || node.Nodes != null))
            {
                if (node.Value != null)
                {
                    using (var sr = new StringReader(node.Value))
                        using (var xmlReader = XmlReader.Create(sr))
                            return(XmlDocumentConverter.ConvertTo(valueType, xmlReader));
                }
            }

            if (valueType == typeof(XmlDocument))
            {
                if (string.IsNullOrEmpty(node.Value))
                {
                    return(null);
                }
                var doc = new XmlDocument();
                doc.LoadXml(node.Value);
                return(doc);
            }
            return(node.Value);
        }
Beispiel #7
0
        public override void Initialize(IDictionary parameters)
        {
            base.Initialize(parameters);

            IoC.Instance.Register <IViewService, RclPackingViewService>(LifeTime.Singleton);

            Assert.IsTrue(parameters.Contains(TargetTeCodeParameterName));
            _packingPlaceCode = (string)SerializationHelper.ConvertToTrueType(parameters[PackingPlaceParameterName], typeof(string));
            Assert.IsNotNull(_packingPlaceCode);
            Assert.IsTrue(parameters.Contains(TargetTeCodeParameterName));
            _targetTeCode = (string)SerializationHelper.ConvertToTrueType(parameters[TargetTeCodeParameterName], typeof(string));
            Assert.IsNotNull(_targetTeCode);
            _checkWhs = true;
            if (parameters.Contains(CheckWhsParameterName))
            {
                _checkWhs = (bool)SerializationHelper.ConvertToTrueType(parameters[CheckWhsParameterName], typeof(bool));
            }

            _rclPackingActivity = new RclPackingActivity();

            _barcodes = new Dictionary <string, Barcode[]>();

            using (var mgr = IoC.Instance.Resolve <IBaseManager <TE> >())
            {
                _sourceTeList =
                    mgr.GetFiltered(string.Format("tecurrentplace='{0}' and tepackstatus='TE_PKG_NONE'", _packingPlaceCode)).ToArray();
                _targetTe = mgr.Get(_targetTeCode);
            }
            using (var mgr = IoC.Instance.Resolve <IBaseManager <Barcode> >())
            {
                foreach (var te in _sourceTeList)
                {
                    _barcodes.Add(te.GetKey <string>(),
                                  mgr.GetFiltered(string.Format("barcode2entity = 'SKU' and barcodekey in (select p.skuid_r from wmsproduct p where p.tecode_r = '{0}')", te.GetKey <string>())).ToArray());
                }
            }

            _random = new Random();

            _teCount = _sourceTeList.Count();

            var vs = IoC.Instance.Resolve <IViewService>() as RclPackingViewService;

            if (vs == null)
            {
                throw new Exception("IViewService is not RclPackingViewService");
            }
            vs.Barcodes = _barcodes;
        }
        //protected override void OnSelectedItemChanged(object oldValue, object newValue)
        //{
        //    base.OnSelectedItemChanged(oldValue, newValue);
        //    var sel = (Partner)newValue;
        //    SetProperties(sel);
        //}

        protected override object GetCorrectedEditValue(object editValue)
        {
            var bo = editValue as WMSBusinessObject;

            if (bo != null)
            {
                return(bo.GetProperty(LookupInfo.ValueMember));
            }
            // если тип поля и тип ключа лукапа не совпадают. то сами приводим к нужному
            if (editValue != null && ValueMemberType != null && !ValueMemberType.IsInstanceOfType(editValue))
            {
                return(SerializationHelper.ConvertToTrueType(editValue, ValueMemberType));
            }
            return(editValue);
        }
Beispiel #9
0
        public T Get <T>(string name)
        {
            if (string.IsNullOrEmpty(name) || !Properties.ContainsKey(name))
            {
                return(default(T));
            }

            try
            {
                return((T)SerializationHelper.ConvertToTrueType(Properties[name], typeof(T)));
            }
            catch (Exception ex)
            {
                throw new OperationException(Resources.ExceptionResources.TypeConversionError, "ValueDataField.", name, typeof(T), ex);
            }
        }
Beispiel #10
0
        public T Get <T>(string paramName)
        {
            if (_context == null)
            {
                throw new OperationException("ServiceContext is null");
            }

            var value = _context.Get(paramName);

            if (string.IsNullOrEmpty(value))
            {
                return(default(T));
            }

            return((T)SerializationHelper.ConvertToTrueType(value, typeof(T)));
        }
Beispiel #11
0
        protected object GetTrueKeyValue <TEnt>(string id, IBaseManager <TEnt> mgr)
            where TEnt : WMSBusinessObject, new()
        {
            var tmp        = (WMSBusinessObject)mgr.New();
            var keyName    = tmp.GetPrimaryKeyPropertyName();
            var descriptor =
                TypeDescriptor.GetProperties(tmp.GetType())
                .Cast <PropertyDescriptor>()
                .FirstOrDefault(i => i.Name.EqIgnoreCase(keyName));

            if (descriptor == null)
            {
                return(null);
            }
            var type = descriptor.PropertyType;

            return(SerializationHelper.ConvertToTrueType(id, type));
        }
Beispiel #12
0
        public void StartSession(string clientcode, string clienttypecode, string clientip, string clientmac,
                                 string clientSessionAppKey, ref decimal?clientSessionId,
                                 string clientSessionUserDomainName, string clientSessionClientVersion, string clientSessionServiceId, string clientOSVersion)
        {
            var clientCodeParam = new TransmitterParam {
                Name = "clientcode", Type = typeof(string), Value = clientcode, IsOut = false
            };
            var clienttypecodeParam = new TransmitterParam {
                Name = "clienttypecode", Type = typeof(string), Value = clienttypecode, IsOut = false
            };
            var clientipParam = new TransmitterParam {
                Name = "clientip", Type = typeof(string), Value = clientip, IsOut = false
            };
            var clientmacParam = new TransmitterParam {
                Name = "clientmac", Type = typeof(string), Value = clientmac, IsOut = false
            };
            var clientSessionAppKeyParam = new TransmitterParam {
                Name = "clientSessionAppKey", Type = typeof(string), Value = clientSessionAppKey, IsOut = false
            };
            var clientSessionIdParam = new TransmitterParam {
                Name = "clientSessionId", Type = typeof(decimal?), Value = clientSessionId, IsOut = true
            };
            var clientSessionUserDomainNameParam = new TransmitterParam {
                Name = "clientSessionUserDomainName", Type = typeof(string), Value = clientSessionUserDomainName, IsOut = false
            };
            var clientSessionClientVersionParam = new TransmitterParam {
                Name = "clientSessionClientVersion", Type = typeof(string), Value = clientSessionClientVersion, IsOut = false
            };
            var clientSessionServiceIdParam = new TransmitterParam {
                Name = "clientSessionServiceId", Type = typeof(string), Value = clientSessionServiceId, IsOut = false
            };
            var clientOSVersionParam = new TransmitterParam {
                Name = "clientOSVersion", Type = typeof(string), Value = clientOSVersion, IsOut = false
            };

            var telegram = new RepoQueryTelegramWrapper(typeof(ClientSession).Name, "StartSession",
                                                        new[] { clientCodeParam, clienttypecodeParam, clientipParam, clientmacParam, clientSessionAppKeyParam, clientSessionIdParam,
                                                                clientSessionUserDomainNameParam, clientSessionClientVersionParam, clientSessionServiceIdParam, clientOSVersionParam });

            ProcessTelegramm(telegram);
            clientSessionId = clientSessionIdParam.Value == null
                ? (decimal?)null
                : (decimal)SerializationHelper.ConvertToTrueType(clientSessionIdParam.Value, typeof(decimal));
        }
 private bool CheckDefaultValue()
 {
     if (!string.IsNullOrEmpty(Source.REPORTFILTERDEFAULTVALUE) && Source.REPORTFILTERDATATYPE != null)
     {
         Type dataType;
         using (var sysObjectManager = IoC.Instance.Resolve <ISysObjectManager>())
             dataType = sysObjectManager.GetTypeBySysObjectId((int)Source.REPORTFILTERDATATYPE);
         try
         {
             var tmp = SerializationHelper.ConvertToTrueType(Source.REPORTFILTERDEFAULTVALUE, dataType);
             Source.REPORTFILTERDEFAULTVALUE = tmp.To <String>();
         }
         catch
         {
             GetViewService().ShowDialog(StringResources.Error, string.Format("Указанное значение '{0}' не соответствует типу '{1}'", Source.REPORTFILTERDEFAULTVALUE, dataType), MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.Yes);
             return(false);
         }
     }
     return(true);
 }
Beispiel #14
0
        public static T ConvertTo <T>(this object value)
        {
            if (value == null)
            {
                return(default(T));
            }

            var type = typeof(T);

            if (type == typeof(DateTime?) && value.To <string>() == string.Empty)
            {
                return(default(T));
            }

            var result = SerializationHelper.ConvertToTrueType(value, type);

            if (result == null && !type.IsNullable())
            {
                return(default(T));
            }

            return((T)result);
        }
Beispiel #15
0
        private void ValidatePMConfig(string propertyName)
        {
            if (Attributes != null)
            {
                var attrs = Attributes.Where(i => i.ObjectName_r.Equals(propertyName));
                Errors.Remove(propertyName);
                foreach (var a in attrs)
                {
                    switch (a.MethodCode_r)
                    {
                    case "MUST_SET":
                        if (ValidatableObject.Members[a.ObjectName_r] == null)
                        {
                            Errors.Add(a.ObjectName_r,
                                       new ValidateError("Поле должно быть заполнено (MUST_SET)", ValidateErrorLevel.Critical));
                        }
                        break;

                    case "MUST_COMPARE":
                        var prevValue = ValidatableObject.GetInitialValue(a.ObjectName_r);
                        if (prevValue != null)
                        {
                            var objType  = prevValue.GetType();
                            var newValue =
                                SerializationHelper.ConvertToTrueType(
                                    ValidatableObject.Members[a.ObjectName_r], objType);
                            if (!Equals(newValue, prevValue))
                            {
                                Errors.Add(a.ObjectName_r,
                                           new ValidateError("Неверно указано значение (MUST_COMPARE)",
                                                             ValidateErrorLevel.Critical));
                            }
                        }
                        break;

                    case "RANGE_WEEK":
                    case "RANGE_DAY":
                    case "RANGE_MONTH":
                    case "RANGE_YEAR":
                        var rangeValue = ValidatableObject.GetInitialValue(a.ObjectName_r);
                        if (rangeValue != null)
                        {
                            if (!RangeDate((DateTime)rangeValue,
                                           (DateTime)SerializationHelper.ConvertToTrueType(ValidatableObject.Members[a.ObjectName_r], typeof(DateTime)),
                                           a.MethodCode_r))
                            {
                                Errors.Add(a.ObjectName_r,
                                           new ValidateError(
                                               string.Format("Указан не допустимый диапазон ({0})", a.MethodCode_r),
                                               ValidateErrorLevel.Critical));
                            }
                        }
                        break;

                    case MinMaxValidateMethodCode:
                        if (a.ValidatorHandle != null)
                        {
                            var validError = a.ValidatorHandle(ValidatableObject.Members[a.ObjectName_r]);
                            if (!string.IsNullOrEmpty(validError))
                            {
                                Errors.Add(a.ObjectName_r, new ValidateError(validError, ValidateErrorLevel.Critical));
                            }
                        }
                        break;
                    }
                }
            }
        }
        private void FillArtToKit(KitWrapper kit, IUnitOfWork uow)
        {
            var arts = ArtLoadHelper.FindArtByArtName(kit.MANDANTID, kit.ARTNAME, GetModeEnum.Full, uow);

            using (var artMgr = IoC.Instance.Resolve <IBaseManager <Art> >())
            {
                if (uow != null)
                {
                    artMgr.SetUnitOfWork(uow);
                }

                // если его нет, то создаем артикул и SKU
                if (!arts.Any())
                {
                    if (kit.KITINSART == 1)
                    {
                        var art = new Art
                        {
                            ArtName       = kit.ARTNAME,
                            ArtDesc       = kit.ARTDESC,
                            ArtCommercDay = 0,
                            ArtPickOrder  = 1,
                            ARTABCD       = kit.ARTABCD,
                            MANDANTID     = kit.MANDANTID
                        };
                        SetXmlIgnore(art, false);
                        artMgr.Insert(ref art);
                        kit.ARTCODE_R = art.ArtCode;
                        Log.DebugFormat("Создан артикул комплекта '{0}'", kit.ARTCODE_R);
                    }
                    else
                    {
                        throw new IntegrationLogicalException("Не существует артикул комплекта = '{0}'", kit.ARTNAME);
                    }

                    // есть ли тип ЕИ
                    var mtFilter = string.Format("{0} = '{1}'",
                                                 SourceNameHelper.Instance.GetPropertySourceName(typeof(MeasureType), MeasureType.MeasureTypeNamePropertyName),
                                                 kit.KITMEASURE);
                    var mtMgr = IoC.Instance.Resolve <IBaseManager <MeasureType> >();
                    mtMgr.SetUnitOfWork(uow);
                    var    measureTypes = mtMgr.GetFiltered(mtFilter).ToArray();
                    string measureTypeCode;
                    if (!measureTypes.Any())
                    {
                        var measureType = new MeasureType
                        {
                            MeasureTypeCode = "U" + kit.KITMEASURE,
                            MeasureTypeName = kit.KITMEASURE
                        };
                        SetXmlIgnore(measureType, false);
                        mtMgr.Insert(ref measureType);
                        measureTypeCode = measureType.MeasureTypeCode;
                        Log.DebugFormat("Создан тип ЕИ (ID = {0})", measureTypeCode);
                    }
                    else
                    {
                        measureTypeCode = measureTypes[0].MeasureTypeCode;
                        Log.DebugFormat("Найден тип ЕИ (ID = {0})", measureTypeCode);
                    }

                    // есть ли ЕИ
                    var measureFilter = string.Format("{0} = '{1}'",
                                                      SourceNameHelper.Instance.GetPropertySourceName(typeof(Measure), Measure.MeasureNamePropertyName),
                                                      kit.KITMEASURE);
                    var measureMgr = IoC.Instance.Resolve <IBaseManager <Measure> >();
                    measureMgr.SetUnitOfWork(uow);
                    var    measures = measureMgr.GetFiltered(measureFilter).ToArray();
                    string measureCode;
                    if (!measures.Any())
                    {
                        var measure = new Measure
                        {
                            MeasureTypeCodeR = measureTypeCode,
                            MeasureFactor    = 1,
                            MeasureName      = kit.KITMEASURE,
                            MeasureCode      = kit.KITMEASURE
                        };
                        SetXmlIgnore(measure, false);
                        measureMgr.Insert(ref measure);
                        measureCode = measure.MeasureCode;
                        Log.DebugFormat("Создана ЕИ (ID = {0})", measureCode);
                    }
                    else
                    {
                        measureCode = measures[0].MeasureCode;
                        Log.DebugFormat("Найдена ЕИ (ID = {0})", measureCode);
                    }

                    var skuMgr = IoC.Instance.Resolve <IBaseManager <SKU> >();
                    skuMgr.SetUnitOfWork(uow);
                    var sku = new SKU
                    {
                        ArtCode     = kit.ARTCODE_R,
                        MeasureCode = measureCode,
                        SKUCount    = (double)SerializationHelper.ConvertToTrueType(kit.KITCOUNT, typeof(double)),
                        SKUPrimary  = true,
                        SKUName     = kit.ARTNAME + "_" + kit.KITMEASURE + "_1"
                    };
                    SetXmlIgnore(sku, false);
                    skuMgr.Insert(ref sku);
                    Log.DebugFormat("Создана SKU шапки комплекта (ID = {0})", sku.SKUID);
                }
                else
                {
                    var firstOrDefault = arts.FirstOrDefault();
                    if (firstOrDefault != null)
                    {
                        kit.ARTCODE_R = firstOrDefault.ArtCode;
                    }
                }
            }
        }
Beispiel #17
0
 public virtual T Get <T>(string key)
 {
     return((T)SerializationHelper.ConvertToTrueType(this[key], typeof(T)));
 }
Beispiel #18
0
        public override void Initialize(IDictionary parameters)
        {
            base.Initialize(parameters);

            IoC.Instance.Register <IViewService, PackingViewService>();

            Assert.IsTrue(parameters.Contains(PackingPlaceParameterName));
            _packingPlace = (string)SerializationHelper.ConvertToTrueType(parameters[PackingPlaceParameterName], typeof(string));
            Assert.IsNotNull(_packingPlace);
            Assert.IsTrue(parameters.Contains(PackingTeParameterName));
            _packingTe = (string)SerializationHelper.ConvertToTrueType(parameters[PackingTeParameterName], typeof(string));
            Assert.IsTrue(parameters.Contains(PackingCountParameterName));
            _packingCount = (int)SerializationHelper.ConvertToTrueType(parameters[PackingCountParameterName], typeof(int));

            BPWorkflowManager.SetObjectCachable(PackWorkflowCodes.WfPack);

            _model = new PackingViewModel();

            // даем моделе время на инициализацию
            if (!new TaskFactory().StartNew(() =>
            {
                while (_model.AvailableTE == null || _model.PackingProducts == null)
                {
                    Thread.Sleep(1);
                }
            }).Wait(30000))
            {
                throw new TimeoutException("Истекло время создания модели");
            }

            if (!new TaskFactory().StartNew(() =>
            {
                _model.AvailableTE.Clear();
                _model.PackingProducts.Clear();
                _model.CurrentPlaceCode = null;
                _model.CurrentPlaceCode = _packingPlace;
                while (_model.AvailableTE.Count == 0 || _model.PackingProducts.Count == 0)
                {
                    Thread.Sleep(1);
                }
            }).Wait(30000))
            {
                throw new TimeoutException("Не удалось обновить данные");
            }

            _model.VisiblePackingProducts = _model.PackingProducts;

            var packTE = _model.AvailableTE.FirstOrDefault(i => i.GetKey <string>() == _packingTe);

            Assert.IsNotNull(packTE);

            _model.SelectedPack = packTE;
            _model.SetActivePackCommand.Execute(null);

            _model.SelectedPackingProducts.Clear();
            _model.SelectedPackingProducts.Add(_model.PackingProducts.First());

            var filters = FilterHelper.GetArrayFilterIn("barcodekey", _model.PackingProducts.Select(i => i.SKUID.ToString()).Distinct().Cast <object>(), " and barcode2entity = 'SKU'");

            using (var mgr = IoC.Instance.Resolve <IBaseManager <Barcode> >())
                _barcodes = mgr.GetFiltered(string.Join(";", filters), GetModeEnum.Partial).Select(j => j.BarcodeValue).ToArray();
        }
Beispiel #19
0
        protected override void Execute(NativeActivityContext context)
        {
            var iwb = Source.Get(context);

            if (iwb == null)
            {
                throw new NullReferenceException("Source");
            }

            var vs = IoC.Instance.Resolve <IViewService>();

            // проверим настройку параметров по манданту
            var cpvMgr  = IoC.Instance.Resolve <ICustomParamManager>();
            var cpValid = cpvMgr.GetCPByInstance("IWB", iwb.GetKey().ToString(), FilterHelper.GetAttrEntity <CustomParam>(CustomParam.CustomParamCodePropertyName)).ToArray();
            var allow   = cpValid.FirstOrDefault(i => i.GetKey().ToString().EqIgnoreCase("IWBStickerArtL1")) != null && cpValid.FirstOrDefault(i => i.GetKey().ToString().EqIgnoreCase("IWBStickerArtValueL2")) != null;

            if (!allow)
            {
                vs.ShowDialog(string.Format("Стикеровка по накладной '{0}'", iwb.GetKey()), string.Format("Для манданта '{0}' отсутствуют параметры стикеровки!", iwb.GetProperty(IWB.VMANDANTCODEPropertyName)), System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Information,
                              System.Windows.MessageBoxResult.OK);
                Result.Set(context, -1);
                return;
            }

            // получаем информацию по товарам

            var stickerList = new List <IwbStickerCpv>();

            cpValid = cpvMgr.GetCPByInstance("ART", iwb.GetKey().ToString(), FilterHelper.GetAttrEntity <CustomParam>(CustomParam.CustomParamCodePropertyName)).ToArray();
            allow   = cpValid.FirstOrDefault(i => i.GetKey().ToString().EqIgnoreCase("ARTStickerNeedL2")) != null;

            if (allow)
            {
                DataTable table;
                using (var mgr = IoC.Instance.Resolve <IBPProcessManager>())
                    table =
                        mgr.ExecuteDataTable(
                            string.Format(
                                "select ARTCODE_R, SUM(QTYSKU) as QTY from vwinput inner join wmscustomparamvalue on vwinput.artcode_r=wmscustomparamvalue.cpvkey where wmscustomparamvalue.cpv2entity='ART' and wmscustomparamvalue.customparamcode_r='ARTStickerNeedL2' and wmscustomparamvalue.cpvvalue=1 and iwbid_r = {0} group by ARTCODE_R",
                                iwb.GetKey()));
                var rows = table.Rows.Cast <DataRow>();
                foreach (var r in rows)
                {
                    decimal?cpvCode      = null;
                    var     artCode      = r["ARTCODE_R"].ToString();
                    decimal?stickerCount = null;

                    var exist = iwb.CustomParamVal == null
                        ? null
                        : iwb.CustomParamVal.FirstOrDefault(
                        i => i.CustomParamCode.EqIgnoreCase("IWBStickerArtL1") && i.CPVValue.EqIgnoreCase(artCode));
                    if (exist != null)
                    {
                        cpvCode = exist.GetKey <decimal>();
                        var child =
                            iwb.CustomParamVal.FirstOrDefault(
                                i => i.CPVParent == cpvCode && i.CustomParamCode.EqIgnoreCase("IWBStickerArtValueL2"));
                        if (child != null)
                        {
                            stickerCount =
                                (decimal)SerializationHelper.ConvertToTrueType(child.CPVValue, typeof(decimal));
                        }
                    }
                    var productCount = (decimal)SerializationHelper.ConvertToTrueType(r["QTY"], typeof(decimal));
                    stickerList.Add(new IwbStickerCpv(cpvCode, artCode, productCount, stickerCount));
                }
            }

            if (iwb.CustomParamVal != null)
            {
                var parentIwb =
                    iwb.CustomParamVal.ToArray()
                    .Where(i => i.CPVParent == null && i.CustomParamCode.EqIgnoreCase("IWBStickerArtL1"));
                foreach (var parent in parentIwb)
                {
                    var exist = stickerList.FirstOrDefault(i => i.ArtCode.EqIgnoreCase(parent.CPVValue));
                    if (exist == null)
                    {
                        decimal?cpvCode      = parent.CPVID;
                        var     artCode      = parent.CPVValue;
                        decimal?stickerCount = null;
                        var     child        =
                            iwb.CustomParamVal.FirstOrDefault(
                                i =>
                                i.CPVParent == parent.CPVID &&
                                i.CustomParamCode.EqIgnoreCase("IWBStickerArtValueL2"));
                        if (child != null)
                        {
                            stickerCount =
                                (decimal)SerializationHelper.ConvertToTrueType(child.CPVValue, typeof(decimal));
                        }
                        stickerList.Add(new IwbStickerCpv(cpvCode, artCode, null, stickerCount));
                    }
                }
            }
            var obj = new IwbStikerViewModel();

            obj.PanelCaption = string.Format("Стикеровка по накладной '{0}'", iwb.GetKey());
            obj.AllowEditing = true;
            obj.Source       = new ObservableCollection <IwbStickerCpv>(stickerList);

            var result = vs.ShowDialogWindow(obj, true, false, "50%", "50%");

            // сохраняем
            if (!result.HasValue || !result.Value)
            {
                Result.Set(context, -1);
            }
            else
            {
                SaveStickerCpv(context, obj.Source);
                Result.Set(context, 0);
            }
        }
Beispiel #20
0
        private static object NodeToValue(Node node, Type valueType)
        {
            //Передаем XmlDocument
            if (valueType == typeof(XmlDocument))
            {
                if (node.Value == null)
                {
                    return(null);
                }
                var doc = new XmlDocument();
                doc.LoadXml(node.Value);
                return(doc);
            }

            // INFO: вынес отдельно от IXmlSerializable чтобы проверить приходит ли документ
            if (typeof(XmlDocument).IsAssignableFrom(valueType))
            {
                if (node.Value == null)
                {
                    return(null);
                }
                var doc = new XmlDocument();
                doc.LoadXml(node.Value);
                return(XmlDocumentConverter.ConvertTo(valueType, doc));
            }

            // сложный объект пусть сам себя разбирает
            if (typeof(IXmlSerializable).IsAssignableFrom(valueType))
            {
                var doc = new XmlDocument();
                if (node.Value != null)
                {
                    doc.LoadXml(node.Value);
                }
                return(node.Value != null?XmlDocumentConverter.ConvertTo(valueType, doc) : null);
            }

            // если ожидаем коллекцию
            if (IsCollectionType(valueType))
            {
                var itemType = valueType.GetGenericArguments()[0];
                // создаем коллекцию
                var res = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(itemType));
                foreach (var n in node.Nodes)
                {
                    var internalValue = NodeToValue(n, itemType);
                    res.Add(internalValue);
                }
                return(res);
            }

            if (valueType.IsNullable() && node.Value == null)
            {
                return(null);
            }

            var universalResult = SerializationHelper.ConvertToTrueType(node.Value, valueType);

            if (universalResult != null)
            {
                return(universalResult);
            }

            return(node.Value);
        }
Beispiel #21
0
 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     return(value == null ? null : SerializationHelper.ConvertToTrueType(value, typeof(string)));
 }
Beispiel #22
0
        public static void Initialize()
        {
            // Добавляем стратегию валидации обязательности при создании
            WMSValidateAttribute.RegisterStrategy("requirement", context =>
            {
                // если значение есть - нечего и проверять
                var isNull = IsNullValueCheck(context.Property.GetValue(context.Obj));
                if (!isNull)
                {
                    return(false);
                }

                // читаем параметры
                if (string.IsNullOrEmpty(context.Parameters))
                {
                    throw new DeveloperException("Ожидались параметры валидации, а их нет");
                }

                var pCreate = context.Parameters.ToLower().Contains("create");
                var pEdit   = context.Parameters.ToLower().Contains("edit");
                if (!pCreate && !pEdit)
                {
                    throw new DeveloperException("Ошибка в параметрах валидации");
                }

                if (pCreate && pEdit)
                {
                    return(true);
                }

                // смотрим, может ли объекты сказать о себе (новый или редактируемый)
                var isNew = context.Obj as IIsNew;
                if (isNew == null)
                {
                    throw new DeveloperException(
                        "Ожидается, что объекты валидации обязательности должны поддерживать интерфейс IIsNew");
                }

                if (pCreate && isNew.IsNew)
                {
                    return(true);
                }

                if (pEdit && !isNew.IsNew)
                {
                    return(true);
                }

                return(false);
            });

            // Добавляем стратегию проверки наличия всех обязательных полей для globalparam
            WMSValidateAttribute.RegisterStrategy("gpv.requirement", context =>
            {
                // вычитываем параметры для данного типа
                var mngGlobalParam = IoC.Instance.Resolve <IGlobalParamManager>();
                var globalParData  = mngGlobalParam.GetByEntity(context.Obj.GetType());

                // отбираем обязательные
                var requireGlobalParData = globalParData.Where(p => p.GlobalParamMustSet).ToArray();

                // обязательных нет - ошибки тоже нет
                if (requireGlobalParData.Length == 0)
                {
                    return(false);
                }

                // получаем список введенных параметров
                var temp    = context.Property.GetValue(context.Obj) as IList;
                var collect = temp?.Cast <GlobalParamValue>().ToArray();

                // бежим по обязательным и смотрим ввели ли уже такие
                var errorList = string.Empty;
                foreach (var p in requireGlobalParData)
                {
                    // если есть - идем дальше
                    if (collect != null && collect.Any(i => i.GlobalParamCode_R.EqIgnoreCase(p.GlobalParamCode)))
                    {
                        continue;
                    }

                    errorList += string.Format("{0} ({1}){2}", p.GlobalParamName, p.GlobalParamCode, Environment.NewLine);
                }

                if (string.IsNullOrEmpty(errorList))
                {
                    return(false);
                }

                context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList);
                return(true);
            });

            // Добавляем стратегию проверки максимального кол-ва параметров globalparamvalue
            WMSValidateAttribute.RegisterStrategy("gpv.maxcount", context =>
            {
                var temp    = context.Property.GetValue(context.Obj) as IList;
                var collect = temp == null ? null : temp.Cast <GlobalParamValue>().ToArray();

                // коллекция пустая - превышать нечего
                if (collect == null || collect.Length == 0)
                {
                    return(false);
                }

                // вычитываем параметры для данного типа
                var mngGlobalParam = IoC.Instance.Resolve <IGlobalParamManager>();
                var globalParData  = mngGlobalParam.GetByEntity(context.Obj.GetType());

                var errorList = string.Empty;
                foreach (var p in globalParData)
                {
                    var count = collect.Count(i => i.GlobalParamCode_R.EqIgnoreCase(p.GlobalParamCode));
                    if (count > p.GlobalParamCount)
                    {
                        errorList += string.Format("{0} ({1}){2}", p.GlobalParamName, p.GlobalParamCode, Environment.NewLine);
                    }
                }

                if (string.IsNullOrEmpty(errorList))
                {
                    return(false);
                }

                context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList);
                return(true);
            });

            // Добавляем стратегию проверки максимального кол-ва параметров customparamvalue
            WMSValidateAttribute.RegisterStrategy("cpv.maxcount", context =>
            {
                var temp    = context.Property.GetValue(context.Obj) as IList;
                var collect = temp == null ? null : temp.Cast <CustomParamValue>().ToArray();

                // коллекция пустая - превышать нечего
                if (collect == null || collect.Length == 0)
                {
                    return(false);
                }

                // вычитываем параметры для данного типа
                var mgrCustomParam = IoC.Instance.Resolve <ICustomParamManager>();
                var customParData  = mgrCustomParam.GetByEntity(context.Obj.GetType());

                var errorList = string.Empty;
                foreach (var p in customParData)
                {
                    var pk    = p.GetKey().To <string>();
                    var count = collect.Count(i => i.CustomParamCode.EqIgnoreCase(pk));
                    if (count > p.CustomParamCount)
                    {
                        errorList += string.Format("{0} ({1}){2}", p.CustomParamName, pk, Environment.NewLine);
                    }
                }

                if (errorList.Length == 0)
                {
                    return(false);
                }

                context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList);
                return(true);
            });

            // Добавляем стратегию проверки наличия всех обязательных полей для customparam
            WMSValidateAttribute.RegisterStrategy("cpv.requirement", context =>
            {
                // вычитываем параметры для данного типа
                var mgrCustomParam = IoC.Instance.Resolve <ICustomParamManager>();

                var obj = context.Obj as IHasParent;
                if (obj != null && string.IsNullOrEmpty(obj.SourceTypeName) && string.IsNullOrEmpty(obj.TargetTypeName))
                {
                    return(false);
                }

                var customParData = obj == null ? mgrCustomParam.GetByEntity(context.Obj.GetType())
                                                 : mgrCustomParam.GetByEntity(context.Obj.GetType(), obj.SourceTypeName, obj.TargetTypeName);

                // отбираем обязательные
                var requireCustomParData = customParData.Where(p => p.CustomParamMustHave).ToArray();

                // обязательных нет - ошибки тоже нет
                if (requireCustomParData.Length == 0)
                {
                    return(false);
                }

                var pCreate = context.Parameters.ToLower().Contains("create");
                var pEdit   = context.Parameters.ToLower().Contains("edit");
                if (!pCreate && !pEdit)
                {
                    throw new DeveloperException("Ошибка в параметрах валидации");
                }

                // смотрим, может ли объекты сказать о себе (новый или редактируемый)
                var isNew = context.Obj as IIsNew;
                if (isNew == null)
                {
                    throw new DeveloperException(
                        "Ожидается, что объекты валидации обязательности должны поддерживать интерфейс IIsNew");
                }

                if (isNew.IsNew && pEdit)
                {
                    return(false);
                }

                if (!isNew.IsNew && pCreate)
                {
                    return(false);
                }

                // получаем список введенных параметров
                var temp    = context.Property.GetValue(context.Obj) as IList;
                var collect = temp == null ? null : temp.Cast <CustomParamValue>().ToArray();

                // бежим по обязательным и смотрим ввели ли уже такие
                var errorList = string.Empty;
                foreach (var p in requireCustomParData)
                {
                    var pk = p.GetKey().To <string>();
                    // если есть - идем дальше
                    if (collect != null && collect.Any(i => i.CustomParamCode.EqIgnoreCase(pk)))
                    {
                        continue;
                    }

                    errorList += string.Format("{0} ({1}){2}", p.CustomParamName, pk, Environment.NewLine);
                }

                if (errorList.Length == 0)
                {
                    return(false);
                }

                context.ErrorMessage += string.Format(":{0}{1}", Environment.NewLine, errorList);
                return(true);
            });

            // Добавляем стратегию проверки минимального граничного значения
            WMSValidateAttribute.RegisterStrategy("range.min", context =>
            {
                var value = context.Property.GetValue(context.Obj);
                if (value == null)
                {
                    return(false);
                }

                var notNullType     = context.Property.PropertyType.GetNonNullableType();
                var rangeTypedValue = SerializationHelper.ConvertToTrueType(context.Value, notNullType);
                var comparable      = rangeTypedValue as IComparable;
                if (comparable == null)
                {
                    throw new DeveloperException("Type {0} is not implement IComparable", rangeTypedValue);
                }

                return(comparable.CompareTo(value) > 0);
            });

            // Добавляем стратегию проверки максимального граничного значения
            WMSValidateAttribute.RegisterStrategy("range.max", context =>
            {
                var value = context.Property.GetValue(context.Obj);
                if (value == null)
                {
                    return(false);
                }

                var notNullType     = context.Property.PropertyType.GetNonNullableType();
                var rangeTypedValue = SerializationHelper.ConvertToTrueType(context.Value, notNullType);
                var comparable      = rangeTypedValue as IComparable;
                if (comparable == null)
                {
                    throw new DeveloperException("Type {0} is not implement IComparable", rangeTypedValue);
                }

                return(comparable.CompareTo(value) < 0);
            });

            // Добавляем стратегию проверки наличия значения по умолчанию
            WMSValidateAttribute.RegisterStrategy(DefaultValueSetter.DefaultStrategyName, context =>
            {
                var eo = context.Obj as EditableBusinessObject;
                // если объект не новый, то не надо валидировать
                if (eo != null && !eo.IsNew)
                {
                    return(false);
                }
                var value     = context.Property.GetValue(context.Obj);
                var errorList = string.Empty;
                if ((value == null) || (value is DateTime && value.Equals(DateTime.MinValue)) ||
                    (value is Guid && value.Equals(Guid.Empty)) ||
                    (value is string && string.IsNullOrEmpty((string)value)))
                {
                    var obj    = (BusinessObject)context.Obj;
                    errorList += obj.GetPropertyDefaultValue(context.Property.Name) ?? "(пустое значение)";
                }

                if (string.IsNullOrEmpty(errorList))
                {
                    return(false);
                }

                context.ErrorMessage += ": " + errorList;
                return(true);
            });
        }