private bool validacijaNoveUcionice() { if (!validacijaPodataka()) { return(false); } else if (racunarskiCentar.Ucionice.ContainsKey(oznakaUcionica.Text.Trim())) { if (racunarskiCentar.Ucionice[oznakaUcionica.Text.Trim()].Obrisan) { dodavanjeUcioniceIzborStarogUnosa = false; Ucionica ucionica = racunarskiCentar.Ucionice[oznakaUcionica.Text.Trim()]; // vec postoji ucionica sa tom oznakom, ali je logicki obrisana OdlukaDodavanjaUcionica odluka = new OdlukaDodavanjaUcionica(); odluka.Oznaka.Text = "Oznaka: " + ucionica.Oznaka; odluka.BrojRadnihMesta.Text = "Broj radnih mesta: " + ucionica.BrojRadnihMesta; odluka.Projektor.Text = "Projektor: " + ucionica.ProjektorString; odluka.Tabla.Text = "Tabla: " + ucionica.TablaString; odluka.PametnaTabla.Text = "Pametna tabla: " + ucionica.PametnaTablaString; odluka.OperativniSistem.Text = "Operativni sistem: " + ucionica.OperativniSistem; odluka.ShowDialog(); if (odluka.potvrdaNovogUnosa) { // ukoliko je korisnik potvrdio da zeli da unese nove podatke, gazimo postojecu neaktivnu ucionicu racunarskiCentar.Ucionice.Remove(oznakaUcionica.Text.Trim()); } else { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "ucionica"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(ucionica.Oznaka); // vracamo logicki obrisanu ucionicu da bude aktivna ucionica.Obrisan = false; dodavanjeUcioniceIzborStarogUnosa = true; } } else { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Učionica sa unetom oznakom već postoji!"); }); vratiNaKorak1(); UpdateLayout(); oznakaUcionica.Focus(); return(false); } } return(true); }
public bool DodajUcionicu(Ucionica novaUcionica) { if (ucionice.ContainsKey(novaUcionica.Oznaka)) { return(false); } this.ucionice.Add(novaUcionica.Oznaka, novaUcionica); Console.WriteLine("Ucionica: " + ucionice.Count); return(true); }
public DodavanjeUcionice(RacunarskiCentar racunarskiCentar, ObservableCollection <Ucionica> ucionice, bool izmena, string oznaka, Notifier notifierMainWindow, UndoRedoStack stack, OrderedDictionary prethodnaStanja) { notifierError = new Notifier(cfg => { cfg.PositionProvider = new WindowPositionProvider( parentWindow: this, corner: Corner.TopRight, offsetX: 20, offsetY: 10); cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor( notificationLifetime: System.TimeSpan.FromSeconds(5), maximumNotificationCount: MaximumNotificationCount.FromCount(1)); cfg.Dispatcher = Application.Current.Dispatcher; }); this.prethodnaStanjaAplikacije = prethodnaStanja; this.staroStanje = null; this.potvrdio = false; this.stekStanja = stack; this.notifierMainWindow = notifierMainWindow; this.inicijalizacija = false; InitializeComponent(); this.inicijalizacija = true; this.dodavanjeUcioniceIzborStarogUnosa = false; novaUcionica = new Ucionica(); this.racunarskiCentar = racunarskiCentar; this.izmena = izmena; this.unosPrviPut = true; this.oznakaUcioniceZaIzmenu = oznaka; List <Softver> softveri = new List <Softver>(); foreach (Softver s in racunarskiCentar.Softveri.Values) { if (!s.Obrisan) { s.Instaliran = false; softveri.Add(s); } } softverTabela.ItemsSource = softveri; softverTabela.IsSynchronizedWithCurrentItem = true; tabelaUcionica = ucionice; if (!izmena) { oznakaUcionica.Focus(); } BackStepMenuItem.IsEnabled = false; }
private bool validacijaBrojaRadnihMesta() { Ucionica staraUcionica = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu]; if (staraUcionica.BrojRadnihMesta == int.Parse(brojRadnihMestaUcionica.Text.Trim())) { return(true); } int noviBrMesta = int.Parse(brojRadnihMestaUcionica.Text.Trim()); List <string> sviPredmetiUcionice = new List <string>(); foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) //trazimo sve predmete koji se odrzavaju u datoj ucionici { if (polje.Ucionica.Trim().Equals(staraUcionica.Oznaka.Trim())) { sviPredmetiUcionice.Add(polje.NazivPolja.Split('-')[0].Trim()); } } List <string> predmetiKojiZahtevajuBrojMesta = new List <string>(); foreach (string poz in sviPredmetiUcionice) { if (racunarskiCentar.Predmeti[poz].VelicinaGrupe > noviBrMesta) { predmetiKojiZahtevajuBrojMesta.Add(poz); } } List <string> predmetiKojiZahtevajuBrojMestaBezDupl = predmetiKojiZahtevajuBrojMesta.Distinct().ToList(); if (predmetiKojiZahtevajuBrojMestaBezDupl.Count > 0) { PotvrdaIzmene potvrda = new PotvrdaIzmene(); potvrda.Title = "Nedovoljno mesta"; potvrda.PorukaBrisanja.Text = "Da li ste sigurni?\n\nUkoliko potvrdite izmenu, sledeci predmeti ce se ukloniti iz rasporeda" + " u ucionici zbog nedostatka mesta u ucionici:\n"; List <string> kljuceviPolja = new List <string>(); for (int i = 0; i < predmetiKojiZahtevajuBrojMestaBezDupl.Count; i++) { potvrda.PorukaBrisanja.Text += "\n" + (i + 1) + ". " + predmetiKojiZahtevajuBrojMestaBezDupl[i]; foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.NazivPolja.Split('-')[0].Trim().Equals(predmetiKojiZahtevajuBrojMestaBezDupl[i]) && polje.Ucionica.Equals(staraUcionica.Oznaka)) { kljuceviPolja.Add(polje.Id); } } } potvrda.ShowDialog(); if (potvrda.daKlik) { foreach (string id in kljuceviPolja) { racunarskiCentar.PoljaKalendara.Remove(id); } foreach (string poz in predmetiKojiZahtevajuBrojMesta) { racunarskiCentar.Predmeti[poz].PreostaliTermini++; } } else { return(false); } } staraUcionica.BrojRadnihMesta = int.Parse(brojRadnihMestaUcionica.Text.Trim()); return(true); }
private bool validacijaIzmeneProjektora() { Ucionica staraUcionica = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu]; if (prisustvoProjektoraUcionica.IsChecked) { staraUcionica.PrisustvoProjektora = prisustvoProjektoraUcionica.IsChecked; staraUcionica.ProjektorString = staraUcionica.PrisustvoProjektora ? "prisutan" : "nije prisutan"; return(true); } List <string> sviPredmetiUcionice = new List <string>(); foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) //trazimo sve predmete koji se odrzavaju u datoj ucionici { if (polje.Ucionica.Trim().Equals(staraUcionica.Oznaka.Trim())) { sviPredmetiUcionice.Add(polje.NazivPolja.Split('-')[0].Trim()); } } List <string> predmetiKojiZahtevajuProjektor = new List <string>(); foreach (string poz in sviPredmetiUcionice) { if (racunarskiCentar.Predmeti[poz].NeophodanProjektor) { predmetiKojiZahtevajuProjektor.Add(poz); } } List <string> predmetiKojiZahtevajuProjektorBezDupl = predmetiKojiZahtevajuProjektor.Distinct().ToList(); if (predmetiKojiZahtevajuProjektorBezDupl.Count > 0) { PotvrdaIzmene potvrda = new PotvrdaIzmene(); potvrda.Title = "Nedostatak projektora"; potvrda.PorukaBrisanja.Text = "Da li ste sigurni?\n\nUkoliko potvrdite izmenu, sledeci predmeti ce se ukloniti iz rasporeda" + " u ucionici zbog nedostatka projektora:\n"; List <string> kljuceviPolja = new List <string>(); for (int i = 0; i < predmetiKojiZahtevajuProjektorBezDupl.Count; i++) { potvrda.PorukaBrisanja.Text += "\n" + (i + 1) + ". " + predmetiKojiZahtevajuProjektorBezDupl[i]; foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.NazivPolja.Split('-')[0].Trim().Equals(predmetiKojiZahtevajuProjektorBezDupl[i]) && polje.Ucionica.Equals(staraUcionica.Oznaka)) { kljuceviPolja.Add(polje.Id); } } } potvrda.ShowDialog(); if (potvrda.daKlik) { foreach (string id in kljuceviPolja) { racunarskiCentar.PoljaKalendara.Remove(id); } foreach (string poz in predmetiKojiZahtevajuProjektor) { racunarskiCentar.Predmeti[poz].PreostaliTermini++; } } else { return(false); } } staraUcionica.PrisustvoProjektora = prisustvoProjektoraUcionica.IsChecked; staraUcionica.ProjektorString = staraUcionica.PrisustvoProjektora ? "prisutan" : "nije prisutan"; return(true); }
private bool validacijaIzmeneSoftvera() { Ucionica staraUcionica = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu]; List <string> sviPredmetiUcionice = new List <string>(); foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) //trazimo sve predmete koji se odrzavaju u datoj ucionici { if (polje.Ucionica.Trim().Equals(staraUcionica.Oznaka.Trim())) { sviPredmetiUcionice.Add(polje.NazivPolja.Split('-')[0].Trim()); } } List <string> predmetiUcionice = sviPredmetiUcionice.Distinct().ToList(); //izbacimo duplikate List <string> predmetiBezSoftvera = new List <string>(); foreach (string poz in sviPredmetiUcionice) // prolazim kroz sve predmete unutar ucionice { Predmet predmet = racunarskiCentar.Predmeti[poz]; foreach (string soft in predmet.Softveri) //prolazim kroz sve softvere jednog predmeta { bool postoji = false; for (int i = 0; i < softverTabela.Items.Count; i++) //iteriram kroz svaki oznaceni softver { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran) { if (soft.Trim().Equals(softver.Oznaka.Trim())) //trazim taj softver u ucionici { postoji = true; } } } if (!postoji) { predmetiBezSoftvera.Add(poz); } } } List <string> predmetiBezSoftBezDupl = predmetiBezSoftvera.Distinct().ToList(); if (predmetiBezSoftBezDupl.Count > 0) { PotvrdaIzmene potvrda = new PotvrdaIzmene(); potvrda.Title = "Nedostatak softvera"; potvrda.PorukaBrisanja.Text = "Da li ste sigurni?\n\nUkoliko potvrdite izmenu, sledeci predmeti ce se ukloniti iz rasporeda" + " u ucionici zbog nedostatka softvera:\n"; List <string> kljuceviPolja = new List <string>(); for (int i = 0; i < predmetiBezSoftBezDupl.Count; i++) { potvrda.PorukaBrisanja.Text += "\n" + (i + 1) + ". " + predmetiBezSoftBezDupl[i]; foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.NazivPolja.Split('-')[0].Trim().Equals(predmetiBezSoftBezDupl[i]) && polje.Ucionica.Equals(staraUcionica.Oznaka)) { kljuceviPolja.Add(polje.Id); } } } potvrda.ShowDialog(); if (potvrda.daKlik) { foreach (string id in kljuceviPolja) { racunarskiCentar.PoljaKalendara.Remove(id); } foreach (string poz in predmetiBezSoftvera) { racunarskiCentar.Predmeti[poz].PreostaliTermini++; } } else { return(false); } } if ((bool)LinuxOSUcionica.IsChecked) { staraUcionica.OperativniSistem = "Linux"; } else if ((bool)WindowsOSUcionica.IsChecked) { staraUcionica.OperativniSistem = "Windows"; } else { staraUcionica.OperativniSistem = "Windows i Linux"; } staraUcionica.InstaliraniSoftveri.Clear(); StringBuilder sb = new StringBuilder(); int brojSoftvera = 0; for (int i = 0; i < softverTabela.Items.Count; i++) { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran) { brojSoftvera++; staraUcionica.InstaliraniSoftveri.Add(softver.Oznaka); if (brojSoftvera > 1) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); softver.Instaliran = false; } } staraUcionica.SoftveriLista = sb.ToString(); return(true); }
private void izmenaUcionice() { string novaOznaka = oznakaUcionica.Text.Trim(); if (novaOznaka != oznakaUcioniceZaIzmenu && racunarskiCentar.Ucionice.ContainsKey(novaOznaka)) { notifierError.ShowError("Učionica sa unetom oznakom već postoji u bazi!"); oznakaUcionica.Focus(); return; } if (validacijaPodataka() && validacijaIzmeneSoftvera() && validacijaIzmeneTable() && validacijaIzmenePametneTable() && validacijaIzmeneProjektora() && validacijaBrojaRadnihMesta()) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "ucionica"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "izmena"; staroStanje.Oznake.Add(oznakaUcioniceZaIzmenu); Ucionica ucionicaIzmena = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu]; string staraOznaka = ucionicaIzmena.Oznaka; bool oznakaIzmenjena = false; if (!staraOznaka.Equals(oznakaUcionica.Text.Trim())) { oznakaIzmenjena = true; } ucionicaIzmena.Oznaka = oznakaUcionica.Text.Trim(); ucionicaIzmena.Opis = opisUcionica.Text.Trim(); if (oznakaIzmenjena) { foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.Ucionica.Trim().Equals(staraOznaka)) { polje.Ucionica = ucionicaIzmena.Oznaka; } } racunarskiCentar.Ucionice.Remove(staraOznaka); racunarskiCentar.Ucionice.Add(ucionicaIzmena.Oznaka, ucionicaIzmena); } tabelaUcionica[indeks] = ucionicaIzmena; Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili učionicu!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
private void izmeniSoftver() { string novaOznaka = oznakaSoftver.Text.Trim(); if (novaOznaka != oznakaSoftveraZaIzmenu && racunarskiCentar.Softveri.ContainsKey(novaOznaka)) { notifierError.ShowError("Softver sa unetom oznakom već postoji u bazi!"); oznakaSoftver.Focus(); return; } if (validacijaPodataka() && proveraIzmeneOS(oznakaSoftveraZaIzmenu)) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "softver"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "izmena"; staroStanje.Oznake.Add(oznakaSoftveraZaIzmenu); Softver softverIzmena = racunarskiCentar.Softveri[oznakaSoftveraZaIzmenu]; bool promenilaSeOznaka = false; bool promenioSeNaziv = false; bool promenioSeOpis = false; string staraOznaka = softverIzmena.Oznaka; if ((bool)WindowsOSSoftver.IsChecked) { softverIzmena.OperativniSistem = "Windows"; } else if ((bool)LinuxOSSoftver.IsChecked) { softverIzmena.OperativniSistem = "Linux"; } else { softverIzmena.OperativniSistem = "Windows i Linux"; } if (!softverIzmena.Oznaka.Equals(oznakaSoftver.Text.Trim())) { promenilaSeOznaka = true; } softverIzmena.Oznaka = oznakaSoftver.Text.Trim(); if (!softverIzmena.Naziv.Equals(nazivSoftver.Text.Trim())) { promenioSeNaziv = true; } softverIzmena.Naziv = nazivSoftver.Text.Trim(); if (!softverIzmena.Opis.Equals(opisSoftver.Text.Trim())) { promenioSeOpis = true; } softverIzmena.Opis = opisSoftver.Text.Trim(); softverIzmena.GodIzdavanja = int.Parse(godinaSoftver.Text.Trim()); softverIzmena.Cena = double.Parse(cenaSoftver.Text.Trim()); softverIzmena.Proizvodjac = proizvodjacSoftver.Text.Trim(); softverIzmena.Sajt = sajtSoftver.Text.Trim(); // azurira se oznaka u listi instaliranih softvera/neophodnih softvera u ucionici/predmetu // azurira se i ispis softvera za ucionicu/predmet StringBuilder sb = new StringBuilder(); if (promenilaSeOznaka || promenioSeNaziv || promenioSeOpis) { List <string> ucioniceZaIzmenu = new List <string>(); foreach (Ucionica u in racunarskiCentar.Ucionice.Values) { if (u.InstaliraniSoftveri.Contains(staraOznaka)) { if (promenilaSeOznaka) { // ukoliko se promenila oznaka softvera, uklanjamo staru iz odgovarajcue liste u ucionici // u kojoj je instaliran i pamtimo oznaku ucionice u koju treba da dodamo promenjenu oznaku softvera u.InstaliraniSoftveri.Remove(staraOznaka); ucioniceZaIzmenu.Add(u.Oznaka); } } } // idemo kroz sve ucionice u kojima treba azurirati stanje softvera i menjamo staru oznaku novom (izbacili smo // staru i sad ubacujemo novu), azuriramo ispis foreach (string oznaka in ucioniceZaIzmenu) { Ucionica u = racunarskiCentar.Ucionice[oznaka]; u.InstaliraniSoftveri.Add(softverIzmena.Oznaka); foreach (string s in u.InstaliraniSoftveri) { if (s.Equals(softverIzmena.Oznaka)) { if (u.InstaliraniSoftveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softverIzmena.Oznaka); sb.Append("\nNaziv: " + softverIzmena.Naziv); sb.Append("\nOpis: " + softverIzmena.Opis + "\n"); } else { Softver softver = racunarskiCentar.Softveri[s]; if (u.InstaliraniSoftveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); } } u.SoftveriLista = sb.ToString(); sb.Clear(); } List <string> predmetiZaIzmenu = new List <string>(); foreach (Predmet p in racunarskiCentar.Predmeti.Values) { if (p.Softveri.Contains(staraOznaka)) { if (promenilaSeOznaka) { // ukoliko se promenila oznaka softvera, uklanjamo staru iz odgovarajcue liste u predmetu // koji koristi ovaj softver i pamtimo oznaku predmeta u koji treba da dodamo promenjenu oznaku predmeta p.Softveri.Remove(staraOznaka); predmetiZaIzmenu.Add(p.Oznaka); } } } // idemo kroz sve predmete u kojima treba azurirati stanje softvera i menjamo staru oznaku novom (izbacili smo // staru i sad ubacujemo novu), azuriramo ispis foreach (string oznaka in predmetiZaIzmenu) { Predmet p = racunarskiCentar.Predmeti[oznaka]; p.Softveri.Add(softverIzmena.Oznaka); foreach (string s in p.Softveri) { if (s.Equals(softverIzmena.Oznaka)) { if (p.Softveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softverIzmena.Oznaka); sb.Append("\nNaziv: " + softverIzmena.Naziv); sb.Append("\nOpis: " + softverIzmena.Opis + "\n"); } else { Softver softver = racunarskiCentar.Softveri[s]; if (p.Softveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); } } p.SoftveriLista = sb.ToString(); sb.Clear(); } } if (promenilaSeOznaka) { racunarskiCentar.Softveri.Remove(staraOznaka); racunarskiCentar.Softveri.Add(softverIzmena.Oznaka, softverIzmena); } tabelaSoftvera[indeks] = softverIzmena; Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili softver!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 3) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }