Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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;
        }