/// <summary> /// This method is for checking the final CR Status for the respective ticket /// </summary> /// <param name="ticketId">1247</param> /// <returns>Final CR Status</returns> public int FinalCRStatus(int ticketId) { int finalTicketStatus = 0; try { List <Approvals> approvalList = ticketCntrl.GetApprovers(ticketId); bool IsEmieApproved = false; //Getting the rejected approval for the ticket. var rejectedApprovers = approvalList.Where(approver => approver.ApprovalState == Common.ApprovalState.Rejected).FirstOrDefault(); if (rejectedApprovers != null) { //If any approval is rejected, ticket status will be updated as rejected finalTicketStatus = (int)TicketStatus.Rejected; } else { //Getting the pending approval counts for the ticket approvals int pendingApproversCount = approvalList.Where(approver => approver.ApprovalState == Common.ApprovalState.Pending).Count(); //If the pending count is equal to the total approval count, set the ticket status if (pendingApproversCount == approvalList.Count) { finalTicketStatus = (int)TicketStatus.ApprovalPending; } else { //get all approvers who are EMIE champs var emieApproversList = approvalList.Where(approver => approver.Approver.UserRole.RoleId == 4).ToList(); //Checking whether any EMIE Champ from the EMIEChampionGroup has approved the ticket by getting the approved count var approvedEMIEApproversCount = emieApproversList.Where(approver => approver.ApprovalState == Common.ApprovalState.Approved).Count(); //If ticket is approved by any emieChamp, marked it as EmieApproved if (approvedEMIEApproversCount > 0) { IsEmieApproved = true; } //Checking if the ticket has only Emie Group approvals if (emieApproversList.Count == approvalList.Count) { if (IsEmieApproved) { finalTicketStatus = (int)TicketStatus.Approved; } else { finalTicketStatus = (int)TicketStatus.ApprovalPending; } } else { //getting Non-EmieGroup approvals var otherApprovalsList = approvalList.Where(approver => approver.Approver.UserRole.RoleId != 4).ToList(); //Getting the approved list count for the ticket int OtherApprovedCount = otherApprovalsList.Where(approver => approver.ApprovalState == Common.ApprovalState.Approved).Count(); //If all the approvals are approved and also Emie Champ has been approved, set ticket status approved if (OtherApprovedCount == otherApprovalsList.Count() && IsEmieApproved) { finalTicketStatus = (int)TicketStatus.Approved; } else if (OtherApprovedCount == otherApprovalsList.Count() || IsEmieApproved) { //If any one of them is not approved, set partially approved finalTicketStatus = (int)TicketStatus.PartiallyApproved; } else if (OtherApprovedCount > 0) { //If any one of them is not approved, set partially approved finalTicketStatus = (int)TicketStatus.PartiallyApproved; } else { //If none of the approvals are approved, set pending as the status finalTicketStatus = (int)TicketStatus.ApprovalPending; } } } } return(finalTicketStatus); } catch (Exception) { throw; } }