コード例 #1
0
        private string GetTnvdCode(WmsIWBPos iwbPos)
        {
            var iwbPosTnvd = iwbPos.CPV_List.FirstOrDefault(i => i.CustomParam.CustomParamCode == WmsIWBPosCPV.IWBPosTNVD);

            if (!string.IsNullOrEmpty(iwbPosTnvd?.CPVValue))
            {
                return(iwbPosTnvd.CPVValue.ToUpperInvariant());
            }
            var artTnvd = iwbPos.SKU.Art.CPV_List.FirstOrDefault(i => i.CustomParam.CustomParamCode == WmsArtCPV.ARTTNVD);

            return(artTnvd?.CPVValue.ToUpperInvariant());
        }
コード例 #2
0
        private void TestWmsIWBPos2IWBPos(WmsIWBPos source = null, IWBPos target = null)
        {
            if (source == null && target == null)
            {
                return;
            }

            target.ID.ShouldBeEquivalentTo(source.IWBPosID);
            target.Line.ShouldBeEquivalentTo(source.IWBPosNumber);
            target.ArtName.ShouldBeEquivalentTo(source.SKU.Art.ArtName);
            target.ArtHostRef.ShouldBeEquivalentTo(source.SKU.Art.ArtHostRef);
            target.MeasureCode.ShouldBeEquivalentTo(source.SKU.Measure.MeasureCode);
            target.Count.ShouldBeEquivalentTo(source.IWBPosCount);
            target.Count2SKU.ShouldBeEquivalentTo(source.IWBPosCount2SKU);
            target.StatusCode.ShouldBeEquivalentTo(source.Status.StatusCode);
            target.Color.ShouldBeEquivalentTo(source.IWBPosColor);
            target.Tone.ShouldBeEquivalentTo(source.IWBPosTone);
            target.Size.ShouldBeEquivalentTo(source.IWBPosSize);
            target.Batch.ShouldBeEquivalentTo(source.IWBPosBatch);
            target.Lot.ShouldBeEquivalentTo(source.IWBPosLot);
            target.ExpiryDate.ShouldBeEquivalentTo(source.IWBPosExpiryDate);
            target.ProductDate.ShouldBeEquivalentTo(source.IWBPosProductDate);
            target.SerialNumber.ShouldBeEquivalentTo(source.IWBPosSerialNumber);
            target.FactoryHostRef.ShouldBeEquivalentTo(source.Factory?.FactoryHostRef);
            target.QLFCode.ShouldBeEquivalentTo(source.QLF?.QLFCode);
            // TODO нет аналога в WMS
            //target.QLFDetailCode.ShouldBeEquivalentTo(source.Detail);
            target.PriceValue.ShouldBeEquivalentTo(source.IWBPosPriceValue);
            target.IsManual.ShouldBeEquivalentTo(source.IWBPosManual);
            target.TECode.ShouldBeEquivalentTo(source.IWBPosTE);
            target.BatchCode.ShouldBeEquivalentTo(source.IWBBatchCode);
            target.BoxNumber.ShouldBeEquivalentTo(source.IWBPosBoxNumber);
            target.KitArtName.ShouldBeEquivalentTo(source.IWBPosKitArtName);
            target.Owner.ShouldBeEquivalentTo(source.IWBPosOwner.PartnerCode);
            target.InvoiceNumber.ShouldBeEquivalentTo(source.IWBPosInvoiceNumber);
            target.InvoiceDate.ShouldBeEquivalentTo(source.IWBPosInvoiceDate);
            target.ProductCount.ShouldBeEquivalentTo(source.IWBPosProductCount);
            target.Priority.ShouldBeEquivalentTo(source.IWBPosProductPriority);
            target.GTD.ShouldBeEquivalentTo(source.IWBPosGTD);
            target.HostRef.ShouldBeEquivalentTo(source.IWBPosHostRef);
            if (source.CPV_List == null)
            {
                target.CPVList.Should().NotBeNull();
            }
            else
            {
                TestWmsCPVList2CPVList(source.CPV_List.Select(c => (WmsCustomParamValue)c).ToList(), target.CPVList);
            }
        }
