private void ReloadDisplay()
        {
            ObservableCollection <MemberInfo> memberPerms = new ObservableCollection <MemberInfo>();

            GetPermTableCommand cmd = new GetPermTableCommand();

            cmd.OnResponseReceived += new Models.API.CommandModels.APICommand.ResponseReceivedHandler((response) =>
            {
                if ((string)response.GetValue("result") != "success")
                {
                    DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                    return;
                }
                JArray members = (JArray)response.GetValue("members");
                foreach (JToken jt in members)
                {
                    JObject j                 = jt as JObject;
                    MemberInfo newInfo        = new MemberInfo();
                    newInfo.User              = (string)j.GetValue("userid");
                    newInfo.CanCreateProjects = (bool)j.GetValue("cancreateprojects");
                    newInfo.IsModerator       = (bool)j.GetValue("ismoderator");
                    memberPerms.Add(newInfo);
                }
            });
            CondorAPI.getInstance().Execute(cmd);

            tbl_member_perms.ItemsSource = memberPerms;
        }
Beispiel #2
0
        private void FillProjectsList()
        {
            //get the projects' ListView object
            ListView sidebarList = ((MainPageMaster)this.Master).ListView.FindByName <ListView>("lst_main_menu");

            //do nothing if no username is set
            if (m_myusername == null || m_myusername == "")
            {
                sidebarList.ItemsSource = null;
                return;
            }

            //get the projects list
            APICommand cmd = new GetAllProjectsCommand()
            {
                Token = m_config.Token
            };

            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                if (!((string)response.GetValue("result")).Equals("success"))
                { //failed to get the projects list
                    DependencyService.Get <INotification>().ShortAlert("Error getting projects list: " + (string)response.GetValue("msg"));
                    return;
                }
                //parse the projects data
                m_projects = new Projects();
                m_projects.Parse(response);

                //set the listview source
                sidebarList.ItemsSource = m_projects.ProjectList;
            });
            CondorAPI.getInstance().Execute(cmd);
        }
Beispiel #3
0
        private void CompleteLogin()
        {
            //make toast
            DependencyService.Get <INotification>().ShortAlert("Logged in as " + m_myusername);

            //set the API caller's token
            CondorAPI.getInstance().Token = m_config.Token;
            SetNavMenu(true);

            //determine whether to show or hide the member permissions menu item
            APICommand cmd = new CanModifyPermissionsCommand();

            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                if ((string)response.GetValue("result") != "success")
                {
                    DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                    return;
                }
                m_cellMemberPerms.IsVisible = (bool)response.GetValue("haspermission");
                if (m_cellMemberPerms.IsVisible)
                {
                    m_mnuAdminTitle.IsVisible = true;
                }
            });
            CondorAPI.getInstance().Execute(cmd);

            //determine whether to show or hide the create project member item
            cmd = new CanCreateProjectsCommand();
            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                if ((string)response.GetValue("result") != "success")
                {
                    DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                    return;
                }
                m_cellCreateProject.IsVisible = (bool)response.GetValue("haspermission");
                if (m_cellCreateProject.IsVisible)
                {
                    m_mnuAdminTitle.IsVisible = true;
                }
            });
            CondorAPI.getInstance().Execute(cmd);

            //set the user ID
            m_lblCurUserId.Text = m_myusername;

            //set the team
            cmd = new GetTeamCommand();
            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                m_team            = (string)response.GetValue("team");
                m_lblCurTeam.Text = m_team;
            });
            CondorAPI.getInstance().Execute(cmd);

            //fill the projects list
            FillProjectsList();
        }
        public MemberPermsPage(MasterDetailPage mdp)
        {
            InitializeComponent();

            ReloadDisplay();

            tbl_member_perms.ItemSelected += new EventHandler <SelectedItemChangedEventArgs>((o, e) =>
            {
                if (e.SelectedItem == null)
                {
                    return;
                }

                tbl_member_perms.SelectedItem = null;

                MemberInfo i = e.SelectedItem as MemberInfo;

                ManagePermsPrompt p = new ManagePermsPrompt();
                p.OnToggleCreate   += new EventHandler((o2, e2) =>
                {
                    ToggleCreatePermissionCommand cmd = new ToggleCreatePermissionCommand()
                    {
                        Member = i.User
                    };
                    cmd.OnResponseReceived += new Models.API.CommandModels.APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update member info
                        i.CanCreateProjects = (bool)response.GetValue("haspermission");
                        ReloadDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.OnToggleMod += new EventHandler((o2, e2) =>
                {
                    ToggleIsModCommand cmd = new ToggleIsModCommand()
                    {
                        Member = i.User
                    };
                    cmd.OnResponseReceived += new Models.API.CommandModels.APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update member info
                        i.IsModerator = (bool)response.GetValue("haspermission");
                        ReloadDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(mdp);
            });
        }
Beispiel #5
0
        private void Initialize()
        {
            //enable login menu option
            m_cellLogin.IsEnabled = true;

            //initialize the condor helper
            CondorAPI.getInstance().Initialize(m_config.Address);
            CondorAPI.getInstance().Token = m_config.Token;

            //display the home page
            DisplayHome();

            //check for updates
            string addr;
            string version;
            string description;

            if (Updater.CheckForUpdates(out addr, out version, out description))
            {
                UpdatePrompt p = new UpdatePrompt()
                {
                    Text = description, Version = version
                };
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    Device.OpenUri(new Uri(addr));
                });
                p.Show(this);
            }

            //try restoring the login, only if a token is set
            if (m_config.Token == "")
            {
                return;
            }
            APICommand cmd = new RestoreLoginCommand()
            {
                Token = m_config.Token
            };

            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                if (response.GetValue("username") == null)
                { //token was invalid
                    DependencyService.Get <INotification>().ShortAlert("Session timed out or server unavailable, please log in again");
                    CondorAPI.getInstance().Token = "";
                    m_config.Token = "";
                    return;
                }
                //set my username and complete the login
                m_myusername = (string)response.GetValue("username");
                CompleteLogin();
            });
            CondorAPI.getInstance().Execute(cmd);
        }
