/// <summary>
        /// Confirm for edit billing target
        /// </summary>
        /// <param name="doBillingTarget"></param>
        /// <returns></returns>
        public ActionResult BLS020_ConfirmEditBillingTarget(dtTbt_BillingTargetForView doBillingTarget)
        {
            ObjectResultData       res                 = new ObjectResultData();
            CommonUtil             comUtil             = new CommonUtil();
            BLS020_ScreenParameter sParam              = GetScreenObject <BLS020_ScreenParameter>();
            tbt_BillingTarget      doTbt_BillingTarget = new tbt_BillingTarget();
            IBillingHandler        handler             = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;

            try
            {
                ///////// Check Suspending //////////
                ICommonHandler chandler = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler;

                if (chandler.IsSystemSuspending())
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0049);
                    return(Json(res));
                }
                if (ModelState.IsValid == false)
                {
                    res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
                    ValidatorUtil.BuildErrorMessage(res, this);
                    return(Json(res));
                }

                ///// Check permission //////////
                if (!CheckUserPermission(ScreenID.C_SCREEN_ID_EDIT_BILL_TARGET, FunctionID.C_FUNC_ID_OPERATE))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                ///////////////5.3 Validate Business
                //check duplicate
                List <tbt_BillingTarget> lst = new List <tbt_BillingTarget>();
                lst = handler.GetTbt_BillingTarget(null, comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG), doBillingTarget.BillingOfficeCode);
                if (lst.Count > 0)
                {
                    doTbt_BillingTarget = lst[0];
                }
                else
                {
                    doTbt_BillingTarget = null;
                }
                //doTbt_BillingTarget = handler.GetTbt_BillingTarget(null, comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG), doBillingTarget.BillingOfficeCode);
                doBillingTarget.BillingTargetCode = comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG) + "-" + doBillingTarget.BillingTargetNo;
                if (doTbt_BillingTarget != null &&
                    doTbt_BillingTarget.BillingTargetCode != doBillingTarget.BillingTargetCode)
                {
                    res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                    res.AddErrorMessage(MessageUtil.MODULE_BILLING,
                                        ScreenID.C_SCREEN_ID_REGIST_BILL_TARGET,
                                        MessageUtil.MODULE_BILLING,
                                        MessageUtil.MessageList.MSG6002,
                                        new string[] { doTbt_BillingTarget.BillingTargetCode },
                                        new string[] { "BillingClientCode", "BillingTargetNo", "BillingOfficeCode" });

                    return(Json(res));
                }
                //Update Billing target
                doTbt_BillingTarget = new tbt_BillingTarget();
                doTbt_BillingTarget.BillingTargetCode = doBillingTarget.BillingTargetCode;
                doTbt_BillingTarget.BillingTargetNo   = doBillingTarget.BillingTargetNo;
                doTbt_BillingTarget.BillingClientCode = comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG);
                doTbt_BillingTarget.BillingOfficeCode = doBillingTarget.BillingOfficeCode;
                doTbt_BillingTarget.ContactPersonName = doBillingTarget.ContactPersonName;
                doTbt_BillingTarget.Memo               = doBillingTarget.Memo;
                doTbt_BillingTarget.IssueInvTime       = doBillingTarget.IssueInvTime;
                doTbt_BillingTarget.IssueInvMonth      = doBillingTarget.IssueInvMonth;
                doTbt_BillingTarget.IssueInvDate       = doBillingTarget.IssueInvDate;
                doTbt_BillingTarget.InvFormatType      = doBillingTarget.InvFormatType;
                doTbt_BillingTarget.SignatureType      = doBillingTarget.SignatureType;
                doTbt_BillingTarget.DocLanguage        = doBillingTarget.DocLanguage;
                doTbt_BillingTarget.ShowDueDate        = doBillingTarget.ShowDueDate;
                doTbt_BillingTarget.IssueReceiptTiming = doBillingTarget.IssueReceiptTiming;
                doTbt_BillingTarget.ShowAccType        = doBillingTarget.ShowAccType;
                doTbt_BillingTarget.WhtDeductionType   = doBillingTarget.WhtDeductionType;
                doTbt_BillingTarget.ShowIssueDate      = doBillingTarget.ShowIssueDate;
                doTbt_BillingTarget.PayByChequeFlag    = doBillingTarget.PayByChequeFlag;
                doTbt_BillingTarget.ShowInvWHTFlag     = doBillingTarget.ShowInvWHTFlag;
                doTbt_BillingTarget.SeparateInvType    = doBillingTarget.SeparateInvType;
                doTbt_BillingTarget.SuppleInvAddress   = doBillingTarget.SuppleInvAddress;

                // tt
                doTbt_BillingTarget.RealBillingClientNameEN    = doBillingTarget.RealBillingClientNameEN;
                doTbt_BillingTarget.RealBillingClientNameLC    = doBillingTarget.RealBillingClientNameLC;
                doTbt_BillingTarget.RealBillingClientAddressEN = doBillingTarget.RealBillingClientAddressEN;
                doTbt_BillingTarget.RealBillingClientAddressLC = doBillingTarget.RealBillingClientAddressLC;

                // Akat K. 2014-05-23 : update PrintAdvanceDate
                doTbt_BillingTarget.PrintAdvanceDate = doBillingTarget.PrintAdvanceDate;

                using (TransactionScope scope = new TransactionScope())
                {
                    handler.UpdateTbt_BillingTarget(doTbt_BillingTarget);

                    // Akat K. 2014-05-21 also update billing office
                    handler.UpdateDebtTracingOffice(doBillingTarget.BillingTargetCode, doBillingTarget.BillingOfficeCode);

                    scope.Complete();
                }
                sParam.doBillingTarget     = doBillingTarget;
                sParam.doTbt_BillingTarget = doTbt_BillingTarget;
                res.ResultData             = sParam.doBillingTarget;
                res.MessageType            = MessageModel.MESSAGE_TYPE.INFORMATION_OK;
                res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0046, null, null);
                return(Json(res));
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
        /// <summary>
        /// Register billing target
        /// </summary>
        /// <param name="sValid"></param>
        /// <param name="doBillingTarget"></param>
        /// <returns></returns>
        public ActionResult BLS020_RegisterBillingTarge(BLS020_ScreenInputValidate sValid, dtTbt_BillingTargetForView doBillingTarget)
        {
            ObjectResultData       res                 = new ObjectResultData();
            CommonUtil             comUtil             = new CommonUtil();
            BLS020_ScreenParameter sParam              = GetScreenObject <BLS020_ScreenParameter>();
            tbt_BillingTarget      doTbt_BillingTarget = new tbt_BillingTarget();
            IBillingHandler        handler             = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;

            try
            {
                ///////// Check Suspending //////////
                ICommonHandler chandler = ServiceContainer.GetService <ICommonHandler>() as ICommonHandler;

                if (chandler.IsSystemSuspending())
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0049);
                    return(Json(res));
                }
                if (ModelState.IsValid == false)
                {
                    res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
                    ValidatorUtil.BuildErrorMessage(res, this);
                    return(Json(res));
                }

                ///// Check permission //////////
                if (!CheckUserPermission(ScreenID.C_SCREEN_ID_EDIT_BILL_TARGET, FunctionID.C_FUNC_ID_OPERATE))
                {
                    res.AddErrorMessage(MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0053);
                    return(Json(res));
                }

                ///////////////5.3 Validate Business
                if (CommonUtil.IsNullOrEmpty(doBillingTarget.IssueInvMonth))
                {
                    doBillingTarget.IssueInvMonth = 0;
                }
                if (doBillingTarget.IssueInvMonth > 60)
                {
                    res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
                    res.AddErrorMessage(MessageUtil.MODULE_BILLING,
                                        ScreenID.C_SCREEN_ID_REGIST_BILL_TARGET,
                                        MessageUtil.MODULE_BILLING,
                                        MessageUtil.MessageList.MSG6001,
                                        new string[] { "lblIssueInvoiceTiming" },
                                        new string[] { "IssueInvMonth" });
                    return(Json(res));
                }

                //check duplicate
                List <tbt_BillingTarget> lst = new List <tbt_BillingTarget>();
                lst = handler.GetTbt_BillingTarget(null, comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG), doBillingTarget.BillingOfficeCode);
                if (lst.Count > 0)
                {
                    doTbt_BillingTarget = lst[0];
                }
                else
                {
                    doTbt_BillingTarget = null;
                }
                //doTbt_BillingTarget = handler.GetTbt_BillingTarget(null, comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG), doBillingTarget.BillingOfficeCode);
                doBillingTarget.BillingTargetCode = comUtil.ConvertBillingClientCode(doBillingTarget.BillingClientCode, CommonUtil.CONVERT_TYPE.TO_LONG) + "-" + doBillingTarget.BillingTargetNo;
                if (doTbt_BillingTarget != null &&
                    doTbt_BillingTarget.BillingTargetCode != doBillingTarget.BillingTargetCode)
                {
                    res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
                    // res.AddErrorMessage(MessageUtil.MODULE_BILLING, MessageUtil.MessageList.MSG6002, new string[] { doTbtBillingTarget.BillingTargetCode }, new string[] { "BillingClientCodeView" });
                    res.AddErrorMessage(MessageUtil.MODULE_BILLING,
                                        ScreenID.C_SCREEN_ID_REGIST_BILL_TARGET,
                                        MessageUtil.MODULE_BILLING,
                                        MessageUtil.MessageList.MSG6002,
                                        new string[] { comUtil.ConvertBillingTargetCode(doTbt_BillingTarget.BillingTargetCode, CommonUtil.CONVERT_TYPE.TO_SHORT) },
                                        new string[] { "BillingClientCode", "BillingTargetNo", "BillingOfficeCode" });

                    return(Json(res));
                }
                res.ResultData = true;
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }