/// <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); }
/// <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)); } }