/// <summary>
        /// Check user’s permission and administrator permission
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public ActionResult CTS310_Authority(CTS310_ScreenParameter param)
        {
            ObjectResultData res = new ObjectResultData();

            try {
                if (!CheckUserPermission(ScreenID.C_SCREEN_ID_SEARCH_INCIDENT))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                param.isAdmin = CheckUserPermission(ScreenID.C_SCREEN_ID_SEARCH_INCIDENT, FunctionID.C_FUNC_ID_SPECIAL_VIEW_CONFIDENTIAL);
                if (!param.isAdmin && C_ADMIN.Equals(param.screenMode))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_CONTRACT, MessageUtil.MessageList.MSG3152);
                    return(Json(res));
                }

                if (res.IsError)
                {
                    return(Json(res));
                }

                return(InitialScreenEnvironment <CTS310_ScreenParameter>(CTS310_Screen, param, res));
            } catch (Exception ex) {
                res.AddErrorMessage(ex);
                return(Json(res));
            }
        }
        /// <summary>
        /// Setting column and data style (color, and text)
        /// </summary>
        /// <param name="incident"></param>
        private void setColStyle(dtIncidentList incident)
        {
            if (incident.hasRespondingDetailFlag.HasValue
                //&& incident.hasRespondingDetailFlag.Value
                && incident.hasRespondingDetailFlag.Value != FlagType.C_FLAG_ON)
            {
                incident.OverNewImportant = "n";
            }

            //if ((incident.DueDateDeadLine.HasValue && incident.DueDateDeadLine.Value.CompareTo(System.DateTime.Today) < 0)
            if ((incident.DueDateDeadLine.HasValue && incident.DueDateDeadLine.Value.CompareTo(DateTime.Now) < 0) &&
                (!IncidentStatus.C_INCIDENT_STATUS_COMPLETE.Equals(incident.IncidentStatus)))
            {
                incident.OverNewImportant = "o";
            }

            if (incident.ImportanceFlag.HasValue && incident.ImportanceFlag.Value)
            {
                incident.Important = "i";
            }

            if ((incident.CorrEmpNo_EXT != null && incident.CorrEmpNo_EXT.IndexOf(CommonUtil.dsTransData.dtUserData.EmpNo) >= 0) ||
                (incident.ChiefEmpNo_EXT != null && incident.ChiefEmpNo_EXT.IndexOf(CommonUtil.dsTransData.dtUserData.EmpNo) >= 0) ||
                (incident.AsstEmpNo_EXT != null && incident.AsstEmpNo_EXT.IndexOf(CommonUtil.dsTransData.dtUserData.EmpNo) >= 0) ||
                (incident.ConChiefEmpNo_EXT != null && incident.ConChiefEmpNo_EXT.IndexOf(CommonUtil.dsTransData.dtUserData.EmpNo) >= 0)
                )
            {
                incident.isStatusYellow = true;
            }
            else
            {
                incident.isStatusYellow = false;
            }

            CTS310_ScreenParameter param = GetScreenObject <CTS310_ScreenParameter>();

            if (IncidentRole.C_INCIDENT_ROLE_CHIEF.Equals(param.SubObjectID) && CommonUtil.IsNullOrEmpty(incident.CorrEmpNo_EXT))
            {
                incident.isCorrespondentYellow = true;
            }
            else
            {
                incident.isCorrespondentYellow = false;
            }
        }
        public ActionResult CTS310()
        {
            CTS310_ScreenParameter param = GetScreenObject <CTS310_ScreenParameter>();

            ViewBag.IncidentOfficeCode = param.incidentOfficeCode;

            if (C_CORRESPONDENT.Equals(param.SubObjectID))
            {
                ViewBag.ScreenMode     = "Correspondent";
                ViewBag.DefaultRole    = IncidentRole.C_INCIDENT_ROLE_CORRESPONDENT;
                ViewBag.DefaultDueDate = IncidentSearchDuedate.C_INCIDENT_SEARCH_DUEDATE_2WEEKS;
                ViewBag.DefaultStatus  = IncidentSearchStatus.C_INCIDENT_SEARCH_STATUS_HANDLING;
            }
            else if (C_CHIEF.Equals(param.SubObjectID))
            {
                ViewBag.ScreenMode     = "Chief";
                ViewBag.DefaultRole    = IncidentRole.C_INCIDENT_ROLE_CHIEF;
                ViewBag.DefaultDueDate = IncidentSearchDuedate.C_INCIDENT_SEARCH_DUEDATE_2WEEKS;
                ViewBag.DefaultStatus  = IncidentSearchStatus.C_INCIDENT_SEARCH_STATUS_HANDLING;
            }
            else if (C_ADMIN.Equals(param.SubObjectID))
            {
                ViewBag.ScreenMode     = "Admin";
                ViewBag.DefaultRole    = IncidentRole.C_INCIDENT_ROLE_ADMINISTRATOR;
                ViewBag.DefaultDueDate = IncidentSearchDuedate.C_INCIDENT_SEARCH_DUEDATE_ALL;
                ViewBag.DefaultStatus  = IncidentSearchStatus.C_INCIDENT_SEARCH_STATUS_ALL;
            }
            else if (ScreenID.C_SCREEN_ID_SUMMARY_INCIDENT.Equals(param.callerID) && ViewBag.IncidentOfficeCode != null)
            {
                ViewBag.ScreenMode = "Office";
            }
            else
            {
                ViewBag.ScreenMode = "Search";
            }

            ViewBag.DueDate1Week  = IncidentSearchDuedate.C_INCIDENT_SEARCH_DUEDATE_1WEEK;
            ViewBag.DueDate2Week  = IncidentSearchDuedate.C_INCIDENT_SEARCH_DUEDATE_2WEEKS;
            ViewBag.DueDate1Month = IncidentSearchDuedate.C_INCIDENT_SEARCH_DUEDATE_1MONTH;

            ViewBag.UnImplemented = ContractStatus.C_CONTRACT_STATUS_BEF_START;
            ViewBag.Implemented   = ContractStatus.C_CONTRACT_STATUS_AFTER_START;
            ViewBag.StopService   = ContractStatus.C_CONTRACT_STATUS_STOPPING;
            ViewBag.Cancel        = ContractStatus.C_CONTRACT_STATUS_END + ","
                                    + "," + ContractStatus.C_CONTRACT_STATUS_CANCEL + ","
                                    + "," + ContractStatus.C_CONTRACT_STATUS_FIXED_CANCEL;

            ViewBag.AL          = ProductType.C_PROD_TYPE_AL + "," + ProductType.C_PROD_TYPE_RENTAL_SALE + "," + ProductType.C_PROD_TYPE_ONLINE;
            ViewBag.Sales       = ServiceType.C_SERVICE_TYPE_SALE;
            ViewBag.Maintenance = ProductType.C_PROD_TYPE_MA;
            ViewBag.SentryGuard = ProductType.C_PROD_TYPE_BE + "," + ProductType.C_PROD_TYPE_SG;

            ViewBag.Handling = "," + IncidentStatus.C_INCIDENT_STATUS_CONTROL_CHIEF_UNREGISTERED +
                               "," + IncidentStatus.C_INCIDENT_STATUS_HAVE_REPLY_FROM_CHIEF +
                               "," + IncidentStatus.C_INCIDENT_STATUS_HAVE_UNREAD_INSTRUCTION +
                               "," + IncidentStatus.C_INCIDENT_STATUS_INCIDENT_CHIEF_RESPONDING +
                               "," + IncidentStatus.C_INCIDENT_STATUS_NEW_REGISTER +
                               "," + IncidentStatus.C_INCIDENT_STATUS_REPORT +
                               "," + IncidentStatus.C_INCIDENT_STATUS_RESPONDING +
                               "," + IncidentStatus.C_INCIDENT_STATUS_WAIT_FOR_COMPLETE_APPROVAL +
                               "," + IncidentStatus.C_INCIDENT_STATUS_WAIT_FOR_INSTRUCTION +
                               ",";
            ViewBag.Complete = "," + IncidentStatus.C_INCIDENT_STATUS_COMPLETE + ",";

            return(View());
        }
        /// <summary>
        /// Search incident by criteria when click [Search] button on Incident list by role section
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public ActionResult CTS310_searchIncidentList(SearchIncidentCondition condition)
        {
            ObjectResultData res = new ObjectResultData();

            try {
                CommonUtil c = new CommonUtil();
                condition.ContractCode = c.ConvertContractCode(condition.ContractCode, CommonUtil.CONVERT_TYPE.TO_LONG);

                IIncidentHandler      hand         = ServiceContainer.GetService <IIncidentHandler>() as IIncidentHandler;
                List <dtIncidentList> incidentList = hand.SearchIncidentList(condition);

                foreach (var item in incidentList)
                {
                    // Set default
                    if (item.DueDateDeadLine.HasValue)
                    {
                        item.DueDateDeadLine = new DateTime(item.DueDateDeadLine.Value.Year,
                                                            item.DueDateDeadLine.Value.Month,
                                                            item.DueDateDeadLine.Value.Day,
                                                            23, 59, 59);

                        if (item.DueDateTime.HasValue)
                        {
                            item.DueDateDeadLine = new DateTime(item.DueDateDeadLine.Value.Year,
                                                                item.DueDateDeadLine.Value.Month,
                                                                item.DueDateDeadLine.Value.Day,
                                                                item.DueDateTime.Value.Hours,
                                                                item.DueDateTime.Value.Minutes,
                                                                item.DueDateTime.Value.Seconds);
                        }
                    }

                    item.IncidentNo = (String.IsNullOrEmpty(item.IncidentNo)) ? CommonUtil.GetLabelFromResource("Contract", "CTS310", "lblNA") : item.IncidentNo;
                }

                CommonUtil.MappingObjectLanguage <dtIncidentList>(incidentList);

                MiscTypeMappingList miscMapList = new MiscTypeMappingList();
                miscMapList.AddMiscType(incidentList.ToArray());
                ICommonHandler comh = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler;
                comh.MiscTypeMappingList(miscMapList);

                CTS310_ScreenParameter param = GetScreenObject <CTS310_ScreenParameter>();
                foreach (var incident in incidentList)
                {
                    if (CommonUtil.IsNullOrEmpty(incident.IncidentNo))
                    {
                        incident.IncidentNo = incident.IncidentID.ToString();
                    }
                    doHasIncidentPermission hasPermission = hand.HasIncidentPermission(incident.IncidentID);
                    incident.canViewConfidential = param.isAdmin || (!incident.ConfidentialFlag.Value) || hasPermission.ViewConfidentialIncidentFlag;
                    setColStyle(incident);
                }

                string xml = CommonUtil.ConvertToXml <dtIncidentList>(incidentList, "Contract\\CTS310", CommonUtil.GRID_EMPTY_TYPE.SEARCH);
                res.ResultData = xml;
            } catch (Exception ex) {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
        /// <summary>
        /// Search incident by role when change mode to "Admistrator List Mode", "Correspondent List Mode", "Office List Mode", or "Chief List Mode"
        /// </summary>
        /// <param name="conditionByRole"></param>
        /// <returns></returns>
        public ActionResult CTS310_searchByRole(SearchIncidentListByRoleCondition conditionByRole)
        {
            ObjectResultData res = new ObjectResultData();

            try {
                doIncidentListByRole condition = new doIncidentListByRole();
                condition.incidentRole   = conditionByRole.strIncidentRole;
                condition.incidentStatus = conditionByRole.strIncidentStatus;
                condition.empNo          = CommonUtil.dsTransData.dtUserData.EmpNo;
                if (conditionByRole.intAddDate.HasValue && conditionByRole.intAddDate.Value != 0)
                {
                    condition.dueDate = System.DateTime.Now.AddDays(conditionByRole.intAddDate.Value);
                }

                IIncidentHandler      hand         = ServiceContainer.GetService <IIncidentHandler>() as IIncidentHandler;
                List <dtIncidentList> incidentList = hand.GetIncidentListByRole(condition);
                CommonUtil.MappingObjectLanguage <dtIncidentList>(incidentList);

                MiscTypeMappingList miscMapList = new MiscTypeMappingList();
                miscMapList.AddMiscType(incidentList.ToArray());
                ICommonHandler comh = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler;
                comh.MiscTypeMappingList(miscMapList);

                List <tbs_IncidentPermissionConfiguration> permissions = hand.GetTbs_IncidentPermissionConfiguration("," + conditionByRole.strIncidentRole + ",");
                bool canViewConfidential = false;
                foreach (var permission in permissions)
                {
                    if (permission.ViewConfidentialIncidentFlag.HasValue && permission.ViewConfidentialIncidentFlag.Value)
                    {
                        canViewConfidential = true;
                        break;
                    }
                }

                CTS310_ScreenParameter param = GetScreenObject <CTS310_ScreenParameter>();
                foreach (var incident in incidentList)
                {
                    if (String.IsNullOrEmpty(incident.IncidentNo))
                    {
                        incident.IncidentNo = CommonUtil.GetLabelFromResource("Contract", "CTS310", "lblNA");
                    }

                    if (incident.DueDateDeadLine.HasValue)
                    {
                        incident.DueDateDeadLine = new DateTime(incident.DueDateDeadLine.Value.Year,
                                                                incident.DueDateDeadLine.Value.Month,
                                                                incident.DueDateDeadLine.Value.Day,
                                                                23, 59, 59);

                        if (incident.DueDateTime.HasValue)
                        {
                            incident.DueDateDeadLine = new DateTime(incident.DueDateDeadLine.Value.Year,
                                                                    incident.DueDateDeadLine.Value.Month,
                                                                    incident.DueDateDeadLine.Value.Day,
                                                                    incident.DueDateTime.Value.Hours,
                                                                    incident.DueDateTime.Value.Minutes,
                                                                    incident.DueDateTime.Value.Seconds);
                        }
                    }

                    if (CommonUtil.IsNullOrEmpty(incident.IncidentNo))
                    {
                        incident.IncidentNo = incident.IncidentID.ToString();
                    }

                    //Midify by Jutarat A. on 04032013
                    //incident.canViewConfidential = param.isAdmin || (!incident.ConfidentialFlag.Value) || canViewConfidential;
                    bool blConfidentialFlag = incident.ConfidentialFlag == null ? false : incident.ConfidentialFlag.Value;
                    incident.canViewConfidential = param.isAdmin || (!blConfidentialFlag) || canViewConfidential;
                    //End Modify

                    setColStyle(incident);
                }

                string xml = CommonUtil.ConvertToXml <dtIncidentList>(incidentList, "Contract\\CTS310", CommonUtil.GRID_EMPTY_TYPE.SEARCH);
                res.ResultData = xml;
            } catch (Exception ex) {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }