コード例 #1
0
ファイル: FormManager.cs プロジェクト: AleksMorozova/prizm
        /// <summary>
        /// helper method to determine security issues about document to be opened
        /// </summary>
        /// <param name="documentType">type of document</param>
        /// <returns>pack of flags</returns>
        private FormFlags GetSecurityRestrictionReasons(DocumentTypes documentType)
        {
            FormFlags reasons = FormFlags.Nothing;

            reasons |= SecurityUtil.ExistOnCurrentWorkstation(childForms.GetAccessOption(documentType, editMode: true))
                            ? FormFlags.CanEditAtThisWorkstation : FormFlags.Nothing;

            reasons |= SecurityUtil.ExistOnCurrentWorkstation(childForms.GetAccessOption(documentType, editMode: false))
                            ? FormFlags.CanReadAtThisWorkstation : FormFlags.Nothing;

            if (!ctx.HasAccess(childForms.GetAccessOption(documentType, editMode: true)))
            {
                reasons |= FormFlags.EditAccessDenied;
            }
            if (!ctx.HasAccess(childForms.GetAccessOption(documentType, editMode: false)))
            {
                reasons |= FormFlags.ReadAccessDenied;
            }
            return(reasons);
        }
コード例 #2
0
ファイル: FormManager.cs プロジェクト: AleksMorozova/prizm
        /// <summary>
        /// Creation of child form. Can be used from outside to pass some Guid of entity and number to newly created forms.
        /// </summary>
        /// <param name="formType">exact type of form</param>
        /// <param name="id">Guid of entity</param>
        /// <param name="parameters">input parameters passed to the newly created form</param>
        private ChildForm OpenReturnChildForm(DocumentTypes documentType, List <KeyValuePair <string, object> > parameters, Guid id = default(Guid))
        {
            ChildForm formToActivate = null;

            try
            {
                notify.ShowProcessing();

                FormFlags flags = FormFlags.Nothing;
                flags |= GetSecurityRestrictionReasons(documentType);

                // is possible for this option to open for this user, at all
                if (flags.HasFlag(FormFlags.CanReadAtThisWorkstation) && !flags.HasFlag(FormFlags.ReadAccessDenied) ||
                    flags.HasFlag(FormFlags.CanEditAtThisWorkstation) && !flags.HasFlag(FormFlags.EditAccessDenied))
                {
                    if (id != Guid.Empty)
                    {
                        formToActivate = childForms.GetById(id);
                    }
                    if (formToActivate == null)
                    {
                        IReadOnlyList <ChildForm> existingDocuments = childForms[documentType];

                        if (IsSingleDocumentPerProgram(documentType) && existingDocuments.Count > 0)
                        {
                            formToActivate = existingDocuments.First();
                        }
                        if (formToActivate == null)
                        {
                            flags |= (IsSingleEditModeDocument(documentType) && existingDocuments.Any((form) => { return(form.IsEditMode); }))
                                ? FormFlags.SingleEditAlreadyOpened : FormFlags.Nothing;

                            Main.Forms.Settings.SettingsXtraForm settingsForm = GetSettingsForm();

                            if ((settingsForm != null && settingsForm.IsEditMode && IsEditConflictWithSettings(documentType) ||
                                 documentType == DocumentTypes.Settings && SettingsConflictedDocumentsOpened().Any((form) => { return(form.IsEditMode); })
                                 )
                                )
                            {
                                flags |= FormFlags.EditConflict;
                            }

                            bool editMode;
                            if (CanOpen(documentType, id == Guid.Empty, flags, out editMode))
                            {
                                formToActivate = CreateChildForm(documentType, parameters);
                                if (formToActivate != null)
                                {
                                    formToActivate.IsEditMode = editMode;
                                    ShowChildForm(formToActivate);
                                }
                            }
                        }
                    }
                    if (formToActivate != null)
                    {
                        formToActivate.Activate();
                    }
                }
                else
                {
                    notify.ShowError(
                        Program.LanguageManager.GetString(StringResources.FormManager_AccessForbidden),
                        Program.LanguageManager.GetString(StringResources.FormManager_AccessHeader));
                    log.Warn("Attempt to open form with restricted access to it");
                }
            }
            finally
            {
                notify.HideProcessing();
            }
            return(formToActivate);
        }
コード例 #3
0
ファイル: FormManager.cs プロジェクト: AleksMorozova/prizm
        /// <summary>
        /// helper method to determine the possibility to open/create document.
        /// Can show questions to user.
        /// </summary>
        /// <param name="type">type of document</param>
        /// <param name="isNew">is entity supposed to be new</param>
        /// <param name="flags">flags pack</param>
        /// <param name="editMode">can/should this document to be opened in edit mode.</param>
        /// <returns></returns>
        private bool CanOpen(DocumentTypes type, bool isNew, FormFlags flags, out bool editMode)
        {
            editMode = !flags.HasFlag(FormFlags.EditAccessDenied) && flags.HasFlag(FormFlags.CanEditAtThisWorkstation);
            bool canOpen = true;

            if (flags.HasFlag(FormFlags.EditConflict))
            {
                if (type == DocumentTypes.Settings)
                {
                    canOpen &= notify.ShowYesNo(Program.LanguageManager.GetString(StringResources.Message_OpenSettingsForViewing),
                                                Program.LanguageManager.GetString(StringResources.Message_OpenSettingsForViewingHeader));
                }
                else
                {
                    canOpen &= notify.ShowYesNo(Program.LanguageManager.GetString(StringResources.Message_OpenFormForViewing),
                                                Program.LanguageManager.GetString(StringResources.Message_OpenFormForViewingHeader));
                }
                editMode = false;
            }
            if (flags.HasFlag(FormFlags.SingleEditAlreadyOpened))
            {
                string text = string.Empty;

                if (isNew)
                {
                    switch (type)
                    {
                    case DocumentTypes.MillReleaseNote:
                        text = Program.LanguageManager.GetString(StringResources.MainWindow_CloseEditingReleaseNote);
                        break;

                    case DocumentTypes.ConstructionJoint:
                        text = Program.LanguageManager.GetString(StringResources.MainWindow_ConstructionJoint);
                        break;

                    default:
                        break;
                    }
                    notify.ShowWarning(text, "");
                    canOpen = false;
                }
                else
                {
                    switch (type)
                    {
                    case DocumentTypes.MillReleaseNote:
                        text = Program.LanguageManager.GetString(StringResources.MainWindow_OpenReleaseNoteReadOnly);
                        break;

                    case DocumentTypes.ConstructionJoint:
                        text = Program.LanguageManager.GetString(StringResources.MainWindow_OpenConstructionJointReadOnly);
                        break;

                    default:
                        break;
                    }
                    canOpen &= notify.ShowYesNo(text, "");
                    editMode = false;
                }
            }
            return(canOpen);
        }