/// <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(); } }
public static async Task <PlantTask> GetTaskOfActivityAsync(PlantActivityItem activity) { PlantTask plantTask = await asyncDb .Table <PlantTask>() .FirstAsync(task => task.Id == activity.PlantTaskFk); return(plantTask); }
/// <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(); } }
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); }
/// <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()); }
/// <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()); }