// The return type can be changed to IEnumerable, however to support
        // paging and sorting, the following parameters must be added:
        //     int maximumRows
        //     int startRowIndex
        //     out int totalRowCount
        //     string sortByExpression
        public IQueryable<bmi.imis.MABanker.Careers.Models.Posting> gvJobPostings_GetData()
        {
            var context = new CareersContext();            
                IQueryable<Posting> rtn = context.Postings;
                var dateAfterWhichListingsExpire = DateTime.Now.AddDays(-int.Parse(ConfigurationManager.AppSettings["DaysAfterWhichListingsExpire"]));
            if (IsStaffUser)
            {
                rtn = rtn.Where(p => p.PostDate >= dateAfterWhichListingsExpire || p.PostDate == null);
            }
            else
            {
                rtn = rtn.Where(p => p.PostDate >= dateAfterWhichListingsExpire && p.Approved == true);
            }

                if (ddlCategory.SelectedIndex != 0)
                {
                    int category = int.Parse(ddlCategory.SelectedValue);
                    rtn = rtn.Where(r => r.Category == category);
                }
                if (ddlState.SelectedIndex != 0) rtn = rtn.Where(r => r.State == ddlState.SelectedValue);
                if (tbKeyword.Text != string.Empty)
                {
                    //TODO:  Not efficient.  Unable to find faster method
                    rtn = rtn.Where(p => p.Description.Contains(tbKeyword.Text) ||
                        p.Comments.Contains(tbKeyword.Text) ||
                        p.City.Contains(tbKeyword.Text) ||
                        p.Company.Contains(tbKeyword.Text) ||
                        p.Title.Contains(tbKeyword.Text));
                       //.IndexOf(tbKeyword.Text, StringComparison.OrdinalIgnoreCase) != -1);
                }
                return rtn;
        }
 // The id parameter name should match the DataKeyNames value set on the control
 public void gvJobPostings_DeleteItem(Posting posting)
 {
     using (var context = new CareersContext())
     {
         context.Entry(posting).State = System.Data.Entity.EntityState.Deleted;
         context.SaveChanges();
     }
 }
 public void fvCareerCategory_InsertItem(CareerCategory category)
 {
     var item = new bmi.imis.MABanker.Careers.Models.CareerCategory();
         var context = new CareersContext();
         context.Categories.Add(category);
         context.SaveChanges();
         HttpContext.Current.Session["Categories"] = null;
 }
 // The id parameter name should match the DataKeyNames value set on the control
 public void gvCareerCategories_UpdateItem(CareerCategory category)
 {
     using (var context = new CareersContext())
     {
         context.Entry(category).State = System.Data.Entity.EntityState.Modified;
         context.SaveChanges();
         HttpContext.Current.Session["Categories"] = null;
     }
 }
 // The id parameter name should match the DataKeyNames value set on the control
 public void dgCareerCategories_DeleteItem(int Id)
 {
     using (var context = new CareersContext())
     {
         var career = context.Categories.Where(c => c.Id == Id).Select(c => c).FirstOrDefault();
         if (career != null)
         {
             context.Categories.Remove(career);
             context.SaveChanges();
             HttpContext.Current.Session["Categories"] = null;
         }
     }
     gvCareerCategories.DataBind();
 }
 // The id parameter name should match the DataKeyNames value set on the control
 public void gvResumes_DeleteItem(int resumeID)
 {
     using (var context = new CareersContext())
     {
         var resume = (from r in context.Resumes
                       where r.ResumeID == resumeID
                       select r).SingleOrDefault();
         var resumeBinary = (from r in context.ResumeBinaries
                             where r.ResumeID == resumeID
                             select r).SingleOrDefault();
         context.Entry(resumeBinary).State = System.Data.Entity.EntityState.Deleted;
         context.Entry(resume).State = System.Data.Entity.EntityState.Deleted;
         context.SaveChanges();
     }
 }
 public static List<CareerCategory> GetCategories (HttpSessionStateBase session)
 {
     if (session["CareerCategories"] != null)
     {
         return (List<CareerCategory>)session["CareerCategories"];
     }
     else
     {
         using (var context = new CareersContext())
         {
             var rtn = context.Categories.ToList();
             session["CareerCategories"] = rtn;
             return rtn;
         }
     }
 }
        // The id parameter name should match the DataKeyNames value set on the control
        public void fvResume_UpdateItem(Resume resume)
        {
            var fileUploadResume = (FileUpload)fvResume.FindControl("fuResume");
            using (var context = new CareersContext())
            {
                Resume retrievedResume;
                retrievedResume = context.Resumes.Find(resume.ResumeID);                
                ResumeBinary resumeBinary;
                if (resume.ResumeID != 0)
                {
                    TryUpdateModel(retrievedResume);
                    if (retrievedResume.ResumeBinary == null)
                    {
                        resumeBinary = new ResumeBinary();
                        retrievedResume.ResumeBinary = resumeBinary;
                    }
                    else resumeBinary = retrievedResume.ResumeBinary;
                }
                else
                {
                    resume.ResumeBinary = new ResumeBinary();
                    resumeBinary = resume.ResumeBinary;
                }

                if (fileUploadResume.HasFile)
                {
                        resumeBinary.ResumeBytes = fileUploadResume.FileBytes;
                        resumeBinary.ContentType = fileUploadResume.PostedFile.ContentType;
                        resumeBinary.FileName = System.IO.Path.GetFileName(fileUploadResume.PostedFile.FileName);
                }
                if (resume.ResumeID == 0) context.Entry(resume).State = System.Data.Entity.EntityState.Added;
                else context.Entry(retrievedResume).State = System.Data.Entity.EntityState.Modified;
                context.SaveChanges();
            }
            if (IsStaffUser) Response.Redirect(Request.Url.AbsolutePath + "?ResumeId=" + resume.ResumeID.ToString());
            else
            {
                fvResume.Visible = false;
                pnlConfirmation.Visible = true;
            }
        }
 // The id parameter should match the DataKeyNames value set on the control
 // or be decorated with a value provider attribute, e.g. [QueryString]int id
 public bmi.imis.MABanker.Careers.Models.Resume fvResume_GetItem([QueryString("ResumeId")] int? resumeId)
 {
     Resume rtn;
     if (resumeId == null) return new Resume();
     using (var context = new CareersContext())
     {
         context.Configuration.LazyLoadingEnabled = true;
         rtn = context.Resumes.Include(r => r.ResumeBinary).Where(r => r.ResumeID == resumeId ).FirstOrDefault();
         if (rtn == null) return rtn;                
         if (rtn.Category == null) rtn.Category = 0;
         else
         {
             var currentCategory = rtn.Category;
             if (context.Categories.Where(c => c.Id == currentCategory).Count() == 0)
             {
                 rtn.Category = 0;
             }
         }
     }
     return rtn;
 }
        public Posting GetPosting([QueryString("PostingId")]int? postingId)
        {
            Posting rtn;
            if ( ( (bool)(Session["ChangeToEditMode"] ?? false) || (bool)(Session["ChangeToViewMode"] ?? false)))
            {
                if ((bool)(Session["ChangeToViewMode"] ?? false) )
                {
                    fvJobPosting.ChangeMode(FormViewMode.ReadOnly);
                    Session["ChangeToViewMode"] = false;
                }
                if ((bool)(Session["ChangeToEditMode"] ?? false)) Session["ChangeToEditMode"] = false;

                rtn = (Posting)Session["Posting"];
                
                return rtn;
            }
            if (postingId == null) return new Posting();
                using (var context = new CareersContext())
                {
                    rtn = (from p in context.Postings
                          where p.JobID == postingId
                               select p).SingleOrDefault();
                    if (rtn == null) return null;
                    if (rtn.Category == null)
                    {
                        rtn.Category = 0;
                    }
                    else
                    {
                        var currentCategory = rtn.Category;
                        if (context.Categories.Where(c => c.Id == currentCategory).Count() == 0)
                        {
                            rtn.Category = 0;
                        }
                    }
                }
            return rtn;            
	    }
        // The return type can be changed to IEnumerable, however to support
        // paging and sorting, the following parameters must be added:
        //     int maximumRows
        //     int startRowIndex
        //     out int totalRowCount
        //     string sortByExpression
        public IQueryable<bmi.imis.MABanker.Careers.Models.Resume> gvResumes_GetData()
        {
            var context = new CareersContext();
            IQueryable<Resume> rtn = context.Resumes;
            var dateAfterWhichListingsExpire = DateTime.Now.AddDays(-int.Parse(ConfigurationManager.AppSettings["DaysAfterWhichListingsExpire"]));

                rtn = rtn.Where(p => p.PostDate >= dateAfterWhichListingsExpire || p.PostDate == null);
                if (!IsStaffUser) rtn = rtn.Where(p => p.Approved == true);

            if (ddlCategory.SelectedIndex != 0)
            {
                int category = int.Parse(ddlCategory.SelectedValue);
                rtn = rtn.Where(r => r.Category == category);
            }
            if (ddlState.SelectedIndex != 0) rtn = rtn.Where(r => r.State == ddlState.SelectedValue);
            if (tbKeyword.Text != string.Empty)
            {
                //TODO:  Not efficient.  Unable to find faster method
                rtn = rtn.Where(p => p.ResumeText.ToLower() == tbKeyword.Text.ToLower() ||
                    p.City.ToLower() == tbKeyword.Text.ToLower());
            }
            return rtn;
        }
 protected void lnkDownload_Click(object sender, EventArgs e)
 {
     int id = int.Parse((sender as LinkButton).CommandArgument);
     byte[] resumeBytes;
     using (var context = new CareersContext())
     {
         var resumeBinary = (from r in context.Resumes
                             where r.ResumeID == id
                             select r.ResumeBinary).FirstOrDefault();
         Response.Clear();
         Response.Buffer = true;
         Response.Charset = string.Empty;
         Response.Cache.SetCacheability(HttpCacheability.NoCache);
         Response.ContentType = resumeBinary.ContentType;
         Response.AppendHeader("Content-Disposition", "attachment; filename=" + resumeBinary.FileName);
         resumeBytes = resumeBinary.ResumeBytes;
     }
     Response.BinaryWrite(resumeBytes);
     Response.Flush();
     Response.End();
 }
 protected void btnFileDelete_Click(object sender, EventArgs e)
 {
     using (var context = new CareersContext())
     {
         int id = int.Parse((sender as Button).CommandArgument);
         var resumeBinary = (from rb in context.ResumeBinaries
                            where rb.ResumeID == id
                            select rb).FirstOrDefault();
         if (resumeBinary != null)
         {
             context.Entry(resumeBinary).State = System.Data.Entity.EntityState.Deleted;
             context.SaveChanges();
             ((FileUpload)fvResume.FindControl("fuResume")).Visible = true;
             ((LinkButton)fvResume.FindControl("lnkDownload")).Visible = false;
             ((Button)fvResume.FindControl("btnFileDelete")).Visible = false;
         }
     }
 }
 // The return type can be changed to IEnumerable, however to support
 // paging and sorting, the following parameters must be added:
 //     int maximumRows
 //     int startRowIndex
 //     out int totalRowCount
 //     string sortByExpression
 public IQueryable<bmi.imis.MABanker.Careers.Models.CareerCategory> dgCareerCategories_GetData()
 {
     var context = new CareersContext();
     return context.Categories;
 }
        private void UpdatePosting(Posting posting)
        {
            using (var context = new CareersContext())
            {
                if (posting.JobID == 0 && !IsStaffUser && PostingCredits <= 0) Response.Redirect(Request.Url.AbsoluteUri);
                bool decrementJobCredits = false;
                var postDateString = string.Empty;
                DateTime postDate;
                var postDateTextbox = (TextBox)fvJobPosting.FindControl("txtPostDate");
                if (postDateTextbox.Text != null && DateTime.TryParse(postDateTextbox.Text, out postDate)) posting.PostDate = postDate;
                else posting.PostDate = null;
                if (posting.JobID == 0)
                {
                    context.Entry(posting).State = System.Data.Entity.EntityState.Added;
                    if (!IsStaffUser) decrementJobCredits = true;
                }
                else context.Entry(posting).State = System.Data.Entity.EntityState.Modified;
                if (posting.Approved == false) SendUnapprovedNotification(posting);
                context.SaveChanges();
                if (decrementJobCredits) PostingCredits = PostingCredits - 1;

            }
            Response.Redirect(Request.Url.AbsolutePath + "?PostingId=" + posting.JobID.ToString());
        }