예제 #1
0
 /// <summary>
 /// Validate business of specific invoice information
 /// </summary>
 /// <param name="doInvoice">invoice information</param>
 /// <param name="validator"></param>
 private void ICS050_ValidateInvoiceBusiness(doInvoice doInvoice, ValidatorUtil validator)
 {
     if (doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CANCEL ||
         doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PAYMENT_MATCH_CANCELLED ||
         doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_FAIL ||
         doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_FAIL)
     {
         //Payment status not in (08,18,28,38)
         validator.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7089
                                   , "InvoiceNo", doInvoice.InvoiceNo);
     }
     else if (doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_BILLING_EXEMPTION)
     {
         //Payment status not in (19)
         validator.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7090
                                   , "InvoiceNo", doInvoice.InvoiceNo);
     }
     else
     {
         IIncomeHandler incomeHandler = ServiceContainer.GetService <IIncomeHandler>() as IIncomeHandler;
         bool           isIssued      = incomeHandler.CheckInvoiceIssuedReceipt(doInvoice.InvoiceNo, doInvoice.InvoiceOCC);
         if (isIssued)
         {
             validator.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7009
                                       , "InvoiceNo", doInvoice.InvoiceNo);
         }
     }
 }
        /// <summary>
        /// Validate business of specific invoice information
        /// </summary>
        /// <param name="doInvoice">invoice information</param>
        /// <param name="res"></param>
        private void ICS040_ValidateInvoiceBusiness(doInvoice doInvoice, ObjectResultData res)
        {
            if (doInvoice == null)
            {
                return;
            }

            ValidatorUtil validator = new ValidatorUtil();

            if ((doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_INV_AUTO_CREDIT ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_AUTO_INV_BANK ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK) == false)
            {
                validator.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7007
                                          , "InvoiceNo", doInvoice.InvoiceNo);
                ValidatorUtil.BuildErrorMessage(res, validator, null);
            }
            //else if (doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_BILLING_EXEMPTION)
            //{
            //    validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS040"
            //        , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7088
            //        , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
            //    ValidatorUtil.BuildErrorMessage(res, validator, null);
            //}
        }
예제 #3
0
        /// <summary>
        /// Force issue receipt pdf report of specific invoice information
        /// </summary>
        /// <param name="doInvoice">invoice information</param>
        /// <param name="issueInvoiceDate">issue invoice date</param>
        /// <param name="validator"></param>
        /// <returns></returns>
        public string ICS050_IssueReceipt(doInvoice doInvoice, DateTime issueInvoiceDate, ValidatorUtil validator)
        {
            //Issue receipt
            IIncomeHandler incomeHandler = ServiceContainer.GetService <IIncomeHandler>() as IIncomeHandler;
            tbt_Receipt    doReceipt     = incomeHandler.ForceIssueReceipt(doInvoice, issueInvoiceDate);

            if (doReceipt != null)
            {
                IIncomeDocumentHandler incomeDocumentHandler = ServiceContainer.GetService <IIncomeDocumentHandler>() as IIncomeDocumentHandler;
                //ICR010 Receipt report
                //string pdfFilePath = string.Empty;
                // Comment by Jirawat Jannet @ 2016-10-17
                string pdfFilePath = incomeDocumentHandler.GenerateICR010FilePath(doReceipt.ReceiptNo
                                                                                  , CommonUtil.dsTransData.dtUserData.EmpNo
                                                                                  , CommonUtil.dsTransData.dtOperationData.ProcessDateTime);

                if (doInvoice.BillingTypeCode == BillingType.C_BILLING_TYPE_DEPOSIT &&
                    doReceipt.AdvanceReceiptStatus == AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_NOT)
                {
                    IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
                    bool            isSuccess      = billingHandler.UpdateReceiptNoDepositFee(doInvoice.InvoiceNo, doReceipt.ReceiptNo
                                                                                              , CommonUtil.dsTransData.dtUserData.EmpNo
                                                                                              , CommonUtil.dsTransData.dtOperationData.ProcessDateTime);

                    if (!isSuccess)
                    {
                        //Cannot issue receipt
                        validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS050"
                                                  , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7010
                                                  , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
                        return(null);
                    }
                }

                //Success
                return(pdfFilePath);
            }
            else
            {
                validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS050"
                                          , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7010
                                          , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
                return(null);
            }
        }
        /// <summary>
        /// Retrieve invoice information of specific invoice no.
        /// </summary>
        /// <param name="invoiceNo">invoice no.</param>
        /// <param name="res"></param>
        /// <returns></returns>
        private doInvoice ICS040_GetInvoice(string invoiceNo, ObjectResultData res)
        {
            IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
            ValidatorUtil   validator      = new ValidatorUtil();
            doInvoice       doInvoice      = billingHandler.GetInvoice(invoiceNo);

            if (doInvoice == null)
            {
                validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS040"
                                          , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7003
                                          , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");

                ValidatorUtil.BuildErrorMessage(res, validator, null);
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                return(null);
            }
            return(doInvoice);
        }
        //ICP010
        /// <summary>
        /// Function for issue a receipt for paid invoice (after payment matched) (Used by batch).
        /// </summary>
        /// <param name="doInvoice">invoice information</param>
        /// <param name="receiptDate">receipt date</param>
        /// <param name="batchId">batch id</param>
        /// <param name="batchDate">batch datetime</param>
        /// <returns></returns>
        public tbt_Receipt IssueReceipt(doInvoice doInvoice, DateTime receiptDate, string batchId, DateTime batchDate, bool isWriteTransLog = true) //Add (isWriteTransLog) by Jutarat A. on 07062013
        {
            IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
            //call running no for batch process
            string receiptNo = billingHandler.GetNextRunningNoByTypeMonthYear(RunningType.C_RUNNING_TYPE_RECEIPT, batchId, receiptDate /*batchDate*/); //Edit by Patcharee T. For issue Reciept no. in month of receiptDate 11-Jun-2013

            //Determin receipt issue flag
            bool receiptIssueFlag = doInvoice.IssueReceiptTiming == IssueRecieptTime.C_ISSUE_REC_TIME_NOT_ISSUE ? false : true;

            tbt_Receipt doReceipt = new tbt_Receipt()
            {
                ReceiptNo            = receiptNo,
                ReceiptDate          = receiptDate,
                BillingTargetCode    = doInvoice.BillingTargetCode,
                InvoiceNo            = doInvoice.InvoiceNo,
                InvoiceOCC           = doInvoice.InvoiceOCC,
                ReceiptAmount        = (doInvoice.PaidAmountIncVat ?? 0) + (doInvoice.RegisteredWHTAmount ?? 0),
                AdvanceReceiptStatus = AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_NOT,
                ReceiptIssueFlag     = receiptIssueFlag,
                CancelFlag           = false,
                CreateDate           = batchDate,
                CreateBy             = batchId,
                UpdateDate           = batchDate,
                UpdateBy             = batchId
            };
            List <tbt_Receipt> receipts = new List <tbt_Receipt>();

            receipts.Add(doReceipt);
            List <tbt_Receipt> result = this.InsertTbt_Receipt(receipts, isWriteTransLog); //Add (isWriteTransLog) by Jutarat A. on 07062013

            if (result != null && result.Count > 0)
            {
                bool isSuccess = billingHandler.UpdateReceiptNo(doInvoice.InvoiceNo, doInvoice.InvoiceOCC, receiptNo, batchId, batchDate);
                //Success
                if (isSuccess)
                {
                    return(result[0]);
                }
            }

            //all fail, No insert data
            return(null);
        }
