public RouteListJournalFilterViewModel()
        {
            statusNodes.AddRange(Enum.GetValues(typeof(RouteListStatus)).Cast <RouteListStatus>().Select(x => new RouteListStatusNode(x)));

            foreach (var addressType in Enum.GetValues(typeof(AddressType)).Cast <AddressType>())
            {
                addressTypeNodes.Add(new AddressTypeNode(addressType));
                addressTypeNodes.Last().PropertyChanged += OnStatusCheckChanged;
            }

            GeographicGroups = UoW.Session.QueryOver <GeographicGroup>().List <GeographicGroup>().ToList();

            var currentUserSettings = UserSingletonRepository.GetInstance().GetUserSettings(UoW, ServicesConfig.CommonServices.UserService.CurrentUserId);

            foreach (var addressTypeNode in AddressTypeNodes)
            {
                switch (addressTypeNode.AddressType)
                {
                case AddressType.Delivery:
                    addressTypeNode.Selected = currentUserSettings.LogisticDeliveryOrders;
                    break;

                case AddressType.Service:
                    addressTypeNode.Selected = currentUserSettings.LogisticServiceOrders;
                    break;

                case AddressType.ChainStore:
                    addressTypeNode.Selected = currentUserSettings.LogisticChainStoreOrders;
                    break;
                }
            }

            SubscribeOnCheckChanged();
        }
예제 #2
0
 void ActionRouteListsAtDay_Activated(object sender, System.EventArgs e)
 {
     if (new BaseParametersProvider().UseOldAutorouting())
     {
         tdiMain.OpenTab(
             TdiTabBase.GenerateHashName <RoutesAtDayDlg>(),
             () => new RoutesAtDayDlg()
             );
     }
     else
     {
         tdiMain.OpenTab(
             "AutoRouting",
             () => new RouteListsOnDayViewModel(
                 ServicesConfig.CommonServices,
                 new DeliveryScheduleParametersProvider(ParametersProvider.Instance),
                 new GtkTabsOpener(),
                 new RouteListRepository(),
                 new SubdivisionRepository(),
                 OrderSingletonRepository.GetInstance(),
                 new AtWorkRepository(),
                 new CarRepository(),
                 NavigationManagerProvider.NavigationManager,
                 UserSingletonRepository.GetInstance(),
                 new BaseParametersProvider()
                 )
             );
     }
 }
예제 #3
0
    void ActionOrdersTableActivated(object sender, System.EventArgs e)
    {
        var nomenclatureRepository = new NomenclatureRepository(new NomenclatureParametersProvider());

        IEntityAutocompleteSelectorFactory counterpartySelectorFactory =
            new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel,
                                                          CounterpartyJournalFilterViewModel>(ServicesConfig.CommonServices);

        IEntityAutocompleteSelectorFactory nomenclatureSelectorFactory =
            new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(ServicesConfig.CommonServices,
                                                                                                      new NomenclatureFilterViewModel(), counterpartySelectorFactory, nomenclatureRepository,
                                                                                                      UserSingletonRepository.GetInstance());

        OrderJournalFilterViewModel filter = new OrderJournalFilterViewModel()
        {
            IsForRetail = false
        };
        var ordersJournal = new OrderJournalViewModel(filter,
                                                      UnitOfWorkFactory.GetDefaultFactory,
                                                      ServicesConfig.CommonServices,
                                                      VodovozGtkServicesConfig.EmployeeService,
                                                      nomenclatureSelectorFactory,
                                                      counterpartySelectorFactory,
                                                      nomenclatureRepository,
                                                      UserSingletonRepository.GetInstance());

        tdiMain.AddTab(ordersJournal);
    }
예제 #4
0
    void ActionNewRequestToSupplier_Activated(object sender, System.EventArgs e)
    {
        var nomenclatureRepository = new NomenclatureRepository(new NomenclatureParametersProvider());

        IEntityAutocompleteSelectorFactory counterpartySelectorFactory =
            new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel,
                                                          CounterpartyJournalFilterViewModel>(ServicesConfig.CommonServices);

        IEntityAutocompleteSelectorFactory nomenclatureSelectorFactory =
            new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(ServicesConfig.CommonServices,
                                                                                                      new NomenclatureFilterViewModel(), counterpartySelectorFactory, nomenclatureRepository,
                                                                                                      UserSingletonRepository.GetInstance());

        tdiMain.OpenTab(
            DialogHelper.GenerateDialogHashName <RequestToSupplier>(0),
            () => new RequestToSupplierViewModel(
                EntityUoWBuilder.ForCreate(),
                UnitOfWorkFactory.GetDefaultFactory,
                ServicesConfig.CommonServices,
                VodovozGtkServicesConfig.EmployeeService,
                new SupplierPriceItemsRepository(),
                counterpartySelectorFactory,
                nomenclatureSelectorFactory,
                nomenclatureRepository,
                UserSingletonRepository.GetInstance()
                )
            );
    }
예제 #5
0
    void ActionJournalOfRequestsToSuppliers_Activated(object sender, System.EventArgs e)
    {
        var nomenclatureRepository = new NomenclatureRepository(new NomenclatureParametersProvider());

        IEntityAutocompleteSelectorFactory counterpartySelectorFactory =
            new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel,
                                                          CounterpartyJournalFilterViewModel>(ServicesConfig.CommonServices);

        IEntityAutocompleteSelectorFactory nomenclatureSelectorFactory =
            new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(ServicesConfig.CommonServices,
                                                                                                      new NomenclatureFilterViewModel(), counterpartySelectorFactory, nomenclatureRepository,
                                                                                                      UserSingletonRepository.GetInstance());

        RequestsToSuppliersFilterViewModel filter = new RequestsToSuppliersFilterViewModel(nomenclatureSelectorFactory);

        var requestsJournal = new RequestsToSuppliersJournalViewModel(
            filter,
            UnitOfWorkFactory.GetDefaultFactory,
            ServicesConfig.CommonServices,
            VodovozGtkServicesConfig.EmployeeService,
            new SupplierPriceItemsRepository(),
            counterpartySelectorFactory,
            nomenclatureSelectorFactory,
            nomenclatureRepository,
            UserSingletonRepository.GetInstance()
            );

        tdiMain.AddTab(requestsJournal);
    }
예제 #6
0
        public CashExpenseDlg(int id, IPermissionService permissionService)
        {
            this.Build();
            UoWGeneric = UnitOfWorkFactory.CreateForRoot <Expense>(id);

            if (!accessfilteredsubdivisionselectorwidget.Configure(UoW, false, typeof(Expense)))
            {
                MessageDialogHelper.RunErrorDialog(accessfilteredsubdivisionselectorwidget.ValidationErrorMessage);
                FailInitialize = true;
                return;
            }

            var userPermission = permissionService.ValidateUserPermission(typeof(Expense), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id);

            if (!userPermission.CanRead)
            {
                MessageDialogHelper.RunErrorDialog("Отсутствуют права на просмотр расходного ордера");
                FailInitialize = true;
                return;
            }
            canEdit = userPermission.CanUpdate;

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            canEditRectroactively = permmissionValidator.Validate(typeof(Expense), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));

            ConfigureDlg();
        }
예제 #7
0
        public IEntitySelector CreateNomenclatureSelectorForFuelSelect()
        {
            NomenclatureFilterViewModel nomenclatureFilter = new NomenclatureFilterViewModel();

            nomenclatureFilter.RestrictCategory = NomenclatureCategory.fuel;
            nomenclatureFilter.RestrictArchive  = false;

            var nomenclatureRepository = new NomenclatureRepository(new NomenclatureParametersProvider());

            var counterpartySelectorFactory =
                new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel, CounterpartyJournalFilterViewModel>(
                    ServicesConfig.CommonServices);

            var nomenclatureSelectorFactory =
                new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(
                    ServicesConfig.CommonServices, nomenclatureFilter, counterpartySelectorFactory, nomenclatureRepository,
                    UserSingletonRepository.GetInstance());

            NomenclaturesJournalViewModel vm = new NomenclaturesJournalViewModel(
                nomenclatureFilter,
                UnitOfWorkFactory.GetDefaultFactory,
                ServicesConfig.CommonServices,
                new EmployeeService(),
                nomenclatureSelectorFactory,
                counterpartySelectorFactory,
                nomenclatureRepository,
                UserSingletonRepository.GetInstance()
                );

            vm.SelectionMode = JournalSelectionMode.Multiple;

            return(vm);
        }
