示例#1
0
        public async Task <IActionResult> EditModal(int id, [Bind("Id,Name,Schedule,TemplateText,DistributionType,DistributionList,TemplateName,Greetings,OnePerUser,Text,Subject,DayFrom,DayTo,SQLCommand")] MassEmail em)
        {
            if (id != em.Id)
            {
                return(NotFound());
            }
            if (em.DistributionList == null)
            {
                em.DistributionList = "";
            }
            if (em.TemplateText == null)
            {
                em.TemplateText = "";
            }
            if (em.Schedule == null)
            {
                em.Schedule = "";
            }
            if (em.Name == null)
            {
                em.Name = "";
            }
            em.NextSend = new DateTime(2000, 1, 1);


            ViewData["Templates"] = GetTemplates(em.TemplateName);
            return(await this.UpdateCompanyDataAsync(em, _context, _logger));
        }
示例#2
0
        private bool LoadTemplateModel(int companyid, CompanyUser user, MassEmail em, EmailTemplateViewModel outtemplate)
        {
            try
            {
                var        temp_enum  = Enum.Parse <EmailTemplateType>(em.TemplateName);
                MemberInfo memberInfo = temp_enum.GetType().GetMember(temp_enum.ToString())
                                        .FirstOrDefault();
                if (memberInfo == null)
                {
                    return(false);
                }
                var loader_type = memberInfo.CustomAttributes.FirstOrDefault(at => at.AttributeType.Equals(typeof(TemplateLoaderAttribute)));
                if (loader_type == null)
                {
                    return(false);
                }
                EMailTemplateLoader loader = System.Activator.CreateInstance(loader_type.ConstructorArguments[0].Value as Type, _mailrepo, companyid) as EMailTemplateLoader;
                return(loader.LoadModel(em, outtemplate, user));
                // (loader_type. as TemplateLoaderAttribute).LoaderType
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "LoadTemplateModel error");
                return(false);
            }

            // var u
        }
示例#3
0
        public override bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
        {
            LoadBaseFeature(em, template, user);
            //template.Models.
            DateTime datefrom = DateTime.Now;

            datefrom = datefrom.AddDays(em.DayFrom);
            DateTime dateto = DateTime.Now;
            int      add    = em.DayFrom + em.DayTo;

            dateto = dateto.AddDays(add);
            if (datefrom.Ticks == 0)
            {
                datefrom = DateTime.Today;
            }
            if (dateto.Ticks == 0)
            {
                dateto = DateTime.Today.AddDays(3);
            }
            datefrom = datefrom.ResetHMS();
            dateto   = dateto.ResetHMS();
            //this.DateCycle(em, template, (em, template, dt) => {
            //    template.Models.Add(dt, _mailRepo.ReportRepository.CompanyDayProduction(datefrom, dateto, _companyid));
            //});
            template.Models.Add(datefrom, _mailRepo.ReportRepository.CompanyDayProduction(datefrom, dateto, _companyid));

            return(true);
        }
        public IRecipientCriteria CreateCriteria([FromBody] MassEmail massEmail)
        {
            var criteria = Provider.Mail.MassEmail.CreateCriteria(massEmail);
            var result   = new RecipientCriteria {
                GroupName = criteria.GroupName, Recipients = criteria.Recipients
            };

            return(result);
        }
示例#5
0
        public int SendMassEmail(MassEmailSendArgs args)
        {
            var sma = MassEmail.CreateSendMessageArgs(args);

            SendMessage(sma);
            Attachment.Delete(args.Attachments);
            var result = sma.GetDistinctEmails().Length;

            return(result);
        }
示例#6
0
        protected virtual void  DateCycle(MassEmail em, EmailTemplateViewModel template, Action <MassEmail, EmailTemplateViewModel, DateTime> action)
        {
            DateTime dayfrom = DateTime.Today.AddDays(em.DayFrom);
            DateTime dayto   = DateTime.Today.AddDays(em.DayTo);

            for (DateTime dt = dayfrom; dt <= dayto; dt = dt.AddDays(1))
            {
                action(em, template, dt);
            }
        }
示例#7
0
        public IActionResult CreateModal()
        {
            var em = new MassEmail()
            {
                OnePerUser = true, DayFrom = 1, DayTo = 1
            };

            ViewData["Templates"] = GetTemplates();
            return(PartialView("EditModal", em));
        }
示例#8
0
        public override bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
        {
            LoadBaseFeature(em, template, user);
            //this.DateCycle(em, template, (em, template, dt) => {
            //    template.Models.Add(dt, _mailRepo.ReportRepository.EmailWeekInvoice(dt, _companyid,user));
            //});
            DateTime dt = DateTime.Now;

            template.Models.Add(dt, _mailRepo.ReportRepository.EmailWeekInvoice(dt, _companyid, user));
            return(true);
        }
