示例#1
0
        public ReturnsReceptionView()
        {
            var baseParameters = new BaseParametersProvider(new ParametersProvider());

            _terminalNomenclatureProvider = baseParameters;
            var routeListRepository = new RouteListRepository(new StockRepository(), baseParameters);

            _carLoadDocumentRepository = new CarLoadDocumentRepository(routeListRepository);
            _carUnloadRepository       = new CarUnloadRepository();
            _subdivisionRepository     = new SubdivisionRepository(new ParametersProvider());

            Build();

            ytreeReturns.ColumnsConfig = Gamma.GtkWidgets.ColumnsConfigFactory.Create <ReceptionItemNode>()
                                         .AddColumn("Номенклатура").AddTextRenderer(node => node.Name)
                                         .AddColumn("№ Кулера").AddTextRenderer(node => node.Redhead)
                                         .AddSetter((cell, node) => cell.Editable = node.NomenclatureCategory == NomenclatureCategory.additional)
                                         .AddColumn("Кол-во")
                                         .AddNumericRenderer(node => node.Amount, false)
                                         .Adjustment(new Gtk.Adjustment(0, 0, 9999, 1, 100, 0))
                                         .AddSetter((cell, node) => cell.Editable = node.EquipmentId == 0)
                                         .AddSetter((cell, node) => CalculateAmount(node))
                                         .AddColumn("Ожидаемое кол-во")
                                         .AddNumericRenderer(node => node.ExpectedAmount, false)
                                         .AddColumn("")
                                         .Finish();

            ytreeReturns.ItemsDataSource = ReceptionReturnsList;
        }
        /// <summary>
        /// Gets the route lists for driver authenticated with the specified key.
        /// </summary>
        /// <returns>The route lists or <c>null</c>.</returns>
        /// <param name="authKey">Authentication key.</param>
        public List <RouteListDTO> GetRouteLists(string authKey)
        {
                        #if DEBUG
            logger.Debug("GetRouteLists called with args:\nauthKey: {0}", authKey);
                        #endif
            try
            {
                using (IUnitOfWork uow = UnitOfWorkFactory.CreateWithoutRoot("[ADS]Получение списка маршрутных листов"))
                {
                    if (!CheckAuth(uow, authKey))
                    {
                        return(null);
                    }

                    var result     = new List <RouteListDTO>();
                    var driver     = EmployeeRepository.GetDriverByAuthKey(uow, authKey);
                    var routeLists = RouteListRepository.GetDriverRouteLists(uow, driver, RouteListStatus.EnRoute, DateTime.Today);

                    foreach (RouteList rl in routeLists)
                    {
                        result.Add(new RouteListDTO(rl));
                    }
                    return(result);
                }
            }
            catch (Exception e)
            {
                logger.Error(e);
            }
            return(null);
        }
示例#3
0
 void CheckCarLoadDocuments()
 {
     if (Entity.Id > 0 && RouteListRepository.GetCarLoadDocuments(UoW, Entity.Id).Any())
     {
         IsEditable = false;
     }
 }
        public CounterpartyTalkViewModel(
            INavigationManager navigation,
            ITdiCompatibilityNavigation tdinavigation,
            IUnitOfWorkFactory unitOfWorkFactory,
            RouteListRepository routedListRepository,
            IInteractiveService interactiveService,
            MangoManager manager) : base(navigation, manager)
        {
            this.NavigationManager = navigation ?? throw new ArgumentNullException(nameof(navigation));
            this.tdiNavigation     = tdinavigation ?? throw new ArgumentNullException(nameof(navigation));

            this.routedListRepository = routedListRepository;
            this.interactiveService   = interactiveService ?? throw new ArgumentNullException(nameof(interactiveService));
            UoW = unitOfWorkFactory.CreateWithoutRoot();

            if (ActiveCall.CounterpartyIds.Any())
            {
                var clients = UoW.GetById <Counterparty>(ActiveCall.CounterpartyIds);
                foreach (Counterparty client in clients)
                {
                    CounterpartyOrderViewModel model = new CounterpartyOrderViewModel(client, unitOfWorkFactory, tdinavigation, routedListRepository, this.MangoManager);
                    CounterpartyOrdersModels.Add(model);
                }
                currentCounterparty = CounterpartyOrdersModels.FirstOrDefault().Client;
            }
            else
            {
                throw new InvalidProgramException("Открыт диалог разговора с имеющимся контрагентом, но ни одного id контрагента не найдено.");
            }
        }