예제 #8
0
        public override bool Save()
        {
            if (String.IsNullOrWhiteSpace(Entity.Code1c))
            {
                Entity.Code1c = NomenclatureRepository.GetNextCode1c(UoW);
            }

            var valid = new QSValidator <Nomenclature>(UoWGeneric.Root);

            if (valid.RunDlgIfNotValid((Gtk.Window) this.Toplevel))
            {
                return(false);
            }
            logger.Info("Сохраняем номенклатуру...");
            Entity.SetNomenclatureCreationInfo(UserSingletonRepository.GetInstance());
            pricesView.SaveChanges();
            UoWGeneric.Save();
            return(true);
        }
예제 #9
0
        protected void OnButtonChangeNewClicked(object sender, EventArgs e)
        {
            var filter = new NomenclatureFilterViewModel();

            var nomenclatureRepository = new EntityRepositories.Goods.NomenclatureRepository(new NomenclatureParametersProvider());

            var userRepository = UserSingletonRepository.GetInstance();

            var employeeService = VodovozGtkServicesConfig.EmployeeService;

            var counterpartySelectorFactory =
                new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel, CounterpartyJournalFilterViewModel>(
                    ServicesConfig.CommonServices);

            var nomenclatureAutoCompleteSelectorFactory =
                new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(
                    ServicesConfig.CommonServices,
                    filter,
                    counterpartySelectorFactory,
                    nomenclatureRepository,
                    userRepository
                    );

            var nomenclaturesJournalViewModel =
                new NomenclaturesJournalViewModel(
                    filter,
                    UnitOfWorkFactory.GetDefaultFactory,
                    ServicesConfig.CommonServices,
                    employeeService,
                    nomenclatureAutoCompleteSelectorFactory,
                    counterpartySelectorFactory,
                    nomenclatureRepository,
                    userRepository
                    );

            nomenclaturesJournalViewModel.SelectionMode           = JournalSelectionMode.Single;
            nomenclaturesJournalViewModel.OnEntitySelectedResult += ChangeNewNomenclature_OnEntitySelectedResult;

            MyTab.TabParent.AddSlaveTab(MyTab, nomenclaturesJournalViewModel);
        }
예제 #10
0
		void ConfigureDlg()
		{
			if(StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.IncomingWaterEdit, Entity.IncomingWarehouse, Entity.WriteOffWarehouse)) {
				FailInitialize = true;
				return;
			}

			var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.IncomingWaterEdit, Entity.IncomingWarehouse, Entity.WriteOffWarehouse);
			buttonFill.Sensitive = referenceProduct.IsEditable = spinAmount.Sensitive
				= referenceSrcWarehouse.IsEditable = referenceDstWarehouse.IsEditable = editing;
			incomingwatermaterialview1.Sensitive = editing;

			labelTimeStamp.Binding.AddBinding(Entity, e => e.DateString, w => w.LabelProp).InitializeFromSource();
			spinAmount.Binding.AddBinding(Entity, e => e.Amount, w => w.ValueAsInt).InitializeFromSource();

			referenceProduct.SubjectType = typeof(Nomenclature);
			referenceProduct.Binding.AddBinding(Entity, e => e.Product, w => w.Subject).InitializeFromSource();
			referenceSrcWarehouse.ItemsQuery = StoreDocumentHelper.GetRestrictedWarehouseQuery(WarehousePermissions.IncomingWaterEdit);
			referenceSrcWarehouse.Binding.AddBinding(Entity, e => e.WriteOffWarehouse, w => w.Subject).InitializeFromSource();
			referenceDstWarehouse.ItemsQuery = StoreDocumentHelper.GetRestrictedWarehouseQuery(WarehousePermissions.IncomingWaterEdit);
			referenceDstWarehouse.Binding.AddBinding(Entity, e => e.IncomingWarehouse, w => w.Subject).InitializeFromSource();

			incomingwatermaterialview1.DocumentUoW = UoWGeneric;

			var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());
			Entity.CanEdit = permmissionValidator.Validate(typeof(IncomingWater), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
			if(!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date) {
				spinAmount.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
				referenceProduct.Sensitive = false;
				referenceDstWarehouse.Sensitive = false;
				referenceSrcWarehouse.Sensitive = false;
				buttonFill.Sensitive = false;
				incomingwatermaterialview1.Sensitive = false;
				buttonSave.Sensitive = false;
			} else {
				Entity.CanEdit = true;
			}
		}
예제 #11
0
        public ProducedProductionReport(
            IEntityAutocompleteSelectorFactory nomenclatureSelectorFactory,
            IEntityAutocompleteSelectorFactory counterpartySelectorFactory,
            INomenclatureRepository nomenclatureRepository)
        {
            this.Build();

            UoW = UnitOfWorkFactory.CreateWithoutRoot();
            yenumcomboboxMonths.ItemsEnum    = typeof(Month);
            yenumcomboboxMonths.SelectedItem = (Month)(DateTime.Now.AddMonths(-1).Month);

            ylistcomboboxYear.ItemsList    = Enumerable.Range(DateTime.Now.AddYears(-10).Year, 21).Reverse();
            ylistcomboboxYear.SelectedItem = DateTime.Today.Year;

            ycomboboxProduction.SetRenderTextFunc <Warehouse>(x => x.Name);
            ycomboboxProduction.ItemsList = UoW.Session.QueryOver <Warehouse>().Where(x => x.TypeOfUse == WarehouseUsing.Production).List();

            entryreferenceNomenclature.SetEntityAutocompleteSelectorFactory(
                new EntityAutocompleteSelectorFactory <NomenclaturesJournalViewModel>(typeof(Nomenclature),
                                                                                      () =>
            {
                var nomenclatureFilter = new NomenclatureFilterViewModel();
                return(new NomenclaturesJournalViewModel(
                           nomenclatureFilter,
                           UnitOfWorkFactory.GetDefaultFactory,
                           ServicesConfig.CommonServices,
                           new EmployeeService(),
                           nomenclatureSelectorFactory,
                           counterpartySelectorFactory,
                           nomenclatureRepository,
                           UserSingletonRepository.GetInstance()
                           ));
            })
                );
            buttonCreateReport.Sensitive = true;
            buttonCreateReport.Clicked  += OnButtonCreateReportClicked;
        }
예제 #12
0
        public void CreateComplaint(Order order)
        {
            if (order != null)
            {
                var nomenclatureRepository = new NomenclatureRepository(new NomenclatureParametersProvider());

                IEntityAutocompleteSelectorFactory employeeSelectorFactory =
                    new DefaultEntityAutocompleteSelectorFactory <Employee, EmployeesJournalViewModel, EmployeeFilterViewModel>(
                        ServicesConfig.CommonServices);

                IEntityAutocompleteSelectorFactory counterpartySelectorFactory =
                    new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel,
                                                                  CounterpartyJournalFilterViewModel>(ServicesConfig.CommonServices);

                IEntityAutocompleteSelectorFactory nomenclatureSelectorFactory =
                    new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(ServicesConfig
                                                                                                              .CommonServices, new NomenclatureFilterViewModel(), counterpartySelectorFactory,
                                                                                                              nomenclatureRepository, UserSingletonRepository.GetInstance());

                ISubdivisionRepository subdivisionRepository = new SubdivisionRepository();

                var parameters = new Dictionary <string, object> {
                    { "order", order },
                    { "uowBuilder", EntityUoWBuilder.ForCreate() },
                    { "unitOfWorkFactory", UnitOfWorkFactory.GetDefaultFactory },
                    { "employeeSelectorFactory", employeeSelectorFactory },
                    { "counterpartySelectorFactory", counterpartySelectorFactory },
                    { "subdivisionService", subdivisionRepository },
                    { "nomenclatureSelectorFactory", nomenclatureSelectorFactory },
                    { "nomenclatureRepository", nomenclatureRepository },
                    { "phone", "+7" + this.MangoManager.CurrentCall.Phone.Number }
                };
                tdiNavigation.OpenTdiTabOnTdiNamedArgs <CreateComplaintViewModel>(null, parameters);
            }
        }
