private async void OnApprovedApprovalRequest(object sender, EventArgs e)
        {
            viewModel.VisibleLoad    = true;
            viewModel.LoadingMessage = "";
            try
            {
                var response = await ApprovalRequestService.Update(approval);

                //if (!response.HasErrors)
                //{

                //}
                //else
                //    Common.Instance.ShowToastMessage("Error communication with server!", DoubleResources.DangerSnackBar);
            }
            catch (Exception ex)
            {
                Common.Instance.ShowToastMessage("Error communication with server!", DoubleResources.DangerSnackBar);
            }
            viewModel.LoadingMessage = "Success";
            viewModel.VisibleLoad    = false;
        }
Beispiel #2
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);
        }
        private async void OnSave_Tapped(object sender, EventArgs e)
        {
            //selectiraniot Task e
            //var selTask = viewModel.SelectedTask;
            bool validationError = false;

            if (viewModel.SelectedApprovers == null || viewModel.SelectedApprovers.Count == 0)
            {
                viewModel.SelectedApproversError = true;
                validationError = true;
            }

            if (validationError)
            {
                return;
            }

            viewModel.VisibleLoad = true;



            ProjectInsight.Models.ApprovalRequests.ApprovalRequest approval = new ProjectInsight.Models.ApprovalRequests.ApprovalRequest();
            approval.Name        = viewModel.Name;
            approval.Description = viewModel.Description;
            //approval.UserCreated_Id = Common.CurrentWorkspace.UserID;
            //approval.Id = viewModel.Id;
            approval.AreAllApproversRequired    = viewModel.AreAllApproversRequired;
            approval.IsSequentialApproval       = viewModel.IsSequentialApproval;
            approval.ApprovalRequestDateTimeUTC = DateTime.UtcNow;
            approval.ApprovalRequestStateType   = 0;
            approval.ItemContainer_Id           = viewModel.Container_Id;



            if (viewModel.Container_Id.HasValue && viewModel.Container_Id != null)
            {
                approval.ApprovalRequestItems = new List <ApprovalRequestItem>();
                ApprovalRequestItem item = new ApprovalRequestItem();
                // item.ApprovalRequest_Id = resp.SavedId;
                item.Item_Id = viewModel.Container_Id;
                approval.ApprovalRequestItems.Add(item);
            }

            int i = 0;

            if (viewModel.SelectedApprovers != null && viewModel.SelectedApprovers.Count > 0)
            {
                approval.ApprovalRequestApprovals = new List <ApprovalRequestApproval>();
                foreach (var approver in viewModel.SelectedApprovers)
                {
                    ApprovalRequestApproval app = new ApprovalRequestApproval();
                    app.Approver_Id   = approver.Id;
                    app.ApprovalOrder = i;
                    //app.ApprovalRequest_Id = resp.SavedId;
                    app.ApprovalRequestApprovalStateType = 0;
                    app.Comment = "";
                    i++;
                    approval.ApprovalRequestApprovals.Add(app);
                }
            }

            ApiSaveResponse resp = await ApprovalRequestService.Save(approval);


            if (resp == null)
            {
                Common.Instance.ShowToastMessage("Error,check again.", DoubleResources.DangerSnackBar);
            }
            else if (resp.HasErrors)
            {
                Common.Instance.ShowToastMessage(resp.Errors[0].ErrorMessage, DoubleResources.DangerSnackBar);
            }
            else if (!resp.HasErrors)
            {
                //if (viewModel.Container_Id.HasValue && viewModel.Container_Id != null)
                //{
                //    ApprovalRequestItem item = new ApprovalRequestItem();
                //    item.ApprovalRequest_Id = resp.SavedId;
                //    item.Item_Id = viewModel.Container_Id;

                //    try
                //    {
                //        ApiSaveResponse respItem = await ApprovalRequestService.clientItem.SaveAsync(item);
                //        if (respItem == null)
                //        {
                //            Common.Instance.ShowToastMessage("Error,check again.", DoubleResources.DangerSnackBar);
                //        }
                //        else if (respItem.HasErrors)
                //        {
                //            Common.Instance.ShowToastMessage(respItem.Errors[0].ErrorMessage, DoubleResources.DangerSnackBar);
                //        }
                //    }
                //    catch (Exception ex)
                //    {

                //    }
                //}
                //Common.Instance.ShowToastMessage("Approval Saved", DoubleResources.SuccessSnackBar);
                Common.RefreshWorkList = true;
                await Navigation.PushAsync(new NewApprovalPage_Congratulations());
            }
            viewModel.VisibleLoad = false;
        }