public void DodajPredmet(Predmet predmet) { this.predmeti.Add(predmet.Oznaka, predmet); Console.WriteLine("Predmeta: " + predmeti.Count); }
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 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(); } }