private void refreshListsOfFriends()
        {
            Friends.Clear();

            using (var db = new GoalMasterDatabaseContext())
            {
                var user      = db.Users.FirstOrDefault(x => x.ID == User.ID);
                var relations = db.Relationships.Where(x => x.UserOne.ID == user.ID ||
                                                       x.UserTwo.ID == user.ID);
                var relatedUsers = new List <User>();

                var friends = new List <Tuple <string, string> >();

                foreach (var relation in relations)
                {
                    if (relation.UserOne != user)
                    {
                        relatedUsers.Add(relation.UserOne);
                        friends.Add(new Tuple <string, string>(relation.UserOne.Login, relation.Status.Description));
                    }

                    if (relation.UserTwo != user)
                    {
                        relatedUsers.Add(relation.UserTwo);
                        friends.Add(new Tuple <string, string>(relation.UserTwo.Login, relation.Status.Description));
                    }
                }
                _users = db.Users.Where(x => x.Login != User.Login).ToList();

                _users = _users.Except(relatedUsers).ToList();

                PossibleFriends = new ObservableCollection <User>(_users);
                Friends         = new ObservableCollection <Tuple <string, string> >(friends);
            }
        }
Esempio n. 2
0
 private void DeleteGoalRecord()
 {
     if (existingGoalRecord != null)
     {
         using (var db = new GoalMasterDatabaseContext())
         {
             var record = db.GoalRecords.FirstOrDefault(x => x.ID == existingGoalRecord.ID);
             if (record == null)
             {
                 MessageBox.Show("No record selected");
                 return;
             }
             db.GoalRecords.Remove(record);
             db.SaveChanges();
         }
         Value = null;
         Note  = null;
         if (CloseWindowEvent != null)
         {
             CloseWindowEvent(this, null);
         }
     }
     else
     {
         MessageBox.Show("No record selected");
     }
     //throw new NotImplementedException();
 }
Esempio n. 3
0
        private void refreshListsOfFriends()
        {
            Friends.Clear();

            using (var db = new GoalMasterDatabaseContext())
            {
                var user      = db.Users.FirstOrDefault(x => x.ID == User.ID);
                var relations = db.Relationships.Where(x => (x.UserOne.ID == user.ID ||
                                                             x.UserTwo.ID == user.ID) &&
                                                       x.Status.ID == (int)RelationshipStatusDefined.Accepted
                                                       );

                var invitedUsers = db.GoalDefinitions.FirstOrDefault(x => x.ID == _goalDefinition.ID).Users.Where(x => x.ID != User.ID);
                var relatedUsers = new List <User>();

                var friends = new List <User>();

                foreach (var relation in relations)
                {
                    if (relation.UserOne != user)
                    {
                        friends.Add(relation.UserOne);
                    }

                    if (relation.UserTwo != user)
                    {
                        friends.Add(relation.UserTwo);
                    }
                }
                friends        = friends.Except(invitedUsers).ToList();
                Friends        = new ObservableCollection <User>(friends);
                InvitedFriends = new ObservableCollection <User>(invitedUsers);
            }
        }
Esempio n. 4
0
        private void Registration()
        {
            try
            {
                new Thread(() =>
                {
                    //  Thread.CurrentThread.IsBackground = true;
                    bool passIdentical = arePasswordsIdentical();
                    bool validMail     = isMailValidAndFree(Email).Result;
                    bool loginValid    = isLoginValidAndFree(Login).Result;

                    if (passIdentical && validMail && loginValid)
                    {
                        using (var db = new GoalMasterDatabaseContext())
                        {
                            var users = db.Users;
                            var user  = new User(_login, _password, _email);
                            users.Add(user);
                            db.SaveChangesAsync();
                            MessageBox_Show(null, "Registration complete!", "Info");
                            Back();
                        }
                    }
                    else
                    {
                        MessageBox_Show(null, "Error", "Something went wrong. Try again.");
                    }
                }).Start();
            }
            catch (Exception e)
            {
                MessageBox_Show(null, "Error", e.ToString());
            }
        }
        private void refreshGoalRecords()
        {
            using (var db = new GoalMasterDatabaseContext())
            {
                var resultGoals = db.GoalRecords.Where(x =>
                                                       x.GoalDefinition.ID == FirstGoalDefinition.ID); //db.Users.FirstOrDefault(x => x.ID == User.ID).GoalRecords.Where(x => x.GoalDefinition.ID == FirstGoalDefinition.ID);
                //if (resultGoals == null)
                //    return;
                //GoalRecords = new ObservableCollection<GoalRecord>(resultGoals);
                GoalRecords2 = new SeriesCollection();

                if (FirstGoalDefinition == null)
                {
                    return;
                }
                var goalDefinitionUsers = db.GoalDefinitions.FirstOrDefault(x =>
                                                                            x.ID == FirstGoalDefinition.ID).Users;

                Dates = new ObservableCollection <string>();


                foreach (var goal in resultGoals)
                {
                    if (!Dates.Contains(goal.OnlyDate))
                    {
                        Dates.Add(goal.OnlyDate);
                    }
                }
                var orderedList = Dates.OrderBy(x => DateTime.Parse(x)).ToList();
                Dates = new ObservableCollection <string>(orderedList);

                foreach (var user in goalDefinitionUsers)
                {
                    var lineSerie = new LiveCharts.Wpf.LineSeries();
                    lineSerie.Title      = user.Login;
                    lineSerie.DataLabels = true;

                    var userGoals = db.GoalRecords.Where(x =>
                                                         x.User.ID == user.ID &&
                                                         x.GoalDefinition.ID == FirstGoalDefinition.ID);
                    lineSerie.Values = new ChartValues <ObservablePoint>();

                    for (int i = 0; i < Dates.Count; i++)
                    {
                        bool isAdded = false;
                        foreach (var goal in userGoals)
                        {
                            if (Dates[i] == goal.OnlyDate)
                            {
                                lineSerie.Values.Add(new ObservablePoint(i, goal.Value));
                                break;
                            }
                        }
                    }

                    lineSerie.LineSmoothness = 0;
                    GoalRecords2.Add(lineSerie);
                }
            }
        }
Esempio n. 6
0
 private void DeleteGoal()
 {
     using (var db = new GoalMasterDatabaseContext())
     {
         if (IsOwner)
         {
             var goalDef     = db.GoalDefinitions.FirstOrDefault(gd => gd.ID == _goalDefinition.ID);
             var goalRecords = db.GoalRecords.Where(gr => gr.GoalDefinition.ID == goalDef.ID);
             db.GoalRecords.RemoveRange(goalRecords);
             db.GoalDefinitions.Remove(goalDef);
             db.SaveChanges();
         }
         else
         {
             var goalDef = db.GoalDefinitions.FirstOrDefault(gd => gd.ID == _goalDefinition.ID);
             var user    = db.Users.FirstOrDefault(x => x.ID == User.ID);
             goalDef.Users.Remove(user);
             db.SaveChanges();
             //unsubscribe totdo
         }
     }
     if (this.CloseWindowEvent != null)
     {
         CloseWindowEvent(this, null);
     }
 }
Esempio n. 7
0
 private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
 {
     //sender.selectedVAlue
     if (sender is ListBox send)
     {
         //send = (ListBox)sender;
         if (send.SelectedItem is User user)
         {
             var optionsWindow = new OptionsWindow(user, false);
             optionsWindow.ShowDialog();
         }
         else if (send.SelectedItem is Tuple <string, string> userName)
         {
             using (var db = new GoalMasterDatabaseContext())
             {
                 var userFromDB    = db.Users.FirstOrDefault(us => us.Login == userName.Item1);
                 var optionsWindow = new OptionsWindow(userFromDB, false);
                 optionsWindow.ShowDialog();
             }
         }
     }
     else if (sender is DataGrid dgSend)
     {
         var user = (Tuple <string, string>)dgSend.SelectedItem;
         using (var db = new GoalMasterDatabaseContext())
         {
             var userFromDB    = db.Users.FirstOrDefault(us => us.Login == user.Item1);
             var optionsWindow = new OptionsWindow(userFromDB, false);
             optionsWindow.ShowDialog();
         }
     }
 }
        private void Save()
        {
            using (var db = new GoalMasterDatabaseContext())
            {
                var userInfo = db.UsersInfo.FirstOrDefault(ui => ui.User.ID == _user.ID);
                if (userInfo == null) //dodać nowe userInfo
                {
                    var newUserInfo = new UserInfo();

                    newUserInfo.ProfileImage    = UserImage;
                    newUserInfo.UserDescription = Description;
                    newUserInfo.Address         = Address;
                    newUserInfo.BirthDate       = BirthDate;
                    db.UsersInfo.Add(newUserInfo);
                    newUserInfo.User = db.Users.First(us => us.ID == _user.ID);
                    db.SaveChanges();
                }
                else //updateować userInfo
                {
                    userInfo.UserDescription = Description;
                    userInfo.Address         = Address;
                    userInfo.ProfileImage    = UserImage;
                    userInfo.BirthDate       = BirthDate;
                    db.SaveChanges();
                }

                if (CloseWindowEvent != null)
                {
                    CloseWindowEvent(this, null);
                }
            }
        }
 public void ShouldReturnTwoGoalTypes()
 {
     using (var db = new GoalMasterDatabaseContext())
     {
         var res = db.GoalTypes;
         Assert.AreEqual(2, res.Count());
     }
 }
