async Task SetData(AsanaTask task) { Task = task; IsForSync = task.IsForSync; Status = Statuses.FirstOrDefault(x => x.name == task.assignee_status); Name = task.name; Notes = task.notes; IsUseDueDate = task.due_on.HasValue; DueDate = task.due_on.HasValue ? task.due_on.Value : DateTime.Today; IsUseDueDate = task.due_on.HasValue; IsCompleted = task.completed; ProjectId = task.projectid; if (task.assigneeid > 0) { UserId = task.assigneeid; } SelectedFollowers = Followers.Where(x => task.GetFollowers().Contains(x.id)).ToList(); OldFollowersIds = SelectedFollowers.Select(x => x.id).ToList(); var tags = await new StorageService().GetTagsByTask(task.id); OldTagsIds = tags.Select(x => x.id).ToList(); SelectedTags = Tags.Where(x => OldTagsIds.Contains(x.id)).ToList(); }
async System.Threading.Tasks.Task ProcessFollowers(AsanaTask task) { var currentFollowers = SelectedFollowers.Select(x => x.id).ToList(); var followersToAdd = new List <long>(); var followersToRemove = new List <long>(); foreach (var currentFollower in currentFollowers) { if (!OldFollowersIds.Contains(currentFollower)) { followersToAdd.Add(currentFollower); } } foreach (var oldFollowersId in OldFollowersIds) { if (!currentFollowers.Contains(oldFollowersId)) { followersToRemove.Add(oldFollowersId); } } var success = false; if (followersToAdd.Any()) { var response = await new AsanaRespository().AddFollowers(task.id, followersToAdd); if (AsanaClient.ProcessResponse(response, true)) { success = true; } else { return; } } if (followersToRemove.Any()) { var response = await new AsanaRespository().RemoveFollowers(task.id, followersToRemove); if (AsanaClient.ProcessResponse(response, true)) { success = true; } else { return; } } if (success) { task.SetFollowers(currentFollowers); } task.followers = null; if (followersToAdd.Any() || followersToRemove.Any()) { await PrepareAndSaveTaskToDb(task); } }
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; }