/// <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; } } } }
/// <summary> /// get the default bank account for this ledger /// </summary> public string GetDefaultBankAccount() { #region Validate Arguments if (FLedgerNumber <= 0) { throw new EFinanceSystemInvalidLedgerNumberException(String.Format(Catalog.GetString( "Function:{0} - The Ledger number must be greater than 0!"), Utilities.GetMethodName(true)), FLedgerNumber); } #endregion Validate Arguments TDataBase db = DBAccess.Connect("GetDefaultBankAccount", FDataBase); TDBTransaction readTransaction = new TDBTransaction(); string BankAccountCode = new TSystemDefaults(db).GetStringDefault( SharedConstants.SYSDEFAULT_GIFTBANKACCOUNT + FLedgerNumber.ToString()); if (BankAccountCode.Length == 0) { try { db.ReadTransaction( ref readTransaction, delegate { // use the first bank account AAccountPropertyTable accountProperties = AAccountPropertyAccess.LoadViaALedger(FLedgerNumber, readTransaction); accountProperties.DefaultView.RowFilter = AAccountPropertyTable.GetPropertyCodeDBName() + " = '" + MFinanceConstants.ACCOUNT_PROPERTY_BANK_ACCOUNT + "' and " + AAccountPropertyTable.GetPropertyValueDBName() + " = 'true'"; if (accountProperties.DefaultView.Count > 0) { BankAccountCode = ((AAccountPropertyRow)accountProperties.DefaultView[0].Row).AccountCode; } else { string SQLQuery = "SELECT a_gift_batch.a_bank_account_code_c" + " FROM a_gift_batch " + " WHERE a_gift_batch.a_ledger_number_i =" + FLedgerNumber + " AND a_gift_batch.a_gift_type_c = '" + MFinanceConstants.GIFT_TYPE_GIFT + "'" + " ORDER BY a_gift_batch.a_batch_number_i DESC" + " LIMIT 1;"; DataTable latestAccountCode = db.SelectDT(SQLQuery, "LatestAccountCode", readTransaction); // use the Bank Account of the previous Gift Batch if ((latestAccountCode != null) && (latestAccountCode.Rows.Count > 0)) { BankAccountCode = latestAccountCode.Rows[0][AGiftBatchTable.GetBankAccountCodeDBName()].ToString(); //"a_bank_account_code_c" } // if this is the first ever gift batch (this should happen only once!) then use the first appropriate Account Code in the database else { AAccountTable accountTable = AAccountAccess.LoadViaALedger(FLedgerNumber, readTransaction); #region Validate Data if ((accountTable == null) || (accountTable.Count == 0)) { throw new EFinanceSystemDataTableReturnedNoDataException(String.Format(Catalog.GetString( "Function:{0} - Account data for Ledger number {1} does not exist or could not be accessed!"), Utilities.GetMethodName(true), FLedgerNumber)); } #endregion Validate Data DataView dv = accountTable.DefaultView; dv.Sort = AAccountTable.GetAccountCodeDBName() + " ASC"; //a_account_code_c dv.RowFilter = String.Format("{0} = true AND {1} = true", AAccountTable.GetAccountActiveFlagDBName(), AAccountTable.GetPostingStatusDBName()); // "a_account_active_flag_l = true AND a_posting_status_l = true"; DataTable sortedDT = dv.ToTable(); TGetAccountHierarchyDetailInfo accountHierarchyTools = new TGetAccountHierarchyDetailInfo(FLedgerNumber); List <string> children = accountHierarchyTools.GetChildren(MFinanceConstants.CASH_ACCT); foreach (DataRow account in sortedDT.Rows) { // check if this account reports to the CASH account if (children.Contains(account["a_account_code_c"].ToString())) { BankAccountCode = account["a_account_code_c"].ToString(); break; } } } } }); if (FDataBase == null) { db.CloseDBConnection(); } } catch (Exception ex) { TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } } return(BankAccountCode); }
/// <summary> /// get the default bank account for this ledger /// </summary> /// <param name="ALedgerNumber"></param> public static string GetDefaultBankAccount(int ALedgerNumber) { #region Validate Arguments if (ALedgerNumber <= 0) { throw new EFinanceSystemInvalidLedgerNumberException(String.Format(Catalog.GetString( "Function:{0} - The Ledger number must be greater than 0!"), Utilities.GetMethodName(true)), ALedgerNumber); } #endregion Validate Arguments string BankAccountCode = TSystemDefaultsCache.GSystemDefaultsCache.GetStringDefault( SharedConstants.SYSDEFAULT_GIFTBANKACCOUNT + ALedgerNumber.ToString()); if (BankAccountCode.Length == 0) { TDBTransaction readTransaction = null; try { DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted, TEnforceIsolationLevel.eilMinimum, ref readTransaction, delegate { // use the first bank account AAccountPropertyTable accountProperties = AAccountPropertyAccess.LoadViaALedger(ALedgerNumber, readTransaction); accountProperties.DefaultView.RowFilter = AAccountPropertyTable.GetPropertyCodeDBName() + " = '" + MFinanceConstants.ACCOUNT_PROPERTY_BANK_ACCOUNT + "' and " + AAccountPropertyTable.GetPropertyValueDBName() + " = 'true'"; if (accountProperties.DefaultView.Count > 0) { BankAccountCode = ((AAccountPropertyRow)accountProperties.DefaultView[0].Row).AccountCode; } else { string SQLQuery = "SELECT a_gift_batch.a_bank_account_code_c " + "FROM a_gift_batch " + "WHERE a_gift_batch.a_ledger_number_i = " + ALedgerNumber + " AND a_gift_batch.a_batch_number_i = (" + "SELECT max(a_gift_batch.a_batch_number_i) " + "FROM a_gift_batch " + "WHERE a_gift_batch.a_ledger_number_i = " + ALedgerNumber + " AND a_gift_batch.a_gift_type_c = '" + MFinanceConstants.GIFT_TYPE_GIFT + "')"; DataTable LatestAccountCode = DBAccess.GDBAccessObj.SelectDT(SQLQuery, "LatestAccountCode", readTransaction); // use the Bank Account of the previous Gift Batch if ((LatestAccountCode != null) && (LatestAccountCode.Rows.Count > 0)) { BankAccountCode = LatestAccountCode.Rows[0][AGiftBatchTable.GetBankAccountCodeDBName()].ToString(); //"a_bank_account_code_c" } // if this is the first ever gift batch (this should happen only once!) then use the first appropriate Account Code in the database else { AAccountTable AccountTable = AAccountAccess.LoadViaALedger(ALedgerNumber, readTransaction); #region Validate Data if ((AccountTable == null) || (AccountTable.Count == 0)) { throw new EFinanceSystemDataTableReturnedNoDataException(String.Format(Catalog.GetString( "Function:{0} - Account data for Ledger number {1} does not exist or could not be accessed!"), Utilities.GetMethodName(true), ALedgerNumber)); } #endregion Validate Data DataView dv = AccountTable.DefaultView; dv.Sort = AAccountTable.GetAccountCodeDBName() + " ASC"; //a_account_code_c dv.RowFilter = String.Format("{0} = true AND {1} = true", AAccountTable.GetAccountActiveFlagDBName(), AAccountTable.GetPostingStatusDBName()); // "a_account_active_flag_l = true AND a_posting_status_l = true"; DataTable sortedDT = dv.ToTable(); TLedgerInfo ledgerInfo = new TLedgerInfo(ALedgerNumber); TGetAccountHierarchyDetailInfo accountHierarchyTools = new TGetAccountHierarchyDetailInfo(ledgerInfo); List <string> children = accountHierarchyTools.GetChildren(MFinanceConstants.CASH_ACCT); foreach (DataRow account in sortedDT.Rows) { // check if this account reports to the CASH account if (children.Contains(account["a_account_code_c"].ToString())) { BankAccountCode = account["a_account_code_c"].ToString(); break; } } } } }); } catch (Exception ex) { TLogging.Log(String.Format("Method:{0} - Unexpected error!{1}{1}{2}", Utilities.GetMethodSignature(), Environment.NewLine, ex.Message)); throw ex; } } return(BankAccountCode); }