public static List <SendSingleTextRequest> ExecuteTextQueue(this EfUnitOfWork context, short queueSize = 30, List <SendSingleTextRequest> requests = null, List <SendTextResponse> responses = null)
        {
            Logger.Current.Verbose("Request received for executing text stored-procedure");

            try
            {
                var dataTable = new DataTable();
                dataTable.Columns.Add("TextResponseID", typeof(int));
                dataTable.Columns.Add("From", typeof(string));
                dataTable.Columns.Add("To", typeof(string));
                dataTable.Columns.Add("SenderID", typeof(string));
                dataTable.Columns.Add("Message", typeof(string));
                dataTable.Columns.Add("Status", typeof(byte));
                dataTable.Columns.Add("ServiceResponse", typeof(string));
                dataTable.Columns.Add("RequestGuid", System.Type.GetType("System.Guid"));
                dataTable.Columns.Add("TokenGuid", System.Type.GetType("System.Guid"));
                dataTable.Columns.Add("ScheduledTime", typeof(DateTime));

                if (requests != null && responses != null)
                {
                    requests.ForEach(item =>
                    {
                        Logger.Current.Informational("Request GUID :" + item.RequestGuid);
                        var response = responses.First(i => i.RequestGuid == item.RequestGuid);
                        dataTable.Rows.Add(new object[] { 1, item.From, item.To, 1, item.Message, (byte)response.StatusID, response.ServiceResponse,
                                                          item.RequestGuid, item.TokenGuid, item.ScheduledTime });
                        dataTable.AcceptChanges();
                    });
                }

                var procedureName = "[dbo].[GET_SendTextQueue]";
                var parms         = new List <SqlParameter>
                {
                    new SqlParameter {
                        ParameterName = "@TextQueue", Value = dataTable, SqlDbType = SqlDbType.Structured, TypeName = "[dbo].[TextQueue]"
                    },
                    new SqlParameter {
                        ParameterName = "@noOfRecords", Value = queueSize
                    }
                };
                return(context.ExecuteStoredProcedure <SendSingleTextRequest>(procedureName, parms).ToList());
            }
            catch (Exception ex)
            {
                Logger.Current.Error("An error occured while executing stored procedure -> GET_SendTextQueue " + ex);
                return(new List <SendSingleTextRequest>());
            }
        }
        public static Dictionary <string, Dictionary <string, string> > GetMergeFieldValues(this EfUnitOfWork context, int sentMailDetailId)
        {
            Dictionary <string, Dictionary <string, string> > mergeFields = new Dictionary <string, Dictionary <string, string> >();

            try
            {
                var parms = new List <SqlParameter>
                {
                    new SqlParameter {
                        ParameterName = "@SentMailDetailID", Value = sentMailDetailId
                    }
                };
                var result = context.ExecuteStoredProcedure <SendMailMergeFieldsRequest>("dbo.GetSendMailMergefieldValues", parms).ToList();


                if (result != null && result.Count > 0)
                {
                    var distinctContacts = result.Select(s => s.Email).Distinct().ToList();
                    distinctContacts.ForEach(c =>
                    {
                        var mf = result.Where(r => r.Email == c).ToDictionary(k => k.FieldCode, v => v.FieldValue);
                        if (!mergeFields.ContainsKey(c))
                        {
                            mergeFields.Add(c, mf);
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                ex.Data.Clear();
                ex.Data.Add("SendMailDetailId", sentMailDetailId);
                Logger.Current.Error("Error while getting sendmail merge field values", ex);
                throw;
            }
            return(mergeFields);
        }
Exemplo n.º 3
0
        public static List <SendSingleMailRequest> ExecuteProcessQueue(this EfUnitOfWork context, short queueSize = 30, List <SendSingleMailRequest> requests = null, List <SendMailResponse> responses = null, int instance = 1)
        {
            Logger.Current.Verbose("Request received for executing mail stored-procedure");
            //TODO: correct this
            var queueTime = DateTime.Now;

            Logger.Current.Verbose("Creating data-table for MailQueue");

            try
            {
                var dataTable = new DataTable();
                dataTable.Columns.Add("TokenGuid", typeof(Guid));
                dataTable.Columns.Add("RequestGuid", typeof(Guid));
                dataTable.Columns.Add("From", typeof(string));
                dataTable.Columns.Add("PriorityID", typeof(byte));
                dataTable.Columns.Add("ScheduledTime", typeof(DateTime));
                dataTable.Columns.Add("QueueTime", typeof(DateTime));
                dataTable.Columns.Add("DisplayName", typeof(string));
                dataTable.Columns.Add("ReplyTo", typeof(string));
                dataTable.Columns.Add("To", typeof(string));
                dataTable.Columns.Add("CC", typeof(string));
                dataTable.Columns.Add("BCC", typeof(string));
                dataTable.Columns.Add("Subject", typeof(string));
                dataTable.Columns.Add("Body", typeof(string));
                dataTable.Columns.Add("IsBodyHtml", typeof(bool));
                dataTable.Columns.Add("StatusID", typeof(byte));
                dataTable.Columns.Add("ServiceResponse", typeof(string));

                if (requests != null && responses != null)
                {
                    Logger.Current.Informational("No of requests count : " + requests.Count + "  " + "No of responses count : " + responses.Count);
                    requests.ForEach(item =>
                    {
                        Logger.Current.Informational("Request GUID : " + item.RequestGuid);
                        var response = responses.FirstOrDefault(i => i.RequestGuid == Guid.NewGuid());
                        if (response == null)
                        {
                            Logger.Current.Informational("Request GUID : " + item.RequestGuid);
                            response = new SendMailResponse
                            {
                                StatusID        = CommunicationStatus.Failed,
                                ServiceResponse = item.RequestGuid + " response not found."
                            };
                        }
                        dataTable.Rows.Add(item.TokenGuid, item.RequestGuid, item.From, (byte)item.PriorityID, item.ScheduledTime, queueTime, item.DisplayName, item.ReplyTo, item.To, item.CC, item.BCC, item.Subject, item.Body, item.IsBodyHtml, (byte)response.StatusID, response.ServiceResponse);
                        dataTable.AcceptChanges();
                    });
                }

                var procedureName = "[dbo].[updateAndGetNextQueue]";
                var parms         = new List <SqlParameter>
                {
                    new SqlParameter {
                        ParameterName = "@MailQueue", Value = dataTable, SqlDbType = SqlDbType.Structured, TypeName = "[dbo].[MailQueue]"
                    },
                    new SqlParameter {
                        ParameterName = "@noOfRecords", Value = queueSize
                    },
                    new SqlParameter {
                        ParameterName = "@instance", Value = instance
                    }
                };

                return(context.ExecuteStoredProcedure <SendSingleMailRequest>(procedureName, parms).ToList());
            }
            catch (Exception ex)
            {
                Logger.Current.Error("An error occured while executing stored procedure -> updateAndGetNextQueue " + ex);
                return(new List <SendSingleMailRequest>());
            }
        }