/// <summary> /// Validates the ReallocationJournal Dialog. /// </summary> /// <param name="AContext">Context that describes where the data validation failed.</param> /// <param name="ARow">The <see cref="DataRow" /> which holds the the data against which the validation is run.</param> /// <param name="AAmountEnabled">True if txtDetailAmount is enabled (rather than txtDetailPercentage).</param> /// <param name="ATotalAmount">The total amount for the allocation.</param> /// <param name="AVerificationResultCollection">Will be filled with any <see cref="TVerificationResult" /> items if /// data validation errors occur.</param> /// <param name="AValidationControlsDict">A <see cref="TValidationControlsDict" /> containing the Controls that /// display data that is about to be validated.</param> /// <returns>True if the validation found no data validation errors, otherwise false.</returns> public static bool ValidateReallocationJournalDialog(object AContext, GLBatchTDSATransactionRow ARow, bool AAmountEnabled, decimal?ATotalAmount, ref TVerificationResultCollection AVerificationResultCollection, TValidationControlsDict AValidationControlsDict) { DataColumn ValidationColumn; TValidationControlsData ValidationControlsData; TScreenVerificationResult VerificationResult = null; int VerifResultCollAddedCount = 0; // Don't validate deleted DataRows if (ARow.RowState == DataRowState.Deleted) { return(true); } ValidationColumn = ARow.Table.Columns[GLBatchTDSATransactionTable.ColumnTransactionAmountId]; // an individual amount cannot be great than total amount if (AAmountEnabled && (ARow.TransactionAmount > ATotalAmount)) { if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { VerificationResult = new TScreenVerificationResult( new TVerificationResult(AContext, ErrorCodes.GetErrorInfo( PetraErrorCodes.ERR_AMOUNT_TOO_LARGE, new string[] { ARow.TransactionAmount.ToString() })), ValidationColumn, ValidationControlsData.ValidationControl); } } // Handle addition to/removal from TVerificationResultCollection if (AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn)) { VerifResultCollAddedCount++; } VerificationResult = null; ValidationColumn = ARow.Table.Columns[GLBatchTDSATransactionTable.ColumnPercentageId]; // a percentage cannot be greater than 100% if (!AAmountEnabled && (ARow.Percentage > 100)) { if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { VerificationResult = new TScreenVerificationResult( new TVerificationResult(AContext, ErrorCodes.GetErrorInfo(PetraErrorCodes.ERR_PERCENTAGE_TOO_LARGE)), ValidationColumn, ValidationControlsData.ValidationControl); } } // Handle addition to/removal from TVerificationResultCollection if (AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn)) { VerifResultCollAddedCount++; } return(VerifResultCollAddedCount == 0); }
private void ValidateDataDetailsManual(GLBatchTDSATransactionRow ARow) { TVerificationResultCollection VerificationResultCollection = FPetraUtilsObject.VerificationResultCollection; TSharedFinanceValidation_GL.ValidateAllocationJournalDialog(this, ARow, rbtAmountOption.Checked, txtTotalAmount.NumberValueDecimal, ref VerificationResultCollection, FPetraUtilsObject.ValidationControlsDict); if (!FAnalysisAttributesLogic.AccountAnalysisAttributeCountIsCorrect(ARow.TransactionNumber, ARow.AccountCode, FMainDS)) { DataColumn ValidationColumn; TVerificationResult VerificationResult = null; object ValidationContext; ValidationColumn = ARow.Table.Columns[ATransactionTable.ColumnAccountCodeId]; ValidationContext = "unused because of OverrideResultText"; // This code is only running because of failure, so cause an error to occur. VerificationResult = TStringChecks.StringMustNotBeEmpty("", ValidationContext.ToString(), this, ValidationColumn, null); VerificationResult.OverrideResultText(String.Format(Catalog.GetString( "A value must be entered for the 'Analysis Attribute' for the 'From Allocation's' Account Code {0}."), ARow.AccountCode)); // Handle addition/removal to/from TVerificationResultCollection VerificationResultCollection.Auto_Add_Or_AddOrRemove(grdToAnalAttributes, VerificationResult, ValidationColumn, true); } String ValueRequiredForType; if (!FAnalysisAttributesLogic.AccountAnalysisAttributesValuesExist(ARow.TransactionNumber, ARow.AccountCode, FMainDS, out ValueRequiredForType)) { DataColumn ValidationColumn; TVerificationResult VerificationResult = null; object ValidationContext; ValidationColumn = ARow.Table.Columns[ATransactionTable.ColumnAccountCodeId]; ValidationContext = String.Format("Analysis code {0} for Account Code {1}", ValueRequiredForType, ARow.AccountCode); // This code is only running because of failure, so cause an error to occur. VerificationResult = TStringChecks.StringMustNotBeEmpty("", ValidationContext.ToString(), this, ValidationColumn, null); // Handle addition/removal to/from TVerificationResultCollection VerificationResultCollection.Auto_Add_Or_AddOrRemove(this, VerificationResult, ValidationColumn, true); } if ((VerificationResultCollection.Count == 0) && FValidateEverything) { ValidateEverything(); } }
private void ShowDetailsManual(GLBatchTDSATransactionRow ARow) { btnDeleteAll.Enabled = pnlDetails.Enabled; if (ARow != null) { FCurrentTransactionNumber = ARow.TransactionNumber; } RefreshAnalysisAttributesGrid(cmbDetailAccountCode, FMainDS); }
private void NewRowManual(ref GLBatchTDSATransactionRow ANewRow) { ANewRow.LedgerNumber = FJournal.LedgerNumber; ANewRow.BatchNumber = FJournal.BatchNumber; ANewRow.JournalNumber = FJournal.JournalNumber; ANewRow.TransactionNumber = FNextTransactionNumber; ANewRow.TransactionDate = FJournal.DateEffective; ANewRow.CostCentreCode = System.DBNull.Value.ToString(); ANewRow.AccountCode = System.DBNull.Value.ToString(); ANewRow.Percentage = 0; FNextTransactionNumber++; }
private void ValidateDataDetailsManual(GLBatchTDSATransactionRow ARow) { TVerificationResultCollection VerificationResultCollection = FPetraUtilsObject.VerificationResultCollection; TSharedFinanceValidation_GL.ValidateReallocationJournalDialog(this, ARow, rbtAmountOption.Checked, txtFromTransactionAmount.NumberValueDecimal, ref VerificationResultCollection, FPetraUtilsObject.ValidationControlsDict); if (!FAnalysisAttributesLogic.AccountAnalysisAttributeCountIsCorrect(ARow.TransactionNumber, ARow.AccountCode, FMainDS)) { DataColumn ValidationColumn; TVerificationResult VerificationResult = null; object ValidationContext; ValidationColumn = ARow.Table.Columns[ATransactionTable.ColumnAccountCodeId]; ValidationContext = "unused because of OverrideResultText"; // This code is only running because of failure, so cause an error to occur. VerificationResult = TStringChecks.StringMustNotBeEmpty("", ValidationContext.ToString(), this, ValidationColumn, null); VerificationResult.OverrideResultText(String.Format(Catalog.GetString( "A value must be entered for the 'Analysis Attribute' for the 'From Allocation's' Account Code {0}."), ARow.AccountCode)); // Handle addition/removal to/from TVerificationResultCollection VerificationResultCollection.Auto_Add_Or_AddOrRemove(grdToAnalAttributes, VerificationResult, ValidationColumn, true); } String ValueRequiredForType; if (!FAnalysisAttributesLogic.AccountAnalysisAttributesValuesExist(ARow.TransactionNumber, ARow.AccountCode, FMainDS, out ValueRequiredForType)) { DataColumn ValidationColumn; TVerificationResult VerificationResult = null; object ValidationContext; ValidationColumn = ARow.Table.Columns[ATransactionTable.ColumnAccountCodeId]; ValidationContext = String.Format("Analysis code {0} for Account Code {1}", ValueRequiredForType, ARow.AccountCode); // This code is only running because of failure, so cause an error to occur. VerificationResult = TStringChecks.StringMustNotBeEmpty("", ValidationContext.ToString(), this, ValidationColumn, null); // Handle addition/removal to/from TVerificationResultCollection VerificationResultCollection.Auto_Add_Or_AddOrRemove(this, VerificationResult, ValidationColumn, true); } if ((VerificationResultCollection.Count == 0) && FValidateEverything) { ValidateEverything(); } }
/// load transactions from a CSV file into the currently selected batch private void CreateBatchFromCSVFile(string ADataFilename, XmlNode ARootNode, AJournalRow ARefJournalRow, Int32 AFirstTransactionRow, string ADefaultCostCentre, out DateTime ALatestTransactionDate) { StreamReader dataFile = new StreamReader(ADataFilename, System.Text.Encoding.Default); XmlNode ColumnsNode = TXMLParser.GetChild(ARootNode, "Columns"); string Separator = TXMLParser.GetAttribute(ARootNode, "Separator"); string DateFormat = TXMLParser.GetAttribute(ARootNode, "DateFormat"); string ThousandsSeparator = TXMLParser.GetAttribute(ARootNode, "ThousandsSeparator"); string DecimalSeparator = TXMLParser.GetAttribute(ARootNode, "DecimalSeparator"); Int32 lineCounter; // read headers for (lineCounter = 0; lineCounter < AFirstTransactionRow - 1; lineCounter++) { dataFile.ReadLine(); } decimal sumDebits = 0.0M; decimal sumCredits = 0.0M; ALatestTransactionDate = DateTime.MinValue; do { string line = dataFile.ReadLine(); lineCounter++; GLBatchTDSATransactionRow NewTransaction = FMainDS.ATransaction.NewRowTyped(true); FMyForm.GetTransactionsControl().NewRowManual(ref NewTransaction, ARefJournalRow); FMainDS.ATransaction.Rows.Add(NewTransaction); foreach (XmlNode ColumnNode in ColumnsNode.ChildNodes) { string Value = StringHelper.GetNextCSV(ref line, Separator); string UseAs = TXMLParser.GetAttribute(ColumnNode, "UseAs"); if (UseAs.ToLower() == "reference") { NewTransaction.Reference = Value; } else if (UseAs.ToLower() == "narrative") { NewTransaction.Narrative = Value; } else if (UseAs.ToLower() == "dateeffective") { NewTransaction.SetTransactionDateNull(); if (Value.Trim().ToString().Length > 0) { try { NewTransaction.TransactionDate = XmlConvert.ToDateTime(Value, DateFormat); if (NewTransaction.TransactionDate > ALatestTransactionDate) { ALatestTransactionDate = NewTransaction.TransactionDate; } } catch (Exception exp) { MessageBox.Show(Catalog.GetString("Problem with date in row " + lineCounter.ToString() + " Error: " + exp.Message)); } } } else if (UseAs.ToLower() == "account") { if (Value.Length > 0) { if (Value.Contains(" ")) { // cut off currency code; should have been defined in the data description file, for the whole batch Value = Value.Substring(0, Value.IndexOf(" ") - 1); } Value = Value.Replace(ThousandsSeparator, ""); Value = Value.Replace(DecimalSeparator, "."); NewTransaction.TransactionAmount = Convert.ToDecimal(Value, System.Globalization.CultureInfo.InvariantCulture); NewTransaction.CostCentreCode = ADefaultCostCentre; NewTransaction.AccountCode = ColumnNode.Name; NewTransaction.DebitCreditIndicator = true; if (TXMLParser.HasAttribute(ColumnNode, "CreditDebit") && (TXMLParser.GetAttribute(ColumnNode, "CreditDebit").ToLower() == "credit")) { NewTransaction.DebitCreditIndicator = false; } if (NewTransaction.TransactionAmount < 0) { NewTransaction.TransactionAmount *= -1.0M; NewTransaction.DebitCreditIndicator = !NewTransaction.DebitCreditIndicator; } if (TXMLParser.HasAttribute(ColumnNode, "AccountCode")) { NewTransaction.AccountCode = TXMLParser.GetAttribute(ColumnNode, "AccountCode"); } if (NewTransaction.DebitCreditIndicator) { sumDebits += NewTransaction.TransactionAmount; } else if (!NewTransaction.DebitCreditIndicator) { sumCredits += NewTransaction.TransactionAmount; } } } } if (!NewTransaction.IsTransactionDateNull()) { NewTransaction.AmountInBaseCurrency = GLRoutines.CurrencyMultiply(NewTransaction.TransactionAmount, TExchangeRateCache.GetDailyExchangeRate( ARefJournalRow.TransactionCurrency, FMainDS.ALedger[0].BaseCurrency, NewTransaction.TransactionDate, false)); // // The International currency calculation is changed to "Base -> International", because it's likely // we won't have a "Transaction -> International" conversion rate defined. // NewTransaction.AmountInIntlCurrency = GLRoutines.CurrencyMultiply(NewTransaction.AmountInBaseCurrency, TExchangeRateCache.GetDailyExchangeRate( FMainDS.ALedger[0].BaseCurrency, FMainDS.ALedger[0].IntlCurrency, NewTransaction.TransactionDate, false)); } } while (!dataFile.EndOfStream); // create a balancing transaction; not sure if this is needed at all??? if (Convert.ToDecimal(sumCredits - sumDebits) != 0) { GLBatchTDSATransactionRow BalancingTransaction = FMainDS.ATransaction.NewRowTyped(true); FMyForm.GetTransactionsControl().NewRowManual(ref BalancingTransaction, ARefJournalRow); FMainDS.ATransaction.Rows.Add(BalancingTransaction); BalancingTransaction.TransactionDate = ALatestTransactionDate; BalancingTransaction.DebitCreditIndicator = true; BalancingTransaction.TransactionAmount = sumCredits - sumDebits; if (BalancingTransaction.TransactionAmount < 0) { BalancingTransaction.TransactionAmount *= -1; BalancingTransaction.DebitCreditIndicator = !BalancingTransaction.DebitCreditIndicator; } if (BalancingTransaction.DebitCreditIndicator) { sumDebits += BalancingTransaction.TransactionAmount; } else { sumCredits += BalancingTransaction.TransactionAmount; } BalancingTransaction.AmountInIntlCurrency = GLRoutines.CurrencyMultiply(BalancingTransaction.TransactionAmount, TExchangeRateCache.GetDailyExchangeRate( ARefJournalRow.TransactionCurrency, FMainDS.ALedger[0].IntlCurrency, BalancingTransaction.TransactionDate, false)); BalancingTransaction.AmountInBaseCurrency = GLRoutines.CurrencyMultiply(BalancingTransaction.TransactionAmount, TExchangeRateCache.GetDailyExchangeRate( ARefJournalRow.TransactionCurrency, FMainDS.ALedger[0].BaseCurrency, BalancingTransaction.TransactionDate, false)); BalancingTransaction.Narrative = Catalog.GetString("Automatically generated balancing transaction"); BalancingTransaction.CostCentreCode = TXMLParser.GetAttribute(ARootNode, "CashCostCentre"); BalancingTransaction.AccountCode = TXMLParser.GetAttribute(ARootNode, "CashAccount"); } ARefJournalRow.JournalCreditTotal = sumCredits; ARefJournalRow.JournalDebitTotal = sumDebits; ARefJournalRow.JournalDescription = Path.GetFileNameWithoutExtension(ADataFilename); ABatchRow RefBatch = (ABatchRow)FMainDS.ABatch.Rows[FMainDS.ABatch.Rows.Count - 1]; RefBatch.BatchCreditTotal = sumCredits; RefBatch.BatchDebitTotal = sumDebits; // todo RefBatch.BatchControlTotal = sumCredits - sumDebits; // csv ! }
/// <summary> /// make sure the correct transaction number is assigned and the journal.lastTransactionNumber is updated /// </summary> /// <param name="ANewRow">returns the modified new transaction row</param> /// <param name="ARefJournalRow">this can be null; otherwise this is the journal that the transaction should belong to</param> public void NewRowManual(ref GLBatchTDSATransactionRow ANewRow, AJournalRow ARefJournalRow) { if (ARefJournalRow == null) { ARefJournalRow = FJournalRow; } ANewRow.LedgerNumber = ARefJournalRow.LedgerNumber; ANewRow.BatchNumber = ARefJournalRow.BatchNumber; ANewRow.JournalNumber = ARefJournalRow.JournalNumber; ANewRow.TransactionNumber = ++ARefJournalRow.LastTransactionNumber; ANewRow.TransactionDate = GetBatchRow().DateEffective; if (FPreviouslySelectedDetailRow != null) { ANewRow.CostCentreCode = FPreviouslySelectedDetailRow.CostCentreCode; // don't want these copied over if previous transaction was a reversal if (!FPreviouslySelectedDetailRow.SystemGenerated) { ANewRow.Narrative = FPreviouslySelectedDetailRow.Narrative; ANewRow.Reference = FPreviouslySelectedDetailRow.Reference; } } }
/// <summary> /// make sure the correct transaction number is assigned and the journal.lastTransactionNumber is updated; /// will use the currently selected journal /// </summary> public void NewRowManual(ref GLBatchTDSATransactionRow ANewRow) { NewRowManual(ref ANewRow, null); }
/// <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(GLBatchTDSATransactionRow ARowToDelete, ref string ACompletionMessage) { //Assign default value(s) bool DeletionSuccessful = false; ACompletionMessage = string.Empty; if (ARowToDelete == null) { return DeletionSuccessful; } bool RowToDeleteIsNew = (ARowToDelete.RowState == DataRowState.Added); if (!RowToDeleteIsNew) { //Return modified row to last saved state to avoid validation failures ARowToDelete.RejectChanges(); ShowDetails(ARowToDelete); if (!((TFrmGLBatch) this.ParentForm).SaveChanges()) { MessageBox.Show(Catalog.GetString("Error in trying to save prior to deleting current transaction!"), Catalog.GetString("Deletion Error"), MessageBoxButtons.OK, MessageBoxIcon.Error); return DeletionSuccessful; } } //Backup the Dataset for reversion purposes GLBatchTDS BackupMainDS = (GLBatchTDS)FMainDS.Copy(); BackupMainDS.Merge(FMainDS); //Pass copy to delete method. GLBatchTDS TempDS = (GLBatchTDS)FMainDS.Copy(); TempDS.Merge(FMainDS); int TransactionNumberToDelete = ARowToDelete.TransactionNumber; int TopMostTransNo = FJournalRow.LastTransactionNumber; try { this.Cursor = Cursors.WaitCursor; if (RowToDeleteIsNew) { ProcessNewlyAddedTransactionRowForDeletion(TopMostTransNo, TransactionNumberToDelete); } else { TempDS.AcceptChanges(); //Clear the transactions and load newly saved dataset FMainDS.ATransAnalAttrib.Clear(); FMainDS.ATransaction.Clear(); FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.ProcessTransAndAttributesForDeletion(TempDS, FLedgerNumber, FBatchNumber, FJournalNumber, TopMostTransNo, TransactionNumberToDelete)); } FPreviouslySelectedDetailRow = null; FPetraUtilsObject.SetChangedFlag(); ACompletionMessage = String.Format(Catalog.GetString("Transaction no.: {0} deleted successfully."), TransactionNumberToDelete); DeletionSuccessful = true; } catch (Exception ex) { ACompletionMessage = ex.Message; MessageBox.Show(ex.Message, Catalog.GetString("Deletion Error"), MessageBoxButtons.OK, MessageBoxIcon.Error); //Revert to previous state FMainDS.Merge(BackupMainDS); } finally { SetTransactionDefaultView(); FFilterAndFindObject.ApplyFilter(); this.Cursor = Cursors.Default; } return DeletionSuccessful; }
private void BtnOK_Click(Object Sender, EventArgs e) { FMainDS.ATransAnalAttrib.Merge(FTempFromDS.ATransAnalAttrib); // enables extra validation (i.e. data not in grid) FValidateEverything = true; if (ValidateAllData(false, TErrorProcessingMode.Epm_All)) { // Create the transaction to take the given amount OUT of the "allocate from" account & cost centre. GLBatchTDSATransactionRow NewRow = FMainDS.ATransaction.NewRowTyped(true); NewRow.LedgerNumber = FJournal.LedgerNumber; NewRow.BatchNumber = FJournal.BatchNumber; NewRow.JournalNumber = FJournal.JournalNumber; NewRow.TransactionNumber = FJournal.LastTransactionNumber + 1; NewRow.TransactionDate = FJournal.DateEffective; NewRow.CostCentreCode = cmbFromCostCentreCode.GetSelectedString(); NewRow.AccountCode = cmbFromAccountCode.GetSelectedString(); NewRow.DebitCreditIndicator = rbtDebit.Checked; NewRow.TransactionAmount = Convert.ToDecimal(txtTotalAmount.Text); NewRow.Reference = txtFromReference.Text; // automatic narritive if none supplied by user if (string.IsNullOrEmpty(txtFromNarrative.Text)) { NewRow.Narrative = Catalog.GetString("Allocation") + ": " + NewRow.CostCentreCode + "-" + NewRow.AccountCode; } else { NewRow.Narrative = txtFromNarrative.Text; } // add DebitCreditIndicator, Narrative and Reference to each row in grid DataView dv = ((DevAge.ComponentModel.BoundDataView)grdDetails.DataSource).DataView; for (int i = dv.Count - 1; i >= 0; i--) { GLBatchTDSATransactionRow Row = (GLBatchTDSATransactionRow)dv[i].Row; Row.DebitCreditIndicator = !rbtDebit.Checked; Row.Reference = txtFromReference.Text; // automatic narritive if none supplied by user if (string.IsNullOrEmpty(txtFromNarrative.Text)) { Row.Narrative = Catalog.GetString("Allocation to ") + NewRow.CostCentreCode + "-" + NewRow.AccountCode; } else { Row.Narrative = txtFromNarrative.Text; } } FMainDS.ATransaction.Rows.Add(NewRow); this.DialogResult = DialogResult.OK; FPetraUtilsObject.DisableSaveButton(); Close(); } // Clear any validation errors so that the following call to ValidateAllData starts with a 'clean slate'. FPetraUtilsObject.VerificationResultCollection.Clear(); FValidateEverything = false; }
/// <summary> /// Validates the ReallocationJournal Dialog. /// </summary> /// <param name="AContext">Context that describes where the data validation failed.</param> /// <param name="ARow">The <see cref="DataRow" /> which holds the the data against which the validation is run.</param> /// <param name="AAmountEnabled">True if txtDetailAmount is enabled (rather than txtDetailPercentage).</param> /// <param name="ATotalAmount">The total amount for the allocation.</param> /// <param name="AVerificationResultCollection">Will be filled with any <see cref="TVerificationResult" /> items if /// data validation errors occur.</param> /// <param name="AValidationControlsDict">A <see cref="TValidationControlsDict" /> containing the Controls that /// display data that is about to be validated.</param> /// <returns>True if the validation found no data validation errors, otherwise false.</returns> public static bool ValidateReallocationJournalDialog(object AContext, GLBatchTDSATransactionRow ARow, bool AAmountEnabled, decimal? ATotalAmount, ref TVerificationResultCollection AVerificationResultCollection, TValidationControlsDict AValidationControlsDict) { DataColumn ValidationColumn; TValidationControlsData ValidationControlsData; TScreenVerificationResult VerificationResult = null; int VerifResultCollAddedCount = 0; // Don't validate deleted DataRows if (ARow.RowState == DataRowState.Deleted) { return true; } ValidationColumn = ARow.Table.Columns[GLBatchTDSATransactionTable.ColumnTransactionAmountId]; // an individual amount cannot be great than total amount if (AAmountEnabled && (ARow.TransactionAmount > ATotalAmount)) { if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { VerificationResult = new TScreenVerificationResult( new TVerificationResult(AContext, ErrorCodes.GetErrorInfo( PetraErrorCodes.ERR_AMOUNT_TOO_LARGE, new string[] { ARow.TransactionAmount.ToString() })), ValidationColumn, ValidationControlsData.ValidationControl); } } // Handle addition to/removal from TVerificationResultCollection if (AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn)) { VerifResultCollAddedCount++; } VerificationResult = null; ValidationColumn = ARow.Table.Columns[GLBatchTDSATransactionTable.ColumnPercentageId]; // a percentage cannot be greater than 100% if (!AAmountEnabled && (ARow.Percentage > 100)) { if (AValidationControlsDict.TryGetValue(ValidationColumn, out ValidationControlsData)) { VerificationResult = new TScreenVerificationResult( new TVerificationResult(AContext, ErrorCodes.GetErrorInfo(PetraErrorCodes.ERR_PERCENTAGE_TOO_LARGE)), ValidationColumn, ValidationControlsData.ValidationControl); } } // Handle addition to/removal from TVerificationResultCollection if (AVerificationResultCollection.Auto_Add_Or_AddOrRemove(AContext, VerificationResult, ValidationColumn)) { VerifResultCollAddedCount++; } return VerifResultCollAddedCount == 0; }
/// <summary> /// make sure the correct transaction number is assigned and the journal.lastTransactionNumber is updated /// </summary> /// <param name="ANewRow">returns the modified new transaction row</param> /// <param name="ARefJournalRow">this can be null; otherwise this is the journal that the transaction should belong to</param> public void NewRowManual(ref GLBatchTDSATransactionRow ANewRow, AJournalRow ARefJournalRow) { if (ARefJournalRow == null) { ARefJournalRow = FJournalRow; } ANewRow.LedgerNumber = ARefJournalRow.LedgerNumber; ANewRow.BatchNumber = ARefJournalRow.BatchNumber; ANewRow.JournalNumber = ARefJournalRow.JournalNumber; ANewRow.TransactionNumber = ++ARefJournalRow.LastTransactionNumber; ANewRow.TransactionDate = GetBatchRow().DateEffective; if (FPreviouslySelectedDetailRow != null) { ANewRow.CostCentreCode = FPreviouslySelectedDetailRow.CostCentreCode; ANewRow.Narrative = FPreviouslySelectedDetailRow.Narrative; ANewRow.Reference = FPreviouslySelectedDetailRow.Reference; } }