public async Task<ActionResult> CreateScheduleAlerts_OneShot() { try { var projects = _dbContext.ProjectsListAggregated.ToList(); foreach (var project in projects) { var def = _workflowDefinition.GetWorkflowDefinition(project.CompanyName); var states = def.States.Values.ToList(); var invoiceAlertLinksId = await _dbContext.AlertToProjectLinkConditions.Where(c => c.PropertyName.Contains("Invoice.")).Select(ac => ac.AlertLinkId).Distinct().ToListAsync(); var invoiceAlertLinks = await _dbContext .AlertToProjectLinks .Where(a => !invoiceAlertLinksId.Contains(a.Id) && a.CompanyId == project.CompanyId && a.AlertEvent == AlertEvents.Scheduled && states.IndexOf(def.States[a.StateId]) <= states.IndexOf(def.States[project.ActiveStateId])) .ToListAsync(); foreach (var alert in invoiceAlertLinks) { var transition = _dbContext.ProjectTransitions.FirstOrDefault(pt => pt.ProjectId == project.Id && pt.StateFromId == alert.StateId); if (transition != null) { var item = new ProjectAlertScheduled { AlertLinkId = alert.Id.ToString(), ProjectId = project.Id, StateId = alert.StateId, TransitionId = transition.Id }; _dbContext.ProjectAlertsScheduled.Add(item); } } if (invoiceAlertLinks.Any()) { _dbContext.SaveChanges(); } } return ActionResult.Success(); } catch (Exception ex) { return ActionResult.Failed(ex); } }
private void CreateScheduledAlerts(IEnumerable<Alert> alerts, ProjectWorkflow project, StateTransition<string> transition, State state, AppUser currentUser) { foreach (var alert in alerts) { var item = new ProjectAlertScheduled { AlertLinkId = alert.Id, ProjectId = project.Id, StateId = state.Id, TransitionId = int.Parse(transition.Id) }; _dbContext.ProjectAlertsScheduled.Add(item); } if (alerts.Any()) { _dbContext.SaveChanges(); } }