Example #1
0
        public async Task <Tuple <AsanaTask, bool> > SyncTask(AsanaTask task)
        {
            var dto = MapperService.CreateTaskDTO(0, task.name, task.notes, task.projectid, task.assignee_status,
                                                  task.assigneeid, task.completed, task.due_on, task.GetFollowers());


            var response = await new AsanaApiRepository().CreateTask(task.workspaceid, dto, task.parentId);


            if (AsanaClient.ProcessResponse(response, !_isUserActionRequest))
            {
                MapperService.Map(response.Data, task.projectid, task.workspaceid);


                return(new Tuple <AsanaTask, bool>(response.Data, true));
            }
            return(new Tuple <AsanaTask, bool>(null, false));
        }
Example #2
0
        public async void AddNewSubTask()
        {
            if (String.IsNullOrEmpty(NewSubTaskText))
            {
                return;
            }

            if (!CheckInternetConnection(true))
            {
                return;
            }

            IsBusy = true;
            var task = await new StorageService().Find <AsanaTask>(Id);



            var dto = MapperService.CreateTaskDTO(0, NewSubTaskText, "", 0, "later", 0, false, null, null);

            var response = await new AsanaRespository().CreateTask(task.workspaceid, dto, Id);

            if (AsanaClient.ProcessResponse(response))
            {
                MapperService.Map(response.Data, task.projectid, task.workspaceid);
                await new StorageService().Insert(response.Data);


                Subtasks.Add(response.Data);
                NewSubTaskText = "";

                Container.Resolve <IMessagePublisher>().Publish(new FocusListMessage(this)
                {
                    IsSubtasks = true
                });
            }

            IsBusy = false;
        }
        public async Task UpdateTask(long id, bool isCompleted, DateTime?dueOn, Action <AsanaTask> action)
        {
            if (IsBusy)
            {
                return;
            }

            ProgressText = "Syncing";
            IsBusy       = true;

            var task = await new StorageService().Find <AsanaTask>(id);

            if (!dueOn.HasValue)
            {
                dueOn = task.due_on;
            }

            var dto = MapperService.CreateTaskDTO(id, task.name, task.notes, task.projectid, task.assignee_status,
                                                  task.assigneeid, isCompleted, dueOn, null);

            var response = await new AsanaApiRepository().UpdateTask(dto);

            if (AsanaClient.ProcessResponse(response))
            {
                task.due_on    = dueOn;
                task.completed = isCompleted;

                await new StorageService().Save(task);

                if (action != null)
                {
                    action(task);
                }
            }

            IsBusy = false;
            SetDefaultProgressText();
        }
        async void SaveTask()
        {
            if (IsBusy || IsBlockingProgress)
            {
                return;
            }

            if (string.IsNullOrEmpty(Name))
            {
                MessageBox.Show("Specify name");
                return;
            }



            if (Project == null)
            {
                MessageBox.Show("Specify project");
                return;
            }

            IsBlockingProgress = true;

            DateTime?dueDate = null;

            if (IsUseDueDate)
            {
                dueDate = DueDate;
            }

            var dto = MapperService.CreateTaskDTO(Id.GetValueOrDefault(0), Name,
                                                  Notes,
                                                  !IsEditMode ? Project.id : 0,
                                                  Status.name,
                                                  User != null && User.id > 0 ? User.id : -1,
                                                  IsCompleted, dueDate, SelectedFollowers.Select(x => x.id).ToList());


            //var task = new AsanaTaskDTO() {
            //    name = model.Name,
            //    notes = model.Notes,
            //    completed = model.IsCompleted,
            //    id = model.Id.GetValueOrDefault(0),
            //    assignee = -1,
            //    assignee_status = model.Status.name };


            //if (model.IsUseDueDate)
            //{
            //    task.due_on = model.DueDate.ToString("yyyy-MM-dd");
            //}
            //else
            //{
            //    task.due_on = "null";
            //}

            //if (!model.IsEditMode)
            //{
            //    task.projects = model.Project.id;
            //}
            //if (model.User != null && model.User.id > 0)
            //{
            //    task.assignee = model.User.id;
            //}

            //save task for syncing later
            if (!CheckInternetConnection(false))
            {
                if (IsForSync || !IsEditMode)
                {
                    AsanaTask dbTask;
                    if (IsEditMode)
                    {
                        dbTask = Task;
                    }
                    else
                    {
                        dbTask = new AsanaTask()
                        {
                            id          = await new StorageService().GetLocalTaskId(),
                            workspaceid = Project.workspaceid,
                            modified_at = DateTime.Now,
                            created_at  = DateTime.Now,
                            IsForSync   = true
                        };
                    }

                    dbTask.name            = dto.name;
                    dbTask.notes           = dto.notes;
                    dbTask.completed       = dto.completed;
                    dbTask.assignee_status = dto.assignee_status;
                    dbTask.assigneeid      = dto.assignee == AsanaConstants.Utils.NULL_VALUE ? -1 : long.Parse(dto.assignee);
                    dbTask.projectid       = Project.id;
                    dbTask.parentId        = ParentId;
                    dbTask.SetFollowers(dto.followers.Select(X => X.id).ToList());

                    if (IsUseDueDate)
                    {
                        dbTask.due_on = DueDate;
                    }
                    else
                    {
                        dbTask.due_on = null;
                    }


                    await new StorageService().Save(dbTask);


                    if (!IsEditMode)
                    {
                        MessageBox.Show("Task saved for syncing when network will be available");
                    }

                    IsBlockingProgress = false;

                    NavigationManager.GoBack();

                    return;
                }
            }

            if (IsForSync && IsEditMode)
            {
                var task = await new StorageService().Find <AsanaTask>(Id.Value);

                await CheckSyncStatus(task);

                IsForSync          = false;
                IsBlockingProgress = false;
                return;
            }

            //normal save
            var response = !IsEditMode ? await new AsanaRespository().CreateTask(WorkspaceId, dto, ParentId) : await new AsanaRespository().UpdateTask(dto);

            if (AsanaClient.ProcessResponse(response))
            {
                if (IsEditMode && OldProjectId != Project.id)
                {
                    var newResponse = await new AsanaRespository().ChangeTaskProject(Id.Value, OldProjectId, Project.id);


                    if (AsanaClient.ProcessResponse(newResponse))
                    {
                        await PrepareAndSaveTaskToDb(response.Data);
                        await ProcessFollowers(response.Data);
                        await ProcessTags(response.Data);
                    }
                }
                else
                {
                    await PrepareAndSaveTaskToDb(response.Data);

                    if (IsEditMode)
                    {
                        await ProcessFollowers(response.Data);
                    }
                    await ProcessTags(response.Data);
                }



                NavigationManager.GoBack();
                return;
            }

            IsBlockingProgress = false;
        }