예제 #6
0
        /// <summary>
        /// Event when click confirm cancel button, this function will cancel the issued receipt information of specific receipt no. to the system.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public ActionResult ICS060_cmdConfirmCancel(ICS060_ScreenParameter param)
        {
            ObjectResultData res = new ObjectResultData();

            res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
            doReceipt doReceipt;

            try
            {
                if (IsSuspend(res))
                {
                    return(Json(res));
                }

                if (!ICS060_IsAllowOperate(res))
                {
                    return(Json(res));
                }


                //Validate receipt business
                doReceipt = ICS060_ValidateReceiptBusiness(param, res);
                if (res.IsError || doReceipt == null)
                {
                    return(Json(res));
                }


                //Connect db
                using (TransactionScope scope = new TransactionScope())
                {
                    try
                    {
                        //Cancel receipt
                        IIncomeHandler incomeHandler = ServiceContainer.GetService <IIncomeHandler>() as IIncomeHandler;

                        bool isSuccess = incomeHandler.CancelReceipt(doReceipt);
                        if (!isSuccess)
                        {
                            throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7031, null);
                        }

                        IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
                        //Get Invoice
                        doInvoice doInvoice = billingHandler.GetInvoice(doReceipt.InvoiceNo);
                        if (doInvoice == null)
                        {
                            throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7031, null);
                        }

                        //string invoiceType = billingHandler.GetInvoiceType(doInvoice.BillingTypeCode);
                        //if ((invoiceType == InvoiceType.C_INVOICE_TYPE_DEPOSIT || invoiceType == InvoiceType.C_INVOICE_TYPE_SERVICE)
                        //    && (doInvoice.IssueReceiptTiming != IssueRecieptTime.C_ISSUE_REC_TIME_SAME_INV
                        //        || (doInvoice.IssueReceiptTiming == IssueRecieptTime.C_ISSUE_REC_TIME_SAME_INV
                        //             && doInvoice.PaymentMethod == PaymentMethod.C_PAYMENT_METHOD_MESSENGER_TRANSFER)))
                        bool isIssuedTaxInvoice = billingHandler.CheckInvoiceIssuedTaxInvoice(doReceipt.InvoiceNo, doReceipt.InvoiceOCC);
                        if (isIssuedTaxInvoice == true)
                        {
                            if (param.CancelMethod == CancelReceiptTarget.C_CANCEL_TAX_INVOICE_RECEIPT)
                            {
                                //Cancel tax invoice (Update cancel flag only)
                                isSuccess = billingHandler.CancelTaxInvoice(doReceipt.TaxInvoiceNo);
                                if (!isSuccess)
                                {
                                    throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7032, null);
                                }
                            }
                            else
                            {
                                //Clear receipt no.
                                isSuccess = billingHandler.UpdateReceiptNo(doReceipt.InvoiceNo, doReceipt.InvoiceOCC, null);
                                if (!isSuccess)
                                {
                                    throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7032, null);
                                }
                            }
                        }


                        //Clear receipt no, invoice no of deposit fee
                        if (doInvoice.BillingTypeCode == BillingType.C_BILLING_TYPE_DEPOSIT &&
                            (doReceipt.AdvanceReceiptStatus == AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_NOT ||
                             doReceipt.AdvanceReceiptStatus == AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_PAID))
                        {
                            isSuccess = billingHandler.UpdateReceiptNoDepositFeeCancelReceipt(doInvoice.InvoiceNo, doReceipt.ReceiptNo
                                                                                              , CommonUtil.dsTransData.dtUserData.EmpNo
                                                                                              , CommonUtil.dsTransData.dtOperationData.ProcessDateTime);

                            if (!isSuccess)
                            {
                                throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7032, null);
                            }
                        }


                        //Show attention in case of paid receipt
                        if (doReceipt.AdvanceReceiptStatus == SECOM_AJIS.Common.Util.ConstantValue.AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_NOT ||
                            doReceipt.AdvanceReceiptStatus == SECOM_AJIS.Common.Util.ConstantValue.AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_PAID)
                        {
                            res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION_OK;
                            res.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7030);
                        }

                        //Success
                        scope.Complete();
                        res.ResultData = "1";
                    }
                    catch (Exception ex)
                    {
                        scope.Dispose();
                        throw ex;
                    }
                }
            }
            catch (Exception ex)
            {
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
예제 #7
0
        //IncomeHandler-BatchGenReceiptAfterPayment
        /// <summary>
        /// Batch Process to generate tax invoice pdf report, receipt pdf report after payment on shared report folder
        /// </summary>
        /// <param name="UserId">employee no.</param>
        /// <param name="BatchDate">process datetime</param>
        /// <returns></returns>
        public doBatchProcessResult ICP010_BatchGenReceiptAfterPaymentProcess(string UserId, DateTime BatchDate)
        {
            #region Prepare
            //Handler
            IBillingHandler         billingHandler         = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
            IBillingDocumentHandler billingDocumentHandler = ServiceContainer.GetService <IBillingDocumentHandler>() as IBillingDocumentHandler;
            IIncomeHandler          incomeHandler          = ServiceContainer.GetService <IIncomeHandler>() as IIncomeHandler;
            IIncomeDocumentHandler  incomeDocumentHandler  = ServiceContainer.GetService <IIncomeDocumentHandler>() as IIncomeDocumentHandler;

            //Get data
            List <doPaidInvoiceNoReceipt> paidInvoices = this.GetPaidInvoiceNoReceipt();

            //Initial batch result
            doBatchProcessResult result = new doBatchProcessResult();
            result.Result       = FlagType.C_FLAG_ON;
            result.BatchStatus  = null;
            result.Total        = paidInvoices.Count;
            result.Failed       = 0;
            result.Complete     = 0;
            result.ErrorMessage = string.Empty;
            result.BatchUser    = UserId;
            #endregion

            if (paidInvoices.Count > 0)
            {
                foreach (doPaidInvoiceNoReceipt doPaidInvoice in paidInvoices)
                {
                    using (TransactionScope scope = new TransactionScope())
                    {
                        try
                        {
                            doInvoice doInvoice = billingHandler.GetInvoice(doPaidInvoice.InvoiceNo);

                            if (doPaidInvoice.BillingTypeGroup != BillingTypeGroup.C_BILLING_TYPE_GROUP_SALE &&
                                (doPaidInvoice.IssueReceiptTiming == IssueRecieptTime.C_ISSUE_REC_TIME_NOT_ISSUE ||
                                 doPaidInvoice.IssueReceiptTiming == IssueRecieptTime.C_ISSUE_REC_TIME_AFTER_PAYMENT)
                                )
                            {
                                #region Issue tax invoice

                                tbt_TaxInvoice doCheckTaxInvoice = billingHandler.GetTaxInvoiceData(doInvoice.InvoiceNo, doInvoice.InvoiceOCC); //Add by Jutarat A. on 04072013

                                if (doCheckTaxInvoice != null)                                                                                  //Add by Jutarat A. on 14112013
                                {
                                    //Add by Jutarat A. on 17102013
                                    List <tbt_TaxInvoice> doCheckTaxInvoiceList = new List <tbt_TaxInvoice>();
                                    doCheckTaxInvoiceList.Add(doCheckTaxInvoice);

                                    doCheckTaxInvoiceList = (from t in doCheckTaxInvoiceList
                                                             where t.TaxInvoiceCanceledFlag == false
                                                             select t).ToList <tbt_TaxInvoice>();

                                    if (doCheckTaxInvoiceList != null && doCheckTaxInvoiceList.Count > 0)
                                    {
                                        doCheckTaxInvoice = CommonUtil.CloneObject <tbt_TaxInvoice, tbt_TaxInvoice>(doCheckTaxInvoiceList[0]);
                                    }
                                    else
                                    {
                                        doCheckTaxInvoice = null;
                                    }
                                    //End Add
                                }

                                if (doCheckTaxInvoice == null) //Add by Jutarat A. on 04072013 (Check not exist TaxInvoice)
                                {
                                    tbt_TaxInvoice doTaxInvoice = billingHandler.IssueTaxInvoice(
                                        doInvoice,
                                        doPaidInvoice.PaymentDate,
                                        ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT,
                                        BatchDate);
                                    if (doTaxInvoice != null)
                                    {
                                        // Comment by Jirawat Jannet
                                        //BLR020 TaxInvoice report
                                        //billingDocumentHandler.GenerateBLR020FilePath(
                                        //    doTaxInvoice.TaxInvoiceNo
                                        //    , ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT
                                        //    , BatchDate);
                                        throw new Exception("กำลังดำเนินการแก้ไข report BLR020");
                                    }
                                    else
                                    {
                                        throw new Exception("Error generate tax invoice");
                                    }
                                }

                                #endregion

                                #region Issue receipt
                                tbt_Receipt doReceipt = incomeHandler.IssueReceipt(doInvoice, doPaidInvoice.PaymentDate, ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT, BatchDate, false); //Add (isWriteTransLog) by Jutarat A. on 07062013
                                if (doReceipt != null)
                                {
                                    //ICR010 Receipt report
                                    incomeDocumentHandler.GenerateICR010FilePath(doReceipt.ReceiptNo
                                                                                 , ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT
                                                                                 , BatchDate);

                                    if (doInvoice.BillingTypeCode == BillingType.C_BILLING_TYPE_DEPOSIT)
                                    {
                                        bool isSuccess = billingHandler.UpdateReceiptNoDepositFee(doPaidInvoice.InvoiceNo, doReceipt.ReceiptNo, ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT, BatchDate);
                                        if (!isSuccess)
                                        {
                                            throw new Exception("Error update receipt no to deposit table");
                                        }
                                    }
                                }
                                else
                                {
                                    throw new Exception("Error generate receipt");
                                }
                                #endregion
                            }
                            else
                            {
                                #region Issued receipt only

                                DateTime receiptDate = doPaidInvoice.PaymentDate;

                                if (doPaidInvoice.BillingTypeGroup != BillingTypeGroup.C_BILLING_TYPE_GROUP_SALE &&
                                    doPaidInvoice.IssueReceiptTiming == IssueRecieptTime.C_ISSUE_REC_TIME_SAME_INV &&
                                    (doPaidInvoice.PaymentMethod == PaymentMethod.C_PAYMENT_METHOD_BANK_TRANSFER ||
                                     doPaidInvoice.PaymentMethod == PaymentMethodType.C_PAYMENT_METHOD_MESSENGER))
                                {
                                    receiptDate = doPaidInvoice.IssueInvDate.Value;
                                }
                                tbt_Receipt doReceipt = incomeHandler.IssueReceipt(doInvoice, receiptDate, ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT, BatchDate, false); //Add (isWriteTransLog) by Jutarat A. on 07062013
                                if (doReceipt != null)
                                {
                                    //ICR010 Receipt report
                                    incomeDocumentHandler.GenerateICR010FilePath(doReceipt.ReceiptNo
                                                                                 , ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT
                                                                                 , BatchDate);

                                    if (doInvoice.BillingTypeCode == BillingType.C_BILLING_TYPE_DEPOSIT)
                                    {
                                        bool isSuccess = billingHandler.UpdateReceiptNoDepositFee(doPaidInvoice.InvoiceNo, doReceipt.ReceiptNo, ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_AFTER_PAYMENT, BatchDate);
                                        if (!isSuccess)
                                        {
                                            throw new Exception("Error update receipt no to deposit table");
                                        }
                                    }
                                }
                                else
                                {
                                    throw new Exception("Error generate receipt");
                                }
                                #endregion
                            }

                            //Success
                            scope.Complete();
                            result.Complete++;
                        }
                        catch (Exception ex)
                        {
                            scope.Dispose();
                            result.Failed++;
                            result.ErrorMessage += string.Format("Invoice no. {0} has Error : {1} {2}\n", doPaidInvoice.InvoiceNo, ex.Message, ex.InnerException != null ? ex.InnerException.Message : string.Empty);
                        }
                    }
                }
                //Update batch result,     at lease one transaction fail => batch fail
                result.Result = (result.Failed == 0);
            }
            return(result);
        }
예제 #8
0
        //IncomeHandler-BatchGenAdvanceReceipt
        /// <summary>
        /// Batch Process to generate advance receipt pdf report on shared report folder
        /// </summary>
        /// <param name="UserId">employee no.</param>
        /// <param name="BatchDate">process datetime</param>
        /// <returns></returns>
        public doBatchProcessResult ICP011_BatchGenAdvanceReceiptProcess(string UserId, DateTime BatchDate)
        {
            #region Prepare
            //Handler
            IBillingHandler         billingHandler         = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
            IBillingDocumentHandler billingDocumentHandler = ServiceContainer.GetService <IBillingDocumentHandler>() as IBillingDocumentHandler;
            IIncomeHandler          incomeHandler          = ServiceContainer.GetService <IIncomeHandler>() as IIncomeHandler;
            IIncomeDocumentHandler  incomeDocumentHandler  = ServiceContainer.GetService <IIncomeDocumentHandler>() as IIncomeDocumentHandler;

            //Get data
            List <doInvoiceAdvanceReceipt> invoiceAdvanceReceipts = this.GetInvoiceAdvanceReceipt();

            //Result
            doBatchProcessResult result = new doBatchProcessResult();
            result.Result       = FlagType.C_FLAG_ON;
            result.BatchStatus  = null;
            result.Total        = invoiceAdvanceReceipts.Count;
            result.Failed       = 0;
            result.Complete     = 0;
            result.ErrorMessage = string.Empty;
            result.BatchUser    = UserId;
            #endregion

            if (invoiceAdvanceReceipts.Count > 0)
            {
                foreach (doInvoiceAdvanceReceipt doAdvanceReceipt in invoiceAdvanceReceipts)
                {
                    using (TransactionScope scope = new TransactionScope())
                    {
                        try
                        {
                            doInvoice   doInvoice = CommonUtil.CloneObject <doInvoiceAdvanceReceipt, doInvoice>(doAdvanceReceipt);
                            tbt_Receipt doReceipt = incomeHandler.IssueAdvanceReceipt(doInvoice, doInvoice.IssueInvDate.Value
                                                                                      , ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_ADVANCE, BatchDate);
                            if (doReceipt != null)
                            {
                                //ICR010 Receipt report
                                incomeDocumentHandler.GenerateICR010FilePath(doReceipt.ReceiptNo
                                                                             , ProcessID.C_PROCESS_ID_GENERATE_RECEIPT_ADVANCE
                                                                             , BatchDate);
                            }
                            else
                            {
                                throw new Exception("Error issue receipt");
                            }

                            //Success
                            scope.Complete();
                            result.Complete++;
                        }
                        catch (Exception ex)
                        {
                            scope.Dispose();
                            result.Failed++;
                            result.ErrorMessage += string.Format("Invoice no. {0} has Error : {1} {2}\n", doAdvanceReceipt.InvoiceNo, ex.Message, ex.InnerException != null ? ex.InnerException.Message : string.Empty);
                        }
                    }
                }
                //Update batch result,     at lease one transaction fail => batch fail
                result.Result = (result.Failed == 0);
            }
            return(result);
        }
        /// <summary>
        /// Event when click confirm button, this function will register the information of invoice detail list to the system.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public ActionResult ICS040_cmdConfirm(ICS040_ScreenParameter param)
        {
            ObjectResultData res = new ObjectResultData();

            res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;

            try
            {
                if (IsSuspend(res))
                {
                    return(Json(res));
                }

                if (!ICS040_IsAllowOperate(res))
                {
                    return(Json(res));
                }

                //Validate  business, (Already confirmed with sa, need validate at this point)
                ICS040_ScreenParameter screenObject = GetScreenObject <ICS040_ScreenParameter>();
                List <doInvoice>       doInvoiceDb  = new List <doInvoice>();
                foreach (var item in screenObject.InvoiceList)
                {
                    //Get Invoice Data
                    doInvoice doInvoice = ICS040_GetInvoice(item.InvoiceNo, res);
                    if (res.IsError)
                    {
                        return(Json(res));
                    }

                    //Validate  business
                    ICS040_ValidateInvoiceBusiness(doInvoice, res);
                    if (res.IsError)
                    {
                        return(Json(res));
                    }

                    //Refresh
                    doInvoice.ExemptApproveNo = item.ExemptApproveNo;
                    doInvoiceDb.Add(doInvoice);
                }
                //Refresh
                screenObject.InvoiceList = doInvoiceDb;


                //Save Data to db
                IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
                using (TransactionScope scope = new TransactionScope())
                {
                    try
                    {
                        foreach (doInvoice item in screenObject.InvoiceList)
                        {
                            bool isSuccess = billingHandler.RegisterInvoiceExemption(item);
                            if (!isSuccess)
                            {
                                //all Fail
                                scope.Dispose();
                                res.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7087);
                                return(Json(res));
                            }
                        }

                        //Clear session
                        screenObject.InvoiceList = new List <doInvoice>();

                        //Success
                        scope.Complete();
                        res.ResultData = "1";
                        return(Json(res));
                    }
                    catch (Exception ex)
                    {
                        //all Fail
                        scope.Dispose();
                        throw ex;
                    }
                }
            }
            catch (Exception ex)
            {
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
        /// <summary>
        /// Event when click register button
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public ActionResult ICS040_cmdRegister(ICS040_ScreenParameter param)
        {
            ICS040_ScreenParameter session = GetScreenObject <ICS040_ScreenParameter>();
            ObjectResultData       res     = new ObjectResultData();

            res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;

            try
            {
                if (IsSuspend(res))
                {
                    return(Json(res));
                }

                if (!ICS040_IsAllowOperate(res))
                {
                    return(Json(res));
                }

                //Validate only Existing invoice List
                ValidatorUtil validator = new ValidatorUtil();
                if (CommonUtil.IsNullOrEmpty(session) ||
                    CommonUtil.IsNullOrEmpty(session.InvoiceList) ||
                    session.InvoiceList.Count == 0)
                {
                    validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS040"
                                              , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7071
                                              , "Invoice");
                    ValidatorUtil.BuildErrorMessage(res, validator, null);
                    return(Json(res));
                }

                //Validate  business, (Already confirmed with sa, need validate at this point)
                ICS040_ScreenParameter screenObject = GetScreenObject <ICS040_ScreenParameter>();
                List <doInvoice>       doInvoiceDb  = new List <doInvoice>();
                foreach (var item in screenObject.InvoiceList)
                {
                    //Get Invoice Data
                    doInvoice doInvoice = ICS040_GetInvoice(item.InvoiceNo, res);
                    if (res.IsError)
                    {
                        return(Json(res));
                    }

                    //Validate  business
                    ICS040_ValidateInvoiceBusiness(doInvoice, res);
                    if (res.IsError)
                    {
                        return(Json(res));
                    }

                    //Refresh
                    doInvoice.ExemptApproveNo = item.ExemptApproveNo;
                    doInvoiceDb.Add(doInvoice);
                }
                //Refresh
                screenObject.InvoiceList = doInvoiceDb;


                //Result flag  1 = Success
                res.ResultData = "1";
            }
            catch (Exception ex)
            {
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
        /// <summary>
        /// Add inputted invoice information to invoice list
        /// </summary>
        /// <param name="param">invoice information</param>
        /// <returns></returns>
        public ActionResult ICS040_AddInvoice(ICS040_ScreenParameter param)
        {
            ObjectResultData res = new ObjectResultData();

            res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;

            ValidatorUtil validator = new ValidatorUtil();

            try
            {
                if (IsSuspend(res))
                {
                    return(Json(res));
                }

                if (!ICS040_IsAllowOperate(res))
                {
                    return(Json(res));
                }

                //Check required field.
                if (CommonUtil.IsNullOrEmpty(param) || string.IsNullOrEmpty(param.InvoiceNo))
                {
                    validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS040"
                                              , MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0007
                                              , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
                }
                if (CommonUtil.IsNullOrEmpty(param) || string.IsNullOrEmpty(param.ApproveNo))
                {
                    validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS040"
                                              , MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0007
                                              , "ApproveNo", "lblApproveNo", "ApproveNo");
                }
                ValidatorUtil.BuildErrorMessage(res, validator, null);
                if (res.IsError)
                {
                    return(Json(res));
                }


                //Get Invoice Data
                doInvoice doInvoice = ICS040_GetInvoice(param.InvoiceNo, res);
                if (res.IsError)
                {
                    return(Json(res));
                }

                //Validate  business
                ICS040_ValidateInvoiceBusiness(doInvoice, res);
                if (res.IsError)
                {
                    return(Json(res));
                }


                //Check duplicated
                ICS040_ScreenParameter screenObject = GetScreenObject <ICS040_ScreenParameter>();
                if (screenObject.InvoiceList != null)
                {
                    foreach (var item in screenObject.InvoiceList)
                    {
                        if (!CommonUtil.IsNullOrEmpty(item.InvoiceNo) &&
                            param.InvoiceNo.Trim().Equals(item.InvoiceNo.Trim()))
                        {
                            validator.AddErrorMessage(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7070
                                                      , "lblInovoiceNo", item.InvoiceNo);

                            ValidatorUtil.BuildErrorMessage(res, validator, null);
                            if (res.IsError)
                            {
                                return(Json(res));
                            }
                        }
                    }
                }

                //Set exempt approve no
                doInvoice.ExemptApproveNo = param.ApproveNo;

                ICS040_ScreenParameter screenSession = GetScreenObject <ICS040_ScreenParameter>();
                if (screenSession.InvoiceList == null)
                {
                    screenSession.InvoiceList = new List <doInvoice>();
                }
                screenSession.InvoiceList.Add(doInvoice);

                res.ResultData = CommonUtil.ConvertToXml <doInvoice>(screenSession.InvoiceList, "Income\\ICS040", CommonUtil.GRID_EMPTY_TYPE.INSERT);
                return(Json(res));
            }
            catch (Exception ex)
            {
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
예제 #12
0
        /// <summary>
        /// Validate business for specific invoice no. and cancelling information
        /// </summary>
        /// <param name="param">invoice no., cancelling information</param>
        /// <param name="res"></param>
        /// <param name="isConfirmCancel">validate when click confirm cancel button</param>
        /// <returns></returns>
        private ICS090_InvoiceInfo ICS090_ValidateInvoiceBusiness(ICS090_ScreenParameter param, ObjectResultData res, bool isConfirmCancel)
        {
            ValidatorUtil validator = new ValidatorUtil();

            if (CommonUtil.IsNullOrEmpty(param.InvoiceNo))
            {
                validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS090"
                                          , MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0007
                                          , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
                ValidatorUtil.BuildErrorMessage(res, validator, null);
                return(null);
            }

            if (isConfirmCancel == true)
            {
                if (CommonUtil.IsNullOrEmpty(param.CorrectionReason))
                {
                    validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS090"
                                              , MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0007
                                              , "CorrectionReason", "lblCorrectionReason", "CorrectionReason");
                }
                if (CommonUtil.IsNullOrEmpty(param.ApproveNo))
                {
                    validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS090"
                                              , MessageUtil.MODULE_COMMON, MessageUtil.MessageList.MSG0007
                                              , "ApproveNo", "lblApproveNo", "ApproveNo");
                }
                ValidatorUtil.BuildErrorMessage(res, validator, null);
                if (res.IsError)
                {
                    return(null);
                }
            }



            //Get invoice Data
            var       billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
            doInvoice doInvoice      = billingHandler.GetInvoice(param.InvoiceNo);

            if (doInvoice == null)
            {
                validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS050"
                                          , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7003
                                          , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
                ValidatorUtil.BuildErrorMessage(res, validator, null);
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                return(null);
            }

            //Validate business
            if ((doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_BANK_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_AUTO_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CASH_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CHEQUE_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_MATCHED ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_ENCASHED ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CASHIER_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_MATCHED ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_ENCASHED ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_AUTO_FAIL_BANK_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_FAIL_BANK_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_FAIL_BANK_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PAID_WITH_PARTIAL_CN ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID_CN ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PAID_WITH_PARTIAL_REFUND ||
                 doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_REFUND_PAID) == false)
            {
                validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS090"
                                          , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7095
                                          , "InvoiceNo", "lblInvoiceNo", "InvoiceNo");
                ValidatorUtil.BuildErrorMessage(res, validator, null);
                return(null);
            }

            //Edit by Patcharee T. 22/02/2013
            //CRC 6.12 The income type are cheque or other may be matching have mistake and issue receipt before matching invoice
            //therefore not need to cancel receipt if select correction reason is matching mistake.

            //Other case than encash
            //if (doInvoice.InvoicePaymentStatus != PaymentStatus.C_PAYMENT_STATUS_NOTE_ENCASHED
            //    && doInvoice.InvoicePaymentStatus != PaymentStatus.C_PAYMENT_STATUS_POST_ENCASHED)
            //{
            //    bool isIssued = billingHandler.CheckExistReceiptForInvoice(doInvoice.InvoiceNo, doInvoice.InvoiceOCC);
            //    if (isIssued == true)
            //    {
            //        validator.AddErrorMessage(MessageUtil.MODULE_INCOME, "ICS090"
            //            , MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7041
            //            , "");
            //        ValidatorUtil.BuildErrorMessage(res, validator, null);
            //        return null;
            //    }
            //}

            //Edit by Patcharee T. 22/02/2013
            //CRC 6.12 The income type are cheque or other may be matching have mistake and issue receipt before matching invoice
            //therefore not need to cancel receipt if select correction reason is matching mistake.

            ICS090_InvoiceInfo invoiceInfo = new ICS090_InvoiceInfo();

            invoiceInfo.doInvoice = doInvoice;

            //Update Current payment status
            invoiceInfo.PaymentStatus = ICS090_GetPaymentStatusDesctription(invoiceInfo.doInvoice.InvoicePaymentStatus);

            //Update Next payment status, Require correctionReason, No need assign
            invoiceInfo.NextPaymentStatus = string.Empty;


            //Success
            return(invoiceInfo);
        }
예제 #13
0
        /// <summary>
        /// Create new invoice with specific invoice informaion and cancelling information
        /// </summary>
        /// <param name="doInvoice">invoice information</param>
        /// <param name="correctionReason">correction reason</param>
        /// <param name="isTaxInvoiceIssued">is already issued tax invoice</param>
        /// <returns></returns>
        public tbt_Invoice ICS090_CreateNewInvoice(doInvoice doInvoice, string correctionReason, bool isTaxInvoiceIssued)
        {
            var         billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;
            tbt_Invoice doTbt_Invoice  = CommonUtil.CloneObject <doInvoice, tbt_Invoice>(doInvoice);
            List <tbt_BillingDetail> tbt_BillingDetails = doInvoice.Tbt_BillingDetails;

            if (doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_BANK_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CASH_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CHEQUE_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_CASHIER_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_AUTO_FAIL_BANK_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_FAIL_BANK_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_FAIL_BANK_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PAID_WITH_PARTIAL_CN ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID_CN ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PAID_WITH_PARTIAL_REFUND ||
                doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_REFUND_PAID)
            {
                #region PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT
                //doTbt_Invoice.InvoiceOCC = 0; //01-Apr-2013 Edit by Patcharee T. Use old tax invoice and reciept
                doTbt_Invoice.IssueInvFlag = false;
                //doTbt_Invoice.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date

                // edit by Jirawat Jannet on 2016-10-27
                if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                {
                    doTbt_Invoice.PaidAmountIncVat = 0;
                }
                else if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_US)
                {
                    doTbt_Invoice.PaidAmountIncVatUsd = 0;
                }

                if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                {
                    doTbt_Invoice.RegisteredWHTAmount = 0;
                }
                else if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_US)
                {
                    doTbt_Invoice.RegisteredWHTAmountUsd = 0;
                }
                // end edit

                doTbt_Invoice.InvoicePaymentStatus = PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT;
                doTbt_Invoice.FirstIssueInvFlag    = false;
                doTbt_Invoice.FirstIssueInvDate    = null;

                //Dummy concept to support ef,
                List <tbt_BillingDetail> newBillingDetails = CommonUtil.ClonsObjectList <tbt_BillingDetail, tbt_BillingDetail>(tbt_BillingDetails);
                foreach (var item in newBillingDetails)
                {
                    item.BillingDetailNo = 0;
                    //item.InvoiceOCC = null;
                    //item.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date
                    item.PaymentStatus = PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT;
                }
                return(billingHandler.ManageInvoiceByCommand(doTbt_Invoice, newBillingDetails, isTaxInvoiceIssued, false, false));

                #endregion
            }
            else if (doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_AUTO_PAID)
            {
                #region PaymentStatus.C_PAYMENT_STATUS_GEN_AUTO_CREDIT
                //doTbt_Invoice.InvoiceOCC = 0; //01-Apr-2013 Edit by Patcharee T. Use old tax invoice and reciept
                doTbt_Invoice.IssueInvFlag = false;
                //doTbt_Invoice.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date

                if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                {
                    doTbt_Invoice.PaidAmountIncVat = 0;
                }
                else if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_US)
                {
                    doTbt_Invoice.PaidAmountIncVatUsd = 0;
                }

                if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                {
                    doTbt_Invoice.RegisteredWHTAmount = 0;
                }
                else if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_US)
                {
                    doTbt_Invoice.RegisteredWHTAmountUsd = 0;
                }

                doTbt_Invoice.InvoicePaymentStatus = PaymentStatus.C_PAYMENT_STATUS_GEN_AUTO_CREDIT;
                doTbt_Invoice.FirstIssueInvFlag    = false;
                doTbt_Invoice.FirstIssueInvDate    = null;

                //Dummy concept to support ef,
                List <tbt_BillingDetail> newBillingDetails = CommonUtil.ClonsObjectList <tbt_BillingDetail, tbt_BillingDetail>(tbt_BillingDetails);
                foreach (var item in newBillingDetails)
                {
                    item.BillingDetailNo = 0;
                    //item.InvoiceOCC = null;
                    //item.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date
                    item.PaymentStatus = PaymentStatus.C_PAYMENT_STATUS_GEN_AUTO_CREDIT;
                }
                return(billingHandler.ManageInvoiceByCommand(doTbt_Invoice, newBillingDetails, isTaxInvoiceIssued, false, false));

                #endregion
            }
            else if (doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_MATCHED ||
                     doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_ENCASHED)   //Add by Jutarat A. on 25122013
            {
                if (correctionReason == CorrectionReason.C_CORRECTION_REASON_MISTAKE ||
                    correctionReason == CorrectionReason.C_CORRECTION_REASON_ENCASH_MISTAKE)    //Add by Jutarat A. on 25122013
                {
                    #region PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT
                    //doTbt_Invoice.InvoiceOCC = 0; //01-Apr-2013 Edit by Patcharee T. Use old tax invoice and reciept
                    doTbt_Invoice.IssueInvFlag = false;
                    //doTbt_Invoice.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime; //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date

                    // Edit by Jirawat Jannet on 201610-27
                    if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.PaidAmountIncVat = 0;
                    }
                    else if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.PaidAmountIncVatUsd = 0;
                    }

                    if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.RegisteredWHTAmount = 0;
                    }
                    else if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.RegisteredWHTAmountUsd = 0;
                    }
                    // End edit

                    doTbt_Invoice.InvoicePaymentStatus = PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT;
                    doTbt_Invoice.FirstIssueInvFlag    = false;
                    doTbt_Invoice.FirstIssueInvDate    = null;

                    //Dummy concept to support ef,
                    List <tbt_BillingDetail> newBillingDetails = CommonUtil.ClonsObjectList <tbt_BillingDetail, tbt_BillingDetail>(tbt_BillingDetails);
                    foreach (var item in newBillingDetails)
                    {
                        item.BillingDetailNo = 0;
                        //item.InvoiceOCC = null;
                        //item.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //Edit by Patcharee T. Use old issue invoice date
                        item.PaymentStatus = PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT;
                    }
                    return(billingHandler.ManageInvoiceByCommand(doTbt_Invoice, newBillingDetails, isTaxInvoiceIssued, false, false));

                    #endregion
                }
                else if (correctionReason == CorrectionReason.C_CORRECTION_REASON_DISHONOR)
                {
                    #region PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK
                    doTbt_Invoice.RefOldInvoiceNo = doTbt_Invoice.InvoiceNo;
                    doTbt_Invoice.InvoiceNo       = null;
                    doTbt_Invoice.InvoiceOCC      = 0;
                    doTbt_Invoice.IssueInvFlag    = true;
                    doTbt_Invoice.IssueInvDate    = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

                    // Edit by Jirawat Jannet on 2016-10-27
                    if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.PaidAmountIncVat = 0;
                    }
                    else if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.PaidAmountIncVatUsd = 0;
                    }

                    if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.RegisteredWHTAmount = 0;
                    }
                    else if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.RegisteredWHTAmountUsd = 0;
                    }
                    // Edit by Jirawat Jannet

                    doTbt_Invoice.InvoicePaymentStatus = PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK;
                    //Show PDF on screen immediately
                    doTbt_Invoice.FirstIssueInvFlag = true;
                    doTbt_Invoice.FirstIssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

                    //Dummy concept to support ef,
                    List <tbt_BillingDetail> newBillingDetails = CommonUtil.ClonsObjectList <tbt_BillingDetail, tbt_BillingDetail>(tbt_BillingDetails);
                    foreach (var item in newBillingDetails)
                    {
                        item.InvoiceNo       = null;
                        item.InvoiceOCC      = null;
                        item.BillingDetailNo = 0;
                        item.IssueInvDate    = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                        item.PaymentStatus   = PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK;
                    }
                    return(billingHandler.ManageInvoiceByCommand(doTbt_Invoice, newBillingDetails, isTaxInvoiceIssued));

                    #endregion
                }
            }
            else if (doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_MATCHED ||
                     doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_ENCASHED)   //Add by Jutarat A. on 25122013
            {
                if (correctionReason == CorrectionReason.C_CORRECTION_REASON_MISTAKE ||
                    correctionReason == CorrectionReason.C_CORRECTION_REASON_ENCASH_MISTAKE)    //Add by Jutarat A. on 25122013
                {
                    #region PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT
                    //doTbt_Invoice.InvoiceOCC = 0; //01-Apr-2013 Edit by Patcharee T. Use old tax invoice and reciept
                    doTbt_Invoice.IssueInvFlag = false;
                    //doTbt_Invoice.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date

                    // Edit by Jirawat Jannet on 2016-10-27
                    if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.PaidAmountIncVat = 0;
                    }
                    else if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.PaidAmountIncVatUsd = 0;
                    }

                    if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.RegisteredWHTAmount = 0;
                    }
                    else if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.RegisteredWHTAmountUsd = 0;
                    }
                    // End edit

                    doTbt_Invoice.InvoicePaymentStatus = PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT;
                    doTbt_Invoice.FirstIssueInvFlag    = false;
                    doTbt_Invoice.FirstIssueInvDate    = null;

                    //Dummy concept to support ef,
                    List <tbt_BillingDetail> newBillingDetails = CommonUtil.ClonsObjectList <tbt_BillingDetail, tbt_BillingDetail>(tbt_BillingDetails);
                    foreach (var item in newBillingDetails)
                    {
                        item.BillingDetailNo = 0;
                        //item.InvoiceOCC = null;
                        //item.IssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;  //01-Apr-2013 Edit by Patcharee T. Use old issue invoice date
                        item.PaymentStatus = PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT;
                    }
                    return(billingHandler.ManageInvoiceByCommand(doTbt_Invoice, newBillingDetails, isTaxInvoiceIssued, false, false));

                    #endregion
                }
                else if (correctionReason == CorrectionReason.C_CORRECTION_REASON_DISHONOR)
                {
                    #region PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK
                    doTbt_Invoice.RefOldInvoiceNo = doTbt_Invoice.InvoiceNo;
                    doTbt_Invoice.InvoiceNo       = null;
                    doTbt_Invoice.InvoiceOCC      = 0;
                    doTbt_Invoice.IssueInvFlag    = true;
                    doTbt_Invoice.IssueInvDate    = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

                    // Edit by Jirawat Jannet on 2016-10-27
                    if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.PaidAmountIncVat = 0;
                    }
                    else if (doTbt_Invoice.PaidAmountIncVatCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.PaidAmountIncVatUsd = 0;
                    }

                    if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL)
                    {
                        doTbt_Invoice.RegisteredWHTAmount = 0;
                    }
                    else if (doTbt_Invoice.RegisteredWHTAmountCurrencyType == CurrencyUtil.C_CURRENCY_US)
                    {
                        doTbt_Invoice.RegisteredWHTAmountUsd = 0;
                    }
                    // End edit


                    doTbt_Invoice.InvoicePaymentStatus = PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK;
                    //Show PDF on screen immediately
                    doTbt_Invoice.FirstIssueInvFlag = true;
                    doTbt_Invoice.FirstIssueInvDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

                    //Dummy concept to support ef,
                    List <tbt_BillingDetail> newBillingDetails = CommonUtil.ClonsObjectList <tbt_BillingDetail, tbt_BillingDetail>(tbt_BillingDetails);
                    foreach (var item in newBillingDetails)
                    {
                        item.InvoiceNo       = null;
                        item.InvoiceOCC      = null;
                        item.BillingDetailNo = 0;
                        item.IssueInvDate    = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
                        item.PaymentStatus   = PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK;
                    }
                    return(billingHandler.ManageInvoiceByCommand(doTbt_Invoice, newBillingDetails, isTaxInvoiceIssued));

                    #endregion
                }
            }

            return(null);
        }