예제 #13
0
        protected void OnButtonAddEnumItemClicked(object sender, QS.Widgets.EnumItemClickedEventArgs e)
        {
            DocumentType type = (DocumentType)e.ItemEnum;

            switch (type)
            {
            case DocumentType.MovementDocument:
                TabParent.OpenTab(
                    DialogHelper.GenerateDialogHashName(Document.GetDocClass(type), 0),
                    () => {
                    return(new MovementDocumentViewModel(
                               EntityUoWBuilder.ForCreate(),
                               UnitOfWorkFactory.GetDefaultFactory,
                               new WarehousePermissionService(),
                               VodovozGtkServicesConfig.EmployeeService,
                               new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance()),
                               new NomenclatureSelectorFactory(),
                               new OrderSelectorFactory(),
                               new WarehouseRepository(),
                               UserSingletonRepository.GetInstance(),
                               new RdlPreviewOpener(),
                               ServicesConfig.CommonServices
                               ));
                },
                    this
                    );
                break;

            case DocumentType.IncomingInvoice:
                TabParent.OpenTab(
                    DialogHelper.GenerateDialogHashName(Document.GetDocClass(type), 0),
                    () => {
                    return(new IncomingInvoiceViewModel(
                               EntityUoWBuilder.ForCreate(),
                               UnitOfWorkFactory.GetDefaultFactory,
                               new WarehousePermissionService(),
                               VodovozGtkServicesConfig.EmployeeService,
                               new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance()),
                               new NomenclatureSelectorFactory(),
                               new OrderSelectorFactory(),
                               new WarehouseRepository(),
                               new RdlPreviewOpener(),
                               ServicesConfig.CommonServices
                               ));
                },
                    this
                    );
                break;

            case DocumentType.IncomingWater:
            case DocumentType.WriteoffDocument:
            case DocumentType.SelfDeliveryDocument:
            case DocumentType.CarLoadDocument:
            case DocumentType.CarUnloadDocument:
            case DocumentType.InventoryDocument:
            case DocumentType.ShiftChangeDocument:
            case DocumentType.RegradingOfGoodsDocument:
            default:
                TabParent.OpenTab(
                    DialogHelper.GenerateDialogHashName(Document.GetDocClass(type), 0),
                    () => OrmMain.CreateObjectDialog(Document.GetDocClass(type)),
                    this
                    );
                break;
            }
        }
예제 #14
0
        void ConfigureDlg()
        {
            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.CarLoadEdit, Entity.Warehouse))
            {
                FailInitialize = true;
                return;
            }

            var currentUserId = QS.Project.Services.ServicesConfig.CommonServices.UserService.CurrentUserId;
            var hasPermitionToEditDocWithClosedRL = QS.Project.Services.ServicesConfig.CommonServices.PermissionService.ValidateUserPresetPermission("can_change_car_load_and_unload_docs", currentUserId);
            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.CarLoadEdit, Entity.Warehouse);

            editing &= Entity.RouteList?.Status != RouteListStatus.Closed || hasPermitionToEditDocWithClosedRL;
            yentryrefRouteList.IsEditable  = ySpecCmbWarehouses.Sensitive = ytextviewCommnet.Editable = editing;
            carloaddocumentview1.Sensitive = editing;

            ylabelDate.Binding.AddFuncBinding(Entity, e => e.TimeStamp.ToString("g"), w => w.LabelProp).InitializeFromSource();
            ySpecCmbWarehouses.ItemsList = StoreDocumentHelper.GetRestrictedWarehousesList(UoW, WarehousePermissions.CarLoadEdit);
            ySpecCmbWarehouses.Binding.AddBinding(Entity, e => e.Warehouse, w => w.SelectedItem).InitializeFromSource();
            ytextviewCommnet.Binding.AddBinding(Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource();
            var filter = new RouteListsFilter(UoW);

            filter.SetAndRefilterAtOnce(x => x.RestrictedStatuses = new[] { RouteListStatus.InLoading });
            yentryrefRouteList.RepresentationModel = new ViewModel.RouteListsVM(filter);
            yentryrefRouteList.Binding.AddBinding(Entity, e => e.RouteList, w => w.Subject).InitializeFromSource();
            yentryrefRouteList.CanEditReference = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_delete");

            enumPrint.ItemsEnum = typeof(CarLoadPrintableDocuments);

            UpdateRouteListInfo();
            Entity.UpdateStockAmount(UoW);
            Entity.UpdateAlreadyLoaded(UoW, new RouteListRepository());
            Entity.UpdateInRouteListAmount(UoW, new RouteListRepository());
            carloaddocumentview1.DocumentUoW = UoWGeneric;
            carloaddocumentview1.SetButtonEditing(editing);
            buttonSave.Sensitive = editing;
            if (!editing)
            {
                HasChanges = false;
            }
            if (UoW.IsNew && Entity.Warehouse != null)
            {
                carloaddocumentview1.FillItemsByWarehouse();
            }
            ySpecCmbWarehouses.ItemSelected += OnYSpecCmbWarehousesItemSelected;

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            Entity.CanEdit = permmissionValidator.Validate(typeof(CarLoadDocument), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                ytextviewCommnet.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                yentryrefRouteList.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ySpecCmbWarehouses.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ytextviewRouteListInfo.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                carloaddocumentview1.Sensitive = false;

                buttonSave.Sensitive = false;
            }
            else
            {
                Entity.CanEdit = true;
            }
        }
예제 #15
0
        void ConfigureDlg()
        {
            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.IncomingWaterEdit, Entity.IncomingWarehouse, Entity.WriteOffWarehouse))
            {
                FailInitialize = true;
                return;
            }

            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.IncomingWaterEdit, Entity.IncomingWarehouse, Entity.WriteOffWarehouse);

            buttonFill.Sensitive = yentryProduct.IsEditable = spinAmount.Sensitive
                                                                  = referenceSrcWarehouse.IsEditable = referenceDstWarehouse.IsEditable = editing;
            incomingwatermaterialview1.Sensitive = editing;

            labelTimeStamp.Binding.AddBinding(Entity, e => e.DateString, w => w.LabelProp).InitializeFromSource();
            spinAmount.Binding.AddBinding(Entity, e => e.Amount, w => w.ValueAsInt).InitializeFromSource();

            referenceSrcWarehouse.ItemsQuery = StoreDocumentHelper.GetRestrictedWarehouseQuery(WarehousePermissions.IncomingWaterEdit);
            referenceSrcWarehouse.Binding.AddBinding(Entity, e => e.WriteOffWarehouse, w => w.Subject).InitializeFromSource();
            referenceDstWarehouse.ItemsQuery = StoreDocumentHelper.GetRestrictedWarehouseQuery(WarehousePermissions.IncomingWaterEdit);
            referenceDstWarehouse.Binding.AddBinding(Entity, e => e.IncomingWarehouse, w => w.Subject).InitializeFromSource();

            incomingwatermaterialview1.DocumentUoW = UoWGeneric;

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            Entity.CanEdit = permmissionValidator.Validate(typeof(IncomingWater), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                spinAmount.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                yentryProduct.Sensitive              = false;
                referenceDstWarehouse.Sensitive      = false;
                referenceSrcWarehouse.Sensitive      = false;
                buttonFill.Sensitive                 = false;
                incomingwatermaterialview1.Sensitive = false;
                buttonSave.Sensitive                 = false;
            }
            else
            {
                Entity.CanEdit = true;
            }

            var nomenclatureFilter = new NomenclatureFilterViewModel()
            {
                HidenByDefault = true
            };
            var nomenclatureRepository = new EntityRepositories.Goods.NomenclatureRepository(new NomenclatureParametersProvider());

            var counterpartySelectorFactory =
                new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel, CounterpartyJournalFilterViewModel>(
                    ServicesConfig.CommonServices);

            var nomenclatureAutoCompleteSelectorFactory =
                new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(
                    ServicesConfig.CommonServices,
                    nomenclatureFilter,
                    counterpartySelectorFactory,
                    nomenclatureRepository,
                    UserSingletonRepository.GetInstance()
                    );

            yentryProduct.SetEntityAutocompleteSelectorFactory(nomenclatureAutoCompleteSelectorFactory);
            yentryProduct.Binding.AddBinding(Entity, e => e.Product, w => w.Subject).InitializeFromSource();
        }
