public void EnqueueDistributions(System.DateTime Date) { FI.Common.Data.FIDataTable table = new FI.Common.Data.FIDataTable(); FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); FI.Common.Data.FIDataTable distrTable = dacObj.ReadDistributions(_owner.ID); if (distrTable == null || distrTable.Rows.Count == 0) { return; } for (int i = 0; i < distrTable.Rows.Count; i++) { Distribution distr = _owner.DistributionSystem.GetDistribution((decimal)distrTable.Rows[i]["DistributionId"], true); if (distr.IsScheduledFor(Date)) { try { dacObj.EnqueueDistribution(distr.ID, ""); } catch { // do nothing , exception is logged } } } }
public void SendQueuedDistributions(string CompanyNameShort) { lock (this) { // check if already being handled if (_sendingRequests.Contains(CompanyNameShort)) { return; } _sendingRequests.Add(CompanyNameShort); } Exception lastExc = null; decimal lastExcQueueItemId = -1; try { FI.DataAccess.Distributions distrDao = DataAccessFactory.Instance.GetDistributionsDA(); FI.DataAccess.Users userDao = DataAccessFactory.Instance.GetUsersDA(); decimal companyId = userDao.GetCompanyIdByShortName(CompanyNameShort); if (companyId > 0) { while (true) { decimal queueItemId = distrDao.ReadNextQueuedDistribution(companyId); if (queueItemId <= 0) { break; } try { SendQueuedDistribution(queueItemId); } catch (Exception exc) { // throw if exception occured twice for same queue item if (lastExcQueueItemId == queueItemId) { throw exc; } lastExcQueueItemId = queueItemId; } } } } finally { _sendingRequests.Remove(CompanyNameShort); } if (lastExc != null) { throw lastExc; } }
public void DeleteDistribution(decimal distributionId) { // cancel distribution items first CancelDistributionQueueItems(distributionId); // delete distribution FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.DeleteDistribution(distributionId); }
public FI.Common.Data.FIDataTable GetDistributionQueuePage(int CurrentPage, int RowCount, string FilterExpression, string SortExpression) { int StartIndex = (CurrentPage - 1) * RowCount; FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); FI.Common.Data.FIDataTable table = null; table = dacObj.ReadDistributionQueue(_owner.CompanyId, StartIndex, RowCount, FilterExpression, SortExpression); return(table); }
public FI.Common.Data.FIDataTable GetDistributionsWithContactsPage(Report report, int CurrentPage, int RowCount, string FilterExpression, string SortExpression) { int StartIndex = (CurrentPage - 1) * RowCount; FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); FI.Common.Data.FIDataTable table = new FI.Common.Data.FIDataTable(); table = dacObj.ReadDistributionsWithContactsPage(_owner.ID, report.ID, report.GetTypeCode(), StartIndex, RowCount, FilterExpression, SortExpression); ConvertEnums(ref table); return(table); }
public void CancelDistributionQueueItems(decimal distributionId) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); decimal[] items = dacObj.GetActiveDistributionQueueItems(distributionId); if (items != null) { foreach (decimal itemId in items) { CancelQueuedItem(itemId); } } }
public void Save() { this.Validate(true); if (this.IsProxy) { throw new Exception("Cannot save proxy"); } FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.UpdateDistribution(this.Owner.ID, this.ID, this.Report.ID, this.Contact.ID, this.Report.GetTypeCode(), this.FrequencyType.ToString(), this.FrequencyValue.ToString(), (int)this.Format); this._isDirty = false; }
internal Distribution(User Owner, Report report, Contact contact, Report.ExportFormat format) { _owner = Owner; this.Report = report; this.Contact = contact; this.Format = format; FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); _id = dacObj.InsertDistribution(_owner.ID, report.ID, contact.ID, report.GetTypeCode(), this.FrequencyType.ToString(), this.FrequencyValue.ToString(), (int)this.Format); _isProxy = false; _isDirty = false; }
public void DeleteDistribution(Distribution distribution) { distribution.Validate(true); if (BeforeDeleteDistribution != null) { BeforeDeleteDistribution(distribution, EventArgs.Empty); } FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.DeleteDistribution(distribution.ID); distribution = null; }
public void SendDistribution(decimal distributionId, DateTime getCacheFrom, Guid olapTaskGuid, out bool isFromCache) { try { isFromCache = false; FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); decimal userId = dacObj.GetDistributionOwnerId(distributionId); if (userId <= 0) { return; } User user = new User(userId, true); Distribution distr = user.DistributionSystem.GetDistribution(distributionId, true); Report report = distr.Report; if (report.IsProxy) { report.Open(); } if (report.State == Report.StateEnum.Open) { OlapReport olapRpt = report as OlapReport; if (olapRpt != null) { olapRpt.Execute(olapTaskGuid); } else { report.Execute(); } } Contact contact = distr.Contact; if (contact.IsProxy) { contact.Fetch(); } SendReport(report, new Contact[] { contact }, distr.Format, getCacheFrom, out isFromCache); } catch (Exception exc) { Common.LogWriter.Instance.WriteEventLogEntry(exc); throw exc; } }
/* * public FI.Common.Data.FIDataTable GetMasterDistributionQueuePage(int CurrentPage , int RowCount , string FilterExpression , string SortExpression) * { * int StartIndex=(CurrentPage-1)*RowCount; * * FI.DataAccess.Distributions dacObj=DataAccessFactory.Instance.GetDistributionsDA(); * FI.Common.Data.FIDataTable table=null; * * table=dacObj.ReadMasterDistributionQueue(StartIndex , RowCount , FilterExpression , SortExpression); * * return table; * } */ public FI.Common.Data.FIDataTable GetDistributionInfo(bool checkOnly) { // get from DA FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); FI.Common.Data.FIDataTable ret = dacObj.GetDistributionInfo(false); // resolve distributions not sent according to schedule DataColumn checkStatusCol = ret.Columns["CheckStatus"]; DataColumn timeCol = ret.Columns["LastTimestamp"]; DataColumn statusCol = ret.Columns["LastStatus"]; DataColumn freqTypeCol = ret.Columns["ScheduleType"]; DataColumn freqValCol = ret.Columns["ScheduleValue"]; foreach (DataRow r in ret.Rows) { if ((string)r[checkStatusCol] != string.Empty) { continue; // already has check status } if ((string)r[timeCol] == string.Empty) { continue; // no time to iterate from } if ((string)r[statusCol] != "Ok") { continue; // last status is not ok } DateTime date = DateTime.Parse(r[timeCol].ToString()); date = date.AddDays(1); DateTime now = DateTime.Now; bool ok = true; while (date <= now) { string reqType = r[freqTypeCol].ToString(); string reqVal = r[freqValCol].ToString(); if (Distribution.IsScheduledForDate(reqType, reqVal, date)) { ok = false; break; } date = date.AddDays(1); } if (!ok) { r[checkStatusCol] = "Schedule Failed"; } } return(ret); }
public void Fetch() { this.Validate(true); FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); System.Data.DataRow row = dacObj.ReadDistribution(this._owner.ID, this.ID).Rows[0]; this._contact = _owner.ContactSystem.GetContact(int.Parse(row["ContactId"].ToString()), false); this._report = _owner.ReportSystem.GetReport(int.Parse(row["ReportId"].ToString()), _owner.ReportSystem.GetReportType(int.Parse(row["ReportType"].ToString())), false); this.FrequencyType = (Distribution.FrequencyTypeEnum)System.Enum.Parse(typeof(Distribution.FrequencyTypeEnum), row["FrequencyType"].ToString()); this.FrequencyValue = (Distribution.FrequencyValueEnum)System.Enum.Parse(typeof(Distribution.FrequencyValueEnum), row["FrequencyValue"].ToString()); this.Format = (Report.ExportFormat)((int)(byte)row["Format"]); this._isProxy = false; this._isDirty = false; }
public void SendQueuedDistribution(decimal queueItemId) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); decimal distributionId = 0; bool isFromCache = false; DateTime timestamp = DateTime.MinValue; string status = null; try { dacObj.GetQueueItemInfo(queueItemId, out distributionId, out status, out timestamp); if (distributionId <= 0) { throw new Exception("Invalid DistributionId"); } if (timestamp == DateTime.MinValue) { timestamp = DateTime.MaxValue; // means no cache will be taken } Guid olapTaskGuid = Guid.NewGuid(); dacObj.WriteDistributionQueueExecuting(queueItemId, olapTaskGuid); SendDistribution(distributionId, timestamp, olapTaskGuid, out isFromCache); } catch (Exception exc) { // check if not already canceled (cause it's being cnaceled forcibly, which might cause this exceptino (connection closed) dacObj.GetQueueItemInfo(queueItemId, out distributionId, out status, out timestamp); if (status != "Canceled") { Common.LogWriter.Instance.WriteEventLogEntry(exc); dacObj.WriteDistributionQueueError(queueItemId, exc.Message); // // todo: check last 3 statuses, if not failed, requeue // bool requeue=!dacObj.HaveAllDistributionAttemptsFailed(distributionId, 3); // if(requeue) // dacObj.EnqueueDistribution(distributionId, "Requeue after error"); } throw exc; } dacObj.WriteDistributionQueueOk(queueItemId, isFromCache); }
public void DeleteDistributions(Report report) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.DeleteDistributionsByReport(report.ID, report.GetTypeCode()); }
public void DeleteDistributions(Contact contact) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.DeleteDistributionsByContact(_owner.ID, contact.ID); }
public void EnqueueReportDistributions(decimal reportId, int reportType) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.EnqueueReportDistributions(reportId, reportType); }
public void EnqueueDistribution(decimal distributionId) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); dacObj.EnqueueDistribution(distributionId, ""); }
public bool CancelQueuedItem(decimal queueItemId) { FI.DataAccess.Distributions dacObj = DataAccessFactory.Instance.GetDistributionsDA(); return(dacObj.CancelQueuedItem(queueItemId, "Canceled manually")); }