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); } }
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()); }