Example #1
0
        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();
        }