/// <summary>
        /// Creates new application for specified user if no open application exists.
        /// If open application exists, returns the open application.
        /// </summary>
        /// <param name="email"> user's email </param>
        /// <returns> new (or existing open) application for specified user </returns>
        public async Task <SFApp> CreateSFAppAsync(string email)
        {
            var query = await GetSFAppAsync(email);

            AppUser applicant = await _user.FindByEmailAsync(email);

            // if no open application exists, create one
            if (query == null || query.Closed != null)
            {
                // create new SFApp object
                SFApp app = new SFApp()
                {
                    Name       = $"{applicant.FirstName} {applicant.LastName}",
                    Email      = email,
                    Created    = DateTime.Now,
                    AppYear    = DateTime.Now.Year,
                    LastChange = DateTime.Now,
                    AppStatus  = AppStatus.Draft,
                    Closed     = null
                };

                // add new SFApp to DB
                await _context.SFApps.AddAsync(app);

                await _context.SaveChangesAsync();

                // retrieve newly created app from DB
                SFApp newApp = await GetSFAppAsync(email);

                // build responses and associate with app ID
                foreach (Question question in await _question.GetAllActiveQuestionsAsync())
                {
                    await _response.CreateAppResponseAsync(newApp.ID, question.ID);
                }
            }
            // return newly created application
            return(query);
        }