Exemple #1
0
        private ApiResult InformRequestorOfCrOutCome(string changeRequestId)
        {
            ApiResult apiResult = new ApiResult();

            try
            {
                ChangeRequest cr = ChangeRequest.QueryWithStoredProc("GetChangeRequestById", changeRequestId)[0];

                ApproverForChangeRequest[] pending = ApproverForChangeRequest.QueryWithStoredProc("CheckForCRRejection", changeRequestId);

                //Someone has rejected the Change Rejected
                if (pending.Length != 0)
                {
                    cr.ApprovalStatus = pending[0].Decision;
                    cr.ApprovalReason = $"CR NOT APPROVED BY APPROVER {pending[0].ApproverId}. Reason: {pending[0].Reason}";
                    cr.Save();
                    apiResult = NotificationsHandler.SendCrRejectedEmail(cr, cr.ApprovalReason);
                    return(apiResult);
                }

                cr.ApprovalStatus = "APPROVED";
                cr.ApprovalReason = "APPROVED BY EVERY APPROVER";
                cr.Save();
                apiResult = NotificationsHandler.SendCrApprovedEmail(cr);
                return(apiResult);
            }
            catch (Exception ex)
            {
                apiResult.StatusCode = Globals.FAILURE_STATUS_CODE;
                apiResult.StatusDesc = "EXCEPTION: " + ex.Message;
            }
            return(apiResult);
        }
Exemple #2
0
        internal ApiResult UpdateChangeRequestStatus(ApproverForChangeRequest link)
        {
            ApiResult apiResult = new ApiResult();

            try
            {
                if (!link.IsValidUpdate())
                {
                    apiResult.SetFailuresAsStatusInResponseFields(link.StatusDesc);
                    return(apiResult);
                }

                ApproverForChangeRequest old = ApproverForChangeRequest.QueryWithStoredProc("GetApproverToChangeRequest", link.ApproverId, link.ChangeRequestId).FirstOrDefault();

                if (old == null)
                {
                    link.Save();
                }
                else
                {
                    old.Decision = link.Decision;
                    old.Reason   = link.Reason;
                    old.Save();
                }

                apiResult.SetSuccessAsStatusInResponseFields();
                return(apiResult);
            }
            catch (Exception ex)
            {
                HandleError(nameof(UpdateChangeRequestStatus), "EXCEPTION", ex.Message);
                apiResult.SetFailuresAsStatusInResponseFields(ex.Message);
            }
            return(apiResult);
        }
Exemple #3
0
        internal ApiResult AssignApproverToChangeRequest(ApproverForChangeRequest link)
        {
            ApiResult apiResult = new ApiResult();

            try
            {
                link.HasEmailBeenSent = false;
                if (!link.IsValid())
                {
                    apiResult.SetFailuresAsStatusInResponseFields(link.StatusDesc);
                    return(apiResult);
                }

                ApproverForChangeRequest old = ApproverForChangeRequest.QueryWithStoredProc("GetApproverByID", link.ApproverId, link.ChangeRequestId, link.Role).FirstOrDefault();

                link.Id = old != null ? old.Id : link.Id;
                link.Save();


                ApiResult sendResult = NotificationsHandler.SendApproveCrEmail(link);

                if (sendResult.StatusCode != Globals.SUCCESS_STATUS_CODE)
                {
                    apiResult.PegPayID = link.Id.ToString();
                    apiResult.SetFailuresAsStatusInResponseFields("FAILED TO SEND EMAIL TO APPROVER: " + sendResult.StatusDesc);
                    return(apiResult);
                }

                apiResult.PegPayID = link.Id.ToString();
                apiResult.SetSuccessAsStatusInResponseFields();
                return(apiResult);
            }
            catch (Exception ex)
            {
                HandleError(nameof(AssignApproverToChangeRequest), "EXCEPTION", ex.Message);
                apiResult.SetFailuresAsStatusInResponseFields(ex.Message);
            }
            return(apiResult);
        }
Exemple #4
0
        internal ApiResult ApproveChangeRequest(string UserId, string ChangeRequestId, string Decision, string Reason)
        {
            ApiResult apiResult = new ApiResult();

            try
            {
                //look for the Approver based on the CR Id
                ApproverForChangeRequest old = ApproverForChangeRequest.QueryWithStoredProc("GetApproverByID", UserId, ChangeRequestId, "").FirstOrDefault();

                //Approver not found. This guy is hacking this shit
                if (old == null)
                {
                    apiResult.SetFailuresAsStatusInResponseFields($"NOT ABLE TO FIND CR {ChangeRequestId} FOR APPROVER {UserId}");
                    return(apiResult);
                }

                //save the decision made
                old.Decision = Decision;
                old.Reason   = Reason;
                old.Save();

                //automatically set the success fields
                //here SUCCESS simply means we have logged their response successfully
                apiResult.SetSuccessAsStatusInResponseFields();
                apiResult.StatusDesc = "SUCCESS: YOUR DECISION HAS BEEN SAVED SUCCESFULLY";

                //this dude has rejected the CR
                if (Decision == "REJECTED")
                {
                    //inform the requestor asynchronously
                    Task.Factory.StartNew(() =>
                    {
                        InformRequestorOfCrOutCome(ChangeRequestId);
                    });
                    return(apiResult);
                }

                //check if there is someone else left to approve
                ApproverForChangeRequest[] pending = ApproverForChangeRequest.QueryWithStoredProc("GetPendingApprovers");

                //no one else is left to approve
                if (pending.Length == 0)
                {
                    //inform the requestor asynchronously
                    Task.Factory.StartNew(() =>
                    {
                        InformRequestorOfCrOutCome(ChangeRequestId);
                    });
                    return(apiResult);
                }


                return(apiResult);
            }
            catch (Exception ex)
            {
                HandleError(nameof(AssignApproverToChangeRequest), "EXCEPTION", ex.Message);
                apiResult.SetFailuresAsStatusInResponseFields(ex.Message);
            }
            return(apiResult);
        }