Esempio n. 10
0
        public AddGoalRecordViewModel(User user, GoalDefinition goalDefinition, DateTime dateTime)
        {
            SelectedDate       = dateTime;
            ActivityBtnMessage = "Add activity";
            using (var db = new GoalMasterDatabaseContext())
            {
                var goalDef = db.GoalDefinitions.FirstOrDefault(
                    x => x.ID == goalDefinition.ID);
                existingGoalRecord = db.GoalRecords.FirstOrDefault(x => x.Date == SelectedDate &&
                                                                   x.GoalDefinition.ID == goalDefinition.ID &&
                                                                   x.User.ID == user.ID);
                if (existingGoalRecord != null)
                {
                    isInEditMode       = true;
                    ActivityBtnMessage = "Edit activity";
                    editModeValue      = existingGoalRecord.Value;
                    Note = existingGoalRecord.Note;
                }
                GoalDefinition          = goalDef;
                GoalDefinition.GoalType = goalDef.GoalType;
            }

            User = user;

            AddNewGoalRecordCommand = new RelayCommand(AddNewGoalRecord);
            DeleteGoalRecordCommand = new RelayCommand(DeleteGoalRecord);

            _goalTypeID = GoalDefinition.GoalType.ID;

            if (GoalDefinition.GoalType.ID == 1)//DoneOrNotDone
            {
                VisibilityValueBox = Visibility.Hidden;
                VisibilityBoolBox  = Visibility.Visible;

                TrueFalseOptions = new ObservableCollection <BoolHelper>();
                TrueFalseOptions.Add(new BoolHelper(true, "Done"));
                TrueFalseOptions.Add(new BoolHelper(false, "Not done"));
                if (isInEditMode)
                {
                    TrueOption = TrueFalseOptions.FirstOrDefault(x => x.Value == Convert.ToBoolean(editModeValue));//editModeValue ? 1 : 0;
                }
                else
                {
                    TrueOption = TrueFalseOptions.First();
                }
            }
            else//Numeric values
            {
                VisibilityValueBox = Visibility.Visible;
                VisibilityBoolBox  = Visibility.Hidden;
                if (isInEditMode)
                {
                    _value = editModeValue.ToString();
                }
            }
        }
Esempio n. 11
0
        private void AddNewGoalRecord()
        {
            if (isInEditMode)
            {
                using (var db = new GoalMasterDatabaseContext())
                {
                    var result = db.GoalRecords.FirstOrDefault(x => x.ID == existingGoalRecord.ID);
                    if (_goalTypeID == 1)
                    {
                        result.Value = TrueOption.Value ? 1 : 0;
                    }
                    else
                    {
                        if (NumericHelper.isLastLetterDotOrComma(Value))
                        {
                            ErrorMessage = "Invalid numeric value!";
                            return;
                        }

                        result.Value = Double.Parse(Value.Replace('.', ','));
                    }
                    result.Note = Note;
                    db.SaveChanges();
                }
            }
            else
            {
                var goalRecord = new GoalRecord();
                goalRecord.Date = SelectedDate;
                goalRecord.Note = Note;
                if (_goalTypeID == 1)
                {
                    goalRecord.Value = TrueOption.Value ? 1 : 0;
                }
                else
                {
                    if (NumericHelper.isLastLetterDotOrComma(Value))
                    {
                        ErrorMessage = "Invalid numeric value!";
                        return;
                    }
                    goalRecord.Value = Double.Parse(Value.Replace('.', ','));
                }
                using (var db = new GoalMasterDatabaseContext())
                {
                    db.GoalRecords.Add(goalRecord);
                    goalRecord.User           = db.Users.FirstOrDefault(x => x.ID == User.ID);
                    goalRecord.GoalDefinition = db.GoalDefinitions.FirstOrDefault(x => x.ID == GoalDefinition.ID);
                    db.SaveChanges();
                }
            }
            if (CloseWindowEvent != null)
            {
                CloseWindowEvent(this, null);
            }
        }