示例#5
0
        private void ReloadReturnedToWarehouse()
        {
            allReturnsToWarehouse = RouteListRepository.GetReturnsToWarehouse(UoW, Entity.Id, Nomenclature.GetCategoriesForShipment());
            var returnedBottlesNom = Int32.Parse(MainSupport.BaseParameters.All["returned_bottle_nomenclature_id"]);

            bottlesReturnedToWarehouse = (int)RouteListRepository.GetReturnsToWarehouse(
                UoW,
                Entity.Id,
                returnedBottlesNom)
                                         .Sum(item => item.Amount);

            defectiveBottlesReturnedToWarehouse = (int)RouteListRepository.GetReturnsToWarehouse(
                UoW,
                Entity.Id,
                NomenclatureRepository.NomenclatureOfDefectiveGoods(UoW).Select(n => n.Id).ToArray())
                                                  .Sum(item => item.Amount);
        }
示例#6
0
        public CounterpartyOrderViewModel(Counterparty client,
                                          IUnitOfWorkFactory unitOfWorkFactory,
                                          ITdiCompatibilityNavigation tdinavigation,
                                          RouteListRepository routedListRepository,
                                          MangoManager mangoManager,
                                          int count = 5)
            : base()
        {
            this.Client               = client;
            this.tdiNavigation        = tdinavigation;
            this.routedListRepository = routedListRepository;
            this.MangoManager         = mangoManager;
            UoW = unitOfWorkFactory.CreateWithoutRoot();
            OrderSingletonRepository orderRepos = OrderSingletonRepository.GetInstance();

            LatestOrder = orderRepos.GetLatestOrdersForCounterparty(UoW, client, count).ToList();

            RefreshOrders = _RefreshOrders;
            NotifyConfiguration.Instance.BatchSubscribe(_RefreshCounterparty)
            .IfEntity <Counterparty>()
            .AndWhere(c => c.Id == client.Id)
            .Or.IfEntity <DeliveryPoint>()
            .AndWhere(d => client.DeliveryPoints.Any(cd => cd.Id == d.Id));
        }
        public CarVersionsViewModel CreateCarVersionsViewModel(Car car)
        {
            var routeListRepository = new RouteListRepository(new StockRepository(), new BaseParametersProvider(new ParametersProvider()));

            return(new CarVersionsViewModel(car, _commonServices, new CarVersionsController(car, routeListRepository)));
        }
