public async Task <IActionResult> DodajKontejner([FromBody] Kontejner kontejner) { List <Brod> brodovi = await Context.Brodovi.ToListAsync(); var brod = brodovi.Find(brd => brd.TrenutnaZauzetost + kontejner.Tezina <= brd.MaxKapacitet && brd.BrojUpotrebljivihKontejnera > 0); if (brod == null) { return(BadRequest("Ne postoji brod za zadati kontejner!")); } else { kontejner.Brod = brod; Context.Kontejneri.Add(kontejner); brod.TrenutnaZauzetost += kontejner.Tezina; brod.BrojUpotrebljivihKontejnera--; if (brod.TrenutnaZauzetost == brod.MaxKapacitet) { brod.BrojUpotrebljivihKontejnera = 0; } await Context.SaveChangesAsync(); return(Ok()); } }
private void Button_Click_4(object sender, RoutedEventArgs e) { //brisanje kolone Button remove = sender as Button; Kontejner kolona = (Kontejner)remove.Tag; vm.TrenutniProjekat.TabelaProjekta.IzbrisiFazu(kolona); vm.PostaviTrenutniProjekat(); }
private void Button_Click_3(object sender, RoutedEventArgs e) { //pomeranje u levo Button split = sender as Button; Kontejner kolona = (Kontejner)split.Tag; vm.TrenutniProjekat.TabelaProjekta.Pomeri(kolona, true); vm.PostaviTrenutniProjekat(); }
public KontejnerViewModel(Kontejner a) { //lista_k = new List<Korisnik>(a.DajSveKorisnike()); lista_s = new List <Strazar>(a.DajSveStrazare()); lista_c = new List <Cuvar>(a.DajSveCuvare()); lista_m = new List <MedicinskiRadnik>(a.DajSveMedicinare()); lista_u = new List <Uposlenik>(a.DajSveUposlenike()); lista_z = new List <ProfilZatvorenika>(a.DajSveZatvorenike()); lista_kartoni = new List <ZdravstveniKarton>(a.DajSveKartone()); lista_narudzbi = new List <Narudzba>(a.DajSveNarudzbe()); }
public async Task <IActionResult> AzurirajKontejner([FromBody] Kontejner kontejner) { var stariKontejner = await Context.Kontejneri.FindAsync(kontejner.ID); if (stariKontejner != null) { List <Brod> brodovi = await Context.Brodovi.ToListAsync(); var brod = stariKontejner.Brod; brod.TrenutnaZauzetost -= stariKontejner.Tezina; if (brod.TrenutnaZauzetost + kontejner.Tezina > brod.MaxKapacitet) { brod.TrenutnaZauzetost += stariKontejner.Tezina; return(BadRequest("Izmenjeni kontejner premasuje dozvoljenu tezinu broda!")); } else { brod.TrenutnaZauzetost += kontejner.Tezina; } stariKontejner.Ime = kontejner.Ime; stariKontejner.Tezina = kontejner.Tezina; stariKontejner.Oznaka = kontejner.Oznaka; Context.Update <Kontejner>(stariKontejner); await Context.SaveChangesAsync(); return(Ok()); } else { return(BadRequest("Kontejner koji zelite da azurirate ne postoji u bazi!")); } }
//Metoda koja mapira iz Modela(Klase) u ViewModel koji se koristi na View-u public static KontejnerViewModel KontejnerMetoda(Kontejner poslan) { KontejnerViewModel viewModel = new KontejnerViewModel(poslan); return(viewModel); }
private void UserControl_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("myZad")) { //provera da li mozda ima max broja zadataka u koloni gde hocemo da ubacimo novi zadatak KontejnerZadGrid kontejner = sender as KontejnerZadGrid; //izvuce se KontejnerZadGrid u koji se stavlja Border bor1 = (Border)kontejner.Children[1]; Grid kolonaContentGrid = (Grid)bor1.Child; //izvuce se model podataka kolone zadataka Kontejner kz = (Kontejner)(((Grid)kontejner).Tag); if (((KontejnerZadataka)kz).Zadaci.Count != ((KontejnerZadataka)kz).MaxBrZadataka) { //izvuce se zadatak Zadatak z = e.Data.GetData("myZad") as Zadatak; //zakomentarisi ako necemo otkljucavanje //lock zadatka u bazi if (z.Id != 0) { try { Packages.PZadatak.Otkljucaj(z.Id); } catch (Oracle.ManagedDataAccess.Client.OracleException oraError) { try { System.Windows.MessageBox.Show(Packages.PPoruka.VratiPrevod(oraError.Number.ToString())); } catch (Oracle.ManagedDataAccess.Client.OracleException err) { System.Windows.MessageBox.Show("Error"); } } } try { // pomeranje zadatka u drugu fazu i usnimanje promene u bazi // treba sve da se stavi u if ovo ispod jer moze da dodje do slucaja da se // izbrise faza a onda neko pokusa da ubaci nesto u nju // ako se to desi treba da se obradi exception i kaze korisniku da prvo treba da refreshuje if (kz.Id != 0 && z.Id != 0) { Packages.PZadatak.IzmeniFazu(z.Id, kz.Id); } //menjaju se informacije zadataka vezane za njegovu poziciju ((KontejnerZadataka)kz).Zadaci.Add(z); ((KontejnerZadataka)kz).PreurediZadatke(); //trebalo bi da se ostali zadaci pomere za mesto unazad da i da im se izmene indeksi //remove bi trebalo to da uradi sama z.Roditelj.Zadaci.Remove(z); z.Roditelj.PreurediZadatke(); z.Roditelj = ((KontejnerZadataka)kz); //ovde funkcija koja ce ponovo da namesti indekse zadacima this.vm.PostaviTrenutniProjekat(); //!!! ISPITATI SLUCAJ UKOLIKO NEMA DOVOLJNO ROW ILI COLUMN DEFINICIJA //TAKO DA SE UBACI NOVI I TEK ONDA UBACI ZADATAK //u zavisnosti od max sirine za vertical split i obrnuto //odredjuje se indeks zadatka } catch (Oracle.ManagedDataAccess.Client.OracleException oraError) { try { System.Windows.MessageBox.Show(Packages.PPoruka.VratiPrevod(oraError.Number.ToString())); } catch (Oracle.ManagedDataAccess.Client.OracleException err) { System.Windows.MessageBox.Show("Error"); } } } } }
//mora da se prodje kroz celo stablo i da se izracuna max broj zadataka u deci i na osnovu toga odredi velicina svake kolone public static void Nacrtaj(Kontejner kolona, IKontejnerGrid parentGrid, ApplicationViewModel vm) { bool isKontejnerFaza = false; IKontejnerGrid kolonaGrid; Border bor1; Border bor2; if (kolona.GetType() == typeof(KontejnerFaza)) { kolonaGrid = new KontejnerGrid(vm); bor1 = (Border)((Grid)kolonaGrid).Children[1]; } else { kolonaGrid = new KontejnerZadGrid(vm); bor1 = (Border)((KontejnerZadGrid)kolonaGrid).Children[1]; } if (parentGrid.GetType() == typeof(KontejnerGrid)) { bor2 = (Border)((KontejnerGrid)parentGrid).Children[1]; isKontejnerFaza = true; } else { bor2 = (Border)((KontejnerZadGrid)parentGrid).Children[1]; isKontejnerFaza = false; } //stavlja se pokazivac na model podataka kolonu koja stoji iza kontrole ((Grid)kolonaGrid).Tag = kolona; //vvranic - treba da se testira da li ovo radi ((Grid)kolonaGrid).DataContext = vm.TrenutniProjekat; Grid kolonaContentGrid = (Grid)bor1.Child; Grid parentContentGrid = (Grid)bor2.Child; ((Grid)kolonaGrid).HorizontalAlignment = System.Windows.HorizontalAlignment.Center; IEnumerable <Label> tekst = FindVisualChildren <Label>((Grid)kolonaGrid); tekst.ElementAt(0).Content = kolona.Ime; int index = 0; //trazi index u listi dece na kom se nalazi trenutna kolona if (kolona.Roditelj != null) { // 10.06.2018. mstankovic //index = ((KontejnerFaza)kolona.Roditelj).Deca.IndexOf(kolona); index = (kolona.Roditelj).Deca.IndexOf(kolona); if (kolona.Roditelj.IsVerticalSplit) { parentContentGrid.Children.Add((Grid)kolonaGrid); ((Grid)kolonaGrid).SetValue(Grid.ColumnProperty, index); } else //deli se horizontalno { parentContentGrid.Children.Add((Grid)kolonaGrid); ((Grid)kolonaGrid).SetValue(Grid.RowProperty, index); } } //najpre se ispita da li trenutna kolona sadrzi kolone ili zadatke //jer se crtaju razlicito if (kolona.GetType() == typeof(KontejnerFaza)) { //ako se deli vertikalno dodaju se definicije za kolone u zavisnosti od toga koliko ima dece if (((KontejnerFaza)kolona).IsVerticalSplit == true) { for (int i = 0; i < ((KontejnerFaza)kolona).Deca.Count; i++) { ColumnDefinition c = new ColumnDefinition(); c.Width = System.Windows.GridLength.Auto; kolonaContentGrid.ColumnDefinitions.Add(c); } } else { //ako se deli vertikalno dodaju se definicije za vrste u zavisnosti od toga koliko ima dece for (int i = 0; i < ((KontejnerFaza)kolona).Deca.Count; i++) { RowDefinition r = new RowDefinition(); r.Height = System.Windows.GridLength.Auto; kolonaContentGrid.RowDefinitions.Add(r); } } foreach (Kontejner d in ((KontejnerFaza)kolona).Deca) { //za svaku podfazu odradi ovo Nacrtaj(d, kolonaGrid, vm); } } else //ako je KontejnerZadataka { // dodavanje Column definicija for (int i = 0; i < ((KontejnerZadataka)kolona).SirinaPoZadacima; i++) { ColumnDefinition c = new ColumnDefinition(); c.Width = GridLength.Auto; kolonaContentGrid.ColumnDefinitions.Add(c); } // dodavanje Row definicija for (int i = 0; i < ((KontejnerZadataka)kolona).VisinaPoZadacima; i++) { RowDefinition r = new RowDefinition(); r.Height = GridLength.Auto; kolonaContentGrid.RowDefinitions.Add(r); } // smestanje zadataka u matricu (tj. u grid) for (int i = 0; i < ((KontejnerZadataka)kolona).Zadaci.Count; i++) { ZadatakGrid zad = new ZadatakGrid(vm); //stavlja se data context kontroli zad.DataContext = ((KontejnerZadataka)kolona).Zadaci[i]; kolonaContentGrid.Children.Add(zad); zad.SetValue(Grid.RowProperty, ((KontejnerZadataka)kolona).Zadaci[i].Row); zad.SetValue(Grid.ColumnProperty, ((KontejnerZadataka)kolona).Zadaci[i].Column); } } }
/// <summary> /// Snimanje projekta u bazu nakon kreiranja /// </summary> /// <param name="p">Projekat koji se snima</param> /// mozda da stavim da se u p.id ucita id mada mislim da nije potrebno /// jer svejedno osvezavamo listu projekata nakon kreiranja public static void KreirajProjekat(Projekat p) { try { //snima se projekat u bazu //kad se pozove funkcija da se doda projekat treba da vrati id p.Id = PProjekat.DodajProjekat(p.Ime, p.Opis); //dodavanje kreatora PRadiNa.DodajVezu(Korisnik.KorisnickoIme, p.Id, "KREATOR"); Korisnik.Projekti = PProjekat.VratiSveProjekte(Korisnik.KorisnickoIme); // osvezava listu projekata korisnika //dodavanje radnika foreach (RadnikNaProjektu r in p.RadniciNaProjektu) { PRadiNa.DodajVezu(r.Ime, p.Id, r.Uloga); } Queue <Kontejner> queue = new Queue <Kontejner>(); foreach (Kontejner k in p.TabelaProjekta.RootKolona.Deca) { queue.Enqueue(k); } // Ostali elementi se ulancavaju po ugledu na algoritam obilaska stabla po sirini (Breadth First) while (queue.Count > 0) { Kontejner k = queue.Dequeue(); // Za svaki kontejner faza je potrebno da se pronadju njegova deca // u ostatku liste, da se ulancaju i ubace u red if (k.GetType() == typeof(KontejnerFaza)) { if (k.Roditelj == p.TabelaProjekta.RootKolona) { //ako je jedna od prvih kolona projekta onda nema roditelja(tj. roditelj joj je sama tabela) tako da se ubacuje za id nula k.Id = PFaza.Dodaj_FK(k.Ime, k.Opis, ((KontejnerFaza)k).IsVerticalSplit, null, null, null, p.Id); } else { //ubacuje se id roditelja tako da on mora biti procitan u prethodno k.Id = PFaza.Dodaj_FK(k.Ime, k.Opis, ((KontejnerFaza)k).IsVerticalSplit, null, null, k.Roditelj.Id, p.Id); } foreach (Kontejner dete in ((KontejnerFaza)k).Deca) { queue.Enqueue(dete); } } else if (k.GetType() == typeof(KontejnerZadataka)) { if (k.Roditelj == p.TabelaProjekta.RootKolona) { k.Id = PFaza.Dodaj_FZ(k.Ime, k.Opis, ((KontejnerZadataka)k).MaxBrZadataka, null, null, null, ((KontejnerZadataka)k).SirinaPoZadacima, ((KontejnerZadataka)k).VisinaPoZadacima, p.Id); } else { k.Id = PFaza.Dodaj_FZ(k.Ime, k.Opis, ((KontejnerZadataka)k).MaxBrZadataka, null, null, k.Roditelj.Id, ((KontejnerZadataka)k).SirinaPoZadacima, ((KontejnerZadataka)k).VisinaPoZadacima, p.Id); } foreach (Zadatak z in ((KontejnerZadataka)k).Zadaci) { //treba i da se dodaju svi komentari i checkpointi zajedno sa zadatkom z.Id = PZadatak.Dodaj(z.Ime, z.Opis, z.PocetakIzrade, z.KrajIzrade, z.Tip, k.Id); foreach (Komentar kom in z.Komentari) { kom.Id = PZadatak.DodajKomentar(kom.Tekst, z.Id); } foreach (KontrolnaTacka kt in z.KontrolneTacke) { kt.Id = PZadatak.DodajKontrolnuTacku(kt.Naziv, z.Id); } } } } } catch (OracleException oraError) { try { System.Windows.MessageBox.Show(PPoruka.VratiPrevod(oraError.Number.ToString())); } catch (OracleException err) { System.Windows.MessageBox.Show("Greska pri kreiranju projekta"); } } }