Esempio n. 1
0
        private async Task <bool> GetApproval(Guid approvalId)
        {
            try
            {
                ProjectInsight.Models.ApprovalRequests.ApprovalRequest approval = await ApprovalRequestService.GetApprovalRequest(approvalId);

                viewModel.Name         = approval.Name;
                viewModel.Description  = approval.Description;
                viewModel.DeadlineDate = approval.DeadlineDateTimeUTC.Value;

                viewModel.SelectedParentItem = viewModel.ParentItems.Where(x => x.Id == approval.ItemContainer_Id).FirstOrDefault();
                //viewModel.SelectedApprovers= viewModel.Approvers.Where(x => x.Id == task.TaskOwner_Id).FirstOrDefault();
                viewModel.Id = approvalId;
            }
            catch (Exception ex)
            {
                //AuthenticationService.Logout();
                return(false);
            }
            return(true);
        }
        private async Task <bool> GetApproval(Guid itemId)
        {
            try
            {
                approval = await ApprovalRequestService.GetApprovalRequest(itemId);

                if (approval != null)
                {
                    var item = new ApprovalRequestViewModel
                    {
                        Id          = approval.Id.ToString(),
                        Title       = approval.ItemNumberFullAndNameDisplayPreference,
                        Description = HtmlToText.ConvertHtml(approval.Description),
                        //Status = ((ProjectInsightMobile.Enums.ApprovalRequestStateType)approval.ApprovalRequestStateType).ToString(),
                        RequiresApprovalFromCurrentUser = approval.RequiresApprovalFromCurrentUser ?? false,
                        Status        = approval.ApprovalRequestStateTypeDescription,
                        ApprovedDate  = approval.ApprovedDateTimeUTC != null ? approval.ApprovedDateTimeUTC.Value : approval.CreatedDateTimeUTC.Value,
                        RequestedBy   = approval.Requestor != null ? "Requested By: " + approval.Requestor.Name : "",
                        RequestedDate = approval.CreatedDateTimeUTC.HasValue ? approval.CreatedDateTimeUTC.Value.ToString("ddd M/d/yy htt") : string.Empty,
                        DeadlineDate  = approval.DeadlineDateTimeUTC.HasValue ? "Deadline: " + approval.DeadlineDateTimeUTC.Value.ToString("ddd M/d/yy htt") : string.Empty
                    };


                    switch ((ApprovalRequestStateType)approval.ApprovalRequestStateType)
                    {
                    case ApprovalRequestStateType.Pending:
                        item.StatusIcon  = "pending.png";
                        item.StatusColor = ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["PendingColor"]);
                        break;

                    case ApprovalRequestStateType.Approved:
                        item.StatusIcon  = "approved.png";
                        item.StatusColor = ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["ApprovedColor"]);
                        break;

                    case ApprovalRequestStateType.Denied:
                        item.StatusIcon  = "rejected.png";
                        item.StatusColor = ExtensionMethods.ConvertColorToHex((Color)Application.Current.Resources["RejectedColor"]);;
                        break;
                    }

                    //RequiresApprovalFromCurrentUser
                    // item.RequiresApprovalFromCurrentUser = true;
                    if (approval.ApprovalRequestApprovals != null && approval.ApprovalRequestApprovals.Count() > 0)
                    {
                        //     item.RequiresApprovalFromCurrentUser = approval.ApprovalRequestApprovals.Any(x => x.Approver.Id == Common.CurrentWorkspace.UserID);



                        foreach (var app in approval.ApprovalRequestApprovals)
                        {
                            if (app.Approver != null)
                            {
                                //----------------------------------

                                if (string.IsNullOrEmpty(app.Approver.PhotoUrl))
                                {
                                    if (!string.IsNullOrEmpty(app.Approver.AvatarHtml))
                                    {
                                        string       myDiv = app.Approver.AvatarHtml;
                                        HtmlDocument doc   = new HtmlDocument();
                                        doc.LoadHtml(myDiv);
                                        HtmlNode node           = doc.DocumentNode.SelectSingleNode("div");
                                        string   AvatarInitials = "US";
                                        string   AvatarColor    = "#fff";
                                        string   PhotoURL       = string.Empty;

                                        if (node != null)
                                        {
                                            AvatarInitials = (node.ChildNodes[0]).OuterHtml;
                                            foreach (HtmlAttribute attr in node.Attributes)
                                            {
                                                if (attr.Name.ToLower() == "style")
                                                {
                                                    string[] parts = attr.Value.Split('#');
                                                    if (parts != null && parts.Length > 1)
                                                    {
                                                        AvatarColor = parts[1];
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            HtmlNode node2 = doc.DocumentNode.SelectSingleNode("img");
                                            if (node2 != null)
                                            {
                                                foreach (HtmlAttribute attr in node2.Attributes)
                                                {
                                                    if (attr.Name.ToLower() == "src")
                                                    {
                                                        string imageUrl = attr.Value.Replace("/ProjectInsight.WebApp", "");
                                                        PhotoURL = Common.CurrentWorkspace.WorkspaceURL + imageUrl;
                                                    }
                                                }
                                            }
                                        }

                                        StackLayout slAvatar = new StackLayout();
                                        slAvatar.HeightRequest     = 50;
                                        slAvatar.WidthRequest      = 50;
                                        slAvatar.VerticalOptions   = LayoutOptions.StartAndExpand;
                                        slAvatar.HorizontalOptions = LayoutOptions.StartAndExpand;

                                        slAvatar.Margin = new Thickness(0);

                                        Label lblUserId = new Label();
                                        lblUserId.IsVisible = false;
                                        lblUserId.Text      = app.Approver.Id.ToString();
                                        lblUserId.Margin    = 0;
                                        slAvatar.Children.Add(lblUserId);

                                        if (string.IsNullOrEmpty(PhotoURL))
                                        {
                                            slAvatar.BackgroundColor = Color.FromHex(AvatarColor);

                                            Label lbInitials = new Label();
                                            lbInitials.HeightRequest           = 50;
                                            lbInitials.WidthRequest            = 50;
                                            lbInitials.HorizontalOptions       = LayoutOptions.CenterAndExpand;
                                            lbInitials.VerticalOptions         = LayoutOptions.CenterAndExpand;
                                            lbInitials.HorizontalTextAlignment = TextAlignment.Center;
                                            lbInitials.VerticalTextAlignment   = TextAlignment.Center;
                                            lbInitials.TextColor = Color.White;
                                            lbInitials.Text      = AvatarInitials;
                                            lbInitials.FontSize  = 26;
                                            if (Device.RuntimePlatform.ToLower() == "android")
                                            {
                                                lbInitials.FontFamily = "OpenSans-SemiBold.ttf#Open Sans";
                                            }
                                            else
                                            {
                                                lbInitials.FontFamily = "OpenSans-SemiBold";
                                            }
                                            slAvatar.Children.Add(lbInitials);
                                        }
                                        else
                                        {
                                            Image photo = new Image();
                                            photo.Source            = ImageSource.FromUri(new Uri(PhotoURL));
                                            photo.HeightRequest     = 50;
                                            photo.WidthRequest      = 50;
                                            photo.HorizontalOptions = LayoutOptions.CenterAndExpand;
                                            photo.VerticalOptions   = LayoutOptions.CenterAndExpand;
                                            slAvatar.Children.Add(photo);
                                        }

                                        var goToUserProfile = new TapGestureRecognizer();
                                        goToUserProfile.Tapped += (s, e) =>
                                        {
                                            StackLayout sl  = (StackLayout)s;
                                            Label       lbl = (Label)sl.Children[0];
                                            Navigation.PushAsync(new UserProfile(new Guid(lbl.Text)));
                                        };
                                        slAvatar.GestureRecognizers.Add(goToUserProfile);
                                        slApprovers.Children.Add(slAvatar);
                                    }
                                }
                                else
                                {
                                    StackLayout slAvatar = new StackLayout();
                                    slAvatar.HeightRequest = 50;
                                    slAvatar.WidthRequest  = 50;

                                    slAvatar.VerticalOptions   = LayoutOptions.StartAndExpand;
                                    slAvatar.HorizontalOptions = LayoutOptions.StartAndExpand;
                                    slAvatar.Margin            = new Thickness(0);

                                    Label lblUserId = new Label();
                                    lblUserId.IsVisible = false;
                                    lblUserId.Text      = app.Approver.Id.ToString();
                                    lblUserId.Margin    = 0;
                                    slAvatar.Children.Add(lblUserId);

                                    Image photo = new Image();
                                    photo.Source            = ImageSource.FromUri(new Uri(Common.CurrentWorkspace.WorkspaceURL + app.Approver.PhotoUrl));
                                    photo.HeightRequest     = 50;
                                    photo.WidthRequest      = 50;
                                    photo.HorizontalOptions = LayoutOptions.CenterAndExpand;
                                    photo.VerticalOptions   = LayoutOptions.CenterAndExpand;
                                    slAvatar.Children.Add(photo);

                                    var goToUserProfile = new TapGestureRecognizer();
                                    goToUserProfile.Tapped += (s, e) =>
                                    {
                                        StackLayout sl  = (StackLayout)s;
                                        Label       lbl = (Label)sl.Children[0];
                                        Navigation.PushAsync(new UserProfile(new Guid(lbl.Text)));
                                    };
                                    slAvatar.GestureRecognizers.Add(goToUserProfile);

                                    slApprovers.Children.Add(slAvatar);
                                }

                                //--------------------------------
                            }
                        }
                    }


                    if (approval.ApprovalRequestItems != null & approval.ApprovalRequestItems.Count > 0)
                    {
                        foreach (var appitem in approval.ApprovalRequestItems)
                        {
                            string Line1 = string.Empty;
                            string Line2 = string.Empty;
                            string Line3 = string.Empty;
                            string Line4 = string.Empty;
                            string Icon  = string.Empty;


                            Guid Id = appitem.Id.Value;
                            if (appitem.ItemType == 8)
                            {
                                //Project

                                Line1 = appitem.NameWithDisplayPreference;
                                Line2 = FormatPeriodRange(appitem.StartDate, appitem.EndDate);
                                Line3 = appitem.Status ?? string.Empty;
                                Line4 = appitem.PrimaryProjectManager ?? string.Empty;
                                Icon  = "item_project.png";
                            }
                            else if (appitem.ItemType == 9)
                            {
                                //Task
                                Line1 = appitem.NameWithDisplayPreference;
                                Line2 = FormatPeriodRange(appitem.StartDate, appitem.EndDate);
                                Line3 = appitem.ProjectAffiliationNameAndNumber;
                                Icon  = "item_task.png";
                            }
                            else if (appitem.ItemType == 10)
                            {
                                //To-Do
                                Line1 = appitem.NameWithDisplayPreference;
                                Line2 = FormatPeriodRange(appitem.StartDate, appitem.EndDate);
                                Line3 = appitem.Status ?? string.Empty;
                                Line4 = appitem.PrimaryProjectManager ?? string.Empty;
                                Icon  = "item_project.png";
                            }
                            else if (appitem.ItemType == 21)
                            {
                                //Issue
                                Line1 = appitem.NameWithDisplayPreference;

                                string priority  = appitem.IssuePriority ?? string.Empty;
                                string separator = " - ";
                                if (String.IsNullOrEmpty(priority))
                                {
                                    separator = "";
                                }

                                Line2 = String.Format("{0}{1}{2}", FormatPeriodRange(appitem.StartDate, appitem.EndDate), separator, priority);
                                Line3 = appitem.Status ?? string.Empty;;
                                Line4 = appitem.ProjectAffiliationNameAndNumber ?? string.Empty;
                                Icon  = "item_issue.png";
                            }
                            else if (appitem.ItemType == 22)
                            {
                                //Approval Request
                                Line1 = appitem.NameWithDisplayPreference;
                                Line2 = FormatPeriodRange(appitem.StartDate, appitem.EndDate);
                                Line3 = appitem.Status ?? string.Empty;
                                Line4 = appitem.PrimaryProjectManager ?? string.Empty;
                                Icon  = "item_project.png";
                            }
                            else if (appitem.ItemType == 3)
                            {
                                //File
                                Line1 = appitem.NameWithDisplayPreference;
                                Line2 = FormatPeriodRange(appitem.StartDate, appitem.EndDate);
                                Line3 = appitem.Status ?? string.Empty;
                                Line4 = appitem.PrimaryProjectManager ?? string.Empty;
                                Icon  = "item_project.png";
                            }
                            else
                            {
                                Line1 = appitem.NameWithDisplayPreference;
                                Line2 = FormatPeriodRange(appitem.StartDate, appitem.EndDate);
                                Line3 = appitem.Status ?? string.Empty;
                                Line4 = appitem.PrimaryProjectManager ?? string.Empty;
                                Icon  = "item_project.png";
                            }


                            StackLayout slItem = new StackLayout();
                            slItem.HorizontalOptions = LayoutOptions.FillAndExpand;
                            slItem.VerticalOptions   = LayoutOptions.FillAndExpand;
                            slItem.Orientation       = StackOrientation.Horizontal;
                            slItem.Padding           = new Thickness(0);
                            slItem.Margin            = new Thickness(20, 0, 20, 0);
                            slItem.Spacing           = 10;

                            slItemList.Children.Add(slItem);

                            StackLayout slIcon = new StackLayout();
                            slIcon.HorizontalOptions = LayoutOptions.Start;
                            slIcon.VerticalOptions   = LayoutOptions.StartAndExpand;
                            slIcon.WidthRequest      = 50;
                            slIcon.HeightRequest     = 50;
                            slIcon.Padding           = new Thickness(0, 8, 0, 0);
                            slIcon.Margin            = new Thickness(0);
                            slIcon.Spacing           = 0;

                            slItem.Children.Add(slIcon);

                            Image icon = new Image();
                            icon.HeightRequest     = 50;
                            icon.WidthRequest      = 50;
                            icon.HorizontalOptions = LayoutOptions.Center;
                            icon.Source            = Icon;
                            icon.Margin            = new Thickness(0);

                            slIcon.Children.Add(icon);

                            StackLayout slDetails = new StackLayout();
                            slDetails.HorizontalOptions = LayoutOptions.FillAndExpand;
                            slDetails.VerticalOptions   = LayoutOptions.FillAndExpand;
                            slDetails.Orientation       = StackOrientation.Vertical;
                            slDetails.Padding           = new Thickness(0);
                            slDetails.Margin            = new Thickness(0);
                            slDetails.Spacing           = 0;

                            slItem.Children.Add(slDetails);

                            StackLayout slLine1 = new StackLayout();
                            slLine1.HorizontalOptions = LayoutOptions.FillAndExpand;
                            slLine1.VerticalOptions   = LayoutOptions.FillAndExpand;
                            slLine1.Orientation       = StackOrientation.Vertical;
                            slLine1.IsVisible         = !string.IsNullOrEmpty(Line1);
                            slLine1.Padding           = new Thickness(0);
                            slLine1.Margin            = new Thickness(0);
                            slLine1.Spacing           = 0;

                            slDetails.Children.Add(slLine1);


                            Label lblLine1 = new Label();
                            lblLine1.LineBreakMode = LineBreakMode.NoWrap;
                            lblLine1.FontSize      = 20;
                            lblLine1.Text          = Line1;
                            lblLine1.Margin        = new Thickness(0);

                            slLine1.Children.Add(lblLine1);

                            StackLayout slLine2 = new StackLayout();
                            slLine2.HorizontalOptions = LayoutOptions.FillAndExpand;
                            slLine2.VerticalOptions   = LayoutOptions.FillAndExpand;
                            slLine2.Orientation       = StackOrientation.Vertical;
                            slLine2.IsVisible         = !string.IsNullOrEmpty(Line2);
                            slLine2.Padding           = new Thickness(0);
                            slLine2.Margin            = new Thickness(0);
                            slLine2.Spacing           = 0;

                            slDetails.Children.Add(slLine2);

                            Label lblLine2 = new Label();
                            lblLine2.LineBreakMode = LineBreakMode.NoWrap;
                            lblLine2.FontSize      = 14;
                            lblLine2.Text          = Line2;
                            lblLine2.Margin        = new Thickness(0);

                            slLine2.Children.Add(lblLine2);

                            StackLayout slLine3 = new StackLayout();
                            slLine3.HorizontalOptions = LayoutOptions.FillAndExpand;
                            slLine3.VerticalOptions   = LayoutOptions.FillAndExpand;
                            slLine3.Orientation       = StackOrientation.Vertical;
                            slLine3.IsVisible         = !string.IsNullOrEmpty(Line3);
                            slLine3.Padding           = new Thickness(0);
                            slLine3.Margin            = new Thickness(0);
                            slLine3.Spacing           = 0;
                            slDetails.Children.Add(slLine3);

                            Label lblLine3 = new Label();
                            lblLine3.LineBreakMode = LineBreakMode.NoWrap;
                            lblLine3.FontSize      = 14;
                            lblLine3.Text          = Line3;
                            lblLine3.Margin        = new Thickness(0);
                            slLine3.Children.Add(lblLine3);

                            StackLayout slLine4 = new StackLayout();
                            slLine4.HorizontalOptions = LayoutOptions.FillAndExpand;
                            slLine4.VerticalOptions   = LayoutOptions.FillAndExpand;
                            slLine4.Orientation       = StackOrientation.Vertical;
                            slLine4.IsVisible         = !string.IsNullOrEmpty(Line4);
                            slLine4.Padding           = new Thickness(0);
                            slLine4.Margin            = new Thickness(0);
                            slLine4.Spacing           = 0;
                            slDetails.Children.Add(slLine4);

                            Label lblLine4 = new Label();
                            lblLine4.LineBreakMode = LineBreakMode.NoWrap;
                            lblLine4.FontSize      = 14;
                            lblLine4.Text          = Line4;
                            lblLine4.Margin        = new Thickness(0);
                            slLine4.Children.Add(lblLine4);

                            BoxView line1 = new BoxView();
                            line1.HeightRequest     = 0.5;
                            line1.Color             = (Color)Application.Current.Resources["DarkGrayTextColor"];
                            line1.HorizontalOptions = LayoutOptions.FillAndExpand;
                            line1.VerticalOptions   = LayoutOptions.End;
                            line1.Margin            = new Thickness(0, 2, 0, 2);
                            slItemList.Children.Add(line1);
                        }
                    }

                    viewModel      = item;
                    BindingContext = viewModel;
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
            return(true);
        }