Esempio n. 1
0
        public RequestToSupplierViewModel(
            IEntityUoWBuilder uoWBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            ISupplierPriceItemsRepository supplierPriceItemsRepository,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository) : base(uoWBuilder, unitOfWorkFactory, commonServices)
        {
            this.unitOfWorkFactory            = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
            this.commonServices               = commonServices ?? throw new ArgumentNullException(nameof(commonServices));
            this.employeeService              = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this.supplierPriceItemsRepository = supplierPriceItemsRepository ?? throw new ArgumentNullException(nameof(supplierPriceItemsRepository));
            this.nomenclatureRepository       = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            this.userRepository               = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            this.counterpartySelectorFactory  = counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            this.nomenclatureSelectorFactory  = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            CreateCommands();
            RefreshSuppliers();
            ConfigureEntityPropertyChanges();

            Entity.ObservableRequestingNomenclatureItems.ElementAdded       += (aList, aIdx) => RefreshSuppliers();
            Entity.ObservableRequestingNomenclatureItems.ListContentChanged += (aList, aIdx) => RefreshSuppliers();
            Entity.ObservableRequestingNomenclatureItems.ElementRemoved     += (aList, aIdx, aObject) => RefreshSuppliers();
            NotifyConfiguration.Instance.BatchSubscribeOnEntity <SupplierPriceItem>(PriceFromSupplierNotifyCriteria);
            NotifyConfiguration.Instance.BatchSubscribeOnEntity <NomenclaturePrice>(NomenclaturePriceNotifyCriteria);
            NotifyConfiguration.Instance.BatchSubscribeOnEntity <Counterparty>(CounterpartyNotifyCriteria);

            SetPermissions();
        }
        public PromotionalSetViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository) : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            _employeeService             = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            _nomenclatureRepository      = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            _userRepository              = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            _counterpartySelectorFactory = counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            if (!CanRead)
            {
                AbortOpening("У вас недостаточно прав для просмотра");
            }

            TabName = "Рекламные наборы";
            UoW     = uowBuilder.CreateUoW <PromotionalSet>(unitOfWorkFactory);
            CreateCommands();
        }
        public RequestsToSuppliersJournalViewModel(
            RequestsToSuppliersFilterViewModel filterViewModel,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            ISupplierPriceItemsRepository supplierPriceItemsRepository,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository
            ) : base(filterViewModel, unitOfWorkFactory, commonServices)
        {
            this.employeeService              = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this.nomenclatureRepository       = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            this.userRepository               = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            this.supplierPriceItemsRepository = supplierPriceItemsRepository ?? throw new ArgumentNullException(nameof(supplierPriceItemsRepository));
            this.unitOfWorkFactory            = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
            this.counterpartySelectorFactory  = counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            this.nomenclatureSelectorFactory  = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            TabName = "Журнал заявок поставщикам";

            var threadLoader = DataLoader as ThreadDataLoader <RequestToSupplierJournalNode>;

            threadLoader.MergeInOrderBy(x => x.Id, true);

            UpdateOnChanges(typeof(RequestToSupplier));
        }
Esempio n. 4
0
        public MovementDocumentViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            IWarehousePermissionService warehousePermissionService,
            IEmployeeService employeeService,
            IEntityExtendedPermissionValidator entityExtendedPermissionValidator,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            IOrderSelectorFactory orderSelectorFactory,
            IWarehouseRepository warehouseRepository,
            IUserRepository userRepository,
            IRDLPreviewOpener rdlPreviewOpener,
            ICommonServices commonServices,
            IStockRepository stockRepository)
            : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            this.employeeService = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this.entityExtendedPermissionValidator = entityExtendedPermissionValidator ?? throw new ArgumentNullException(nameof(entityExtendedPermissionValidator));
            this.nomenclatureSelectorFactory       = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            this.orderSelectorFactory    = orderSelectorFactory ?? throw new ArgumentNullException(nameof(orderSelectorFactory));
            this.warehouseRepository     = warehouseRepository ?? throw new ArgumentNullException(nameof(warehouseRepository));
            this.userRepository          = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            this.rdlPreviewOpener        = rdlPreviewOpener ?? throw new ArgumentNullException(nameof(rdlPreviewOpener));
            _stockRepository             = stockRepository ?? throw new ArgumentNullException(nameof(stockRepository));
            warehousePermissionValidator = warehousePermissionService.GetValidator(CommonServices.UserService.CurrentUserId);

            canEditRectroactively = entityExtendedPermissionValidator.Validate(typeof(MovementDocument), CommonServices.UserService.CurrentUserId, nameof(RetroactivelyClosePermission));
            ConfigureEntityChangingRelations();
            if (UoW.IsNew)
            {
                Entity.DocumentType = MovementDocumentType.Transportation;
                SetDefaultWarehouseFrom();
            }
            ValidationContext.ServiceContainer.AddService(typeof(IWarehouseRepository), warehouseRepository);
        }
        public PromotionalSetsJournalViewModel(
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository,
            bool hideJournalForOpenDialog   = false,
            bool hideJournalForCreateDialog = false)
            : base(unitOfWorkFactory, commonServices, hideJournalForOpenDialog, hideJournalForCreateDialog)
        {
            _unitOfWorkFactory           = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
            _employeeService             = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            _nomenclatureRepository      = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            _userRepository              = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            _counterpartySelectorFactory = counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            TabName = "Рекламные наборы";

            var threadLoader = DataLoader as ThreadDataLoader <PromotionalSetJournalNode>;

            threadLoader.MergeInOrderBy(x => x.IsArchive, false);
            threadLoader.MergeInOrderBy(x => x.Id, false);

            UpdateOnChanges(typeof(PromotionalSet));
        }