Esempio n. 12
0
        private void AddNewGoal()
        {
            //todo Zrobić dodawanie do goalDefinitions zaproszonych userów us.GoalDefinitions.Add///
            GoalDefinition goalDefinition = new GoalDefinition();

            if (InvitedFriends.Count == 0)
            {
                goalDefinition.Shared = false;
            }
            else
            {
                goalDefinition.Shared = true;
            }

            goalDefinition.Name        = Name;
            goalDefinition.Description = Description;

            using (var db = new GoalMasterDatabaseContext())
            {
                var gt = db.GoalTypes.FirstOrDefault(x => x.ID == FirstGoalType.ID);
                var us = db.Users.FirstOrDefault(x => x.ID == User.ID);
                //Important
                db.GoalDefinitions.Add(goalDefinition);
                db.SaveChanges();
                goalDefinition.OwnerUserID = us;
                goalDefinition.GoalType    = gt;
                goalDefinition.Users.Add(us);


                //friends  todo!

                //us.GoalDefinitions.Add(goalDefinition);
                //db.SaveChanges();
                foreach (var invitedFriend in InvitedFriends)
                {
                    var friend = db.Users.FirstOrDefault(x => x.ID == invitedFriend.ID);
                    goalDefinition.Users.Add(friend);
                    //var goalDef = new GoalDefinition();
                    //friend.GoalDefinitions.Add(goalDef);
                    //goalDef = goalDefinition;
                    //friend.GoalDefinitions.Add(goalDefinition); //dodaje tylko do ostatniego usera

                    //db.SaveChanges();
                }
                db.SaveChanges();
            }
            if (CloseWindowEvent != null)
            {
                CloseWindowEvent(this, null);
            }
        }
