예제 #1
0
        public async Task <ReportResults> RunReport(AltaskDbContext context, string[] parameters)
        {
            var range   = GetDateRange(parameters[0]);
            var toDate  = range.Item2 > DateTime.Now ? DateTime.Now : range.Item2;
            var options = new ProjectToOptions()
            {
                FromDate = range.Item1,
                ToDate   = toDate
            };
            var tasks = await Helper.TaskInstance.Create(context, options);

            var records = tasks
                          .Where(t => (!t.Completed.HasValue || !t.Completed.Value) && t.Date <toDate && t.Date> range.Item1)
                          .Select(task => new
            {
                Task       = task.Name,
                AssetId    = task.Asset.Id,
                Asset      = task.Asset.Name,
                CustomId   = task.Asset.CustomId,
                Serial     = task.Asset.Serial,
                Department = task.Asset.Department.Name,
                DueDate    = task.Date.ToString("MM/dd/yyyy"),
                DueTime    = task.Date.ToString("hh:mm tt")
            })
                          .Cast <object>()
                          .ToList();

            return(new ReportResults()
            {
                Columns = new List <string> {
                    "Task", "AssetId", "Asset", "CustomId", "Serial", "Department", "DueDate", "DueTime"
                }, Records = records
            });
        }
예제 #2
0
        /// <summary>
        /// Returns a collection of <see cref="Altask.Data.Model.Task"/> objects matching the specified filter.
        /// </summary>
        /// <param name="filter">A <see cref="Altask.www.Models.TaskListOptions"/> object on which to filter.</param>
        /// <returns>Returns a <see cref="Altask.Data.EntityResult"/> indicating success or failure.</returns>
        public virtual async Task <ActionResult> ProjectTo(ProjectToOptions filter)
        {
            ThrowIfDisposed();

            if (filter == null)
            {
                filter = new ProjectToOptions();
            }

            return(Ok(new { tasks = await Helper.TaskInstance.Create(Context, filter) }, JsonRequestBehavior.AllowGet));
        }
예제 #3
0
        public static async Task <List <Models.TaskInstance> > Create(AltaskDbContext context, ProjectToOptions filter)
        {
            if (filter == null)
            {
                filter = new ProjectToOptions();
            }

            var fromDate  = filter.FromDate;
            var toDate    = filter.ToDate;
            var instances = new List <Models.TaskInstance>();

            if (fromDate <= DateTime.Now)
            {
                filter.ToDate = DateTime.Now;

                var pastOccurrences = await context.Occurrences.AsNoTracking().Where(filter.GetOccurrencePredicate())
                                      .Include(e => e.Task)
                                      .Include(e => e.Schedule)
                                      .ToListAsync();

                foreach (var occurrence in pastOccurrences)
                {
                    var instance = Altask.www.Models.TaskInstance.FromSchedule(occurrence.Task, occurrence.Date, occurrence.Schedule);
                    instance.MergeOccurrence(occurrence);
                    instances.Add(instance);
                }

                filter.FromDate = DateTime.Now;
            }


            filter.ToDate = toDate;

            var tasks = await context.Tasks.AsNoTracking().Where(filter.GetTaskPredicate())
                        .Include(e => e.Form)
                        .Include(e => e.Schedules)
                        .ToListAsync();

            var occurrences = await context.Occurrences.AsNoTracking().Where(filter.GetOccurrencePredicate()).ToListAsync();

            var userIds  = filter.GetUserIds();
            var assetIds = filter.GetAssetIds();

            foreach (var task in tasks)
            {
                foreach (var schedule in task.Schedules)
                {
                    var dtoSchedule = schedule.ToDto();
                    var dates       = dtoSchedule.GetRunDates(filter.FromDate, filter.ToDate);

                    foreach (var date in dates)
                    {
                        if (dtoSchedule.Assets.Count > 0)
                        {
                            foreach (var asset in dtoSchedule.Assets)
                            {
                                if (assetIds.Count > 0 && !assetIds.Contains(asset.AssetId))
                                {
                                    continue;
                                }

                                if (dtoSchedule.Users.Count > 0)
                                {
                                    foreach (var user in dtoSchedule.Users)
                                    {
                                        if (userIds.Count > 0 && !userIds.Contains(user.UserId))
                                        {
                                            continue;
                                        }

                                        var instance   = Models.TaskInstance.FromSchedule(task, date, schedule);
                                        var occurrence = occurrences.SingleOrDefault(o => o.ScheduleId == schedule.Id && o.AssetId == asset.AssetId && o.UserId == user.Id && o.Date == date);

                                        if (occurrence != null)
                                        {
                                            instance.MergeOccurrence(occurrence);
                                        }
                                        else
                                        {
                                            instance.AssetId = asset.AssetId;
                                            instance.Asset   = asset.Asset;
                                            instance.UserId  = user.UserId;
                                            instance.User    = user.User;
                                        }

                                        instances.Add(instance);
                                    }
                                }
                                else
                                {
                                    var instance   = Models.TaskInstance.FromSchedule(task, date, schedule);
                                    var occurrence = occurrences.SingleOrDefault(o => o.ScheduleId == schedule.Id && o.AssetId == asset.AssetId && o.Date == date);

                                    if (occurrence != null)
                                    {
                                        instance.MergeOccurrence(occurrence);
                                    }
                                    else
                                    {
                                        instance.AssetId = asset.AssetId;
                                        instance.Asset   = asset.Asset;
                                    }

                                    instances.Add(instance);
                                }
                            }
                        }
                        else
                        {
                            foreach (var user in dtoSchedule.Users)
                            {
                                if (userIds.Count > 0 && !userIds.Contains(user.UserId))
                                {
                                    continue;
                                }

                                var instance   = Models.TaskInstance.FromSchedule(task, date, schedule);
                                var occurrence = occurrences.SingleOrDefault(o => o.ScheduleId == schedule.Id && o.UserId == user.UserId && o.Date == date);

                                if (occurrence != null)
                                {
                                    instance.MergeOccurrence(occurrence);
                                }
                                else
                                {
                                    instance.UserId = user.UserId;
                                    instance.User   = user.User;
                                }

                                instances.Add(instance);
                            }
                        }
                    }
                }
            }

            return(instances);
        }
