Example #1
0
        /// <summary>
        /// Modifies a single activity, asynchronously.
        /// </summary>
        /// <param name="activity"></param>
        /// <param name="shouldRecreateDailyReminders"></param>
        /// <returns></returns>
        public static async Task ModifyActivityAsync(PlantActivityItem activity, bool shouldRecreateDailyReminders = true)
        {
            var dbSavedInsanceOfActivity = await asyncDb.Table <PlantActivityItem>()
                                           .FirstAsync(pai => pai.Id == activity.Id);

            if (dbSavedInsanceOfActivity.Time.Date != activity.Time.Date) //Time changed
            {
                //Check if there is a similar activity on new day
                var identicalActivityOnNewDay = (await asyncDb.Table <PlantActivityItem>()
                                                 .ToListAsync())
                                                .FirstOrDefault(pai => pai.Time.Date == activity.Time.Date && pai.PlantTaskFk == activity.PlantTaskFk);

                bool hasSameActivityOnNewDay = identicalActivityOnNewDay != null;

                if (hasSameActivityOnNewDay)
                {
                    await asyncDb.DeleteAsync(activity);
                }
                else
                {
                    await asyncDb.UpdateAsync(activity);
                }
            }
            else
            {
                await asyncDb.UpdateAsync(activity);
            }

            if (shouldRecreateDailyReminders)
            {
                await RecreateDailyReminders();
            }
        }
Example #2
0
        public static async Task <PlantTask> GetTaskOfActivityAsync(PlantActivityItem activity)
        {
            PlantTask plantTask = await asyncDb
                                  .Table <PlantTask>()
                                  .FirstAsync(task => task.Id == activity.PlantTaskFk);

            return(plantTask);
        }
Example #3
0
        /// <summary>
        /// Removes a given PlantActivityItem. Then recreates all daily reminders if the activity is not completed.
        /// </summary>
        /// <param name="activity">The acitivity to remove.</param>
        /// <returns></returns>
        public static async Task RemoveActivityAsync(PlantActivityItem activity)
        {
            await asyncDb.DeleteAsync(activity);

            if (!activity.IsCompleted)
            {
                await RecreateDailyReminders();
            }
        }
Example #4
0
        public static PlantTask GetTaskOfActivity(PlantActivityItem activity)
        {
            PlantTask plantTask;

            try
            {
                plantTask = Db.Table <PlantTask>()
                            .First(task => task.Id == activity.PlantTaskFk);
            }
            catch (Exception)
            {
                throw new PlantActivityServiceException("Could not retrieve the single PlantTask from which this PlantActivityItem was created.");
            }

            return(plantTask);
        }
Example #5
0
        /// <summary>
        /// Gets the list of plants the given Activity must be performed on.
        /// </summary>
        /// <param name="activity">The Activity for which the associated plants must be returned.</param>
        /// <returns></returns>
        public static List <Plant> GetPlantsOfActivity(PlantActivityItem activity)
        {
            var plantTask = GetTaskOfActivity(activity);

            var plantConnections = Db.Table <PlantTaskPlantConnection>()
                                   .Where(ptpc => ptpc.PlantTaskFk == plantTask.Id)
                                   .ToList();

            var plants = Db.Table <Plant>()
                         .ToList();

            return(plants
                   .Where(p => plantConnections
                          .Select(pc => pc.PlantFk)
                          .Contains(p.Id))
                   .ToList());
        }
Example #6
0
        /// <summary>
        /// Gets the list of plants the given Activity must be performed on, asynchronously.
        /// </summary>
        /// <param name="activity">The Activity for which the associated plants must be returned.</param>
        /// <returns></returns>
        public static async Task <List <Plant> > GetPlantsOfActivityAsync(PlantActivityItem activity)
        {
            var plantTask = await GetTaskOfActivityAsync(activity);

            var plantConnections = await asyncDb.Table <PlantTaskPlantConnection>()
                                   .Where(ptpc => ptpc.PlantTaskFk == plantTask.Id)
                                   .ToListAsync();

            var plants = await asyncDb.Table <Plant>()
                         .ToListAsync();

            return(plants
                   .Where(p => plantConnections
                          .Select(pc => pc.PlantFk)
                          .Contains(p.Id))
                   .ToList());
        }