コード例 #1
0
        private void TestWmsOWBPos2OWBPos(WmsOWBPos source, OWBPos target)
        {
            if (source == null && target == null)
            {
                return;
            }

            target.ID.ShouldBeEquivalentTo(source.OWBPosID);
            target.Line.ShouldBeEquivalentTo(source.OWBPosNumber);
            target.ArtName.ShouldBeEquivalentTo(source.OWBPosArtName);
            target.ArtDesc.ShouldBeEquivalentTo(source.SKU.Art.ArtDesc);
            target.ArtHostRef.ShouldBeEquivalentTo(source.SKU.Art.ArtHostRef);
            target.MeasureCode.ShouldBeEquivalentTo(source.OWBPosMeasure);
            target.Count.ShouldBeEquivalentTo(source.OWBPosCount);
            target.Count2SKU.ShouldBeEquivalentTo(source.OWBPosCount2SKU);
            target.StatusCode.ShouldBeEquivalentTo(source.Status.StatusCode);
            target.Color.ShouldBeEquivalentTo(source.OWBPosColor);
            target.Tone.ShouldBeEquivalentTo(source.OWBPosTone);
            target.Size.ShouldBeEquivalentTo(source.OWBPosSize);
            target.Batch.ShouldBeEquivalentTo(source.OWBPosBatch);
            target.Lot.ShouldBeEquivalentTo(source.OWBPosLot);
            target.ExpiryDate.ShouldBeEquivalentTo(source.OWBPosExpiryDate);
            target.ProductDate.ShouldBeEquivalentTo(source.OWBPosProductDate);
            target.SerialNumber.ShouldBeEquivalentTo(source.OWBPosSerialNumber);
            target.FactoryHostRef.ShouldBeEquivalentTo(source.Factory?.FactoryHostRef);
            target.QLFCode.ShouldBeEquivalentTo(source.QLF?.QLFCode);
            target.QLFDetailCode.ShouldBeEquivalentTo(source.QLFDetailCode_r);
            target.PriceValue.ShouldBeEquivalentTo(source.OWBPosPriceValue);
            target.PriceValueVAT.ShouldBeEquivalentTo(source.OWBPosPriceValueVAT);
            target.Reserved.ShouldBeEquivalentTo(source.OWBPosReserved);
            target.BoxNumber.ShouldBeEquivalentTo(source.OWBPosBoxNumber);
            target.KitArtName.ShouldBeEquivalentTo(source.OWBPosKitArtName);
            target.Owner.ShouldBeEquivalentTo(source.OWBPosOwner?.PartnerCode);
            target.HostRef.ShouldBeEquivalentTo(source.OWBPosHostRef);
            if (source.CPV_List == null)
            {
                target.CPVList.Should().NotBeNull();
            }
            else
            {
                TestWmsCPVList2CPVList(source.CPV_List.Select(c => (WmsCustomParamValue)c).ToList(), target.CPVList);
            }
        }
コード例 #2
0
        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());
        }