Esempio n. 6
0
        public ComplaintDiscussionsViewModel(
            Complaint entity,
            ITdiTab dialogTab,
            IUnitOfWork uow,
            IFileDialogService fileDialogService,
            IEmployeeService employeeService,
            ICommonServices commonServices,
            IEntityAutocompleteSelectorFactory employeeSelectorFactory,
            ISalesPlanJournalFactory salesPlanJournalFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            IUserRepository userRepository
            ) : base(entity, commonServices)
        {
            _employeeSelectorFactory = employeeSelectorFactory ?? throw new ArgumentNullException(nameof(employeeSelectorFactory));
            _fileDialogService       = fileDialogService ?? throw new ArgumentNullException(nameof(fileDialogService));
            _employeeService         = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            _dialogTab = dialogTab ?? throw new ArgumentNullException(nameof(dialogTab));
            _salesPlanJournalFactory     = salesPlanJournalFactory ?? throw new ArgumentNullException(nameof(salesPlanJournalFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            _userRepository = userRepository ?? throw new ArgumentNullException(nameof(userRepository));

            UoW = uow;
            CreateCommands();
            ConfigureEntityPropertyChanges();
            FillDiscussionsViewModels();
        }
Esempio n. 7
0
        public IncomingInvoiceViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            IWarehousePermissionService warehousePermissionService,
            IEmployeeService employeeService,
            IEntityExtendedPermissionValidator entityExtendedPermissionValidator,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            IOrderSelectorFactory orderSelectorFactory,
            IWarehouseRepository warehouseRepository,
            IRDLPreviewOpener rdlPreviewOpener,
            ICommonServices commonServices,
            IStockRepository stockRepository)
            : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            this.employeeService = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this.entityExtendedPermissionValidator = entityExtendedPermissionValidator ?? throw new ArgumentNullException(nameof(entityExtendedPermissionValidator));
            this.nomenclatureSelectorFactory       = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            this.orderSelectorFactory    = orderSelectorFactory ?? throw new ArgumentNullException(nameof(orderSelectorFactory));
            this.warehouseRepository     = warehouseRepository ?? throw new ArgumentNullException(nameof(warehouseRepository));
            this.rdlPreviewOpener        = rdlPreviewOpener ?? throw new ArgumentNullException(nameof(rdlPreviewOpener));
            _stockRepository             = stockRepository ?? throw new ArgumentNullException(nameof(stockRepository));
            warehousePermissionValidator = warehousePermissionService.GetValidator(CommonServices.UserService.CurrentUserId);

            canEditRectroactively = entityExtendedPermissionValidator.Validate(typeof(MovementDocument), CommonServices.UserService.CurrentUserId, nameof(RetroactivelyClosePermission));
            ConfigureEntityChangingRelations();

            ValidationContext.ServiceContainer.AddService(typeof(IWarehouseRepository), warehouseRepository);
            UserHasOnlyAccessToWarehouseAndComplaints =
                CommonServices.CurrentPermissionService.ValidatePresetPermission("user_have_access_only_to_warehouse_and_complaints") &&
                !CurrentUser.IsAdmin;
        }
        public NomenclatureViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory uowFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository) : base(uowBuilder, uowFactory, commonServices
                                                   )
        {
            if (nomenclatureSelectorFactory is null)
            {
                throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            }

            _employeeService            = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            _nomenclatureRepository     = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            _userRepository             = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            NomenclatureSelectorFactory = nomenclatureSelectorFactory.GetDefaultNomenclatureSelectorFactory();
            CounterpartySelectorFactory =
                (counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory)))
                .CreateCounterpartyAutocompleteSelectorFactory();
            NomenclaturePurchasePricesViewModel = new NomenclaturePurchasePricesViewModel(Entity, this, UoW, CommonServices);

            ConfigureEntityPropertyChanges();
            ConfigureValidationContext();
            SetPermissions();
        }
Esempio n. 9
0
        public AdditionalLoadingSettingsViewModel(
            ILifetimeScope scope,
            IUnitOfWorkFactory unitOfWorkFactory,
            INavigationManager navigation,
            ICommonServices commonServices,
            IDeliveryRulesParametersProvider deliveryRulesParametersProvider)
            : base(unitOfWorkFactory, navigation)
        {
            if (scope == null)
            {
                throw new ArgumentNullException(nameof(scope));
            }
            if (commonServices == null)
            {
                throw new ArgumentNullException(nameof(commonServices));
            }
            _deliveryRulesParametersProvider = deliveryRulesParametersProvider ??
                                               throw new ArgumentNullException(nameof(deliveryRulesParametersProvider));
            _interactiveService          = commonServices.InteractiveService;
            _nomenclatureSelectorFactory = scope.Resolve <INomenclatureJournalFactory>();

            CanEdit = commonServices.CurrentPermissionService
                      .ValidateEntityPermission(typeof(AdditionalLoadingNomenclatureDistribution)).CanUpdate;

            BottlesCount            = _deliveryRulesParametersProvider.BottlesCountForFlyer;
            FastDeliveryMaxDistance = _deliveryRulesParametersProvider.MaxDistanceToLatestTrackPointKm;
            FlyerAdditionEnabled    = _deliveryRulesParametersProvider.AdditionalLoadingFlyerAdditionEnabled;

            Initialize();
        }
        public CreateComplaintViewModel(Order order,
                                        IEntityUoWBuilder uowBuilder,
                                        IUnitOfWorkFactory unitOfWorkFactory,
                                        IEmployeeService employeeService,
                                        ISubdivisionRepository subdivisionRepository,
                                        ICommonServices commonServices,
                                        INomenclatureRepository nomenclatureRepository,
                                        IUserRepository userRepository,
                                        IFileDialogService filePickerService,
                                        IOrderSelectorFactory orderSelectorFactory,
                                        IEmployeeJournalFactory employeeJournalFactory,
                                        ICounterpartyJournalFactory counterpartyJournalFactory,
                                        IDeliveryPointJournalFactory deliveryPointJournalFactory,
                                        ISubdivisionJournalFactory subdivisionJournalFactory,
                                        IGtkTabsOpener gtkDialogsOpener,
                                        IUndeliveredOrdersJournalOpener undeliveredOrdersJournalOpener,
                                        INomenclatureJournalFactory nomenclatureSelector,
                                        IUndeliveredOrdersRepository undeliveredOrdersRepository,
                                        string phone = null) : this(uowBuilder, unitOfWorkFactory, employeeService, subdivisionRepository,
                                                                    commonServices, nomenclatureRepository, userRepository, filePickerService, orderSelectorFactory,
                                                                    employeeJournalFactory, counterpartyJournalFactory, deliveryPointJournalFactory, subdivisionJournalFactory, gtkDialogsOpener,
                                                                    undeliveredOrdersJournalOpener, nomenclatureSelector, undeliveredOrdersRepository, phone)
        {
            var currentOrder = UoW.GetById <Order>(order.Id);

            Entity.Order        = currentOrder;
            Entity.Counterparty = currentOrder.Client;
            Entity.Phone        = phone;
        }
        public SupplierPricesWidgetViewModel(Counterparty entity,
                                             IUnitOfWork uow,
                                             ITdiTab dialogTab,
                                             ICommonServices commonServices,
                                             IEmployeeService employeeService,
                                             ICounterpartyJournalFactory counterpartySelectorFactory,
                                             INomenclatureJournalFactory nomenclatureSelectorFactory,
                                             INomenclatureRepository nomenclatureRepository,
                                             IUserRepository userRepository)
            : base(entity, commonServices)
        {
            this.dialogTab                   = dialogTab ?? throw new ArgumentNullException(nameof(dialogTab));
            UoW                              = uow ?? throw new ArgumentNullException(nameof(uow));
            this.employeeService             = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this.nomenclatureRepository      = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            this.userRepository              = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            this.counterpartySelectorFactory = counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            _nomenclatureSelectorFactory     = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            CreateCommands();
            RefreshPrices();

            Search           = new SearchViewModel();
            Search.OnSearch += (sender, e) => RefreshPrices();
            Entity.ObservableSuplierPriceItems.ElementAdded   += (aList, aIdx) => RefreshPrices();
            Entity.ObservableSuplierPriceItems.ElementRemoved += (aList, aIdx, aObject) => RefreshPrices();
        }
Esempio n. 12
0
        public NomenclaturesJournalViewModel(
            NomenclatureFilterViewModel filterViewModel,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository
            ) : base(filterViewModel, unitOfWorkFactory, commonServices)
        {
            this.employeeService             = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this.nomenclatureSelectorFactory =
                nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            this.counterpartySelectorFactory =
                counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            this.nomenclatureRepository = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            this.userRepository         = userRepository ?? throw new ArgumentNullException(nameof(userRepository));

            TabName = "Журнал ТМЦ";
            SetOrder(x => x.Name);
            UpdateOnChanges(
                typeof(Nomenclature),
                typeof(MeasurementUnits),
                typeof(WarehouseMovementOperation),
                typeof(VodovozOrder),
                typeof(OrderItem)
                );
        }