예제 #16
0
        protected void OnButtonEditClicked(object sender, EventArgs e)
        {
            if (tableDocuments.GetSelectedObjects().GetLength(0) > 0)
            {
                int          id      = (tableDocuments.GetSelectedObjects() [0] as ViewModel.DocumentVMNode).Id;
                DocumentType DocType = (tableDocuments.GetSelectedObjects() [0] as ViewModel.DocumentVMNode).DocTypeEnum;

                switch (DocType)
                {
                case DocumentType.IncomingInvoice:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <IncomingInvoice>(id),
                        () => {
                        return(new IncomingInvoiceViewModel(
                                   EntityUoWBuilder.ForOpen(id),
                                   UnitOfWorkFactory.GetDefaultFactory,
                                   new WarehousePermissionService(),
                                   VodovozGtkServicesConfig.EmployeeService,
                                   new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance()),
                                   new NomenclatureSelectorFactory(),
                                   new OrderSelectorFactory(),
                                   new WarehouseRepository(),
                                   new RdlPreviewOpener(),
                                   ServicesConfig.CommonServices
                                   ));
                    },
                        this
                        );

                    break;

                case DocumentType.IncomingWater:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <IncomingWater>(id),
                        () => new IncomingWaterDlg(id),
                        this);
                    break;

                case DocumentType.MovementDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <MovementDocument>(id),
                        () => {
                        return(new MovementDocumentViewModel(
                                   EntityUoWBuilder.ForOpen(id),
                                   UnitOfWorkFactory.GetDefaultFactory,
                                   new WarehousePermissionService(),
                                   VodovozGtkServicesConfig.EmployeeService,
                                   new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance()),
                                   new NomenclatureSelectorFactory(),
                                   new OrderSelectorFactory(),
                                   new WarehouseRepository(),
                                   UserSingletonRepository.GetInstance(),
                                   new RdlPreviewOpener(),
                                   ServicesConfig.CommonServices
                                   ));
                    },
                        this
                        );
                    break;

                case DocumentType.WriteoffDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <WriteoffDocument>(id),
                        () => new WriteoffDocumentDlg(id),
                        this);
                    break;

                case DocumentType.InventoryDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <InventoryDocument>(id),
                        () => new InventoryDocumentDlg(id),
                        this);
                    break;

                case DocumentType.ShiftChangeDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <ShiftChangeWarehouseDocument>(id),
                        () => new ShiftChangeWarehouseDocumentDlg(id),
                        this);
                    break;

                case DocumentType.RegradingOfGoodsDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <RegradingOfGoodsDocument>(id),
                        () => new RegradingOfGoodsDocumentDlg(id),
                        this);
                    break;

                case DocumentType.SelfDeliveryDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <SelfDeliveryDocument>(id),
                        () => new SelfDeliveryDocumentDlg(id),
                        this);
                    break;

                case DocumentType.CarLoadDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <CarLoadDocument>(id),
                        () => new CarLoadDocumentDlg(id),
                        this);
                    break;

                case DocumentType.CarUnloadDocument:
                    TabParent.OpenTab(
                        DialogHelper.GenerateDialogHashName <CarUnloadDocument>(id),
                        () => new CarUnloadDocumentDlg(id),
                        this);
                    break;

                default:
                    throw new NotSupportedException("Тип документа не поддерживается.");
                }
            }
        }
예제 #17
0
        public CashExpenseDlg(IPermissionService permissionService)
        {
            this.Build();
            UoWGeneric    = UnitOfWorkFactory.CreateWithNewRoot <Expense>();
            Entity.Casher = EmployeeRepository.GetEmployeeForCurrentUser(UoW);
            if (Entity.Casher == null)
            {
                MessageDialogHelper.RunErrorDialog("Ваш пользователь не привязан к действующему сотруднику, вы не можете создавать кассовые документы, так как некого указывать в качестве кассира.");
                FailInitialize = true;
                return;
            }

            var userPermission = permissionService.ValidateUserPermission(typeof(Expense), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id);

            canCreate = userPermission.CanCreate;
            if (!userPermission.CanCreate)
            {
                MessageDialogHelper.RunErrorDialog("Отсутствуют права на создание расходного ордера");
                FailInitialize = true;
                return;
            }

            if (!accessfilteredsubdivisionselectorwidget.Configure(UoW, false, typeof(Expense)))
            {
                MessageDialogHelper.RunErrorDialog(accessfilteredsubdivisionselectorwidget.ValidationErrorMessage);
                FailInitialize = true;
                return;
            }

            Entity.Date = DateTime.Now;
            ConfigureDlg();
        }
예제 #18
0
        protected void OnButtonAddClicked(object sender, EventArgs e)
        {
            NomenclatureStockFilterViewModel filter = new NomenclatureStockFilterViewModel(
                new WarehouseRepository()
                );

            filter.RestrictWarehouse = DocumentUoW.Root.Warehouse;

            NomenclatureStockBalanceJournalViewModel vm = new NomenclatureStockBalanceJournalViewModel(
                filter,
                UnitOfWorkFactory.GetDefaultFactory,
                ServicesConfig.CommonServices
                );

            vm.SelectionMode           = JournalSelectionMode.Single;
            vm.TabName                 = "Выберите номенклатуру на замену";
            vm.OnEntitySelectedResult += (s, ea) => {
                var selectedNode = ea.SelectedNodes.Cast <NomenclatureStockJournalNode>().FirstOrDefault();
                if (selectedNode == null)
                {
                    return;
                }
                var nomenclature = DocumentUoW.GetById <Nomenclature>(selectedNode.Id);

                newRow = new RegradingOfGoodsDocumentItem()
                {
                    NomenclatureOld = nomenclature,
                    AmountInStock   = selectedNode.StockAmount
                };

                var nomenclatureFilter = new NomenclatureFilterViewModel();

                var nomenclatureRepository = new EntityRepositories.Goods.NomenclatureRepository(new NomenclatureParametersProvider());

                var userRepository = UserSingletonRepository.GetInstance();

                var employeeService = VodovozGtkServicesConfig.EmployeeService;

                var counterpartySelectorFactory =
                    new DefaultEntityAutocompleteSelectorFactory <Counterparty, CounterpartyJournalViewModel, CounterpartyJournalFilterViewModel>(
                        ServicesConfig.CommonServices);

                var nomenclatureAutoCompleteSelectorFactory =
                    new NomenclatureAutoCompleteSelectorFactory <Nomenclature, NomenclaturesJournalViewModel>(
                        ServicesConfig.CommonServices,
                        nomenclatureFilter,
                        counterpartySelectorFactory,
                        nomenclatureRepository,
                        userRepository
                        );

                var nomenclaturesJournalViewModel =
                    new NomenclaturesJournalViewModel(
                        nomenclatureFilter,
                        UnitOfWorkFactory.GetDefaultFactory,
                        ServicesConfig.CommonServices,
                        employeeService,
                        nomenclatureAutoCompleteSelectorFactory,
                        counterpartySelectorFactory,
                        nomenclatureRepository,
                        userRepository
                        );

                nomenclaturesJournalViewModel.SelectionMode           = JournalSelectionMode.Single;
                nomenclaturesJournalViewModel.OnEntitySelectedResult += SelectNewNomenclature_ObjectSelected;

                MyTab.TabParent.AddSlaveTab(MyTab, nomenclaturesJournalViewModel);
            };
            MyTab.TabParent.AddSlaveTab(MyTab, vm);
        }
예제 #19
0
        void ConfigureDlg()
        {
            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.RegradingOfGoodsEdit, Entity.Warehouse))
            {
                FailInitialize = true;
                return;
            }

            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.RegradingOfGoodsEdit, Entity.Warehouse);

            yentryrefWarehouse.IsEditable       = ytextviewCommnet.Editable = editing;
            regradingofgoodsitemsview.Sensitive = editing;

            ylabelDate.Binding.AddFuncBinding(Entity, e => e.TimeStamp.ToString("g"), w => w.LabelProp).InitializeFromSource();
            yentryrefWarehouse.ItemsQuery = StoreDocumentHelper.GetRestrictedWarehouseQuery(WarehousePermissions.RegradingOfGoodsEdit);
            yentryrefWarehouse.Binding.AddBinding(Entity, e => e.Warehouse, w => w.Subject).InitializeFromSource();
            ytextviewCommnet.Binding.AddBinding(Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource();

            regradingofgoodsitemsview.DocumentUoW = UoWGeneric;
            if (Entity.Items.Count > 0)
            {
                yentryrefWarehouse.Sensitive = false;
            }

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            Entity.CanEdit = permmissionValidator.Validate(typeof(RegradingOfGoodsDocument), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                ytextviewCommnet.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                yentryrefWarehouse.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                regradingofgoodsitemsview.Sensitive = false;

                buttonSave.Sensitive = false;
            }
            else
            {
                Entity.CanEdit = true;
            }
        }