예제 #14
0
        /// <summary>
        /// Event when click confirm cancel button, this function will cancel the payment matching information of specific invoice no. and inputted cancelling information to the system.
        /// </summary>
        /// <param name="param">invoice no. and inputted cancelling information</param>
        /// <returns></returns>
        public ActionResult ICS090_cmdConfirmCancel(ICS090_ScreenParameter param)
        {
            ObjectResultData res = new ObjectResultData();

            res.MessageType = MessageModel.MESSAGE_TYPE.WARNING;
            try
            {
                if (IsSuspend(res))
                {
                    return(Json(res));
                }

                if (!ICS090_IsAllowOperate(res))
                {
                    return(Json(res));
                }


                //Validate invoice business
                ICS090_InvoiceInfo invoiceInfo = ICS090_ValidateInvoiceBusiness(param, res, true);
                if (res.IsError || invoiceInfo == null || invoiceInfo.doInvoice == null)
                {
                    return(Json(res));
                }


                //Connect db
                doInvoice doInvoice = invoiceInfo.doInvoice;
                using (TransactionScope scope = new TransactionScope())
                {
                    try
                    {
                        IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;

                        //Comment by Jutarat A. on 25122013

                        /*if (doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_NOTE_ENCASHED
                        || doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_POST_ENCASHED)
                        || {
                        #region Encash
                        ||
                        ||  var incomeHandler = ServiceContainer.GetService<IIncomeHandler>() as IIncomeHandler;
                        ||  bool isSuccess = incomeHandler.CancelPaymentMatching(doInvoice, param.CorrectionReason, param.ApproveNo);
                        ||  if (!isSuccess)
                        ||      throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7116, null);
                        ||
                        ||  //Success, return result
                        ||  scope.Complete();
                        ||  res.ResultData = "1";
                        ||  return Json(res);
                        #endregion
                        || }
                        || else
                        || {*/
                        //End Comment
                        #region Other case
                        //Cancel payment matching
                        bool isTaxInvoiceIssued = billingHandler.CheckInvoiceIssuedTaxInvoice(doInvoice.InvoiceNo, doInvoice.InvoiceOCC);

                        var  incomeHandler = ServiceContainer.GetService <IIncomeHandler>() as IIncomeHandler;
                        bool isSuccess     = incomeHandler.CancelPaymentMatching(doInvoice, param.CorrectionReason, param.ApproveNo);
                        if (!isSuccess)
                        {
                            throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7042, null);
                        }


                        //Create new invoice (with pdf)
                        tbt_Invoice doTbt_Invoice = ICS090_CreateNewInvoice(doInvoice, param.CorrectionReason, isTaxInvoiceIssued);
                        if (doTbt_Invoice == null)
                        {
                            throw ApplicationErrorException.ThrowErrorException(MessageUtil.MODULE_INCOME, MessageUtil.MessageList.MSG7043, null);
                        }


                        //Success, return result
                        scope.Complete();
                        if ((doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK ||
                             doTbt_Invoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK))
                        {
                            //Success, Display PDF and information
                            ICS090_ScreenParameter screenSession = GetScreenObject <ICS090_ScreenParameter>();
                            screenSession.PDFFilePath = doTbt_Invoice.FilePath;
                            res.ResultData            = "PDF";
                            return(Json(res));
                        }
                        else
                        {
                            //Success, Display information popup only
                            res.ResultData = "1";
                            return(Json(res));
                        }
                        #endregion
                        //}
                    }
                    catch (Exception ex)
                    {
                        scope.Dispose();
                        throw ex;
                    }
                }
            }
            catch (Exception ex)
            {
                res.MessageType = MessageModel.MESSAGE_TYPE.INFORMATION;
                res.AddErrorMessage(ex);
                return(Json(res));
            }
        }