Beispiel #6
0
        private void CompleteLogout()
        {
            //display toast
            DependencyService.Get <INotification>().ShortAlert("Logged out");
            //clear the API's token
            CondorAPI.getInstance().Token = "";
            //clear the saved token
            m_config.Token = "";
            //nullify my username
            m_myusername = null;
            SetNavMenu(false);
            //reset the labels to default
            m_lblCurTeam.Text   = "Condor";
            m_lblCurUserId.Text = "Task Management Engine";

            //go back to the home page
            DisplayHome();
        }
Beispiel #7
0
        public MainPage()
        {
            InitializeComponent();
            MasterPage.ListView.ItemSelected += ListView_ItemSelected;

            m_lblCurTeam   = MasterPage.RootView.FindByName <Label>("txt_cur_team");
            m_lblCurUserId = MasterPage.RootView.FindByName <Label>("txt_cur_userid");

            m_mnuAdminTitle     = MasterPage.RootView.FindByName <StackLayout>("mnu_admin_title");
            m_cellMemberPerms   = MasterPage.RootView.FindByName <ClickableStackLayout>("mnu_perms_table");
            m_cellCreateProject = MasterPage.RootView.FindByName <ClickableStackLayout>("mnu_create_project");

            m_cellLogin = MasterPage.RootView.FindByName <ClickableStackLayout>("mnu_login");
            m_cellAddr  = MasterPage.RootView.FindByName <ClickableStackLayout>("mnu_addr");

            //get the config class (will be different based on the platform we built)
            m_config = ConfigFactory.GetInstance();

            //set up the login clicked event listener
            m_cellLogin.Clicked += (o, e) =>
            {
                this.IsPresented = false; //hide the sidebar thing

                if (m_cellLogin.Text == "Logout")
                { //if logout button, do logout and skip the login actions
                    LogoutCommand cmd = new LogoutCommand();
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if (((string)response.GetValue("msg") != "" && response.GetValue("msg") != null) || !(bool)response.GetValue("result"))
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        CompleteLogout();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                    return;
                }
                //execute the login command
                CredsPrompt p = new CredsPrompt()
                {
                    PromptTitle = "Login"
                };
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    LoginCommand cmd = new LoginCommand()
                    {
                        Username = p.Username, Password = p.Password
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("msg") != "" && response.GetValue("msg") != null)
                        { //check if an error was thrown when contacting the server
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        if (response.GetValue("token") == null)
                        { //if token is null then assume the login failed
                            DependencyService.Get <INotification>().ShortAlert("ERROR: Invalid Credentials");
                            return;
                        }
                        m_config.Token = (string)response.GetValue("token");
                        CondorAPI.getInstance().Token = m_config.Token;
                        m_myusername = (string)response.GetValue("username");
                        CompleteLogin();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(this);
            };

            //set up the server address menu event listener
            m_cellAddr.Clicked += new EventHandler((o, e) =>
            {
                this.IsPresented = false;
                AskServerAddress();
            });

            //set up the member permissions menu event listener
            m_cellMemberPerms.Clicked += new EventHandler((o, e) =>
            {
                ((NavigationPage)Detail).PushAsync(new MemberPermsPage(this));
                //hide the sidebar
                this.IsPresented = false;
            });

            //set up the create project menu event listener
            m_cellCreateProject.Clicked += new EventHandler((o, e) =>
            {
                ManageTaskPrompt p = new ManageTaskPrompt(null)
                {
                    PromptTitle = "Create Project", CanAssign = false, CanDelete = false, CanSetTitle = true, CanSetDate = false, PositiveButtonText = "Create"
                };
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    CreateCommand cmd = new CreateCommand()
                    {
                        Creator = m_myusername, Title = p.TaskTitle, Description = p.Description
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //add the new project
                        Project newProject     = new Project(p.PromptTitle.Replace(' ', '_').ToLower());
                        newProject.Title       = p.PromptTitle;
                        newProject.Description = p.Description;
                        //add the creator as a member of the project
                        Member newProjectCreator = new Member();
                        newProjectCreator.ID     = m_myusername;
                        newProjectCreator.Role   = Role.MANAGER;
                        newProject.Members.Add(newProjectCreator);
                        //add the project to the project list
                        m_projects.AppendProject(newProject);
                        //reload the projects list in the sidebar
                        FillProjectsList();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(this);
                //hide the sidebar
                this.IsPresented = false;
            });

            if (m_config.Address != null && !m_config.Address.Equals(""))
            { //if a server address is specified, initialize the app
                Initialize();
            }
            else
            { //otherwise ask for a server address
                AskServerAddress();
            }
        }
Beispiel #8
0
        public ProjectPage(MasterDetailPage mdp, Project p, string my_username)
        {
            InitializeComponent();

            m_mdp  = mdp;
            m_proj = p;

            m_lstMembers     = this.FindByName <ListView>("lay_members");
            m_lstMyTasks     = this.FindByName <ListView>("lay_my_tasks");
            m_lstAllTasks    = this.FindByName <ListView>("lay_all_tasks");
            m_mnuProjectInfo = this.ToolbarItems[0];
            m_mnuDelProj     = this.ToolbarItems[1];
            m_mnuAddMember   = this.ToolbarItems[2];
            m_mnuCreateTask  = this.ToolbarItems[3];

            //set the event handler for toolbar menu items clicked
            m_mnuProjectInfo.Clicked += ToolbarClicked;
            m_mnuDelProj.Clicked     += ToolbarClicked;
            m_mnuAddMember.Clicked   += ToolbarClicked;
            m_mnuCreateTask.Clicked  += ToolbarClicked;

            //set up the members listview event listener
            m_lstMembers.ItemSelected += ListItemSelected;

            //set up the my tasks listview event listener
            m_lstMyTasks.ItemSelected += ListItemSelected;

            //set up the all tasks listview event listener
            m_lstAllTasks.ItemSelected += ListItemSelected;

            //empty the toolbar menu so we can re-add the things we can use later
            this.ToolbarItems.Clear();
            this.ToolbarItems.Add(m_mnuProjectInfo);

            //check and save project-based permissions
            //only check task, we are checking member further down so just set the local var there
            APICommand cmd = new CanManageTasksCommand()
            {
                Project = p.ID
            };

            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                m_permManageTasks = (bool)response.GetValue("haspermission");
            });
            CondorAPI.getInstance().Execute(cmd);

            //check permissions to determine what to show in context menu
            //delete project permission
            cmd = new CanDeleteProjectCommand()
            {
                Project = p.ID
            };
            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                if ((bool)response.GetValue("haspermission"))
                {
                    this.ToolbarItems.Insert(0, m_mnuDelProj);
                }
            });
            CondorAPI.getInstance().Execute(cmd);
            //add member/create task permission (project manager)
            cmd = new CanManageMembersCommand()
            {
                Project = p.ID
            };
            cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
            {
                if ((bool)response.GetValue("haspermission"))
                {
                    this.ToolbarItems.Insert(1, m_mnuAddMember);
                    this.ToolbarItems.Insert(2, m_mnuCreateTask);
                }
                m_permManageMembers = (bool)response.GetValue("haspermission");
            });
            CondorAPI.getInstance().Execute(cmd);

            //get myself in the project
            m_me = p.GetMemberByName(my_username);

            ReloadProjectDisplay();
        }
