Exemple #1
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);
        }
Exemple #2
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));
            }
        }