예제 #20
0
        static void AutofacClassConfig()
        {
            var builder = new ContainerBuilder();

            #region База
            builder.Register(c => UnitOfWorkFactory.GetDefaultFactory).As <IUnitOfWorkFactory>();
            builder.RegisterType <BaseParametersProvider>().AsSelf();
            #endregion

            #region Сервисы
            #region GtkUI
            builder.RegisterType <GtkMessageDialogsInteractive>().As <IInteractiveMessage>();
            builder.RegisterType <GtkQuestionDialogsInteractive>().As <IInteractiveQuestion>();
            builder.RegisterType <GtkInteractiveService>().As <IInteractiveService>();
            #endregion GtkUI
            builder.Register(c => ServicesConfig.CommonServices).As <ICommonServices>();
            builder.RegisterType <UserService>().As <IUserService>();
            #endregion

            #region Vodovoz
            #region Adapters
            builder.RegisterType <UndeliveriesViewOpener>().As <IUndeliveriesViewOpener>();
            #endregion
            #region Services
            builder.Register(c => VodovozGtkServicesConfig.EmployeeService).As <IEmployeeService>();
            builder.RegisterType <GtkFilePicker>().As <IFilePickerService>();
            builder.Register(c => new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance())).As <IEntityExtendedPermissionValidator>();
            builder.RegisterType <EmployeeService>().As <IEmployeeService>();
            #endregion
            #region Selectors
            builder.RegisterType <NomenclatureSelectorFactory>().As <INomenclatureSelectorFactory>();
            builder.RegisterType <OrderSelectorFactory>().As <IOrderSelectorFactory>();
            builder.RegisterType <RdlPreviewOpener>().As <IRDLPreviewOpener>();
            #endregion
            #region Интерфейсы репозиториев
            builder.RegisterType <SubdivisionRepository>().As <ISubdivisionRepository>();
            builder.Register(c => EmployeeSingletonRepository.GetInstance()).As <IEmployeeRepository>();
            builder.RegisterType <WarehouseRepository>().As <IWarehouseRepository>();
            builder.Register(c => UserSingletonRepository.GetInstance()).As <IUserRepository>();
            #endregion
            #region Mango
            builder.RegisterType <MangoManager>().AsSelf();
            #endregion
            #endregion

            #region Навигация
            builder.RegisterType <ClassNamesHashGenerator>().As <IPageHashGenerator>();
            builder.Register((ctx) => new AutofacViewModelsTdiPageFactory(AppDIContainer)).As <IViewModelsPageFactory>();
            builder.Register((ctx) => new AutofacTdiPageFactory(AppDIContainer)).As <ITdiPageFactory>();
            builder.Register((ctx) => new AutofacViewModelsGtkPageFactory(AppDIContainer)).AsSelf();
            builder.RegisterType <TdiNavigationManager>().AsSelf().As <INavigationManager>().As <ITdiCompatibilityNavigation>().SingleInstance();
            builder.Register(cc => new ClassNamesBaseGtkViewResolver(typeof(InternalTalkView), typeof(DeletionView))).As <IGtkViewResolver>();
            #endregion

            #region Старые диалоги
            builder.RegisterAssemblyTypes(System.Reflection.Assembly.GetAssembly(typeof(CounterpartyDlg)))
            .Where(t => t.IsAssignableTo <ITdiTab>())
            .AsSelf();
            #endregion

            #region Старые общие диалоги
            builder.RegisterType <ReportViewDlg>().AsSelf();
            #endregion

            #region ViewModels
            builder.Register(x => new AutofacViewModelResolver(AppDIContainer)).As <IViewModelResolver>();
            builder.RegisterAssemblyTypes(
                System.Reflection.Assembly.GetAssembly(typeof(InternalTalkViewModel)),
                System.Reflection.Assembly.GetAssembly(typeof(ComplaintViewModel)))
            .Where(t => t.IsAssignableTo <ViewModelBase>() && t.Name.EndsWith("ViewModel"))
            .AsSelf();
            #endregion

            #region Repository
            builder.RegisterAssemblyTypes(System.Reflection.Assembly.GetAssembly(typeof(CounterpartyContractRepository)))
            .Where(t => t.Name.EndsWith("Repository"))
            .AsSelf();
            #endregion

            AppDIContainer = builder.Build();
        }
예제 #21
0
        void ConfigureDlg()
        {
            callTaskWorker = new CallTaskWorker(
                CallTaskSingletonFactory.GetInstance(),
                new CallTaskRepository(),
                OrderSingletonRepository.GetInstance(),
                EmployeeSingletonRepository.GetInstance(),
                new BaseParametersProvider(),
                ServicesConfig.CommonServices.UserService,
                SingletonErrorReporter.Instance);

            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.CarUnloadEdit, Entity.Warehouse))
            {
                FailInitialize = true;
                return;
            }

            var currentUserId = QS.Project.Services.ServicesConfig.CommonServices.UserService.CurrentUserId;
            var hasPermitionToEditDocWithClosedRL = QS.Project.Services.ServicesConfig.CommonServices.PermissionService.ValidateUserPresetPermission("can_change_car_load_and_unload_docs", currentUserId);
            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.CarUnloadEdit, Entity.Warehouse);

            editing &= Entity.RouteList?.Status != RouteListStatus.Closed || hasPermitionToEditDocWithClosedRL;
            Entity.InitializeDefaultValues(UoW, new NomenclatureRepository(new NomenclatureParametersProvider()));
            yentryrefRouteList.IsEditable  = ySpecCmbWarehouses.Sensitive = ytextviewCommnet.Editable = editing;
            returnsreceptionview.Sensitive =
                hbxTareToReturn.Sensitive  =
                    nonserialequipmentreceptionview1.Sensitive =
                        defectiveitemsreceptionview1.Sensitive = editing;

            defectiveitemsreceptionview1.UoW =
                returnsreceptionview.UoW     = UoW;

            ylabelDate.Binding.AddFuncBinding(Entity, e => e.TimeStamp.ToString("g"), w => w.LabelProp).InitializeFromSource();
            ySpecCmbWarehouses.ItemsList = StoreDocumentHelper.GetRestrictedWarehousesList(UoW, WarehousePermissions.CarUnloadEdit);
            ySpecCmbWarehouses.Binding.AddBinding(Entity, e => e.Warehouse, w => w.SelectedItem).InitializeFromSource();
            ytextviewCommnet.Binding.AddBinding(Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource();
            var filter = new RouteListsFilter(UoW);

            filter.SetAndRefilterAtOnce(x => x.RestrictedStatuses = new[] { RouteListStatus.EnRoute });
            yentryrefRouteList.RepresentationModel = new ViewModel.RouteListsVM(filter);
            yentryrefRouteList.Binding.AddBinding(Entity, e => e.RouteList, w => w.Subject).InitializeFromSource();
            yentryrefRouteList.CanEditReference = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_delete");

            Entity.PropertyChanged += (sender, e) => {
                if (e.PropertyName == nameof(Entity.Warehouse))
                {
                    OnWarehouseChanged();
                }
                if (e.PropertyName == nameof(Entity.RouteList))
                {
                    UpdateWidgetsVisible();
                }
            };

            lblTareReturnedBefore.Binding.AddFuncBinding(Entity, e => e.ReturnedTareBeforeText, w => w.Text).InitializeFromSource();
            spnTareToReturn.Binding.AddBinding(Entity, e => e.TareToReturn, w => w.ValueAsInt).InitializeFromSource();

            defectiveitemsreceptionview1.Warehouse = returnsreceptionview.Warehouse = Entity.Warehouse;

            UpdateWidgetsVisible();
            buttonSave.Sensitive = editing;
            if (!editing)
            {
                HasChanges = false;
            }
            if (!UoW.IsNew)
            {
                LoadReception();
            }

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeRepository);

            Entity.CanEdit = permmissionValidator.Validate(typeof(CarUnloadDocument), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                ytextviewCommnet.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                yentryrefRouteList.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ySpecCmbWarehouses.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ytextviewRouteListInfo.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                spnTareToReturn.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                defectiveitemsreceptionview1.Sensitive     = false;
                nonserialequipmentreceptionview1.Sensitive = false;
                returnsreceptionview.Sensitive             = false;

                buttonSave.Sensitive = false;
            }
            else
            {
                Entity.CanEdit = true;
            }
        }