예제 #15
0
        //ICP011
        /// <summary>
        /// Function for issue an advance issued receipt for unpaid invoice. (Used by batch)
        /// </summary>
        /// <param name="doInvoice">invoice information</param>
        /// <param name="receiptDate">receipt date</param>
        /// <param name="batchId">batch id</param>
        /// <param name="batchDate">batch datetime</param>
        /// <returns></returns>
        public tbt_Receipt IssueAdvanceReceipt(doInvoice doInvoice, DateTime receiptDate, string batchId, DateTime batchDate)
        {
            IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;

            //Genereate receipt no
            string receiptNo = billingHandler.GetNextRunningNoByTypeMonthYear(RunningType.C_RUNNING_TYPE_RECEIPT, batchId, receiptDate /*batchDate*/); //Edit by Patcharee T. For issue Reciept no. in month of receiptDate 11-Jun-2013

            //Determine advacen receipt status
            string advanceReceiptStatus = string.Empty;

            if (doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_GEN_AUTO_CREDIT ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_INV_AUTO_CREDIT ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_AUTO_INV_BANK ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID_CN)
            {
                advanceReceiptStatus = AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_ISSUED;
            }
            else
            {
                advanceReceiptStatus = AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_NOT;
            }

            //Determin receipt issue flag
            bool receiptIssueFlag = doInvoice.IssueReceiptTiming == IssueRecieptTime.C_ISSUE_REC_TIME_NOT_ISSUE ? false : true;

            //Prepare receipt
            tbt_Receipt doReceipt = new tbt_Receipt()
            {
                ReceiptNo            = receiptNo,
                ReceiptDate          = receiptDate,
                BillingTargetCode    = doInvoice.BillingTargetCode,
                InvoiceNo            = doInvoice.InvoiceNo,
                InvoiceOCC           = doInvoice.InvoiceOCC,
                ReceiptAmount        = (doInvoice.InvoiceAmount ?? 0) + (doInvoice.VatAmount ?? 0),
                AdvanceReceiptStatus = advanceReceiptStatus,
                ReceiptIssueFlag     = receiptIssueFlag,
                CancelFlag           = false,
                CreateDate           = batchDate,
                CreateBy             = batchId,
                UpdateDate           = batchDate,
                UpdateBy             = batchId
            };
            List <tbt_Receipt> receipts = new List <tbt_Receipt>();

            receipts.Add(doReceipt);
            List <tbt_Receipt> result = this.InsertTbt_Receipt(receipts, false); //Modify (Add isWriteTransLog) by Jutarat A. on 27022014

            if (result != null && result.Count > 0)
            {
                //Update receipt no. to taxinvoice
                bool isSuccess = billingHandler.UpdateReceiptNo(doInvoice.InvoiceNo, doInvoice.InvoiceOCC, receiptNo, batchId, batchDate);
                if (isSuccess)
                {
                    //Success
                    return(result[0]);
                }
            }

            //All fail, No insert data
            return(null);
        }
