private void CreateAddWriteoffItemCommand() { AddWriteoffItemCommand = new DelegateCommand( () => { var fuelTypeJournalViewModel = new SimpleEntityJournalViewModel <FuelType, FuelTypeViewModel>(x => x.Name, () => new FuelTypeViewModel(EntityUoWBuilder.ForCreate(), unitOfWorkFactory, commonServices), (node) => new FuelTypeViewModel(EntityUoWBuilder.ForOpen(node.Id), unitOfWorkFactory, commonServices), QS.DomainModel.UoW.UnitOfWorkFactory.GetDefaultFactory, commonServices ); fuelTypeJournalViewModel.SetRestriction(() => { return(Restrictions.Not(Restrictions.In(Projections.Id(), Entity.ObservableFuelWriteoffDocumentItems.Select(x => x.FuelType.Id).ToArray()))); }); fuelTypeJournalViewModel.SelectionMode = JournalSelectionMode.Single; fuelTypeJournalViewModel.OnEntitySelectedResult += (sender, e) => { var node = e.SelectedNodes.FirstOrDefault(); if (node == null) { return; } Entity.AddNewWriteoffItem(UoW.GetById <FuelType>(node.Id)); }; TabParent.AddSlaveTab(this, fuelTypeJournalViewModel); }, () => CanEdit ); AddWriteoffItemCommand.CanExecuteChangedWith(this, x => CanEdit); }
public IEntityAutocompleteSelectorFactory CreateSimpleExpenseCategoryAutocompleteSelectorFactory() { var expenceCategoryfilterViewModel = new ExpenseCategoryJournalFilterViewModel(); expenceCategoryfilterViewModel.ExcludedIds = _excludedIds; expenceCategoryfilterViewModel.HidenByDefault = true; var employeeFilter = new EmployeeFilterViewModel { Status = EmployeeStatus.IsWorking }; var employeeJournalFactory = new EmployeeJournalFactory(employeeFilter); var subdivisionJournalFactory = new SubdivisionJournalFactory(); var expenseFactory = new ExpenseCategorySelectorFactory(); return(new SimpleEntitySelectorFactory <ExpenseCategory, ExpenseCategoryViewModel>(() => { var journal = new SimpleEntityJournalViewModel <ExpenseCategory, ExpenseCategoryViewModel>( x => x.Name, () => new ExpenseCategoryViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, employeeJournalFactory, subdivisionJournalFactory, expenseFactory ), node => new ExpenseCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, employeeJournalFactory, subdivisionJournalFactory, expenseFactory ), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ); journal.SelectionMode = JournalSelectionMode.Single; journal.SetFilter(expenceCategoryfilterViewModel, filter => { if (filter.ShowArchive) { return Restrictions.Not(Restrictions.In("Id", filter.ExcludedIds.ToArray())); } return Restrictions.Conjunction() .Add(Restrictions.Not(Restrictions.In("Id", filter.ExcludedIds.ToArray()))) .Add(Restrictions.Eq( Projections.Property <ExpenseCategory>(c => c.IsArchive), filter.ShowArchive)); }); return journal; })); }
public IEntityAutocompleteSelectorFactory CreateDeliveryScheduleAutocompleteSelectorFactory() { return(new SimpleEntitySelectorFactory <DeliverySchedule, DeliveryScheduleDlg>(() => { var journal = new SimpleEntityJournalViewModel <DeliverySchedule, DeliveryScheduleDlg>( ds => ds.Name, () => new DeliveryScheduleDlg(), (node) => new DeliveryScheduleDlg(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices); journal.SelectionMode = JournalSelectionMode.Single; return journal; })); }
private void CreateAddWriteoffItemCommand() { AddWriteoffItemCommand = new DelegateCommand( () => { var fuelTypeJournalViewModel = new SimpleEntityJournalViewModel <FuelType, FuelTypeViewModel>(x => x.Name, () => new FuelTypeViewModel(EntityUoWBuilder.ForCreate(), unitOfWorkFactory, commonServices), (node) => new FuelTypeViewModel(EntityUoWBuilder.ForOpen(node.Id), unitOfWorkFactory, commonServices), QS.DomainModel.UoW.UnitOfWorkFactory.GetDefaultFactory, commonServices ); fuelTypeJournalViewModel.SetRestriction(() => { return(Restrictions.Not(Restrictions.In(Projections.Id(), Entity.ObservableFuelWriteoffDocumentItems.Select(x => x.FuelType.Id).ToArray()))); }); fuelTypeJournalViewModel.SelectionMode = JournalSelectionMode.Single; fuelTypeJournalViewModel.OnEntitySelectedResult += (sender, e) => { var node = e.SelectedNodes.FirstOrDefault(); if (node == null) { return; } Entity.AddNewWriteoffItem(UoW.GetById <FuelType>(node.Id)); }; var fuelTypePermissionSet = commonServices.PermissionService.ValidateUserPermission(typeof(FuelType), commonServices.UserService.CurrentUserId); if (fuelTypePermissionSet.CanRead && !fuelTypePermissionSet.CanUpdate) { var viewAction = new JournalAction("Просмотр", (selected) => selected.Any(), (selected) => true, (selected) => { var tab = fuelTypeJournalViewModel.GetTabToOpen(typeof(FuelType), selected.First().GetId()); fuelTypeJournalViewModel.TabParent.AddTab(tab, fuelTypeJournalViewModel); } ); (fuelTypeJournalViewModel.NodeActions as IList <IJournalAction>)?.Add(viewAction); } TabParent.AddSlaveTab(this, fuelTypeJournalViewModel); }, () => CanEdit ); AddWriteoffItemCommand.CanExecuteChangedWith(this, x => CanEdit); }
public IEntityAutocompleteSelectorFactory CreateOrganizationAutocompleteSelectorFactory() { return(new SimpleEntitySelectorFactory <Organization, OrganizationDlg>( () => { var organisationJournal = new SimpleEntityJournalViewModel <Organization, OrganizationDlg>( x => x.Name, () => new OrganizationDlg(), node => new OrganizationDlg(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ) { SelectionMode = JournalSelectionMode.Single }; return organisationJournal; })); }
public IEntityAutocompleteSelectorFactory CreateSimpleIncomeCategoryAutocompleteSelectorFactory() { var commonServices = ServicesConfig.CommonServices; var employeeJournalFactory = new EmployeeJournalFactory(); var subdivisionJournalFactory = new SubdivisionJournalFactory(); var incomeFactory = new IncomeCategorySelectorFactory(); var incomeCategoryAutocompleteSelectorFactory = new SimpleEntitySelectorFactory <IncomeCategory, IncomeCategoryViewModel>( () => { var incomeCategoryJournalViewModel = new SimpleEntityJournalViewModel <IncomeCategory, IncomeCategoryViewModel>( x => x.Name, () => new IncomeCategoryViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, commonServices, employeeJournalFactory, subdivisionJournalFactory, incomeFactory ), node => new IncomeCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, commonServices, employeeJournalFactory, subdivisionJournalFactory, incomeFactory ), UnitOfWorkFactory.GetDefaultFactory, commonServices ) { SelectionMode = JournalSelectionMode.Single }; return(incomeCategoryJournalViewModel); }); return(incomeCategoryAutocompleteSelectorFactory); }
public CashRequestViewModel( IEntityUoWBuilder uowBuilder, IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices, IFileChooserProvider fileChooserProvider, IEmployeeRepository employeeRepository, CashRepository cashRepository, ConsoleInteractiveService consoleInteractiveService ) : base(uowBuilder, unitOfWorkFactory, commonServices) { this.uowBuilder = uowBuilder ?? throw new ArgumentNullException(nameof(uowBuilder)); this.cashRepository = cashRepository ?? throw new ArgumentNullException(nameof(cashRepository)); this.unitOfWorkFactory = unitOfWorkFactory ?? throw new ArgumentNullException(nameof(unitOfWorkFactory)); this.consoleInteractiveService = consoleInteractiveService ?? throw new ArgumentNullException(nameof(consoleInteractiveService)); var filterViewModel = new ExpenseCategoryJournalFilterViewModel { ExcludedIds = CategoryRepository.ExpenseSelfDeliveryCategories(UoW).Select(x => x.Id), HidenByDefault = true }; ExpenseCategoryAutocompleteSelectorFactory = new SimpleEntitySelectorFactory <ExpenseCategory, ExpenseCategoryViewModel>( () => { var expenseCategoryJournalViewModel = new SimpleEntityJournalViewModel <ExpenseCategory, ExpenseCategoryViewModel>( x => x.Name, () => new ExpenseCategoryViewModel( EntityUoWBuilder.ForCreate(), unitOfWorkFactory, ServicesConfig.CommonServices, fileChooserProvider, filterViewModel ), node => new ExpenseCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), unitOfWorkFactory, ServicesConfig.CommonServices, fileChooserProvider, filterViewModel ), unitOfWorkFactory, ServicesConfig.CommonServices ) { SelectionMode = JournalSelectionMode.Single }; expenseCategoryJournalViewModel.SetFilter(filterViewModel, filter => Restrictions.Not(Restrictions.In("Id", filter.ExcludedIds.ToArray()))); return(expenseCategoryJournalViewModel); }); var expenseCategorySelectorFactory = CurrentEmployee = employeeRepository.GetEmployeeForCurrentUser(UoW); if (uowBuilder.IsNewEntity) { TabName = "Создание новой заявки на выдачу ДС"; } else { TabName = $"{Entity.Title}"; } int userId = ServicesConfig.CommonServices.UserService.CurrentUserId; var isAdmin = ServicesConfig.CommonServices.UserService.GetCurrentUser(UoW).IsAdmin; IsAdminPanelVisible = isAdmin; var currentRole = getUserRole(userId); UserRole = currentRole; if (!dialogLoadedOnce) { savedUserRole = UserRole; dialogLoadedOnce = true; } if (isAdmin) { UserRole = savedUserRole; } IsNewEntity = uowBuilder.IsNewEntity; ConfigureEntityChangingRelations(); }
void ConfigureDlg() { if (!UoW.IsNew) { enumcomboOperation.Sensitive = false; specialListCmbOrganisation.Sensitive = false; } accessfilteredsubdivisionselectorwidget.OnSelected += Accessfilteredsubdivisionselectorwidget_OnSelected; if (Entity.RelatedToSubdivision != null) { accessfilteredsubdivisionselectorwidget.SelectIfPossible(Entity.RelatedToSubdivision); } enumcomboOperation.ItemsEnum = typeof(ExpenseType); enumcomboOperation.Binding.AddBinding(Entity, s => s.TypeOperation, w => w.SelectedItem).InitializeFromSource(); var filterCasher = new EmployeeFilterViewModel { Status = EmployeeStatus.IsWorking }; yentryCasher.RepresentationModel = new ViewModel.EmployeesVM(filterCasher); yentryCasher.Binding.AddBinding(Entity, s => s.Casher, w => w.Subject).InitializeFromSource(); var filterEmployee = new EmployeeFilterViewModel { Status = EmployeeStatus.IsWorking }; yentryEmployee.RepresentationModel = new ViewModel.EmployeesVM(filterEmployee); yentryEmployee.Binding.AddBinding(Entity, s => s.Employee, w => w.Subject).InitializeFromSource(); yentryEmployee.ChangedByUser += (sender, e) => UpdateEmployeeBalaceInfo(); ydateDocument.Binding.AddBinding(Entity, s => s.Date, w => w.Date).InitializeFromSource(); ydateDocument.Sensitive = canEditDate; IFileChooserProvider fileChooserProvider = new FileChooser("Расход " + DateTime.Now + ".csv"); var filterViewModel = new ExpenseCategoryJournalFilterViewModel { ExcludedIds = CategoryRepository.ExpenseSelfDeliveryCategories(UoW).Select(x => x.Id), HidenByDefault = true }; var expenseCategorySelectorFactory = new SimpleEntitySelectorFactory <ExpenseCategory, ExpenseCategoryViewModel>( () => { var expenseCategoryJournalViewModel = new SimpleEntityJournalViewModel <ExpenseCategory, ExpenseCategoryViewModel>( x => x.Name, () => new ExpenseCategoryViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, fileChooserProvider, filterViewModel ), node => new ExpenseCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, fileChooserProvider, filterViewModel ), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ) { SelectionMode = JournalSelectionMode.Single }; expenseCategoryJournalViewModel.SetFilter(filterViewModel, filter => Restrictions.Not(Restrictions.In("Id", filter.ExcludedIds.ToArray()))); return(expenseCategoryJournalViewModel); } ); entityVMEntryExpenseCategory.SetEntityAutocompleteSelectorFactory(expenseCategorySelectorFactory); entityVMEntryExpenseCategory.Binding.AddBinding(Entity, e => e.ExpenseCategory, w => w.Subject).InitializeFromSource(); specialListCmbOrganisation.ShowSpecialStateNot = true; specialListCmbOrganisation.ItemsList = UoW.GetAll <Organization>(); specialListCmbOrganisation.Binding.AddBinding(Entity, e => e.Organisation, w => w.SelectedItem).InitializeFromSource(); yspinMoney.Binding.AddBinding(Entity, s => s.Money, w => w.ValueAsDecimal).InitializeFromSource(); ytextviewDescription.Binding.AddBinding(Entity, s => s.Description, w => w.Buffer.Text).InitializeFromSource(); ExpenseType type = (ExpenseType)enumcomboOperation.SelectedItem; ylabelEmployeeWageBalance.Visible = type == ExpenseType.EmployeeAdvance || type == ExpenseType.Salary || (type == ExpenseType.Advance && (new EmployeeCategory[] { EmployeeCategory.office }).All(x => x != Entity?.Employee?.Category)); UpdateEmployeeBalaceInfo(); UpdateSubdivision(); if (!CanEdit) { table1.Sensitive = false; accessfilteredsubdivisionselectorwidget.Sensitive = false; buttonSave.Sensitive = false; ytextviewDescription.Editable = false; } }
private void ConfigureEntityViewModelEntry() { var incomeCategoryFilter = new IncomeCategoryJournalFilterViewModel(); var expenseCategoryFilter = new ExpenseCategoryJournalFilterViewModel { ExcludedIds = new CategoryRepository(new ParametersProvider()).ExpenseSelfDeliveryCategories(UoW).Select(x => x.Id), HidenByDefault = true }; var commonServices = ServicesConfig.CommonServices; IFileChooserProvider chooserIncomeProvider = new FileChooser("Приход " + DateTime.Now + ".csv"); IFileChooserProvider chooserExpenseProvider = new FileChooser("Расход " + DateTime.Now + ".csv"); var employeeJournalFactory = new EmployeeJournalFactory(); var subdivisionJournalFactory = new SubdivisionJournalFactory(); var incomeCategoryAutocompleteSelectorFactory = new SimpleEntitySelectorFactory <IncomeCategory, IncomeCategoryViewModel>( () => { var incomeCategoryJournalViewModel = new SimpleEntityJournalViewModel <IncomeCategory, IncomeCategoryViewModel>( x => x.Name, () => new IncomeCategoryViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, commonServices, chooserIncomeProvider, incomeCategoryFilter, employeeJournalFactory, subdivisionJournalFactory ), node => new IncomeCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, commonServices, chooserIncomeProvider, incomeCategoryFilter, employeeJournalFactory, subdivisionJournalFactory ), UnitOfWorkFactory.GetDefaultFactory, commonServices ) { SelectionMode = JournalSelectionMode.Single }; return(incomeCategoryJournalViewModel); }); var expenseCategoryAutocompleteSelectorFactory = new SimpleEntitySelectorFactory <ExpenseCategory, ExpenseCategoryViewModel>( () => { var expenseCategoryJournalViewModel = new SimpleEntityJournalViewModel <ExpenseCategory, ExpenseCategoryViewModel>( x => x.Name, () => new ExpenseCategoryViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, chooserExpenseProvider, expenseCategoryFilter, employeeJournalFactory, subdivisionJournalFactory ), node => new ExpenseCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, chooserExpenseProvider, expenseCategoryFilter, employeeJournalFactory, subdivisionJournalFactory ), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ) { SelectionMode = JournalSelectionMode.Single }; expenseCategoryJournalViewModel.SetFilter(expenseCategoryFilter, filter => Restrictions.Not(Restrictions.In("Id", filter.ExcludedIds.ToArray()))); return(expenseCategoryJournalViewModel); }); entityVMEntryCashIncomeCategory.SetEntityAutocompleteSelectorFactory(incomeCategoryAutocompleteSelectorFactory); entityVMEntryCashExpenseCategory.SetEntityAutocompleteSelectorFactory(expenseCategoryAutocompleteSelectorFactory); }
public CashRequestViewModel( IEntityUoWBuilder uowBuilder, IUnitOfWorkFactory unitOfWorkFactory, ICommonServices commonServices, IFileChooserProvider fileChooserProvider, IEmployeeRepository employeeRepository, ICashRepository cashRepository, IEmployeeJournalFactory employeeJournalFactory, ISubdivisionJournalFactory subdivisionJournalFactory ) : base(uowBuilder, unitOfWorkFactory, commonServices) { this.uowBuilder = uowBuilder ?? throw new ArgumentNullException(nameof(uowBuilder)); _cashRepository = cashRepository ?? throw new ArgumentNullException(nameof(cashRepository)); EmployeeJournalFactory = employeeJournalFactory ?? throw new ArgumentNullException(nameof(employeeJournalFactory)); SubdivisionJournalFactory = subdivisionJournalFactory ?? throw new ArgumentNullException(nameof(subdivisionJournalFactory)); var filterViewModel = new ExpenseCategoryJournalFilterViewModel { ExcludedIds = new CategoryRepository(new ParametersProvider()).ExpenseSelfDeliveryCategories(UoW).Select(x => x.Id), HidenByDefault = true }; ExpenseCategoryAutocompleteSelectorFactory = new SimpleEntitySelectorFactory <ExpenseCategory, ExpenseCategoryViewModel>( () => { var expenseCategoryJournalViewModel = new SimpleEntityJournalViewModel <ExpenseCategory, ExpenseCategoryViewModel>( x => x.Name, () => new ExpenseCategoryViewModel( EntityUoWBuilder.ForCreate(), unitOfWorkFactory, ServicesConfig.CommonServices, fileChooserProvider, filterViewModel, EmployeeJournalFactory, SubdivisionJournalFactory ), node => new ExpenseCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), unitOfWorkFactory, ServicesConfig.CommonServices, fileChooserProvider, filterViewModel, EmployeeJournalFactory, SubdivisionJournalFactory ), unitOfWorkFactory, ServicesConfig.CommonServices ) { SelectionMode = JournalSelectionMode.Single }; expenseCategoryJournalViewModel.SetFilter(filterViewModel, filter => Restrictions.Not(Restrictions.In("Id", filter.ExcludedIds.ToArray()))); return(expenseCategoryJournalViewModel); }); var expenseCategorySelectorFactory = CurrentEmployee = employeeRepository.GetEmployeeForCurrentUser(UoW); if (uowBuilder.IsNewEntity) { TabName = "Создание новой заявки на выдачу ДС"; } else { TabName = $"{Entity.Title}"; } int userId = ServicesConfig.CommonServices.UserService.CurrentUserId; UserRoles = getUserRoles(userId); IsRoleChooserSensitive = UserRoles.Count() > 1; UserRole = UserRoles.First(); IsNewEntity = uowBuilder.IsNewEntity; ConfigureEntityChangingRelations(); }
private void Configure() { #region TreeViews var colorRed = new Gdk.Color(255, 0, 0); var colorWhite = new Gdk.Color(255, 255, 255); ytreeDistricts.ColumnsConfig = ColumnsConfigFactory.Create <District>() .AddColumn("Код") .HeaderAlignment(0.5f) .AddTextRenderer(x => x.Id.ToString()) .AddColumn("Название") .HeaderAlignment(0.5f) .AddTextRenderer(x => x.DistrictName) .Editable() .AddColumn("Тарифная зона") .HeaderAlignment(0.5f) .AddComboRenderer(x => x.TariffZone) .SetDisplayFunc(x => x.Name) .FillItems(ViewModel.UoW.GetAll <TariffZone>().ToList(), "Нет") .Editing() .AddColumn("Мин. бутылей") .HeaderAlignment(0.5f) .AddTextRenderer(x => x.ObservableCommonDistrictRuleItems.Any() ? x.ObservableCommonDistrictRuleItems.Min(c => c.DeliveryPriceRule.Water19LCount).ToString() : "-" ) .XAlign(0.5f) .AddColumn("") .Finish(); ytreeDistricts.Binding.AddBinding(ViewModel.Entity, e => e.ObservableDistricts, w => w.ItemsDataSource).InitializeFromSource(); ytreeDistricts.Selection.Changed += (sender, args) => { if (ViewModel.IsCreatingNewBorder) { ViewModel.CancelNewBorderCommand.Execute(); toggleNewBorderPreview.Active = false; } ViewModel.SelectedDistrict = ytreeDistricts.GetSelectedObject() as District; }; ytreeScheduleRestrictions.ColumnsConfig = ColumnsConfigFactory.Create <DeliveryScheduleRestriction>() .AddColumn("График") .MinWidth(150) .HeaderAlignment(0.5f) .AddTextRenderer(x => x.DeliverySchedule.Name) .AddColumn("Прием до") .SetTag(acceptBeforeColumnTag) .HeaderAlignment(0.5f) .AddTextRenderer(x => x.AcceptBeforeTitle) .AddSetter((c, r) => c.BackgroundGdk = r.AcceptBefore == null ? colorRed : colorWhite) .Finish(); ytreeScheduleRestrictions.Binding.AddBinding(ViewModel, vm => vm.ScheduleRestrictions, w => w.ItemsDataSource); ytreeScheduleRestrictions.Selection.Changed += (sender, args) => ViewModel.SelectedScheduleRestriction = ytreeScheduleRestrictions.GetSelectedObject() as DeliveryScheduleRestriction; ytreeCommonRulePrices.ColumnsConfig = ColumnsConfigFactory.Create <CommonDistrictRuleItem>() .AddColumn("Цена") .HeaderAlignment(0.5f) .AddNumericRenderer(p => p.Price) .Digits(2) .WidthChars(10) .Adjustment(new Adjustment(0, 0, 1000000, 1, 100, 0)) .Editing() .AddSetter((c, r) => c.BackgroundGdk = r.Price <= 0 ? colorRed : colorWhite) .AddTextRenderer(node => CurrencyWorks.CurrencyShortName, false) .AddColumn("Правило") .HeaderAlignment(0.5f) .AddTextRenderer(p => p.DeliveryPriceRule.Title) .WrapMode(Pango.WrapMode.WordChar) .WrapWidth(500) .Finish(); ytreeCommonRulePrices.Binding.AddBinding(ViewModel, vm => vm.CommonDistrictRuleItems, w => w.ItemsDataSource); ytreeCommonRulePrices.Selection.Changed += (sender, args) => ViewModel.SelectedCommonDistrictRuleItem = ytreeCommonRulePrices.GetSelectedObject() as CommonDistrictRuleItem; ytreeWeekDayRulePrices.ColumnsConfig = ColumnsConfigFactory.Create <WeekDayDistrictRuleItem>() .AddColumn("Цена") .HeaderAlignment(0.5f) .AddNumericRenderer(p => p.Price) .Digits(2) .WidthChars(10) .Adjustment(new Adjustment(0, 0, 1000000, 1, 100, 0)) .Editing() .AddSetter((c, r) => c.BackgroundGdk = r.Price <= 0 ? colorRed : colorWhite) .AddTextRenderer(node => CurrencyWorks.CurrencyShortName, false) .AddColumn("Правило") .HeaderAlignment(0.5f) .AddTextRenderer(p => p.DeliveryPriceRule.ToString()) .WrapMode(Pango.WrapMode.WordChar) .WrapWidth(390) .Finish(); ytreeWeekDayRulePrices.Binding.AddBinding(ViewModel, vm => vm.WeekDayDistrictRuleItems, w => w.ItemsDataSource); ytreeWeekDayRulePrices.Selection.Changed += (sender, args) => ViewModel.SelectedWeekDayDistrictRuleItem = ytreeWeekDayRulePrices.GetSelectedObject() as WeekDayDistrictRuleItem; #endregion btnSave.Clicked += (sender, args) => ViewModel.Save(); btnSave.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict || vm.CanEdit, w => w.Sensitive).InitializeFromSource(); btnCancel.Clicked += (sender, args) => ViewModel.Close(true, CloseSource.Cancel); ylabelStatusString.Text = ViewModel.Entity.Status.GetEnumTitle(); entryName.Binding.AddBinding(ViewModel.Entity, e => e.Name, w => w.Text).InitializeFromSource(); entryName.Binding.AddFuncBinding(ViewModel, vm => vm.CanEdit, w => w.Sensitive).InitializeFromSource(); btnAddDistrict.Binding.AddFuncBinding(ViewModel, vm => vm.CanCreateDistrict, w => w.Sensitive).InitializeFromSource(); btnAddDistrict.Clicked += (sender, args) => { ViewModel.AddDistrictCommand.Execute(); ScrollToSelectedDistrict(); }; btnRemoveDistrict.Clicked += (sender, args) => { ViewModel.RemoveDistrictCommand.Execute(); if (ViewModel.SelectedDistrict == null) { RefreshBorders(); } else { ScrollToSelectedDistrict(); } }; btnRemoveDistrict.Binding.AddFuncBinding(ViewModel, vm => vm.SelectedDistrict != null && vm.CanDeleteDistrict, w => w.Sensitive).InitializeFromSource(); ytextComment.Binding.AddBinding(ViewModel.Entity, e => e.Comment, w => w.Buffer.Text).InitializeFromSource(); ytextComment.Binding.AddFuncBinding(ViewModel, vm => vm.CanEdit, w => w.Sensitive).InitializeFromSource(); btnAddCommonRule.Binding.AddFuncBinding(ViewModel, vm => vm.SelectedDistrict != null && vm.CanEditDistrict, w => w.Sensitive).InitializeFromSource(); btnAddCommonRule.Clicked += (sender, args) => { var selectRules = new OrmReference(ViewModel.UoW, DistrictRuleRepository.GetQueryOverWithAllDeliveryPriceRules()) { Mode = OrmReferenceMode.MultiSelect, ButtonMode = QS.Project.Dialogs.ReferenceButtonMode.None }; selectRules.ObjectSelected += (o, e) => ViewModel.AddCommonDistrictRuleItemCommand.Execute(e.GetEntities <DeliveryPriceRule>()); Tab.TabParent.AddSlaveTab(this.Tab, selectRules); }; btnRemoveCommonRule.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedCommonDistrictRuleItem != null, w => w.Sensitive).InitializeFromSource(); btnRemoveCommonRule.Clicked += (sender, args) => ViewModel.RemoveCommonDistrictRuleItemCommand.Execute(); btnToday.TooltipText = "День в день.\nГрафик доставки при создании заказа сегодня и на сегодняшнюю дату доставки."; btnToday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Today; btnMonday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Monday; btnTuesday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Tuesday; btnWednesday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Wednesday; btnThursday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Thursday; btnFriday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Friday; btnSaturday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Saturday; btnSunday.Clicked += (sender, args) => ViewModel.SelectedWeekDayName = WeekDayName.Sunday; btnAddSchedule.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedWeekDayName.HasValue, w => w.Sensitive).InitializeFromSource(); btnAddSchedule.Clicked += (sender, args) => { var selectSchedules = new OrmReference(typeof(DeliverySchedule), ViewModel.UoW) { Mode = OrmReferenceMode.MultiSelect }; selectSchedules.ObjectSelected += (o, eventArgs) => { ViewModel.AddScheduleRestrictionCommand.Execute(eventArgs.Subjects.Cast <DeliverySchedule>()); if (ViewModel.SelectedScheduleRestriction != null) { var iter = ytreeScheduleRestrictions.YTreeModel.IterFromNode(ViewModel.SelectedScheduleRestriction); var path = ytreeScheduleRestrictions.YTreeModel.GetPath(iter); ytreeScheduleRestrictions.ScrollToCell(path, ytreeScheduleRestrictions.Columns.FirstOrDefault(), false, 0, 0); } }; Tab.TabParent.AddSlaveTab(this.Tab, selectSchedules); }; btnRemoveSchedule.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedScheduleRestriction != null, w => w.Sensitive).InitializeFromSource(); btnRemoveSchedule.Clicked += (sender, args) => ViewModel.RemoveScheduleRestrictionCommand.Execute(); btnAddAcceptBefore.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedScheduleRestriction != null, w => w.Sensitive).InitializeFromSource(); btnAddAcceptBefore.Clicked += (sender, args) => { var acceptBeforeTimeViewModel = new SimpleEntityJournalViewModel <AcceptBefore, AcceptBeforeViewModel>( x => x.Name, () => new AcceptBeforeViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ), node => new AcceptBeforeViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ); acceptBeforeTimeViewModel.SelectionMode = JournalSelectionMode.Single; acceptBeforeTimeViewModel.SetActionsVisible(deleteActionEnabled: false, editActionEnabled: false); acceptBeforeTimeViewModel.OnEntitySelectedResult += (o, eventArgs) => { var node = eventArgs.SelectedNodes.FirstOrDefault(); if (node != null) { ViewModel.AddAcceptBeforeCommand.Execute(ViewModel.UoW.GetById <AcceptBefore>(node.Id)); } }; Tab.TabParent.AddSlaveTab(Tab, acceptBeforeTimeViewModel); }; btnRemoveAcceptBefore.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedScheduleRestriction != null && vm.SelectedScheduleRestriction.AcceptBefore != null, w => w.Sensitive) .InitializeFromSource(); btnRemoveAcceptBefore.Clicked += (sender, args) => ViewModel.RemoveAcceptBeforeCommand.Execute(); btnAddWeekDayRule.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedWeekDayName.HasValue, w => w.Sensitive).InitializeFromSource(); btnAddWeekDayRule.Clicked += (sender, args) => { var selectRules = new OrmReference(ViewModel.UoW, DistrictRuleRepository.GetQueryOverWithAllDeliveryPriceRules()) { Mode = OrmReferenceMode.MultiSelect, ButtonMode = QS.Project.Dialogs.ReferenceButtonMode.None }; selectRules.ObjectSelected += (o, e) => ViewModel.AddWeekDayDistrictRuleItemCommand.Execute(e.GetEntities <DeliveryPriceRule>()); Tab.TabParent.AddSlaveTab(this.Tab, selectRules); }; btnRemoveWeekDayRule.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.SelectedWeekDayDistrictRuleItem != null, w => w.Sensitive).InitializeFromSource(); btnRemoveWeekDayRule.Clicked += (sender, args) => ViewModel.RemoveWeekDayDistrictRuleItemCommand.Execute(); cmbGeoGroup.ItemsList = ViewModel.UoW.GetAll <GeographicGroup>().ToList(); cmbGeoGroup.Binding.AddBinding(ViewModel, vm => vm.SelectedGeoGroup, w => w.SelectedItem).InitializeFromSource(); cmbGeoGroup.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null, w => w.Sensitive).InitializeFromSource(); cmbWageDistrict.ItemsList = ViewModel.UoW.Session.QueryOver <WageDistrict>().Where(d => !d.IsArchive).List(); cmbWageDistrict.Binding.AddBinding(ViewModel, vm => vm.SelectedWageDistrict, w => w.SelectedItem).InitializeFromSource(); cmbWageDistrict.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && vm.SelectedDistrict != null && vm.CanChangeDistrictWageTypePermissionResult, w => w.Sensitive).InitializeFromSource(); cmbWageDistrict.SetRenderTextFunc <WageDistrict>(x => x.Name); #region GMap btnAddBorder.Binding.AddFuncBinding(ViewModel, vm => !vm.IsCreatingNewBorder, w => w.Visible).InitializeFromSource(); btnAddBorder.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && !vm.IsCreatingNewBorder && vm.SelectedDistrict != null && vm.SelectedDistrict.DistrictBorder == null, w => w.Sensitive).InitializeFromSource(); btnAddBorder.Clicked += (sender, args) => ViewModel.CreateBorderCommand.Execute(); btnRemoveBorder.Binding.AddFuncBinding(ViewModel, vm => !vm.IsCreatingNewBorder, w => w.Visible).InitializeFromSource(); btnRemoveBorder.Binding.AddFuncBinding(ViewModel, vm => vm.CanEditDistrict && !vm.IsCreatingNewBorder && vm.SelectedDistrict != null && vm.SelectedDistrict.DistrictBorder != null, w => w.Sensitive).InitializeFromSource(); btnRemoveBorder.Clicked += (sender, args) => { if (MessageDialogHelper.RunQuestionDialog($"Удалить границу района {ViewModel.SelectedDistrict.DistrictName}?")) { ViewModel.RemoveBorderCommand.Execute(); RefreshBorders(); } }; btnConfirmNewBorder.Binding.AddFuncBinding(ViewModel, vm => vm.IsCreatingNewBorder, w => w.Visible).InitializeFromSource(); btnConfirmNewBorder.Binding.AddFuncBinding(ViewModel, vm => vm.SelectedDistrict != null && vm.IsCreatingNewBorder, w => w.Sensitive).InitializeFromSource(); btnConfirmNewBorder.Clicked += (sender, args) => { if (MessageDialogHelper.RunQuestionDialog("Завершить создание границы района?")) { if (ViewModel.NewBorderVertices.Count < 3) { MessageDialogHelper.RunInfoDialog("Нельзя создать границу района меньше чем за 3 точки"); return; } toggleNewBorderPreview.Active = false; ViewModel.ConfirmNewBorderCommand.Execute(); RefreshBorders(); } }; btnCancelNewBorder.Binding.AddFuncBinding(ViewModel, vm => vm.IsCreatingNewBorder, w => w.Visible).InitializeFromSource(); btnCancelNewBorder.Binding.AddFuncBinding(ViewModel, vm => vm.SelectedDistrict != null && vm.IsCreatingNewBorder, w => w.Sensitive).InitializeFromSource(); btnCancelNewBorder.Clicked += (sender, args) => { if (MessageDialogHelper.RunQuestionDialog("Отменить создание границы района?")) { ViewModel.CancelNewBorderCommand.Execute(); toggleNewBorderPreview.Active = false; } }; toggleNewBorderPreview.Binding.AddFuncBinding(ViewModel, vm => vm.IsCreatingNewBorder, w => w.Visible).InitializeFromSource(); toggleNewBorderPreview.Binding.AddFuncBinding(ViewModel, vm => vm.SelectedDistrict != null && vm.IsCreatingNewBorder, w => w.Sensitive).InitializeFromSource(); toggleNewBorderPreview.Toggled += (sender, args) => { if (toggleNewBorderPreview.Active && ViewModel.NewBorderVertices.Any()) { var previewBorder = new GMapPolygon(ViewModel.NewBorderVertices.ToList(), "Предпросмотр новых границ"); newBordersPreviewOverlay.Polygons.Add(previewBorder); } else { newBordersPreviewOverlay.Clear(); } }; cmbMapType.ItemsEnum = typeof(MapProviders); cmbMapType.EnumItemSelected += (sender, args) => gmapWidget.MapProvider = MapProvidersHelper.GetPovider((MapProviders)args.SelectedItem); cmbMapType.SelectedItem = MapProviders.YandexMap; gmapWidget.Position = new PointLatLng(59.93900, 30.31646); gmapWidget.HeightRequest = 150; gmapWidget.HasFrame = true; gmapWidget.Overlays.Add(bordersOverlay); gmapWidget.Overlays.Add(newBordersPreviewOverlay); gmapWidget.Overlays.Add(verticeOverlay); RefreshBorders(); gmapWidget.ButtonPressEvent += (o, args) => { if (args.Event.Button == 1 && ViewModel.IsCreatingNewBorder) { ViewModel.AddNewVertexCommand.Execute(gmapWidget.FromLocalToLatLng((int)args.Event.X, (int)args.Event.Y)); } if (args.Event.Button == 3 && ViewModel.IsCreatingNewBorder) { var marker = verticeOverlay.Markers.FirstOrDefault(m => m.IsMouseOver); if (marker == null) { return; } var pointMarker = new PointLatLng(marker.Position.Lat, marker.Position.Lng); if (ViewModel.NewBorderVertices.Contains(pointMarker)) { Menu popupMenu = new Menu(); var item = new MenuItem("Удалить"); item.Activated += (sender, e) => ViewModel.RemoveNewBorderVertexCommand.Execute(pointMarker); popupMenu.Add(item); popupMenu.ShowAll(); popupMenu.Popup(); } } }; void RefreshBorders() { bordersOverlay.Clear(); foreach (District district in ViewModel.Entity.ObservableDistricts) { if (district.DistrictBorder != null) { bordersOverlay.Polygons.Add(new GMapPolygon( district.DistrictBorder.Coordinates.Select(p => new PointLatLng(p.X, p.Y)).ToList(), district.DistrictName) ); } } } #endregion ViewModel.PropertyChanged += (sender, args) => { Application.Invoke((o, eventArgs) => { switch (args.PropertyName) { case nameof(ViewModel.SelectedWeekDayName): var column = ytreeScheduleRestrictions.ColumnsConfig.GetColumnsByTag(acceptBeforeColumnTag).First(); column.Visible = ViewModel.SelectedWeekDayName == WeekDayName.Today; break; case nameof(ViewModel.SelectedDistrict): if (ViewModel.SelectedDistrict != null) { ytreeDistricts.SelectObject(ViewModel.SelectedDistrict); } break; case nameof(ViewModel.SelectedScheduleRestriction): if (ViewModel.SelectedScheduleRestriction != null) { ytreeScheduleRestrictions.SelectObject(ViewModel.SelectedScheduleRestriction); } break; case nameof(ViewModel.SelectedCommonDistrictRuleItem): if (ViewModel.SelectedCommonDistrictRuleItem != null) { ytreeCommonRulePrices.SelectObject(ViewModel.SelectedCommonDistrictRuleItem); } break; case nameof(ViewModel.SelectedWeekDayDistrictRuleItem): if (ViewModel.SelectedWeekDayDistrictRuleItem != null) { ytreeWeekDayRulePrices.SelectObject(ViewModel.SelectedWeekDayDistrictRuleItem); } break; case nameof(ViewModel.SelectedDistrictBorderVertices): verticeOverlay.Clear(); if (ViewModel.SelectedDistrictBorderVertices != null) { GMapPolygon polygon = new GMapPolygon(ViewModel.SelectedDistrictBorderVertices.ToList(), "polygon"); polygon.Stroke = selectedDistrictBorderPen; verticeOverlay.Polygons.Add(polygon); } break; case nameof(ViewModel.NewBorderVertices): verticeOverlay.Clear(); if (ViewModel.NewBorderVertices != null && ViewModel.NewBorderVertices.Any()) { for (int i = 0; i < ViewModel.NewBorderVertices.Count; i++) { var color = GMarkerGoogleType.red; if (i == 0) { color = GMarkerGoogleType.yellow; } else if (i == ViewModel.NewBorderVertices.Count - 1) { color = GMarkerGoogleType.green; } GMapMarker point = new GMarkerGoogle(ViewModel.NewBorderVertices[i], color); verticeOverlay.Markers.Add(point); } if (toggleNewBorderPreview.Active) { toggleNewBorderPreview.Active = false; toggleNewBorderPreview.Active = true; } } break; } }); }; }
private void ConfigureDlg() { fuelbalanceview.ViewModel = ViewModel.FuelBalanceViewModel; ydatepickerDate.Binding.AddBinding(ViewModel.Entity, e => e.Date, w => w.Date).InitializeFromSource(); ydatepickerDate.Binding.AddBinding(ViewModel, e => e.CanEditDate, w => w.Sensitive).InitializeFromSource(); ylabelCashierValue.Binding.AddBinding(ViewModel.Entity, e => e.Cashier, w => w.LabelProp, new EmployeeToLastNameWithInitialsConverter()).InitializeFromSource(); var expenseCategorySelectorFactory = new SimpleEntitySelectorFactory <ExpenseCategory, ExpenseCategoryViewModel>( () => { var expenseCategoryJournalViewModel = new SimpleEntityJournalViewModel <ExpenseCategory, ExpenseCategoryViewModel>( x => x.Name, () => new ExpenseCategoryViewModel( EntityUoWBuilder.ForCreate(), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, ViewModel.fileChooserProvider, ViewModel.expenseCategoryJournalFilterViewModel, ViewModel.EmployeeJournalFactory, ViewModel.SubdivisionJournalFactory ), (node) => new ExpenseCategoryViewModel( EntityUoWBuilder.ForOpen(node.Id), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices, ViewModel.fileChooserProvider, ViewModel.expenseCategoryJournalFilterViewModel, ViewModel.EmployeeJournalFactory, ViewModel.SubdivisionJournalFactory ), UnitOfWorkFactory.GetDefaultFactory, ServicesConfig.CommonServices ) { SelectionMode = JournalSelectionMode.Single }; return(expenseCategoryJournalViewModel); } ); entryExpenseCategory.SetEntityAutocompleteSelectorFactory(expenseCategorySelectorFactory); entryExpenseCategory.Binding.AddBinding(ViewModel.Entity, e => e.ExpenseCategory, w => w.Subject).InitializeFromSource(); entryExpenseCategory.Binding.AddBinding(ViewModel, vm => vm.CanEdit, w => w.Sensitive).InitializeFromSource(); entryEmployee.SetEntityAutocompleteSelectorFactory(ViewModel.EmployeeAutocompleteSelectorFactory); entryEmployee.Binding.AddBinding(ViewModel.Entity, e => e.Employee, w => w.Subject).InitializeFromSource(); entryEmployee.Binding.AddBinding(ViewModel, vm => vm.CanEdit, w => w.Sensitive).InitializeFromSource(); ycomboboxCashSubdivision.SetRenderTextFunc <Subdivision>(s => s.Name); ycomboboxCashSubdivision.Binding.AddBinding(ViewModel, vm => vm.AvailableSubdivisions, w => w.ItemsList).InitializeFromSource(); ycomboboxCashSubdivision.Binding.AddBinding(ViewModel.Entity, e => e.CashSubdivision, w => w.SelectedItem).InitializeFromSource(); ycomboboxCashSubdivision.Binding.AddBinding(ViewModel, vm => vm.CanEdit, w => w.Sensitive).InitializeFromSource(); ytextviewReason.Binding.AddBinding(ViewModel.Entity, vm => vm.Reason, w => w.Buffer.Text).InitializeFromSource(); ytextviewReason.Binding.AddBinding(ViewModel, vm => vm.CanEdit, w => w.Sensitive).InitializeFromSource(); ytreeviewItems.ColumnsConfig = FluentColumnsConfig <FuelWriteoffDocumentItem> .Create() .AddColumn("Топливо").AddTextRenderer(x => x.FuelType.Name) .AddColumn("Количество").AddNumericRenderer(x => x.Liters) .AddSetter((c, n) => c.Editable = ViewModel.CanEdit) .AddSetter((c, n) => c.Adjustment = new Gtk.Adjustment(0, 0, (double)ViewModel.GetAvailableLiters(n.FuelType), 1, 10, 0)) .Finish(); ytreeviewItems.Selection.Mode = Gtk.SelectionMode.Single; ytreeviewItems.ItemsDataSource = ViewModel.Entity.ObservableFuelWriteoffDocumentItems; ytreeviewItems.Selection.Changed += (sender, e) => { ViewModel.AddWriteoffItemCommand.RaiseCanExecuteChanged(); ViewModel.DeleteWriteoffItemCommand.RaiseCanExecuteChanged(); }; ybuttonAddItem.Clicked += (sender, e) => ViewModel.AddWriteoffItemCommand.Execute(); ybuttonAddItem.Sensitive = ViewModel.AddWriteoffItemCommand.CanExecute(); ViewModel.AddWriteoffItemCommand.CanExecuteChanged += (sender, e) => { ybuttonAddItem.Sensitive = ViewModel.AddWriteoffItemCommand.CanExecute(); }; ybuttonDeleteItem.Clicked += (sender, e) => ViewModel.DeleteWriteoffItemCommand.Execute(GetSelectedItem()); ybuttonDeleteItem.Sensitive = ViewModel.DeleteWriteoffItemCommand.CanExecute(GetSelectedItem()); ViewModel.DeleteWriteoffItemCommand.CanExecuteChanged += (sender, e) => { ybuttonDeleteItem.Sensitive = ViewModel.DeleteWriteoffItemCommand.CanExecute(GetSelectedItem()); }; buttonSave.Clicked += (sender, e) => { ViewModel.SaveAndClose(); }; buttonCancel.Clicked += (sender, e) => { ViewModel.Close(true, QS.Navigation.CloseSource.Cancel); }; buttonPrint.Clicked += (sender, e) => { ViewModel.PrintCommand.Execute(); }; buttonPrint.Sensitive = ViewModel.PrintCommand.CanExecute(); ViewModel.PrintCommand.CanExecuteChanged += (sender, e) => { buttonPrint.Sensitive = ViewModel.PrintCommand.CanExecute(); }; }