void WriteAnalysisAttributesSuffix(ATransactionRow transaction) { FMainDS.ATransAnalAttrib.DefaultView.Sort = ATransAnalAttribTable.GetAnalysisTypeCodeDBName(); FMainDS.ATransAnalAttrib.DefaultView.RowFilter = String.Format("{0}={1} and {2}={3} and {4}={5} and {6}={7}", ATransAnalAttribTable.GetLedgerNumberDBName(), transaction.LedgerNumber, ATransAnalAttribTable.GetBatchNumberDBName(), transaction.BatchNumber, ATransAnalAttribTable.GetJournalNumberDBName(), transaction.JournalNumber, ATransAnalAttribTable.GetTransactionNumberDBName(), transaction.TransactionNumber); DataView anaView = FMainDS.ATransAnalAttrib.DefaultView; for (int i = 1; i <= maxNumValuesExport; i++) { if (i <= anaView.Count) { ATransAnalAttribRow ar = (ATransAnalAttribRow)anaView[i - 1].Row; WriteStringQuoted(ar.AnalysisTypeCode, false); WriteStringQuoted(ar.AnalysisAttributeValue, (i == maxNumValuesExport)); } else { WriteStringQuoted("", false); WriteStringQuoted("", (i == maxNumValuesExport)); } } }
/// <summary> /// Used for the validation of Analysis Attributes /// </summary> /// <param name="ATransactionNumber"></param> /// <param name="AAccountCode"></param> /// <param name="AGLBatchDS"></param> /// <param name="ValueRequiredForType"></param> /// <param name="AIsUnposted"></param> /// <returns></returns> public bool AccountAnalysisAttributesValuesExist(int ATransactionNumber, string AAccountCode, GLBatchTDS AGLBatchDS, out String ValueRequiredForType, bool AIsUnposted = true) { ValueRequiredForType = ""; if (!AIsUnposted || string.IsNullOrEmpty(AAccountCode) || (AGLBatchDS.ATransAnalAttrib.DefaultView.Count == 0)) { return(true); } StringCollection RequiredAnalAttrCodes = TRemote.MFinance.Setup.WebConnectors.RequiredAnalysisAttributesForAccount(FLedgerNumber, AAccountCode, true); string AnalysisCodeFilterValues = TAnalysisAttributes.ConvertStringCollectionToCSV(RequiredAnalAttrCodes, "'"); DataView analAttrib = new DataView(AGLBatchDS.ATransAnalAttrib); analAttrib.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6} IN ({7})", ATransAnalAttribTable.GetBatchNumberDBName(), FBatchNumber, ATransAnalAttribTable.GetJournalNumberDBName(), FJournalNumber, ATransAnalAttribTable.GetTransactionNumberDBName(), ATransactionNumber, ATransAnalAttribTable.GetAnalysisTypeCodeDBName(), AnalysisCodeFilterValues); foreach (DataRowView drv in analAttrib) { ATransAnalAttribRow rw = (ATransAnalAttribRow)drv.Row; string analysisCode = rw.AnalysisTypeCode; if (TRemote.MFinance.Setup.WebConnectors.AccountAnalysisAttributeRequiresValues(FLedgerNumber, analysisCode, true)) { if (rw.IsAnalysisAttributeValueNull() || (rw.AnalysisAttributeValue == string.Empty)) { ValueRequiredForType = rw.AnalysisTypeCode; return(false); } } } return(true); }
/// <summary> /// /// </summary> /// <param name="AGLBatchDS"></param> /// <param name="AActiveOnly"></param> /// <param name="ATransactionNumber"></param> /// <param name="AAnalysisCodeFilterValues"></param> public void SetTransAnalAttributeDefaultView(GLBatchTDS AGLBatchDS, bool AActiveOnly, Int32 ATransactionNumber = 0, String AAnalysisCodeFilterValues = "") { if (FBatchNumber != -1) { if (ATransactionNumber > 0) { if (AActiveOnly && (AAnalysisCodeFilterValues.Length > 0)) { AGLBatchDS.ATransAnalAttrib.DefaultView.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}={5} AND {6} IN ({7})", ATransAnalAttribTable.GetBatchNumberDBName(), FBatchNumber, ATransAnalAttribTable.GetJournalNumberDBName(), FJournalNumber, ATransAnalAttribTable.GetTransactionNumberDBName(), ATransactionNumber, ATransAnalAttribTable.GetAnalysisTypeCodeDBName(), AAnalysisCodeFilterValues); } else { AGLBatchDS.ATransAnalAttrib.DefaultView.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}={5}", ATransAnalAttribTable.GetBatchNumberDBName(), FBatchNumber, ATransAnalAttribTable.GetJournalNumberDBName(), FJournalNumber, ATransAnalAttribTable.GetTransactionNumberDBName(), ATransactionNumber); } } else { AGLBatchDS.ATransAnalAttrib.DefaultView.RowFilter = String.Format("{0}={1} AND {2}={3}", ATransAnalAttribTable.GetBatchNumberDBName(), FBatchNumber, ATransAnalAttribTable.GetJournalNumberDBName(), FJournalNumber); } AGLBatchDS.ATransAnalAttrib.DefaultView.Sort = String.Format("{0} ASC, {1} ASC", ATransAnalAttribTable.GetTransactionNumberDBName(), ATransAnalAttribTable.GetAnalysisTypeCodeDBName() ); } }
private bool AllowInactiveFieldValues(int ABatchNumber, out int ANumInactiveValues) { bool RetVal = false; TVerificationResultCollection VerificationResult = new TVerificationResultCollection(); string VerificationMessage = string.Empty; DataView TransDV = new DataView(FMainDS.ATransaction); DataView AttribDV = new DataView(FMainDS.ATransAnalAttrib); int NumInactiveAccounts = 0; int NumInactiveCostCentres = 0; int NumInactiveAccountTypes = 0; int NumInactiveAccountValues = 0; try { //Check for inactive account or cost centre codes TransDV.RowFilter = String.Format("{0}={1}", ATransactionTable.GetBatchNumberDBName(), ABatchNumber); TransDV.Sort = String.Format("{0} ASC, {1} ASC", ATransactionTable.GetJournalNumberDBName(), ATransactionTable.GetTransactionNumberDBName()); foreach (DataRowView drv in TransDV) { ATransactionRow transRow = (ATransactionRow)drv.Row; if (!AccountIsActive(transRow.AccountCode)) { VerificationMessage += String.Format(" Account '{0}' in Journal:{1} Transaction:{2}.{3}", transRow.AccountCode, transRow.JournalNumber, transRow.TransactionNumber, Environment.NewLine); NumInactiveAccounts++; } if (!CostCentreIsActive(transRow.CostCentreCode)) { VerificationMessage += String.Format(" Cost Centre '{0}' in Journal:{1} Transaction:{2}.{3}", transRow.CostCentreCode, transRow.JournalNumber, transRow.TransactionNumber, Environment.NewLine); NumInactiveCostCentres++; } } //Check anlysis attributes AttribDV.RowFilter = String.Format("{0}={1}", ATransAnalAttribTable.GetBatchNumberDBName(), ABatchNumber); AttribDV.Sort = String.Format("{0} ASC, {1} ASC, {2} ASC", ATransAnalAttribTable.GetJournalNumberDBName(), ATransAnalAttribTable.GetTransactionNumberDBName(), ATransAnalAttribTable.GetAnalysisTypeCodeDBName()); foreach (DataRowView drv2 in AttribDV) { ATransAnalAttribRow analAttribRow = (ATransAnalAttribRow)drv2.Row; if (!AnalysisCodeIsActive(analAttribRow.AccountCode, analAttribRow.AnalysisTypeCode)) { VerificationMessage += String.Format(" Analysis Code '{0}' in Journal:{1} Transaction:{2}.{3}", analAttribRow.AnalysisTypeCode, analAttribRow.JournalNumber, analAttribRow.TransactionNumber, Environment.NewLine); NumInactiveAccountTypes++; } if (!AnalysisAttributeValueIsActive(analAttribRow.AnalysisTypeCode, analAttribRow.AnalysisAttributeValue)) { VerificationMessage += String.Format(" Analysis Value '{0}' in Journal:{1} Transaction:{2}.{3}", analAttribRow.AnalysisAttributeValue, analAttribRow.JournalNumber, analAttribRow.TransactionNumber, Environment.NewLine); NumInactiveAccountValues++; } } } catch (Exception ex) { TLogging.LogException(ex, Utilities.GetMethodSignature()); throw; } ANumInactiveValues = (NumInactiveAccounts + NumInactiveCostCentres + NumInactiveAccountTypes + NumInactiveAccountValues); if (ANumInactiveValues > 0) { VerificationResult.Add(new TVerificationResult(string.Format(Catalog.GetString("Inactive Values:{0}"), Environment.NewLine), VerificationMessage, TResultSeverity.Resv_Noncritical)); StringBuilder errorMessages = new StringBuilder(); errorMessages.AppendFormat(Catalog.GetString("{0} inactive value(s) found in GL Batch {1}. Do you still want to post?{2}"), ANumInactiveValues, ABatchNumber, Environment.NewLine); foreach (TVerificationResult message in VerificationResult) { errorMessages.AppendFormat("{0}{1}", Environment.NewLine, message.ResultText); } TFrmExtendedMessageBox extendedMessageBox = new TFrmExtendedMessageBox(FMyForm); RetVal = (extendedMessageBox.ShowDialog(errorMessages.ToString(), Catalog.GetString("Post Batch"), string.Empty, TFrmExtendedMessageBox.TButtons.embbYesNo, TFrmExtendedMessageBox.TIcon.embiQuestion) == TFrmExtendedMessageBox.TResult.embrYes); } else { RetVal = true; } return(RetVal); }
/// <summary> /// Re-show the specified row /// </summary> /// <param name="ACurrentBatch"></param> /// <param name="AJournalToCancel"></param> /// <param name="ARedisplay"></param> public void PrepareJournalDataForCancelling(Int32 ACurrentBatch, Int32 AJournalToCancel, Boolean ARedisplay) { //This code will only be called when the Journal tab is active. DataView JournalDV = new DataView(FMainDS.AJournal); DataView TransDV = new DataView(FMainDS.ATransaction); DataView TransAnalDV = new DataView(FMainDS.ATransAnalAttrib); JournalDV.RowFilter = String.Format("{0}={1} And {2}={3}", AJournalTable.GetBatchNumberDBName(), ACurrentBatch, AJournalTable.GetJournalNumberDBName(), AJournalToCancel); TransDV.RowFilter = String.Format("{0}={1} And {2}={3}", ATransactionTable.GetBatchNumberDBName(), ACurrentBatch, ATransactionTable.GetJournalNumberDBName(), AJournalToCancel); TransAnalDV.RowFilter = String.Format("{0}={1} And {2}={3}", ATransAnalAttribTable.GetBatchNumberDBName(), ACurrentBatch, ATransAnalAttribTable.GetJournalNumberDBName(), AJournalToCancel); //Work from lowest level up if (TransAnalDV.Count > 0) { TransAnalDV.Sort = String.Format("{0}, {1}", ATransAnalAttribTable.GetTransactionNumberDBName(), ATransAnalAttribTable.GetAnalysisTypeCodeDBName()); foreach (DataRowView drv in TransAnalDV) { ATransAnalAttribRow transAnalRow = (ATransAnalAttribRow)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}", ATransactionTable.GetTransactionNumberDBName()); foreach (DataRowView drv in TransDV) { ATransactionRow transRow = (ATransactionRow)drv.Row; if (transRow.RowState == DataRowState.Added) { //Do nothing } else if (transRow.RowState != DataRowState.Unchanged) { transRow.RejectChanges(); } } } if (JournalDV.Count > 0) { GLBatchTDSAJournalRow journalRow = (GLBatchTDSAJournalRow)JournalDV[0].Row; //No need to check for Added state as new journals are always saved // on creation if (journalRow.RowState != DataRowState.Unchanged) { journalRow.RejectChanges(); } if (ARedisplay) { ShowDetails(journalRow); } } if (TransDV.Count == 0) { //Load all related data for journal ready to delete/cancel FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadATransactionAndRelatedTablesForJournal(FLedgerNumber, ACurrentBatch, AJournalToCancel)); } }
/// <summary> /// load the transactions into the grid /// </summary> /// <param name="ALedgerNumber"></param> /// <param name="ABatchNumber"></param> /// <param name="AJournalNumber"></param> /// <param name="ATransactionNumber"></param> public void LoadAttributes(Int32 ALedgerNumber, Int32 ABatchNumber, Int32 AJournalNumber, Int32 ATransactionNumber) { //Check if the same batch is selected, so no need to apply filter if ((FLedgerNumber == ALedgerNumber) && (FBatchNumber == ABatchNumber) && (FJournalNumber == AJournalNumber) && (FTransactionNumber == ATransactionNumber) && (FMainDS.ATransAnalAttrib.DefaultView.Count > 0)) { GetDataFromControls(); return; } FLedgerNumber = ALedgerNumber; FBatchNumber = ABatchNumber; FJournalNumber = AJournalNumber; FTransactionNumber = ATransactionNumber; FPreviouslySelectedDetailRow = null; FActiveOnly = (GetBatchRow().BatchStatus == MFinanceConstants.BATCH_UNPOSTED); if (!cmbDetailAnalysisAttributeValue.Enabled) { cmbDetailAnalysisAttributeValue.Enabled = true; } // only load from server if there are no attributes loaded yet for this journal // otherwise we would overwrite attributes that have already been modified FMainDS.ATransAnalAttrib.DefaultView.RowFilter = string.Empty; FMainDS.ATransAnalAttrib.DefaultView.Sort = StringHelper.StrMerge(TTypedDataTable.GetPrimaryKeyColumnStringList( ATransactionTable.TableId), ','); if (FMainDS.ATransAnalAttrib.DefaultView.Find(new object[] { FLedgerNumber, FBatchNumber, FJournalNumber, FTransactionNumber }) == -1) { FMainDS.ATransAnalAttrib.Clear(); FMainDS.Merge(TRemote.MFinance.GL.WebConnectors.LoadATransAnalAttrib(ALedgerNumber, ABatchNumber, AJournalNumber, ATransactionNumber)); } CheckFCacheInitialised(); FMainDS.ATransAnalAttrib.DefaultView.RowFilter = String.Format("{0}={1} AND {2}={3} AND {4}={5}", ATransAnalAttribTable.GetBatchNumberDBName(), FBatchNumber, ATransAnalAttribTable.GetJournalNumberDBName(), FJournalNumber, ATransAnalAttribTable.GetTransactionNumberDBName(), FTransactionNumber); FMainDS.ATransAnalAttrib.DefaultView.Sort = String.Format("{0} ASC", ATransAnalAttribTable.GetAnalysisTypeCodeDBName() ); grdDetails.DataSource = null; grdDetails.DataSource = new DevAge.ComponentModel.BoundDataView(FMainDS.ATransAnalAttrib.DefaultView); FMainDS.ATransAnalAttrib.DefaultView.AllowNew = false; if (FMainDS.ATransAnalAttrib.DefaultView.Count > 0) { SelectRowInGrid(1); pnlDetails.Enabled = !FPetraUtilsObject.DetailProtectedMode && !pnlDetailsProtected; UpdateLabels(); } else { ClearControls(); } }