Exemplo n.º 1
0
        public RouteListAnalysisViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IOrderSelectorFactory orderSelectorFactory,
            IEmployeeJournalFactory employeeJournalFactory,
            ICounterpartyJournalFactory counterpartyJournalFactory,
            IDeliveryPointJournalFactory deliveryPointJournalFactory,
            ISubdivisionJournalFactory subdivisionJournalFactory,
            IGtkTabsOpener gtkDialogsOpener,
            IUndeliveredOrdersJournalOpener undeliveredOrdersJournalOpener,
            IDeliveryShiftRepository deliveryShiftRepository,
            IEmployeeSettings employeeSettings,
            IUndeliveredOrdersRepository undeliveredOrdersRepository) : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            _orderSelectorFactory           = orderSelectorFactory ?? throw new ArgumentNullException(nameof(orderSelectorFactory));
            _employeeJournalFactory         = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory));
            _counterpartyJournalFactory     = counterpartyJournalFactory ?? throw new ArgumentNullException(nameof(counterpartyJournalFactory));
            _deliveryPointJournalFactory    = deliveryPointJournalFactory ?? throw new ArgumentNullException(nameof(deliveryPointJournalFactory));
            _subdivisionJournalFactory      = subdivisionJournalFactory ?? throw new ArgumentNullException(nameof(subdivisionJournalFactory));
            _gtkDialogsOpener               = gtkDialogsOpener ?? throw new ArgumentNullException(nameof(gtkDialogsOpener));
            _undeliveredOrdersJournalOpener = undeliveredOrdersJournalOpener ?? throw new ArgumentNullException(nameof(undeliveredOrdersJournalOpener));
            _employeeSettings               = employeeSettings ?? throw new ArgumentNullException(nameof(employeeSettings));
            UndeliveredOrdersRepository     =
                undeliveredOrdersRepository ?? throw new ArgumentNullException(nameof(undeliveredOrdersRepository));
            _commonServices = commonServices ?? throw new ArgumentNullException(nameof(commonServices));

            if (deliveryShiftRepository == null)
            {
                throw new ArgumentNullException(nameof(deliveryShiftRepository));
            }

            DeliveryShifts = deliveryShiftRepository.ActiveShifts(UoW);
            Entity.ObservableAddresses.PropertyOfElementChanged += ObservableAddressesOnPropertyOfElementChanged;

            undeliveryViewOpener = new UndeliveredOrdersJournalOpener();
            employeeService      = VodovozGtkServicesConfig.EmployeeService;
            CurrentEmployee      = employeeService.GetEmployeeForUser(UoW, CurrentUser.Id);

            if (CurrentEmployee == null)
            {
                AbortOpening("Ваш пользователь не привязан к действующему сотруднику, вы не можете открыть " +
                             "диалог разбора МЛ, так как некого указывать в качестве логиста.", "Невозможно открыть разбор МЛ");
            }

            LogisticanSelectorFactory = _employeeJournalFactory.CreateWorkingOfficeEmployeeAutocompleteSelectorFactory();
            DriverSelectorFactory     = _employeeJournalFactory.CreateWorkingDriverEmployeeAutocompleteSelectorFactory();
            ForwarderSelectorFactory  = _employeeJournalFactory.CreateWorkingForwarderEmployeeAutocompleteSelectorFactory();

            TabName = $"Диалог разбора {Entity.Title}";
        }