示例#9
0
 protected virtual ExecutionModel GetExecutionModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
 {
     return(new ExecutionModel()
     {
         DateFrom = DateTime.Today.AddDays(em.DayFrom),
         DateTo = DateTime.Today.AddDays(em.DayTo),
         CompanyId = _companyid,
         UserFriendlyName = user?.NameSurname,
         UserChildFriendlyName = user?.ChildNameSurname
     });
 }
示例#10
0
 private async Task <bool> SendMassEmailToUser(int companyid, string email, MassEmail em)
 {
     try
     {
         //var proto = await CreateEmail(companyid, user, em);
     }
     catch (Exception ex)
     {
         _logger.LogError(ex, "SendMassEmailToUser error");
         return(false);
     }
     return(await Task.FromResult(true));
 }
示例#11
0
        public override bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
        {
            LoadBaseFeature(em, template, user);
            this.DateCycle(em, template, (em, template, dt) => {
                template.Models.Add(dt, _mailRepo.ReportRepository.CompanyComplexMenu(dt, dt, _companyid));
            });

            /*
             * DateTime dayfrom = DateTime.Today.AddDays(em.DayFrom);
             * DateTime dayto = DateTime.Today.AddDays(em.DayTo);
             * for (DateTime dt = dayfrom; dt<= dayto; dt = dt.AddDays(1)) {
             *  template.Models.Add(dt, _mailRepo.ReportRepository.CompanyComplexMenu(dt, dt, _companyid));
             * }*/
            return(true);
        }
示例#12
0
 public static int SendHtmlMultiUserEmail(MassEmail massEmail)
 {
     //sends emails out to a number of users, using a subject and title given
     int EmailsSendCount = 0;
     foreach (var u in massEmail.ToEmail)
     {
         if (System.Configuration.ConfigurationSettings.AppSettings["LiveServer"] == "true" | EmailsSendCount < 3)
         {
             if (Send(massEmail.Message, u.Email, "*****@*****.**", massEmail.Subject, "*****@*****.**"))
             {
                 EmailsSendCount += 1;
             }
         }
     }
     return EmailsSendCount;
 }
示例#13
0
 public MassMailWrapper(MassEmail src)
 {
     this.Source = src;
     try
     {
         this.Schedule = CrontabSchedule.Parse(src.Schedule);
     }
     catch (Exception ex)
     {
         return;
     }
     this.LastRunTime = this.NextRunTime = src.NextSend;
     if (src.NextSend.Year < 2020)
     {
         NextRunTime = Schedule.GetNextOccurrence(DateTime.Now.AddMinutes(-15));
     }
     //Increment();
 }
示例#14
0
        public override bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
        {
            LoadBaseFeature(em, template, user);
            //this.DateCycle(em, template, (em, template, dt) => {
            //    template.Models.Add(dt, _mailRepo.ReportRepository.EmailWeekInvoice(dt, _companyid,user));
            //});

            string sql    = ReplaceMacro(em.SQLCommand, ExecModel);
            var    attach = new EMailAttachment();

            attach.Content     = _mailRepo.ProduceFlatCSV(sql).Result;
            attach.ContentType = "text/csv";
            attach.Name        = ReplaceMacro(em.Name, ExecModel);
            attach.Name        = Translit.cyr2lat(attach.Name) + ".csv";
            template.Attachments.Add(attach);
            template.JustAttachment = true;

            //template.Models.Add(dt, _mailRepo.ReportRepository.EmailWeekInvoice(dt, _companyid, user));
            return(true);
        }
示例#15
0
        public override bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
        {
            LoadBaseFeature(em, template, user);
            //this.DateCycle(em, template, (em, template, dt) => {
            //    template.Models.Add(dt, _mailRepo.ReportRepository.EmailWeekInvoice(dt, _companyid,user));
            //});

            //string sql = ReplaceMacro(em.SQLCommand, ExecModel);
            string reportname = em.SQLCommand;
            var    attach     = new EMailAttachment();
            var    result     = _mailRepo.ProduceExcel(reportname, ExecModel.DateFrom, ExecModel.DateTo, _companyid).GetAwaiter().GetResult();

            attach.Content     = result.FileContents;
            attach.ContentType = result.ContentType;
            attach.Name        = result.FileDownloadName;

            template.Attachments.Add(attach);
            template.JustAttachment = true;

            //template.Models.Add(dt, _mailRepo.ReportRepository.EmailWeekInvoice(dt, _companyid, user));
            return(true);
        }
