Beispiel #1
0
        private Boolean mCheckParallelFlow(object sender, UpdateFileLifeCycleStateCommandEventArgs e, FileArray[] mFileHistory, string[] mStates)
        {
            File[] mFiles = mFileHistory[0].Files;

            File maxFile = mFiles.First(n => n.MaxCkInVerNum == n.VerNum);

            if (maxFile.FileRev == null)
            {
                return(false);
            }

            // gather all the files in the revision and arrange them by version
            IEnumerable <File> filesInRev =
                from n in mFiles
                where n.FileRev.RevId == maxFile.FileRev.RevId
                orderby n.VerNum
                select n;

            File[] mfilesArray = filesInRev.ToArray(); //mFileHistory[0].Files; ?why do we need to sort before?
            if (mfilesArray.Length >= mStates.Length)
            {
                int iF = mfilesArray.Length - 1;
                System.Collections.Hashtable mHistoryStates = new System.Collections.Hashtable();

                for (int i = 0; i < mStates.Length; i++)
                {
                    File mFile = mfilesArray[iF - i];
                    if (mStates.Contains(mFile.FileLfCyc.LfCycStateName))
                    {
                        try
                        {
                            mHistoryStates.Add(mFile.FileLfCyc.LfCycStateName, i);
                            if (mHistoryStates.Count == mStates.Length)
                            {
                                return(true);
                            }
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }
                }
            }
            // if conditions before did not return already
            return(false);
        }
        void PostLifeCycleEvent(object sender, UpdateFileLifeCycleStateCommandEventArgs EventArgs)
        {
            IWebService           VaultSesession      = (IWebService)sender;
            String                VaultName           = VaultSesession.WebServiceManager.WebServiceCredentials.VaultName;
            WebServiceCredentials VaultCrednetials    = new WebServiceCredentials(VaultSesession);
            WebServiceManager     VaultServiceManager = new WebServiceManager(VaultCrednetials);

            List <File> AllFiles = new List <File>();
            List <long> FileIds  = new List <long>();
            List <long> LifeCycleDefninitions = new List <long>();
            List <long> FromLifecycleStates   = new List <long>();

            File FileObject = new File();

            foreach (long EachMasterId in EventArgs.FileMasterIds)
            {
                FileObject = new File();
                FileObject = VaultServiceManager.DocumentService.GetLatestFileByMasterId(EachMasterId);
                FileLfCyc FromLifeCycle = FileObject.FileLfCyc;

                AllFiles.Add(FileObject);
                FileIds.Add(FileObject.Id);
                LifeCycleDefninitions.Add(FromLifeCycle.LfCycDefId);
                FromLifecycleStates.Add(FromLifeCycle.LfCycStateId);
            }

            IEnumerable <long> UniqueLifeCycleDefinitionIds = LifeCycleDefninitions.Distinct();
            IEnumerable <long> UniqueFromLifecycleStateIds  = FromLifecycleStates.Distinct();
            IEnumerable <long> UniqueToLifecycleStateIds    = EventArgs.ToStateIds.Distinct();

            LfCycDef[] AllFileLifeCycleDefs = VaultServiceManager.LifeCycleService.GetLifeCycleDefinitionsByIds(UniqueLifeCycleDefinitionIds.ToArray());

            List <PropDefCond> ConditionArray = new List <PropDefCond>();

            // Get the Condition Arrays for the Selected Files by matching the from and to lifercycle state Ids
            foreach (LfCycDef EachDef in AllFileLifeCycleDefs)
            {
                LfCycTrans[] LifeCycleTransitions = EachDef.TransArray;

                foreach (LfCycTrans EachTran in LifeCycleTransitions)
                {
                    if (!(EachTran.RuleSet is null))
                    {
                        foreach (long FromLifeCycleStateId in UniqueFromLifecycleStateIds)
                        {
                            foreach (long UniqueToLifecycleStateId in UniqueToLifecycleStateIds)
                            {
                                foreach (long UniqueFromLifecycleStateId in UniqueFromLifecycleStateIds)
                                {
                                    if ((EachTran.FromId == UniqueFromLifecycleStateId) && (EachTran.ToId == UniqueToLifecycleStateId))
                                    {
                                        foreach (PropDefCond EachCond in EachTran.RuleSet.CondArray)
                                        {
                                            ConditionArray.Add(EachCond);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            // Get the Porerpty Def Ids from the Condition Array
            List <long> NonCompliantPropDefIds = new List <long>();

            foreach (PropDefCond EachCond in ConditionArray)
            {
                NonCompliantPropDefIds.Add(EachCond.PropDefId);
            }

            //Shortlist the Compliance Falgged Proerpty Ids
            IEnumerable <long> UniqueNonCompliantPropDefIds = NonCompliantPropDefIds.Distinct();

            // Getting the Prorepty VALUES for Compliance Marked Properties from the Selected Files
            PropInst[]  AllProeprtyInfo = VaultServiceManager.PropertyService.GetProperties("FILE", FileIds.ToArray(), UniqueNonCompliantPropDefIds.ToArray());
            List <long> ActualNonCompliantProperties = new List <long>();

            foreach (PropInst EachPropInfo in AllProeprtyInfo)
            {
                if (EachPropInfo.Val is null)
                {
                    ActualNonCompliantProperties.Add(EachPropInfo.PropDefId);
                }
            }

            // Shotlist the Array with Unqiue Property Ids
            IEnumerable <long> UniqueActualNonCompliantProperties = ActualNonCompliantProperties.Distinct();

            // Get the Proerpty Definition for these Ids
            PropDefInfo[] NonCompliantProperties = VaultServiceManager.PropertyService.GetPropertyDefinitionInfosByEntityClassId("FILE", UniqueActualNonCompliantProperties.ToArray());

            // Generate the Warning Message
            String PropertyNames = "";
            int    i             = 0;

            foreach (PropDefInfo EachInfo in NonCompliantProperties)
            {
                PropertyNames += EachInfo.PropDef.DispName + "\n";
                i++;
            }
            MessageBox.Show("Warning! The following Property(s) are Non-Compliant: \n\n" + PropertyNames, "Property Compliance Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
Beispiel #3
0
        void UpdateFileLifecycleStateEvents_Post(object sender, UpdateFileLifeCycleStateCommandEventArgs e)
        {
            IWebService service = sender as IWebService;

            if (service == null)
            {
                return;
            }
            WebServiceCredentials cred = new WebServiceCredentials(service);

            using (WebServiceManager mgr = new WebServiceManager(cred))
            {
                long currentUserId = mgr.SecurityService.SecurityHeader.UserId;

                FileArray[] mAllFileCollections = mgr.DocumentService.GetFilesByMasterIds(e.FileMasterIds);
                List <long> mTempMasterIds      = new List <long>();
                List <long> mTempReleaseStates  = new List <long>();

                int mNumberOfFullyApproved = 0;
                int N = 0;
                foreach (FileArray mFileCollection in mAllFileCollections)
                {
                    int numFileCol = mFileCollection.Files.Length;

                    //check that lifecycle type is of parallelApproval ? Yes -> continue
                    File mLatestFile   = mFileCollection.Files[mFileCollection.Files.Length - 1];
                    long mCurrentLfcID = mLatestFile.FileLfCyc.LfCycDefId;

                    if (!(mPWLfcycles.ContainsValue(mCurrentLfcID)))
                    {
                        return;
                    }
                    if (!(mApprovalLfcycle.Contains(mFileCollection.Files[numFileCol - 1].FileLfCyc.LfCycDefId)))
                    {
                        return;
                    }
                    //check that current latestversion is not released state ?
                    //No -> continue | Yes ->  add file to the list of released files
                    long mCurrentFinalStateID = (long)mPWFinalStates[mCurrentLfcID];
                    if (mLatestFile.FileLfCyc.LfCycStateId == mCurrentFinalStateID &&
                        mFileCollection.Files[numFileCol - 1].FileRev.MaxConsumeFileId == mFileCollection.Files[numFileCol - 1].FileRev.MaxFileId)
                    {
                        String mFileName = mFileCollection.Files[0].Name;
                        mReleasedFiles.Add(mFileName);
                        mPostRecursiv = true;
                    }

                    //check that the file(s) custom state is fully approved ? yes -> continue

                    long[] mReturnFiles = new long[mFileCollection.Files.Length];
                    Int32  i            = 0;

                    foreach (File mFile in mFileCollection.Files)
                    {
                        mReturnFiles[i] = mFile.Id;
                        i += 1;
                    }

                    FileArray[] mFileHistory = null;
                    mFileHistory   = mgr.DocumentService.GetFilesByHistoryType(mReturnFiles, FileHistoryTypeOptions.All);
                    mFullyApproved = mCheckParallelFlow(sender, e, mFileHistory, (string[])mPWStatesByName[mCurrentLfcID]);

                    if (mFullyApproved && mPostRecursiv == false)
                    {
                        mTempMasterIds.Add((long)mFileCollection.Files[0].MasterId);
                        mTempReleaseStates.Add((long)mPWFinalStates[mCurrentLfcID]);
                        mNumberOfFullyApproved += 1;
                    }
                    N += 1;
                } //for each file collection

                if (mTempMasterIds.Count > 0) // && mNumberOfFullyApproved == mFileMasterIds.Length)
                {
                    long[] mFileMasterIds = new long[mTempMasterIds.Count];
                    mReleaseStates = new long[mTempReleaseStates.Count];

                    mFileMasterIds = mTempMasterIds.ToArray();
                    mReleaseStates = mTempReleaseStates.ToArray();

                    mgr.DocumentServiceExtensions.UpdateFileLifeCycleStates(mFileMasterIds, mReleaseStates, "Engineering, Manufacturing and Project Manager approved; set to fully released.");
                    mPostRecursiv = false;
                }

                if (mReleasedFiles.Count > 0 && N == mAllFileCollections.Length && mPostRecursiv == false)
                {
                    Form mResultForm = new mResultForm();
                    Application.EnableVisualStyles();
                    mResultForm.Show();
                    DataGridView mGrid = new DataGridView();
                    mResultForm.Controls.Add(mGrid);
                    mGrid.AutoGenerateColumns = true;
                    mGrid.ColumnCount         = 1;
                    mGrid.Columns[0].Name     = "Name";
                    mGrid.Columns[0].Width    = 430;

                    foreach (var item in mReleasedFiles)
                    {
                        DataGridViewCell cellFileName = new DataGridViewTextBoxCell();
                        DataGridViewRow  tempRow      = new DataGridViewRow();
                        cellFileName.Value = item;
                        tempRow.Cells.Add(cellFileName);
                        mGrid.Rows.Add(tempRow);
                    }
                    mGrid.Width  = 404;
                    mGrid.Height = 215;
                    mGrid.Dock   = DockStyle.Bottom;
                    mGrid.ColumnHeadersVisible = true;
                    mGrid.EditMode             = DataGridViewEditMode.EditProgrammatically;
                    mGrid.AutoSizeColumnsMode  = DataGridViewAutoSizeColumnsMode.Fill;
                    mGrid.RowHeadersWidth      = 4;
                    mGrid.RowHeadersVisible    = false;
                    System.Drawing.Point mPoint = new System.Drawing.Point();
                    mPoint.X       = 0;
                    mPoint.Y       = 55;
                    mGrid.Location = mPoint;
                }
            } // using
        }
Beispiel #4
0
        void UpdateFileLifecycleStateEvents_GetRestrictions(object sender, UpdateFileLifeCycleStateCommandEventArgs e)
        {
            //PWLifecycleSettings mPWSettings = PWLifecycleSettings.Load();
            if ((mPWLfcycles.Count == 0))
            {
                mReadPWLfcs(sender);
            }

            mFullyApproved = false;
            mReleasedFiles = new List <string>();
            IWebService service = sender as IWebService;

            if (service == null)
            {
                return;
            }
            WebServiceCredentials cred = new WebServiceCredentials(service);

            using (WebServiceManager mgr = new WebServiceManager(cred))
            {
                long currentUserId = mgr.SecurityService.SecurityHeader.UserId;

                //FileArray mFileCollection; // = mgr.DocumentService.GetFilesByMasterIds(e.FileMasterIds);
                FileArray[] mAllFileCollections = mgr.DocumentService.GetFilesByMasterIds(e.FileMasterIds);

                int N = 0;
                foreach (FileArray mFileCollection in mAllFileCollections)
                {
                    //toDo: loop for all file collections, not only for [0]
                    int numFileCol = mFileCollection.Files.Length;

                    //check that lifecycle type is of parallelApproval ? Yes -> continue
                    File mLatestFile   = mFileCollection.Files[mFileCollection.Files.Length - 1];
                    long mCurrentLfcID = mLatestFile.FileLfCyc.LfCycDefId;

                    if (!(mPWLfcycles.ContainsValue(mCurrentLfcID)))
                    {
                        return;
                    }
                    if (!(mApprovalLfcycle.Contains(mFileCollection.Files[numFileCol - 1].FileLfCyc.LfCycDefId))) //(!(mLatestFile.FileLfCyc.LfCycDefId == mLfCycle.Id))
                    {
                        return;
                    }

                    //check that current latestversion is not released state ? No -> continue
                    long mCurrentFinalStateID = (long)mPWFinalStates[mCurrentLfcID];
                    if (mLatestFile.FileLfCyc.LfCycStateId == mCurrentFinalStateID)
                    {
                        return;
                    }
                    if (mReleaseStates.Contains(mLatestFile.FileLfCyc.LfCycStateId))
                    {
                        return;
                    }

                    //check that the file(s) toStateId is a released state or member of parallel approvals states?
                    //Yes -> continue | NOT -> raise restriction
                    //if (!(mApprovalStateIDs.Contains(e.ToStateIds[N])) || !(mReleaseStates.Contains(e.ToStateIds[N])))
                    //{
                    //    return;
                    //}

                    //check that the file(s) custom state is fully approved ? yes -> continue
                    long[] mReturnFiles = new long[mFileCollection.Files.Length];
                    Int32  i            = 0;

                    foreach (File mFile in mFileCollection.Files)
                    {
                        mReturnFiles[i] = mFile.Id;
                        i += 1;
                    }
                    FileArray[] mFileHistory = null;
                    mFileHistory   = mgr.DocumentService.GetFilesByHistoryType(mReturnFiles, FileHistoryTypeOptions.All);
                    mFullyApproved = mCheckParallelFlow(sender, e, mFileHistory, (string[])mPWStatesByName[mCurrentLfcID]);
                    //if (!(mFullyApproved) && mReleaseStates.Contains(e.ToStateIds[N]) &&
                    //    mParallelStates.Contains(mFileCollection.Files[numFileCol-2].FileLfCyc.LfCycStateName))
                    if (!(mFullyApproved) && (long)mPWFinalStates[mCurrentLfcID] == e.ToStateIds[N])
                    {
                        String mFileName = mFileCollection.Files[N].Name;
                        RestrictRelease(e, "Freigabe Bedingungen", mFileName, (string[])mPWStatesByName[mCurrentLfcID]);
                    }

                    N           += 1;
                    mReturnFiles = null;
                    mFileHistory = null;
                    mLatestFile  = null;
                } //foreach file collection
            }     //using
        }
Beispiel #5
0
        void UpdateFileLifecycleStateEvents_GetRestrictions(
            object sender, UpdateFileLifeCycleStateCommandEventArgs e)
        {
            try
            {
                IWebService service = sender as IWebService;
                if (service == null)
                {
                    return;
                }
                WebServiceCredentials cred = new WebServiceCredentials(service);
                //WebServiceCredentials_bugfix cred = new WebServiceCredentials_bugfix(service);
                using (WebServiceManager mgr = new WebServiceManager(cred))
                {
                    long        currentUserId  = mgr.SecurityService.SecurityHeader.UserId;
                    FileArray[] fileCollection = mgr.DocumentService.GetFilesByMasterIds(e.FileMasterIds);
                    //checks the lifecycle of the first file we are changing the state of.
                    CheckFile(fileCollection[0].Files);

                    LfCycDef[] defs = mgr.DocumentServiceExtensions.GetAllLifeCycleDefinitions();
                    //LfCycDef releaseProcess = defs.FirstOrDefault(
                    //    n => n.SysName == "Flexible Release Process");

                    LfCycDef releaseProcess = defs.FirstOrDefault(n => n.Id == relProcess);
                    //LfCycDef releaseProcess = defs.FirstOrDefault(n => n.SysName == "Basic Release Process");

                    LfCycState reviewState  = null;
                    LfCycState releaseState = null;

                    switch (releaseProcess.DispName)
                    {
                    case "Basic Release Process":
                        reviewState  = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "For Review");
                        releaseState = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "Released");
                        break;

                    case "Legacy Release Process":
                        reviewState  = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "For Review");
                        releaseState = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "Released");
                        break;

                    case "Project Release Process":
                        reviewState  = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "Internal Review");
                        releaseState = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "Customer Approval");
                        break;

                    case "Matrix Release Process":
                        reviewState  = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "For Review");
                        releaseState = releaseProcess.StateArray.FirstOrDefault(n => n.DispName == "Sign & Release");
                        break;

                    default:
                        break;
                    }

                    for (int i = 0; i < fileCollection.Length; i++)
                    {
                        CheckFile(fileCollection[i].Files, e.ToStateIds[i], currentUserId, reviewState, releaseState, e);
                    }
                }
            }
            catch { }
        }
 void UpdateFileLifecycleStateEvents_GetRestrictions(object sender, UpdateFileLifeCycleStateCommandEventArgs e)
 {
     RestrictOperation(e, "UpdateFileLifecycleState");
 }