/// <summary> /// Deletes the current row and optionally populates a completion message /// </summary> /// <param name="ARowToDelete">the currently selected row to delete</param> /// <param name="ACompletionMessage">if specified, is the deletion completion message</param> /// <returns>true if row deletion is successful</returns> private bool DeleteRowManual(GLBatchTDSARecurringJournalRow ARowToDelete, ref string ACompletionMessage) { //Assign default value(s) bool DeletionSuccessful = false; ACompletionMessage = string.Empty; if (ARowToDelete == null) { return(DeletionSuccessful); } //Delete current row ARowToDelete.RejectChanges(); ShowDetails(ARowToDelete); //Take a backup of FMainDS GLBatchTDS BackupMainDS = null; //Pass a copy of FMainDS to the server-side delete method. GLBatchTDS TempDS = (GLBatchTDS)FMainDS.Copy(); TempDS.Merge(FMainDS); int CurrentBatchNumber = ARowToDelete.BatchNumber; bool CurrentBatchJournalTransactionsLoadedAndCurrent = false; FJournalNumberToDelete = ARowToDelete.JournalNumber; int TopMostJrnlNo = FBatchRow.LastJournal; TFrmRecurringGLBatch FMyForm = (TFrmRecurringGLBatch)this.ParentForm; try { this.Cursor = Cursors.WaitCursor; FMyForm.FCurrentGLBatchAction = TGLBatchEnums.GLBatchAction.DELETINGJOURNAL; //Backup the Dataset for reversion purposes BackupMainDS = (GLBatchTDS)FMainDS.GetChangesTyped(false); //Check if current batch transactions are loaded and being viewed in their tab CurrentBatchJournalTransactionsLoadedAndCurrent = (FMyForm.GetTransactionsControl().FBatchNumber == CurrentBatchNumber && FMyForm.GetTransactionsControl().FJournalNumber == FJournalNumberToDelete); //Save and check for inactive values FPetraUtilsObject.SetChangedFlag(); if (!FMyForm.SaveChangesManual(FMyForm.FCurrentGLBatchAction, false, !CurrentBatchJournalTransactionsLoadedAndCurrent)) { string msg = String.Format(Catalog.GetString("Recurring Journal {0} has not been deleted."), FJournalNumberToDelete); MessageBox.Show(msg, Catalog.GetString("Recurring GL Batch Deletion"), MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } //Remove any changes to current batch that may cause validation issues PrepareJournalDataForDeleting(CurrentBatchNumber, FJournalNumberToDelete, true); if (CurrentBatchJournalTransactionsLoadedAndCurrent) { //Clear any transactions currently being edited in the Transaction Tab FMyForm.GetTransactionsControl().ClearCurrentSelection(CurrentBatchNumber, FJournalNumberToDelete); } //Load all journals for this batch TempDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadARecurringJournalAndRelatedTablesForBatch(FLedgerNumber, FBatchNumber)); TempDS.AcceptChanges(); //Clear the transactions and load newly saved dataset FMainDS.ARecurringTransAnalAttrib.Clear(); FMainDS.ARecurringTransaction.Clear(); FMainDS.ARecurringJournal.Clear(); FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.ProcessRecurrJrnlTransAttribForDeletion(TempDS, FLedgerNumber, FBatchNumber, TopMostJrnlNo, FJournalNumberToDelete)); FPreviouslySelectedDetailRow = null; FPetraUtilsObject.SetChangedFlag(); ACompletionMessage = String.Format(Catalog.GetString("Recurring Journal no.: {0} deleted successfully."), FJournalNumberToDelete); DeletionSuccessful = true; } catch (Exception ex) { //Normally set in PostDeleteManual FMyForm.FCurrentGLBatchAction = TGLBatchEnums.GLBatchAction.NONE; //Revert to previous state RevertDataSet(FMainDS, BackupMainDS); TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } finally { SetJournalDefaultView(); FFilterAndFindObject.ApplyFilter(); this.Cursor = Cursors.Default; } return(DeletionSuccessful); }
/// <summary> /// Deletes the current row and optionally populates a completion message /// </summary> /// <param name="ARowToDelete">the currently selected row to delete</param> /// <param name="ACompletionMessage">if specified, is the deletion completion message</param> /// <returns>true if row deletion is successful</returns> private bool DeleteRowManual(ARecurringBatchRow ARowToDelete, ref string ACompletionMessage) { bool DeletionSuccessful = false; ACompletionMessage = string.Empty; if (ARowToDelete == null) { return(false); } //Notify of deletion process TFrmRecurringGLBatch MainForm = (TFrmRecurringGLBatch)this.ParentForm; int CurrentBatchNumber = ARowToDelete.BatchNumber; bool CurrentBatchJournalsLoadedAndCurrent = false; bool CurrentBatchTransactionsLoadedAndCurrent = false; //Backup the Dataset for reversion purposes GLBatchTDS BackupMainDS = null; //Reject any changes which may fail validation ARowToDelete.RejectChanges(); ShowDetails(ARowToDelete); try { this.Cursor = Cursors.WaitCursor; MainForm.FCurrentGLBatchAction = TGLBatchEnums.GLBatchAction.DELETING; //Backup the changes to allow rollback BackupMainDS = (GLBatchTDS)FMainDS.GetChangesTyped(false); //Don't run an inactive fields check on this batch MainForm.GetBatchControl().UpdateRecurringBatchDictionary(CurrentBatchNumber); //Check if current batch journals and transactions are loaded and being viewed in their tab CurrentBatchJournalsLoadedAndCurrent = (MainForm.GetJournalsControl().FBatchNumber == CurrentBatchNumber); CurrentBatchTransactionsLoadedAndCurrent = (MainForm.GetTransactionsControl().FBatchNumber == CurrentBatchNumber); //Save and check for inactive values FPetraUtilsObject.SetChangedFlag(); if (!MainForm.SaveChangesManual(MainForm.FCurrentGLBatchAction, !CurrentBatchJournalsLoadedAndCurrent, !CurrentBatchTransactionsLoadedAndCurrent)) { MainForm.GetBatchControl().UpdateRecurringBatchDictionary(); string msg = String.Format(Catalog.GetString("Recurring Batch {0} has not been deleted."), CurrentBatchNumber); MessageBox.Show(msg, Catalog.GetString("Recurring GL Batch Deletion"), MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } //Remove any changes to current batch that may cause validation issues PrepareBatchDataForDeleting(CurrentBatchNumber, true); //Clear the journal and trans tabs if current batch data is displayed there if (CurrentBatchJournalsLoadedAndCurrent) { //Clear any transactions currently being edited in the Transaction Tab MainForm.GetJournalsControl().ClearCurrentSelection(CurrentBatchNumber); } if (CurrentBatchTransactionsLoadedAndCurrent) { //Clear any transactions currently being edited in the Transaction Tab MainForm.GetTransactionsControl().ClearCurrentSelection(CurrentBatchNumber); } //Delete transactions MainForm.GetTransactionsControl().DeleteRecurringTransactionData(CurrentBatchNumber); //Delete Journals MainForm.GetJournalsControl().DeleteRecurringJournalData(CurrentBatchNumber); // Delete the recurring batch row. ARowToDelete.Delete(); ACompletionMessage = String.Format(Catalog.GetString("Recurring Batch no.: {0} deleted successfully."), CurrentBatchNumber); DeletionSuccessful = true; } catch (Exception ex) { MainForm.FCurrentGLBatchAction = TGLBatchEnums.GLBatchAction.NONE; //Revert to previous state RevertDataSet(FMainDS, BackupMainDS); TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } finally { this.Cursor = Cursors.Default; } UpdateRecordNumberDisplay(); return(DeletionSuccessful); }
/// <summary> /// Clear the gift data of the current batch without marking records for delete /// </summary> private bool RefreshBatchGiftData(Int32 ABatchNumber, bool AAcceptChanges = false, bool AHandleDataSetBackup = false) { bool RetVal = false; //Copy and backup the current dataset GiftBatchTDS BackupDS = null; GiftBatchTDS TempDS = (GiftBatchTDS)FMainDS.Copy(); TempDS.Merge(FMainDS); if (AHandleDataSetBackup) { BackupDS = (GiftBatchTDS)FMainDS.GetChangesTyped(false); } try { this.Cursor = Cursors.WaitCursor; //Remove current batch gift data DataView giftDetailView = new DataView(TempDS.AGiftDetail); giftDetailView.RowFilter = String.Format("{0}={1}", AGiftDetailTable.GetBatchNumberDBName(), ABatchNumber); giftDetailView.Sort = String.Format("{0} DESC, {1} DESC", AGiftDetailTable.GetGiftTransactionNumberDBName(), AGiftDetailTable.GetDetailNumberDBName()); foreach (DataRowView dr in giftDetailView) { dr.Delete(); } DataView giftView = new DataView(TempDS.AGift); giftView.RowFilter = String.Format("{0}={1}", AGiftTable.GetBatchNumberDBName(), ABatchNumber); giftView.Sort = String.Format("{0} DESC", AGiftTable.GetGiftTransactionNumberDBName()); foreach (DataRowView dr in giftView) { dr.Delete(); } TempDS.AcceptChanges(); //Clear all gift data from Main dataset gift tables FMainDS.AGiftDetail.Clear(); FMainDS.AGift.Clear(); //Bring data back in from other batches if it exists if (TempDS.AGift.Count > 0) { FMainDS.AGift.Merge(TempDS.AGift); FMainDS.AGiftDetail.Merge(TempDS.AGiftDetail); } //TODO: Confirm I need to AcceptChanges FMainDS.Merge(TRemote.MFinance.Gift.WebConnectors.LoadGiftTransactionsForBatch(FLedgerNumber, ABatchNumber)); if (AAcceptChanges) { FMainDS.AcceptChanges(); } RetVal = true; } catch (Exception ex) { //If not revert on error then calling method will if (AHandleDataSetBackup) { RevertDataSet(FMainDS, BackupDS); } TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } finally { this.Cursor = Cursors.Default; } return(RetVal); }
private bool OnDeleteRowManual(GiftBatchTDSARecurringGiftDetailRow ARowToDelete, ref string ACompletionMessage) { //TODO: Make this like deleton on GL Transactions form // e.g. pass copy to delete method on server... //GiftBatchTDS TempDS = (GiftBatchTDS)FMainDS.Copy(); //TempDS.Merge(FMainDS); bool DeletionSuccessful = false; ACompletionMessage = string.Empty; if (FBatchRow == null) { FBatchRow = GetRecurringBatchRow(); } if (ARowToDelete == null) { return(false); } int CurrentBatchNo = ARowToDelete.BatchNumber; bool RowToDeleteIsNew = (ARowToDelete.RowState == DataRowState.Added); int CurrentRowIndex = GetSelectedRowIndex(); TFrmRecurringGiftBatch FMyForm = (TFrmRecurringGiftBatch)this.ParentForm; GiftBatchTDS BackupMainDS = null; int SelectedDetailNumber = ARowToDelete.DetailNumber; int RecurringGiftToDeleteTransNo = 0; string FilterAllRecurringGiftsOfBatch = String.Empty; string FilterAllRecurringGiftDetailsOfBatch = String.Empty; int DetailRowCount = FGiftDetailView.Count; try { this.Cursor = Cursors.WaitCursor; //Specify current action FMyForm.FCurrentGiftBatchAction = Logic.TExtraGiftBatchChecks.GiftBatchAction.DELETINGTRANS; //Speeds up deletion of larger gift sets FMainDS.EnforceConstraints = false; // temporarily disable New Donor Warning FMyForm.NewDonorWarning = false; //Backup the Dataset for reversion purposes BackupMainDS = (GiftBatchTDS)FMainDS.GetChangesTyped(false); //Don't run an inactive fields check on this batch FMyForm.GetBatchControl().UpdateRecurringBatchDictionary(CurrentBatchNo); //Delete current row ARowToDelete.RejectChanges(); if (!RowToDeleteIsNew) { ShowDetails(ARowToDelete); } ARowToDelete.Delete(); //If there existed (before the delete row above) more than one detail row, then no need to delete Recurring Gift header row if (DetailRowCount > 1) { ACompletionMessage = Catalog.GetString("Recurring Gift Detail row deleted successfully!"); FGiftSelectedForDeletionFlag = false; foreach (DataRowView rv in FGiftDetailView) { GiftBatchTDSARecurringGiftDetailRow row = (GiftBatchTDSARecurringGiftDetailRow)rv.Row; if (row.DetailNumber > SelectedDetailNumber) { row.DetailNumber--; } } FGift.LastDetailNumber--; } else { ACompletionMessage = Catalog.GetString("Recurring Gift deleted successfully!"); RecurringGiftToDeleteTransNo = FGift.GiftTransactionNumber; // Reduce all Recurring Gift Detail row Transaction numbers by 1 if they are greater then Recurring Gift to be deleted FilterAllRecurringGiftDetailsOfBatch = String.Format("{0}={1} And {2}>{3}", ARecurringGiftDetailTable.GetBatchNumberDBName(), FBatchNumber, ARecurringGiftDetailTable.GetGiftTransactionNumberDBName(), RecurringGiftToDeleteTransNo); DataView RecurringGiftDetailView = new DataView(FMainDS.ARecurringGiftDetail); RecurringGiftDetailView.RowFilter = FilterAllRecurringGiftDetailsOfBatch; RecurringGiftDetailView.Sort = String.Format("{0} ASC", ARecurringGiftDetailTable.GetGiftTransactionNumberDBName()); foreach (DataRowView rv in RecurringGiftDetailView) { GiftBatchTDSARecurringGiftDetailRow row = (GiftBatchTDSARecurringGiftDetailRow)rv.Row; row.GiftTransactionNumber--; } //Cannot delete the Recurring Gift row, just copy the data of rows above down by 1 row // and then mark the top row for deletion //In other words, bubble the Recurring Gift row to be deleted to the top FilterAllRecurringGiftsOfBatch = String.Format("{0}={1} And {2}>={3}", ARecurringGiftTable.GetBatchNumberDBName(), FBatchNumber, ARecurringGiftTable.GetGiftTransactionNumberDBName(), RecurringGiftToDeleteTransNo); DataView RecurringGiftView = new DataView(FMainDS.ARecurringGift); RecurringGiftView.RowFilter = FilterAllRecurringGiftsOfBatch; RecurringGiftView.Sort = String.Format("{0} ASC", ARecurringGiftTable.GetGiftTransactionNumberDBName()); ARecurringGiftRow RecurringGiftRowToReceive = null; ARecurringGiftRow RecurringGiftRowToCopyDown = null; ARecurringGiftRow RecurringGiftRowCurrent = null; int currentRecurringGiftTransNo = 0; foreach (DataRowView gv in RecurringGiftView) { RecurringGiftRowCurrent = (ARecurringGiftRow)gv.Row; currentRecurringGiftTransNo = RecurringGiftRowCurrent.GiftTransactionNumber; if (currentRecurringGiftTransNo > RecurringGiftToDeleteTransNo) { RecurringGiftRowToCopyDown = RecurringGiftRowCurrent; //Copy column values down for (int j = 3; j < RecurringGiftRowToCopyDown.Table.Columns.Count; j++) { //Update all columns except the pk fields that remain the same if (!RecurringGiftRowToCopyDown.Table.Columns[j].ColumnName.EndsWith("_text")) { RecurringGiftRowToReceive[j] = RecurringGiftRowToCopyDown[j]; } } } if (currentRecurringGiftTransNo == FBatchRow.LastGiftNumber) { //Mark last record for deletion RecurringGiftRowCurrent.ChargeStatus = MFinanceConstants.MARKED_FOR_DELETION; } //Will always be previous row RecurringGiftRowToReceive = RecurringGiftRowCurrent; } FPreviouslySelectedDetailRow = null; FGiftSelectedForDeletionFlag = true; FBatchRow.LastGiftNumber--; } //Save and check for inactive values and ex-workers and anonymous gifts // in other unsaved Batches FPetraUtilsObject.SetChangedFlag(); if (!FMyForm.SaveChangesManual(Logic.TExtraGiftBatchChecks.GiftBatchAction.DELETINGTRANS, false, false)) { FMyForm.GetBatchControl().UpdateRecurringBatchDictionary(); MessageBox.Show(Catalog.GetString("The gift detail has been deleted but the changes are not saved!"), Catalog.GetString("Deletion Warning"), MessageBoxButtons.OK, MessageBoxIcon.Warning); ACompletionMessage = string.Empty; if (FGiftSelectedForDeletionFlag) { FGiftSelectedForDeletionFlag = false; SetBatchLastGiftNumber(); UpdateControlsProtection(); } UpdateTotals(); return(false); } //Clear current batch's gift data and reload from server RefreshRecurringBatchGiftData(FBatchNumber, true); DeletionSuccessful = true; } catch (Exception ex) { //Revert to previous state RevertDataSet(FMainDS, BackupMainDS, CurrentRowIndex); TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } finally { FMyForm.NewDonorWarning = true; FMainDS.EnforceConstraints = true; FMyForm.FCurrentGiftBatchAction = Logic.TExtraGiftBatchChecks.GiftBatchAction.NONE; this.Cursor = Cursors.Default; } SetGiftDetailDefaultView(); FFilterAndFindObject.ApplyFilter(); UpdateRecordNumberDisplay(); return(DeletionSuccessful); }
private void DeleteAllGifts(System.Object sender, EventArgs e) { TFrmGiftBatch FMyForm = (TFrmGiftBatch)this.ParentForm; string CompletionMessage = string.Empty; int BatchNumberToClear = FBatchNumber; List <string> OriginatingDetailRef = new List <string>(); if ((FPreviouslySelectedDetailRow == null) || (FBatchRow.BatchStatus != MFinanceConstants.BATCH_UNPOSTED)) { return; } else if (!FFilterAndFindObject.IsActiveFilterEqualToBase) { MessageBox.Show(Catalog.GetString("Please remove the filter before attempting to delete all gifts in this batch."), Catalog.GetString("Delete All Gifts")); return; } //Backup the Dataset for reversion purposes GiftBatchTDS BackupDS = null; if (MessageBox.Show(String.Format(Catalog.GetString( "You have chosen to delete all gifts from Gift Batch: {0}.{1}{1}Are you sure you want to delete all?"), BatchNumberToClear, Environment.NewLine), Catalog.GetString("Confirm Delete All"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != System.Windows.Forms.DialogResult.Yes) { return; } try { this.Cursor = Cursors.WaitCursor; //Specify current action FMyForm.FCurrentGiftBatchAction = Logic.TExtraGiftBatchChecks.GiftBatchAction.DELETINGTRANS; //Backup the Dataset for reversion purposes BackupDS = (GiftBatchTDS)FMainDS.GetChangesTyped(false); //clear any transactions currently being editied in the Transaction Tab ClearCurrentSelection(0, false); //Now delete all gift data for current batch DeleteBatchGiftData(BatchNumberToClear, ref OriginatingDetailRef); FBatchRow.BatchTotal = 0; txtBatchTotal.NumberValueDecimal = 0; // Be sure to set the last gift number in the parent table before saving all the changes FBatchRow.LastGiftNumber = 0; FPetraUtilsObject.SetChangedFlag(); // save changes if (FMyForm.SaveChangesManual(Logic.TExtraGiftBatchChecks.GiftBatchAction.DELETINGTRANS, false, false)) { //Check if have deleted a reversing gift detail if (OriginatingDetailRef.Count > 0) { TRemote.MFinance.Gift.WebConnectors.ReversedGiftReset(FLedgerNumber, OriginatingDetailRef); } CompletionMessage = Catalog.GetString("All Gifts and their details deleted successfully."); MessageBox.Show(CompletionMessage, Catalog.GetString("Gifts Deletion"), MessageBoxButtons.OK, MessageBoxIcon.Information); } else { CompletionMessage = Catalog.GetString("All Gifts and their details have been deleted but saving the changes failed!"); MessageBox.Show(CompletionMessage, Catalog.GetString("All Gifts Deletion"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } catch (Exception ex) { //Revert to previous state RevertDataSet(FMainDS, BackupDS); TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } finally { FMyForm.FCurrentGiftBatchAction = Logic.TExtraGiftBatchChecks.GiftBatchAction.NONE; this.Cursor = Cursors.Default; } SetGiftDetailDefaultView(); FFilterAndFindObject.ApplyFilter(); if (grdDetails.Rows.Count < 2) { ShowDetails(null); UpdateControlsProtection(); } UpdateRecordNumberDisplay(); }
/// <summary> /// Creates a new gift or gift detail depending upon the parameter /// </summary> /// <param name="ACompletelyNewGift"></param> private void CreateANewGift(bool ACompletelyNewGift) { AGiftRow CurrentGiftRow = null; bool IsEmptyGrid = (grdDetails.Rows.Count == 1); bool HasChanges = FPetraUtilsObject.HasChanges && FMainDS.GetChangesTyped(true) != null; bool AutoSaveSuccessful = FAutoSave && HasChanges && ((TFrmGiftBatch)ParentForm).SaveChangesManual(); FCreatingNewGift = true; try { if (AutoSaveSuccessful || ((!FAutoSave || !HasChanges) && ValidateAllData(true, TErrorProcessingMode.Epm_IgnoreNonCritical))) { if (!ACompletelyNewGift) //i.e. a gift detail { ACompletelyNewGift = IsEmptyGrid; } if (ACompletelyNewGift) { //Run this if a new gift is requested or required. // we create the table locally, no dataset AGiftRow giftRow = FMainDS.AGift.NewRowTyped(true); giftRow.DateEntered = FBatchRow.GlEffectiveDate; giftRow.LedgerNumber = FBatchRow.LedgerNumber; giftRow.BatchNumber = FBatchRow.BatchNumber; giftRow.GiftTransactionNumber = ++FBatchRow.LastGiftNumber; giftRow.MethodOfPaymentCode = FBatchRow.MethodOfPaymentCode; giftRow.LastDetailNumber = 1; FMainDS.AGift.Rows.Add(giftRow); CurrentGiftRow = giftRow; mniDonorHistory.Enabled = false; } else { CurrentGiftRow = GetGiftRow(FPreviouslySelectedDetailRow.GiftTransactionNumber); CurrentGiftRow.LastDetailNumber++; } //New gifts will require a new detail anyway, so this code always runs GiftBatchTDSAGiftDetailRow newRow = FMainDS.AGiftDetail.NewRowTyped(true); newRow.LedgerNumber = FBatchRow.LedgerNumber; newRow.BatchNumber = FBatchRow.BatchNumber; newRow.GiftTransactionNumber = CurrentGiftRow.GiftTransactionNumber; newRow.DetailNumber = CurrentGiftRow.LastDetailNumber; newRow.MethodOfPaymentCode = CurrentGiftRow.MethodOfPaymentCode; newRow.MethodOfGivingCode = CurrentGiftRow.MethodOfGivingCode; newRow.DonorKey = CurrentGiftRow.DonorKey; if (!ACompletelyNewGift && (FPreviouslySelectedDetailRow != null)) { newRow.DonorName = FPreviouslySelectedDetailRow.DonorName; newRow.ConfidentialGiftFlag = FPreviouslySelectedDetailRow.ConfidentialGiftFlag; newRow.ChargeFlag = FPreviouslySelectedDetailRow.ChargeFlag; newRow.TaxDeductible = FPreviouslySelectedDetailRow.TaxDeductible; newRow.MotivationGroupCode = FPreviouslySelectedDetailRow.MotivationGroupCode; newRow.MotivationDetailCode = FPreviouslySelectedDetailRow.MotivationDetailCode; } else { newRow.MotivationGroupCode = MFinanceConstants.MOTIVATION_GROUP_GIFT; newRow.MotivationDetailCode = MFinanceConstants.GROUP_DETAIL_SUPPORT; } newRow.DateEntered = CurrentGiftRow.DateEntered; if (FTaxDeductiblePercentageEnabled) { newRow.TaxDeductiblePct = 100; } FMainDS.AGiftDetail.Rows.Add(newRow); FPetraUtilsObject.SetChangedFlag(); if (!SelectDetailRowByDataTableIndex(FMainDS.AGiftDetail.Rows.Count - 1)) { if (!FFilterAndFindObject.IsActiveFilterEqualToBase) { MessageBox.Show( MCommonResourcestrings.StrNewRecordIsFiltered, MCommonResourcestrings.StrAddNewRecordTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); FFilterAndFindObject.FilterPanelControls.ClearAllDiscretionaryFilters(); if (FFilterAndFindObject.FilterFindPanel.ShowApplyFilterButton != TUcoFilterAndFind.FilterContext.None) { FFilterAndFindObject.ApplyFilter(); } SelectDetailRowByDataTableIndex(FMainDS.AGiftDetail.Rows.Count - 1); } } btnDeleteAll.Enabled = btnDelete.Enabled; UpdateRecordNumberDisplay(); FLastDonor = -1; //Focus accordingly if (ACompletelyNewGift) { txtDetailDonorKey.Focus(); } else { txtDetailRecipientKey.Focus(); } TUC_GiftTransactions_Recipient.UpdateRecipientKeyText(0, FPreviouslySelectedDetailRow, cmbDetailMotivationGroupCode.GetSelectedString(), cmbDetailMotivationDetailCode.GetSelectedString()); cmbKeyMinistries.Clear(); mniRecipientHistory.Enabled = false; } } finally { FCreatingNewGift = false; if (AutoSaveSuccessful) { FPetraUtilsObject.WriteToStatusBar(MCommonResourcestrings.StrSavingDataSuccessful); } } }