/// <summary> /// Calculates the report, which is specified in the parameters table /// /// </summary> /// <returns>void</returns> public void Start(System.Data.DataTable AParameters) { FProgressID = "ReportCalculation" + Guid.NewGuid(); TProgressTracker.InitProgressTracker(FProgressID, string.Empty, -1.0m); FParameterList = new TParameterList(); FParameterList.LoadFromDataTable(AParameters); FSuccess = false; String PathStandardReports = TAppSettingsManager.GetValue("Reporting.PathStandardReports"); String PathCustomReports = TAppSettingsManager.GetValue("Reporting.PathCustomReports"); FDatacalculator = new TRptDataCalculator(PathStandardReports, PathCustomReports); // setup the logging to go to the TProgressTracker TLogging.SetStatusBarProcedure(new TLogging.TStatusCallbackProcedure(WriteToStatusBar)); string session = TSession.GetSessionID(); ThreadStart myThreadStart = delegate { Run(session); }; Thread TheThread = new Thread(myThreadStart); TheThread.CurrentCulture = Thread.CurrentThread.CurrentCulture; TheThread.Name = FProgressID + "_" + UserInfo.GetUserInfo().UserID + "__TReportGeneratorUIConnector.Start_Thread"; TLogging.LogAtLevel(7, TheThread.Name + " starting."); TheThread.Start(); }
public static DataSet GetOneYearMonthGivingDataSet(Dictionary <String, TVariant> AParameters) { FDbAdapter = new TReportingDbAdapter(false); TLogging.SetStatusBarProcedure(WriteToStatusBar); DataSet ReturnDataSet = new DataSet(); // get recipients DataTable Recipients = TFinanceReportingWebConnector.RecipientGiftStatementRecipientTable(AParameters, FDbAdapter); if (FDbAdapter.IsCancelled || (Recipients == null)) { return(null); } DataTable Donors = new DataTable("Donors"); foreach (DataRow Row in Recipients.Rows) { // get donor information for each recipient Donors.Merge(TFinanceReportingWebConnector.OneYearMonthGivingDonorTable(AParameters, (Int64)Row["RecipientKey"], FDbAdapter)); if (FDbAdapter.IsCancelled) { return(null); } } ReturnDataSet.Tables.Add(Recipients); ReturnDataSet.Tables.Add(Donors); return((FDbAdapter.IsCancelled) ? null : ReturnDataSet); }
public static DataSet GetReportDataSet(String AReportType, Dictionary <String, TVariant> AParameters) { TLogging.SetStatusBarProcedure(WriteToStatusBar); DataSet ResultSet = null; FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. switch (AReportType) { /* Financial Development */ case "GiftsOverMinimum": ResultSet = TFinanceReportingWebConnector.GiftsOverMinimum(AParameters, FDbAdapter); break; default: TLogging.Log("GetDataSetThread unknown ReportType: " + AReportType); break; } FDbAdapter.CloseConnection(); if (FDbAdapter.IsCancelled) { ResultSet = null; } return(ResultSet); }
/// <summary> /// Calculates the report, which is specified in the parameters table /// /// </summary> /// <returns>void</returns> public void Start(System.Data.DataTable AParameters) { TRptUserFunctionsFinance.FlushSqlCache(); FProgressID = "ReportCalculation" + Guid.NewGuid(); TProgressTracker.InitProgressTracker(FProgressID, string.Empty, -1.0m); FParameterList = new TParameterList(); FParameterList.LoadFromDataTable(AParameters); FSuccess = false; String PathStandardReports = TAppSettingsManager.GetValue("Reporting.PathStandardReports"); String PathCustomReports = TAppSettingsManager.GetValue("Reporting.PathCustomReports"); FDatacalculator = new TRptDataCalculator(DBAccess.GDBAccessObj, PathStandardReports, PathCustomReports); // setup the logging to go to the TProgressTracker TLogging.SetStatusBarProcedure(new TLogging.TStatusCallbackProcedure(WriteToStatusBar)); string session = TSession.GetSessionID(); ThreadStart myThreadStart = delegate { Run(session); }; Thread TheThread = new Thread(myThreadStart); TheThread.Name = FProgressID; TheThread.CurrentCulture = Thread.CurrentThread.CurrentCulture; TheThread.Start(); }
/// <summary> /// the client can cancel the job /// </summary> /// <param name="AClientID"></param> static public bool CancelJob(string AClientID) { if (TSession.HasVariable(PROGRESSTRACKER + AClientID)) { TProgressState state = ((JObject)TSession.GetVariable(PROGRESSTRACKER + AClientID)).ToObject <TProgressState>(); TLogging.SetStatusBarProcedure(null); if (state.JobFinished == true) { if (TLogging.DebugLevel >= DEBUG_PROGRESS) { TLogging.Log("Cannot cancel the job for " + AClientID + " because the job has already finished"); } } else { state.CancelJob = true; if (TLogging.DebugLevel >= DEBUG_PROGRESS) { TLogging.Log("Cancelled the job for " + AClientID); } TSession.SetVariable(PROGRESSTRACKER + AClientID, state); return(true); } } return(false); }
/// <summary> /// constructor /// </summary> public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); new TLogging(); TLogging.DebugLevel = 1; TLogging.SetStatusBarProcedure(WriteLogging); }
public static DataTable GetReportDataTable(String AReportType, Dictionary <String, TVariant> AParameters) { FDbAdapter = new TReportingDbAdapter(); TLogging.SetStatusBarProcedure(WriteToStatusBar); DataTable ResultTbl = null; switch (AReportType) { case "BalanceSheet": ResultTbl = TFinanceReportingWebConnector.BalanceSheetTable(AParameters, FDbAdapter); break; case "HOSA": ResultTbl = TFinanceReportingWebConnector.HosaGiftsTable(AParameters, FDbAdapter); break; case "Stewardship": ResultTbl = TFinanceReportingWebConnector.StewardshipTable(AParameters, FDbAdapter); break; case "IncomeExpense": ResultTbl = TFinanceReportingWebConnector.IncomeExpenseTable(AParameters, FDbAdapter); break; case "AFO": ResultTbl = TFinanceReportingWebConnector.AFOTable(AParameters, FDbAdapter); break; case "Executive Summary": ResultTbl = TFinanceReportingWebConnector.ExecutiveSummaryTable(AParameters, FDbAdapter); break; case "TrialBalance": ResultTbl = TFinanceReportingWebConnector.TrialBalanceTable(AParameters, FDbAdapter); break; case "GiftBatchDetail": ResultTbl = TFinanceReportingWebConnector.GiftBatchDetailTable(AParameters, FDbAdapter); break; case "RecipientTaxDeductPct": ResultTbl = TFinanceReportingWebConnector.RecipientTaxDeductPctTable(AParameters, FDbAdapter); break; default: TLogging.Log("GetDatatableThread unknown ReportType: " + AReportType); break; } return((FDbAdapter.IsCancelled) ? null : ResultTbl); }
/// <summary> /// Calculates the report, which is specified in the parameters table /// /// </summary> /// <returns>void</returns> public void Start(System.Data.DataTable AParameters) { FProgressID = "ReportCalculation" + Guid.NewGuid(); TProgressTracker.InitProgressTracker(FProgressID, string.Empty, -1.0m); // First check whether the 'globally available' DB Connection isn't busy - we must not allow the start of a // Report Calculation when that is the case (as this would lead to a nested DB Transaction exception, // EDBTransactionBusyException). if (DBAccess.GDBAccessObj.Transaction != null) { FErrorMessage = Catalog.GetString(SharedConstants.NO_PARALLEL_EXECUTION_OF_XML_REPORTS_PREFIX + "The OpenPetra Server is currently too busy to prepare this Report. " + "Please retry once other running tasks (eg. a Report) are finished!"); TProgressTracker.FinishJob(FProgressID); FSuccess = false; // Return to the Client immediately! return; } TRptUserFunctionsFinance.FlushSqlCache(); FParameterList = new TParameterList(); FParameterList.LoadFromDataTable(AParameters); FSuccess = false; String PathStandardReports = TAppSettingsManager.GetValue("Reporting.PathStandardReports"); String PathCustomReports = TAppSettingsManager.GetValue("Reporting.PathCustomReports"); FDatacalculator = new TRptDataCalculator(DBAccess.GDBAccessObj, PathStandardReports, PathCustomReports); // setup the logging to go to the TProgressTracker TLogging.SetStatusBarProcedure(new TLogging.TStatusCallbackProcedure(WriteToStatusBar)); string session = TSession.GetSessionID(); ThreadStart myThreadStart = delegate { Run(session); }; Thread TheThread = new Thread(myThreadStart); TheThread.CurrentCulture = Thread.CurrentThread.CurrentCulture; TheThread.Name = FProgressID + "_" + UserInfo.GUserInfo.UserID + "__TReportGeneratorUIConnector.Start_Thread"; TLogging.LogAtLevel(7, TheThread.Name + " starting."); TheThread.Start(); }
/// <summary> /// Calculates the report, which is specified in the parameters table /// /// </summary> /// <returns>void</returns> public void Start(System.Data.DataTable AParameters) { TRptUserFunctionsFinance.FlushSqlCache(); this.FAsyncExecProgress = new TAsynchronousExecutionProgress(); this.FAsyncExecProgress.ProgressState = TAsyncExecProgressState.Aeps_Executing; FParameterList = new TParameterList(); FParameterList.LoadFromDataTable(AParameters); FSuccess = false; String PathStandardReports = TAppSettingsManager.GetValue("Reporting.PathStandardReports"); String PathCustomReports = TAppSettingsManager.GetValue("Reporting.PathCustomReports"); FDatacalculator = new TRptDataCalculator(DBAccess.GDBAccessObj, PathStandardReports, PathCustomReports); // setup the logging to go to the FAsyncExecProgress.ProgressInformation TLogging.SetStatusBarProcedure(new TLogging.TStatusCallbackProcedure(WriteToStatusBar)); Thread TheThread = new Thread(new ThreadStart(Run)); TheThread.CurrentCulture = Thread.CurrentThread.CurrentCulture; TheThread.Start(); }
private void GenerateReport() { try { FPreviewForm.Cursor = Cursors.WaitCursor; TLogging.SetStatusBarProcedure(FPetraUtilsObject.WriteToStatusBar); // calculate the report FCalculator = new TRptCalculator(); FCalculator.GetParameters().LoadFromDataTable(FDetailParameters.ToDataTable()); if (FCalculator.GenerateResultRemoteClient()) { if (TClientSettings.DebugLevel >= TClientSettings.DEBUGLEVEL_REPORTINGDATA) { FCalculator.GetParameters().Save(TClientSettings.PathLog + Path.DirectorySeparatorChar + "debugParameterReturn.xml", true); FCalculator.GetResults().WriteCSV( FCalculator.GetParameters(), TClientSettings.PathLog + Path.DirectorySeparatorChar + "debugResultReturn.csv"); } FPreviewForm.Cursor = Cursors.Default; object[] Args = new object[1]; Args[0] = FCalculator; FPreviewForm.Invoke((System.Delegate) new TPreviewDelegate(FPreviewDelegate), Args); TLogging.Log("", TLoggingType.ToStatusBar); } else { // if generateResult failed FPreviewForm.Cursor = Cursors.Default; // EnableDisableToolbar(true); } } catch (Exception e) { TLogging.Log("Exception in GenerateReport: " + e.ToString()); // EnableDisableToolbar(true); } }
/// <summary> /// the server will set the job to finished /// </summary> static public bool FinishJob(string AClientID) { if (TSession.HasVariable(PROGRESSTRACKER + AClientID)) { TProgressState state = ((JObject)TSession.GetVariable(PROGRESSTRACKER + AClientID)).ToObject <TProgressState>(); state.JobFinished = true; if (TLogging.DebugLevel >= DEBUG_PROGRESS) { TLogging.Log("Finished the job for " + AClientID); } TSession.SetVariable(PROGRESSTRACKER + AClientID, state); TLogging.SetStatusBarProcedure(null); return(true); } return(false); }
/// <summary> /// to be called from PetraClient /// the latest patch zip files have already been copied; /// </summary> public static void PatchRemoteInstallation() { String oldPatchVersion; TPetraPatchTools patchTools; Boolean startPetraClient; System.Diagnostics.Process PetraClientProcess; startPetraClient = true; TLogging.SetStatusBarProcedure(new TLogging.TStatusCallbackProcedure(WriteToStatusWindow)); patchTools = new TPetraPatchTools(TAppSettingsManager.GetValue("OpenPetra.Path"), TAppSettingsManager.GetValue("OpenPetra.Path") + Path.DirectorySeparatorChar + "bin" + TPatchTools.OPENPETRA_VERSIONPREFIX, TAppSettingsManager.GetValue("OpenPetra.PathTemp"), "", TAppSettingsManager.GetValue("OpenPetra.Path.Patches"), TAppSettingsManager.GetValue("OpenPetra.Path.RemotePatches", false)); if (patchTools.CheckForRecentPatch()) { oldPatchVersion = patchTools.GetCurrentPatchVersion(); if (patchTools.PatchTheFiles()) { patchTools.CheckForRecentPatch(); TLogging.Log("The patch was installed successfully."); TLogging.Log("Your OpenPetra was on patch " + oldPatchVersion + ", " + "and is now on patch " + patchTools.GetCurrentPatchVersion()); } else { startPetraClient = false; } } else { // todo: will this ever be executed? this should be checked by PetraClient if ((!patchTools.GetCurrentPatchVersion().Equals(patchTools.GetLatestPatchVersion()))) { TLogging.Log("Problem: You don't have all patches that are necessary for patching to the latest patch."); } else { TLogging.Log("Note: There is no new patch to be installed."); } } if (StatusWindowThread != null) { StatusWindowThread.Join(); } if (startPetraClient) { // restart Petra Client if patch was successful PetraClientProcess = new System.Diagnostics.Process(); PetraClientProcess.EnableRaisingEvents = false; PetraClientProcess.StartInfo.FileName = TAppSettingsManager.GetValue("OpenPetra.Path.Bin") + Path.DirectorySeparatorChar + "PetraClient.exe"; PetraClientProcess.StartInfo.Arguments = "-C:\"" + TAppSettingsManager.GetValue("ClientConfig") + "\""; PetraClientProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; PetraClientProcess.Start(); } }
public static DataTable GetReportDataTable(String AReportType, Dictionary <String, TVariant> AParameters) { TLogging.SetStatusBarProcedure(WriteToStatusBar); DataTable ResultTbl = null; switch (AReportType) { /* GL Reports */ case "BalanceSheet": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.BalanceSheetTable(AParameters, FDbAdapter); break; case "FieldGifts": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.KeyMinGiftsTable(AParameters, FDbAdapter); break; case "HOSA": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.HosaGiftsTable(AParameters, FDbAdapter); break; case "Stewardship": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.StewardshipTable(AParameters, FDbAdapter); break; case "Fees": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.FeesTable(AParameters, FDbAdapter); break; case "StewardshipForPeriod": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.StewardshipForPeriodTable(AParameters, FDbAdapter); break; case "IncomeExpense": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.IncomeExpenseTable(AParameters, FDbAdapter); break; case "AFO": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.AFOTable(AParameters, FDbAdapter); break; case "Executive Summary": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.ExecutiveSummaryTable(AParameters, FDbAdapter); break; case "TrialBalance": FDbAdapter = new TReportingDbAdapter(false); ResultTbl = TFinanceReportingWebConnector.TrialBalanceTable(AParameters, FDbAdapter); break; case "SurplusDeficit": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.SurplusDeficitTable(AParameters, FDbAdapter); break; /* Gift Reports */ case "GiftBatchDetail": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.GiftBatchDetailTable(AParameters, FDbAdapter); break; case "RecipientTaxDeductPct": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.RecipientTaxDeductPctTable(AParameters, FDbAdapter); break; case "FieldLeaderGiftSummary": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.FieldLeaderGiftSummary(AParameters, FDbAdapter); break; case "TotalGiftsThroughField": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.TotalGiftsThroughField(AParameters, FDbAdapter); break; case "MotivationResponse": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.MotivationResponse(AParameters, FDbAdapter); break; case "DonorGiftsToField": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.DonorGiftsToField(AParameters, FDbAdapter); break; case "GiftDestination": FDbAdapter = new TReportingDbAdapter(false); ResultTbl = TFinanceReportingWebConnector.GiftDestination(AParameters, FDbAdapter); break; case "TotalForRecipients": FDbAdapter = new TReportingDbAdapter(false); ResultTbl = TFinanceReportingWebConnector.TotalForRecipients(AParameters, FDbAdapter); break; /* Financial Development */ case "SYBUNT": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.SYBUNTTable(AParameters, FDbAdapter); break; case "GiftsOverMinimum": FDbAdapter = new TReportingDbAdapter(true); // Uses a separate DB Connection. ResultTbl = TFinanceReportingWebConnector.GiftsOverMinimum(AParameters, FDbAdapter); break; default: TLogging.Log("GetDatatableThread unknown ReportType: " + AReportType); break; } if (FDbAdapter != null) { FDbAdapter.CloseConnection(); if (FDbAdapter.IsCancelled) { ResultTbl = null; } } return(ResultTbl); }
public static DataSet GetRecipientGiftStatementDataSet(Dictionary <String, TVariant> AParameters) { string ReportType = AParameters["param_report_type"].ToString(); FDbAdapter = new TReportingDbAdapter(false); TLogging.SetStatusBarProcedure(WriteToStatusBar); DataSet ReturnDataSet = new DataSet(); // get recipients DataTable Recipients = TFinanceReportingWebConnector.RecipientGiftStatementRecipientTable(AParameters, FDbAdapter); if (FDbAdapter.IsCancelled || (Recipients == null)) { return(null); } DataTable RecipientTotals = new DataTable("RecipientTotals"); RecipientTotals.Columns.Add("PreviousYearTotal", typeof(decimal)); RecipientTotals.Columns.Add("CurrentYearTotal", typeof(decimal)); DataTable Donors = new DataTable("Donors"); foreach (DataRow Row in Recipients.Rows) { if (ReportType == "Complete") { // get year totals for recipient RecipientTotals.Merge(TFinanceReportingWebConnector.RecipientGiftStatementTotalsTable(AParameters, (Int64)Row["RecipientKey"], FDbAdapter)); } // get donor information for each recipient Donors.Merge(TFinanceReportingWebConnector.RecipientGiftStatementDonorTable(AParameters, (Int64)Row["RecipientKey"], FDbAdapter)); if (FDbAdapter.IsCancelled) { return(null); } } DataView View = new DataView(Donors); DataTable DistinctDonors = new DataTable(); if (View.Count > 0) { DistinctDonors = View.ToTable(true, "DonorKey"); } DataTable DonorAddresses = new DataTable("DonorAddresses"); if ((ReportType == "Complete") || (ReportType == "Donors Only")) { foreach (DataRow Row in DistinctDonors.Rows) { // get best address for each distinct donor DonorAddresses.Merge(TFinanceReportingWebConnector.RecipientGiftStatementDonorAddressesTable(Convert.ToInt64(Row["DonorKey"]), FDbAdapter)); if (FDbAdapter.IsCancelled) { return(null); } } } else { DonorAddresses.Merge(DistinctDonors); } // We only want distinct donors for this report (i.e. no more than one per recipient) if (ReportType == "Donors Only") { if (View.Count > 0) { DistinctDonors = View.ToTable(true, "DonorKey", "DonorName", "RecipientKey"); Donors.Clear(); Donors.Merge(DistinctDonors); } else // I should return an empty table with just columns, to keep the client happy: { DistinctDonors = new DataTable(); DistinctDonors.Columns.Add("DonorKey", typeof(Int64)); DistinctDonors.Columns.Add("DonorName", typeof(String)); DistinctDonors.Columns.Add("RecipientKey", typeof(Int64)); } } ReturnDataSet.Tables.Add(Recipients); ReturnDataSet.Tables.Add(RecipientTotals); ReturnDataSet.Tables.Add(Donors); ReturnDataSet.Tables.Add(DonorAddresses); return((FDbAdapter.IsCancelled) ? null : ReturnDataSet); }