Esempio n. 13
0
 public AdditionalLoadingItemsViewModel(IUnitOfWork uow, ITdiTab master, INomenclatureJournalFactory nomenclatureSelectorFactory,
                                        IInteractiveService interactiveService)
 {
     _uow    = uow ?? throw new ArgumentNullException(nameof(uow));
     _master = master ?? throw new ArgumentNullException(nameof(master));
     _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
     _interactiveService          = interactiveService ?? throw new ArgumentNullException(nameof(interactiveService));
 }
        public FixedPricesViewModel(IUnitOfWork uow, IFixedPricesModel fixedPricesModel, INomenclatureJournalFactory nomenclatureSelectorFactory, ITdiTab parentTab)
        {
            UoW = uow ?? throw new ArgumentNullException(nameof(uow));
            this.fixedPricesModel            = fixedPricesModel ?? throw new ArgumentNullException(nameof(fixedPricesModel));
            this.nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            this.parentTab = parentTab ?? throw new ArgumentNullException(nameof(parentTab));

            fixedPricesModel.FixedPricesUpdated += (sender, args) => UpdateFixedPrices();
            UpdateFixedPrices();
        }
        public CreateComplaintViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            IEmployeeService employeeService,
            ISubdivisionRepository subdivisionRepository,
            ICommonServices commonServices,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository,
            IFileDialogService fileDialogService,
            IOrderSelectorFactory orderSelectorFactory,
            IEmployeeJournalFactory employeeJournalFactory,
            ICounterpartyJournalFactory counterpartyJournalFactory,
            IDeliveryPointJournalFactory deliveryPointJournalFactory,
            ISubdivisionJournalFactory subdivisionJournalFactory,
            IGtkTabsOpener gtkDialogsOpener,
            IUndeliveredOrdersJournalOpener undeliveredOrdersJournalOpener,
            INomenclatureJournalFactory nomenclatureSelector,
            IUndeliveredOrdersRepository undeliveredOrdersRepository,
            string phone = null
            ) : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            EmployeeService                = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            SubdivisionRepository          = subdivisionRepository ?? throw new ArgumentNullException(nameof(subdivisionRepository));
            NomenclatureRepository         = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            UserRepository                 = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            FileDialogService              = fileDialogService ?? throw new ArgumentNullException(nameof(fileDialogService));
            OrderSelectorFactory           = orderSelectorFactory ?? throw new ArgumentNullException(nameof(orderSelectorFactory));
            EmployeeJournalFactory         = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory));
            _employeeSelectorFactory       = employeeJournalFactory.CreateEmployeeAutocompleteSelectorFactory();
            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));
            NomenclatureSelector        = nomenclatureSelector ?? throw new ArgumentNullException(nameof(nomenclatureSelector));
            UndeliveredOrdersRepository =
                undeliveredOrdersRepository ?? throw new ArgumentNullException(nameof(undeliveredOrdersRepository));

            Entity.ComplaintType = ComplaintType.Client;
            Entity.SetStatus(ComplaintStatuses.Checking);
            ConfigureEntityPropertyChanges();
            Entity.Phone = phone;

            _complaintKinds = complaintKindSource = UoW.GetAll <ComplaintKind>().Where(k => !k.IsArchive).ToList();

            UserHasOnlyAccessToWarehouseAndComplaints =
                ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("user_have_access_only_to_warehouse_and_complaints") &&
                !ServicesConfig.CommonServices.UserService.GetCurrentUser(UoW).IsAdmin;

            TabName = "Новая клиентская рекламация";
        }
        public FuelDocumentsJournalViewModel(
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IEmployeeService employeeService,
            ISubdivisionRepository subdivisionRepository,
            IFuelRepository fuelRepository,
            ICounterpartyJournalFactory counterpartyJournalFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            IEmployeeJournalFactory employeeJournalFactory,
            ISubdivisionJournalFactory subdivisionJournalFactory,
            ICarJournalFactory carJournalFactory,
            IReportViewOpener reportViewOpener,
            IExpenseCategorySelectorFactory expenseCategorySelectorFactory
            ) :
            base(unitOfWorkFactory, commonServices)
        {
            this._commonServices              = commonServices ?? throw new ArgumentNullException(nameof(commonServices));
            this._employeeService             = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            this._subdivisionRepository       = subdivisionRepository ?? throw new ArgumentNullException(nameof(subdivisionRepository));
            this._fuelRepository              = fuelRepository ?? throw new ArgumentNullException(nameof(fuelRepository));
            this._counterpartyJournalFactory  = counterpartyJournalFactory ?? throw new ArgumentNullException(nameof(counterpartyJournalFactory));
            this._nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            this._employeeJournalFactory      = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory));
            _subdivisionJournalFactory        = subdivisionJournalFactory ?? throw new ArgumentNullException(nameof(subdivisionJournalFactory));
            this._carJournalFactory           = carJournalFactory ?? throw new ArgumentNullException(nameof(carJournalFactory));
            this._reportViewOpener            = reportViewOpener ?? throw new ArgumentNullException(nameof(reportViewOpener));
            _expenseCategorySelectorFactory   =
                expenseCategorySelectorFactory ?? throw new ArgumentNullException(nameof(expenseCategorySelectorFactory));

            TabName = "Журнал учета топлива";

            var loader = new ThreadDataLoader <FuelDocumentJournalNode>(unitOfWorkFactory);

            loader.MergeInOrderBy(x => x.CreationDate, true);
            DataLoader = loader;

            RegisterIncomeInvoice();
            RegisterTransferDocument();
            RegisterWriteoffDocument();

            FinishJournalConfiguration();

            UpdateOnChanges(
                typeof(FuelIncomeInvoice),
                typeof(FuelIncomeInvoiceItem),
                typeof(FuelTransferDocument),
                typeof(FuelWriteoffDocument),
                typeof(FuelWriteoffDocumentItem)
                );
        }
