/// <summary> /// Carry out the gift adjustment (field or tax deductible pct) /// </summary> /// <param name="AGiftBatchDS">Gift Batch containing GiftDetail rows for all gifts to be adjusted.</param> /// <param name="ANewPct">New Tax Deductible Percentage (null if not being used)</param> /// <param name="ANoReceipt">True if no receipt</param> /// <param name="AParentForm"></param> public static void GiftAdjustment(GiftBatchTDS AGiftBatchDS, decimal?ANewPct, bool ANoReceipt, Form AParentForm) { // sort gift batches so like batches are together AGiftBatchDS.AGiftBatch.DefaultView.Sort = AGiftBatchTable.GetLedgerNumberDBName() + " ASC, " + AGiftBatchTable.GetCurrencyCodeDBName() + " ASC, " + AGiftBatchTable.GetBankCostCentreDBName() + " ASC, " + AGiftBatchTable.GetBankAccountCodeDBName() + " ASC, " + AGiftBatchTable.GetGiftTypeDBName() + " ASC"; GiftBatchTDS NewGiftDS = new GiftBatchTDS(); NewGiftDS.AGiftDetail.Merge(new GiftBatchTDSAGiftDetailTable()); for (int i = 0; i < AGiftBatchDS.AGiftBatch.Rows.Count; i++) { AGiftBatchRow OldGiftBatch = (AGiftBatchRow)AGiftBatchDS.AGiftBatch.DefaultView[i].Row; AGiftBatchRow NextGiftBatch = null; // add batch's gift/s to dataset DataView Gifts = new DataView(AGiftBatchDS.AGift); Gifts.RowFilter = string.Format("{0}={1}", AGiftDetailTable.GetBatchNumberDBName(), OldGiftBatch.BatchNumber); foreach (DataRowView giftRows in Gifts) { AGiftRow gR = (AGiftRow)giftRows.Row; NewGiftDS.AGift.ImportRow(gR); } // add batch's gift detail/s to dataset DataView GiftDetails = new DataView(AGiftBatchDS.AGiftDetail); GiftDetails.RowFilter = string.Format("{0}={1}", AGiftDetailTable.GetBatchNumberDBName(), OldGiftBatch.BatchNumber); foreach (DataRowView giftDetailRows in GiftDetails) { AGiftDetailRow gDR = (AGiftDetailRow)giftDetailRows.Row; NewGiftDS.AGiftDetail.ImportRow(gDR); } // if not the last row if (i != AGiftBatchDS.AGiftBatch.Rows.Count - 1) { NextGiftBatch = (AGiftBatchRow)AGiftBatchDS.AGiftBatch.DefaultView[i + 1].Row; } // if this is the last batch or if the next batch's gifts need to be added to a different new batch if ((NextGiftBatch == null) || (NextGiftBatch.LedgerNumber != OldGiftBatch.LedgerNumber) || (NextGiftBatch.CurrencyCode != OldGiftBatch.CurrencyCode) || (NextGiftBatch.BankCostCentre != OldGiftBatch.BankCostCentre) || (NextGiftBatch.BankAccountCode != OldGiftBatch.BankAccountCode) || (NextGiftBatch.GiftType != OldGiftBatch.GiftType)) { TFrmGiftRevertAdjust AdjustForm = new TFrmGiftRevertAdjust(AParentForm); try { AParentForm.ShowInTaskbar = false; AdjustForm.LedgerNumber = OldGiftBatch.LedgerNumber; AdjustForm.CurrencyCode = OldGiftBatch.CurrencyCode; AdjustForm.Text = "Adjust Gift"; AdjustForm.AddParam("Function", GiftAdjustmentFunctionEnum.FieldAdjust); AdjustForm.GiftMainDS = NewGiftDS; AdjustForm.NoReceipt = ANoReceipt; AdjustForm.AddBatchDetailsToScreen(OldGiftBatch.LedgerNumber, OldGiftBatch.CurrencyCode, OldGiftBatch.BankCostCentre, OldGiftBatch.BankAccountCode, OldGiftBatch.GiftType); if (ANewPct != null) { AdjustForm.AddParam("Function", GiftAdjustmentFunctionEnum.TaxDeductiblePctAdjust); AdjustForm.AddParam("NewPct", ANewPct); // gift destination must be the original for tax deduct pct adjustments AdjustForm.AddParam("FixedGiftDestination", true); // comments will be auto completed AdjustForm.AutoCompleteComments(); } else { AdjustForm.AddParam("Function", GiftAdjustmentFunctionEnum.FieldAdjust); } AdjustForm.GiftDetailRow = NewGiftDS.AGiftDetail[0]; if (AdjustForm.IsDisposed || (AdjustForm.ShowDialog() != DialogResult.OK)) { continue; } } finally { AParentForm.Cursor = Cursors.WaitCursor; AdjustForm.Dispose(); AParentForm.ShowInTaskbar = true; NewGiftDS.AGiftDetail.Clear(); NewGiftDS.AGift.Clear(); AParentForm.Cursor = Cursors.Default; } } } }