private void SaveAllAvdelinger()
        {
            var allAvdelinger = UpdateDataSource();

            if (allAvdelinger.Any(avdeling => avdeling.IsChanged))
            {
                foreach (var avdeling in allAvdelinger)
                {
                    if (avdeling.IsChanged)
                    {
                        avdeling.Save();
                    }
                }

                allAvdelinger = Avdeling.GetAll().ToList();

                UpdateBinding(allAvdelinger, sort: true);
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
            {
                ViewState["dummyId"] = 0;

                if (Session["AvdelingList - hidedColumns"] == null)
                {
                    Session["AvdelingList - hidedColumns"] = new Dictionary <string, string>();
                }

                IList <Avdeling> allAvdelinger = Avdeling.GetAll().ToList();

                Session["AvdelingList - SortDirection"]  = Session["AvdelingList - SortDirection"] ?? SortDirection.Ascending;
                Session["AvdelingList - SortExpression"] = Session["AvdelingList - SortExpression"] ?? "Navn";

                UpdateBinding(allAvdelinger, sort: true);
            }
        }
        protected void CreateNewButton_Click(object sender, EventArgs e)
        {
            var allAvdelinger = UpdateDataSource();

            var dummyId = (int)ViewState["dummyId"];

            var avdeling = new Avdeling {
                Id = dummyId
            };

            allAvdelinger.Add(avdeling);

            //Response.Redirect("AnsattDetails.aspx?Id=" + HttpUtility.UrlEncode(dummyId.ToString()));

            ViewState["dummyId"] = --dummyId;

            UpdateBinding(allAvdelinger, sort: false);

            WebUtilities.AdjustScrollPosition(this, 0, Int32.MaxValue);
        }
        private void BindToListView(IList <Klasse> allKlasser)
        {
            var avdelinger = Avdeling.GetAll().OrderBy(a => a.Navn).ToList();
            var elever     = Elev.GetAll().OrderBy(e => e.Navn).ToList();
            var ansatte    = Ansatt.GetAll().OrderBy(a => a.Navn).ToList();

            var klasseViewList = new List <object>();

            foreach (var klasse in allKlasser)
            {
                klasseViewList.Add(new
                {
                    klasse.Id,
                    klasse.Navn,
                    klasse.MaksAntallElever
                });
            }

            KlasseListView.DataSource = klasseViewList;
            KlasseListView.DataBind();

            foreach (var item in KlasseListView.Items)
            {
                if (item.ItemType == ListViewItemType.DataItem)
                {
                    var idButton = (Button)item.FindControl("IdButton");

                    var avdelingDropDown = (DropDownList)item.FindControl("AvdelingDropDown");

                    var klasse = allKlasser.First(k => k.Id.ToString() == idButton.Text);

                    avdelingDropDown.DataSource     = avdelinger;
                    avdelingDropDown.DataValueField = Utilities.GetPropertyName(() => klasse.Avdeling.Id);
                    avdelingDropDown.DataTextField  = Utilities.GetPropertyName(() => klasse.Avdeling.Navn);
                    avdelingDropDown.DataBind();

                    if (klasse.Avdeling != null)
                    {
                        avdelingDropDown.SelectedValue = klasse.Avdeling.Id.ToString();
                    }

                    var eleverListBox      = (ListControl)item.FindControl("EleverListBox");
                    var elevTeller         = 0;
                    var elevSelectedTeller = 0;
                    foreach (var elev in elever)
                    {
                        var listItem = new ListItem(elev.Navn, elev.Id.ToString());

                        if (klasse.Elevs.Any(e => e.Id == elev.Id))
                        {
                            listItem.Selected = true;
                            listItem.Enabled  = false;
                        }

                        if (listItem.Selected)
                        {
                            eleverListBox.Items.Insert(elevSelectedTeller++, listItem);
                            elevTeller++;
                        }
                        else
                        {
                            eleverListBox.Items.Insert(elevTeller++, listItem);
                        }
                    }

                    var ansatteListBox       = (ListControl)item.FindControl("AnsatteListBox");
                    var ansattTeller         = 0;
                    var ansattSelectedTeller = 0;
                    foreach (var ansatt in ansatte)
                    {
                        var listItem = new ListItem(ansatt.Navn, ansatt.Id.ToString());

                        if (klasse.Ansatts.Any(a => a.Id == ansatt.Id))
                        {
                            listItem.Selected = true;
                        }

                        if (listItem.Selected)
                        {
                            ansatteListBox.Items.Insert(ansattSelectedTeller++, listItem);
                            ansattTeller++;
                        }
                        else
                        {
                            ansatteListBox.Items.Insert(ansattTeller++, listItem);
                        }
                    }

                    if (klasse.Elevs.Count > 0)
                    {
                        var deleteLinkButton = (LinkButton)item.FindControl("DeleteLinkButton");
                        WebUtilities.DisableLinkButton(deleteLinkButton, @"Alle elever må overføres til andre klasser før klasse '" + klasse.Navn + "' kan slettes.");
                    }
                }
            }
        }
        private void UpdateBinding(Ansatt ansatt)
        {
            Session["currentAnsatt"] = ansatt;

            var avdelinger     = Avdeling.GetAll().OrderBy(a => a.Navn).ToList();
            var stillingsTyper = StillingsType.GetAll().OrderBy(s => s.Navn).ToList();
            var klasser        = Klasse.GetAll().OrderBy(k => k.Navn).ToList();
            var sfos           = Sfo.GetAll().OrderBy(s => s.Navn).ToList();

            IdTextBox.Text   = ansatt.Id.ToString();
            NavnTextBox.Text = ansatt.Navn;
            StillingsStørrelseTextBox.Text = ansatt.Stillingsstørrelse.ToString();
            TlfNrTextBox.Text = ansatt.Tlfnr;

            TimerPrUkeTextBox.Text = ansatt.TimerPrUke().ToString("N2");

            DiffTimerTextBox.Text = ansatt.DiffTimer().ToString("N2");

            AvdelingDropDown.DataSource     = avdelinger;
            AvdelingDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.Avdeling.Id);
            AvdelingDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.Avdeling.Navn);
            AvdelingDropDown.DataBind();

            if (ansatt.Avdeling != null)
            {
                AvdelingDropDown.SelectedValue = ansatt.Avdeling.Id.ToString();
            }

            StillingsTypeDropDown.DataSource     = stillingsTyper;
            StillingsTypeDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.StillingsType.Id);
            StillingsTypeDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.StillingsType.Navn);
            StillingsTypeDropDown.DataBind();

            if (ansatt.StillingsType != null)
            {
                StillingsTypeDropDown.SelectedValue = ansatt.StillingsType.Id.ToString();
            }

            var klasseTeller         = 0;
            var klasseSelectedTeller = 0;

            JobberIKlasserListBox.Items.Clear();

            foreach (var klasse in klasser)
            {
                var listItem = new ListItem(klasse.Navn, klasse.Id.ToString());

                if (ansatt.JobberIKlasser.Any(k => k.Id == klasse.Id))
                {
                    listItem.Selected = true;
                }

                if (listItem.Selected)
                {
                    JobberIKlasserListBox.Items.Insert(klasseSelectedTeller++, listItem);
                    klasseTeller++;
                }
                else
                {
                    JobberIKlasserListBox.Items.Insert(klasseTeller++, listItem);
                }
            }

            var sfoTeller         = 0;
            var sfoSelectedTeller = 0;

            JobberISfosListBox.Items.Clear();

            foreach (var sfo in sfos)
            {
                var listItem = new ListItem(sfo.Navn, sfo.Id.ToString());

                if (ansatt.JobberISfos.Any(s => s.Id == sfo.Id))
                {
                    listItem.Selected = true;
                }

                if (listItem.Selected)
                {
                    JobberISfosListBox.Items.Insert(sfoSelectedTeller++, listItem);
                    sfoTeller++;
                }
                else
                {
                    JobberISfosListBox.Items.Insert(sfoTeller++, listItem);
                }
            }

            BindToListView(ansatt);
        }
        protected void CancelButton_Click(object sender, EventArgs e)
        {
            var allAvdelinger = Avdeling.GetAll().ToList();

            UpdateBinding(allAvdelinger, sort: true);
        }
        private void CreateMetaData()
        {
            _db.UkeTypes.Add(new UkeType()
            {
                Id = 1, Navn = "Ulik uke"
            });
            _db.UkeTypes.Add(new UkeType()
            {
                Id = 2, Navn = "Lik uke"
            });

            for (int i = 1; i <= 6; i++)
            {
                _db.BemanningsNorms.Add(new BemanningsNorm()
                {
                    Id     = i,
                    Navn   = "1:" + i,
                    Antall = i
                });
            }

            for (int i = 1; i <= 10; i++)
            {
                _db.Trinns.Add(new Trinn()
                {
                    Id           = i,
                    Navn         = i + ".trinn",
                    UkeTimeTall  = 20 + i,
                    MandagStart  = new TimeSpan(i, i, 00),
                    MandagSlutt  = new TimeSpan(i, i, 00),
                    TirsdagStart = new TimeSpan(i, i, 00),
                    TirsdagSlutt = new TimeSpan(i, i, 00),
                    OnsdagStart  = new TimeSpan(i, i, 00),
                    OnsdagSlutt  = new TimeSpan(i, i, 00),
                    TorsdagStart = new TimeSpan(i, i, 00),
                    TorsdagSlutt = new TimeSpan(i, i, 00),
                    FredagStart  = new TimeSpan(i, i, 00),
                    FredagSlutt  = new TimeSpan(i, i, 00),
                });
            }

            _db.TidsInndelings.Add(new TidsInndeling()
            {
                Id = 1, Navn = "Tidsinndeling1", StartTid = new TimeSpan(7, 0, 0), SluttTid = new TimeSpan(17, 0, 0), TidsIntervall = new TimeSpan(0, 15, 0)
            });
            _db.TidsInndelings.Add(new TidsInndeling()
            {
                Id = 2, Navn = "Tidsinndeling2", StartTid = new TimeSpan(8, 45, 0), SluttTid = new TimeSpan(14, 30, 0), TidsIntervall = new TimeSpan(0, 15, 0)
            });
            _db.TidsInndelings.Add(new TidsInndeling()
            {
                Id = 3, Navn = "Tidsinndeling3", StartTid = new TimeSpan(7, 0, 0), SluttTid = new TimeSpan(8, 45, 0), TidsIntervall = new TimeSpan(0, 15, 0)
            });
            _db.TidsInndelings.Add(new TidsInndeling()
            {
                Id = 4, Navn = "Tidsinndeling4", StartTid = new TimeSpan(16, 15, 0), SluttTid = new TimeSpan(17, 0, 0), TidsIntervall = new TimeSpan(0, 15, 0)
            });

            for (int i = 1; i <= 8; i++)
            {
                _db.StillingsTypes.Add(new StillingsType()
                {
                    Id              = i,
                    Navn            = "Stillingstype" + i,
                    TimerElevarbeid = 10 + i,
                    TimerSamarbeid  = i
                });
            }

            _db.Skoles.Add(new Skole()
            {
                Id   = 1,
                Navn = "Skole",
                fk_TidsInndelingId = 2
            });


            for (int i = 1; i <= 3; i++)
            {
                _db.Sfoes.Add(new Sfo()
                {
                    Id   = i,
                    Navn = "Sfo" + i,
                    fk_TidsInndelingId           = 1,
                    fk_TidligvaktTidsInndelingId = 3,
                    fk_SeinvaktTidsInndelingId   = 4
                });
            }

            for (int i = 1; i <= 4; i++)
            {
                _db.Avdelings.Add(new Avdeling()
                {
                    Id   = i,
                    Navn = "Avdeling" + i
                });
            }

            for (int i = 1; i <= 110; i++)
            {
                _db.Ansatts.Add(new Ansatt()
                {
                    Id   = i,
                    Navn = "Ansatt" + i,
                    Stillingsstørrelse = Math.Abs(100 - i),
                    fk_AvdelingId      = (i % 4) + 1,
                    fk_StillingsTypeId = (i % 8) + 1,
                    Tlfnr = string.Empty
                });
            }

            _db.SaveChanges();

            for (int i = 1; i <= 4; i++)
            {
                var avdeling = Avdeling.GetById(i);
                avdeling.AvdelingsLeder = Ansatt.GetById(i);
                avdeling.Save();
            }

            for (int i = 1; i <= 15; i++)
            {
                _db.Klasses.Add(new Klasse()
                {
                    Id               = i,
                    Navn             = "Klasse" + i,
                    MaksAntallElever = i,
                    fk_AvdelingId    = (i % 4) + 1
                });
            }

            var hovedpedagoger = Ansatt.GetAll().Where(a => a.StillingsType.Id == (int)StillingsTypeEnum.Pedagog).OrderBy(a => a.Navn).ToList();

            for (int i = 1; i <= 90; i++)
            {
                _db.Elevs.Add(new Elev()
                {
                    Id          = i,
                    Navn        = "Elev" + i,
                    SfoProsent  = Math.Abs(100 - i),
                    fk_KlasseId = (i % 4) + 1,
                    fk_SkoleBemanningsNormId = (i % 6) + 1,
                    fk_TrinnId = (i % 10) + 1,
                    fk_HovedPedagogAnsattId = hovedpedagoger.ElementAt(i % 14).Id,
                    TlfNr = string.Empty
                });
            }

            _db.SaveChanges();

            var elever = Elev.GetAll().ToList();

            foreach (var elev in elever)
            {
                _db.ElevTilstedes.Add(new ElevTilstede()
                {
                    MandagStart  = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    MandagSlutt  = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    TirsdagStart = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    TirsdagSlutt = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    OnsdagStart  = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    OnsdagSlutt  = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    TorsdagStart = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    TorsdagSlutt = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    FredagStart  = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    FredagSlutt  = new TimeSpan(elev.Id % 12, elev.Id % 12, 00),
                    fk_ElevId    = elev.Id,
                    fk_UkeTypeId = (int)UkeTypeEnum.LikUke
                });
            }

            var ansatte = Ansatt.GetAll().ToList();

            foreach (var ansatt in ansatte)
            {
                _db.AnsattTilstedes.Add(new AnsattTilstede()
                {
                    MandagStart  = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    MandagSlutt  = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    MandagFri    = false,
                    TirsdagStart = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    TirsdagSlutt = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    TirsdagFri   = false,
                    OnsdagStart  = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    OnsdagSlutt  = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    OnsdagFri    = false,
                    TorsdagStart = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    TorsdagSlutt = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    TorsdagFri   = false,
                    FredagStart  = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    FredagSlutt  = new TimeSpan(ansatt.Id % 12, ansatt.Id % 12, 00),
                    FredagFri    = false,
                    Skole        = true,
                    fk_AnsattId  = ansatt.Id,
                    fk_UkeTypeId = (int)UkeTypeEnum.LikUke
                });
            }

            _db.SaveChanges();
        }
        private void BindToListView(IList <Ansatt> allAnsatte)
        {
            //Stopwatch stopwatch = new Stopwatch();
            //stopwatch.Start();

            var avdelinger     = Avdeling.GetAll().OrderBy(a => a.Navn).ToList();
            var stillingsTyper = StillingsType.GetAll().OrderBy(s => s.Navn).ToList();
            var klasser        = Klasse.GetAll().OrderBy(k => k.Navn).ToList();
            var sfos           = Sfo.GetAll().OrderBy(s => s.Navn).ToList();

            var ansattViewList = new List <object>();

            foreach (var ansatt in allAnsatte)
            {
                ansattViewList.Add(new
                {
                    ansatt.Id,
                    ansatt.Navn,
                    ansatt.Stillingsstørrelse,
                    ansatt.Tlfnr
                });
            }

            AnsattListView.DataSource = ansattViewList;
            AnsattListView.DataBind();

            foreach (var item in AnsattListView.Items)
            {
                if (item.ItemType == ListViewItemType.DataItem)
                {
                    var idButton = (Button)item.FindControl("IdButton");

                    var avdelingDropDown = (DropDownList)item.FindControl("AvdelingDropDown");

                    var ansatt = allAnsatte.First(a => a.Id.ToString() == idButton.Text);

                    avdelingDropDown.DataSource     = avdelinger;
                    avdelingDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.Avdeling.Id);
                    avdelingDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.Avdeling.Navn);
                    avdelingDropDown.DataBind();

                    if (ansatt.Avdeling != null)
                    {
                        avdelingDropDown.SelectedValue = ansatt.Avdeling.Id.ToString();
                    }

                    var stillingsTypeDropDown = (DropDownList)item.FindControl("StillingsTypeDropDown");
                    stillingsTypeDropDown.DataSource     = stillingsTyper;
                    stillingsTypeDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.StillingsType.Id);
                    stillingsTypeDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.StillingsType.Navn);
                    stillingsTypeDropDown.DataBind();

                    if (ansatt.StillingsType != null)
                    {
                        stillingsTypeDropDown.SelectedValue = ansatt.StillingsType.Id.ToString();
                    }

                    var jobberIKlasserListBox = (ListControl)item.FindControl("JobberIKlasserListBox");
                    jobberIKlasserListBox.Items.Clear();

                    var klasseTeller         = 0;
                    var klasseSelectedTeller = 0;
                    foreach (var klasse in klasser)
                    {
                        var listItem = new ListItem(klasse.Navn, klasse.Id.ToString());

                        if (ansatt.JobberIKlasser.Any(k => k.Id == klasse.Id))
                        {
                            listItem.Selected = true;
                        }

                        if (listItem.Selected)
                        {
                            jobberIKlasserListBox.Items.Insert(klasseSelectedTeller++, listItem);
                            klasseTeller++;
                        }
                        else
                        {
                            jobberIKlasserListBox.Items.Insert(klasseTeller++, listItem);
                        }
                    }

                    var jobberISfosListBox = (ListControl)item.FindControl("JobberISfosListBox");
                    jobberISfosListBox.Items.Clear();

                    var sfoTeller         = 0;
                    var sfoSelectedTeller = 0;
                    foreach (var sfo in sfos)
                    {
                        var listItem = new ListItem(sfo.Navn, sfo.Id.ToString());

                        if (ansatt.JobberISfos.Any(s => s.Id == sfo.Id))
                        {
                            listItem.Selected = true;
                        }

                        if (listItem.Selected)
                        {
                            jobberISfosListBox.Items.Insert(sfoSelectedTeller++, listItem);
                            sfoTeller++;
                        }
                        else
                        {
                            jobberISfosListBox.Items.Insert(sfoTeller++, listItem);
                        }
                    }

                    var avdelingsLederIAvdelinger = ansatt.AvdelingsLederIAvdelinger.Count > 0;
                    var hovedPedagogForElever     = ansatt.HovedPedagogForElever.Count > 0;

                    if (avdelingsLederIAvdelinger || hovedPedagogForElever)
                    {
                        string message;

                        if (avdelingsLederIAvdelinger)
                        {
                            message = @"Avdelinger hvor '" + ansatt.Navn + "' er avdelingsleder må tilordnes annen avdelingsleder før '" + ansatt.Navn + "' kan slettes.";
                        }
                        else
                        {
                            message = @"Elever som har '" + ansatt.Navn + "' som hovedpedagog må tilordnes annen hovedpedagog før '" + ansatt.Navn + "' kan slettes.";
                        }

                        var deleteLinkButton = (LinkButton)item.FindControl("DeleteLinkButton");
                        WebUtilities.DisableLinkButton(deleteLinkButton, message);
                    }

                    //var avdelingsLederIAvdelingerListBox = (ListBox)item.FindControl("AvdelingsLederIAvdelingerListBox");
                    //var avdelingTeller = 0;
                    //foreach (var avdeling in avdelinger)
                    //{
                    //    var listItem = new ListItem(avdeling.Navn, avdeling.Id.ToString());

                    //    if (ansatt.AvdelingsLederIAvdelinger.Any(a => a.Id == avdeling.Id))
                    //    {
                    //        listItem.Selected = true;
                    //    }

                    //    avdelingsLederIAvdelingerListBox.Items.Insert(avdelingTeller++, listItem);
                    //}

                    //var yearsDropDownCheckBoxes = (DropDownCheckBoxes)item.FindControl("DropDownCheckBoxes1");
                    //var klasseTeller1 = 0;
                    //foreach (var klasse in klasser)
                    //{
                    //    var listItem = new ListItem(klasse.Navn, klasse.Id.ToString());

                    //    if (ansatt.JobberIKlasser.Any(k => k.Id == klasse.Id))
                    //    {
                    //        listItem.Selected = true;
                    //    }

                    //    yearsDropDownCheckBoxes.Items.Insert(klasseTeller1++, listItem);
                    //}

                    //yearsDropDownCheckBoxes.CssClass = "form-control";

                    //var varslesAvAnsattDropDown = (DropDownList)item.FindControl("VarslesAvAnsattDropDown");
                    //varslesAvAnsattDropDown.DataSource = ansatte;
                    //varslesAvAnsattDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.VarslesAvAnsatt.Id);
                    //varslesAvAnsattDropDown.DataTextField = Utilities.GetPropertyName(() => ansatt.VarslesAvAnsatt.Navn);
                    //varslesAvAnsattDropDown.DataBind();

                    //// Default value
                    //varslesAvAnsattDropDown.Items.Insert(0, new ListItem("Velg varsling", "0"));
                    //varslesAvAnsattDropDown.SelectedValue = ansatt.VarslesAvAnsatt != null ? ansatt.VarslesAvAnsatt.Id.ToString() : "0";
                }
            }
            //stopwatch.Stop();
        }