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