Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
 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();
     }
 }