예제 #22
0
        void ConfigureDlg()
        {
            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.InventoryEdit, Entity.Warehouse))
            {
                FailInitialize = true;
                return;
            }

            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.InventoryEdit, Entity.Warehouse);

            ydatepickerDocDate.Sensitive = yentryrefWarehouse.IsEditable = ytextviewCommnet.Editable = editing;

            ytreeviewItems.Sensitive                   =
                buttonAdd.Sensitive                    =
                    buttonFillItems.Sensitive          =
                        buttonFine.Sensitive           =
                            buttonDeleteFine.Sensitive = editing;

            ydatepickerDocDate.Binding.AddBinding(Entity, e => e.TimeStamp, w => w.Date).InitializeFromSource();
            yentryrefWarehouse.ItemsQuery = StoreDocumentHelper.GetRestrictedWarehouseQuery(WarehousePermissions.InventoryEdit);
            yentryrefWarehouse.Binding.AddBinding(Entity, e => e.Warehouse, w => w.Subject).InitializeFromSource();

            ytextviewCommnet.Binding.AddBinding(Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource();

            string errorMessage       = "Не установлены единицы измерения у следующих номенклатур :" + Environment.NewLine;
            int    wrongNomenclatures = 0;

            foreach (var item in UoWGeneric.Root.Items)
            {
                if (item.Nomenclature.Unit == null)
                {
                    errorMessage += string.Format("Номер: {0}. Название: {1}{2}",
                                                  item.Nomenclature.Id, item.Nomenclature.Name, Environment.NewLine);
                    wrongNomenclatures++;
                }
            }
            if (wrongNomenclatures > 0)
            {
                MessageDialogHelper.RunErrorDialog(errorMessage);
                FailInitialize = true;
                return;
            }

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            Entity.CanEdit = permmissionValidator.Validate(typeof(InventoryDocument), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                ydatepickerDocDate.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                yentryrefWarehouse.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ytextviewCommnet.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                buttonSave.Sensitive                       = false;
                ytreeviewItems.Sensitive                   =
                    buttonAdd.Sensitive                    =
                        buttonFillItems.Sensitive          =
                            buttonFine.Sensitive           =
                                buttonDeleteFine.Sensitive = false;
            }
            else
            {
                Entity.CanEdit = true;
            }

            filter = new SelectableParametersReportFilter(UoW);

            var nomenclatureParam = filter.CreateParameterSet(
                "Номенклатуры",
                "nomenclature",
                new ParametersFactory(UoW, (filters) => {
                SelectableEntityParameter <Nomenclature> resultAlias = null;
                var query = UoW.Session.QueryOver <Nomenclature>()
                            .Where(x => !x.IsArchive);
                if (filters != null && filters.Any())
                {
                    foreach (var f in filters)
                    {
                        var filterCriterion = f();
                        if (filterCriterion != null)
                        {
                            query.Where(filterCriterion);
                        }
                    }
                }

                query.SelectList(list => list
                                 .Select(x => x.Id).WithAlias(() => resultAlias.EntityId)
                                 .Select(x => x.OfficialName).WithAlias(() => resultAlias.EntityTitle)
                                 );
                query.TransformUsing(Transformers.AliasToBean <SelectableEntityParameter <Nomenclature> >());
                return(query.List <SelectableParameter>());
            })
                );

            var nomenclatureTypeParam = filter.CreateParameterSet(
                "Типы номенклатур",
                "nomenclature_type",
                new ParametersEnumFactory <NomenclatureCategory>()
                );

            nomenclatureParam.AddFilterOnSourceSelectionChanged(nomenclatureTypeParam,
                                                                () => {
                var selectedValues = nomenclatureTypeParam.GetSelectedValues();
                if (!selectedValues.Any())
                {
                    return(null);
                }
                return(Restrictions.On <Nomenclature>(x => x.Category).IsIn(nomenclatureTypeParam.GetSelectedValues().ToArray()));
            }
                                                                );

            //Предзагрузка. Для избежания ленивой загрузки
            UoW.Session.QueryOver <ProductGroup>().Fetch(SelectMode.Fetch, x => x.Childs).List();

            filter.CreateParameterSet(
                "Группы товаров",
                "product_group",
                new RecursiveParametersFactory <ProductGroup>(UoW,
                                                              (filters) => {
                var query = UoW.Session.QueryOver <ProductGroup>();
                if (filters != null && filters.Any())
                {
                    foreach (var f in filters)
                    {
                        query.Where(f());
                    }
                }
                return(query.List());
            },
                                                              x => x.Name,
                                                              x => x.Childs)
                );

            var filterViewModel = new SelectableParameterReportFilterViewModel(filter);
            var filterWidget    = new SelectableParameterReportFilterView(filterViewModel);

            vboxParameters.Add(filterWidget);
            filterWidget.Show();

            ConfigNomenclatureColumns();
        }
예제 #23
0
        void ConfigureDlg()
        {
            var validationResult = CheckPermission(EmployeeSingletonRepository.GetInstance().GetEmployeeForCurrentUser(UoW));

            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.SelfDeliveryEdit, Entity.Warehouse))
            {
                FailInitialize = true;
                return;
            }

            Entity.InitializeDefaultValues(UoW, new NomenclatureRepository(new NomenclatureParametersProvider()));
            vbxMain.Sensitive      = canEditDocument;
            buttonCancel.Sensitive = true;

            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.SelfDeliveryEdit, Entity.Warehouse);

            yentryrefOrder.IsEditable = lstWarehouse.Sensitive = ytextviewCommnet.Editable = editing && canEditDocument;
            selfdeliverydocumentitemsview1.Sensitive = hbxTareToReturn.Sensitive = editing && canEditDocument;

            ylabelDate.Binding.AddFuncBinding(Entity, e => e.TimeStamp.ToString("g"), w => w.LabelProp).InitializeFromSource();
            lstWarehouse.ItemsList = StoreDocumentHelper.GetRestrictedWarehousesList(UoW, WarehousePermissions.SelfDeliveryEdit);
            lstWarehouse.Binding.AddBinding(Entity, e => e.Warehouse, w => w.SelectedItem).InitializeFromSource();
            lstWarehouse.ItemSelected += OnWarehouseSelected;
            ytextviewCommnet.Binding.AddBinding(Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource();
            var filter = new OrdersFilter(UoW);

            filter.SetAndRefilterAtOnce(
                x => x.RestrictSelfDelivery = true,
                x => x.RestrictStatus       = OrderStatus.OnLoading
                );
            yentryrefOrder.RepresentationModel = new ViewModel.OrdersVM(filter);
            yentryrefOrder.Binding.AddBinding(Entity, e => e.Order, w => w.Subject).InitializeFromSource();
            yentryrefOrder.CanEditReference = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_delete");
            yentryrefOrder.ChangedByUser   += (sender, e) => { FillTrees(); };

            UpdateOrderInfo();
            Entity.UpdateStockAmount(UoW);
            Entity.UpdateAlreadyUnloaded(UoW, new NomenclatureRepository(new NomenclatureParametersProvider()), new BottlesRepository());
            selfdeliverydocumentitemsview1.DocumentUoW = UoWGeneric;
            //bottlereceptionview1.UoW = UoW;
            UpdateWidgets();
            lblTareReturnedBefore.Binding.AddFuncBinding(Entity, e => e.ReturnedTareBeforeText, w => w.Text).InitializeFromSource();
            spnTareToReturn.Binding.AddBinding(Entity, e => e.TareToReturn, w => w.ValueAsInt).InitializeFromSource();

            IColumnsConfig goodsColumnsConfig = FluentColumnsConfig <GoodsReceptionVMNode> .Create()
                                                .AddColumn("Номенклатура").AddTextRenderer(node => node.Name)
                                                .AddColumn("Кол-во").AddNumericRenderer(node => node.Amount)
                                                .Adjustment(new Gtk.Adjustment(0, 0, 9999, 1, 100, 0))
                                                .Editing(true)
                                                .AddColumn("Ожидаемое кол-во").AddNumericRenderer(node => node.ExpectedAmount)
                                                .AddColumn("Категория").AddTextRenderer(node => node.Category.GetEnumTitle())
                                                .AddColumn("Направление").AddTextRenderer(node => node.Direction != null ? node.Direction.GetEnumTitle() : "")
                                                .AddColumn("Принадлежность").AddEnumRenderer(node => node.OwnType, true, new Enum[] { OwnTypes.None })
                                                .AddSetter((c, n) => {
                c.Editable = false;
                c.Editable = n.Category == NomenclatureCategory.equipment;
            })
                                                .AddColumn("Причина").AddEnumRenderer(
                node => node.DirectionReason
                , true
                ).AddSetter((c, n) =>
            {
                switch (n.DirectionReason)
                {
                case DirectionReason.Rent:
                    c.Text = "Закрытие аренды";
                    break;

                case DirectionReason.Repair:
                    c.Text = "В ремонт";
                    break;

                case DirectionReason.Cleaning:
                    c.Text = "На санобработку";
                    break;

                case DirectionReason.RepairAndCleaning:
                    c.Text = "В ремонт и санобработку";
                    break;

                default:
                    break;
                }
                c.Editable = false;
                c.Editable = n.Category == NomenclatureCategory.equipment;
            })


                                                .AddColumn("")
                                                .Finish();

            yTreeOtherGoods.ColumnsConfig   = goodsColumnsConfig;
            yTreeOtherGoods.ItemsDataSource = GoodsReceptionList;

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            Entity.CanEdit = permmissionValidator.Validate(typeof(SelfDeliveryDocument), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                yTreeOtherGoods.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                yentryrefOrder.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ytextviewCommnet.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                ytextviewOrderInfo.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                lstWarehouse.Sensitive = false;
                selfdeliverydocumentitemsview1.Sensitive = false;
                spnTareToReturn.Sensitive  = false;
                btnAddOtherGoods.Sensitive = false;

                buttonSave.Sensitive = false;
            }
            else
            {
                Entity.CanEdit = true;
            }

            FillTrees();
        }
