/// <summary> /// Inserts email addresses from a recipient list into a work items list. /// </summary> /// <remarks> /// The status on new and existing items in the list is changed to the status parameter /// </remarks> /// <param name="jobId">The job id.</param> /// <param name="recipientListId">The recipient list id.</param> /// <param name="status">The status to update all new or matching work items</param> /// <returns>Returns the number of items that was inserted, which might /// be less than the total count of items in the recipient list</returns> public int WorkItemInsertFromRecipientList(int jobId, int recipientListId, JobWorkStatus status) { int count = 0; Database.Execute(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemInsertFromRecipient"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("recipientListId", recipientListId)); cmd.Parameters.Add(CreateParameter("status", status)); object objCount = cmd.ExecuteScalar(); if (objCount == null) { throw new ApplicationException("Unable to read count of added work items."); } if (int.TryParse(objCount.ToString(), out count) == false) { throw new ApplicationException( "Unable to cast count to integer. Unexpected return value: " + objCount.ToString()); } }); return(count); }
/// <summary> /// Initializes a new instance of the JobWorkItem class from a Datatable.Row /// </summary> internal JobWorkItem(DataRow row) { _jobId = (int)(row["fkJobId"]); _emailAddress = row["EmailAddress"] != null ? row["EmailAddress"].ToString() : null; _status = (JobWorkStatus)row["Status"]; _info = row["Info"] != null ? row["Info"].ToString() : null; }
/// <summary> /// Returns the number of work items of a given status for a job /// </summary> /// <param name="jobId">The job id to query work items for</param> /// <param name="status">The status to query for</param> public int WorkItemGetCountByStatus(int jobId, JobWorkStatus status) { int count = 0; Database.Execute <int>(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemGetCountForStatusForJob"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("status", status)); object objCount = cmd.ExecuteScalar(); if (objCount == null) { // throw new ApplicationException("Unable to read count value."); // null means zero records return(0); } if (int.TryParse(objCount.ToString(), out count) == false) { throw new ApplicationException( "Unable to cast count to integer. Unexpected return value: " + objCount.ToString()); } return(count); }); return(count); }
/// <summary> /// Initializes a new instance of the JobWorkItem class. /// </summary> /// <param name="emailAddress"></param> /// <param name="status"></param> public JobWorkItem(string emailAddress, JobWorkStatus status) { _jobId = 0; _status = status; // Let property setter format it Info = null; EmailAddress = emailAddress; }
/// <summary> /// Initializes a new instance of the JobWorkItem class. /// </summary> /// <param name="jobId"></param> /// <param name="emailAddress"></param> /// <param name="status"></param> /// <param name="info"></param> public JobWorkItem(int jobId, string emailAddress, JobWorkStatus status, string info) { _jobId = jobId; _status = status; // Let property setter format it Info = info; EmailAddress = emailAddress; }
/// <summary> /// Initializes a new instance of the JobWorkItem class. /// </summary> /// <param name="emailAddress"></param> public JobWorkItem(string emailAddress) { _jobId = 0; _status = JobWorkStatus.NotStarted; // Let property setter format it Info = null; EmailAddress = emailAddress; }
public static JobWorkItems ListAll(int jobId, JobWorkStatus status) { JobWorkItems items = new JobWorkItems(); WorkItemData dataUtil = GetWorker(); DataTable workItemsTable = dataUtil.WorkItemGetAllForJob(jobId, status); FillFromDataTable(workItemsTable, items); return(items); }
/// <summary> /// Changes the status for all worker items for a given job. /// </summary> /// <remarks> /// This will also reset the comment for each work item, effectively /// resetting the work items table to a spesific state /// </remarks> /// <param name="jobId">The job id.</param> /// <param name="status">The status to update all work items with.</param> public void WorkItemChangeStatusForAllWorkerItems(int jobId, JobWorkStatus status) { Database.Execute(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemChangeStatusForAll"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("status", status)); cmd.ExecuteNonQuery(); }); }
/// <summary> /// Changes status for a work item /// </summary> /// <remarks> /// Only updates the status field of a work item. Throws an exception if /// the work item does not exist /// </remarks> /// <param name="jobId">The job id.</param> /// <param name="emailAddress">The email address.</param> /// <param name="status">The status.</param> public void WorkItemChangeStatus(int jobId, string emailAddress, JobWorkStatus status) { Database.Execute(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemChangeStatus"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("emailaddress", emailAddress)); cmd.Parameters.Add(CreateParameter("status", status)); cmd.ExecuteNonQuery(); }); }
/// <summary> /// Changes the information for a work item. If the job id and email address does not /// exist, the work item is added. /// </summary> /// <remarks> /// Does not return anything, as the jobId and emailadress is a composite /// primary key. /// </remarks> /// <param name="jobId">The job id.</param> /// <param name="emailAddress">The email address.</param> /// <param name="status">The status.</param> /// <param name="info">The info.</param> public void WorkItemEdit(int jobId, string emailAddress, JobWorkStatus status, string info) { Executor.Execute(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemEdit"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("emailaddress", emailAddress)); cmd.Parameters.Add(CreateParameter("status", status)); cmd.Parameters.Add(CreateParameter("info", info)); cmd.ExecuteNonQuery(); }); }
/// <summary> /// Resets the status for all work items to the specified value. /// </summary> /// <param name="newStatus">The new status to give all work items.</param> public void SetStatusForWorkItems(JobWorkStatus newStatus) { // Get worker items for this job if (_id <= 0) { throw new ApplicationException("Cannot change status for work items for a job that has no id. Save the job first to get the id."); } WorkItemData dataUtil = GetWorker <WorkItemData>(); dataUtil.WorkItemChangeStatusForAllWorkerItems(_id, newStatus); // Counters are no longer valid ResetStatusCounters(); }
/// <summary> /// Gets all work items for a job with a given status /// </summary> /// <param name="jobId">The job id</param> /// <returns></returns> public DataTable WorkItemGetAllForJob(int jobId, JobWorkStatus status) { DataTable workItems = new DataTable(); Database.Execute(() => { DbCommand cmd = base.CreateCommand("NewsletterWorkItemGetAllWithStatusForJob"); cmd.Parameters.Add(base.CreateParameter("jobid", jobId)); cmd.Parameters.Add(base.CreateParameter("status", status)); System.Data.Common.DbDataAdapter adapter = base.CreateDataAdapter(cmd); adapter.Fill(workItems); }); return(workItems); }
/// <summary> /// Gets the count of work items for a given status code. /// </summary> /// <param name="status">The status.</param> public int GetWorkItemCountForStatus(JobWorkStatus status) { //JobWorkStatus. if (_statusCounts == null) { // Get from database WorkItemData dataUtil = GetWorker <WorkItemData>(); int count = dataUtil.WorkItemGetCountByStatus(_id, status); return(count); } else { // Get count value from hash table return((int)_statusCounts[status.ToString()]); } }
/// <summary> /// Gets a batch of work items ready for processing. All work items /// will be updated with the status given /// </summary> /// <param name="jobId">The job id</param> /// <param name="status">The status all the work items in the batch should be set to</param> /// <returns></returns> public DataTable WorkItemGetBatchForProcessing(int jobId, JobWorkStatus getStatus, JobWorkStatus setStatus, int count) { DataTable workItems = new DataTable(); Database.Execute(() => { DbCommand cmd = base.CreateCommand("NewsletterWorkItemGetBatchForProcessing"); cmd.Parameters.Add(base.CreateParameter("jobid", jobId)); cmd.Parameters.Add(base.CreateParameter("selectStatus", getStatus)); cmd.Parameters.Add(base.CreateParameter("updatedStatus", setStatus)); cmd.Parameters.Add(base.CreateParameter("count", count)); System.Data.Common.DbDataAdapter adapter = base.CreateDataAdapter(cmd); adapter.Fill(workItems); }); return(workItems); }
/// <summary> /// Returns the number of work items of a given status for a job /// </summary> /// <param name="jobId">The job id to query work items for</param> /// <param name="status">The status to query for</param> public int WorkItemGetCountByStatus(int jobId, JobWorkStatus status) { int count = 0; Database.Execute<int>(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemGetCountForStatusForJob"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("status", status)); object objCount = cmd.ExecuteScalar(); if (objCount == null) { // throw new ApplicationException("Unable to read count value."); // null means zero records return 0; } if (int.TryParse(objCount.ToString(), out count) == false) { throw new ApplicationException( "Unable to cast count to integer. Unexpected return value: " + objCount.ToString()); } return count; }); return count; }
/// <summary> /// Parses the email addresses and creates in-memory work items. /// </summary> /// <remarks> /// During parsing, duplicates and invalid addresses are discarded. /// The work items has not been saved. /// </remarks> /// <param name="emailAddresses">The email addresses as a separated string to parse. Separators are ";, \n"</param> /// <returns>The email addresses as JobWorkItem objects</returns> public static JobWorkItems ParseEmailAddressesToWorkItems(string emailAddresses, JobWorkStatus defaultStatus) { JobWorkItems items = new JobWorkItems(); string[] emailAddressArray = emailAddresses.Split(new char[] { ';', ',', ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string emailAddress in emailAddressArray) { // Clean address string emailAddressCleaned = NewsLetterUtil.CleanEmailAddress(emailAddress); // Validate email address if (EmailSyntaxValidator.Validate(emailAddressCleaned) == true) { // Check if already added. JobWorkItem workItem = items.FirstOrDefault(j => j.EmailAddress.Equals(emailAddressCleaned)); if (workItem == null) { // Handle duplicates - try to load it first workItem = new JobWorkItem(emailAddressCleaned, defaultStatus); // Add to collection items.Add(workItem); } } } return(items); }
public static JobWorkItems ListAll(Job job, JobWorkStatus status) { return(ListAll(job.Id, status)); }
/// <summary> /// Gets all work items for a job with a given status /// </summary> /// <param name="jobId">The job id</param> /// <returns></returns> public DataTable WorkItemGetAllForJob(int jobId, JobWorkStatus status) { DataTable workItems = new DataTable(); Database.Execute(() => { DbCommand cmd = base.CreateCommand("NewsletterWorkItemGetAllWithStatusForJob"); cmd.Parameters.Add(base.CreateParameter("jobid", jobId)); cmd.Parameters.Add(base.CreateParameter("status", status)); System.Data.Common.DbDataAdapter adapter = base.CreateDataAdapter(cmd); adapter.Fill(workItems); }); return workItems; }
/// <summary> /// Gets a batch of work items ready for processing. All work items /// will be updated with the status given /// </summary> /// <param name="jobId">The job id</param> /// <param name="status">The status all the work items in the batch should be set to</param> /// <returns></returns> public DataTable WorkItemGetBatchForProcessing(int jobId, JobWorkStatus getStatus, JobWorkStatus setStatus, int count) { DataTable workItems = new DataTable(); Database.Execute(() => { DbCommand cmd = base.CreateCommand("NewsletterWorkItemGetBatchForProcessing"); cmd.Parameters.Add(base.CreateParameter("jobid", jobId)); cmd.Parameters.Add(base.CreateParameter("selectStatus", getStatus)); cmd.Parameters.Add(base.CreateParameter("updatedStatus", setStatus)); cmd.Parameters.Add(base.CreateParameter("count", count)); System.Data.Common.DbDataAdapter adapter = base.CreateDataAdapter(cmd); adapter.Fill(workItems); }); return workItems; }
/// <summary> /// Inserts email addresses from a recipient list into a work items list. /// </summary> /// <remarks> /// The status on new and existing items in the list is changed to the status parameter /// </remarks> /// <param name="jobId">The job id.</param> /// <param name="recipientListId">The recipient list id.</param> /// <param name="status">The status to update all new or matching work items</param> /// <returns>Returns the number of items that was inserted, which might /// be less than the total count of items in the recipient list</returns> public int WorkItemInsertFromRecipientList(int jobId, int recipientListId, JobWorkStatus status) { int count = 0; Database.Execute(() => { DbCommand cmd = CreateCommand("NewsletterWorkItemInsertFromRecipient"); cmd.Parameters.Add(CreateParameter("jobid", jobId)); cmd.Parameters.Add(CreateParameter("recipientListId", recipientListId)); cmd.Parameters.Add(CreateParameter("status", status)); object objCount = cmd.ExecuteScalar(); if (objCount == null) { throw new ApplicationException("Unable to read count of added work items."); } if (int.TryParse(objCount.ToString(), out count) == false) { throw new ApplicationException( "Unable to cast count to integer. Unexpected return value: " + objCount.ToString()); } }); return count; }