protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.set_membership_layout); toolbar = FindViewById <Toolbar>(Resource.Id.toolbar); ImageView BSave = new ImageView(this); LinearLayout LLControls = FindViewById <LinearLayout>(Resource.Id.right_controls); BSave.SetImageResource(Resource.Drawable.ic_save_white_18dp); LLControls.AddView(BSave); SetSupportActionBar(toolbar); SupportActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_arrow_back_white_18dp); SupportActionBar.SetDisplayHomeAsUpEnabled(true); LLRoot = FindViewById <LinearLayout>(Resource.Id.root); usersContainer = RedMineManager.Get <UsersContainer>("/users.json?limit=100&nometa=1"); Spinner SUser = FindViewById <Spinner>(Resource.Id.user); var query = from r in usersContainer.users select r.firstname + " " + r.lastname; ArrayAdapter assigneeAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleDropDownItem1Line, query.ToList()); assigneeAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleDropDownItem1Line); SUser.Adapter = assigneeAdapter; Spinner SRole = FindViewById <Spinner>(Resource.Id.role); var statusAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleDropDownItem1Line, Enum.GetNames(typeof(RedMineManager.UserRoles))); SRole.Adapter = statusAdapter; statusAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleDropDownItem1Line); Button BAdd = FindViewById <Button>(Resource.Id.add); BAdd.Click += delegate { int role = (int)Enum.Parse(typeof(RedMineManager.UserRoles), SRole.SelectedItem.ToString()); var queryUser = from r in usersContainer.users where r.firstname + " " + r.lastname == SUser.SelectedItem.ToString() select r.id; RedMineManager.PostMemberShip("/projects/" + Intent.GetIntExtra("ProjectId", 0) + "/memberships.json", new { membership = new { user_id = queryUser.SingleOrDefault(), role_ids = new int[] { role } } }); Recreate(); }; memberships = RedMineManager.Get <List <Membership> >("/projects/" + Intent.GetIntExtra("ProjectId", 0).ToString() + "/memberships.json?nometa=1", "memberships"); SetMemberShipsLayout(); }
public void SettingUpViews() { PDLoading = new ProgressDialog(this); PDLoading.SetTitle(Resources.GetString(Resource.String.LoadingAllRequiredData)); PDLoading.SetMessage(Resources.GetString(Resource.String.PleaseWait)); PDLoading.Show(); Thread loadAllData = new Thread(() => { usersContainer = RedMineManager.Get <UsersContainer>("/users.json?nometa=1&limit=100"); projectsContainer = RedMineManager.Get <ProjectsContainer>("/projects.json?nometa=1&limit=100"); issuesContainer = RedMineManager.Get <IssuesContainer>("/issues.json?nometa=1&limit=100"); foreach (var issue in issuesContainer.issues) { issue.timeEntries = RedMineManager.Get <List <IssuesContainer.TimeEntry> >("/issues/" + issue.id + "/time_entries.json?nometa=1", "time_entries"); foreach (var timeEntry in issue.timeEntries) { issue.spent_hours += timeEntry.hours; } } foreach (var project in projectsContainer.projects) { project.memberships = RedMineManager.Get <List <Membership> >("/projects/" + project.id + "/memberships.json?nometa=1", "memberships"); } //formating data for adapters and setting dates var usersQuery = from user in usersContainer.users select user.firstname + " " + user.lastname; List <string> usersForAdapter = new List <string>() { "None" }; usersForAdapter.AddRange(usersQuery.ToList()); var projectsQuery = from project in projectsContainer.projects select project.name; List <string> projectsForAdapter = new List <string>() { "None" }; projectsForAdapter.AddRange(projectsQuery.ToList()); var issuesQuery = from issue in issuesContainer.issues select issue.subject; List <string> issuesForAdapter = new List <string>() { "None" }; issuesForAdapter.AddRange(issuesQuery.ToList()); dates = new List <DateTime>(); DateTime currDate = DateTime.Now; for (int i = 0; i < 24; i++) { dates.Add(currDate.AddMonths(-i)); } var monthQuery = from date in dates select date.ToString(@"MMMM yyyy", CultureInfo.CurrentCulture); List <string> monthsForAdapter = new List <string>() { "None" }; monthsForAdapter.AddRange(monthQuery.ToList()); //creating adapters for spinners var userAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleDropDownItem1Line, usersForAdapter); var monthAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleDropDownItem1Line, monthsForAdapter); var projectAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleDropDownItem1Line, projectsForAdapter); var issuesAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, issuesForAdapter); RunOnUiThread(() => { SFilterByUser.Adapter = userAdapter; SFilterByProject.Adapter = projectAdapter; SFilterByMonth.Adapter = monthAdapter; SFilterByIssue.Adapter = issuesAdapter; }); //When project selected, set only this project`s issues for issue spinner SFilterByProject.ItemSelected += delegate { var issueAdapterQuery = from issue in issuesContainer.issues where issue.project.name == SFilterByProject.SelectedItem.ToString() select issue.subject; issuesAdapter.Clear(); issuesAdapter.Add("None"); issuesAdapter.AddAll(issueAdapterQuery.ToList()); }; SFilterByUser.ItemSelected += delegate { if (SFilterByUser.SelectedItem.ToString() != "None") { //When user selected set only projects, which user involved var projectQuery = from project in projectsContainer.projects from membership in project.memberships where membership?.user?.name == SFilterByUser.SelectedItem.ToString() select project.name; projectAdapter.Clear(); projectAdapter.Add("None"); projectAdapter.AddAll(projectQuery.ToList()); //Also set issues, where user assigned to var issueQuery = from issue in issuesContainer.issues where issue?.assigned_to?.name == SFilterByUser.SelectedItem.ToString() select issue.subject; issuesAdapter.Clear(); issuesAdapter.Add("None"); issuesAdapter.AddAll(issueQuery.ToList()); } }; CBClosed.CheckedChange += delegate { RunOnUiThread(() => PDLoading.Show()); Thread innerThread = new Thread(() => { if (CBClosed.Checked) { issuesContainer = RedMineManager.Get <IssuesContainer>("/issues.json?nometa=1&limit=100&status_id=*"); } else { issuesContainer = RedMineManager.Get <IssuesContainer>("/issues.json?nometa=1&limit=100"); } var issueQuery = from issue in issuesContainer.issues select issue.subject; foreach (var issue in issuesContainer.issues) { issue.timeEntries = RedMineManager.Get <List <IssuesContainer.TimeEntry> >("/issues/" + issue.id + "/time_entries.json?nometa=1", "time_entries"); foreach (var timeEntry in issue.timeEntries) { issue.spent_hours += timeEntry.hours; } } RunOnUiThread(() => { issuesAdapter.Clear(); issuesAdapter.Add("None"); issuesAdapter.AddAll(issueQuery.ToList()); PDLoading.Hide(); }); }); SFilterByIssue.SetSelection(0); SFilterByMonth.SetSelection(0); SFilterByProject.SetSelection(0); SFilterByUser.SetSelection(0); innerThread.Start(); }; //Click for applying filter BApplyFilter.Click += delegate { if (SFilterByUser.SelectedItem.ToString() != "None") { var userQuery = from user in usersContainer.users where user.firstname + " " + user.lastname == SFilterByUser.SelectedItem.ToString() select user; usersContainer.users = userQuery.ToList(); var projectQuery = from project in projectsContainer.projects from membership in project.memberships where membership?.user?.name == SFilterByUser.SelectedItem.ToString() select project; projectsContainer.projects = projectQuery.ToList(); var issueQuery = from issue in issuesContainer.issues where issue.assigned_to?.name == SFilterByUser.SelectedItem.ToString() select issue; issuesContainer.issues = issueQuery.ToList(); } if (SFilterByMonth.SelectedItem.ToString() != "None") { var query = from date in dates where date.ToString(@"MMMM yyyy") == SFilterByMonth.SelectedItem.ToString() from issue in issuesContainer.issues where DateTime.Parse(issue.created_on).Month == date.Month select issue; issuesContainer.issues = query.ToList(); } if (SFilterByProject.SelectedItem.ToString() != "None") { var issueQuery = from issue in issuesContainer.issues where issue.project.name == SFilterByProject.SelectedItem.ToString() select issue; issuesContainer.issues = issueQuery.ToList(); var projectQuery = from project in projectsContainer.projects where project.name == SFilterByProject.SelectedItem.ToString() select project; projectsContainer.projects = projectQuery.ToList(); } if (SFilterByIssue.SelectedItem.ToString() != "None") { var query = from issue in issuesContainer.issues where issue.subject == SFilterByIssue.SelectedItem.ToString() select issue; issuesContainer.issues = query.ToList(); } SetView(); }; RunOnUiThread(() => PDLoading.Hide()); }); loadAllData.Start(); }