コード例 #3
0
        public void Test()
        {
            var sessionShareExtention = new SessionShareExtention();

            var mockWfStorage = new Mock <IWorkflowStorage>();

            mockWfStorage.Setup(i => i.Load(_wfIdentity)).Returns(_wf);
            var wfAppFactory = new WorkflowApplicationFactory(null as InstanceStore, mockWfStorage.Object);

            using (var childContainer = _container.CreateChildContainer())
            {
                childContainer.RegisterInstance <IWorkflowApplicationFactory>(wfAppFactory);
                childContainer.RegisterInstance(sessionShareExtention, new ContainerControlledLifetimeManager());

                using (var session = _sessionFactory.OpenSession())
                    using (var transaction = session.BeginTransaction())
                    {
                        var sessionDecorator = new SessionDecorator(session)
                        {
                            DoNotDispose        = true,
                            ExternalTransaction = new TransactionDecorator(transaction)
                            {
                                DisableActions = true
                            }
                        };

                        var sessionFactoryMock = new Mock <ISessionFactory>();
                        sessionFactoryMock.Setup(i => i.OpenSession()).Returns(sessionDecorator);
                        sessionFactoryMock.Setup(i => i.OpenSession(It.IsAny <IInterceptor>())).Returns(sessionDecorator);

                        #region prepare data

                        var mandant = session.Query <WmsMandant>().FirstOrDefault(o => o.PartnerCode == MandantCode);
                        if (mandant == null)
                        {
                            throw new Exception(string.Format("Отсутствует тестовый мандант с кодом '{0}'", MandantCode));
                        }

                        var eventKind = session.Query <WmsEventKind>().FirstOrDefault(o => o.EventKindCode == EventKindCode);
                        if (eventKind == null)
                        {
                            throw new Exception(string.Format("Отсутствует вид события с кодом '{0}'", EventKindCode));
                        }

                        var partner = new WmsPartner
                        {
                            PartnerCode         = _testName,
                            PartnerName         = _testName,
                            PartnerLink2Mandant = mandant,
                            PartnerHostRef      = _testName
                        };
                        session.Save(partner);

                        var owb = new WmsOWB
                        {
                            OWBName        = _testName,
                            OWBType        = "OWBTYPENORMAL",
                            OWBPriority    = 500,
                            Status         = session.Query <WmsOWBStatus>().FirstOrDefault(o => o.StatusCode == "OWB_ACTIVATED"),
                            Partner        = mandant,
                            OWBProductNeed = "NOACTIVATE",
                            OWBCarrier     = partner
                        };
                        session.Save(owb);

                        var iwb = new WmsIWB
                        {
                            IWBName     = _testName,
                            IWBType     = "IWBTYPENORMAL",
                            IWBPriority = 500,
                            Status      = session.Query <WmsIWBStatus>().FirstOrDefault(o => o.StatusCode == "IWB_COMPLETED"),
                            Partner     = mandant
                        };
                        session.Save(iwb);

                        #region Product

                        var tetype = new WmsTEType
                        {
                            TETypeCode      = _testName,
                            TETypeName      = _testName,
                            TETypeLength    = 1000,
                            TETypeWidth     = 1000,
                            TETypeHeight    = 1000,
                            TETypeMaxWeight = 1000,
                        };
                        session.Save(tetype);

                        var placeType = new WmsPlaceType
                        {
                            PlaceTypeCode      = _testName,
                            PlaceTypeName      = _testName,
                            PlaceTypeCapacity  = 100,
                            PlaceTypeLength    = 10000,
                            PlaceTypeWidth     = 10000,
                            PlaceTypeHeight    = 10000,
                            PlaceTypeMaxWeight = 10000,
                        };
                        session.Save(placeType);

                        var placeClass = new WmsPlaceClass
                        {
                            PlaceClassCode = _testName,
                            PlaceClassName = _testName
                        };
                        session.Save(placeClass);

                        var receiveArea = new WmsReceiveArea
                        {
                            ReceiveAreaCode = _testName,
                            ReceiveAreaName = _testName
                        };
                        session.Save(receiveArea);

                        var supplyArea = new WmsSupplyArea
                        {
                            SupplyAreaCode = _testName,
                            SupplyAreaName = _testName
                        };
                        session.Save(supplyArea);

                        var motionArea = new WmsMotionArea
                        {
                            MotionAreaCode = _testName,
                            MotionAreaName = _testName
                        };
                        session.Save(motionArea);

                        var segmentType = new WmsSegmentType
                        {
                            SegmentTypeCode = _testName,
                            SegmentTypeName = _testName
                        };
                        session.Save(segmentType);

                        var areaType = new WmsAreaType
                        {
                            AreaTypeCode = _testName,
                            AreaTypeName = _testName
                        };
                        session.Save(areaType);

                        var warehouse = new WmsWarehouse
                        {
                            WarehouseCode = _testName,
                            WarehouseName = _testName
                        };
                        session.Save(warehouse);

                        var area = new WmsArea
                        {
                            AreaCode  = _testName,
                            AreaName  = _testName,
                            AreaType  = areaType,
                            Warehouse = warehouse
                        };
                        session.Save(area);

                        var segment = new WmsSegment
                        {
                            SegmentCode   = _testName,
                            SegmentNumber = _testName,
                            SegmentName   = _testName,
                            SegmentType   = segmentType,
                            Area          = area
                        };
                        session.Save(segment);

                        var place = new WmsPlace
                        {
                            PlaceCode        = _testName,
                            Segment          = segment,
                            PlaceS           = 1,
                            PlaceX           = 1,
                            PlaceY           = 1,
                            PlaceZ           = 1,
                            PlaceCapacityMax = 100,
                            PlaceCapacity    = 100,
                            Status           = session.Query <WmsPlaceStatus>().FirstOrDefault(o => o.StatusCode == "PLC_FREE"),
                            PlaceName        = _testName,
                            PlaceType        = placeType,
                            PlaceClass       = placeClass,
                            PlaceSortA       = 1,
                            PlaceSortB       = 1,
                            PlaceSortC       = 1,
                            PlaceSortD       = 1,
                            PlaceSortPick    = 1,
                            ReceiveArea      = receiveArea,
                            MotionArea       = motionArea,
                            SupplyArea       = supplyArea,
                            PlaceWeight      = 10000,
                            PlaceWeightGroup = 10000
                        };
                        session.Save(place);

                        var te = new WmsTE
                        {
                            TECode          = _testName,
                            TEType          = tetype,
                            TECurrentPlace  = place,
                            TECreationPlace = place.PlaceCode,
                            TELength        = 1000,
                            TEWidth         = 1000,
                            TEHeight        = 1000,
                            Status          = session.Query <WmsTEStatus>().FirstOrDefault(o => o.StatusCode == "TE_FREE"),
                            TEPackStatus    = "TE_PKG_NONE",
                            TEWeight        = 1000,
                            TEMaxWeight     = 10000,
                            TETareWeight    = 1000,
                        };
                        session.Save(te);

                        var art = new WmsArt
                        {
                            ArtCode         = _testName,
                            ArtName         = _testName,
                            Partner         = mandant,
                            ArtABCD         = 'A',
                            ArtTempMin      = 1,
                            ArtTempMax      = 1000,
                            ArtDeleted      = false,
                            ArtManufacturer = mandant,
                            ArtType         = _testName
                        };
                        session.Save(art);

                        var measureType = new WmsMeasureType
                        {
                            MeasureTypeCode = _testName,
                            MeasureTypeName = _testName
                        };
                        session.Save(measureType);

                        var measure = new WmsMeasure
                        {
                            MeasureCode      = _testName,
                            MeasureType      = measureType,
                            MeasurePrimary   = true,
                            MeasureFactor    = 1,
                            MeasureDefault   = true,
                            MeasureShortName = "Test",
                            MeasureName      = _testName,
                        };
                        session.Save(measure);

                        var sku = new WmsSKU
                        {
                            Art            = art,
                            Measure        = measure,
                            SKUCount       = 1,
                            SKUPrimary     = true,
                            SKUClient      = false,
                            SKUIndivisible = true,
                            SKUParent      = null,
                            SKUName        = _testName
                        };
                        session.Save(sku);

                        var qlfDetail = new WmsQLFDetail
                        {
                            QLFDetailCode = _testName,
                            QLFDetailName = _testName
                        };
                        session.Save(qlfDetail);

                        var iwbPos = new WmsIWBPos
                        {
                            IWB             = iwb,
                            IWBPosNumber    = 1,
                            SKU             = sku,
                            IWBPosCount     = 1,
                            IWBPosCount2SKU = 1,
                            Status          = session.Query <WmsIWBPosStatus>().SingleOrDefault(o => o.StatusCode == "IWBPOS_CREATED"),
                            QLF             = session.Query <WmsQLF>().Single(o => o.QLFCode == "QLFNORMAL"),
                            IWBPosOwner     = mandant
                        };
                        session.Save(iwbPos);

                        var owbPos = new WmsOWBPos
                        {
                            OWB             = owb,
                            OWBPosNumber    = 1,
                            SKU             = sku,
                            OWBPosCount     = 1,
                            OWBPosCount2SKU = 1,
                            OWBPosReserved  = 1,
                            Status          = session.Query <WmsOWBPosStatus>().SingleOrDefault(o => o.StatusCode == "OWBPOS_ACTIVATED"),
                            QLF             = session.Query <WmsQLF>().Single(o => o.QLFCode == "QLFNORMAL"),
                            OWBPosOwner     = mandant
                        };
                        session.Save(owbPos);

                        var factory = new WmsFactory
                        {
                            FactoryCode      = "TST",
                            FactoryName      = _testName,
                            Partner          = mandant,
                            FactoryBatchCode = _testName
                        };
                        session.Save(factory);

                        var product = new WmsProduct
                        {
                            TE                     = te,
                            SKU                    = sku,
                            ProductCountSKU        = 1,
                            ProductCount           = 2,
                            ProductTTEQuantity     = 3,
                            QLF                    = session.Query <WmsQLF>().Single(o => o.QLFCode == "QLFNORMAL"),
                            QLFDetail              = qlfDetail,
                            ProductInputDate       = DateTime.Now,
                            ProductInputDateMethod = session.Query <SYSENUM_ART_FIFO>().Single(i => i.EnumKey == "FIFO" && i.EnumValue == "YEAR"),
                            ProductDate            = DateTime.Now,
                            ProductPack            = "Pack",
                            ProductPackCountSKU    = 4,
                            ProductExpiryDate      = DateTime.Now,
                            ProductBatch           = "Batch",
                            ProductLot             = "Lot",
                            ProductSerialNumber    = "Number",
                            ProductColor           = "Color",
                            ProductTone            = "Tone",
                            ProductSize            = "Size",
                            Art                    = art,
                            Partner                = mandant,
                            ProductOwner           = mandant,
                            IWBPos                 = iwbPos,
                            OWBPos                 = owbPos,
                            Factory                = factory,
                            Status                 = session.Query <WmsProductStatus>().SingleOrDefault(i => i.StatusCode == "PRODUCT_BUSY"),
                            ProductBatchCode       = "BatchCode",
                            ProductBoxNumber       = "BoxNumber",
                            ProductHostRef         = "HostRef",
                            ProductKitArtName      = "KitArtName",
                            ProductRoot            = 5,
                            ProductPriority        = 6,
                            Country                = session.Query <IsoCountry>().SingleOrDefault(i => i.CountryCode == "RUS"),
                            ProductGTD             = "GTD",
                            TransportTaskID_r      = null
                        };
                        session.Save(product);

                        var ehPrd = new WmsEventHeader
                        {
                            Partner                      = mandant,
                            EventKind                    = session.Query <WmsEventKind>().FirstOrDefault(o => o.EventKindCode == "PRD_INPUT"),
                            Status                       = session.Query <WmsEventHeaderStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_CREATED"),
                            ClientType                   = session.Query <SysClientType>().FirstOrDefault(o => o.ClientTypeCode == "DCL"),
                            EventHeaderBillStatus        = session.Query <EventHeaderBillStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_BILL_OPEN"),
                            EventHeaderOperationBusiness = session.Query <SYSENUM_OPERATION_BUSINESS>().FirstOrDefault(p => p.EnumGroup == "OPERATION" && p.EnumKey == "BUSINESS"),
                            Operation                    = session.Query <BillOperation>().First(),
                            EventHeaderInstance          = "none"
                        };

                        var edPrd = new wmsEventDetailPRD
                        {
                            PARTNERID_R     = mandant.PartnerID,
                            PRODUCTID_R     = product.ProductID,
                            OLDPRODUCTID_R  = product.ProductID,
                            EVENTKINDCODE_R = "PRD_INPUT"
                        };
                        #endregion

                        session.Flush();

                        var eventHeader = new WmsEventHeader
                        {
                            Partner                      = mandant,
                            EventKind                    = session.Query <WmsEventKind>().FirstOrDefault(o => o.EventKindCode == EventKindCode),
                            Status                       = session.Query <WmsEventHeaderStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_CREATED"),
                            ClientType                   = session.Query <SysClientType>().FirstOrDefault(o => o.ClientTypeCode == "DCL"),
                            EventHeaderBillStatus        = session.Query <EventHeaderBillStatus>().FirstOrDefault(o => o.StatusCode == "EVENT_BILL_OPEN"),
                            EventHeaderOperationBusiness = session.Query <SYSENUM_OPERATION_BUSINESS>().FirstOrDefault(p => p.EnumGroup == "OPERATION" && p.EnumKey == "BUSINESS"),
                            Operation                    = session.Query <BillOperation>().First(),
                            EventHeaderInstance          = "none"
                        };

                        var eventDetailOwb = new wmsEventDetailOWB {
                            OWBID_r = owb.OWBID, OWBName = owb.OWBName
                        };

                        var api = new WmsAPI(sessionFactoryMock.Object, _container.Resolve <IWmsXmlConverter>(), _container.Resolve <IWorkflowLoader>());
                        api.RegEvent(session.GetSession(EntityMode.Poco), ehPrd, edPrd, null);
                        api.RegEvent(session.GetSession(EntityMode.Poco), eventHeader, eventDetailOwb, null);

                        var array =
                            session.Query <wmsEventDetailOWB>()
                            .Where(i => i.EventHeader.Partner.PartnerCode == MandantCode &&
                                   i.EventHeader.EventKind.EventKindCode == EventKindCode &&
                                   i.EventHeader.Status.StatusCode == "EVENT_CREATED" &&
                                   i.EventHeader.DateIns >= DateTime.Today.AddDays(-1) &&
                                   !session.Query <IoLaunchControl>()
                                   .Any(
                                       j =>
                                       j.EventHeader == i.EventHeader &&
                                       j.QueueMessageType.Code == EventKindCode &&
                                       j.Mandant.PartnerCode == MandantCode))
                            .ToArray();

                        if (!array.Any())
                        {
                            throw new Exception("Нет данных для теста");
                        }

                        #endregion

                        sessionShareExtention.SharedSession = sessionDecorator;

                        var inputs = new Dictionary <string, object>
                        {
                            { "ROUTE", "ROUTE=OMS" },
                            { "MandantCode", MandantCode },
                            { "BatchSize", "1" }
                        };

                        var service = childContainer.Resolve <WorkflowService>();
                        service.Run(_wfIdentity, inputs);

                        var lan = session.Query <IoLaunchControl>().FirstOrDefault(i => i.EventHeader != null && i.EventHeader.EventHeaderID == eventHeader.EventHeaderID);
                        lan.Should().NotBeNull("Не создали LanchControl");

                        var qout = session.Query <IoQueueOut>()
                                   .Where(i => i.Uri == string.Format("ENTITYKEY={0}; ENTITY = OWB", owb.OWBName) && i.QueueMessageType.Code == QueueMessageTypeCode)
                                   .OrderByDescending(i => i.DateIns)
                                   .First();
                        var data = SerializationHelper.Deserialize <WHSOWBCommandMessage>(qout.Data);
                        data.OWBList[0].ProductList.Count.ShouldBeEquivalentTo(1);
                        data.OWBList[0].ProductList[0].ID.ShouldBeEquivalentTo(product.ProductID);
                        data.OWBList[0].CargoSpaceList.Count().ShouldBeEquivalentTo(1);
                        data.OWBList[0].CargoSpaceList[0].Code.ShouldBeEquivalentTo(te.TECode);

                        transaction.Rollback();
                    }
            }
        }
