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); }
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 контрагента не найдено."); } }
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); }
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))); }
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."); }
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; } }