public static IEnumerable <IEntitySubdivisionForUserPermissionValidationResult> Validate(IUnitOfWork uow, int userId, Type entityType) { var result = new List <EntitySubdivisionForUserPermissionValidationResult>(); var employee = EmployeeRepository.GetEmployeesForUser(uow, userId).FirstOrDefault(); var mainPermission = ServicesConfig.CommonServices.PermissionService.ValidateUserPermission(entityType, userId); Subdivision mainSubdivision = employee == null ? null : employee.Subdivision; if (mainSubdivision != null) { var mainTypesName = mainSubdivision.DocumentTypes.Select(x => x.Type); if (mainTypesName.Contains(entityType.Name)) { EntitySubdivisionForUserPermissionValidationResult mainResultItem = new EntitySubdivisionForUserPermissionValidationResult(mainSubdivision, true); mainResultItem.AddPermission( entityType, new EntityPermission( mainPermission.CanCreate, mainPermission.CanRead, mainPermission.CanUpdate, mainPermission.CanDelete ) ); result.Add(mainResultItem); } } var subdivisionsForEntities = SubdivisionsRepository.GetSubdivisionsForDocumentTypes(uow, new Type[] { entityType }); var specialPermissions = PermissionRepository.GetAllSubdivisionForUserEntityPermissionForOneEntity(uow, userId, entityType.Name) .Where(x => subdivisionsForEntities.Contains(x.Subdivision) || Subdivision.ReferenceEquals(x.Subdivision, mainSubdivision)); foreach (var permissionitem in specialPermissions.Where(x => x.TypeOfEntity.Type == entityType.Name)) { EntitySubdivisionForUserPermissionValidationResult resultItem = result.FirstOrDefault(x => x.Subdivision == permissionitem.Subdivision); if (resultItem == null) { var isMainSubdivision = permissionitem.Subdivision != null && mainSubdivision != null && permissionitem.Subdivision.Id == mainSubdivision.Id; resultItem = new EntitySubdivisionForUserPermissionValidationResult(permissionitem.Subdivision, isMainSubdivision); result.Add(resultItem); } resultItem.AddPermission( entityType, new EntityPermission( mainPermission.CanCreate && permissionitem.CanCreate, mainPermission.CanRead && permissionitem.CanRead, mainPermission.CanUpdate && permissionitem.CanUpdate, mainPermission.CanDelete && permissionitem.CanDelete ) ); } return(result); }
protected void ConfigureDialog() { yentryName.Binding .AddBinding(UoWGeneric.Root, (warehouse) => warehouse.Name, (widget) => widget.Text) .InitializeFromSource(); ycheckOnlineStore.Binding.AddBinding(Entity, e => e.PublishOnlineStore, w => w.Active).InitializeFromSource(); ycheckbuttonCanReceiveBottles.Binding .AddBinding(UoWGeneric.Root, (warehouse) => warehouse.CanReceiveBottles, (widget) => widget.Active) .InitializeFromSource(); ycheckbuttonCanReceiveEquipment.Binding .AddBinding(UoWGeneric.Root, (warehouse) => warehouse.CanReceiveEquipment, (widget) => widget.Active) .InitializeFromSource(); ycheckbuttonArchive.Binding .AddBinding(UoWGeneric.Root, (warehouse) => warehouse.IsArchive, (widget) => widget.Active) .InitializeFromSource(); ycheckbuttonArchive.Sensitive = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_archive_warehouse"); comboTypeOfUse.ItemsEnum = typeof(WarehouseUsing); comboTypeOfUse.Binding.AddBinding(Entity, e => e.TypeOfUse, w => w.SelectedItem).InitializeFromSource(); ySpecCmbOwner.SetRenderTextFunc <Subdivision>(s => s.Name); ySpecCmbOwner.ItemsList = SubdivisionsRepository.GetAllDepartments(UoW); ySpecCmbOwner.Binding.AddBinding(Entity, s => s.OwningSubdivision, w => w.SelectedItem).InitializeFromSource(); }
public void ConfigureDlg(IUnitOfWork uow, UndeliveredOrder undelivery) { this.Sensitive = false; yEForUndeliveredOrder.Changed += OnUndeliveredOrderChanged; CanChangeProblemSource = commonServices.PermissionService.ValidateUserPresetPermission("can_change_undelivery_problem_source", commonServices.UserService.CurrentUserId); this.undelivery = undelivery; UoW = uow; oldOrder = undelivery.OldOrder; newOrder = undelivery.NewOrder; if (undelivery.Id > 0 && undelivery.InProcessAtDepartment != null) { InitialProcDepartmentName = undelivery.InProcessAtDepartment.Name; } if (undelivery.Id > 0) { foreach (GuiltyInUndelivery g in undelivery.ObservableGuilty) { initialGuiltyList.Add( new GuiltyInUndelivery { Id = g.Id, UndeliveredOrder = g.UndeliveredOrder, GuiltySide = g.GuiltySide, GuiltyDepartment = g.GuiltyDepartment } ); } } var filterOrders = new OrdersFilter(UoW); List <OrderStatus> hiddenStatusesList = new List <OrderStatus>(); var grantedStatusesArray = OrderRepository.GetStatusesForOrderCancelation(); foreach (OrderStatus status in Enum.GetValues(typeof(OrderStatus))) { if (!grantedStatusesArray.Contains(status)) { hiddenStatusesList.Add(status); } } filterOrders.SetAndRefilterAtOnce(x => x.HideStatuses = hiddenStatusesList.Cast <Enum>().ToArray()); yEForUndeliveredOrder.Changed += (sender, e) => { oldOrder = undelivery.OldOrder; lblInfo.Markup = undelivery.GetOldOrderInfo(); if (undelivery.Id <= 0) { undelivery.OldOrderStatus = oldOrder.OrderStatus; } routeListDoesNotExist = oldOrder != null && (undelivery.OldOrderStatus == OrderStatus.NewOrder || undelivery.OldOrderStatus == OrderStatus.Accepted || undelivery.OldOrderStatus == OrderStatus.WaitForPayment); guiltyInUndeliveryView.ConfigureWidget(UoW, undelivery, !routeListDoesNotExist); SetSensitivities(); SetVisibilities(); GetFines(); RemoveItemsFromEnums(); }; yEForUndeliveredOrder.RepresentationModel = new OrdersVM(filterOrders); yEForUndeliveredOrder.Binding.AddBinding(undelivery, x => x.OldOrder, x => x.Subject).InitializeFromSource(); yEForUndeliveredOrder.CanEditReference = ServicesConfig.CommonServices.CurrentPermissionService.ValidatePresetPermission("can_delete"); yDateDriverCallTime.Binding.AddBinding(undelivery, t => t.DriverCallTime, w => w.DateOrNull).InitializeFromSource(); if (undelivery.Id <= 0) { yDateDriverCallTime.DateOrNull = DateTime.Now; } yEnumCMBDriverCallPlace.ItemsEnum = typeof(DriverCallType); yEnumCMBDriverCallPlace.Binding.AddBinding(undelivery, p => p.DriverCallType, w => w.SelectedItem).InitializeFromSource(); yDateDispatcherCallTime.Binding.AddBinding(undelivery, t => t.DispatcherCallTime, w => w.DateOrNull).InitializeFromSource(); if (undelivery.Id <= 0) { yDateDispatcherCallTime.DateOrNull = DateTime.Now; } referenceNewDeliverySchedule.ItemsQuery = DeliveryScheduleRepository.AllQuery(); referenceNewDeliverySchedule.SetObjectDisplayFunc <DeliverySchedule>(e => e.Name); referenceNewDeliverySchedule.Binding.AddBinding(undelivery, s => s.NewDeliverySchedule, w => w.Subject).InitializeFromSource(); referenceNewDeliverySchedule.Sensitive = false; SetLabelsAcordingToNewOrder(); yEnumCMBStatus.ItemsEnum = typeof(UndeliveryStatus); yEnumCMBStatus.SelectedItem = undelivery.UndeliveryStatus; yEnumCMBStatus.EnumItemSelected += (s, e) => { SetSensitivities(); undelivery.SetUndeliveryStatus((UndeliveryStatus)e.SelectedItem); }; yentInProcessAtDepartment.SubjectType = typeof(Subdivision); yentInProcessAtDepartment.Binding.AddBinding(undelivery, d => d.InProcessAtDepartment, w => w.Subject).InitializeFromSource(); yentInProcessAtDepartment.ChangedByUser += (s, e) => { undelivery.AddCommentToTheField( UoW, CommentedFields.Reason, String.Format( "сменил(а) \"в работе у отдела\" \nс \"{0}\" на \"{1}\"", InitialProcDepartmentName, undelivery.InProcessAtDepartment.Name ) ); }; if (undelivery.Id <= 0) { yentInProcessAtDepartment.Subject = SubdivisionsRepository.GetQCDepartment(UoW); } refRegisteredBy.RepresentationModel = new EmployeesVM(UoW); refRegisteredBy.Binding.AddBinding(undelivery, s => s.EmployeeRegistrator, w => w.Subject).InitializeFromSource(); yEnumCMBDriverCallPlace.EnumItemSelected += CMBSelectedItemChanged; txtReason.Binding.AddBinding(undelivery, u => u.Reason, w => w.Buffer.Text).InitializeFromSource(); lblInfo.Markup = undelivery.GetOldOrderInfo(); yenumcomboboxTransferType.ItemsEnum = typeof(TransferType); yenumcomboboxTransferType.Binding.AddBinding(undelivery, u => u.OrderTransferType, w => w.SelectedItemOrNull).InitializeFromSource(); comboProblemSource.SetRenderTextFunc <UndeliveryProblemSource>(k => k.GetFullName); comboProblemSource.Binding.AddBinding(undelivery, u => u.ProblemSourceItems, w => w.ItemsList).InitializeFromSource(); comboProblemSource.Binding.AddBinding(undelivery, u => u.ProblemSource, w => w.SelectedItem).InitializeFromSource(); comboProblemSource.Sensitive = CanChangeProblemSource; yTreeFines.ColumnsConfig = ColumnsConfigFactory.Create <FineItem>() .AddColumn("Номер").AddTextRenderer(node => node.Fine.Id.ToString()) .AddColumn("Сотудники").AddTextRenderer(node => node.Employee.ShortName) .AddColumn("Сумма штрафа").AddTextRenderer(node => CurrencyWorks.GetShortCurrencyString(node.Money)) .Finish(); yenumcomboboxTransferType.Visible = undelivery?.NewOrder != null; undelivery.PropertyChanged += (sender, e) => { if (e.PropertyName != "NewOrder") { return; } if (undelivery.NewOrder == null) { yenumcomboboxTransferType.Visible = false; undelivery.OrderTransferType = null; return; } yenumcomboboxTransferType.Visible = true; }; GetFines(); SetVisibilities(); SetSensitivities(); }
public void ConfigureWidget(IUnitOfWork uow, UndeliveredOrder undeliveredOrder, bool driverCanBeGuilty) { this.uow = uow; this.undeliveredOrder = undeliveredOrder; enumBtnGuiltySide.ItemsEnum = typeof(GuiltyTypes); enumBtnGuiltySide.SetSensitive(GuiltyTypes.Driver, driverCanBeGuilty); enumBtnGuiltySide.SetSensitive(GuiltyTypes.None, !undeliveredOrder.ObservableGuilty.Any()); undeliveredOrder.ObservableGuilty.ElementAdded += ObservableGuilty_ElementAdded; undeliveredOrder.ObservableGuilty.ElementRemoved += ObservableGuilty_ElementRemoved; enumBtnGuiltySide.EnumItemClicked += (sender, e) => { undeliveredOrder.AddGuilty( new GuiltyInUndelivery { GuiltySide = (GuiltyTypes)e.ItemEnum, UndeliveredOrder = undeliveredOrder } ); SetWidgetApperance(); }; var colorBlack = new Gdk.Color(0, 0, 0); var colorGrey = new Gdk.Color(96, 96, 96); var colorWhite = new Gdk.Color(255, 255, 255); var hideEnums = !driverCanBeGuilty ? new Enum[] { GuiltyTypes.Driver } : new Enum[] { }; var allDepartments = SubdivisionsRepository.GetAllDepartments(uow); treeViewGuilty.ColumnsConfig = ColumnsConfigFactory.Create <GuiltyInUndelivery>() .AddColumn("Сторона") .HeaderAlignment(0.5f) .AddEnumRenderer(n => n.GuiltySide, true, hideEnums) .AddColumn("Отдел ВВ") .HeaderAlignment(0.5f) .AddComboRenderer(n => n.GuiltyDepartment) .SetDisplayFunc(x => x.Name) .FillItems(allDepartments) .AddSetter( (c, n) => { c.Editable = n.GuiltySide == GuiltyTypes.Department; if (n.GuiltySide != GuiltyTypes.Department) { n.GuiltyDepartment = null; } if (n.GuiltySide == GuiltyTypes.Department && n.GuiltyDepartment == null) { c.ForegroundGdk = colorGrey; c.Style = Pango.Style.Italic; c.Text = "(Нажмите для выбора отдела)"; c.BackgroundGdk = colorWhite; } else { c.ForegroundGdk = colorBlack; c.Style = Pango.Style.Normal; c.Background = null; } } ) .Finish(); treeViewGuilty.HeadersVisible = false; treeViewGuilty.ItemsDataSource = undeliveredOrder.ObservableGuilty; SetWidgetApperance(); }