コード例 #4
0
        public void Smoke()
        {
            WithTemporarySession((session, transaction, container) =>
            {
                #region populate data

                var partner = session.Query <WmsMandant>().Single(i => i.PartnerCode == "TST");

                var reqState = new CstReqCustomsStatus()
                {
                    Status2Entity = "REQCUSTOMS",
                    StatusCode    = "REQCUSTOMS_ATST",
                    StatusName    = "REQCUSTOMS_ATST"
                };
                session.Save(reqState);

                var reqCustoms = new CstReqCustoms
                {
                    Partner = partner,
                    Status  = reqState,
                };
                session.Save(reqCustoms);

                var country1 = new IsoCountry()
                {
                    CountryCode    = "XX",
                    CountryNameRus = "ATST XX",
                    CountryNameEng = "ATST XX",
                    CountryNumeric = "888",
                    CountryAlpha2  = "11"
                };
                session.Save(country1);
                var country2 = new IsoCountry()
                {
                    CountryCode    = "YY",
                    CountryNameRus = "ATST YY",
                    CountryNameEng = "ATST YY",
                    CountryNumeric = "999",
                    CountryAlpha2  = "22"
                };
                session.Save(country2);

                var art1 = new WmsArt
                {
                    ArtCode      = "TST999111",
                    ArtName      = "999111",
                    Partner      = partner,
                    ArtABCD      = 'A',
                    ArtPickOrder = 10,
                    ArtType      = "TST",
                    Country      = country1
                };
                session.Save(art1);

                var art1Cpv = new WmsArtCPV()
                {
                    ART         = art1,
                    CustomParam = session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == WmsArtCPV.ARTTNVD),
                    CPVValue    = "1",
                };
                session.Save(art1Cpv);
                art1.CPV_List.Add(art1Cpv);

                var art2 = new WmsArt
                {
                    ArtCode      = "TST999222",
                    ArtName      = "999222",
                    Partner      = partner,
                    ArtABCD      = 'A',
                    ArtPickOrder = 10,
                    ArtType      = "TST",
                    Country      = country1
                };
                session.Save(art2);

                var measureType = new WmsMeasureType
                {
                    MeasureTypeCode = "ATST",
                    MeasureTypeName = "ATST"
                };
                session.Save(measureType);

                var measure = new WmsMeasure
                {
                    MeasureCode      = "ATST",
                    MeasureName      = "ATST",
                    MeasureShortName = "ATST",
                    MeasureType      = measureType
                };
                session.Save(measure);

                var sku1 = new WmsSKU
                {
                    Art        = art1,
                    Measure    = measure,
                    SKUCount   = 1,
                    SKUPrimary = true,
                    SKUName    = "ATST1"
                };
                session.Save(sku1);
                var sku2 = new WmsSKU
                {
                    Art        = art2,
                    Measure    = measure,
                    SKUCount   = 2,
                    SKUPrimary = true,
                    SKUName    = "ATST2"
                };
                session.Save(sku2);

                var iwbPosState = new WmsIWBPosStatus
                {
                    Status2Entity = "IWB",
                    StatusCode    = "IWBPOS_ATST",
                    StatusName    = "IWBPOS_ATST"
                };
                session.Save(iwbPosState);

                var cpTnvd   = session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == WmsIWBPosCPV.IWBPosTNVD);
                var cpWeight = session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == WmsIWBPosCPV.IWBPosWeightGross);

                // ГОТОВИМ НАКЛАДНУЮ №1
                var iwb1 = new WmsIWB
                {
                    Partner     = partner,
                    IWBName     = "AUTOTEST1",
                    IWBPriority = 100,
                    IWBType     = "TEST"
                };
                session.Save(iwb1);

                var iwb1Pos1 = new WmsIWBPos
                {
                    IWB              = iwb1,
                    IWBPosOwner      = partner,
                    IWBPosNumber     = 1,
                    SKU              = sku1,
                    IWBPosCount      = 10,
                    IWBPosCount2SKU  = 10,
                    Status           = iwbPosState,
                    Country          = country1,
                    IWBPosPriceValue = 11
                };
                session.Save(iwb1Pos1);
                iwb1.IWB_WmsIWBPos_List.Add(iwb1Pos1);
                var iwb1Pos1TnvdCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb1Pos1,
                    CustomParam = cpTnvd,
                    CPVValue    = "1"
                };
                session.Save(iwb1Pos1TnvdCpv);
                iwb1Pos1.CPV_List.Add(iwb1Pos1TnvdCpv);
                var iwb1Pos1WeightCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb1Pos1,
                    CustomParam = cpWeight,
                    CPVValue    = "11"
                };
                session.Save(iwb1Pos1WeightCpv);
                iwb1Pos1.CPV_List.Add(iwb1Pos1WeightCpv);

                var iwb1Pos2 = new WmsIWBPos
                {
                    IWB              = iwb1,
                    IWBPosOwner      = partner,
                    IWBPosNumber     = 2,
                    SKU              = sku1,
                    IWBPosCount      = 10,
                    IWBPosCount2SKU  = 10,
                    Status           = iwbPosState,
                    Country          = country1,
                    IWBPosPriceValue = 12
                };
                session.Save(iwb1Pos2);
                iwb1.IWB_WmsIWBPos_List.Add(iwb1Pos2);
                var iwb1Pos2TnvdCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb1Pos2,
                    CustomParam = cpTnvd,
                    CPVValue    = "2"
                };
                session.Save(iwb1Pos2TnvdCpv);
                iwb1Pos2.CPV_List.Add(iwb1Pos2TnvdCpv);
                var iwb1Pos2WeightCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb1Pos2,
                    CustomParam = cpWeight,
                    CPVValue    = "12"
                };
                session.Save(iwb1Pos2WeightCpv);
                iwb1Pos2.CPV_List.Add(iwb1Pos2WeightCpv);

                var iwb1Pos3 = new WmsIWBPos
                {
                    IWB              = iwb1,
                    IWBPosOwner      = partner,
                    IWBPosNumber     = 3,
                    SKU              = sku2,
                    IWBPosCount      = 10,
                    IWBPosCount2SKU  = 10,
                    Status           = iwbPosState,
                    IWBPosPriceValue = 13
                };
                session.Save(iwb1Pos3);
                iwb1.IWB_WmsIWBPos_List.Add(iwb1Pos3);
                var iwb1Pos3TnvdCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb1Pos3,
                    CustomParam = cpTnvd,
                    CPVValue    = "1"
                };
                session.Save(iwb1Pos3TnvdCpv);
                iwb1Pos3.CPV_List.Add(iwb1Pos3TnvdCpv);
                var iwb1Pos3WeightCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb1Pos3,
                    CustomParam = cpWeight,
                    CPVValue    = "13"
                };
                session.Save(iwb1Pos3WeightCpv);
                iwb1Pos3.CPV_List.Add(iwb1Pos3WeightCpv);

                // ГОТОВИМ НАКЛАДНУЮ №2

                var iwb2 = new WmsIWB
                {
                    Partner     = partner,
                    IWBName     = "AUTOTEST2",
                    IWBPriority = 100,
                    IWBType     = "TEST"
                };
                session.Save(iwb2);

                var iwb2Pos1 = new WmsIWBPos
                {
                    IWB              = iwb2,
                    IWBPosOwner      = partner,
                    IWBPosNumber     = 1,
                    SKU              = sku1,
                    IWBPosCount      = 10,
                    IWBPosCount2SKU  = 10,
                    Status           = iwbPosState,
                    Country          = country1,
                    IWBPosPriceValue = 21
                };
                session.Save(iwb2Pos1);
                iwb2.IWB_WmsIWBPos_List.Add(iwb2Pos1);
                //var iwb2Pos1TnvdCpv = new WmsIWBPosCPV
                //{
                //    IWBPOS = iwb2Pos1,
                //    CustomParam = cpTnvd,
                //    CPVValue = "1"
                //};
                //session.Save(iwb2Pos1TnvdCpv);
                //iwb2Pos1.CPV_List.Add(iwb2Pos1TnvdCpv);
                var iwb2Pos1WeightCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb2Pos1,
                    CustomParam = cpWeight,
                    CPVValue    = "21"
                };
                session.Save(iwb2Pos1WeightCpv);
                iwb2Pos1.CPV_List.Add(iwb2Pos1WeightCpv);

                var iwb2Pos2 = new WmsIWBPos
                {
                    IWB              = iwb2,
                    IWBPosOwner      = partner,
                    IWBPosNumber     = 2,
                    SKU              = sku1,
                    IWBPosCount      = 10,
                    IWBPosCount2SKU  = 10,
                    Status           = iwbPosState,
                    Country          = country2,
                    IWBPosPriceValue = 22
                };
                session.Save(iwb2Pos2);
                iwb2.IWB_WmsIWBPos_List.Add(iwb2Pos2);
                var iwb2Pos2TnvdCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb2Pos2,
                    CustomParam = cpTnvd,
                    CPVValue    = "1"
                };
                session.Save(iwb2Pos2TnvdCpv);
                iwb2Pos2.CPV_List.Add(iwb2Pos2TnvdCpv);

                var iwb2Pos2WeightCpv = new WmsIWBPosCPV
                {
                    IWBPOS      = iwb2Pos2,
                    CustomParam = cpWeight,
                    CPVValue    = "22"
                };
                session.Save(iwb2Pos2WeightCpv);
                iwb2Pos2.CPV_List.Add(iwb2Pos2WeightCpv);


                // ПРИВЯЗЫВАЕМ НАКЛАДНЫЕ К ЗАЯВКЕ
                var req2iwb1 = new CstReqCustoms2WB()
                {
                    IWB        = iwb1,
                    ReqCustoms = reqCustoms
                };
                session.Save(req2iwb1);
                reqCustoms.ReqCustoms_CstReqCustoms2WB_List.Add(req2iwb1);

                var req2iwb2 = new CstReqCustoms2WB()
                {
                    IWB        = iwb2,
                    ReqCustoms = reqCustoms
                };
                session.Save(req2iwb2);
                reqCustoms.ReqCustoms_CstReqCustoms2WB_List.Add(req2iwb2);

                #endregion

                session.Flush();

                var api = container.Resolve <WmsAPI>();

                var res = api.FillReqCustomsPos(reqCustoms.ReqCustomsID, true);

                session.Flush();

                res.Should().BeTrue();

                // перечитываем
                session.Refresh(reqCustoms);
                reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().HaveCount(4);
                reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().ContainSingle(i =>
                                                                                   i.ReqCustomsTNVD == "2" &&
                                                                                   i.Country == country1 &&
                                                                                   i.Art == art1);
                reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().ContainSingle(i =>
                                                                                   i.ReqCustomsTNVD == "1" &&
                                                                                   i.Country == country2 &&
                                                                                   i.Art == art1);
                reqCustoms.ReqCustoms_CstReqCustomsPos_List.Should().ContainSingle(i =>
                                                                                   i.ReqCustomsTNVD == "1" &&
                                                                                   i.Country == country1 &&
                                                                                   i.Art == art2);
                var pos1 = reqCustoms.ReqCustoms_CstReqCustomsPos_List.Single(i =>
                                                                              i.ReqCustomsTNVD == "1" &&
                                                                              i.Country == country1 &&
                                                                              i.Art == art1);
                pos1.ReqCustomsWeightGross.ShouldBeEquivalentTo(int.Parse(iwb1Pos1WeightCpv.CPVValue) + int.Parse(iwb2Pos1WeightCpv.CPVValue));
                pos1.ReqCustomsAmount.ShouldBeEquivalentTo(iwb1Pos1.IWBPosPriceValue + iwb2Pos1.IWBPosPriceValue);
                pos1.ReqCustomsCount.ShouldBeEquivalentTo(iwb1Pos1.IWBPosCount + iwb2Pos1.IWBPosCount);
            });
        }