public async void UpdateTaskHolderAsync_SettingShouldChanged(string description, bool isRepeat,
                                                                     byte weeklyRepeatPattern, int taskDuration, int timeTakeToMakeTask)
        {
            var testTaskHolder = new NormalTaskHolder("Test", "Test", description, isRepeat, weeklyRepeatPattern,
                                                      taskDuration, timeTakeToMakeTask, DateTime.Now);


            string descriptionOfFirstRow        = "";
            byte   repeatPatternOfFirstRow      = 0b00000;
            bool   isRepeatOfFirstRow           = false;
            int    taskdurationOfFirstRow       = 0;
            int    timeTakeToMakeTaskOfFirstRow = 0;

            if (databaseAccess is SqliteDataAccessSqliteCon databaseAccessSqlite)
            {
                await databaseAccessSqlite.UpdateTaskHolderAsync(testTaskHolder);

                var list = await databaseAccessSqlite.GetTaskHolderListAsync();

                descriptionOfFirstRow        = list[0].Description;
                repeatPatternOfFirstRow      = list[0].WeeklyRepeatPattern;
                isRepeatOfFirstRow           = list[0].IsRepeat;
                taskdurationOfFirstRow       = list[0].TaskDuration;
                timeTakeToMakeTaskOfFirstRow = list[0].TimeTakeToMakeTask;
            }

            Assert.Equal(testTaskHolder.Description, descriptionOfFirstRow);
            Assert.Equal(testTaskHolder.WeeklyRepeatPattern, repeatPatternOfFirstRow);
            Assert.Equal(testTaskHolder.IsRepeat, isRepeatOfFirstRow);
            Assert.Equal(testTaskHolder.TaskDuration, taskdurationOfFirstRow);
            Assert.Equal(testTaskHolder.TimeTakeToMakeTask, timeTakeToMakeTaskOfFirstRow);
        }
        /// <summary>
        /// This class is for inserthing test data to see the live chart graph working or not.
        /// </summary>
        private async Task InsertTestingDataSetAsync()
        {
            Random      rand                  = new Random();
            int         taskDuration          = 1;
            byte        weeklyRepeatPattern   = 0b01111111;
            int         numOfDate             = 35;
            List <Task> tasks                 = new List <Task>();
            DateTime    numOfDayInTestingData = DateTime.Now - TimeSpan.FromDays(numOfDate);

            var today      = (int)DateTime.Now.DayOfWeek;
            var taskHolder = new NormalTaskHolder("TestingData", this.GetTitleNameForDB("TestingData"), "This is Testing", true, weeklyRepeatPattern, taskDuration, 3320, numOfDayInTestingData);

            await DBAccess.CreateNewTaskHolderAsync(taskHolder);

            for (int j = 0; j < numOfDate; j++)
            {
                var checkingDayOfWeek = ((int)0b00000001 << ((today - j) % 7 + 7) % 7);
                if ((weeklyRepeatPattern & checkingDayOfWeek) > 0)
                {
                    tasks.Add(DBAccess.UpsertUserTaskAsync(new BoolTypeUserTask(taskHolder.DisplayTitle,
                                                                                DateTime.Now - TimeSpan.FromDays(j))
                    {
                        IsTaskDone            = (rand.NextDouble() > 0.5),
                        Date                  = (DateTime.Now - TimeSpan.FromDays(j)).ToString("G", CultureInfo.CreateSpecificCulture("es-ES")),
                        TimeOfCompletionLocal = (DateTime.Now - TimeSpan.FromDays(j)).ToString("G", CultureInfo.CreateSpecificCulture("es-ES")),
                        ParentTaskHolder      = taskHolder
                                                //Set Random data.
                    }));
                }
            }
            await Task.WhenAll(tasks);

            await ResetAllTaskListAsync();
        }
        private async Task <UserTask> BringSpecificTaskOnTaskHolderAsync(NormalTaskHolder taskHolder, DateTime date)
        {
            var boolTypeTask = await DBAccess.GetTaskOnSpecificDateAsync(taskHolder.Title, date.ToString("G",
                                                                                                         CultureInfo.CreateSpecificCulture("es-ES")));

            if (boolTypeTask == null)
            {
                boolTypeTask = new BoolTypeUserTask(taskHolder.DisplayTitle, date);
            }

            boolTypeTask.DisplayTitle     = taskHolder.DisplayTitle;
            boolTypeTask.ParentTaskHolder = taskHolder;
            boolTypeTask.OnDataChanged   += UpdateCertainTask;
            taskHolder.CurrentTaskList.Add(boolTypeTask);

            return(boolTypeTask);
        }
        private async Task AssignPastWeeklyTaskAsync(NormalTaskHolder taskHolder, double totalDaysAfterInitDay)
        {
            int today         = (int)DateTime.Now.DayOfWeek;
            var checkUntilDay = (taskHolder.TaskDuration < totalDaysAfterInitDay)
                ? taskHolder.TaskDuration : totalDaysAfterInitDay;

            var tasks = Enumerable.Range(1, (int)checkUntilDay - 1).Select(async(i) =>
            {
                //mod of negative number i to find dayOfWeek constraint
                var checkingDay = ((int)0b00000001 << ((today - i) % 7 + 7) % 7);

                if ((taskHolder.WeeklyRepeatPattern & checkingDay) > 0)
                {
                    var task = await BringSpecificTaskOnTaskHolderAsync(taskHolder, DateTime.Now + TimeSpan.FromDays(-i));
                    if (task is BoolTypeUserTask boolTask)
                    {
                        this.BoolTypeTaskList.Add(boolTask);
                    }
                }
            });

            var totalDaysInFourWeeks = 28;
            var visualDate           = ((today + 1) + totalDaysInFourWeeks < totalDaysAfterInitDay)
                ? (today + 1) + totalDaysInFourWeeks : totalDaysAfterInitDay;

            var tasks2 = Enumerable.Range((int)checkUntilDay, (int)visualDate - 1).Select(async(i) =>
            {
                //mod of negative number i to find dayOfWeek constraint
                var checkingDay = ((int)0b00000001 << ((today - i) % 7 + 7) % 7);

                if ((taskHolder.WeeklyRepeatPattern & checkingDay) > 0)
                {
                    var task = await BringSpecificTaskOnTaskHolderAsync(taskHolder, DateTime.Now + TimeSpan.FromDays(-i));
                    if ((taskHolder.WeeklyRepeatPattern & checkingDay) > 0)
                    {
                        await BringSpecificTaskOnTaskHolderAsync(taskHolder, (DateTime.Now + TimeSpan.FromDays(-i)));
                    }
                }
            });

            await Task.WhenAll(tasks);

            await Task.WhenAll(tasks2);
        }
 public async Task AssignNewTaskHolder(NormalTaskHolder taskHolder)
 {
     await DBAccess.CreateNewTaskHolderAsync(taskHolder);
 }