async public Task <MailingViewModel> FindMailing(string AppUserId, int MailingId)
        {
            if (AppUserId == null)
            {
                return(null);
            }
            var mailing = await(from m in db.Mailings.Include(m => m.GroupMailings).ThenInclude(gm => gm.Group)
                                where m.Id == MailingId && m.SenderId == AppUserId
                                select m).FirstOrDefaultAsync();

            if (mailing == null)
            {
                return(null);
            }

            var result = new MailingViewModel()
            {
                Title          = mailing.Title,
                Text           = mailing.Text,
                Id             = mailing.Id,
                TimeOfCreation = mailing.DateOfCreation
            };

            var selectedGroups = from gm in mailing.GroupMailings
                                 select gm.Group.Id;

            var availableGroups = await(from g in db.Groups
                                        where g.UserId == AppUserId
                                        select g).ToListAsync();

            result.Groups = new MultiSelectList(availableGroups, "Id", "Title", selectedGroups);

            return(result);
        }
        async public Task <bool> EditMailing(string AppUserId, MailingViewModel Mailing)
        {
            // check on required fields
            if (AppUserId == null || Mailing.Text == null || Mailing.GroupIds == null)
            {
                return(false);
            }

            // search for edited mailing
            var editedMailing = await(from m in db.Mailings
                                      where m.SenderId == AppUserId && m.Id == Mailing.Id
                                      select m).FirstOrDefaultAsync();

            if (editedMailing == null)
            {
                return(false);
            }

            // search for reciever groups
            var groups = await(from g in db.Groups
                               where Mailing.GroupIds.Contains(g.Id) && g.UserId == AppUserId
                               select g).ToListAsync();

            if (!groups.Any())
            {
                return(false);
            }

            // Removal of mailing from every group

            var groupMailings = await(from gm in db.GroupMailings
                                      where gm.MailingId == editedMailing.Id
                                      select gm).ToListAsync();

            db.GroupMailings.RemoveRange(groupMailings);

            // Population of recieved groups

            var newGroupMailings = new List <GroupMailing>();

            foreach (var iter in groups)
            {
                newGroupMailings.Add(new GroupMailing()
                {
                    Group   = iter,
                    Mailing = editedMailing
                });
            }

            editedMailing.Text  = Mailing.Text;
            editedMailing.Title = Mailing.Title;
            await db.GroupMailings.AddRangeAsync(newGroupMailings);

            await db.SaveChangesAsync();

            return(true);
        }
Exemple #3
0
 public ActionResult <bool> AddMailind(MailingViewModel mailing)
 {
     if (ModelState.IsValid)
     {
         var response = new
         {
             isSuccess = true,
             id        = _mailingService.InsertMailing(_mapper.Map <Mailing>(mailing))?.Id
         };
         return(Ok(response));
     }
     return(BadRequest(ModelState));
 }
        async public Task <MailingViewModel> GetEmptyMailing(string AppUserId)
        {
            if (AppUserId == null)
            {
                return(null);
            }
            var result          = new MailingViewModel();
            var availableGroups = await(from g in db.Groups
                                        where g.UserId == AppUserId
                                        select g).ToListAsync();

            result.Groups = new MultiSelectList(availableGroups, "Id", "Title");
            return(result);
        }
        async public Task <IActionResult> Edit(int MailingId)
        {
            string           userId        = User.FindFirst(ClaimTypes.NameIdentifier).Value;
            MailingViewModel mailingToEdit = await _mailingManager.FindMailing(userId, MailingId);

            if (mailingToEdit == null)
            {
                ModelState.AddModelError(string.Empty, "Failure");
                return(RedirectToAction("Index", "Mailings"));
            }
            else
            {
                return(View(mailingToEdit));
            }
        }
Exemple #6
0
        public ActionResult <bool> Update(int id, [FromBody] MailingViewModel mailing)
        {
            var oldMailing = _mailingService.GetMailing(id);

            if (oldMailing == null)
            {
                return(BadRequest("Таку розсилку не знайдено"));
            }
            if (ModelState.IsValid)
            {
                oldMailing.Name    = mailing.Name;
                oldMailing.Content = mailing.Content;
                return(Ok(_mailingService.UpdateMailing(oldMailing, _mapper.Map <List <Person> >(mailing.Persons))));
            }
            return(BadRequest(ModelState));
        }
        async public Task <IActionResult> Index(MailingViewModel NewMailing)
        {
            if (ModelState.IsValid)
            {
                string userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
                bool   result = await _mailingManager.AddMailing(userId, NewMailing);

                if (!result)
                {
                    ModelState.AddModelError(string.Empty, "Adding failed");
                    return(RedirectToAction("Index", "Mailings"));
                }
                else
                {
                    return(RedirectToAction("Index", "Mailings"));
                }
            }
            return(RedirectToAction("Index", "Mailings"));
        }
Exemple #8
0
        public ActionResult <bool> Send(int id, [FromBody] MailingViewModel mailing)
        {
            var oldMailing = _mailingService.GetMailing(id);

            if (oldMailing == null)
            {
                return(BadRequest("Таку розсилку не знайдено"));
            }
            if (ModelState.IsValid)
            {
                oldMailing.Name    = mailing.Name;
                oldMailing.Content = mailing.Content;
                foreach (var item in oldMailing.MailingPerson)
                {
                    var body = mailing.Content.Replace("{name}",
                                                       string.Format("{0} {1}", item.Person.FirstName, item.Person.LastName));
                    _smsService.Send(item.Person.Telephone, body);
                }
                return(Ok(_mailingService.UpdateMailing(oldMailing, _mapper.Map <List <Person> >(mailing.Persons))));
            }
            return(BadRequest(ModelState));
        }
        async public Task <bool> AddMailing(string AppUserId, MailingViewModel Mailing)
        {
            // check on required fields
            if (AppUserId == null || Mailing.Text == null || Mailing.GroupIds == null || Mailing.Times == null)
            {
                return(false);
            }

            // searchin for reciever groups
            var groups = await(from g in db.Groups
                               where Mailing.GroupIds.Contains(g.Id) && g.UserId == AppUserId
                               select g).ToListAsync();

            if (!groups.Any())
            {
                return(false);
            }

            // creation and population of Times list
            string[] rawTimes = Mailing.Times.Split(',');
            var      times    = (from rt in rawTimes
                                 // for testing purposes
                                 //where Convert.ToDateTime(rt) > DateTime.UtcNow
                                 select Convert.ToDateTime(rt)).Distinct();

            if (!times.Any())
            {
                return(false);
            }

            // creating new mailing
            var newMailing = new Mailing()
            {
                SenderId       = AppUserId,
                Title          = Mailing.Title,
                Text           = Mailing.Text,
                DateOfCreation = DateTime.UtcNow
            };

            // populating group - mailings
            var groupMailings = new List <GroupMailing>();

            foreach (var iter in groups)
            {
                groupMailings.Add(new GroupMailing()
                {
                    Group   = iter,
                    Mailing = newMailing
                });
            }

            // creating sending times
            var sendingTimes = new List <Time>();

            foreach (var time in times)
            {
                sendingTimes.Add(new Time()
                {
                    TimeToSend = time,
                    Mailing    = newMailing,
                    BeenSent   = false,
                });
            }

            await db.Mailings.AddAsync(newMailing);

            await db.Times.AddRangeAsync(sendingTimes);

            await db.GroupMailings.AddRangeAsync(groupMailings);

            await db.SaveChangesAsync();

            return(true);
        }