Beispiel #9
0
        private void ToolbarClicked(object sender, EventArgs e)
        {
            ToolbarItem tappedItem = sender as ToolbarItem;

            if (tappedItem == m_mnuProjectInfo)
            {
                ProjectInfoPage p = new ProjectInfoPage();
                p.Description.Text = m_proj.Description;
                p.Title            = this.Title;
                ((NavigationPage)m_mdp.Detail).PushAsync(p);
            }
            else if (tappedItem == m_mnuDelProj)
            {
                Prompt p = new Prompt()
                {
                    PromptTitle = "Are you sure?", PositiveButtonText = "Yes", NegativeButtonText = "No"
                };
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    DeleteCommand cmd = new DeleteCommand()
                    {
                        Title = m_proj.ID
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update the project list
                        ((MainPage)m_mdp).DeleteProject(m_proj);
                        //go back to the home page
                        ((MainPage)m_mdp).DisplayHome();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(m_mdp);
            }
            else if (tappedItem == m_mnuAddMember)
            {
                TextPrompt p = new TextPrompt()
                {
                    PromptTitle = "Enter a Mattermost User ID", Hint = "user_id", PositiveButtonText = "Add", NegativeButtonText = "Cancel", Keyboard = Keyboard.Plain
                };
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    AddMemberCommand cmd = new AddMemberCommand()
                    {
                        Project = m_proj.ID, Member = p.Text
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update the task with the new member
                        Member newMember = new Member()
                        {
                            Role = Role.MEMBER, ID = p.Text
                        };
                        m_proj.Members.Add(newMember);
                        //reload the project display
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(m_mdp);
            }
            else if (tappedItem == m_mnuCreateTask)
            {
                ManageTaskPrompt p = new ManageTaskPrompt(m_proj)
                {
                    CanAssign = false, CanSetTitle = true, CanDelete = false, PositiveButtonText = "Create", NegativeButtonText = "Cancel"
                };
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    CreateTaskCommand cmd = new CreateTaskCommand()
                    {
                        Project = m_proj.ID, Title = p.TaskTitle, Due = p.Date, Description = p.Description
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update the project with the new Task
                        Models.Task t = new Models.Task()
                        {
                            Name = p.TaskTitle, Due = p.Date, Description = p.Description
                        };
                        m_proj.Tasks.Add(t);
                        //reload the project display
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(m_mdp);
            }
        }
Beispiel #10
0
        private void ListItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            ListView senderLV  = (ListView)sender;
            object   tappedObj = e.SelectedItem;

            //don't allow items to be selected
            senderLV.SelectedItem = null;

            //this will be called again when we clear the SelectedItem, so this is here to skip that call
            if (tappedObj == null)
            {
                return;
            }

            if (senderLV == m_lstMembers && m_permManageMembers)
            { //member list triggered this event
                Member tappedMember = tappedObj as Member;
                //can't manage myself
                if (tappedMember == m_me)
                {
                    return;
                }
                ManageMemberPrompt p = new ManageMemberPrompt();
                if (tappedMember.Role == Role.MEMBER)
                {
                    p.State = ManageMemberPrompt.BtnState.PROMOTE;
                }
                else if (tappedMember.Role == Role.MANAGER)
                {
                    p.State = ManageMemberPrompt.BtnState.DEMOTE;
                }
                p.OnPromote += new EventHandler((o, e2) =>
                {
                    PromoteMemberCommand cmd = new PromoteMemberCommand()
                    {
                        Project = m_proj.ID, Member = tappedMember.ID
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        tappedMember.Role = Role.MANAGER;
                        p.State           = ManageMemberPrompt.BtnState.DEMOTE;
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.OnDemote += new EventHandler((o, e2) =>
                {
                    DemoteMemberCommand cmd = new DemoteMemberCommand()
                    {
                        Project = m_proj.ID, Member = tappedMember.ID
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        tappedMember.Role = Role.MEMBER;
                        p.State           = ManageMemberPrompt.BtnState.PROMOTE;
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.OnDelete += new EventHandler((o, e2) =>
                {
                    Prompt pc = new Prompt()
                    {
                        PromptTitle = "Are you sure?", PositiveButtonText = "Yes", NegativeButtonText = "No"
                    };
                    pc.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                    {
                        DeleteMemberCommand cmd = new DeleteMemberCommand()
                        {
                            Project = m_proj.ID, Member = tappedMember.ID
                        };
                        cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                        {
                            if ((string)response.GetValue("result") != "success")
                            {
                                DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                                return;
                            }
                            m_proj.Members.Remove(tappedMember);
                            ReloadProjectDisplay();
                            pc.Dismiss();
                            p.Dismiss();
                        });
                        CondorAPI.getInstance().Execute(cmd);
                    });
                    pc.Show(m_mdp);
                });
                p.Show(m_mdp);
            }
            else if (senderLV == m_lstMyTasks)
            { //my tasks list triggered this event
                Models.Task        tappedTask = tappedObj as Models.Task;
                ManageMyTaskPrompt p          = new ManageMyTaskPrompt(tappedTask);
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    //do nothing if nothing was changed
                    if (p.SelectedStatus == tappedTask.Status)
                    {
                        return;
                    }
                    //execute the command to set the task status
                    SetTaskStatusCommand cmd = new SetTaskStatusCommand()
                    {
                        Project = m_proj.ID, Task = tappedTask.Name, Status = p.SelectedStatus.str
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update the status and reload the display
                        tappedTask.Status = p.SelectedStatus;
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.Show(m_mdp);
            }
            else if (senderLV == m_lstAllTasks && m_permManageTasks)
            { //all tasks list triggered this event
                Models.Task      tappedTask = tappedObj as Models.Task;
                ManageTaskPrompt p          = new ManageTaskPrompt(m_proj);
                p.Date           = tappedTask.Due;
                p.Description    = tappedTask.Description;
                p.Status         = (tappedTask.Assigned == null) ? ManageTaskPrompt.BtnStatus.ASSIGN : ManageTaskPrompt.BtnStatus.DEASSIGN;
                p.AssignedMember = tappedTask.Assigned;
                p.OnAssign      += new EventHandler((o, e2) =>
                {
                    AssignTaskCommand cmd = new AssignTaskCommand()
                    {
                        Project = m_proj.ID, Task = tappedTask.Name, Member = p.AssignedMember.ID
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update the dialog
                        p.HidePicker();
                        p.Status = ManageTaskPrompt.BtnStatus.DEASSIGN;
                        //update the task and reload the display
                        tappedTask.Assigned = p.AssignedMember;
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.OnDeassign += new EventHandler((o, e2) =>
                {
                    DeassignTaskCommand cmd = new DeassignTaskCommand()
                    {
                        Project = m_proj.ID, Task = tappedTask.Name
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //update the dialog
                        p.Status = ManageTaskPrompt.BtnStatus.ASSIGN;
                        //update the task and reload the display
                        tappedTask.Assigned = null;
                        ReloadProjectDisplay();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.OnDelete += new EventHandler((o, e2) =>
                {
                    DeleteTaskCommand cmd = new DeleteTaskCommand()
                    {
                        Project = m_proj.ID, Title = tappedTask.Name
                    };
                    cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                    {
                        if ((string)response.GetValue("result") != "success")
                        {
                            DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                            return;
                        }
                        //remove the task from the list
                        m_proj.Tasks.Remove(tappedTask);
                        //reload the display
                        ReloadProjectDisplay();
                        //close the prompt
                        p.Dismiss();
                    });
                    CondorAPI.getInstance().Execute(cmd);
                });
                p.OnPromptSaved += new Prompt.PromptClosedEventListener(() =>
                {
                    //update the due date if changed
                    if (p.Date.ToFileTimeUtc() != tappedTask.Due.ToFileTimeUtc())
                    {
                        SetTaskDueCommand cmd = new SetTaskDueCommand()
                        {
                            Project = m_proj.ID, Task = tappedTask.Name, Due = p.Date
                        };
                        cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                        {
                            if ((string)response.GetValue("result") != "success")
                            {
                                DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                                return;
                            }
                            //update the due date
                            tappedTask.Due = p.Date;
                            //reload the display
                            ReloadProjectDisplay();
                        });
                        CondorAPI.getInstance().Execute(cmd);
                    }
                    //update the description if changed
                    if (p.Description != tappedTask.Description)
                    {
                        SetTaskDescCommand cmd = new SetTaskDescCommand()
                        {
                            Project = m_proj.ID, Task = tappedTask.Name, Description = p.Description
                        };
                        cmd.OnResponseReceived += new APICommand.ResponseReceivedHandler((response) =>
                        {
                            if ((string)response.GetValue("result") != "success")
                            {
                                DependencyService.Get <INotification>().ShortAlert("ERROR: " + (string)response.GetValue("msg"));
                                return;
                            }
                            //update the description
                            tappedTask.Description = p.Description;
                            //reload the display
                            ReloadProjectDisplay();
                        });
                        CondorAPI.getInstance().Execute(cmd);
                    }
                });
                p.Show(m_mdp);
            }
        }