Exemplo n.º 1
0
        internal JSONRPC_Output WorkflowRequestCreate(WorkflowRequest_DTO DTO, ADO Ado, string SamAccountName)
        {
            JSONRPC_Output response = new JSONRPC_Output();
            //Validation of parameters and user have been successful. We may now proceed to read from the database
            var adoWorkflowRequest = new WorkflowRequest_ADO();

            //check if this release already has a Current WorkflowRequest
            if (adoWorkflowRequest.IsCurrent(Ado, DTO.RlsCode))
            {
                //Can't create a comment so we can't proceed
                Log.Instance.Debug("Release already has a live Workflow, can't create");
                response.error = Label.Get("error.duplicate");
                return(response);
            }
            //Get Release
            Release_ADO releaseAdo = new Release_ADO(Ado);
            Release_DTO releaseDTO = Release_ADO.GetReleaseDTO(releaseAdo.Read(DTO.RlsCode, SamAccountName));

            if (releaseDTO == null)
            {
                Log.Instance.Debug("Release Code not found");
                response.error = Label.Get("error.duplicate");
                return(response);
            }
            Request_ADO adoRequest = new Request_ADO();
            Request_DTO dtoRequest = new Request_DTO
            {
                RlsCode = DTO.RlsCode
            };

            Release_ADO adoRelease = new Release_ADO(Ado);

            //We must validate the request, depending on the RequestCode and the current state of the Release
            switch (DTO.RqsCode)
            {
            case Constants.C_WORKFLOW_REQUEST_PUBLISH:

                if (!adoRelease.IsWip(dtoRequest.RlsCode))
                {
                    Log.Instance.Debug("The requested Release Code is not the WIP Release");
                    response.error = Label.Get("error.create");
                    return(response);
                }

                break;

            case Constants.C_WORKFLOW_REQUEST_PROPERTY:
                //Release must be CURRENT LIVE - RlsLiveFlag is live only between from and to dates
                if (!adoRelease.IsLiveNow(dtoRequest.RlsCode) && !adoRelease.IsLiveNext(dtoRequest.RlsCode))
                {
                    Log.Instance.Debug("Cannot create a Flag Request. The Release must be either current Live or Next Live");
                    response.error = Label.Get("error.create");
                    return(response);
                }
                break;

            case Constants.C_WORKFLOW_REQUEST_DELETE:
                //What about WIP? - not a workflow request but it is part of Release. It will have its own API.
                //Release must be LIVE NEXT, CURRENT LIVE or WIP
                if (!adoRelease.IsLiveNow(dtoRequest.RlsCode) && !adoRelease.IsLiveNext(dtoRequest.RlsCode) && !adoRelease.IsWip(dtoRequest.RlsCode))
                {
                    Log.Instance.Debug("Can't create a DELETE Request on a historical Release");
                    response.error = Label.Get("error.create");
                    return(response);
                }

                break;

            case Constants.C_WORKFLOW_REQUEST_ROLLBACK:

                //Release must be CURRENT LIVE OR NEXT LIVE and PREVIOUS must exist
                if ((!adoRelease.IsLiveNow(dtoRequest.RlsCode) && !adoRelease.IsLiveNext(dtoRequest.RlsCode)) || !adoRelease.HasPrevious(dtoRequest.RlsCode))
                {
                    Log.Instance.Debug("Can't create a ROLLBACK Request because (a) the Request is neither live nor pending-live or (b) there is no valid Release to roll back to.");
                    response.error = Label.Get("error.create");
                    return(response);
                }



                break;

            default:
                Log.Instance.Debug("Invalid Request Code");
                response.error = Label.Get("error.validation");
                return(response);
            }
            var adoComment = new Comment_ADO();

            int commentCode = adoComment.Create(Ado, DTO, SamAccountName);

            if (commentCode == 0)
            {
                //Can't create a comment so we can't proceed
                Log.Instance.Debug("Can't create a comment - WorkflowRequest create request refused");
                response.error = Label.Get("error.create");
                return(response);
            }

            DTO.CmmCode = commentCode;

            //Create the WorkflowRequest - and retrieve the newly created Id
            int newId = adoWorkflowRequest.Create(Ado, DTO, SamAccountName);

            if (newId == 0)
            {
                response.error = Label.Get("error.create");
                return(response);
            }



            response.data = JSONRPC.success;

            List <WorkflowRequest_DTO> dtoWrqList = adoWorkflowRequest.Read(Ado, DTO.RlsCode, true);

            if (dtoWrqList.Count == 1)
            {
                Email_BSO_NotifyWorkflow notify = new Email_BSO_NotifyWorkflow();
                try
                {
                    notify.EmailRequest(dtoWrqList[0], releaseDTO, Ado);
                }
                catch { }
            }
            else
            {
                Log.Instance.Error("Email failed");
            }

            return(response);
        }