Esempio n. 13
0
        private async Task <bool> isLoginValidAndFree(string login)
        {
            if (login != null && login.Count() > 3)
            {
                using (var db = new GoalMasterDatabaseContext())
                {
                    var usersLogin = await db.Users.FirstOrDefaultAsync <User>(x => x.Login == login);

                    if (usersLogin == null)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 14
0
        private async Task <bool> isMailValidAndFree(string mail)
        {
            if (mail != null && new RegexUtilities().IsValidEmail(mail))
            {
                using (var db = new GoalMasterDatabaseContext())
                {
                    var usersMails = await db.Users.FirstOrDefaultAsync <User>(x => x.Mail == mail);//(db.Users.Where(x => x.Mail == mail)).FirstOrDefaultAsync<User>();

                    if (usersMails == null)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
        private void InviteFriend()
        {
            var relationship = new Relationship();

            using (var db = new GoalMasterDatabaseContext())
            {
                db.Relationships.Add(relationship);
                relationship.ActionUser = db.Users.FirstOrDefault(x => x.ID == User.ID);
                relationship.Status     = db.RelationshipStatuses.FirstOrDefault(
                    x => x.ID == (int)RelationshipStatusDefined.Pending);
                relationship.UserOne = db.Users.FirstOrDefault(x => x.ID == User.ID);
                relationship.UserTwo = db.Users.FirstOrDefault(x => x.Login == SelectedPossibleFriend.Login);

                var user = db.Users.FirstOrDefault(x => x.ID == User.ID);
                user.Relations.Add(relationship);
                db.SaveChanges();
            }
            refreshListsOfFriends();
        }
        public OptionsViewModel(User user, bool isOwner = true)
        {
            UploadCommand = new RelayCommand(Upload);
            SaveCommand   = new RelayCommand(Save);
            CancelCommand = new RelayCommand(Cancel);

            this.IsOwner = isOwner;
            this._user   = user;
            var placeholderImage = Resources.no_image_available;

            UserImage = ImageToByte(placeholderImage);

            using (var db = new GoalMasterDatabaseContext())
            {
                var name  = db.Users.FirstOrDefault(us => us.ID == this._user.ID).Login;
                var email = db.Users.FirstOrDefault(us => us.ID == this._user.ID).Mail;

                Name  = name;
                Email = email;

                var userInfo = db.UsersInfo.FirstOrDefault(ui => ui.User.ID == _user.ID);
                if (userInfo == null)
                {
                    return;
                }

                var description = userInfo.UserDescription;
                var address     = userInfo.Address;
                var image       = userInfo.ProfileImage;
                var birthDate   = userInfo.BirthDate;

                Description = description;
                Address     = address;
                UserImage   = image;
                if (UserImage == null)
                {
                    UserImage = ImageToByte(placeholderImage);
                }
                BirthDate = birthDate;
            }
        }
Esempio n. 17
0
        public AddGoalDefinitionViewModel(User user)
        {
            User = user;
            AddNewGoalCommand   = new RelayCommand(AddNewGoal);
            AddFriendCommand    = new RelayCommand(AddFriend);
            RemoveFriendCommand = new RelayCommand(RemoveFriend);
            Friends             = new ObservableCollection <User>();
            InvitedFriends      = new ObservableCollection <User>();


            using (var db = new GoalMasterDatabaseContext())
            {
                var result = db.GoalTypes;
                GoalTypes = new ObservableCollection <GoalType>(result);

                FirstGoalType = GoalTypes.First();
            }
            refreshListsOfFriends();
            SelectedFriend        = Friends.FirstOrDefault();
            SelectedInvitedFriend = InvitedFriends.FirstOrDefault();
        }
        private void EditOrDeleteGoal()
        {
            var editOrDeleteGoalWindow = new EditOrDeleteGoalDefWindow(FirstGoalDefinition, User);

            editOrDeleteGoalWindow.ShowDialog();
            using (var db = new GoalMasterDatabaseContext())
            {
                var result = db.Users.FirstOrDefault(x => x.ID == User.ID).GoalDefinitions;//db.GoalDefinitions.Where(x => x.Users.Contains(user));//
                GoalDefinitions = new ObservableCollection <GoalDefinition>(result);
                if (GoalDefinitions.Count <= 0)
                {
                    AddnewGoal();
                }
                else
                {
                    FirstGoalDefinition = GoalDefinitions.First();
                }
                refreshGoalRecords();
            }
            //throw new NotImplementedException();
        }
Esempio n. 19
0
        private void EditGoal()
        {
            using (var db = new GoalMasterDatabaseContext())
            {
                var goalDef = db.GoalDefinitions.FirstOrDefault(gd => gd.ID == _goalDefinition.ID);
                var user    = db.Users.FirstOrDefault(x => x.ID == User.ID);
                goalDef.Name        = Name;
                goalDef.Description = Description;
                goalDef.Users.Clear();
                goalDef.Users.Add(user);
                foreach (var invitedFriend in InvitedFriends)
                {
                    var friend = db.Users.FirstOrDefault(x => x.ID == invitedFriend.ID);
                    goalDef.Users.Add(friend);
                }

                db.SaveChanges();
            }
            if (this.CloseWindowEvent != null)
            {
                CloseWindowEvent(this, null);
            }
        }
        private void DataClick(object obj)
        {
            var point    = (ChartPoint)obj;
            var userName = point.SeriesView.Title;

            var serie = GoalRecords2.FirstOrDefault(view => view.Title == userName);

            var date = Dates.ElementAt((int)point.X);

            date = date.Replace('.', '-');
            DateTime result = DateTime.ParseExact(date, "dd-MM-yyyy", CultureInfo.InvariantCulture);
            string   note;

            using (var db = new GoalMasterDatabaseContext())
            {
                var user       = db.Users.FirstOrDefault(us => us.Login == userName);
                var goalRecord = db.GoalRecords.FirstOrDefault(gr => gr.Date == result &&
                                                               gr.User.ID == user.ID);
                note = goalRecord.Note;
            }

            MessageBox_Show(null, $"{note}", "Note");
        }
        private void RejectFriend()
        {
            if (SelectedInvitation == null)
            {
                return;
            }

            using (var db = new GoalMasterDatabaseContext())
            {
                var relationshipStatus = db.RelationshipStatuses.FirstOrDefault(x => x.ID == (int)RelationshipStatusDefined.Declined);

                var user         = db.Users.FirstOrDefault(x => x.ID == User.ID);
                var relationship = db.Relationships.FirstOrDefault(
                    x => x.ActionUser.Login == SelectedInvitation.Item1 &&
                    (x.UserOne.ID == user.ID ||
                     x.UserTwo.ID == user.ID));
                relationship.Status = relationshipStatus;

                db.SaveChanges();
            }
            refreshListsOfFriends();
            refreshListsOfInvitesToFriends();
        }
        private void refreshListsOfInvitesToFriends()//todo niech nie pokazuje nawzajem się zaporoszą
        {
            InvitesToFriends.Clear();

            using (var db = new GoalMasterDatabaseContext())
            {
                var user         = db.Users.FirstOrDefault(x => x.ID == User.ID);
                var relations    = db.Relationships;
                var relatedUsers = new List <User>();

                var invitesToFriends = new List <Tuple <string, string> >();

                foreach (var relation in relations)
                {
                    if (relation.Status.ID == (int)RelationshipStatusDefined.Pending && relation.ActionUser.ID != user.ID)
                    {
                        if (relation.UserOne == user || relation.UserTwo == user)
                        {
                            if (relation.UserOne != user)
                            {
                                relatedUsers.Add(relation.UserOne);
                                invitesToFriends.Add(new Tuple <string, string>(relation.UserOne.Login, relation.Status.Description));
                            }

                            if (relation.UserTwo != user)
                            {
                                relatedUsers.Add(relation.UserTwo);
                                invitesToFriends.Add(new Tuple <string, string>(relation.UserTwo.Login, relation.Status.Description));
                            }
                        }
                    }
                }

                InvitesToFriends   = new ObservableCollection <Tuple <string, string> >(invitesToFriends);
                SelectedInvitation = InvitesToFriends.FirstOrDefault();
            }
        }
        public MainUserWindowViewModel(User user, EventHandler closeEvent)
        {
            User = user;
            AddNewGoalCommand       = new RelayCommand(AddnewGoal);
            FriendsCommand          = new RelayCommand(Friends);
            AddNewActivityCommand   = new RelayCommand(AddNewActivity);
            OptionsCommand          = new RelayCommand(Options);
            DataClickCommand        = new RelayCommand <object>(DataClick);
            EditOrDeleteGoalCommand = new RelayCommand(EditOrDeleteGoal);

            SelectedDate      = DateTime.Today;
            GoalRecords       = new ObservableCollection <GoalRecord>();
            CloseWindowEvent += closeEvent;
            UserInfo          = $"User info: {User.Login} {User.Mail}";

            //DataClickCommand = new CustomCommand<ChartPoint>
            //{
            //      ExecuteDelegate = p => MessageBox_Show(null, $"Kliknięto {p.X} {p.Y} ", "")
            //};


            //TODO sprawdzać internet
            using (var db = new GoalMasterDatabaseContext())
            {
                var result = db.Users.FirstOrDefault(x => x.ID == user.ID).GoalDefinitions;//db.GoalDefinitions.Where(x => x.Users.Contains(user));//
                GoalDefinitions = new ObservableCollection <GoalDefinition>(result);
                if (GoalDefinitions.Count <= 0)
                {
                    AddnewGoal();
                }
                else
                {
                    FirstGoalDefinition = GoalDefinitions.First();
                }
                refreshGoalRecords();
            }
        }
Esempio n. 24
0
        public EditOrDeleteGoalDefViewModel(GoalDefinition goalDefinition, User user)
        {
            DeleteGoalCommand   = new RelayCommand(DeleteGoal);
            EditGoalCommand     = new RelayCommand(EditGoal);
            RemoveFriendCommand = new RelayCommand(RemoveFriend);
            AddFriendCommand    = new RelayCommand(AddFriend);

            Friends        = new ObservableCollection <User>();
            InvitedFriends = new ObservableCollection <User>();

            User = user;

            using (var db = new GoalMasterDatabaseContext())
            {
                var goalDef = db.GoalDefinitions.FirstOrDefault(gd => gd.ID == goalDefinition.ID);
                _goalDefinition = goalDef;
                Name            = goalDef.Name;
                Description     = goalDef.Description;

                if (goalDef.OwnerUserID.ID == user.ID)
                {
                    IsOwner = true;
                    DelOrUnsubscribeMessage = "Delete goal";
                }
                else
                {
                    IsOwner = false;
                    DelOrUnsubscribeMessage = "Unsubscribe from goal";
                    Info = "Only goal owner can edit invited friends";
                }
            }

            refreshListsOfFriends();
            SelectedFriend        = Friends.FirstOrDefault();
            SelectedInvitedFriend = InvitedFriends.FirstOrDefault();
        }