示例#1
0
        /// <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;
            }
        }