PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Antares/WIP/Source/Trunk/Antares/Antares/VIEWMODELs/ApproveViewModel.cs

http://antares.codeplex.com
C# | 297 lines | 242 code | 46 blank | 9 comment | 56 complexity | 8d25a0fe6e9a133a6dd4b452ea2f3b6e MD5 | raw file
  1. using AntaresShell.BaseClasses;
  2. using AntaresShell.Common;
  3. using AntaresShell.Common.MessageTemplates;
  4. using AntaresShell.Localization;
  5. using AntaresShell.Logger;
  6. using AntaresShell.NavigatorProvider;
  7. using Repository.MODELs;
  8. using Repository.Repositories;
  9. using Repository.Sync;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Collections.ObjectModel;
  13. using System.Linq;
  14. using System.Threading.Tasks;
  15. using System.Windows.Input;
  16. using Windows.UI.Popups;
  17. using Windows.UI.Xaml;
  18. namespace Antares.VIEWMODELs
  19. {
  20. public class ApproveViewModel : ViewModelBase
  21. {
  22. private ICommand _approvedCommand;
  23. public ICommand ApprovedCommand
  24. {
  25. get { return _approvedCommand ?? (_approvedCommand = new RelayCommand(ExecuteApprove)); }
  26. }
  27. private async void ExecuteApprove(object obj)
  28. {
  29. // Exception when accept task.
  30. try
  31. {
  32. if ((SelectedTasks == null || SelectedTasks.Count == 0) && (SelectedProjects.Count == 0 || SelectedProjects == null))
  33. {
  34. return;
  35. }
  36. }
  37. catch (Exception ex)
  38. {
  39. LogManager.Instance.LogException(ex.Message);
  40. }
  41. var messageDialog = new MessageDialog(LanguageProvider.Resource["Msg_ConfirmApprove"]);
  42. // Add commands and set their callbacks
  43. messageDialog.Commands.Add(new UICommand(LanguageProvider.Resource["Msg_Yes"], command => Approved()));
  44. messageDialog.Commands.Add(new UICommand(LanguageProvider.Resource["Msg_No"], command => { }));
  45. // Set the command that will be invoked by default
  46. messageDialog.DefaultCommandIndex = 1;
  47. // Show the message dialog
  48. await messageDialog.ShowAsync();
  49. }
  50. private async void Approved()
  51. {
  52. Navigator.Instance.MainProgressBar.Visibility = Visibility.Visible;
  53. try
  54. {
  55. int successCount = 0;
  56. if (SelectedTasks != null)
  57. {
  58. foreach (var selectedTask in SelectedTasks)
  59. {
  60. var taskModel = selectedTask as TaskModel;
  61. if (taskModel != null)
  62. {
  63. taskModel.IsConfirmed = true;
  64. var res = await TaskRepository.Instance.UpdateTask(taskModel);
  65. if (res.IsSuccessStatusCode)
  66. {
  67. successCount++;
  68. }
  69. }
  70. }
  71. }
  72. if (SelectedProjects != null)
  73. {
  74. foreach (var extendProjectMember in SelectedProjects)
  75. {
  76. var projectMemberContrainModel = extendProjectMember as ProjectMemberContrainModel;
  77. if (projectMemberContrainModel != null)
  78. {
  79. projectMemberContrainModel.IsConfirmed = true;
  80. var res1 = await ProjectMemberRepository.Instance.EditContrain(projectMemberContrainModel);
  81. if (res1.IsSuccessStatusCode)
  82. {
  83. successCount++;
  84. }
  85. }
  86. }
  87. }
  88. var numberOfTask = (SelectedTasks == null ? 0 : SelectedTasks.Count) +
  89. (SelectedProjects == null ? 0 : SelectedProjects.Count);
  90. Navigator.Instance.DisplayStatus(numberOfTask == successCount
  91. ? ConnectionStatus.Done
  92. : ConnectionStatus.Error);
  93. if (numberOfTask == successCount)
  94. {
  95. Messenger.Instance.Notify(RefreshWaitingList.Refresh);
  96. }
  97. BindData();
  98. }
  99. catch
  100. {
  101. Navigator.Instance.DisplayStatus(ConnectionStatus.Error);
  102. }
  103. finally
  104. {
  105. Navigator.Instance.MainProgressBar.Visibility = Visibility.Collapsed;
  106. }
  107. }
  108. private ICommand _unApprovedCommand;
  109. public ICommand UnapprovedCommand
  110. {
  111. get { return _unApprovedCommand ?? (_unApprovedCommand = new RelayCommand(ExecuteUnapprove)); }
  112. }
  113. private async void ExecuteUnapprove(object obj)
  114. {
  115. if ((SelectedTasks == null || SelectedTasks.Count == 0) && (SelectedProjects == null || SelectedProjects.Count == 0))
  116. {
  117. return;
  118. }
  119. var messageDialog = new MessageDialog(LanguageProvider.Resource["Msg_ConfirmReject"]);
  120. // Add commands and set their callbacks
  121. messageDialog.Commands.Add(new UICommand(LanguageProvider.Resource["Msg_Yes"], command => Rejected()));
  122. messageDialog.Commands.Add(new UICommand(LanguageProvider.Resource["Msg_No"], command => { }));
  123. // Set the command that will be invoked by default
  124. messageDialog.DefaultCommandIndex = 1;
  125. // Show the message dialog
  126. await messageDialog.ShowAsync();
  127. }
  128. private async void Rejected()
  129. {
  130. Navigator.Instance.MainProgressBar.Visibility = Visibility.Visible;
  131. try
  132. {
  133. int successCount = 0;
  134. if (SelectedTasks != null)
  135. {
  136. foreach (var selectedTask in SelectedTasks)
  137. {
  138. var taskModel = selectedTask as TaskModel;
  139. if (taskModel != null)
  140. {
  141. taskModel.IsConfirmed = true;
  142. var res = await TaskRepository.Instance.DeleteTask(taskModel.ID);
  143. if (res.IsSuccessStatusCode)
  144. {
  145. successCount++;
  146. }
  147. }
  148. }
  149. }
  150. if (SelectedProjects != null)
  151. {
  152. foreach (var extendProjectMember in SelectedProjects)
  153. {
  154. var projectMemberContrainModel = extendProjectMember as ProjectMemberContrainModel;
  155. if (projectMemberContrainModel != null)
  156. {
  157. projectMemberContrainModel.IsConfirmed = true;
  158. var res1 = await ProjectMemberRepository.Instance.DeleteMember(projectMemberContrainModel.ID);
  159. if (res1.IsSuccessStatusCode)
  160. {
  161. successCount++;
  162. }
  163. }
  164. }
  165. }
  166. var numberOfTask = (SelectedTasks == null ? 0 : SelectedTasks.Count) +
  167. (SelectedProjects == null ? 0 : SelectedProjects.Count);
  168. Navigator.Instance.DisplayStatus(numberOfTask == successCount
  169. ? ConnectionStatus.Done
  170. : ConnectionStatus.Error);
  171. if (numberOfTask == successCount)
  172. {
  173. Messenger.Instance.Notify(RefreshWaitingList.Refresh);
  174. }
  175. BindData();
  176. }
  177. catch
  178. {
  179. Navigator.Instance.DisplayStatus(ConnectionStatus.Error);
  180. }
  181. finally
  182. {
  183. Navigator.Instance.MainProgressBar.Visibility = Visibility.Collapsed;
  184. }
  185. }
  186. public IList<object> SelectedTasks { get; set; }
  187. public IList<object> SelectedProjects { get; set; }
  188. private ObservableCollection<TaskModel> _unapprovedTasks;
  189. public ObservableCollection<TaskModel> UnapprovedTasks
  190. {
  191. get { return _unapprovedTasks; }
  192. set { SetProperty(ref _unapprovedTasks, value); }
  193. }
  194. private ObservableCollection<ProjectMemberContrainModel> _unapprovedProjects;
  195. public ObservableCollection<ProjectMemberContrainModel> UnapprovedProjects
  196. {
  197. get { return _unapprovedProjects; }
  198. set { SetProperty(ref _unapprovedProjects, value); }
  199. }
  200. public ApproveViewModel()
  201. {
  202. Messenger.Instance.Register<Refresh>(RefreshAll);
  203. BindData();
  204. }
  205. private void RefreshAll(object obj)
  206. {
  207. BindData();
  208. }
  209. private async void BindData()
  210. {
  211. var tasks = await TaskRepository.Instance.GetAllTasksForUser(GlobalData.MyUserID);
  212. if (tasks != null)
  213. {
  214. var temp = from task in tasks
  215. where task.IsConfirmed == false
  216. select task;
  217. UnapprovedTasks = await UpdateTask(new ObservableCollection<TaskModel>(temp));
  218. //UnapprovedTasks = await ConvertTask(tasks);
  219. }
  220. var projects = await ProjectMemberRepository.Instance.GetAllProjects(GlobalData.MyUserID);
  221. if (projects != null)
  222. {
  223. var temp = from project in projects
  224. where project.IsConfirmed != true
  225. select project;
  226. UnapprovedProjects = await UpdateProject(new ObservableCollection<ProjectMemberContrainModel>(temp));
  227. // UnapprovedProjects = await ConvertProject(projects);
  228. }
  229. }
  230. private async Task<ObservableCollection<ProjectMemberContrainModel>> UpdateProject(IEnumerable<ProjectMemberContrainModel> old)
  231. {
  232. var projectList = await ProjectRepository.Instance.GetAllProjects();
  233. var result = new ObservableCollection<ProjectMemberContrainModel>(old);
  234. foreach (var projectMemberContrainModel in result)
  235. {
  236. projectMemberContrainModel.ProjectName = projectMemberContrainModel.ProjectID != -1 ? projectList.FirstOrDefault(p => p.ID == projectMemberContrainModel.ProjectID).Name : "None";
  237. }
  238. return result;
  239. }
  240. private async Task<ObservableCollection<TaskModel>> UpdateTask(IEnumerable<TaskModel> old)
  241. {
  242. var projectList = await ProjectRepository.Instance.GetAllProjects();
  243. var result = new ObservableCollection<TaskModel>(old);
  244. foreach (var taskmodel in result)
  245. {
  246. taskmodel.ProjectName = taskmodel.ProjectID != -1 ? projectList.FirstOrDefault(p => p.ID == taskmodel.ProjectID).Name : "None";
  247. }
  248. return result;
  249. }
  250. }
  251. }