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);
        }
Example #2
0
        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();
        }
Example #4
0
        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();
        }