예제 #24
0
        public TransferExpenseDlg(int id, IPermissionService permissionService)
        {
            this.Build();
            UoWGeneric = UnitOfWorkFactory.CreateForRoot <Expense>(id);

            var userPermission = permissionService.ValidateUserPermission(typeof(Expense), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id);

            if (!userPermission.CanRead)
            {
                MessageDialogHelper.RunErrorDialog("Отсутствуют права на просмотр приходного ордера");
                FailInitialize = true;
                return;
            }

            if (Entity.TypeDocument != ExpenseInvoiceDocumentType.ExpenseTransferDocument)
            {
                throw new InvalidOperationException($"Диалог доступен только для документа типа {nameof(ExpenseInvoiceDocumentType.ExpenseTransferDocument)}");
            }
            ConfigureDlg();
        }
예제 #25
0
        public AdvanceReportDlg(int id, IPermissionService permissionService)
        {
            this.Build();
            UoWGeneric = UnitOfWorkFactory.CreateForRoot <AdvanceReport>(id);

            if (!accessfilteredsubdivisionselectorwidget.Configure(UoW, false, typeof(Income)))
            {
                MessageDialogHelper.RunErrorDialog(accessfilteredsubdivisionselectorwidget.ValidationErrorMessage);
                FailInitialize = true;
                return;
            }
            var userPermission = permissionService.ValidateUserPermission(typeof(AdvanceReport), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id);

            if (!userPermission.CanRead)
            {
                MessageDialogHelper.RunErrorDialog("Отсутствуют права на просмотр приходного ордера");
                FailInitialize = true;
                return;
            }
            canEdit = userPermission.CanUpdate;

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            canEditRectroactively = permmissionValidator.Validate(typeof(AdvanceReport), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));

            //Отключаем отображение ненужных элементов.
            labelDebtTitle.Visible = labelTableTitle.Visible = hboxDebt.Visible = GtkScrolledWindow1.Visible = labelCreating.Visible = false;

            comboExpense.Sensitive = yspinMoney.Sensitive = yentryEmployee.Sensitive = specialListCmbOrganisation.Sensitive = false;

            ConfigureDlg();
        }
예제 #26
0
        private void ConfigureDlg()
        {
            if (Entity.Id == 0)
            {
                Entity.OrganisationForSalary = commonOrganisationProvider.GetCommonOrganisation(UoW);
            }

            canManageDriversAndForwarders = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_manage_drivers_and_forwarders");
            canManageOfficeWorkers        = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_manage_office_workers");
            canEditOrganisationForSalary  = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_edit_organisation_for_salary");

            ConfigureCategory();
            ConfigureSubdivision();
            OnRussianCitizenToggled(null, EventArgs.Empty);
            dataentryDrivingNumber.MaxLength = 20;
            dataentryDrivingNumber.Binding.AddBinding(Entity, e => e.DrivingLicense, w => w.Text).InitializeFromSource();
            UoWGeneric.Root.PropertyChanged += OnPropertyChanged;
            notebookMain.Page        = 0;
            notebookMain.ShowTabs    = false;
            GenderComboBox.ItemsEnum = typeof(Gender);
            GenderComboBox.Binding.AddBinding(Entity, e => e.Gender, w => w.SelectedItemOrNull).InitializeFromSource();

            subdivisionService = SubdivisionParametersProvider.Instance;

            yenumcomboStatus.ItemsEnum = typeof(EmployeeStatus);
            yenumcomboStatus.Binding.AddBinding(Entity, e => e.Status, w => w.SelectedItem).InitializeFromSource();

            chkDriverForOneDay.Binding.AddBinding(Entity, e => e.IsDriverForOneDay, w => w.Active).InitializeFromSource();
            cmbDriverOf.ItemsEnum = typeof(CarTypeOfUse);
            cmbDriverOf.Binding.AddBinding(Entity, e => e.DriverOf, w => w.SelectedItemOrNull).InitializeFromSource();

            dataentryLastName.Binding.AddBinding(Entity, e => e.LastName, w => w.Text).InitializeFromSource();
            dataentryName.Binding.AddBinding(Entity, e => e.Name, w => w.Text).InitializeFromSource();
            dataentryPatronymic.Binding.AddBinding(Entity, e => e.Patronymic, w => w.Text).InitializeFromSource();
            dataentryInnerPhone.Binding.AddBinding(Entity, e => e.InnerPhone, w => w.Text, new Gamma.Binding.Converters.NumbersToStringConverter()).InitializeFromSource();

            entryAddressCurrent.Binding.AddBinding(Entity, e => e.AddressCurrent, w => w.Text).InitializeFromSource();
            entryAddressRegistration.Binding.AddBinding(Entity, e => e.AddressRegistration, w => w.Text).InitializeFromSource();
            entryInn.Binding.AddBinding(Entity, e => e.INN, w => w.Text).InitializeFromSource();

            dataentryAndroidLogin.Binding.AddBinding(Entity, e => e.AndroidLogin, w => w.Text).InitializeFromSource();
            dataentryAndroidPassword.Binding.AddBinding(Entity, e => e.AndroidPassword, w => w.Text).InitializeFromSource();

            var filterDefaultForwarder = new EmployeeFilterViewModel();

            filterDefaultForwarder.SetAndRefilterAtOnce(
                x => x.Category = EmployeeCategory.forwarder,
                x => x.Status   = EmployeeStatus.IsWorking
                );
            repEntDefaultForwarder.RepresentationModel = new EmployeesVM(filterDefaultForwarder);
            repEntDefaultForwarder.Binding.AddBinding(Entity, e => e.DefaultForwarder, w => w.Subject).InitializeFromSource();

            referenceNationality.SubjectType = typeof(Nationality);
            referenceNationality.Binding.AddBinding(Entity, e => e.Nationality, w => w.Subject).InitializeFromSource();
            referenceCitizenship.SubjectType = typeof(Citizenship);
            referenceCitizenship.Binding.AddBinding(Entity, e => e.Citizenship, w => w.Subject).InitializeFromSource();

            referenceUser.SubjectType      = typeof(User);
            referenceUser.CanEditReference = false;
            referenceUser.Binding.AddBinding(Entity, e => e.User, w => w.Subject).InitializeFromSource();
            referenceUser.Sensitive = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_manage_users");

            yenumcombobox13.ItemsEnum = typeof(RegistrationType);
            yenumcombobox13.Binding.AddBinding(Entity, e => e.Registration, w => w.SelectedItemOrNull).InitializeFromSource();

            comboDriverType.ItemsEnum = typeof(DriverType);
            comboDriverType.Binding.AddBinding(Entity, e => e.DriverType, w => w.SelectedItemOrNull).InitializeFromSource();

            ydatepicker1.Binding.AddBinding(Entity, e => e.BirthdayDate, w => w.DateOrNull).InitializeFromSource();
            dateFired.Binding.AddBinding(Entity, e => e.DateFired, w => w.DateOrNull).InitializeFromSource();
            dateHired.Binding.AddBinding(Entity, e => e.DateHired, w => w.DateOrNull).InitializeFromSource();
            dateCalculated.Binding.AddBinding(Entity, e => e.DateCalculated, w => w.DateOrNull).InitializeFromSource();

            photoviewEmployee.Binding.AddBinding(Entity, e => e.Photo, w => w.ImageFile).InitializeFromSource();
            photoviewEmployee.GetSaveFileName = () => Entity.FullName;

            attachmentFiles.AttachToTable = OrmConfig.GetDBTableName(typeof(Employee));
            if (Entity.Id != 0)
            {
                attachmentFiles.ItemId = UoWGeneric.Root.Id;
                attachmentFiles.UpdateFileList();
            }
            phonesView.UoW = UoWGeneric;
            if (UoWGeneric.Root.Phones == null)
            {
                UoWGeneric.Root.Phones = new List <Phone>();
            }
            phonesView.Phones            = UoWGeneric.Root.Phones;
            accountsView.ParentReference = new ParentReferenceGeneric <Employee, Account>(UoWGeneric, o => o.Accounts);
            accountsView.SetTitle("Банковские счета сотрудника");
            ydateFirstWorkDay.Binding.AddBinding(Entity, e => e.FirstWorkDay, w => w.DateOrNull).InitializeFromSource();
            yspinTripsPriority.Binding.AddBinding(Entity, e => e.TripPriority, w => w.ValueAsShort).InitializeFromSource();
            yspinDriverSpeed.Binding.AddBinding(Entity, e => e.DriverSpeed, w => w.Value, new MultiplierToPercentConverter()).InitializeFromSource();
            minAddressesSpin.Binding.AddBinding(Entity, e => e.MinRouteAddresses, w => w.ValueAsInt).InitializeFromSource();
            maxAddressesSpin.Binding.AddBinding(Entity, e => e.MaxRouteAddresses, w => w.ValueAsInt).InitializeFromSource();
            checkbuttonRussianCitizen.Binding.AddBinding(Entity, e => e.IsRussianCitizen, w => w.Active).InitializeFromSource();
            checkVisitingMaster.Binding.AddBinding(Entity, e => e.VisitingMaster, w => w.Active).InitializeFromSource();
            checkChainStoreDriver.Binding.AddBinding(Entity, e => e.IsChainStoreDriver, w => w.Active).InitializeFromSource();

            ylblUserLogin.TooltipText = "При сохранении сотрудника создаёт нового пользователя с введённым логином и отправляет сотруднику SMS с сгенерированным паролем";
            yentryUserLogin.Binding.AddBinding(Entity, e => e.LoginForNewUser, w => w.Text);
            yentryUserLogin.Sensitive = CanCreateNewUser;

            specialListCmbOrganisation.ItemsList = UoW.GetAll <Organization>();
            specialListCmbOrganisation.Binding.AddBinding(Entity, e => e.OrganisationForSalary, w => w.SelectedItem).InitializeFromSource();
            specialListCmbOrganisation.Sensitive = canEditOrganisationForSalary;

            ConfigureWorkSchedules();
            ConfigureDistrictPriorities();

            ytreeviewEmployeeDocument.ColumnsConfig = FluentColumnsConfig <EmployeeDocument> .Create()
                                                      .AddColumn("Документ").AddTextRenderer(x => x.Document.GetEnumTitle())
                                                      .AddColumn("Доп. название").AddTextRenderer(x => x.Name)
                                                      .Finish();

            ytreeviewEmployeeDocument.SetItemsSource(Entity.ObservableDocuments);

            ytreeviewEmployeeContract.ColumnsConfig = FluentColumnsConfig <EmployeeContract> .Create()
                                                      .AddColumn("Договор").AddTextRenderer(x => x.EmployeeContractTemplate.TemplateType.GetEnumTitle())
                                                      .AddColumn("Название").AddTextRenderer(x => x.Name)
                                                      .AddColumn("Дата начала").AddTextRenderer(x => x.FirstDay.ToString("dd/MM/yyyy"))
                                                      .AddColumn("Дата конца").AddTextRenderer(x => x.LastDay.ToString("dd/MM/yyyy"))
                                                      .Finish();

            ytreeviewEmployeeContract.SetItemsSource(Entity.ObservableContracts);

            wageParametersView.ViewModel = new EmployeeWageParametersViewModel
                                           (
                Entity,
                this,
                UoW,
                new HierarchicalPresetPermissionValidator(EmployeeSingletonRepository.GetInstance(), new PermissionRepository()),
                UserSingletonRepository.GetInstance(),
                ServicesConfig.CommonServices,
                NavigationManagerProvider.NavigationManager
                                           );

            logger.Info("Ok");
        }