Exemplo n.º 2
0
        internal JSONRPC_Output WorkflowResponseCreate(WorkflowResponse_DTO DTO, ADO Ado, string SamAccountName)
        {
            JSONRPC_Output response = new JSONRPC_Output();
            //We need to get the Request for notification purposes
            WorkflowRequest_ADO        adoWrq     = new WorkflowRequest_ADO();
            List <WorkflowRequest_DTO> dtoWrqList = adoWrq.Read(Ado, DTO.RlsCode, true);

            if (dtoWrqList.Count > 1)
            {
                //Multiple requests found for this release
                Log.Instance.Debug("More than one request found for this release ");
                response.error = Label.Get("error.create");
                return(response);
            }

            if (dtoWrqList.Count == 0)
            {
                //No request found for this release
                Log.Instance.Debug("No request found for this release ");
                response.error = Label.Get("error.create");
                return(response);
            }


            //Validation of parameters and user have been successful. We may now proceed to read from the database
            var adoWorkflowRequest = new WorkflowRequest_ADO();

            if (!adoWorkflowRequest.IsCurrent(Ado, DTO.RlsCode))
            {
                //No workflow found
                Log.Instance.Debug("No Live workflow found for this Release Code");
                response.error = Label.Get("error.create");
                return(response);
            }

            var adoWorkflowResponse = new WorkflowResponse_ADO();

            //If this is a Moderator, we need to check if the user is in the same group as the release and has approve rights

            Account_BSO acBso = new Account_BSO();

            if (acBso.IsModerator(Ado, SamAccountName))
            {
                var approveRlsList = adoWorkflowResponse.GetApproverAccess(Ado, SamAccountName, true, DTO.RlsCode);
                if (approveRlsList.data.Count == 0)
                {
                    Log.Instance.Debug("Insufficient access for a Moderator");
                    response.error = Label.Get("error.authentication");
                    return(response);
                }
            }

            //Check that there isn't already a WorkflowResponse for this Release

            if (adoWorkflowResponse.IsInUse(Ado, DTO))
            {
                //Duplicate Workflow exists
                Log.Instance.Debug("Workflow Response exists already, can't create");
                response.error = Label.Get("error.duplicate");
                return(response);
            }


            var adoComment = new Comment_ADO();

            int commentCode = adoComment.Create(Ado, DTO, SamAccountName);

            if (commentCode == 0)
            {
                //Can't create a comment so we can't proceed
                Log.Instance.Debug("Can't create comment - create WorkflowResponse refused");
                response.error = Label.Get("error.create");
                return(response);
            }

            DTO.CmmCode = commentCode;



            int createResponse = adoWorkflowResponse.Create(Ado, DTO, SamAccountName);

            if (createResponse == 0)
            {
                response.error = Label.Get("error.create");
                return(response);
            }

            //If this is a Reject then we must reset the workflow to stop it being current
            if (DTO.RspCode.Equals(Resources.Constants.C_WORKFLOW_STATUS_REJECT))
            {
                WorkflowRequest_DTO_Update dtoRequest = new WorkflowRequest_DTO_Update(DTO.RlsCode)
                {
                    WrqCurrentFlag = false
                };

                adoWorkflowRequest.Update(Ado, dtoRequest, SamAccountName);
            }

            response.data = JSONRPC.success;

            //Get Release
            Release_ADO releaseAdo = new Release_ADO(Ado);
            Release_DTO releaseDTO = Release_ADO.GetReleaseDTO(releaseAdo.Read(DTO.RlsCode, SamAccountName));

            Security.ActiveDirectory_DTO responseUser = new Security.ActiveDirectory_DTO()
            {
                CcnUsername = SamAccountName
            };
            Security.ActiveDirectory_ADO accAdo = new Security.ActiveDirectory_ADO();
            Security.Account_DTO_Read    accDto = new Security.Account_DTO_Read()
            {
                CcnUsername = responseUser.CcnUsername
            };

            DTO.ResponseAccount = accAdo.GetUser(Ado, accDto);

            Email_BSO_NotifyWorkflow notify = new Email_BSO_NotifyWorkflow();

            try
            {
                notify.EmailResponse(dtoWrqList[0], DTO, releaseDTO);
            }
            catch
            { }
            return(response);
        }