Esempio n. 17
0
 public SubdivisionsJournalViewModel(
     SubdivisionFilterViewModel filterViewModel,
     IUnitOfWorkFactory unitOfWorkFactory,
     ICommonServices commonServices,
     IEntityAutocompleteSelectorFactory employeeSelectorFactory,
     ISalesPlanJournalFactory salesPlanJournalFactory,
     INomenclatureJournalFactory nomenclatureSelectorFactory
     ) : base(filterViewModel, unitOfWorkFactory, commonServices)
 {
     this.employeeSelectorFactory = employeeSelectorFactory ?? throw new ArgumentNullException(nameof(employeeSelectorFactory));
     this.unitOfWorkFactory       = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
     _salesPlanJournalFactory     = salesPlanJournalFactory ?? throw new ArgumentNullException(nameof(salesPlanJournalFactory));
     _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
     TabName = "Выбор подразделения";
 }
Esempio n. 18
0
        public SalesPlanJournalViewModel(IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices,
                                         INomenclatureJournalFactory nomenclatureSelectorFactory) : base(unitOfWorkFactory, commonServices)
        {
            this.unitOfWorkFactory       = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            TabName = "Журнал планов продаж";

            var threadLoader = DataLoader as ThreadDataLoader <SalesPlanJournalNode>;

            threadLoader.MergeInOrderBy(x => x.IsArchive, false);
            threadLoader.MergeInOrderBy(x => x.Id, false);

            UpdateOnChanges(typeof(SalesPlan));
        }
        public ComplaintKindJournalViewModel(ComplaintKindJournalFilterViewModel filterViewModel, IUnitOfWorkFactory unitOfWorkFactory,
                                             ICommonServices commonServices, IEntityAutocompleteSelectorFactory employeeSelectorFactory, ISalesPlanJournalFactory salesPlanJournalFactory,
                                             INomenclatureJournalFactory nomenclatureSelectorFactory)
            : base(filterViewModel, unitOfWorkFactory, commonServices)
        {
            _employeeSelectorFactory     = employeeSelectorFactory ?? throw new ArgumentNullException(nameof(employeeSelectorFactory));
            _salesPlanJournalFactory     = salesPlanJournalFactory ?? throw new ArgumentNullException(nameof(salesPlanJournalFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            TabName = "Виды рекламаций";

            UpdateOnChanges(
                typeof(ComplaintKind),
                typeof(ComplaintObject)
                );
        }
Esempio n. 20
0
        public ComplaintKindViewModel(IEntityUoWBuilder uowBuilder, IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices,
                                      IEntityAutocompleteSelectorFactory employeeSelectorFactory, Action updateJournalAction, ISalesPlanJournalFactory salesPlanJournalFactory,
                                      INomenclatureJournalFactory nomenclatureSelectorFactory) : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            _employeeSelectorFactory     = employeeSelectorFactory ?? throw new ArgumentNullException(nameof(employeeSelectorFactory));
            _unitOfWorkFactory           = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
            _commonServices              = commonServices ?? throw new ArgumentNullException(nameof(commonServices));
            _updateJournalAction         = updateJournalAction ?? throw new ArgumentNullException(nameof(updateJournalAction));
            _salesPlanJournalFactory     = salesPlanJournalFactory ?? throw new ArgumentNullException(nameof(salesPlanJournalFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            ComplaintObjects     = UoW.Session.QueryOver <ComplaintObject>().List();
            _subdivisionsOnStart = new List <Subdivision>(Entity.Subdivisions);

            TabName = "Виды рекламаций";
        }
        public DiscountReasonJournalViewModel(
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IDiscountReasonRepository discountReasonRepository,
            IProductGroupJournalFactory productGroupJournalFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            bool hideJournalForOpenDialog   = false,
            bool hideJournalForCreateDialog = false)
            : base(unitOfWorkFactory, commonServices, hideJournalForOpenDialog, hideJournalForCreateDialog)
        {
            _discountReasonRepository    = discountReasonRepository ?? throw new ArgumentNullException(nameof(discountReasonRepository));
            _productGroupJournalFactory  = productGroupJournalFactory ?? throw new ArgumentNullException(nameof(productGroupJournalFactory));
            _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            TabName = "Журнал оснований для скидки";

            UpdateOnChanges(typeof(DiscountReason));
        }
Esempio n. 22
0
        public DiscountReasonViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IDiscountReasonRepository discountReasonRepository,
            IProductGroupJournalFactory productGroupJournalFactory,
            INomenclatureJournalFactory nomenclatureSelectorFactory)
            : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            _discountReasonRepository   = discountReasonRepository ?? throw new ArgumentNullException(nameof(discountReasonRepository));
            _productGroupJournalFactory = productGroupJournalFactory ?? throw new ArgumentNullException(nameof(productGroupJournalFactory));
            _nomenclatureAutocompleteSelectorFactory =
                (nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory)))
                .GetDefaultNomenclatureSelectorFactory();
            TabName = UoWGeneric.IsNew ? "Новое основание для скидки" : $"Основание для скидки \"{Entity.Name}\"";

            InitializeNomenclatureCategoriesList();
        }
