コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: JobWorkItem.cs プロジェクト: tsolbjor/Newsletter
 /// <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;
 }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
 /// <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;
 }
コード例 #5
0
ファイル: JobWorkItem.cs プロジェクト: tsolbjor/Newsletter
 /// <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;
 }
コード例 #6
0
ファイル: JobWorkItem.cs プロジェクト: tsolbjor/Newsletter
 /// <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;
 }
コード例 #7
0
ファイル: JobWorkItem.cs プロジェクト: tsolbjor/Newsletter
 /// <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;
 }
コード例 #8
0
 /// <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;
 }
コード例 #9
0
 /// <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;
 }
コード例 #10
0
 /// <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;
 }
コード例 #11
0
        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);
        }
コード例 #12
0
 /// <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();
     });
 }
コード例 #13
0
ファイル: WorkItemData.cs プロジェクト: tsolbjor/Newsletter
 /// <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();
                          });
 }
コード例 #14
0
ファイル: WorkItemData.cs プロジェクト: tsolbjor/Newsletter
 /// <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();
                          });
 }
コード例 #15
0
 /// <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();
     });
 }
コード例 #16
0
ファイル: WorkItemData.cs プロジェクト: bjarte/Newsletter
 /// <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();
     });
 }
コード例 #17
0
        /// <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();
        }
コード例 #18
0
        /// <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);
        }
コード例 #19
0
 /// <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()]);
     }
 }
コード例 #20
0
        /// <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);
        }
コード例 #21
0
ファイル: WorkItemData.cs プロジェクト: tsolbjor/Newsletter
        /// <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;
        }
コード例 #22
0
        /// <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);
        }
コード例 #23
0
 public static JobWorkItems ListAll(Job job, JobWorkStatus status)
 {
     return(ListAll(job.Id, status));
 }
コード例 #24
0
ファイル: WorkItemData.cs プロジェクト: tsolbjor/Newsletter
        /// <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;
        }
コード例 #25
0
ファイル: WorkItemData.cs プロジェクト: tsolbjor/Newsletter
        /// <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;
        }
コード例 #26
0
ファイル: WorkItemData.cs プロジェクト: tsolbjor/Newsletter
        /// <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;
        }