예제 #16
0
        //ICS050
        /// <summary>
        /// Function for force issue receipt of specific invoice information and receipt date.
        /// </summary>
        /// <param name="doInvoice">invoice information</param>
        /// <param name="receiptDate">receipt date</param>
        /// <returns></returns>
        public tbt_Receipt ForceIssueReceipt(doInvoice doInvoice, DateTime receiptDate)
        {
            IBillingHandler billingHandler = ServiceContainer.GetService <IBillingHandler>() as IBillingHandler;

            //Genereate receipt no
            string receiptNo = billingHandler.GetNextRunningNoByTypeMonthYear(RunningType.C_RUNNING_TYPE_RECEIPT
                                                                              , CommonUtil.dsTransData.dtUserData.EmpNo
                                                                              , receiptDate /*CommonUtil.dsTransData.dtOperationData.ProcessDateTime*/); //Edit by Patcharee T. For get Reciept no. in month of receiptDate 11-Jun-2013

            //Determine advacen receipt status
            string advanceReceiptStatus = string.Empty;

            if (doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_INV_BANK_COLLECT ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_GEN_AUTO_CREDIT ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_INV_AUTO_CREDIT ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_AUTO_INV_BANK ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_NOTE_INV_BANK ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_FAIL_CHEQUE_INV_BANK ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID ||
                doInvoice.InvoicePaymentStatus == PaymentStatus.C_PAYMENT_STATUS_PARTIALLY_PAID_CN)
            {
                advanceReceiptStatus = AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_ISSUED;
            }
            else
            {
                advanceReceiptStatus = AdvanceReceiptStatus.C_INC_ADVANCE_RECEIPT_STATUS_NOT;
            }

            decimal?ReceiptAmt = (doInvoice.InvoiceAmount ?? 0) + (doInvoice.VatAmount ?? 0);

            //Prepare receipt
            tbt_Receipt doReceipt = new tbt_Receipt()
            {
                ReceiptNo                 = receiptNo,
                ReceiptDate               = receiptDate,
                BillingTargetCode         = doInvoice.BillingTargetCode,
                InvoiceNo                 = doInvoice.InvoiceNo,
                InvoiceOCC                = doInvoice.InvoiceOCC,
                ReceiptAmount             = doInvoice.InvoiceAmountCurrencyType == CurrencyUtil.C_CURRENCY_LOCAL ? ReceiptAmt : null,
                ReceiptAmountUsd          = doInvoice.InvoiceAmountCurrencyType == CurrencyUtil.C_CURRENCY_US ? ReceiptAmt : null,
                ReceiptAmountCurrencyType = doInvoice.InvoiceAmountCurrencyType,
                AdvanceReceiptStatus      = advanceReceiptStatus,
                ReceiptIssueFlag          = true,
                CancelFlag                = false,
                CreateDate                = CommonUtil.dsTransData.dtOperationData.ProcessDateTime,
                CreateBy   = CommonUtil.dsTransData.dtUserData.EmpNo,
                UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime,
                UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo
            };
            List <tbt_Receipt> receipts = new List <tbt_Receipt>();

            receipts.Add(doReceipt);
            List <tbt_Receipt> result = this.InsertTbt_Receipt(receipts);

            if (result != null && result.Count > 0)
            {
                //Update receipt no. to taxinvoice
                bool isSuccess = billingHandler.UpdateReceiptNo(doInvoice.InvoiceNo, doInvoice.InvoiceOCC, receiptNo, CommonUtil.dsTransData.dtUserData.EmpNo, CommonUtil.dsTransData.dtOperationData.ProcessDateTime);
                if (isSuccess)
                {
                    //Success
                    return(result[0]);
                }
            }

            //All fail, No insert data
            return(null);
        }