Esempio n. 23
0
        public FlyersJournalViewModel(
            IUnitOfWorkFactory uowFactory,
            ICommonServices commonServices,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            IFlyerRepository flyerRepository,
            bool hideJournalForOpenDialog   = false,
            bool hideJournalForCreateDialog = false
            ) : base(uowFactory, commonServices, hideJournalForOpenDialog, hideJournalForCreateDialog)
        {
            _nomenclatureSelectorFactory =
                nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            _flyerRepository = flyerRepository ?? throw new ArgumentNullException(nameof(flyerRepository));

            TabName = "Журнал рекламных листовок";

            UpdateOnChanges(
                typeof(Flyer),
                typeof(FlyerActionTime));
        }
 public SubdivisionViewModel(
     IEntityUoWBuilder uoWBuilder,
     IUnitOfWorkFactory unitOfWorkFactory,
     ICommonServices commonServices,
     IEntityAutocompleteSelectorFactory employeeSelectorFactory,
     IPermissionRepository permissionRepository,
     ISalesPlanJournalFactory salesPlanJournalFactory,
     INomenclatureJournalFactory nomenclatureSelectorFactory,
     ISubdivisionRepository subdivisionRepository
     ) : base(uoWBuilder, unitOfWorkFactory, commonServices)
 {
     SubdivisionRepository         = subdivisionRepository ?? throw new ArgumentNullException(nameof(subdivisionRepository));
     PresetSubdivisionPermissionVM = new PresetSubdivisionPermissionsViewModel(UoW, permissionRepository, Entity);
     EmployeeSelectorFactory       = employeeSelectorFactory ?? throw new ArgumentNullException(nameof(employeeSelectorFactory));
     SalesPlanSelectorFactory      = (salesPlanJournalFactory ?? throw new ArgumentNullException(nameof(salesPlanJournalFactory)))
                                     .CreateSalesPlanAutocompleteSelectorFactory(nomenclatureSelectorFactory);
     ConfigureEntityChangingRelations();
     CreateCommands();
 }
        public FlyerViewModel(
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            IFlyerRepository flyerRepository) : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            FlyerAutocompleteSelectorFactory =
                (nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory)))
                .CreateNomenclatureForFlyerJournalFactory();
            _flyerRepository = flyerRepository ?? throw new ArgumentNullException(nameof(flyerRepository));

            if (!uowBuilder.IsNewEntity)
            {
                TabName = $"{Entity.FlyerNomenclature.Name}";
            }

            SetCurrentFlyerActionTime();
            AddServiceToValidationContext();
        }
        public FuelIncomeInvoiceViewModel
        (
            IEntityUoWBuilder uowBuilder,
            IUnitOfWorkFactory unitOfWorkFactory,
            IEmployeeService employeeService,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            ISubdivisionRepository subdivisionRepository,
            IFuelRepository fuelRepository,
            ICounterpartyJournalFactory counterpartyJournalFactory,
            ICommonServices commonServices
        ) : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            this.employeeService             = employeeService;
            this.nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
            this.subdivisionRepository       = subdivisionRepository ?? throw new ArgumentNullException(nameof(subdivisionRepository));
            this.fuelRepository             = fuelRepository ?? throw new ArgumentNullException(nameof(fuelRepository));
            this.counterpartyJournalFactory = counterpartyJournalFactory ?? throw new ArgumentNullException(nameof(counterpartyJournalFactory));
            TabName = "Входящая накладная по топливу";

            if (CurrentEmployee == null)
            {
                AbortOpening("К вашему пользователю не привязан сотрудник, невозможно открыть документ");
            }

            if (uowBuilder.IsNewEntity)
            {
                Entity.СreationTime = DateTime.Now;
                Entity.Author       = CurrentEmployee;
            }

            FuelBalanceViewModel = new FuelBalanceViewModel(subdivisionRepository, fuelRepository);

            CreateCommands();
            ConfigEntityUpdateSubscribes();
            ConfigureEntityPropertyChanges();
            UpdateCashSubdivisions();
            UpdateBalanceCache();
            ValidationContext.ServiceContainer.AddService(typeof(IFuelRepository), fuelRepository);

            ConfigureEntries();
        }
 public SalesPlanViewModel(IEntityUoWBuilder uoWBuilder, IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices, INomenclatureJournalFactory nomenclatureSelectorFactory) : base(uoWBuilder, unitOfWorkFactory, commonServices)
 {
     _nomenclatureSelectorFactory = nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));
     _unitOfWorkFactory           = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
     _commonServices = commonServices ?? throw new ArgumentNullException(nameof(commonServices));
 }
        public DeliveryPointViewModel(
            IUserRepository userRepository,
            IGtkTabsOpener gtkTabsOpener,
            IPhoneRepository phoneRepository,
            IContactsParameters contactsParameters,
            ICitiesDataLoader citiesDataLoader,
            IStreetsDataLoader streetsDataLoader,
            IHousesDataLoader housesDataLoader,
            INomenclatureJournalFactory nomenclatureSelectorFactory,
            NomenclatureFixedPriceController nomenclatureFixedPriceController,
            IDeliveryPointRepository deliveryPointRepository,
            IDeliveryScheduleSelectorFactory deliveryScheduleSelectorFactory,
            IEntityUoWBuilder uowBuilder, IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices,
            IRoboAtsCounterpartyJournalFactory roboAtsCounterpartyJournalFactory,
            Domain.Client.Counterparty client = null)
            : base(uowBuilder, unitOfWorkFactory, commonServices)
        {
            if (client != null && uowBuilder.IsNewEntity)
            {
                Entity.Counterparty = client;
            }
            else if (client == null && uowBuilder.IsNewEntity)
            {
                throw new ArgumentNullException(nameof(client), "Нельзя создать точку доставки без указания клиента");
            }

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

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

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

            _deliveryPointRepository = deliveryPointRepository ?? throw new ArgumentNullException(nameof(deliveryPointRepository));

            _gtkTabsOpener  = gtkTabsOpener ?? throw new ArgumentNullException(nameof(gtkTabsOpener));
            _userRepository = userRepository ?? throw new ArgumentNullException(nameof(userRepository));

            NomenclatureSelectorFactory =
                nomenclatureSelectorFactory ?? throw new ArgumentNullException(nameof(nomenclatureSelectorFactory));

            _fixedPricesModel = new DeliveryPointFixedPricesModel(UoW, Entity, nomenclatureFixedPriceController);
            PhonesViewModel   = new PhonesViewModel(phoneRepository, UoW, contactsParameters, roboAtsCounterpartyJournalFactory, CommonServices)
            {
                PhonesList    = Entity.ObservablePhones,
                DeliveryPoint = Entity,
                ReadOnly      = !CanEdit
            };

            CitiesDataLoader  = citiesDataLoader ?? throw new ArgumentNullException(nameof(citiesDataLoader));
            StreetsDataLoader = streetsDataLoader ?? throw new ArgumentNullException(nameof(streetsDataLoader));
            HousesDataLoader  = housesDataLoader ?? throw new ArgumentNullException(nameof(housesDataLoader));

            CanArchiveDeliveryPoint =
                commonServices.CurrentPermissionService.ValidatePresetPermission("can_arc_counterparty_and_deliverypoint");
            CanSetFreeDelivery            = commonServices.CurrentPermissionService.ValidatePresetPermission("can_set_free_delivery");
            CanEditOrderLimits            = commonServices.CurrentPermissionService.ValidatePresetPermission("user_can_edit_orders_limits");
            CanEditNomenclatureFixedPrice =
                commonServices.CurrentPermissionService.ValidatePresetPermission("can_edit_delivery_point_fixed_prices");

            DeliveryPointCategories =
                deliveryPointRepository?.GetActiveDeliveryPointCategories(UoW)
                ?? throw new ArgumentNullException(nameof(deliveryPointRepository));
            DeliveryScheduleSelectorFactory =
                deliveryScheduleSelectorFactory?.CreateDeliveryScheduleAutocompleteSelectorFactory()
                ?? throw new ArgumentNullException(nameof(deliveryScheduleSelectorFactory));

            _roboAtsCounterpartyJournalFactory = roboAtsCounterpartyJournalFactory ?? throw new ArgumentNullException(nameof(roboAtsCounterpartyJournalFactory));

            Entity.PropertyChanged += (sender, e) =>
            {
                switch (e.PropertyName)
                {                 // от этого события зависит панель цен доставки, которые в свою очередь зависят от района и, возможно, фиксов
                case nameof(Entity.District):
                    CurrentObjectChanged?.Invoke(this, new CurrentObjectChangedArgs(Entity));
                    break;
                }
            };
        }
 private void CreateNewDependencies()
 {
     _employeeJournalFactory      = new EmployeeJournalFactory();
     _salesPlanJournalFactory     = new SalesPlanJournalFactory();
     _nomenclatureSelectorFactory = new NomenclatureJournalFactory();
 }
