/// <summary> /// Method to cancel a specified batch /// </summary> /// <param name="ABatchRowToCancel">The row to cancel</param> /// <returns></returns> public bool CancelBatch(ABatchRow ABatchRowToCancel) { //Assign default value(s) bool CancellationSuccessful = false; if ((ABatchRowToCancel == null)) { return(CancellationSuccessful); } int CurrentBatchNumber = ABatchRowToCancel.BatchNumber; if ((MessageBox.Show(String.Format(Catalog.GetString("You have chosen to cancel this batch ({0}).\n\nDo you really want to cancel it?"), CurrentBatchNumber), Catalog.GetString("Confirm Cancel"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != System.Windows.Forms.DialogResult.Yes)) { return(CancellationSuccessful); } //Backup the Dataset for reversion purposes GLBatchTDS BackupMainDS = (GLBatchTDS)FMainDS.Copy(); BackupMainDS.Merge(FMainDS); bool RowToDeleteIsNew = (ABatchRowToCancel.RowState == DataRowState.Added); if (!RowToDeleteIsNew) { //Remove any changes, which may cause validation issues, before cancelling FMyForm.GetBatchControl().UndoModifiedBatchRow(ABatchRowToCancel, true); if (!(FMyForm.SaveChanges())) { MessageBox.Show(Catalog.GetString("Error in trying to save prior to cancelling current Batch!"), Catalog.GetString("Cancellation Error"), MessageBoxButtons.OK, MessageBoxIcon.Error); return(CancellationSuccessful); } } try { FMyForm.Cursor = Cursors.WaitCursor; //clear any transactions currently being editied in the Transaction Tab FMyForm.GetTransactionsControl().ClearCurrentSelection(); //clear any journals currently being editied in the Journals Tab FMyForm.GetJournalsControl().ClearCurrentSelection(); //Clear Journals etc for current Batch FMainDS.ATransAnalAttrib.Clear(); FMainDS.ATransaction.Clear(); FMainDS.AJournal.Clear(); //Load tables afresh FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadAJournal(FLedgerNumber, CurrentBatchNumber)); FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadATransaction(FLedgerNumber, CurrentBatchNumber)); FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadATransAnalAttribForBatch(FLedgerNumber, CurrentBatchNumber)); FMainDS.AcceptChanges(); //Delete transactions and analysis attributes for (int i = FMainDS.ATransAnalAttrib.Count - 1; i >= 0; i--) { FMainDS.ATransAnalAttrib[i].Delete(); } for (int i = FMainDS.ATransaction.Count - 1; i >= 0; i--) { FMainDS.ATransaction[i].Delete(); } //Update Journal totals and status foreach (AJournalRow journal in FMainDS.AJournal.Rows) { if (journal.BatchNumber == CurrentBatchNumber) { journal.BeginEdit(); journal.JournalStatus = MFinanceConstants.BATCH_CANCELLED; journal.JournalCreditTotal = 0; journal.JournalDebitTotal = 0; journal.LastTransactionNumber = 0; journal.EndEdit(); } } // Edit the batch row ABatchRowToCancel.BeginEdit(); ABatchRowToCancel.BatchCreditTotal = 0; ABatchRowToCancel.BatchDebitTotal = 0; ABatchRowToCancel.BatchControlTotal = 0; ABatchRowToCancel.BatchStatus = MFinanceConstants.BATCH_CANCELLED; ABatchRowToCancel.EndEdit(); FPetraUtilsObject.SetChangedFlag(); //Need to call save if (FMyForm.SaveChanges()) { MessageBox.Show(Catalog.GetString("The batch has been cancelled successfully!"), Catalog.GetString("Success"), MessageBoxButtons.OK, MessageBoxIcon.Information); FMyForm.DisableTransactions(); FMyForm.DisableJournals(); } else { throw new Exception(Catalog.GetString("The batch failed to save after being cancelled! Reopen the form and retry.")); } CancellationSuccessful = true; } catch (Exception ex) { MessageBox.Show(ex.Message, "Cancellation Error", MessageBoxButtons.OK, MessageBoxIcon.Error); //Revert to previous state FMainDS.Merge(BackupMainDS); } finally { FMyForm.Cursor = Cursors.Default; } return(CancellationSuccessful); }
public static GLBatchTDS ProcessRecurringTransAndAttributesForDeletion(GLBatchTDS AMainDS, Int32 ALedgerNumber, Int32 ABatchNumber, Int32 AJournalNumber, Int32 AHighestTransactionNumber, Int32 ATransactionToDelete) { #region Validate Arguments if (AMainDS == null) { throw new EFinanceSystemDataObjectNullOrEmptyException(String.Format(Catalog.GetString( "Function:{0} - The Recurring GL Batch dataset is null!"), Utilities.GetMethodName(true))); } if (ALedgerNumber <= 0) { throw new EFinanceSystemInvalidLedgerNumberException(String.Format(Catalog.GetString( "Function:{0} - The Ledger number must be greater than 0!"), Utilities.GetMethodName(true)), ALedgerNumber); } else if (ABatchNumber <= 0) { throw new EFinanceSystemInvalidBatchNumberException(String.Format(Catalog.GetString( "Function:{0} - The Recurring Batch number must be greater than 0!"), Utilities.GetMethodName(true)), ALedgerNumber, ABatchNumber); } else if (AJournalNumber <= 0) { throw new ArgumentException(String.Format(Catalog.GetString("Function:{0} - The Recurring Journal number must be greater than 0!"), Utilities.GetMethodName(true))); } else if (AHighestTransactionNumber <= 0) { throw new ArgumentException(String.Format(Catalog.GetString( "Function:{0} - The highest Transaction number in the Recurring Journal must be greater than 0!"), Utilities.GetMethodName(true))); } else if (ATransactionToDelete <= 0) { throw new ArgumentException(String.Format(Catalog.GetString( "Function:{0} - The number of the Transaction to delete must be greater than 0!"), Utilities.GetMethodName(true))); } #endregion Validate Arguments GLBatchTDS MainDSCopy = (GLBatchTDS)AMainDS.Copy(); MainDSCopy.Merge(AMainDS); MainDSCopy.AcceptChanges(); GLBatchTDS SubmitDS = (GLBatchTDS)AMainDS.Copy(); SubmitDS.Merge(AMainDS); SubmitDS.AcceptChanges(); TDBTransaction Transaction = null; bool SubmissionOK = false; try { DBAccess.GDBAccessObj.BeginAutoTransaction(IsolationLevel.Serializable, ref Transaction, ref SubmissionOK, delegate { //Delete current row+ (attributes first). DataView attributesDV = new DataView(MainDSCopy.ARecurringTransAnalAttrib); attributesDV.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}>={5}", ARecurringTransAnalAttribTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransAnalAttribTable.GetJournalNumberDBName(), AJournalNumber, ARecurringTransAnalAttribTable.GetTransactionNumberDBName(), ATransactionToDelete); foreach (DataRowView attrDRV in attributesDV) { ARecurringTransAnalAttribRow attrRow = (ARecurringTransAnalAttribRow)attrDRV.Row; attrRow.Delete(); } DataView transactionsDV = new DataView(MainDSCopy.ARecurringTransaction); transactionsDV.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}>={5}", ARecurringTransactionTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransactionTable.GetJournalNumberDBName(), AJournalNumber, ARecurringTransactionTable.GetTransactionNumberDBName(), ATransactionToDelete); foreach (DataRowView transDRV in transactionsDV) { ARecurringTransactionRow tranRow = (ARecurringTransactionRow)transDRV.Row; tranRow.Delete(); } //Need to save changes before deleting any transactions GLBatchTDSAccess.SubmitChanges(MainDSCopy); //Remove unaffected attributes and transactions from SubmitDS DataView attributesDV1 = new DataView(SubmitDS.ARecurringTransAnalAttrib); attributesDV1.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}<={5}", ARecurringTransAnalAttribTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransAnalAttribTable.GetJournalNumberDBName(), AJournalNumber, ARecurringTransAnalAttribTable.GetTransactionNumberDBName(), ATransactionToDelete); foreach (DataRowView attrDRV in attributesDV1) { ARecurringTransAnalAttribRow attrRow = (ARecurringTransAnalAttribRow)attrDRV.Row; attrRow.Delete(); } DataView transactionsDV1 = new DataView(SubmitDS.ARecurringTransaction); transactionsDV1.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}<={5}", ARecurringTransactionTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransactionTable.GetJournalNumberDBName(), AJournalNumber, ARecurringTransactionTable.GetTransactionNumberDBName(), ATransactionToDelete); foreach (DataRowView transDRV in transactionsDV1) { ARecurringTransactionRow tranRow = (ARecurringTransactionRow)transDRV.Row; tranRow.Delete(); } //GLBatchTDSAccess.SubmitChanges(MainDS); SubmitDS.AcceptChanges(); //Renumber the transactions and attributes in SubmitDS DataView attributesDV2 = new DataView(SubmitDS.ARecurringTransAnalAttrib); attributesDV2.RowFilter = String.Format("{0}={1} AND {2}={3}", ARecurringTransAnalAttribTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransAnalAttribTable.GetJournalNumberDBName(), AJournalNumber); attributesDV2.Sort = String.Format("{0} ASC", ARecurringTransAnalAttribTable.GetTransactionNumberDBName()); foreach (DataRowView attrDRV in attributesDV2) { ARecurringTransAnalAttribRow attrRow = (ARecurringTransAnalAttribRow)attrDRV.Row; attrRow.TransactionNumber--; } DataView transactionsDV2 = new DataView(SubmitDS.ARecurringTransaction); transactionsDV2.RowFilter = String.Format("{0}={1} AND {2}={3}", ARecurringTransactionTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransactionTable.GetJournalNumberDBName(), AJournalNumber); transactionsDV2.Sort = String.Format("{0} ASC", ARecurringTransactionTable.GetTransactionNumberDBName()); foreach (DataRowView transDRV in transactionsDV2) { ARecurringTransactionRow tranRow = (ARecurringTransactionRow)transDRV.Row; tranRow.TransactionNumber--; } SubmitDS.AcceptChanges(); MainDSCopy.Merge(SubmitDS.ARecurringTransaction); MainDSCopy.AcceptChanges(); DataView transactionsDV3 = new DataView(MainDSCopy.ARecurringTransaction); transactionsDV3.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}>={5}", ARecurringTransactionTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransactionTable.GetJournalNumberDBName(), AJournalNumber, ARecurringTransactionTable.GetTransactionNumberDBName(), ATransactionToDelete); foreach (DataRowView transDRV in transactionsDV3) { ARecurringTransactionRow tranRow = (ARecurringTransactionRow)transDRV.Row; tranRow.SetAdded(); } //Need to save changes before deleting any transactions GLBatchTDSAccess.SubmitChanges(MainDSCopy); MainDSCopy.Merge(SubmitDS.ARecurringTransAnalAttrib); MainDSCopy.AcceptChanges(); DataView attributesDV3 = new DataView(MainDSCopy.ARecurringTransAnalAttrib); attributesDV3.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}>={5}", ARecurringTransAnalAttribTable.GetBatchNumberDBName(), ABatchNumber, ARecurringTransAnalAttribTable.GetJournalNumberDBName(), AJournalNumber, ARecurringTransAnalAttribTable.GetTransactionNumberDBName(), ATransactionToDelete); foreach (DataRowView attrDRV in attributesDV3) { ARecurringTransAnalAttribRow attrRow = (ARecurringTransAnalAttribRow)attrDRV.Row; attrRow.SetAdded(); } //Need to save changes before deleting any transactions GLBatchTDSAccess.SubmitChanges(MainDSCopy); MainDSCopy.AcceptChanges(); SubmissionOK = true; }); } catch (Exception ex) { TLogging.Log(String.Format("Method:{0} - Unexpected error!{1}{1}{2}", Utilities.GetMethodSignature(), Environment.NewLine, ex.Message)); throw ex; } return MainDSCopy; }