예제 #27
0
        void ConfigureDlg()
        {
            if (StoreDocumentHelper.CheckAllPermissions(UoW.IsNew, WarehousePermissions.WriteoffEdit, Entity.WriteoffWarehouse))
            {
                FailInitialize = true;
                return;
            }

            var editing = StoreDocumentHelper.CanEditDocument(WarehousePermissions.WriteoffEdit, Entity.WriteoffWarehouse);

            repEntryEmployee.IsEditable          = textComment.Editable = editing;
            writeoffdocumentitemsview1.Sensitive = editing && (Entity.WriteoffWarehouse != null || Entity.Client != null);

            textComment.Binding.AddBinding(Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource();
            labelTimeStamp.Binding.AddBinding(Entity, e => e.DateString, w => w.LabelProp).InitializeFromSource();

            referenceCounterparty.RepresentationModel = new ViewModel.CounterpartyVM(new CounterpartyFilter(UoW));
            referenceCounterparty.Binding.AddBinding(Entity, e => e.Client, w => w.Subject).InitializeFromSource();

            ySpecCmbWarehouses.ItemsList = StoreDocumentHelper.GetRestrictedWarehousesList(UoW, WarehousePermissions.WriteoffEdit);
            ySpecCmbWarehouses.Binding.AddBinding(Entity, e => e.WriteoffWarehouse, w => w.SelectedItem).InitializeFromSource();
            ySpecCmbWarehouses.ItemSelected += (sender, e) => {
                writeoffdocumentitemsview1.Sensitive = editing && (Entity.WriteoffWarehouse != null || Entity.Client != null);
            };

            referenceDeliveryPoint.SubjectType      = typeof(DeliveryPoint);
            referenceDeliveryPoint.CanEditReference = false;
            referenceDeliveryPoint.Binding.AddBinding(Entity, e => e.DeliveryPoint, w => w.Subject).InitializeFromSource();
            repEntryEmployee.RepresentationModel = new EmployeesVM();
            repEntryEmployee.Binding.AddBinding(Entity, e => e.ResponsibleEmployee, w => w.Subject).InitializeFromSource();
            comboType.ItemsEnum = typeof(WriteoffType);
            referenceDeliveryPoint.Sensitive = referenceCounterparty.Sensitive = (UoWGeneric.Root.Client != null);
            comboType.EnumItemSelected      += (object sender, Gamma.Widgets.ItemSelectedEventArgs e) => {
                ySpecCmbWarehouses.Sensitive     = WriteoffType.warehouse.Equals(comboType.SelectedItem);
                referenceDeliveryPoint.Sensitive = WriteoffType.counterparty.Equals(comboType.SelectedItem) && UoWGeneric.Root.Client != null;
                referenceCounterparty.Sensitive  = WriteoffType.counterparty.Equals(comboType.SelectedItem);
            };
            //FIXME Списание с контрагента не реализовано. Поэтому блокирует выбор типа списания.
            comboType.Sensitive    = false;
            comboType.SelectedItem = UoWGeneric.Root.Client != null ?
                                     WriteoffType.counterparty :
                                     WriteoffType.warehouse;

            writeoffdocumentitemsview1.DocumentUoW = UoWGeneric;

            Entity.ObservableItems.ElementAdded   += (aList, aIdx) => ySpecCmbWarehouses.Sensitive = !Entity.ObservableItems.Any();
            Entity.ObservableItems.ElementRemoved += (aList, aIdx, aObject) => ySpecCmbWarehouses.Sensitive = !Entity.ObservableItems.Any();
            ySpecCmbWarehouses.Sensitive           = editing && !Entity.Items.Any();

            var permmissionValidator = new EntityExtendedPermissionValidator(PermissionExtensionSingletonStore.GetInstance(), EmployeeSingletonRepository.GetInstance());

            Entity.CanEdit = permmissionValidator.Validate(typeof(WriteoffDocument), UserSingletonRepository.GetInstance().GetCurrentUser(UoW).Id, nameof(RetroactivelyClosePermission));
            if (!Entity.CanEdit && Entity.TimeStamp.Date != DateTime.Now.Date)
            {
                ySpecCmbWarehouses.Binding.AddFuncBinding(Entity, e => e.CanEdit, w => w.Sensitive).InitializeFromSource();
                referenceCounterparty.Sensitive  = false;
                referenceDeliveryPoint.Sensitive = false;
                comboType.Sensitive                  = false;
                repEntryEmployee.Sensitive           = false;
                textComment.Sensitive                = false;
                writeoffdocumentitemsview1.Sensitive = false;

                buttonSave.Sensitive = false;
            }
            else
            {
                Entity.CanEdit = true;
            }
        }