Beispiel #1
0
        public void OnSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (e.Action != NotifyCollectionChangedAction.Add || e.NewItems == null)
            {
                return;
            }

            if (Source == null)
            {
                Source = new WMSBusinessCollection <Entity2GC>();
            }

            foreach (var item in e.NewItems)
            {
                if (item == null)
                {
                    continue;
                }

                if (Source == null)
                {
                    continue;
                }
                var newItem = new Entity2GC
                {
                    ENTITY2GCKEY = ((WMSBusinessObject)item).GetKey().ToString()
                };

                Source.Add(newItem);
                ChildSource.Add((WMSBusinessObject)item);
            }
        }
Beispiel #2
0
        public void ValidateStrategiesGpvRequirementTest()
        {
            var teTypeObject = new TEType();
            var property     = TypeDescriptor.GetProperties(teTypeObject).Find("GLOBALPARAMVAL", true);

            if (property == null)
            {
                return;
            }
            const string strategyName = "gpv.requirement";

            WMSValidateAttribute.TestStrategy(strategyName, new ValidateStrategyContext(teTypeObject, property, null, null)).Should().BeTrue();

            var arrayGpv = new WMSBusinessCollection <TETypeGPV>();

            property.SetValue(teTypeObject, arrayGpv);
            WMSValidateAttribute.TestStrategy(strategyName, new ValidateStrategyContext(teTypeObject, property, null, null)).Should().BeTrue();

            var gpv = new TETypeGPV();

            // HACK - знаем что такой GPV есть для TEType
            gpv.AsDynamic().GLOBALPARAMCODE_R_TETYPEGPV = "TETypeSequence2TENumber";
            arrayGpv.Add(gpv);
            property.SetValue(teTypeObject, arrayGpv);
            WMSValidateAttribute.TestStrategy(strategyName, new ValidateStrategyContext(teTypeObject, property, null, null)).Should().BeFalse();
        }