示例#16
0
        public async Task <bool> SendMassEmailAsync(int companyid, MassEmail em, DateTime nextRun)
        {
            try
            {
                bool res = false;
                switch (em.DistribType)
                {
#if !DEBUG
                case DistributionEnum.All:
                case DistributionEnum.Users:
                    res = await SendMassEmailOnePerUser(companyid, em);

                    break;

                case DistributionEnum.UsersParents:
                    res = await SendMassEmailOnePerUser(companyid, em, await _mailrepo.GetDistributionUsersAsync(companyid, false));

                    break;
#endif
                case DistributionEnum.Admin:
                    res = await SendMassEmailOnePerUser(companyid, em, await _mailrepo.GetDistributionRoleUsersAsync(companyid, "Admin"));

                    break;

                default:
                    break;
                }
                em.NextSend = nextRun;
                await _mailrepo.SaveMassEMailAsync(em);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "SendMassEmail error");
                return(false);
            }
            return(true);
        }
示例#17
0
        private async Task <bool> SendMassEmailOnePerUser(int companyid, MassEmail em, List <CompanyUser> users = null)
        {
            bool res = true;

            try
            {
                if (users == null)
                {
                    users = await _mailrepo.GetDistributionUsersAsync(companyid);
                }
                //for (int i = 0; i < 50; ++i)
                //{
                //    CompanyUser andry = await _mailrepo.GetUserAsync("27fb457f-8b4f-4a66-96ce-5e98ae2f1d91");
                //    users = Enumerable.Repeat(andry, 10).ToList();
                users.ForEach(async u => res &= await SendMassEmailToUser(companyid, u, em));
                //}
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "SendMassEmailOnePerUser error");
                return(false);
            }
            return(res);
        }
示例#18
0
 public abstract bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user);
示例#19
0
        public async Task <JsonResult> SendTest([Bind("Id,Name,Schedule,TemplateText,DistributionType,DistributionList,TemplateName,Greetings,OnePerUser,Text,Subject,DayFrom,DayTo,SQLCommand")] MassEmail em)
        {
            await _massmailservice.SendMassEmailToUser(User.GetCompanyID(), await _mailrepo.GetUserAsync(User.GetUserId()), em);

            return(Json(0));
        }
示例#20
0
        private async Task <EmailProtoType> CreateEmail(int companyid, CompanyUser user, MassEmail em)
        {
            EmailProtoType res = new EmailProtoType();

            try
            {
                var model = await CreateEmailModel(companyid, user, em);

                res.JustAttachment = model.JustAttachment;
                if (!res.JustAttachment)
                {
                    string viewname = $"/Views/MassEmail/{em.TemplateName}_Template.cshtml";
                    res.Message = await _razorViewToStringRenderer.RenderViewToStringAsync(viewname, model);
                }
                model.Attachments.ForEach(a => res.Attachments.Add(a));
                if (string.IsNullOrEmpty(model.Subject))
                {
                    res.Subject = string.IsNullOrEmpty(em.Subject) ? "Info" : em.Subject;
                }
                else
                {
                    res.Subject = model.Subject;
                }
                // var user = _userManager.Users.SingleOrDefault(u => u.Id == userid);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "CreateEmail error");
                return(null);
            }
            return(res);
        }
示例#21
0
        public async Task <bool> SendMassEmailToUser(int companyid, CompanyUser user, MassEmail em)
        {
            try
            {
                //to do AK send parents email

                EmailProtoType proto = await CreateEmail(companyid, user, em);

                if (user.IsChild())
                {
                    var email = _context.Users.Where(x => x.Id == user.ParentUserId).FirstOrDefault();
                    if (email.ConfirmedByAdmin)
                    {
                        EmailValidCheck(email.Email);
                        await _mailservice.SendEmailAsync(email.Email, proto.Subject, proto.Message, companyid);
                    }
                }
                else
                {
                    var email = _context.Users.Where(x => x.Id == user.Id).FirstOrDefault();
                    if (email.ConfirmedByAdmin)
                    {
                        EmailValidCheck(email.Email);
                        await _mailservice.SendEmailAsync(email.Email, proto.Subject, proto.Message, companyid, proto.Attachments);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "SendMassEmailToUser error");
                return(false);
            }
            return(true);
        }
示例#22
0
 protected virtual void LoadBaseFeature(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
 {
     ExecModel         = GetExecutionModel(em, template, user);
     template.Subject  = ReplaceMacro(em.Subject, ExecModel);
     template.Greeting = ReplaceMacro(em.Greetings, ExecModel);
 }
示例#23
0
 public override bool LoadModel(MassEmail em, EmailTemplateViewModel template, CompanyUser user)
 {
     LoadBaseFeature(em, template, user);
     return(true);
 }
示例#24
0
        private async Task <EmailTemplateViewModel> CreateEmailModel(int companyid, CompanyUser user, MassEmail em)
        {
            EmailTemplateViewModel res = new EmailTemplateViewModel();

            try
            {
                res.User    = user;
                res.Company = await _mailrepo.GetCompanyAsync(companyid);

                res.Greeting = em.Greetings;
                res.Message  = em.Text;
                var modelload = LoadTemplateModel(companyid, user, em, res);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "CreateEmailModel error");
                return(null);
            }
            // var user = _userManager.Users.SingleOrDefault(u => u.Id == userid);

            return(res);
        }