private void UpdateLedgerTableSettings() { int LedgerLastRecurringGLBatchNumber = 0; //Update the last recurring GL batch number DataView RecurringGLBatchDV = new DataView(FMainDS.ARecurringBatch); RecurringGLBatchDV.RowFilter = string.Empty; RecurringGLBatchDV.Sort = string.Format("{0} DESC", ARecurringBatchTable.GetBatchNumberDBName()); //Recurring batch numbers can be reused so reset current highest number if (RecurringGLBatchDV.Count > 0) { LedgerLastRecurringGLBatchNumber = (int)(RecurringGLBatchDV[0][ARecurringBatchTable.GetBatchNumberDBName()]); } if (FMainDS.ALedger[0].LastRecurringBatchNumber != LedgerLastRecurringGLBatchNumber) { FMainDS.ALedger[0].LastRecurringBatchNumber = LedgerLastRecurringGLBatchNumber; } }
private int GetChangedRecordCountManual(out string AMessage) { // For GL Batch we will get some mix of batches, journals and transactions // Only check relevant tables. List <string> TablesToCheck = new List <string>(); TablesToCheck.Add(FMainDS.ARecurringBatch.TableName); TablesToCheck.Add(FMainDS.ARecurringJournal.TableName); TablesToCheck.Add(FMainDS.ARecurringTransaction.TableName); TablesToCheck.Add(FMainDS.ARecurringTransAnalAttrib.TableName); List <Tuple <string, int> > TableAndCountList = new List <Tuple <string, int> >(); int AllChangesCount = 0; if (FMainDS.HasChanges()) { // Work out how many changes in each table foreach (DataTable dt in FMainDS.GetChanges().Tables) { string currentTableName = dt.TableName; if ((dt != null) && TablesToCheck.Contains(currentTableName) && (dt.Rows.Count > 0)) { int tableChangesCount = 0; DataTable dtChanges = dt.GetChanges(); foreach (DataRow dr in dtChanges.Rows) { if (DataUtilities.DataRowColumnsHaveChanged(dr)) { tableChangesCount++; AllChangesCount++; } } if (tableChangesCount > 0) { TableAndCountList.Add(new Tuple <string, int>(currentTableName, tableChangesCount)); } } } } // Now build up a sensible message AMessage = String.Empty; if (TableAndCountList.Count > 0) { int nBatches = 0; int nJournals = 0; int nTransactions = 0; foreach (Tuple <string, int> TableAndCount in TableAndCountList) { if (TableAndCount.Item1.Equals(ARecurringBatchTable.GetTableName())) { nBatches = TableAndCount.Item2; } else if (TableAndCount.Item1.Equals(ARecurringJournalTable.GetTableName())) { nJournals = TableAndCount.Item2; } else if (TableAndCount.Item2 > nTransactions) { nTransactions = TableAndCount.Item2; } } AMessage = Catalog.GetString(" You have made changes to "); string strBatches = String.Empty; string strJournals = String.Empty; string strTransactions = String.Empty; if (nBatches > 0) { strBatches = String.Format("{0} recurring {1}", nBatches, Catalog.GetPluralString("batch", "batches", nBatches)); } if (nJournals > 0) { strJournals = String.Format("{0} {1}", nJournals, Catalog.GetPluralString("journal", "journals", nJournals)); } if (nTransactions > 0) { strTransactions = String.Format("{0} {1}", nTransactions, Catalog.GetPluralString("transaction", "transactions", nTransactions)); } bool bGotAll = (nBatches > 0) && (nJournals > 0) && (nTransactions > 0); if (nBatches > 0) { AMessage += strBatches; } if (nJournals > 0) { if (bGotAll) { AMessage += ", "; } else if (nBatches > 0) { AMessage += " and "; } AMessage += strJournals; } if (nTransactions > 0) { if ((nBatches > 0) || (nJournals > 0)) { AMessage += " and "; } AMessage += strTransactions; } AMessage += Environment.NewLine + Catalog.GetString("(some of the changes may include related background items)"); AMessage += Environment.NewLine; AMessage += String.Format(TFrmPetraEditUtils.StrConsequenceIfNotSaved, Environment.NewLine); } return(AllChangesCount); }
private int GetChangedRecordCountManual(out string AMessage) { // For GL Batch we will get some mix of batches, journals and transactions List <Tuple <string, int> > TableAndCountList = new List <Tuple <string, int> >(); int allChangesCount = 0; // Work out how many changes in each table foreach (DataTable dt in FMainDS.Tables) { if (dt != null) { int tableChangesCount = 0; foreach (DataRow dr in dt.Rows) { if (dr.RowState != DataRowState.Unchanged) { tableChangesCount++; allChangesCount++; } } if (tableChangesCount > 0) { TableAndCountList.Add(new Tuple <string, int>(dt.TableName, tableChangesCount)); } } } // Now build up a sensible message AMessage = String.Empty; if (TableAndCountList.Count > 0) { int nBatches = 0; int nJournals = 0; int nTransactions = 0; foreach (Tuple <string, int> TableAndCount in TableAndCountList) { if (TableAndCount.Item1.Equals(ARecurringBatchTable.GetTableName())) { nBatches = TableAndCount.Item2; } else if (TableAndCount.Item1.Equals(ARecurringJournalTable.GetTableName())) { nJournals = TableAndCount.Item2; } else if (TableAndCount.Item2 > nTransactions) { nTransactions = TableAndCount.Item2; } } AMessage = Catalog.GetString(" You have made changes to "); string strBatches = String.Empty; string strJournals = String.Empty; string strTransactions = String.Empty; if (nBatches > 0) { strBatches = String.Format("{0} {1}", nBatches, Catalog.GetPluralString("batch", "batches", nBatches)); } if (nJournals > 0) { strJournals = String.Format("{0} {1}", nJournals, Catalog.GetPluralString("journal", "journals", nJournals)); } if (nTransactions > 0) { strTransactions = String.Format("{0} {1}", nTransactions, Catalog.GetPluralString("transaction", "transactions", nTransactions)); } bool bGotAll = (nBatches > 0) && (nJournals > 0) && (nTransactions > 0); if (nBatches > 0) { AMessage += strBatches; } if (nJournals > 0) { if (bGotAll) { AMessage += ", "; } else if (nBatches > 0) { AMessage += " and "; } AMessage += strJournals; } if (nTransactions > 0) { if ((nBatches > 0) || (nJournals > 0)) { AMessage += " and "; } AMessage += strTransactions; } AMessage += Environment.NewLine; AMessage += String.Format(TFrmPetraEditUtils.StrConsequenceIfNotSaved, Environment.NewLine); } return(allChangesCount); }
/// <summary> /// Undo all changes to the specified batch ready to cancel it. /// This avoids unecessary validation errors when cancelling. /// </summary> /// <param name="ABatchToDelete"></param> /// <param name="ARedisplay"></param> public void PrepareBatchDataForDeleting(Int32 ABatchToDelete, Boolean ARedisplay) { //This code will only be called when the Batch tab is active. DataView GLBatchDV = new DataView(FMainDS.ARecurringBatch); DataView JournalDV = new DataView(FMainDS.ARecurringJournal); DataView TransDV = new DataView(FMainDS.ARecurringTransaction); DataView TransAnalDV = new DataView(FMainDS.ARecurringTransAnalAttrib); GLBatchDV.RowFilter = String.Format("{0}={1}", ARecurringBatchTable.GetBatchNumberDBName(), ABatchToDelete); JournalDV.RowFilter = String.Format("{0}={1}", ARecurringJournalTable.GetBatchNumberDBName(), ABatchToDelete); TransDV.RowFilter = String.Format("{0}={1}", ARecurringTransactionTable.GetBatchNumberDBName(), ABatchToDelete); TransAnalDV.RowFilter = String.Format("{0}={1}", ARecurringTransAnalAttribTable.GetBatchNumberDBName(), ABatchToDelete); //Work from lowest level up if (TransAnalDV.Count > 0) { TransAnalDV.Sort = String.Format("{0}, {1}, {2}", ARecurringTransAnalAttribTable.GetJournalNumberDBName(), ARecurringTransAnalAttribTable.GetTransactionNumberDBName(), ARecurringTransAnalAttribTable.GetAnalysisTypeCodeDBName()); foreach (DataRowView drv in TransAnalDV) { ARecurringTransAnalAttribRow transAnalRow = (ARecurringTransAnalAttribRow)drv.Row; if (transAnalRow.RowState == DataRowState.Added) { //Do nothing } else if (transAnalRow.RowState != DataRowState.Unchanged) { transAnalRow.RejectChanges(); } } } if (TransDV.Count > 0) { TransDV.Sort = String.Format("{0}, {1}", ARecurringTransactionTable.GetJournalNumberDBName(), ARecurringTransactionTable.GetTransactionNumberDBName()); foreach (DataRowView drv in TransDV) { ARecurringTransactionRow transRow = (ARecurringTransactionRow)drv.Row; if (transRow.RowState == DataRowState.Added) { //Do nothing } else if (transRow.RowState != DataRowState.Unchanged) { transRow.RejectChanges(); } } } if (JournalDV.Count > 0) { JournalDV.Sort = String.Format("{0}", ARecurringJournalTable.GetJournalNumberDBName()); foreach (DataRowView drv in JournalDV) { ARecurringJournalRow journalRow = (ARecurringJournalRow)drv.Row; if (journalRow.RowState == DataRowState.Added) { //Do nothing } else if (journalRow.RowState != DataRowState.Unchanged) { journalRow.RejectChanges(); } } } if (GLBatchDV.Count > 0) { ARecurringBatchRow batchRow = (ARecurringBatchRow)GLBatchDV[0].Row; //No need to check for Added state as new batches are always saved // on creation if (batchRow.RowState != DataRowState.Unchanged) { batchRow.RejectChanges(); } if (ARedisplay) { ShowDetails(batchRow); } } if (TransDV.Count == 0) { //Load all related data for batch ready to delete/cancel FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadARecurringJournalAndRelatedTablesForBatch(FLedgerNumber, ABatchToDelete)); } }