public static void MarkReceiptsPrinted(int ALedgerNumber, DataTable AGiftTbl) { TDBTransaction Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.Serializable); AGiftTable Tbl = new AGiftTable(); foreach (DataRow Row in AGiftTbl.Rows) { Tbl.Merge(AGiftAccess.LoadByPrimaryKey( ALedgerNumber, Convert.ToInt32(Row["BatchNumber"]), Convert.ToInt32(Row["TransactionNumber"]), Transaction)); } foreach (AGiftRow Row in Tbl.Rows) { Row.ReceiptPrinted = true; } try { AGiftAccess.SubmitChanges(Tbl, Transaction); DBAccess.GDBAccessObj.CommitTransaction(); } catch (Exception Exc) { TLogging.Log("An Exception occured while marking Receipts as printed:" + Environment.NewLine + Exc.ToString()); DBAccess.GDBAccessObj.RollbackTransaction(); throw; } }
public static bool GetGiftsForFieldChangeAdjustment(ref GiftBatchTDS AGiftDS, Int32 ALedgerNumber, Int64 ARecipientKey, DateTime AStartDate, DateTime AEndDate, Int64 AOldField, out TVerificationResultCollection AMessages) { TDBTransaction Transaction = new TDBTransaction(); TDataBase db = DBAccess.Connect("GetGiftsForFieldChangeAdjustment"); GiftBatchTDS MainDS = new GiftBatchTDS(); AMessages = new TVerificationResultCollection(); db.ReadTransaction( ref Transaction, delegate { string SqlStmt = TDataBase.ReadSqlFile("Gift.GetGiftsToAdjustField.sql"); List <OdbcParameter> parameters = new List <OdbcParameter>(); OdbcParameter param = new OdbcParameter("LedgerNumber", OdbcType.Int); param.Value = ALedgerNumber; parameters.Add(param); param = new OdbcParameter("StartDate", OdbcType.Date); param.Value = AStartDate; parameters.Add(param); param = new OdbcParameter("EndDate", OdbcType.Date); param.Value = AEndDate; parameters.Add(param); param = new OdbcParameter("RecipientKey", OdbcType.BigInt); param.Value = ARecipientKey; parameters.Add(param); param = new OdbcParameter("OldField", OdbcType.BigInt); param.Value = AOldField; parameters.Add(param); db.Select(MainDS, SqlStmt, MainDS.AGiftDetail.TableName, Transaction, parameters.ToArray()); // get additional data foreach (GiftBatchTDSAGiftDetailRow Row in MainDS.AGiftDetail.Rows) { AGiftBatchAccess.LoadByPrimaryKey(MainDS, Row.LedgerNumber, Row.BatchNumber, Transaction); AGiftRow GiftRow = AGiftAccess.LoadByPrimaryKey(MainDS, Row.LedgerNumber, Row.BatchNumber, Row.GiftTransactionNumber, Transaction); Row.DateEntered = GiftRow.DateEntered; Row.DonorKey = GiftRow.DonorKey; Row.IchNumber = 0; Row.DonorName = PPartnerAccess.LoadByPrimaryKey(Row.DonorKey, Transaction)[0].PartnerShortName; } }); AGiftDS = MainDS; db.CloseDBConnection(); return(CheckGiftsNotPreviouslyReversed(AGiftDS, out AMessages)); }
public static bool GetGiftsForReverseAdjust( Hashtable requestParams, ref GiftBatchTDS AGiftDS, out TVerificationResultCollection AMessages) { GiftAdjustmentFunctionEnum Function = (GiftAdjustmentFunctionEnum)requestParams["Function"]; Int32 LedgerNumber = (Int32)requestParams["ALedgerNumber"]; Int32 BatchNumber = (Int32)requestParams["BatchNumber"]; AMessages = new TVerificationResultCollection(); GiftBatchTDS MainDS = new GiftBatchTDS(); TDBTransaction Transaction = new TDBTransaction(); TDataBase db = DBAccess.Connect("GetGiftsForReverseAdjust"); db.ReadTransaction( ref Transaction, delegate { // get data needed for new gifts if (Function.Equals(GiftAdjustmentFunctionEnum.ReverseGiftBatch)) { AGiftAccess.LoadViaAGiftBatch(MainDS, LedgerNumber, BatchNumber, Transaction); foreach (AGiftRow gift in MainDS.AGift.Rows) { AGiftDetailAccess.LoadViaAGift(MainDS, LedgerNumber, BatchNumber, gift.GiftTransactionNumber, Transaction); } } else { Int32 GiftNumber = (Int32)requestParams["GiftNumber"]; Int32 GiftDetailNumber = (Int32)requestParams["GiftDetailNumber"]; AGiftAccess.LoadByPrimaryKey(MainDS, LedgerNumber, BatchNumber, GiftNumber, Transaction); if (Function.Equals(GiftAdjustmentFunctionEnum.ReverseGiftDetail)) { AGiftDetailAccess.LoadByPrimaryKey(MainDS, LedgerNumber, BatchNumber, GiftNumber, GiftDetailNumber, Transaction); } else { AGiftDetailAccess.LoadViaAGift(MainDS, LedgerNumber, BatchNumber, GiftNumber, Transaction); } } }); AGiftDS = MainDS; db.CloseDBConnection(); return(CheckGiftsNotPreviouslyReversed(AGiftDS, out AMessages)); }
public static bool GetGiftsForTaxDeductiblePctAdjustment(ref GiftBatchTDS AGiftDS, Int64 ARecipientKey, DateTime ADateFrom, decimal ANewPct, out TVerificationResultCollection AMessages) { TDBTransaction Transaction = new TDBTransaction(); TDataBase db = DBAccess.Connect("GetGiftsForTaxDeductiblePctAdjustment"); GiftBatchTDS MainDS = new GiftBatchTDS(); AMessages = new TVerificationResultCollection(); db.ReadTransaction(ref Transaction, delegate { string Query = "SELECT a_gift_detail.*" + " FROM a_gift_detail, a_gift_batch" + " WHERE a_gift_detail.p_recipient_key_n = " + ARecipientKey + " AND a_gift_detail.a_tax_deductible_pct_n <> " + ANewPct + " AND a_gift_detail.a_modified_detail_l <> true" + " AND a_gift_detail.a_tax_deductible_l = true" + " AND a_gift_batch.a_ledger_number_i = a_gift_detail.a_ledger_number_i" + " AND a_gift_batch.a_batch_number_i = a_gift_detail.a_batch_number_i" + " AND a_gift_batch.a_ledger_number_i = a_gift_detail.a_ledger_number_i" + " AND a_gift_batch.a_batch_status_c = 'Posted' " + " AND a_gift_batch.a_gl_effective_date_d >= '" + ADateFrom.ToString("yyyy-MM-dd") + "'"; db.Select(MainDS, Query, MainDS.AGiftDetail.TableName, Transaction); // get additional data foreach (GiftBatchTDSAGiftDetailRow Row in MainDS.AGiftDetail.Rows) { AGiftBatchAccess.LoadByPrimaryKey(MainDS, Row.LedgerNumber, Row.BatchNumber, Transaction); AGiftRow GiftRow = AGiftAccess.LoadByPrimaryKey(MainDS, Row.LedgerNumber, Row.BatchNumber, Row.GiftTransactionNumber, Transaction); Row.DateEntered = GiftRow.DateEntered; Row.DonorKey = GiftRow.DonorKey; Row.DonorName = PPartnerAccess.LoadByPrimaryKey(Row.DonorKey, Transaction)[0].PartnerShortName; } }); AGiftDS = MainDS; return(TAdjustmentWebConnector.CheckGiftsNotPreviouslyReversed(AGiftDS, out AMessages)); }
public static bool GetGiftsForReverseAdjust( Hashtable requestParams, ref GiftBatchTDS AGiftDS, out TVerificationResultCollection AMessages) { GiftAdjustmentFunctionEnum Function = (GiftAdjustmentFunctionEnum)requestParams["Function"]; Int32 LedgerNumber = (Int32)requestParams["ALedgerNumber"]; Int32 GiftDetailNumber = (Int32)requestParams["GiftDetailNumber"]; Int32 GiftNumber = (Int32)requestParams["GiftNumber"]; Int32 BatchNumber = (Int32)requestParams["BatchNumber"]; AMessages = new TVerificationResultCollection(); GiftBatchTDS MainDS = new GiftBatchTDS(); TDBTransaction Transaction = null; DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted, TEnforceIsolationLevel.eilMinimum, ref Transaction, delegate { // get data needed for new gifts if (Function.Equals(GiftAdjustmentFunctionEnum.ReverseGiftBatch)) { AGiftAccess.LoadViaAGiftBatch(MainDS, LedgerNumber, BatchNumber, Transaction); foreach (AGiftRow gift in MainDS.AGift.Rows) { AGiftDetailAccess.LoadViaAGift(MainDS, LedgerNumber, BatchNumber, gift.GiftTransactionNumber, Transaction); } } else { AGiftAccess.LoadByPrimaryKey(MainDS, LedgerNumber, BatchNumber, GiftNumber, Transaction); if (Function.Equals(GiftAdjustmentFunctionEnum.ReverseGiftDetail)) { AGiftDetailAccess.LoadByPrimaryKey(MainDS, LedgerNumber, BatchNumber, GiftNumber, GiftDetailNumber, Transaction); } else { AGiftDetailAccess.LoadViaAGift(MainDS, LedgerNumber, BatchNumber, GiftNumber, Transaction); } } }); AGiftDS = MainDS; return(CheckGiftsNotPreviouslyReversed(AGiftDS, out AMessages)); }
public static Int32 FieldChangeAdjustment(Int32 ALedgerNumber, Int64 ARecipientKey, DateTime AStartDate, DateTime AEndDate, Int64 AOldField, DateTime ADateCorrection, bool AWithReceipt) { TDBTransaction Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.ReadCommitted); GiftBatchTDS oldGiftDS = new GiftBatchTDS(); try { // find all gifts that need reversing. // criteria: // posted gift batches only // no adjusted/reversed gifts // date of gift batch in specified date range // recipient field is the old field string SqlStmt = TDataBase.ReadSqlFile("Gift.GetGiftsToReverse.sql"); List <OdbcParameter> parameters = new List <OdbcParameter>(); OdbcParameter param = new OdbcParameter("LedgerNumber", OdbcType.Int); param.Value = ALedgerNumber; parameters.Add(param); param = new OdbcParameter("StartDate", OdbcType.Date); param.Value = AStartDate; parameters.Add(param); param = new OdbcParameter("EndDate", OdbcType.Date); param.Value = AEndDate; parameters.Add(param); param = new OdbcParameter("RecipientKey", OdbcType.BigInt); param.Value = ARecipientKey; parameters.Add(param); param = new OdbcParameter("OldField", OdbcType.BigInt); param.Value = AOldField; parameters.Add(param); DBAccess.GDBAccessObj.Select(oldGiftDS, SqlStmt, oldGiftDS.AGiftDetail.TableName, Transaction, parameters.ToArray()); // load the gift and the gift batch records if they have not been loaded yet foreach (AGiftDetailRow giftdetail in oldGiftDS.AGiftDetail.Rows) { oldGiftDS.AGift.DefaultView.RowFilter = String.Format("{0} = {1} and {2} = {3}", AGiftTable.GetBatchNumberDBName(), giftdetail.BatchNumber, AGiftTable.GetGiftTransactionNumberDBName(), giftdetail.GiftTransactionNumber); if (oldGiftDS.AGift.DefaultView.Count == 0) { AGiftTable tempGiftTable = AGiftAccess.LoadByPrimaryKey(giftdetail.LedgerNumber, giftdetail.BatchNumber, giftdetail.GiftTransactionNumber, Transaction); oldGiftDS.AGift.Merge(tempGiftTable); } oldGiftDS.AGiftBatch.DefaultView.RowFilter = String.Format("{0} = {1}", AGiftTable.GetBatchNumberDBName(), giftdetail.BatchNumber); if (oldGiftDS.AGiftBatch.DefaultView.Count == 0) { AGiftBatchTable tempGiftBatchTable = AGiftBatchAccess.LoadByPrimaryKey(giftdetail.LedgerNumber, giftdetail.BatchNumber, Transaction); oldGiftDS.AGiftBatch.Merge(tempGiftBatchTable); } } DBAccess.GDBAccessObj.RollbackTransaction(); } catch (Exception) { DBAccess.GDBAccessObj.RollbackTransaction(); throw; } // we need to create a gift batch for each set of gifts with the same Currency, BankAccountCode, BankCostCentre, and Gift Type SortedList <string, GiftBatchTDS> NewGiftBatches = new SortedList <string, GiftBatchTDS>(); foreach (GiftBatchTDSAGiftDetailRow oldGiftDetail in oldGiftDS.AGiftDetail.Rows) { // get the gift batch row for this detail oldGiftDS.AGiftBatch.DefaultView.RowFilter = String.Format("{0} = {1}", AGiftTable.GetBatchNumberDBName(), oldGiftDetail.BatchNumber); AGiftBatchRow oldGiftBatch = (AGiftBatchRow)oldGiftDS.AGiftBatch.DefaultView[0].Row; GiftBatchTDS GiftDS = CreateNewGiftBatch(NewGiftBatches, oldGiftBatch, ADateCorrection); AGiftBatchRow giftbatchRow = GiftDS.AGiftBatch[0]; // get the gift row for this detail DataView v = oldGiftDS.AGift.DefaultView; v.RowFilter = String.Format("{0} = {1} and {2} = {3}", AGiftTable.GetBatchNumberDBName(), oldGiftDetail.BatchNumber, AGiftTable.GetGiftTransactionNumberDBName(), oldGiftDetail.GiftTransactionNumber); AGiftRow oldGift = (AGiftRow)v[0].Row; AGiftRow gift = GiftDS.AGift.NewRowTyped(); gift.LedgerNumber = giftbatchRow.LedgerNumber; gift.BatchNumber = giftbatchRow.BatchNumber; gift.GiftTransactionNumber = giftbatchRow.LastGiftNumber + 1; gift.DonorKey = oldGift.DonorKey; gift.DateEntered = ADateCorrection; giftbatchRow.LastGiftNumber++; GiftDS.AGift.Rows.Add(gift); if (!AWithReceipt) { gift.ReceiptLetterCode = "NO*RECET"; } // reverse the original gift GiftBatchTDSAGiftDetailRow detail = GiftDS.AGiftDetail.NewRowTyped(); DataUtilities.CopyAllColumnValues(oldGiftDetail, detail); detail.LedgerNumber = gift.LedgerNumber; detail.BatchNumber = gift.BatchNumber; detail.GiftTransactionNumber = gift.GiftTransactionNumber; detail.DetailNumber = gift.LastDetailNumber + 1; detail.GiftAmount = detail.GiftAmount * -1; detail.GiftAmountIntl = detail.GiftAmountIntl * -1; detail.GiftTransactionAmount = detail.GiftTransactionAmount * -1; gift.LastDetailNumber++; GiftDS.AGiftDetail.Rows.Add(detail); // create the detail for the corrected gift to the new field detail = GiftDS.AGiftDetail.NewRowTyped(); DataUtilities.CopyAllColumnValues(oldGiftDetail, detail); detail.LedgerNumber = gift.LedgerNumber; detail.BatchNumber = gift.BatchNumber; detail.GiftTransactionNumber = gift.GiftTransactionNumber; detail.DetailNumber = gift.LastDetailNumber + 1; detail.GiftCommentOne = String.Format(Catalog.GetString("posted on {0}"), oldGiftBatch.GlEffectiveDate.ToShortDateString()); gift.LastDetailNumber++; // TODO: calculate costcentre code from current commitment; this currently is done only at time of posting // detail.RecipientLedgerNumber = oldGiftDetail.RecipientLedgerNumber; // detail.CostCentreCode = oldGiftDetail.CostCentreCode; GiftDS.AGiftDetail.Rows.Add(detail); // TODO: how to make sure that the gl transaction is marked as System generated? avoid display on HOSA? // mark original gift detail as modified oldGiftDetail.ModifiedDetail = true; } TVerificationResultCollection VerificationResult; TSubmitChangesResult result = TSubmitChangesResult.scrOK; for (Int32 batchCounter = 0; batchCounter < NewGiftBatches.Count; batchCounter++) { if (result == TSubmitChangesResult.scrOK) { GiftBatchTDS GiftDS = NewGiftBatches.Values[batchCounter]; result = TGiftTransactionWebConnector.SaveGiftBatchTDS(ref GiftDS, out VerificationResult); } } if (result == TSubmitChangesResult.scrOK) { result = TGiftTransactionWebConnector.SaveGiftBatchTDS(ref oldGiftDS, out VerificationResult); if ((result == TSubmitChangesResult.scrOK) && (NewGiftBatches.Count > 0)) { return(NewGiftBatches.Values[0].AGiftBatch[0].BatchNumber); } } return(-1); }
public static bool GiftRevertAdjust(Hashtable requestParams, out TVerificationResultCollection AMessages) { AMessages = new TVerificationResultCollection(); Int32 ALedgerNumber = (Int32)requestParams["ALedgerNumber"]; Boolean batchSelected = (Boolean)requestParams["NewBatchSelected"]; Int32 ANewBatchNumber = 0; bool TaxDeductiblePercentageEnabled = Convert.ToBoolean( TSystemDefaults.GetSystemDefault(SharedConstants.SYSDEFAULT_TAXDEDUCTIBLEPERCENTAGE, "FALSE")); if (batchSelected) { ANewBatchNumber = (Int32)requestParams["NewBatchNumber"]; } String Function = (String)requestParams["Function"]; Int32 AGiftDetailNumber = (Int32)requestParams["GiftDetailNumber"]; Int32 AGiftNumber = (Int32)requestParams["GiftNumber"]; Int32 ABatchNumber = (Int32)requestParams["BatchNumber"]; //decimal batchHashTotal = 0; decimal batchGiftTotal = 0; GiftBatchTDS MainDS = new GiftBatchTDS(); TDBTransaction Transaction = null; DateTime ADateEffective; Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.Serializable); try { ALedgerTable LedgerTable = ALedgerAccess.LoadByPrimaryKey(ALedgerNumber, Transaction); AGiftBatchRow giftBatch; if (!batchSelected) { ADateEffective = (DateTime)requestParams["GlEffectiveDate"]; AGiftBatchAccess.LoadByPrimaryKey(MainDS, ALedgerNumber, ABatchNumber, Transaction); AGiftBatchRow oldGiftBatch = MainDS.AGiftBatch[0]; TGiftBatchFunctions.CreateANewGiftBatchRow(ref MainDS, ref Transaction, ref LedgerTable, ALedgerNumber, ADateEffective); giftBatch = MainDS.AGiftBatch[1]; giftBatch.BankAccountCode = oldGiftBatch.BankAccountCode; giftBatch.BankCostCentre = oldGiftBatch.BankCostCentre; giftBatch.CurrencyCode = oldGiftBatch.CurrencyCode; giftBatch.ExchangeRateToBase = oldGiftBatch.ExchangeRateToBase; giftBatch.MethodOfPaymentCode = oldGiftBatch.MethodOfPaymentCode; giftBatch.HashTotal = 0; if (giftBatch.MethodOfPaymentCode.Length == 0) { giftBatch.SetMethodOfPaymentCodeNull(); } giftBatch.BankCostCentre = oldGiftBatch.BankCostCentre; giftBatch.GiftType = oldGiftBatch.GiftType; if (Function.Equals("AdjustGift")) { giftBatch.BatchDescription = Catalog.GetString("Gift Adjustment"); } else { giftBatch.BatchDescription = Catalog.GetString("Reverse Gift"); } } else { AGiftBatchAccess.LoadByPrimaryKey(MainDS, ALedgerNumber, ANewBatchNumber, Transaction); giftBatch = MainDS.AGiftBatch[0]; ADateEffective = giftBatch.GlEffectiveDate; //If into an existing batch, then retrive the existing batch total batchGiftTotal = giftBatch.BatchTotal; } if (Function.Equals("ReverseGiftBatch")) { AGiftAccess.LoadViaAGiftBatch(MainDS, ALedgerNumber, ABatchNumber, Transaction); foreach (AGiftRow gift in MainDS.AGift.Rows) { AGiftDetailAccess.LoadViaAGift(MainDS, ALedgerNumber, ABatchNumber, gift.GiftTransactionNumber, Transaction); } } else { AGiftAccess.LoadByPrimaryKey(MainDS, ALedgerNumber, ABatchNumber, AGiftNumber, Transaction); if (Function.Equals("ReverseGiftDetail")) { AGiftDetailAccess.LoadByPrimaryKey(MainDS, ALedgerNumber, ABatchNumber, AGiftNumber, AGiftDetailNumber, Transaction); } else { AGiftDetailAccess.LoadViaAGift(MainDS, ALedgerNumber, ABatchNumber, AGiftNumber, Transaction); } } //assuming new elements are added after these static borders int cycle = 0; MainDS.AGift.DefaultView.Sort = string.Format("{0}, {1}", AGiftTable.GetBatchNumberDBName(), AGiftTable.GetGiftTransactionNumberDBName()); MainDS.AGiftDetail.DefaultView.Sort = string.Format("{0}, {1}, {2}", AGiftDetailTable.GetBatchNumberDBName(), AGiftDetailTable.GetGiftTransactionNumberDBName(), AGiftDetailTable.GetDetailNumberDBName()); do { foreach (DataRowView giftRow in MainDS.AGift.DefaultView) { AGiftRow oldGift = (AGiftRow)giftRow.Row; if ((oldGift.BatchNumber == ABatchNumber) && (oldGift.LedgerNumber == ALedgerNumber) && (Function.Equals("ReverseGiftBatch") || (oldGift.GiftTransactionNumber == AGiftNumber))) { AGiftRow gift = MainDS.AGift.NewRowTyped(true); DataUtilities.CopyAllColumnValuesWithoutPK(oldGift, gift); gift.LedgerNumber = giftBatch.LedgerNumber; gift.BatchNumber = giftBatch.BatchNumber; gift.DateEntered = ADateEffective; gift.GiftTransactionNumber = giftBatch.LastGiftNumber + 1; giftBatch.LastGiftNumber++; gift.LastDetailNumber = 0; MainDS.AGift.Rows.Add(gift); foreach (DataRowView giftDetailRow in MainDS.AGiftDetail.DefaultView) { AGiftDetailRow oldGiftDetail = (AGiftDetailRow)giftDetailRow.Row; if ((oldGiftDetail.GiftTransactionNumber == oldGift.GiftTransactionNumber) && (oldGiftDetail.BatchNumber == ABatchNumber) && (oldGiftDetail.LedgerNumber == ALedgerNumber) && (!Function.Equals("ReverseGiftDetail") || (oldGiftDetail.DetailNumber == AGiftDetailNumber))) { if ((cycle == 0) && oldGiftDetail.ModifiedDetail) { AMessages.Add(new TVerificationResult( String.Format(Catalog.GetString("Cannot reverse or adjust Gift {0} with Detail {1} in Batch {2}"), oldGiftDetail.GiftTransactionNumber, oldGiftDetail.DetailNumber, oldGiftDetail.BatchNumber), String.Format(Catalog.GetString("It was already adjusted or reversed.")), TResultSeverity.Resv_Critical)); DBAccess.GDBAccessObj.RollbackTransaction(); return(false); } AGiftDetailRow giftDetail = MainDS.AGiftDetail.NewRowTyped(true); DataUtilities.CopyAllColumnValuesWithoutPK(oldGiftDetail, giftDetail); giftDetail.DetailNumber = ++gift.LastDetailNumber; giftDetail.LedgerNumber = gift.LedgerNumber; giftDetail.BatchNumber = giftBatch.BatchNumber; giftDetail.GiftTransactionNumber = gift.GiftTransactionNumber; //Identify the reversal source giftDetail.ModifiedDetailKey = "|" + oldGiftDetail.BatchNumber.ToString() + "|" + oldGiftDetail.GiftTransactionNumber.ToString() + "|" + oldGiftDetail.DetailNumber.ToString(); decimal signum = (cycle == 0) ? -1 : 1; giftDetail.GiftTransactionAmount = signum * oldGiftDetail.GiftTransactionAmount; batchGiftTotal += giftDetail.GiftTransactionAmount; giftDetail.GiftAmount = signum * oldGiftDetail.GiftAmount; giftDetail.GiftAmountIntl = signum * oldGiftDetail.GiftAmountIntl; if (TaxDeductiblePercentageEnabled) { giftDetail.TaxDeductibleAmount = signum * oldGiftDetail.TaxDeductibleAmount; giftDetail.TaxDeductibleAmountBase = signum * oldGiftDetail.TaxDeductibleAmountBase; giftDetail.TaxDeductibleAmountIntl = signum * oldGiftDetail.TaxDeductibleAmountIntl; giftDetail.NonDeductibleAmount = signum * oldGiftDetail.NonDeductibleAmount; giftDetail.NonDeductibleAmountBase = signum * oldGiftDetail.NonDeductibleAmountBase; giftDetail.NonDeductibleAmountIntl = signum * oldGiftDetail.NonDeductibleAmountIntl; } giftDetail.GiftCommentOne = (String)requestParams["ReversalCommentOne"]; giftDetail.GiftCommentTwo = (String)requestParams["ReversalCommentTwo"]; giftDetail.GiftCommentThree = (String)requestParams["ReversalCommentThree"]; giftDetail.CommentOneType = (String)requestParams["ReversalCommentOneType"]; giftDetail.CommentTwoType = (String)requestParams["ReversalCommentTwoType"]; giftDetail.CommentThreeType = (String)requestParams["ReversalCommentThreeType"]; // This is used to mark both as a Reverted giftDetails, except the adjusted (new) gift giftDetail.ModifiedDetail = (cycle == 0); oldGiftDetail.ModifiedDetail = (cycle == 0); MainDS.AGiftDetail.Rows.Add(giftDetail); } } } } cycle++; } while ((cycle < 2) && Function.Equals("AdjustGift")); //When reversing into a new or existing batch, set batch total if (!Function.Equals("AdjustGift")) { giftBatch.BatchTotal = batchGiftTotal; } // save everything at the end AGiftBatchAccess.SubmitChanges(MainDS.AGiftBatch, Transaction); ALedgerAccess.SubmitChanges(LedgerTable, Transaction); AGiftAccess.SubmitChanges(MainDS.AGift, Transaction); AGiftDetailAccess.SubmitChanges(MainDS.AGiftDetail, Transaction); MainDS.AGiftBatch.AcceptChanges(); DBAccess.GDBAccessObj.CommitTransaction(); return(true); } catch (Exception Exc) { TLogging.Log("An Exception occured while performing Gift Reverse/Adjust:" + Environment.NewLine + Exc.ToString()); DBAccess.GDBAccessObj.RollbackTransaction(); throw new EOPAppException(Catalog.GetString("Gift Reverse/Adjust failed."), Exc); } }