Ejemplo n.º 1
0
        public override void RunOnce()
        {
            Trace.WriteLine("Mailer started.", "EML");

            Program.LogSafe("BtRetryService: Mailer started.", EventLogEntryType.Information);

            List <Task> emailTasks = new List <Task>();

            try
            {
                if (!Force)
                {
                    Thread.CurrentThread.WaitUntil(StartAt);
                }

                TransferDbEntities transferDb = new TransferDbEntities();
                var emails = from em in transferDb.EmailLists
                             where em.el_active == true
                             select em;

                if (emails.Count() == 0)
                {
                    Trace.WriteLine("No email addresses found", "EML");
                    Program.LogSafe("BtRetryService: No email addresses found.", EventLogEntryType.Warning);
                    return;
                }

                var generator = new RazorTemplateGenerator();



                //em.el_body_template -> "
                //<table>
                //      <tr><th>iso</th><th>date</th><th>description</th><th>created by</th></tr>
                //@foreach (var i in Model.Results)
                // {<tr>
                //      <td>@i.vt_v_country_iso_id</td><td>@i.vt_last_modification_date</td><td>@i.vt_status_description</td><td>@i.vt_created_by</td>
                //  </tr>}
                //</table>"
                foreach (var em in emails)
                {
                    generator.RegisterTemplate <Data>("__" + em.el_id, em.el_body_template);
                }

                generator.CompileTemplates();

                var date = Force ? ForceDate : DateTime.Now.Yesterday();

                foreach (var em in emails)
                {
                    if (!em.IsValid())
                    {
                        Trace.WriteLine("Invalid emailList entry: ".concat(em.ToString()), "EML");
                        Program.LogSafe("BtRetryService: Invalid emailList entry: ".concat(em.ToString()), EventLogEntryType.Warning);
                        continue;
                    }

                    int iso   = em.el_iso_id;
                    int em_id = em.el_id;

                    TransferDBDataAccess.RetailersTable = Hashtable.Synchronized(PTFDbDataAccess.GetAllRetailers(iso));

                    Data data = new Data();
                    data.Db = transferDb;

                    foreach (var filter in em.el_filter.Split(';'))
                    {
                        var voucherTransfers = from vt in transferDb.VoucherTransfers
                                               where vt.vt_v_country_iso_id == iso &&
                                               //select yesterday's transfers only
                                               vt.vt_last_modification_date >= date
                                               select vt;
                        CString str = "vt_status_description != null && (" + filter + ")";
                        var     voucherTransfers2 = voucherTransfers.Where(str);
                        data.Results.AddRange(voucherTransfers2);
                    }

                    if (!data.IsEmpty)
                    {
                        //em.el_list - > [email protected],[email protected],[email protected]
                        //em.el_subject -> Error in voucher import
                        var emd = new EmailData {
                            AddrList = (EmailMe ? Strings.ROSENRUSEV : em.el_list), Subject = em.el_subject
                        };
                        string str = generator.GenerateOutput(data, "__" + em.el_id);
                        emd.Body = str.Replace("SHOW_BEGIN", "<a href='http://192.168.53.117/VoucherTransferXmls/XmlDataHandler.ashx?id=").Replace("SHOW_END", "'>Show</a>");

                        Trace.WriteLine("emailing:".concat(em.el_list), "EML");

                        var task = Task.Factory.StartNew <bool>((o) =>
                        {
                            var ed = (EmailData)o;
                            Program.LogSafe("Email : ".concat(ed.AddrList.FirstOf(35), "..."), EventLogEntryType.Information);
                            EmailSender.SendSafe(ed.AddrList, "", ed.Subject, ed.Body, true);
                            return(true);
                        }, emd);
                        emailTasks.Add(task);
                    }

                    thread.Yield();
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex, "EML");
                Program.LogSafe(ex.ToString(), EventLogEntryType.Error);
            }
            finally
            {
                Task.WaitAll(emailTasks.ToArray());
                Trace.WriteLine("Mailer stopped.", "EML");
                Program.LogSafe("Mailer stopped.", EventLogEntryType.Information);
            }
        }
Ejemplo n.º 2
0
 public CString(CString str)
 {
     m_Builder = new StringBuilder(str.m_Builder.ToString());
 }