Exemplo n.º 2
0
        public void ConfigureDlg()
        {
            Entity.ObservableAddresses.ElementAdded   += ObservableAddresses_ElementAdded;
            Entity.ObservableAddresses.ElementRemoved += ObservableAddresses_ElementRemoved;
            Entity.ObservableAddresses.ElementChanged += ObservableAddresses_ElementChanged;;

            entityviewmodelentryCar.SetEntityAutocompleteSelectorFactory(
                new DefaultEntityAutocompleteSelectorFactory <Car, CarJournalViewModel, CarJournalFilterViewModel>(ServicesConfig.CommonServices));
            entityviewmodelentryCar.Binding.AddBinding(Entity, e => e.Car, w => w.Subject).InitializeFromSource();
            entityviewmodelentryCar.CompletionPopupSetWidth(false);
            entityviewmodelentryCar.Sensitive = logisticanEditing;

            var filterDriver = new EmployeeRepresentationFilterViewModel();

            filterDriver.SetAndRefilterAtOnce(
                x => x.RestrictCategory = EmployeeCategory.driver,
                x => x.Status           = EmployeeStatus.IsWorking
                );
            referenceDriver.RepresentationModel = new EmployeesVM(filterDriver);
            referenceDriver.Binding.AddBinding(Entity, rl => rl.Driver, widget => widget.Subject).InitializeFromSource();
            referenceDriver.Sensitive = logisticanEditing;
            var filterForwarder = new EmployeeRepresentationFilterViewModel();

            filterForwarder.SetAndRefilterAtOnce(
                x => x.RestrictCategory = EmployeeCategory.forwarder,
                x => x.Status           = EmployeeStatus.IsWorking
                );
            referenceForwarder.RepresentationModel = new EmployeesVM(filterForwarder);
            referenceForwarder.Binding.AddBinding(Entity, rl => rl.Forwarder, widget => widget.Subject).InitializeFromSource();
            referenceForwarder.Sensitive = logisticanEditing;
            referenceForwarder.Changed  += ReferenceForwarder_Changed;

            referenceLogistican.RepresentationModel = new EmployeesVM();
            referenceLogistican.Binding.AddBinding(Entity, rl => rl.Logistician, widget => widget.Subject).InitializeFromSource();
            referenceLogistican.Sensitive = logisticanEditing;

            speccomboShift.ItemsList = _deliveryShiftRepository.ActiveShifts(UoW);
            speccomboShift.Binding.AddBinding(Entity, rl => rl.Shift, widget => widget.SelectedItem).InitializeFromSource();
            speccomboShift.Sensitive = logisticanEditing;

            datePickerDate.Binding.AddBinding(Entity, rl => rl.Date, widget => widget.Date).InitializeFromSource();
            datePickerDate.Sensitive = logisticanEditing;

            ylabelLastTimeCall.Binding.AddFuncBinding(Entity, e => GetLastCallTime(e.LastCallTime), w => w.LabelProp).InitializeFromSource();
            yspinActualDistance.Sensitive = allEditing;

            buttonMadeCall.Sensitive = allEditing;

            buttonRetriveEnRoute.Sensitive = Entity.Status == RouteListStatus.OnClosing && isUserLogist &&
                                             ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_retrieve_routelist_en_route");

            buttonNewFine.Sensitive = allEditing;

            buttonRefresh.Sensitive = allEditing;

            //Заполняем иконки
            var ass = Assembly.GetAssembly(typeof(MainClass));

            statusIcons.Add(RouteListItemStatus.EnRoute, new Gdk.Pixbuf(ass, "Vodovoz.icons.status.car.png"));
            statusIcons.Add(RouteListItemStatus.Completed, new Gdk.Pixbuf(ass, "Vodovoz.icons.status.face-smile-grin.png"));
            statusIcons.Add(RouteListItemStatus.Overdue, new Gdk.Pixbuf(ass, "Vodovoz.icons.status.face-angry.png"));
            statusIcons.Add(RouteListItemStatus.Canceled, new Gdk.Pixbuf(ass, "Vodovoz.icons.status.face-crying.png"));
            statusIcons.Add(RouteListItemStatus.Transfered, new Gdk.Pixbuf(ass, "Vodovoz.icons.status.face-uncertain.png"));

            ytreeviewAddresses.ColumnsConfig = ColumnsConfigFactory.Create <RouteListKeepingItemNode>()
                                               .AddColumn("№ п/п").AddNumericRenderer(x => x.RouteListItem.IndexInRoute + 1)
                                               .AddColumn("Заказ")
                                               .AddTextRenderer(node => node.RouteListItem.Order.Id.ToString())
                                               .AddColumn("Адрес")
                                               .AddTextRenderer(node => node.RouteListItem.Order.DeliveryPoint == null ? "Требуется точка доставки" : node.RouteListItem.Order.DeliveryPoint.ShortAddress)
                                               .AddColumn("Время")
                                               .AddTextRenderer(node => node.RouteListItem.Order.DeliverySchedule == null ? "" : node.RouteListItem.Order.DeliverySchedule.Name)
                                               .AddColumn("Статус")
                                               .AddPixbufRenderer(x => statusIcons[x.Status])
                                               .AddEnumRenderer(node => node.Status, excludeItems: new Enum[] { RouteListItemStatus.Transfered })
                                               .AddSetter((c, n) => c.Editable = allEditing && n.Status != RouteListItemStatus.Transfered)
                                               .AddColumn("Отгрузка")
                                               .AddNumericRenderer(node => node.RouteListItem.Order.OrderItems
                                                                   .Where(b => b.Nomenclature.Category == NomenclatureCategory.water && b.Nomenclature.TareVolume == TareVolume.Vol19L)
                                                                   .Sum(b => b.Count))
                                               .AddColumn("Возврат тары")
                                               .AddNumericRenderer(node => node.RouteListItem.Order.BottlesReturn)
                                               .AddColumn("Сдали по факту")
                                               .AddNumericRenderer(node => node.RouteListItem.DriverBottlesReturned)
                                               .AddColumn("Статус изменен")
                                               .AddTextRenderer(node => node.LastUpdate)
                                               .AddColumn("Комментарий")
                                               .AddTextRenderer(node => node.Comment)
                                               .Editable(allEditing)
                                               .AddColumn("Переносы")
                                               .AddTextRenderer(node => node.Transferred)
                                               .RowCells()
                                               .AddSetter <CellRenderer>((cell, node) => cell.CellBackgroundGdk = node.RowColor)
                                               .Finish();
            ytreeviewAddresses.Selection.Mode     = SelectionMode.Multiple;
            ytreeviewAddresses.Selection.Changed += OnSelectionChanged;
            ytreeviewAddresses.Sensitive          = allEditing;
            ytreeviewAddresses.RowActivated      += YtreeviewAddresses_RowActivated;

            //Point!
            //Заполняем телефоны

            if (Entity.Driver != null && Entity.Driver.Phones.Count > 0)
            {
                uint rows = Convert.ToUInt32(Entity.Driver.Phones.Count + 1);
                PhonesTable1.Resize(rows, 2);
                Label label = new Label();
                label.LabelProp = $"{Entity.Driver.FullName}";
                PhonesTable1.Attach(label, 0, 2, 0, 1);

                for (uint i = 1; i < rows; i++)
                {
                    Label l = new Label();
                    l.LabelProp  = "+7 " + Entity.Driver.Phones[Convert.ToInt32(i - 1)].Number;
                    l.Selectable = true;
                    PhonesTable1.Attach(l, 0, 1, i, i + 1);

                    HandsetView h = new HandsetView(Entity.Driver.Phones[Convert.ToInt32(i - 1)].DigitsNumber);
                    PhonesTable1.Attach(h, 1, 2, i, i + 1);
                }
            }
            if (Entity.Forwarder != null && Entity.Forwarder.Phones.Count > 0)
            {
                uint rows = Convert.ToUInt32(Entity.Forwarder.Phones.Count + 1);
                PhonesTable2.Resize(rows, 2);
                Label label = new Label();
                label.LabelProp = $"{Entity.Forwarder.FullName}";
                PhonesTable2.Attach(label, 0, 2, 0, 1);

                for (uint i = 1; i < rows; i++)
                {
                    Label l = new Label();
                    l.LabelProp  = "+7 " + Entity.Forwarder.Phones[Convert.ToInt32(i - 1)].Number;
                    l.Selectable = true;
                    PhonesTable2.Attach(l, 0, 1, i, i + 1);

                    HandsetView h = new HandsetView(Entity.Forwarder.Phones[Convert.ToInt32(i - 1)].DigitsNumber);
                    PhonesTable2.Attach(h, 1, 2, i, i + 1);
                }
            }

            //Телефон
            PhonesTable1.ShowAll();
            PhonesTable2.ShowAll();

            phoneLogistican.MangoManager = phoneDriver.MangoManager = phoneForwarder.MangoManager = MainClass.MainWin.MangoManager;
            phoneLogistican.Binding.AddBinding(Entity, e => e.Logistician, w => w.Employee).InitializeFromSource();
            phoneDriver.Binding.AddBinding(Entity, e => e.Driver, w => w.Employee).InitializeFromSource();
            phoneForwarder.Binding.AddBinding(Entity, e => e.Forwarder, w => w.Employee).InitializeFromSource();

            //Заполняем информацию о бутылях
            UpdateBottlesSummaryInfo();

            UpdateNodes();
        }
        private void ConfigureDlg()
        {
            if (!_canEdit)
            {
                MessageDialogHelper.RunWarningDialog("Не достаточно прав. Обратитесь к руководителю.");
                UpdateSensitivity();
            }

            if (_canEdit && Entity.Status != RouteListStatus.Closed)
            {
                if (!Entity.RecountMileage())
                {
                    FailInitialize = true;
                    return;
                }
            }

            buttonAcceptFine.Clicked += ButtonAcceptFineOnClicked;

            entityviewmodelentryCar.SetEntityAutocompleteSelectorFactory(new CarJournalFactory(MainClass.MainWin.NavigationManager).CreateCarAutocompleteSelectorFactory());
            entityviewmodelentryCar.Binding.AddBinding(Entity, e => e.Car, w => w.Subject).InitializeFromSource();
            entityviewmodelentryCar.CompletionPopupSetWidth(false);

            var employeeFactory = new EmployeeJournalFactory();

            evmeDriver.SetEntityAutocompleteSelectorFactory(employeeFactory.CreateWorkingEmployeeAutocompleteSelectorFactory());
            evmeDriver.Binding.AddBinding(Entity, rl => rl.Driver, widget => widget.Subject).InitializeFromSource();

            evmeForwarder.SetEntityAutocompleteSelectorFactory(employeeFactory.CreateWorkingEmployeeAutocompleteSelectorFactory());
            evmeForwarder.Binding
            .AddBinding(Entity, rl => rl.Forwarder, widget => widget.Subject)
            .AddBinding(Entity, rl => rl.CanAddForwarder, widget => widget.Sensitive)
            .InitializeFromSource();

            evmeLogistician.SetEntityAutocompleteSelectorFactory(employeeFactory.CreateWorkingEmployeeAutocompleteSelectorFactory());
            evmeLogistician.Binding.AddBinding(Entity, rl => rl.Logistician, widget => widget.Subject).InitializeFromSource();

            speccomboShift.ItemsList = _deliveryShiftRepository.ActiveShifts(UoWGeneric);
            speccomboShift.Binding.AddBinding(Entity, rl => rl.Shift, widget => widget.SelectedItem).InitializeFromSource();

            datePickerDate.Binding.AddBinding(Entity, rl => rl.Date, widget => widget.Date).InitializeFromSource();

            yspinConfirmedDistance.Binding.AddBinding(Entity, rl => rl.ConfirmedDistance, widget => widget.ValueAsDecimal).InitializeFromSource();

            yentryRecalculatedDistance.Binding.AddBinding(Entity, rl => rl.RecalculatedDistance, widget => widget.Text, new DecimalToStringConverter()).InitializeFromSource();

            ytreeviewAddresses.ColumnsConfig = ColumnsConfigFactory.Create <RouteListKeepingItemNode>()
                                               .AddColumn("Заказ")
                                               .AddTextRenderer(node => node.RouteListItem.Order.Id.ToString())
                                               .AddColumn("Адрес")
                                               .AddTextRenderer(node => String.Format("{0} д.{1}", node.RouteListItem.Order.DeliveryPoint.Street, node.RouteListItem.Order.DeliveryPoint.Building))
                                               .AddColumn("Время")
                                               .AddTextRenderer(node => node.RouteListItem.Order.DeliverySchedule == null ? "" : node.RouteListItem.Order.DeliverySchedule.Name)
                                               .AddColumn("Статус")
                                               .AddEnumRenderer(node => node.Status).Editing(false)
                                               .AddColumn("Доставка за час")
                                               .AddToggleRenderer(x => x.RouteListItem.Order.IsFastDelivery).Editing(false)
                                               .AddColumn("Последнее редактирование")
                                               .AddTextRenderer(node => node.LastUpdate)
                                               .RowCells()
                                               .AddSetter <CellRenderer>((cell, node) => cell.CellBackgroundGdk = node.RowColor)
                                               .Finish();

            items = new List <RouteListKeepingItemNode>();
            foreach (var item in Entity.Addresses)
            {
                items.Add(new RouteListKeepingItemNode {
                    RouteListItem = item
                });
            }

            items.Sort((x, y) => {
                if (x.RouteListItem.StatusLastUpdate.HasValue && y.RouteListItem.StatusLastUpdate.HasValue)
                {
                    if (x.RouteListItem.StatusLastUpdate > y.RouteListItem.StatusLastUpdate)
                    {
                        return(1);
                    }
                    if (x.RouteListItem.StatusLastUpdate < y.RouteListItem.StatusLastUpdate)
                    {
                        return(-1);
                    }
                }
                return(0);
            });

            ytreeviewAddresses.ItemsDataSource = items;
            ytextviewMileageComment.Binding.AddBinding(Entity, x => x.MileageComment, w => w.Buffer.Text).InitializeFromSource();

            //Телефон
            phoneLogistican.MangoManager = phoneDriver.MangoManager = phoneForwarder.MangoManager = MainClass.MainWin.MangoManager;
            phoneLogistican.Binding.AddBinding(Entity, e => e.Logistician, w => w.Employee).InitializeFromSource();
            phoneDriver.Binding.AddBinding(Entity, e => e.Driver, w => w.Employee).InitializeFromSource();
            phoneForwarder.Binding.AddBinding(Entity, e => e.Forwarder, w => w.Employee).InitializeFromSource();
        }
        private void ConfigureDlg()
        {
            btnCancel.Clicked                   += OnCancelClicked;
            printTimeButton.Clicked             += OnPrintTimeButtonClicked;
            ybuttonAddAdditionalLoad.Clicked    += OnButtonAddAdditionalLoadClicked;
            ybuttonRemoveAdditionalLoad.Clicked += OnButtonRemoveAdditionalLoadClicked;

            datepickerDate.Binding.AddBinding(Entity, e => e.Date, w => w.Date).InitializeFromSource();
            _previousSelectedDate             = Entity.Date;
            datepickerDate.DateChangedByUser += OnDatepickerDateDateChangedByUser;

            entityviewmodelentryCar.SetEntityAutocompleteSelectorFactory(new CarJournalFactory(MainClass.MainWin.NavigationManager).CreateCarAutocompleteSelectorFactory());
            entityviewmodelentryCar.Binding.AddBinding(Entity, e => e.Car, w => w.Subject).InitializeFromSource();
            entityviewmodelentryCar.CompletionPopupSetWidth(false);
            entityviewmodelentryCar.ChangedByUser += (sender, e) =>
            {
                if (Entity.Car == null || Entity.Date == default)
                {
                    evmeForwarder.IsEditable           = true;
                    ybuttonAddAdditionalLoad.Sensitive = false;
                    return;
                }

                ybuttonAddAdditionalLoad.Sensitive = true;
                var isCompanyCar = Entity.GetCarVersion.IsCompanyCar;

                Entity.Driver = Entity.Car.Driver != null && Entity.Car.Driver.Status != EmployeeStatus.IsFired
                                        ? Entity.Car.Driver
                                        : null;
                evmeDriver.Sensitive = Entity.Driver == null || isCompanyCar;

                if (!isCompanyCar || Entity.Car.CarModel.CarTypeOfUse == CarTypeOfUse.Largus && Entity.CanAddForwarder)
                {
                    Entity.Forwarder         = Entity.Forwarder;
                    evmeForwarder.IsEditable = true;
                }
                else
                {
                    Entity.Forwarder         = null;
                    evmeForwarder.IsEditable = false;
                }
            };

            var driverFilter = new EmployeeFilterViewModel();

            driverFilter.SetAndRefilterAtOnce(
                x => x.Status           = EmployeeStatus.IsWorking,
                x => x.RestrictCategory = EmployeeCategory.driver,
                x => x.CanChangeStatus  = false);
            var driverFactory = new EmployeeJournalFactory(driverFilter);

            evmeDriver.Changed += (sender, args) => lblDriverComment.Text = Entity.Driver?.Comment;
            evmeDriver.SetEntityAutocompleteSelectorFactory(driverFactory.CreateEmployeeAutocompleteSelectorFactory());
            evmeDriver.Binding.AddBinding(Entity, e => e.Driver, w => w.Subject).InitializeFromSource();

            hboxDriverComment.Binding
            .AddFuncBinding(Entity, e => e.Driver != null && !string.IsNullOrWhiteSpace(e.Driver.Comment), w => w.Visible)
            .InitializeFromSource();

            var forwarderFilter = new EmployeeFilterViewModel();

            forwarderFilter.SetAndRefilterAtOnce(
                x => x.Status           = EmployeeStatus.IsWorking,
                x => x.RestrictCategory = EmployeeCategory.forwarder,
                x => x.CanChangeStatus  = false);
            var forwarderFactory = new EmployeeJournalFactory(forwarderFilter);

            evmeForwarder.SetEntityAutocompleteSelectorFactory(forwarderFactory.CreateEmployeeAutocompleteSelectorFactory());
            evmeForwarder.Binding.AddBinding(Entity, e => e.Forwarder, w => w.Subject).InitializeFromSource();
            evmeForwarder.Changed += (sender, args) =>
            {
                createroutelistitemsview1.OnForwarderChanged();
                lblForwarderComment.Text = Entity.Forwarder?.Comment;
            };

            hboxForwarderComment.Binding
            .AddFuncBinding(Entity, e => e.Forwarder != null && !string.IsNullOrWhiteSpace(e.Forwarder.Comment), w => w.Visible)
            .InitializeFromSource();
            lblForwarderComment.Text = Entity.Forwarder?.Comment;

            var employeeFactory = new EmployeeJournalFactory();

            evmeLogistician.SetEntityAutocompleteSelectorFactory(employeeFactory.CreateEmployeeAutocompleteSelectorFactory());
            evmeLogistician.Sensitive = false;
            evmeLogistician.Binding.AddBinding(Entity, e => e.Logistician, w => w.Subject).InitializeFromSource();

            speccomboShift.ItemsList = _deliveryShiftRepository.ActiveShifts(UoW);
            speccomboShift.Binding.AddBinding(Entity, e => e.Shift, w => w.SelectedItem).InitializeFromSource();

            labelStatus.Binding.AddFuncBinding(Entity, e => e.Status.GetEnumTitle(), w => w.LabelProp).InitializeFromSource();

            evmeDriver.Sensitive = false;
            enumPrint.Sensitive  = Entity.Status != RouteListStatus.New;

            if (Entity.Id > 0)
            {
                //Нужно только для быстрой загрузки данных диалога. Проверено на МЛ из 200 заказов. Разница в скорости в несколько раз.
                var orders = UoW.Session.QueryOver <RouteListItem>()
                             .Where(x => x.RouteList == Entity)
                             .Fetch(x => x.Order).Eager
                             .Fetch(x => x.Order.OrderItems).Eager
                             .List();
            }

            _isLogistican = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("logistican");
            createroutelistitemsview1.RouteListUoW = UoWGeneric;
            createroutelistitemsview1.SetPermissionParameters(permissionResult, _isLogistican);

            var additionalLoadingItemsViewModel =
                new AdditionalLoadingItemsViewModel(UoW, this, new NomenclatureJournalFactory(), ServicesConfig.InteractiveService);

            additionalLoadingItemsViewModel.BindWithSource(Entity, e => e.AdditionalLoadingDocument);
            additionalLoadingItemsViewModel.CanEdit  = Entity.Status == RouteListStatus.New;
            _additionalLoadingItemsView              = new AdditionalLoadingItemsView(additionalLoadingItemsViewModel);
            _additionalLoadingItemsView.WidthRequest = 300;
            _additionalLoadingItemsView.ShowAll();
            hboxAdditionalLoading.PackStart(_additionalLoadingItemsView, false, false, 0);

            buttonAccept.Visible = ybuttonAddAdditionalLoad.Visible = ybuttonRemoveAdditionalLoad.Visible =
                NotLoadedRouteListStatuses.Contains(Entity.Status);

            if (Entity.Status == RouteListStatus.InLoading || Entity.Status == RouteListStatus.Confirmed)
            {
                var icon = new Image
                {
                    Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-edit", IconSize.Menu)
                };
                buttonAccept.Image = icon;
                buttonAccept.Label = "Редактировать";
            }

            ggToStringWidget.UoW   = UoW;
            ggToStringWidget.Label = "Район города:";
            ggToStringWidget.Binding.AddBinding(Entity, x => x.ObservableGeographicGroups, x => x.Items).InitializeFromSource();

            enumPrint.ItemsEnum = typeof(RouteListPrintableDocuments);
            enumPrint.SetVisibility(RouteListPrintableDocuments.TimeList, false);
            enumPrint.SetVisibility(RouteListPrintableDocuments.OrderOfAddresses, false);
            bool IsLoadDocumentPrintable = ServicesConfig.CommonServices.CurrentPermissionService
                                           .ValidatePresetPermission("can_print_car_load_document");

            enumPrint.SetVisibility(RouteListPrintableDocuments.LoadDocument, IsLoadDocumentPrintable &&
                                    !(Entity.Status == RouteListStatus.Confirmed));
            enumPrint.EnumItemClicked += (sender, e) => PrintSelectedDocument((RouteListPrintableDocuments)e.ItemEnum);

            //Телефон
            phoneLogistican.MangoManager = phoneDriver.MangoManager = phoneForwarder.MangoManager = MainClass.MainWin.MangoManager;
            phoneLogistican.Binding.AddBinding(Entity, e => e.Logistician, w => w.Employee).InitializeFromSource();
            phoneDriver.Binding.AddBinding(Entity, e => e.Driver, w => w.Employee).InitializeFromSource();
            phoneForwarder.Binding.AddBinding(Entity, e => e.Forwarder, w => w.Employee).InitializeFromSource();

            var hasAccessToDriverTerminal = _isLogistican ||
                                            ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("role_сashier");
            var baseDoc = _routeListRepository.GetLastTerminalDocumentForEmployee(UoW, Entity.Driver);

            labelTerminalCondition.Visible = hasAccessToDriverTerminal &&
                                             baseDoc is DriverAttachedTerminalGiveoutDocument &&
                                             baseDoc.CreationDate.Date <= Entity?.Date;
            if (labelTerminalCondition.Visible)
            {
                labelTerminalCondition.LabelProp += $"{Entity.DriverTerminalCondition?.GetEnumTitle() ?? "неизвестно"}";
            }

            _canСreateRoutelistInPastPeriod = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_create_routelist_in_past_period");

            _oldDriver = Entity.Driver;
            UpdateDlg(_isLogistican);

            Entity.PropertyChanged += OnRouteListPropertyChanged;
        }