Esempio n. 30
0
        public ComplaintsJournalViewModel(
            IUnitOfWorkFactory unitOfWorkFactory,
            ICommonServices commonServices,
            IUndeliveredOrdersJournalOpener undeliveredOrdersJournalOpener,
            IEmployeeService employeeService,
            ICounterpartyJournalFactory counterpartySelectorFactory,
            IRouteListItemRepository routeListItemRepository,
            ISubdivisionParametersProvider subdivisionParametersProvider,
            ComplaintFilterViewModel filterViewModel,
            IFileDialogService fileDialogService,
            ISubdivisionRepository subdivisionRepository,
            IReportViewOpener reportViewOpener,
            IGtkTabsOpener gtkDialogsOpener,
            INomenclatureRepository nomenclatureRepository,
            IUserRepository userRepository,
            IOrderSelectorFactory orderSelectorFactory,
            IEmployeeJournalFactory employeeJournalFactory,
            ICounterpartyJournalFactory counterpartyJournalFactory,
            IDeliveryPointJournalFactory deliveryPointJournalFactory,
            ISubdivisionJournalFactory subdivisionJournalFactory,
            ISalesPlanJournalFactory salesPlanJournalFactory,
            INomenclatureJournalFactory nomenclatureSelector,
            IEmployeeSettings employeeSettings,
            IUndeliveredOrdersRepository undeliveredOrdersRepository) : base(filterViewModel, unitOfWorkFactory, commonServices)
        {
            this._unitOfWorkFactory         = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory));
            this._commonServices            = commonServices ?? throw new ArgumentNullException(nameof(commonServices));
            _undeliveredOrdersJournalOpener = undeliveredOrdersJournalOpener ?? throw new ArgumentNullException(nameof(undeliveredOrdersJournalOpener));
            _employeeService               = employeeService ?? throw new ArgumentNullException(nameof(employeeService));
            _counterpartySelectorFactory   = counterpartySelectorFactory ?? throw new ArgumentNullException(nameof(counterpartySelectorFactory));
            _fileDialogService             = fileDialogService ?? throw new ArgumentNullException(nameof(fileDialogService));
            _subdivisionRepository         = subdivisionRepository ?? throw new ArgumentNullException(nameof(subdivisionRepository));
            _routeListItemRepository       = routeListItemRepository ?? throw new ArgumentNullException(nameof(routeListItemRepository));
            _subdivisionParametersProvider = subdivisionParametersProvider ?? throw new ArgumentNullException(nameof(subdivisionParametersProvider));
            _reportViewOpener              = reportViewOpener ?? throw new ArgumentNullException(nameof(reportViewOpener));
            _gtkDlgOpener                = gtkDialogsOpener ?? throw new ArgumentNullException(nameof(gtkDialogsOpener));
            _nomenclatureRepository      = nomenclatureRepository ?? throw new ArgumentNullException(nameof(nomenclatureRepository));
            _userRepository              = userRepository ?? throw new ArgumentNullException(nameof(userRepository));
            _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));
            _salesPlanJournalFactory     = salesPlanJournalFactory ?? throw new ArgumentNullException(nameof(salesPlanJournalFactory));
            _nomenclatureSelector        = nomenclatureSelector ?? throw new ArgumentNullException(nameof(nomenclatureSelector));
            _employeeSettings            = employeeSettings ?? throw new ArgumentNullException(nameof(employeeSettings));
            _undeliveredOrdersRepository =
                undeliveredOrdersRepository ?? throw new ArgumentNullException(nameof(undeliveredOrdersRepository));

            TabName = "Журнал рекламаций";

            RegisterComplaints();

            var threadLoader = DataLoader as ThreadDataLoader <ComplaintJournalNode>;

            threadLoader.MergeInOrderBy(x => x.Id, true);

            FinishJournalConfiguration();

            FilterViewModel.SubdivisionParametersProvider = subdivisionParametersProvider;
            FilterViewModel.EmployeeService = employeeService;

            var currentUserSettings        = userRepository.GetUserSettings(UoW, commonServices.UserService.CurrentUserId);
            var defaultSubdivision         = currentUserSettings.DefaultSubdivision;
            var currentEmployeeSubdivision = employeeService.GetEmployeeForUser(UoW, commonServices.UserService.CurrentUserId).Subdivision;

            FilterViewModel.CurrentUserSubdivision = currentEmployeeSubdivision;

            if (FilterViewModel.SubdivisionParametersProvider.GetOkkId() == currentEmployeeSubdivision.Id)
            {
                FilterViewModel.ComplaintStatus = ComplaintStatuses.Checking;
            }
            else
            {
                if (currentUserSettings.UseEmployeeSubdivision)
                {
                    FilterViewModel.Subdivision = currentEmployeeSubdivision;
                }
                else
                {
                    FilterViewModel.Subdivision = defaultSubdivision;
                }

                FilterViewModel.ComplaintStatus = currentUserSettings.DefaultComplaintStatus;
            }

            UpdateOnChanges(
                typeof(Complaint),
                typeof(ComplaintGuiltyItem),
                typeof(ComplaintResultOfCounterparty),
                typeof(ComplaintResultOfEmployees),
                typeof(Subdivision),
                typeof(ComplaintDiscussion),
                typeof(DeliveryPoint),
                typeof(Fine),
                typeof(Order),
                typeof(RouteList),
                typeof(RouteListItem),
                typeof(ComplaintObject)
                );
            this.DataLoader.ItemsListUpdated += (sender, e) => CurrentObjectChanged?.Invoke(this, new CurrentObjectChangedArgs(null));

            DataLoader.PostLoadProcessingFunc = BeforeItemsUpdated;
        }