示例#8
0
        public static void StartService(IConfig serviceConfig, IConfig firebaseConfig, IDriverServiceParametersProvider parameters)
        {
            string serviceHostName;
            string servicePort;
            string serviceWebPort;
            string smsPaymentServiceHostName;
            string smsPaymentServicePort;

            string firebaseServerApiToken;
            string firebaseSenderId;

            try {
                serviceHostName           = serviceConfig.GetString("service_host_name");
                servicePort               = serviceConfig.GetString("service_port");
                serviceWebPort            = serviceConfig.GetString("service_web_port");
                smsPaymentServiceHostName = serviceConfig.GetString("payment_service_host_name");
                smsPaymentServicePort     = serviceConfig.GetString("payment_service_port");

                firebaseServerApiToken = firebaseConfig.GetString("firebase_server_api_token");
                firebaseSenderId       = firebaseConfig.GetString("firebase_sender_id");
            }
            catch (Exception ex) {
                logger.Fatal(ex, "Ошибка чтения конфигурационного файла.");
                throw;
            }

            logger.Info(String.Format("Запуск службы для водителей"));

            IDriverNotificator driverNotificator = new FirebaseCloudMessagingClient(firebaseServerApiToken, firebaseSenderId);

            ChannelFactory <ISmsPaymentService> smsPaymentServiceChannelFactory = new ChannelFactory <ISmsPaymentService>(
                new BasicHttpBinding(),
                string.Format("http://{0}:{1}/SmsPaymentService", smsPaymentServiceHostName, smsPaymentServicePort)
                );

            var wageParameterService = new WageParameterService(
                new WageCalculationRepository(), new BaseParametersProvider(new ParametersProvider()));

            var employeeRepository      = new EmployeeRepository();
            var routeListRepository     = new RouteListRepository(new StockRepository(), new BaseParametersProvider(new ParametersProvider()));
            var routeListItemRepository = new RouteListItemRepository();
            var trackRepository         = new TrackRepository();
            var orderRepository         = new OrderRepository();

            AndroidDriverServiceInstanceProvider androidDriverServiceInstanceProvider =
                new AndroidDriverServiceInstanceProvider(
                    wageParameterService, parameters, smsPaymentServiceChannelFactory, driverNotificator, employeeRepository,
                    routeListRepository, routeListItemRepository, trackRepository, orderRepository);

            ServiceHost ChatHost          = new ServiceHost(typeof(ChatService));
            ServiceHost AndroidDriverHost = new AndroidDriverServiceHost(androidDriverServiceInstanceProvider);

            ChatHost.AddServiceEndpoint(
                typeof(IChatService),
                new BasicHttpBinding(),
                String.Format("http://{0}:{1}/ChatService", serviceHostName, servicePort)
                );

            ServiceEndpoint webEndPoint = AndroidDriverHost.AddServiceEndpoint(
                typeof(IAndroidDriverServiceWeb),
                new WebHttpBinding(),
                String.Format("http://{0}:{1}/AndroidDriverServiceWeb", serviceHostName, serviceWebPort)
                );
            WebHttpBehavior httpBehavior = new WebHttpBehavior();

            webEndPoint.Behaviors.Add(httpBehavior);

            AndroidDriverHost.AddServiceEndpoint(
                typeof(IAndroidDriverService),
                new BasicHttpBinding(),
                String.Format("http://{0}:{1}/AndroidDriverService", serviceHostName, servicePort)
                );

#if DEBUG
            ChatHost.Description.Behaviors.Add(new PreFilter());
            AndroidDriverHost.Description.Behaviors.Add(new PreFilter());
#endif

            ChatHost.Open();
            AndroidDriverHost.Open();

            //Запускаем таймеры рутины
            orderRoutineTimer          = new System.Timers.Timer(120000);    //2 минуты
            orderRoutineTimer.Elapsed += OrderRoutineTimer_Elapsed;
            orderRoutineTimer.Start();
            trackRoutineTimer          = new System.Timers.Timer(30000);    //30 секунд
            trackRoutineTimer.Elapsed += TrackRoutineTimer_Elapsed;
            trackRoutineTimer.Start();

            logger.Info("Server started.");
        }
