/// <summary>
        /// Check system suspending and user’s permission
        /// </summary>
        /// <param name="sParam"></param>
        /// <returns></returns>
        public ActionResult CTS210_Authority(CTS210_ScreenParameter sParam)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                //CheckSystemStatus
                if (CheckIsSuspending(res) == true)
                {
                    return(Json(res));
                }

                //Check screen permission
                if (CheckUserPermission(ScreenID.C_SCREEN_ID_ISSUE_CONTRACT_DOCUMENT, FunctionID.C_FUNC_ID_OPERATE) == false)
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                sParam = new CTS210_ScreenParameter();
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
                return(Json(res));
            }

            return(InitialScreenEnvironment <CTS210_ScreenParameter>("CTS210", sParam, res));
        }
        /// <summary>
        /// Generate contract document when click [Download] button on Document result list at ‘Document list/Specify document’ section
        /// </summary>
        /// <param name="iDocID"></param>
        /// <returns></returns>
        public ActionResult CTS210_DownloadDocumentReport(int iDocID)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                //Check suspending
                if (CheckIsSuspending(res) == true)
                {
                    return(Json(res));
                }

                //Check screen permission
                if (CheckUserPermission(ScreenID.C_SCREEN_ID_ISSUE_CONTRACT_DOCUMENT, FunctionID.C_FUNC_ID_OPERATE) == false)
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }


                CTS210_ScreenParameter sParam = GetScreenObject <CTS210_ScreenParameter>();
                if (sParam.dsContractDoc != null)
                {
                    if (sParam.dsContractDoc.dtContractDocList != null)
                    {
                        foreach (dtContractDoc data in sParam.dsContractDoc.dtContractDocList)
                        {
                            if (data.DocID == iDocID)
                            {
                                if (data.IssuedDate == null)
                                {
                                    sParam.StreamReport = DownloadDocument_CTS210(data.DocID, data.DocNo, data.DocumentCode, data.UpdateDate);
                                    if (sParam.StreamReport != null)
                                    {
                                        res.ResultData = true;
                                    }
                                }
                                else
                                {
                                    sParam.StreamReport = ReDownloadDocument_CTS210(data.DocNo, data.DocumentCode, data.DocumentType); //Modify (Add strDocumentType) by Jutarat A. on 11112013
                                    if (sParam.StreamReport != null)
                                    {
                                        res.ResultData = false;
                                    }
                                }
                            }
                        }

                        UpdateScreenObject(sParam);
                    }
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
        /// <summary>
        /// Open PDF file of contract document
        /// </summary>
        /// <param name="k"></param>
        /// <returns></returns>
        public ActionResult CTS210_OpenContractDocument(string k)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                CTS210_ScreenParameter sParam = GetScreenObject <CTS210_ScreenParameter>(k);
                if (sParam.StreamReport != null)
                {
                    return(File(sParam.StreamReport, "application/pdf"));
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
        /// <summary>
        /// Get data of Contract Information
        /// </summary>
        /// <returns></returns>
        public ActionResult CTS210_GetContractInfo()
        {
            ObjectResultData res = new ObjectResultData();
            List <dtRentalContractBasicForView> dtRentalContractBasicForViewList;
            List <dtSaleContractBasicForView>   dtSaleContractBasicForViewList;

            try
            {
                CTS210_ScreenParameter sParam = GetScreenObject <CTS210_ScreenParameter>();
                if (sParam.dsContractDoc != null)
                {
                    dtRentalContractBasicForViewList = sParam.dsContractDoc.dtRentalContractBasicForViewList;
                    dtSaleContractBasicForViewList   = sParam.dsContractDoc.dtSaleContractBasicForViewList;

                    dtRentalContractBasicForView dtContractInfo = new dtRentalContractBasicForView();
                    if (dtRentalContractBasicForViewList != null && dtRentalContractBasicForViewList.Count > 0)
                    {
                        dtContractInfo.ContractTargetNameEN = dtRentalContractBasicForViewList[0].ContractTargetNameEN;
                        dtContractInfo.ContractTargetNameLC = dtRentalContractBasicForViewList[0].ContractTargetNameLC;
                        dtContractInfo.SiteNameEN           = dtRentalContractBasicForViewList[0].SiteNameEN;
                        dtContractInfo.SiteNameLC           = dtRentalContractBasicForViewList[0].SiteNameLC;

                        res.ResultData = dtContractInfo;
                    }
                    else if (dtSaleContractBasicForViewList != null && dtSaleContractBasicForViewList.Count > 0)
                    {
                        dtContractInfo.ContractTargetNameEN = dtSaleContractBasicForViewList[0].ProductNameEN;
                        dtContractInfo.ContractTargetNameLC = dtSaleContractBasicForViewList[0].ProductNameLC;
                        dtContractInfo.SiteNameEN           = dtSaleContractBasicForViewList[0].SiteNameEN;
                        dtContractInfo.SiteNameLC           = dtSaleContractBasicForViewList[0].SiteNameLC;

                        res.ResultData = dtContractInfo;
                    }
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
        /// <summary>
        /// Reload data to DocumentList grid
        /// </summary>
        /// <param name="iDocID"></param>
        /// <returns></returns>
        public ActionResult CTS210_RefreshDocumentReport(int iDocID)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                CTS210_ScreenParameter sParam = GetScreenObject <CTS210_ScreenParameter>();
                if (sParam.dsContractDoc != null)
                {
                    if (sParam.dsContractDoc.dtContractDocList != null)
                    {
                        foreach (dtContractDoc data in sParam.dsContractDoc.dtContractDocList)
                        {
                            if (data.DocID == iDocID)
                            {
                                if (data.IssuedDate == null)
                                {
                                    data.IssuedDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                                    data.DocStatus  = ContractDocStatus.C_CONTRACT_DOC_STATUS_ISSUED;
                                }
                            }
                        }

                        UpdateScreenObject(sParam);

                        List <CTS210_DocumentListGridData> resultGridData = CommonUtil.ClonsObjectList <dtContractDoc, CTS210_DocumentListGridData>(sParam.dsContractDoc.dtContractDocList);
                        SetEnableDownload_CTS210(resultGridData);

                        res.ResultData = CommonUtil.ConvertToXml <CTS210_DocumentListGridData>(resultGridData, "Contract\\CTS210", CommonUtil.GRID_EMPTY_TYPE.SEARCH);
                    }
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
        /// <summary>
        /// Get data to DocumentList grid
        /// </summary>
        /// <param name="cond"></param>
        /// <returns></returns>
        public ActionResult CTS210_GetDocumentListData(CTS210_SpecifyContractCodeCondition cond)
        {
            ObjectResultData res = new ObjectResultData();

            res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;

            IContractDocumentHandler         contDocHandler;
            dsContractDocForIssue            dsContractDoc = new dsContractDocForIssue();
            List <dtContractDoc>             gridDataList  = new List <dtContractDoc>();
            CTS210_ValidateContractCondition validateContractCondition;

            try
            {
                //Validate required field
                validateContractCondition = CommonUtil.CloneObject <CTS210_SpecifyContractCodeCondition, CTS210_ValidateContractCondition>(cond);
                ValidatorUtil.BuildErrorMessage(res, new object[] { validateContractCondition }, null, false);
                if (res.IsError)
                {
                    return(Json(res));
                }

                //Get contract document data
                CommonUtil comUtil                = new CommonUtil();
                string     strContractCode        = comUtil.ConvertContractCode(cond.ContractCode, CommonUtil.CONVERT_TYPE.TO_LONG);
                string     strQuotationTargetCode = comUtil.ConvertQuotationTargetCode(cond.ContractCode, CommonUtil.CONVERT_TYPE.TO_LONG);

                contDocHandler = ServiceContainer.GetService <IContractDocumentHandler>() as IContractDocumentHandler;
                dsContractDoc  = contDocHandler.GetContractDocForIssue(strContractCode, strQuotationTargetCode, cond.OCC);

                //Check existing of returned data
                if (dsContractDoc != null && dsContractDoc.dtContractDocList != null && dsContractDoc.dtContractDocList.Count == 0)
                {
                    //res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0001);

                    res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;

                    //Check existing contract document
                    if (contDocHandler.IsContractDocExist(strContractCode, strQuotationTargetCode, null, null))
                    {
                        res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0011, new string[] { cond.OCC }, new string[] { "txtOccAlphabet" });
                    }
                    else
                    {
                        res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0011, new string[] { cond.ContractCode }, new string[] { "txtContractQuotTgtCode" });
                    }

                    return(Json(res));
                }
                else
                {
                    List <dtContractDoc> contactDocTemp = (from t in dsContractDoc.dtContractDocList
                                                           orderby t.CreateDate
                                                           select t).ToList <dtContractDoc>();

                    dsContractDoc.dtContractDocList = contactDocTemp;
                }

                List <CTS210_DocumentListGridData> resultGridData = new List <CTS210_DocumentListGridData>();
                if (dsContractDoc.dtContractDocList != null && dsContractDoc.dtContractDocList.Count > 0)
                {
                    resultGridData = CommonUtil.ClonsObjectList <dtContractDoc, CTS210_DocumentListGridData>(dsContractDoc.dtContractDocList);
                    SetEnableDownload_CTS210(resultGridData);
                }

                CTS210_ScreenParameter sParam = GetScreenObject <CTS210_ScreenParameter>();
                if (sParam.dsContractDoc == null)
                {
                    sParam.dsContractDoc = new dsContractDocForIssue();
                }

                sParam.dsContractDoc = dsContractDoc;
                UpdateScreenObject(sParam);

                res.ResultData = CommonUtil.ConvertToXml <CTS210_DocumentListGridData>(resultGridData, "Contract\\CTS210", CommonUtil.GRID_EMPTY_TYPE.SEARCH);
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }