예제 #1
0
        private void AddInternalTraffic(YExternalTraffic newExternalTraffic, YInternalTraffic newInternalTraffic,
                                        CustomUnitOfWork uow)
        {
            newInternalTraffic.ExternalTraffic = newExternalTraffic;
            newInternalTraffic.Status          =
                uow.Session.Query <YInternalTrafficStatus>().Single(i => i.StatusCode == "VISITOR_PLAN");

            // есть разгрузка - создаем груз на приход
            if (newInternalTraffic.PurposeVisit.PurposeVisitCode.ToUpper() == "UNLOADING")
            {
                var cargoIwb = new WmsCargoIWB
                {
                    InternalTraffic    = newInternalTraffic,
                    CargoIWBStampState = "NORMAL"
                };
                uow.RegisterNew(cargoIwb);
            }

            // есть погрузка - создаем груз на расход
            if (newInternalTraffic.PurposeVisit.PurposeVisitCode.ToUpper() == "LOADING")
            {
                var cargoOwb = new WmsCargoOWB
                {
                    InternalTraffic = newInternalTraffic
                };
                uow.RegisterNew(cargoOwb);
            }
        }
예제 #2
0
        private void ProcessSavingLogic(CustomUnitOfWork uow)
        {
            // проверяем текущего работника
            var strWorkerId = WmsEnvironment.LocalData.GetValueFor <string>("WorkerID");

            if (string.IsNullOrEmpty(strWorkerId))
            {
                throw new LogicException("Не указан текущий работник");
            }

            // получаем рейс
            var newExtTraffics = uow.NewItems.OfType <YExternalTraffic>().ToList();

            if (newExtTraffics.Count == 0)
            {
                throw new LogicException("Ожидалось добавление нового рейса");
            }
            if (newExtTraffics.Count > 1)
            {
                throw new LogicException("Ожидалось добавление только одного нового рейса");
            }
            var newExternalTraffic = newExtTraffics[0];

            // проверяем внешние рейсы
            var newInternalTraffics = uow.NewItems.OfType <YInternalTraffic>().ToArray();

            CheckInternalTraffic(newInternalTraffics);

            // водитель, машина уже должны быть заполнены
            if (newExternalTraffic.ExternalTrafficDriver == null)
            {
                throw new LogicException("Не указан водитель");
            }
            if (newExternalTraffic.Vehicle == null)
            {
                throw new LogicException("Не указан автмобиль");
            }

            // заполняем обязательные поля рейса
            newExternalTraffic.Status =
                uow.Session.Query <YExternalTrafficStatus>().Single(i => i.StatusCode == "CAR_PLAN");
            newExternalTraffic.ExternalTrafficVerified = false;

            // регистрируем, чтобы появилась id
            uow.Session.Save(newExternalTraffic);

            // обрабатываем внутренние рейсы
            foreach (var newInternalTraffic in newInternalTraffics)
            {
                AddInternalTraffic(newExternalTraffic, newInternalTraffic, uow);
            }

            var cpvPassWorkerL1 = new YExternalTrafficCPV()
            {
                CustomParam     = uow.Session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == "PassWorkerL1"),
                EXTERNALTRAFFIC = newExternalTraffic
            };

            // регистрируем, чтобы появилась id
            uow.Session.Save(cpvPassWorkerL1);

            var cpvPassWorkerWritePassL2 = new YExternalTrafficCPV()
            {
                CustomParam =
                    uow.Session.Query <WmsCustomParam>().Single(i => i.CustomParamCode == "PassWorkerAcceptEntryL2"),
                EXTERNALTRAFFIC = newExternalTraffic,
                Parent          = cpvPassWorkerL1,
                CPVValue        = strWorkerId
            };

            uow.RegisterNew(cpvPassWorkerWritePassL2);
        }