示例#9
0
        protected void OnButtonAcceptClicked(object sender, EventArgs e)
        {
            if (buttonAccept.Label == "Подтвердить" && Entity.HasOverweight())
            {
                if (QSMain.User.Permissions["can_confirm_routelist_with_overweight"])
                {
                    if (
                        !MessageDialogHelper.RunQuestionDialog(
                            String.Format(
                                "Вы перегрузили '{0}' на {1} кг.\nВы уверены что хотите подтвердить маршрутный лист?",
                                Entity.Car.Title,
                                Entity.Overweight()
                                )
                            )
                        )
                    {
                        return;
                    }
                }
                else
                {
                    MessageDialogHelper.RunWarningDialog(
                        String.Format(
                            "Вы перегрузили '{0}' на {1} кг.\nПодтвердить маршрутный лист нельзя.",
                            Entity.Car.Title,
                            Entity.Overweight()
                            )
                        );
                    return;
                }
            }

            if (UoWGeneric.Root.Status == RouteListStatus.New)
            {
                var valid = new QSValidator <RouteList>(UoWGeneric.Root,
                                                        new Dictionary <object, object> {
                    { "NewStatus", RouteListStatus.InLoading }
                });
                if (valid.RunDlgIfNotValid((Window)this.Toplevel))
                {
                    return;
                }

                UoWGeneric.Root.ChangeStatus(RouteListStatus.InLoading);

                foreach (var address in UoWGeneric.Root.Addresses)
                {
                    if (address.Order.OrderStatus < Domain.Orders.OrderStatus.OnLoading)
                    {
                        address.Order.ChangeStatus(Domain.Orders.OrderStatus.OnLoading);
                    }
                }

                //Строим маршрут для МЛ.
                if (!Entity.Printed || MessageDialogHelper.RunQuestionWithTitleDialog("Перестроить маршрут?", "Этот маршрутный лист уже был когда-то напечатан. При новом построении маршрута порядок адресов может быть другой. При продолжении обязательно перепечатайте этот МЛ.\nПерестроить маршрут?"))
                {
                    RouteOptimizer optimizer = new RouteOptimizer();
                    var            newRoute  = optimizer.RebuidOneRoute(Entity);
                    if (newRoute != null)
                    {
                        createroutelistitemsview1.DisableColumnsUpdate = true;
                        newRoute.UpdateAddressOrderInRealRoute(Entity);
                        //Рассчитываем расстояние
                        Entity.RecalculatePlanedDistance(new Tools.Logistic.RouteGeometryCalculator(Tools.Logistic.DistanceProvider.Osrm));
                        createroutelistitemsview1.DisableColumnsUpdate = false;
                        var noPlan = Entity.Addresses.Count(x => !x.PlanTimeStart.HasValue);
                        if (noPlan > 0)
                        {
                            MessageDialogHelper.RunWarningDialog($"Для маршрута незапланировано {noPlan} адресов.");
                        }
                    }
                    else
                    {
                        MessageDialogHelper.RunWarningDialog($"Маршрут не был перестроен.");
                    }
                }

                Save();

                if (UoWGeneric.Root.Car.TypeOfUse == CarTypeOfUse.Truck)
                {
                    if (MessageDialogHelper.RunQuestionDialog("Маршрутный лист для транспортировки на склад, перевести машрутный лист сразу в статус '{0}'?", RouteListStatus.OnClosing.GetEnumTitle()))
                    {
                        Entity.ChangeStatus(RouteListStatus.OnClosing);
                        foreach (var item in UoWGeneric.Root.Addresses)
                        {
                            item.Order.OrderStatus = Domain.Orders.OrderStatus.OnTheWay;
                        }
                        Entity.CompleteRoute();
                    }
                }
                else
                {
                    //Проверяем нужно ли маршрутный лист грузить на складе, если нет переводим в статус в пути.
                    var forShipment = Repository.Store.WarehouseRepository.WarehouseForShipment(UoW, Entity.Id);
                    if (forShipment.Count == 0)
                    {
                        if (MessageDialogHelper.RunQuestionDialog("Для маршрутного листа, нет необходимости грузится на складе. Перевести машрутный лист сразу в статус '{0}'?", RouteListStatus.EnRoute.GetEnumTitle()))
                        {
                            valid = new QSValidator <RouteList>(
                                UoWGeneric.Root,
                                new Dictionary <object, object> {
                                { "NewStatus", RouteListStatus.EnRoute }
                            }
                                );

                            Entity.ChangeStatus(valid.RunDlgIfNotValid((Window)this.Toplevel) ? RouteListStatus.New : RouteListStatus.EnRoute);
                        }
                        else
                        {
                            Entity.ChangeStatus(RouteListStatus.New);
                        }
                    }
                }
                Save();
                UpdateButtonStatus();
                return;
            }
            if (UoWGeneric.Root.Status == RouteListStatus.InLoading)
            {
                if (RouteListRepository.GetCarLoadDocuments(UoW, Entity.Id).Any())
                {
                    MessageDialogHelper.RunErrorDialog("Для маршрутного листа были созданы документы погрузки. Сначала необходимо удалить их.");
                }
                else
                {
                    UoWGeneric.Root.ChangeStatus(RouteListStatus.New);
                }
                UpdateButtonStatus();
                return;
            }
        }