public void PutSchedulesCampaignsCampaignIdTest() { // TODO: add unit test for the method 'PutSchedulesCampaignsCampaignId' string campaignId = null; // TODO: replace null with proper value CampaignSchedule body = null; // TODO: replace null with proper value var response = instance.PutSchedulesCampaignsCampaignId(campaignId, body); Assert.IsInstanceOf <CampaignSchedule> (response, "response is CampaignSchedule"); }
public async Task <IActionResult> Edit(int?id = null) { ViewBag.AsteriskActions = await _context.AsteriskExtensions.Where(x => !x.Disabled).Select(x => new AsteriskExtensionViewModel { Extension = x.Extension, Title = x.Title }).ToArrayAsync(); if (id.HasValue) { var entity = await _context.Campaigns.FirstOrDefaultAsync(x => x.Id == id); if (entity == null) { throw new NullReferenceException($"Campaign with id={id} does not exists"); } var schedules = await _context.CampaignSchedules.Where(x => x.CampaignId == id).ToArrayAsync(); if (schedules.Length == 0) { schedules = new CampaignSchedule[] { new CampaignSchedule { DateStart = DateTime.Today, DateEnd = DateTime.Today, TimeStart = 480, TimeEnd = 1260, DaysOfWeek = 127 } }; } return(View(new CampaignViewModel { Id = entity.Id, Name = entity.Name, AbonentsTotal = entity.AbonentsCount, AbonentsFileName = entity.AbonentsFileName, VoiceFileName = entity.VoiceFileName, Action = entity.Extension, LineLimit = entity.LineLimit, Retries = entity.Retries, Schedules = schedules.Select(x => new CampaignScheduleViewModel { DateStart = x.DateStart, DateEnd = x.DateEnd, TimeStart = TimeToString(x.TimeStart), TimeEnd = TimeToString(x.TimeEnd), DaysOfWeek = x.DaysOfWeek }) }));; } var lineLimit = _configuration.GetValue <int>("Asterisk:LinesLimit"); if (lineLimit < 1) { lineLimit = 6; } return(View(new CampaignViewModel { Schedules = new CampaignScheduleViewModel[] { new CampaignScheduleViewModel { DateStart = DateTime.Today, DateEnd = DateTime.Today, TimeStart = "8:00", TimeEnd = "21:00", DaysOfWeek = 127 } }, LineLimit = lineLimit, Retries = 3 })); }
public void Init() { instance = new CampaignSchedule(); }
public async Task <IActionResult> Edit(CampaignViewModel model) { ViewBag.AsteriskActions = await _context.AsteriskExtensions.Where(x => !x.Disabled).Select(x => new AsteriskExtensionViewModel { Extension = x.Extension, Title = x.Title }).ToArrayAsync(); if (!model.Id.HasValue) { if (model.AbonentsFile == null) { ModelState.AddModelError(nameof(model.AbonentsFile), "Для запуска обзвона необходим файл списка абонентов"); } if (model.VoiceFile == null) { ModelState.AddModelError(nameof(model.VoiceFile), "Для запуска обзвона необходима запись голосового сообщения"); } if (model.Schedules == null || model.Schedules.Count() == 0) { ModelState.AddModelError(nameof(model.Schedules), "Для запуска обзвона необходимо добавить расписание"); } if (model.Retries < 1) { ModelState.AddModelError(nameof(model.Retries), "Не указано количество попыток дозвона"); } } if (!ModelState.IsValid) { ViewBag.Error = "Не удалось сохранить форму, проверьте, заполнены ли все поля"; _logger.LogWarning($"Campaign form validation error. Total errors: {ModelState.ErrorCount}, errors: [{string.Join(",", ModelState.Select(x => $"{x.Key}:{x.Value.ValidationState}"))}], model: [{JsonConvert.SerializeObject(model)}]"); return(View(model)); } try { var entity = await GetOrCreateEntity(model.Id); entity.Name = model.Name; entity.Modified = DateTime.Now; entity.ModifierId = _currentUserId ?? 0; entity.Extension = model.Action; entity.Retries = model.Retries; if (model.LineLimit > 500) { model.LineLimit = 500; } if (model.LineLimit < 1) { var lineLimit = _configuration.GetValue <int>("Asterisk:LinesLimit"); if (lineLimit < 1) { lineLimit = 6; } model.LineLimit = lineLimit; } entity.LineLimit = model.LineLimit; if (!model.Id.HasValue) { await _context.SaveChangesAsync(); model.Id = entity.Id; } var schedules = await _context.CampaignSchedules.Where(x => x.CampaignId == entity.Id).ToArrayAsync(); var toRemove = schedules.Where(x => !model.Schedules.Any(s => s.Id == x.Id)); if (toRemove.Any()) { foreach (var schedule in toRemove) { _context.RemoveRange(toRemove); } } foreach (var schedule in model.Schedules) { var scEntity = schedules.FirstOrDefault(x => x.Id == schedule.Id); if (scEntity == null) { scEntity = new CampaignSchedule { CampaignId = entity.Id }; _context.CampaignSchedules.Add(scEntity); } scEntity.ModifierId = _currentUserId.Value; scEntity.DateStart = schedule.DateStart; scEntity.DateEnd = schedule.DateEnd; scEntity.DaysOfWeek = schedule.DaysOfWeek; scEntity.TimeStart = TimeFromString(schedule.TimeStart); scEntity.TimeEnd = TimeFromString(schedule.TimeEnd); } if (model.AbonentsFile != null) { await SaveFile(model.AbonentsFile, FileType.Abonents.ToFileName(entity.Id)); entity.AbonentsCount = await _abonentsFileService.ProcessFileAsync(Path.Combine(_uploadsDir, $"{entity.Id}_abonents"), entity.Id); entity.AbonentsFileName = model.AbonentsFile.FileName; } if (model.VoiceFile != null) { var voiceFileName = FileType.Voice.ToFileName(entity.Id); await SaveFile(model.VoiceFile, voiceFileName); entity.VoiceFileName = model.VoiceFile.FileName; if (_configuration.GetValue <bool>("Asterisk:UseSox")) { Convert(voiceFileName); } else { System.IO.File.Copy(Path.Combine(_uploadsDir, voiceFileName), Path.Combine(_configuration.GetValue <string>("Asterisk:Sounds"), voiceFileName) + Path.GetExtension(model.VoiceFile.FileName)); } } await _context.SaveChangesAsync(); } catch (Exception ex) { _logger.LogError(ex, "Could not save Campaign"); ViewBag.Error = ex.Message; return(View(model)); } return(RedirectToAction(nameof(Index))); }