예제 #4
0
        /// <summary>
        /// Returns a collection of <see cref="Altask.Data.Model.Task"/> objects matching the specified filter.
        /// </summary>
        /// <param name="filter">A <see cref="Altask.www.Models.TaskListOptions"/> object on which to filter.</param>
        /// <returns>Returns a <see cref="Altask.Data.EntityResult"/> indicating success or failure.</returns>
        public virtual async Task <ActionResult> ProjectTo(ProjectToOptions filter)
        {
            ThrowIfDisposed();

            if (filter == null)
            {
                filter = new ProjectToOptions();
            }

            var fromDate  = filter.FromDate;
            var toDate    = filter.ToDate;
            var instances = new List <TaskInstance>();

            if (fromDate <= DateTime.Now)
            {
                filter.ToDate = DateTime.Now;

                var pastOccurrences = await Context.Occurrences.AsNoTracking().Where(filter.GetOccurrencePredicate())
                                      .Include(e => e.Task)
                                      .Include(e => e.Schedule)
                                      .ToListAsync();

                foreach (var occurrence in pastOccurrences)
                {
                    var instance = TaskInstance.FromSchedule(occurrence.Task, occurrence.Date, occurrence.Schedule);
                    instance.MergeOccurrence(occurrence);
                    instances.Add(instance);
                }

                filter.FromDate = DateTime.Now;
            }


            filter.ToDate = toDate;

            var tasks = await Context.Tasks.AsNoTracking().Where(filter.GetTaskPredicate())
                        .Include(e => e.Form)
                        .Include(e => e.Schedules)
                        .ToListAsync();

            var occurrences = await Context.Occurrences.AsNoTracking().Where(filter.GetOccurrencePredicate()).ToListAsync();

            var userIds  = filter.GetUserIds();
            var assetIds = filter.GetAssetIds();

            foreach (var task in tasks)
            {
                foreach (var schedule in task.Schedules)
                {
                    var dtoSchedule = schedule.ToDto();
                    var dates       = dtoSchedule.GetRunDates(filter.FromDate, filter.ToDate);

                    foreach (var date in dates)
                    {
                        if (dtoSchedule.Assets.Count > 0)
                        {
                            foreach (var asset in dtoSchedule.Assets)
                            {
                                if (assetIds.Count > 0 && !assetIds.Contains(asset.AssetId))
                                {
                                    continue;
                                }

                                if (dtoSchedule.Users.Count > 0)
                                {
                                    foreach (var user in dtoSchedule.Users)
                                    {
                                        if (userIds.Count > 0 && !userIds.Contains(user.UserId))
                                        {
                                            continue;
                                        }

                                        var instance   = TaskInstance.FromSchedule(task, date, schedule);
                                        var occurrence = occurrences.SingleOrDefault(o => o.ScheduleId == schedule.Id && o.AssetId == asset.AssetId && o.UserId == user.Id && o.Date == date);

                                        if (occurrence != null)
                                        {
                                            instance.MergeOccurrence(occurrence);
                                        }
                                        else
                                        {
                                            instance.AssetId = asset.AssetId;
                                            instance.Asset   = asset.Asset;
                                            instance.UserId  = user.UserId;
                                            instance.User    = user.User;
                                        }

                                        instances.Add(instance);
                                    }
                                }
                                else
                                {
                                    var instance   = TaskInstance.FromSchedule(task, date, schedule);
                                    var occurrence = occurrences.SingleOrDefault(o => o.ScheduleId == schedule.Id && o.AssetId == asset.AssetId && o.Date == date);

                                    if (occurrence != null)
                                    {
                                        instance.MergeOccurrence(occurrence);
                                    }
                                    else
                                    {
                                        instance.AssetId = asset.AssetId;
                                        instance.Asset   = asset.Asset;
                                    }

                                    instances.Add(instance);
                                }
                            }
                        }
                        else
                        {
                            foreach (var user in dtoSchedule.Users)
                            {
                                if (userIds.Count > 0 && !userIds.Contains(user.UserId))
                                {
                                    continue;
                                }

                                var instance   = TaskInstance.FromSchedule(task, date, schedule);
                                var occurrence = occurrences.SingleOrDefault(o => o.ScheduleId == schedule.Id && o.UserId == user.UserId && o.Date == date);

                                if (occurrence != null)
                                {
                                    instance.MergeOccurrence(occurrence);
                                }
                                else
                                {
                                    instance.UserId = user.UserId;
                                    instance.User   = user.User;
                                }

                                instances.Add(instance);
                            }
                        }
                    }
                }
            }

            return(Ok(new { tasks = instances }, JsonRequestBehavior.AllowGet));
        }