Beispiel #3
0
        public WMSBusinessCollection <OutputParam> CreateReportParams(Dictionary <string, Variable[]> epsReports, string resultReportFile, bool?changeOdbc)
        {
            var result = new WMSBusinessCollection <OutputParam>();

            if (epsReports != null)
            {
                foreach (var p in epsReports)
                {
                    if (!string.IsNullOrEmpty(p.Key))
                    {
                        result.Add(new OutputParam
                        {
                            OutputParamCode  = EpsTaskParams.EpsReport.ToString(),
                            OutputParamValue = p.Key,
                            OutputParamType  = EpsParamType.REP.ToString()
                        });
                        if (p.Value != null)
                        {
                            foreach (var v in p.Value.Where(v => !string.IsNullOrEmpty(v.Value)))
                            {
                                result.Add(new OutputParam
                                {
                                    OutputParamCode     = v.Value,
                                    OutputParamValue    = v.SubValue,
                                    OutputParamSubvalue = p.Key,
                                    OutputParamType     = EpsParamType.REP.ToString()
                                });
                            }
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(resultReportFile))
            {
                result.Add(new OutputParam
                {
                    OutputParamCode  = EpsTaskParams.ResultReportFile.ToString(),
                    OutputParamValue = resultReportFile,
                    OutputParamType  = EpsParamType.REP.ToString()
                });
            }

            if (changeOdbc.HasValue)
            {
                result.Add(new OutputParam
                {
                    OutputParamCode  = EpsTaskParams.ChangeODBC.ToString(),
                    OutputParamValue = (changeOdbc.Value ? 1 : 0).ToString(CultureInfo.InvariantCulture),
                    OutputParamType  = EpsParamType.REP.ToString()
                });
            }

            return(result.Any() ? result : null);
        }
Beispiel #4
0
        public static string ConvertCollectionOutputParamToString(WMSBusinessCollection <OutputParam> collection)
        {
            if (collection == null)
            {
                return("NULL");
            }
            var result =
                collection.Select(
                    p =>
                    string.Format("({0}='{1}',{2}='{3}',{4}='{5}')", OutputParam.OutputParamCodePropertyName,
                                  p.OutputParamCode, OutputParam.OutputParamValuePropertyName, p.OutputParamValue,
                                  OutputParam.OutputParamSubvaluePropertyName, p.OutputParamSubvalue)).ToArray();

            return(string.Join(",", result));
        }
Beispiel #5
0
        public IEnumerable GetChild(object parent)
        {
            var ret = new WMSBusinessCollection <MotionAreaGroup>();

            foreach (var item in Source)
            {
                if (string.IsNullOrEmpty(item.MotionAreaGroupParent))
                {
                    continue;
                }

                if (((MotionAreaGroup)parent).GetKey().To <string>() == item.MotionAreaGroupParent)
                {
                    ret.Add(item);
                }
            }
            return(ret);
        }
Beispiel #6
0
        public WMSBusinessCollection <OutputParam> CreateEpsParams(bool useZip, bool useReserveCopy)
        {
            var result = new WMSBusinessCollection <OutputParam>();

            if (useZip)
            {
                result.Add(new OutputParam
                {
                    OutputParamCode = EpsTaskParams.Zip.ToString(),
                    OutputParamType = EpsParamType.EPS.ToString()
                });
            }
            if (useReserveCopy)
            {
                result.Add(new OutputParam
                {
                    OutputParamCode = EpsTaskParams.ReserveCopy.ToString(),
                    OutputParamType = EpsParamType.EPS.ToString()
                });
            }
            return(result.Any() ? result : null);
        }
Beispiel #7
0
        public void DeleteAddress()
        {
            var mgr    = CreateManager();
            var client = CreateNew();
            var key    = client.GetKey();

            // создаём инстанс вложенной сущности
            var address = new AddressBook();

            try
            {
                #region .  Create  .

                var oldLength = 0;

                // считываем коллекцию вложенных сущностей
                var addressLst = client.AsDynamic().ADDRESS as IList <AddressBook>;
                if (addressLst == null)
                {
                    addressLst = new WMSBusinessCollection <AddressBook>();
                    client.SetProperty("ADDRESS", addressLst);
                }
                else
                {
                    oldLength = addressLst.Count;
                }

                // заполняем ссылки и обязательные поля вложенной сущности
                address.AsDynamic().ADDRESSBOOKINDEX    = TestDecimal;
                address.AsDynamic().ADDRESSBOOKTYPECODE = "ADR_LEGAL";

                // добавляем связь с вложенной сущностью, сохраняем
                addressLst.Add(address);
                mgr.Update(client);

                // читаем из БД по ключу
                client = mgr.Get(key);
                var addressLstNew = client.AsDynamic().ADDRESS as IList <AddressBook>;

                // проверка создания
                addressLstNew.Should().NotBeNull("Должны были получить хотя бы 1 элемент");
                addressLstNew.Count.ShouldBeEquivalentTo(oldLength + 1, "Manager должен создавать вложенные сущности");

                #endregion

                #region .  Delete  .

                // удалем связь с вложенной сущностью, сохраняем
                addressLst = client.AsDynamic().ADDRESS as IList <AddressBook>;
                address    = addressLst[addressLst.Count - 1];
                addressLst.Remove(address);

                mgr.Update(client);

                // убеждаемся, что корректно удалили
                client        = mgr.Get(key);
                addressLstNew = client.AsDynamic().ADDRESS as IList <AddressBook>;
                if (addressLstNew == null)
                {
                    oldLength.Equals(0);
                }
                else
                {
                    addressLstNew.Count.ShouldBeEquivalentTo(oldLength, "Manager должен удалять вложенные сущности");
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + " УДАЛИТЕ СТРОКУ ИЗ ТАБЛИЦЫ WMSADDRESSBOOK с ADDRESSBOOKINDEX = " + TestDecimal);
            }
            finally
            {
                ClearForSelf();
            }
        }
Beispiel #8
0
        public void SKU2TETypeTest()
        {
            // создаём инстанс связанной сущности
            var tte1 = _tteTest1.CreateNew();
            var tte2 = _tteTest2.CreateNew();

            // создаём инстанс вложенной сущности
            var sku2tte = new SKU2TTE();

            try
            {
                #region .  Create  .

                // создаём инстанс сущности
                var mgr = CreateManager();
                var obj = mgr.New();
                FillRequiredFields(obj);
                mgr.Insert(ref obj);
                var key       = obj.GetKey();
                var oldLength = 0;

                // считываем коллекцию вложенных сущностей
                var sku2tteLst = obj.AsDynamic().TETYPE2SKU as IList <SKU2TTE>;
                if (sku2tteLst == null)
                {
                    sku2tteLst = new WMSBusinessCollection <SKU2TTE>();
                    obj.SetProperty("TETYPE2SKU", sku2tteLst);
                }
                else
                {
                    oldLength = sku2tteLst.Count;
                }

                // заполняем ссылки и обязательные поля вложенной сущности
                sku2tte.AsDynamic().SKU2TTEID         = TestDecimal;
                sku2tte.AsDynamic().SKU2TTETETYPECODE = tte1.GetKey();
                sku2tte.AsDynamic().SKU2TTESKUID      = key;
                sku2tte.AsDynamic().SKU2TTEQUANTITY   = TestDecimal;
                sku2tte.AsDynamic().SKU2TTEMAXWEIGHT  = TestDecimal;
                sku2tte.AsDynamic().SKU2TTELENGTH     = TestDecimal;
                sku2tte.AsDynamic().SKU2TTEWIDTH      = TestDecimal;
                sku2tte.AsDynamic().SKU2TTEHEIGHT     = TestDecimal;

                //new
                CreateManager <SKU2TTE>().Insert(ref sku2tte);

                // добавляем связь с вложенной сущностью, сохраняем
                sku2tteLst.Add(sku2tte);
                mgr.Update(obj);


                // читаем из БД по ключу
                obj = mgr.Get(key);
                var sku2tteLstNew = obj.AsDynamic().TETYPE2SKU as IList <SKU2TTE>;

                // проверка создания
                sku2tteLstNew.Should().NotBeNull("Должны были получить хотя бы 1 элемент");
                var newLength = sku2tteLstNew.Count;
                newLength.ShouldBeEquivalentTo(oldLength + 1, "Manager должен создавать вложенные сущности");

                #endregion

                #region .  Update simple  .

                // сохраняем старое значение не ключевого поля
                sku2tte = sku2tteLstNew[sku2tteLstNew.Count - 1];
                var oldValue = sku2tte.AsDynamic().SKU2TTEHEIGHT;

                // меняем значение
                sku2tte.AsDynamic().SKU2TTEHEIGHT = TestDecimal + 1;
                sku2tteLstNew[sku2tteLstNew.Count - 1] = sku2tte;

                // сохраняем в базе
                mgr.Update(obj);

                // вычитываем из базы
                obj           = mgr.Get(key);
                sku2tteLstNew = obj.AsDynamic().TETYPE2SKU as IList <SKU2TTE>;
                sku2tte       = sku2tteLstNew[sku2tteLstNew.Count - 1];

                // проверяем изменение
                var newValue = sku2tte.AsDynamic().SKU2TTEHEIGHT;
                newValue.Equals(oldValue + 1);

                #endregion

                #region .  Update link  .

                // меняем значение ссылочного поля
                sku2tte.AsDynamic().SKU2TTETETYPECODE = tte2.GetKey();
                sku2tteLstNew[sku2tteLstNew.Count - 1] = sku2tte;

                // сохраняем в базе
                mgr.Update(obj);

                // вычитываем из базы
                obj           = mgr.Get(key);
                sku2tteLstNew = obj.AsDynamic().TETYPE2SKU as IList <SKU2TTE>;
                sku2tte       = sku2tteLstNew[sku2tteLstNew.Count - 1];

                // проверяем изменение
                var newLink = sku2tte.AsDynamic().SKU2TTETETYPECODE;
                newLink.Equals(tte2.GetKey());

                #endregion

                #region .  Delete  .

                // удалем связь с вложенной сущностью, сохраняем
                sku2tteLst = obj.AsDynamic().TETYPE2SKU as IList <SKU2TTE>;
                sku2tte    = sku2tteLst[sku2tteLst.Count - 1];
                sku2tteLst.Remove(sku2tte);
                mgr.Update(obj);

                //new
                CreateManager <SKU2TTE>().Delete(sku2tte);

                // убеждаемся, что корректно удалили
                var deleted = mgr.Get(key);
                sku2tteLstNew = deleted.AsDynamic().TETYPE2SKU as IList <SKU2TTE>;
                if (sku2tteLstNew == null)
                {
                    oldLength.Equals(0);
                }
                else
                {
                    sku2tteLstNew.Count.ShouldBeEquivalentTo(oldLength, "Manager должен удалять вложенные сущности");
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                #region .  ClearForSelf  .

                // чистим за собой
                if (sku2tte != null)
                {
                    var sku2tteMgr = CreateManager <SKU2TTE>();
                    sku2tteMgr.Delete(sku2tte);
                }
                ClearForSelf();

                #endregion
            }
        }
        public static OWBPos[] OwbBoxReserve(decimal?owbid, SalesInvoiceWrapper owbwrapper)
        {
            if (owbwrapper == null || owbwrapper.OWBBOXRESERVE != 1 || !owbwrapper.MANDANTID.HasValue)
            {
                return(new OWBPos[0]);
            }

            var mandantid = owbwrapper.MANDANTID.Value;

            var boxNumbers =
                owbwrapper.OWBPOSL.Where(p => !string.IsNullOrEmpty(p.OWBPOSBOXNUMBER))
                .Select(p => p.OWBPOSBOXNUMBER)
                .Distinct()
                .ToArray();

            if (boxNumbers.Length == 0)
            {
                throw new IntegrationService.IntegrationLogicalException("Номера коробов не определены у всех позиций расходной накладной «{0}» в режиме OWBBOXRESERVE.", owbwrapper.OWBNAME);
            }

            var filterConst = string.Format(" AND MANDANTID = {0} AND STATUSCODE_R = '{1}'", mandantid, ProductStates.PRODUCT_FREE);

            var filterArray = FilterHelper.GetArrayFilterIn("PRODUCTBOXNUMBER", boxNumbers, filterConst);

            var products = new List <Product>();

            using (var mngProduct = IoC.Instance.Resolve <IBaseManager <Product> >())
            {
                foreach (var filter in filterArray)
                {
                    var res = mngProduct.GetFiltered(filter, GetModeEnum.Partial).ToArray();
                    if (res.Length > 0)
                    {
                        products.AddRange(res);
                    }
                }
            }

            if (!products.Any())
            {
                throw new IntegrationService.IntegrationLogicalException("Отсутствует свободный товар для формирования позиций расходной накладной «{0}» в режиме OWBBOXRESERVE.", owbwrapper.OWBNAME);
            }

            var grProducts = products.GroupBy(k => new
            {
                k.ProductBoxNumber,

                k.SKUID,
                k.ProductCount,
                k.PRODUCTOWNER,
                k.PRODUCTKITARTNAME,
                k.QLFCode_r,
                k.QLFDETAILCODE_R,
                k.ProductExpiryDate,
                k.ProductBatch,
                k.FactoryID_R,
                k.ProductColor,
                k.ProductSize,
                k.PRODUCTDATE,
                k.ProductSerialNumber,
                k.PRODUCTLOT,
                k.ProductTone,
            });

            var owbposL   = new WMSBusinessCollection <OWBPos>();
            var posnumber = 0;

            foreach (var grp in grProducts)
            {
                var owbpos = new OWBPos
                {
                    OWBID_R         = owbid,
                    OWBPOSBOXNUMBER = grp.Key.ProductBoxNumber,

                    MandantID    = mandantid,
                    OWBPosOwner  = grp.Key.PRODUCTOWNER,
                    OWBPosNumber = ++posnumber,
                    Status       = OWBPosStates.OWBPOS_CREATED,

                    SKUID            = grp.Key.SKUID,
                    OWBPosCount2SKU  = grp.Key.ProductCount,
                    OWBPOSKITARTNAME = grp.Key.PRODUCTKITARTNAME,

                    QLFCODE_R          = grp.Key.QLFCode_r,
                    QLFDETAILCODE_R    = grp.Key.QLFDETAILCODE_R,
                    OWBPOSEXPIRYDATE   = grp.Key.ProductExpiryDate,
                    OWBPosBatch        = grp.Key.ProductBatch,
                    FactoryID_R        = grp.Key.FactoryID_R,
                    OWBPOSCOLOR        = grp.Key.ProductColor,
                    OWBPOSSIZE         = grp.Key.ProductSize,
                    OWBPosCount        = grp.Sum(p => p.ProductCountSKU),
                    OWBPOSPRODUCTDATE  = grp.Key.PRODUCTDATE,
                    OWBPOSSERIALNUMBER = grp.Key.ProductSerialNumber,
                    OWBPOSLOT          = grp.Key.PRODUCTLOT,
                    OWBPOSTONE         = grp.Key.ProductTone
                };

                owbposL.Add(owbpos);
            }

            return(owbposL.ToArray());
        }