Exemplo n.º 1
0
        public int?Insert(string nazivPredmet, string kraticaPredmet, string opisPredmet, string IDUstanova, string IDKategorija, string cijenaPredmet)
        {
            int?idPredmet = null;

            Debug.Write(nazivPredmet);
            using (ppij_databaseEntities data = new ppij_databaseEntities()) {
                try {
                    Osoba   osoba   = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
                    Predmet predmet = new Predmet()
                    {
                        ID_kategorija   = int.Parse(IDKategorija),
                        kratica_predmet = kraticaPredmet,
                        naziv_predmet   = nazivPredmet,
                        ID_ustanova     = int.Parse(IDUstanova)
                    };
                    data.Predmet.Add(predmet);
                    osoba_predmet op = new osoba_predmet()
                    {
                        cijena     = decimal.Parse(cijenaPredmet, CultureInfo.InvariantCulture),
                        ID_osoba   = osoba.ID_osoba,
                        ID_predmet = predmet.ID_predmet
                    };
                    data.osoba_predmet.Add(op);
                    data.SaveChanges();
                    idPredmet = op.ID_predmet;
                    Debug.Write(idPredmet);
                } catch (Exception) {
                    return(null);
                }
            }
            return(idPredmet);
        }
        public ActionResult Ustanova(UstanovaModel model)
        {
            List <OpisUstanove> opisi = new List <OpisUstanove>();

            using (var db = new ppij_databaseEntities())
            {
                List <Ustanova> ustanove = db.Ustanova.ToList();
                foreach (Ustanova ustanova in ustanove)
                {
                    OpisUstanove opis = new OpisUstanove();
                    opis.Ustanova        = ustanova;
                    opis.BrojInstrukcija = 0;
                    int ID_kategorija = Int32.Parse((string)RouteData.Values["kategorija_id"]);
                    int ID_ustanova   = ustanova.ID_ustanova;
                    ICollection <Predmet> predmeti = db.Predmet.Where(p => p.ID_kategorija == ID_kategorija &&
                                                                      p.ID_ustanova == ID_ustanova).ToList();
                    foreach (Predmet predmet in predmeti)
                    {
                        foreach (osoba_predmet instrukcija in predmet.osoba_predmet)
                        {
                            opis.BrojInstrukcija++;
                        }
                    }
                    opisi.Add(opis);
                }
            }
            model.Opisi = opisi;
            return(View(model));
        }
        public ActionResult Predmet(PredmetModel model)
        {
            List <OpisPredmeta> opisi = new List <OpisPredmeta>();

            using (var db = new ppij_databaseEntities())
            {
                int ID_kategorija = Int32.Parse((string)RouteData.Values["kategorija_id"]);
                int ID_ustanova   = Int32.Parse((string)RouteData.Values["ustanova_id"]);
                ICollection <Predmet> predmeti = db.Predmet.Where(p => p.ID_kategorija == ID_kategorija)
                                                 .Where(p => p.ID_ustanova == ID_ustanova)
                                                 .ToList();
                foreach (Predmet predmet in predmeti)
                {
                    OpisPredmeta opis = new OpisPredmeta();
                    opis.Predmet         = predmet;
                    opis.BrojInstrukcija = predmet.osoba_predmet.Count();
                    opisi.Add(opis);
                }
            }
            if (model.Trazilica != null)
            {
                opisi = opisi.Where(p => p.Predmet.naziv_predmet.ToUpper().Contains(model.Trazilica.Trim().ToUpper())).ToList();
            }
            opisi       = opisi.OrderByDescending(o => o.BrojInstrukcija).ToList();
            model.Opisi = opisi;

            return(View(model));
        }
        public ActionResult Kategorija(KategorijaModel model)
        {
            List <OpisKategorije> opisi = new List <OpisKategorije>();

            using (var db = new ppij_databaseEntities())
            {
                ICollection <Kategorija> kategorije = db.Kategorija.ToList();
                foreach (Kategorija kategorija in kategorije)
                {
                    OpisKategorije opis = new OpisKategorije();
                    opis.Kategorija      = kategorija;
                    opis.BrojInstrukcija = 0;
                    ICollection <Predmet> predmeti = db.Predmet.Where(p => p.ID_kategorija == kategorija.ID_kategorija).ToList();
                    foreach (Predmet predmet in predmeti)
                    {
                        foreach (osoba_predmet instrukcija in predmet.osoba_predmet)
                        {
                            opis.BrojInstrukcija++;
                        }
                    }
                    opisi.Add(opis);
                }
            }
            if (model.Trazilica != null)
            {
                opisi = opisi.Where(k => k.Kategorija.naziv_kategorija.ToUpper().Contains(model.Trazilica.Trim().ToUpper())).ToList();
            }
            opisi       = opisi.OrderByDescending(o => o.BrojInstrukcija).ToList();
            model.Opisi = opisi;

            return(View(model));
        }
Exemplo n.º 5
0
        public ActionResult Index()
        {
            List <Osoba> listaOsoba = new List <Osoba>();

            using (var database = new ppij_databaseEntities())
            {
                var query = database.Osoba;
                listaOsoba.AddRange(query.ToList <Osoba>());
                ViewBag.Title = "naslov testa";
                ViewBag.lista = listaOsoba;

                /*Termin t;
                 * for (int dan = 1; dan <= 7; dan++)
                 * {
                 *  for (int sat = 0; sat <= 23; sat++)
                 *  {
                 *      t = new Termin();
                 *      t.dan_termin = dan;
                 *      t.period_termin = sat;
                 *      t.ID_termin = 100 * dan + sat;
                 *      database.Termin.Add(t);
                 *  }
                 * }*/


                //database.SaveChanges();
            }
            return(View());
        }
Exemplo n.º 6
0
 public ActionResult DeleteConfirmed(int id)
 {
     try {
         ppij_databaseEntities data = new ppij_databaseEntities();
         Osoba         osoba        = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
         osoba_predmet relacija     = data.osoba_predmet.Find(osoba.ID_osoba, id);
         data.osoba_predmet.Remove(relacija);
         data.SaveChanges();
     } catch (Exception) {
         return(null);
     }
     return(RedirectToAction("Index"));
 }
Exemplo n.º 7
0
 public String notification()
 {
     using (ppij_databaseEntities data = new ppij_databaseEntities()) {
         Osoba trenutna         = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
         int   notificationsIns = 0;
         if (trenutna.razina_prava != 2)
         {
             notificationsIns = trenutna.dogovor_termin.Where(d => (d.dogovor_status == 2 || d.dogovor_status == 10) && d.datum_dogovor > DateTime.Now.AddDays(-10)).Count();
         }
         int notificationsKlij = trenutna.dogovor_termin1.Where(d => (d.dogovor_status == 3 || d.dogovor_status == 11) && d.datum_dogovor > DateTime.Now.AddDays(-10)).Count();
         return("{\"klijent\":" + notificationsKlij + ",\"instruktor\":" + notificationsIns + "}");
     }
 }
Exemplo n.º 8
0
 public bool?UpdatePrice(string IDPredmet, string cijenaPredmet)
 {
     using (ppij_databaseEntities data = new ppij_databaseEntities()) {
         try {
             Osoba         osoba = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
             osoba_predmet op    = data.osoba_predmet.Find(osoba.ID_osoba, int.Parse(IDPredmet));
             op.cijena = decimal.Parse(cijenaPredmet, CultureInfo.InvariantCulture);
             data.SaveChanges();
         } catch (Exception) {
             return(null);
         }
     }
     return(true);
 }
Exemplo n.º 9
0
 public Boolean JeIspravna(string korisnicko_ime_p, string lozinka_p)
 {
     using (ppij_databaseEntities data = new ppij_databaseEntities())
     {
         var v = data.Osoba.Where(i => i.korisnicko_ime_osoba == korisnicko_ime_p);
         if (v != null)
         {
             if (String.Compare(((Osoba)v).lozinka, lozinka_p) == 0)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Exemplo n.º 10
0
        public ActionResult Potvrdi(Models.OsobaLogin o)
        {
            /*var a = HttpContext.GetOwinContext().Authentication;
             * var um = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
             *
             * ApplicationUser user = um.Find(o.korisnicko_ime, o.lozinka);
             * if (user != null)
             * {
             *  var ident = um.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
             *  Authentication.SignIn(new AuthenticationProperties
             *  {
             *      isPersisitent = false
             *  }, ident);
             * }*/

            using (ppij_databaseEntities database = new ppij_databaseEntities()){
                var osoba = database.Osoba.Where(i => i.korisnicko_ime_osoba == o.korisnicko_ime).FirstOrDefault();
                if (ModelState.IsValid)
                {
                    if (osoba != null)
                    {
                        {
                            if (Crypto.VerifyHashedPassword(osoba.lozinka, o.lozinka + osoba.salt) == true)//String.Compare(o.lozinka, osoba.lozinka) == 0
                            {
                                Debug.WriteLine("uspjesna prijava");
                                FormsAuthentication.SetAuthCookie(o.korisnicko_ime, false);
                                return(RedirectToAction("Index", "Profil"));
                            }
                            else
                            {
                                Debug.WriteLine("kriva lozinka");
                                ModelState.AddModelError("error_loz", "Pogrešna Lozinka");
                            }
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("error_kor_ime", "Nepostojeće korisničko ime");
                    }
                }
                else
                {
                    Debug.WriteLine("model not valid");
                }
            }
            return(View());
        }
Exemplo n.º 11
0
        public ActionResult Delete(int?id)
        {
            ppij_databaseEntities data = new ppij_databaseEntities();
            Osoba osoba = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            osoba_predmet relacija = data.osoba_predmet.Find(osoba.ID_osoba, id);

            if (relacija == null)
            {
                return(HttpNotFound());
            }
            return(View(relacija));
        }
Exemplo n.º 12
0
        public string MapData(int idOsoba)
        {
            using (ppij_databaseEntities data = new ppij_databaseEntities()) {
                try {
                    List <Lokacija> lokacije = new List <Lokacija>();
                    lokacije.AddRange(data.Osoba.Find(idOsoba).Lokacija);

                    System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
                    customCulture.NumberFormat.NumberDecimalSeparator    = ".";
                    System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;

                    Boolean prvi = true;
                    String  json = "{\"lokacije\":[";
                    foreach (Lokacija lok in lokacije)
                    {
                        if (prvi == true)
                        {
                            prvi = false;
                        }
                        else
                        {
                            json += ",";
                        }
                        json += "{";
                        json += "\"lat\":" + lok.Geo_sirina + ",";
                        json += "\"lon\":" + lok.Geo_duzina + ",";
                        json += "\"opis\":\"" + lok.opis + "\",";
                        json += "\"id\":" + lok.Id;
                        json += "}";
                    }
                    json += "]}";
                    return(json);
                } catch (Exception) {
                    return(null);
                }
            }

            return(null);
        }
Exemplo n.º 13
0
        public string InsertExisting(string IDPredmet, string cijenaPredmet)
        {
            Predmet p;

            using (ppij_databaseEntities data = new ppij_databaseEntities()) {
                try {
                    p = data.Predmet.Find(int.Parse(IDPredmet));
                    Osoba         osoba = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
                    osoba_predmet op    = new osoba_predmet()
                    {
                        cijena     = decimal.Parse(cijenaPredmet, CultureInfo.InvariantCulture),
                        ID_osoba   = osoba.ID_osoba,
                        ID_predmet = int.Parse(IDPredmet)
                    };
                    data.osoba_predmet.Add(op);
                    data.SaveChanges();
                } catch (System.Data.Entity.Infrastructure.DbUpdateException) {
                    return("-1"); //duplicate status code
                } catch (Exception) {
                    return(null);
                }
            }
            return(p.naziv_predmet);
        }
Exemplo n.º 14
0
        public ActionResult Registracija(Models.RegisterBindingModel model)
        {
            if (ModelState.IsValid)
            {
                //Debug.WriteLine(model.ime + " " + model.prezime + " " + model.Password + " " + model.Email);

                using (ppij_databaseEntities data = new ppij_databaseEntities())
                {
                    if (data.Osoba.Where(o => o.korisnicko_ime_osoba == model.korisnicko_ime).Count() != 0)
                    {
                        ModelState.AddModelError("kor_ime_uniq", "Odabrano korisničko ime već postoji");
                        return(View());
                    }

                    string salt  = Crypto.GenerateSalt(12);
                    Osoba  osoba = new Osoba();
                    osoba.ime_osoba            = model.ime;
                    osoba.prezime_osoba        = model.prezime;
                    osoba.korisnicko_ime_osoba = model.korisnicko_ime;
                    osoba.lozinka = Crypto.HashPassword(model.Password + salt);
                    osoba.salt    = salt;

                    /*if (model.jeInstruktor == true)
                     * {
                     *  osoba.razina_prava = 1;
                     * }
                     * else
                     * {*/
                    osoba.razina_prava = 2;
                    /*}*/
                    osoba.email_osoba     = model.Email;
                    osoba.ID_osoba        = data.Osoba.OrderByDescending(o => o.ID_osoba).FirstOrDefault().ID_osoba + 1;
                    osoba.dogovor_termin  = null;
                    osoba.dogovor_termin1 = null;
                    osoba.osoba_predmet   = null;
                    osoba.Termin          = null;
                    data.Osoba.Add(osoba);
                    //Debug.WriteLine(osoba.ID_osoba + " " + osoba.ime_osoba + " " + osoba.prezime_osoba + " " + osoba.korisnicko_ime_osoba + " " + osoba.lozinka);
                    try
                    {
                        data.SaveChanges();
                    }
                    catch (SqlException sqle)
                    {
                        foreach (SqlErrorCollection errors in sqle.Errors)
                        {
                            Debug.WriteLine(errors.ToString());
                        }
                    }
                    catch (DbEntityValidationException deve)
                    {
                        foreach (var validationErrors in deve.EntityValidationErrors)
                        {
                            foreach (var error in validationErrors.ValidationErrors)
                            {
                                Trace.TraceInformation("Property: {0} Error: {1}", error.PropertyName, error.ErrorMessage);
                            }
                        }
                    }
                    FormsAuthentication.SetAuthCookie(osoba.korisnicko_ime_osoba, false);
                    return(RedirectToAction("Index", "Home"));
                }
            }
            return(View());
        }
Exemplo n.º 15
0
        public ActionResult Index()
        {
            using (ppij_databaseEntities data = new ppij_databaseEntities()) {
                ViewBag.Title = User.Identity.Name;
                Osoba osoba = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
                ViewBag.razinaPrava = osoba.razina_prava;
                //Debug.WriteLine("razina prava" + osoba.razina_prava);
                PostavkeModel model = new PostavkeModel();
                model.changePassword          = new ChangePasswordBindingModel();
                model.ostalePostavke          = new OstalePostavke();
                model.mojeVlastiteInstrukcije = new MojeInstrukcije();

                var queryPredmeti = from predmet in data.Predmet
                                    join osobaPredmet in data.osoba_predmet on predmet.ID_predmet equals osobaPredmet.ID_predmet
                                    where osobaPredmet.ID_osoba == osoba.ID_osoba
                                    select predmet;
                ViewBag.predmeti = queryPredmeti.ToList <Predmet>();

                model.mojeVlastiteInstrukcije.mojiTermini = osoba.Termin.Select(t => t.ID_termin).ToList().ConvertAll <string>(x => x.ToString());
                model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_instruktor = new List <dogovor_term_osoba>();
                model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_klijent    = new List <dogovor_term_osoba>();
                model.mojeVlastiteInstrukcije.mojiPredmeti  = new List <OpisanPredmet>();
                model.mojeVlastiteInstrukcije.sveKategorije = new List <Kategorija>();
                model.mojeVlastiteInstrukcije.sveUstanove   = new List <Ustanova>();
                model.mojeVlastiteInstrukcije.sviPredmeti   = new List <Predmet>();


                foreach (dogovor_termin dogovor in osoba.dogovor_termin.ToList())
                {
                    if (dogovor.dogovor_status != 20 && dogovor.dogovor_status != 0 &&
                        dogovor.datum_dogovor.Value > DateTime.Now.AddDays(-10) &&
                        dogovor.dogovor_status != 3)
                    {
                        //dogovor.datum_dogovor = dogovor.datum_dogovor.Value.AddHours((int)dogovor.Termin.FirstOrDefault().period_termin);
                        //Debug.WriteLine(dogovor.datum_dogovor.Value + " " + (int)dogovor.Termin.FirstOrDefault().period_termin);
                        model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_instruktor.Add(new dogovor_term_osoba()
                        {
                            termin   = dogovor,
                            lokacija = dogovor.Lokacija,
                            ime      = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_klijent).FirstOrDefault().ime_osoba,
                            prezime  = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_klijent).FirstOrDefault().prezime_osoba,
                            predmet  = data.Predmet.Where(k => k.ID_predmet == dogovor.ID_predmet).FirstOrDefault().naziv_predmet,
                            odustani = false,
                            seen     = false
                        });
                    }
                }
                foreach (dogovor_termin dogovor in osoba.dogovor_termin1.ToList())
                {
                    if (dogovor.dogovor_status != 0 && dogovor.datum_dogovor.Value > DateTime.Now.AddDays(-10) && dogovor.dogovor_status != 2 && dogovor.dogovor_status != 20)
                    {
                        //dogovor.datum_dogovor = dogovor.datum_dogovor.Value.AddHours((int)dogovor.Termin.FirstOrDefault().period_termin);
                        //Debug.WriteLine(dogovor.datum_dogovor.Value + " " + (int)dogovor.Termin.FirstOrDefault().period_termin);
                        model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_klijent.Add(new dogovor_term_osoba()
                        {
                            termin   = dogovor,
                            lokacija = dogovor.Lokacija,
                            ime      = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_instruktor).FirstOrDefault().ime_osoba,
                            prezime  = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_instruktor).FirstOrDefault().prezime_osoba,
                            predmet  = data.Predmet.Where(k => k.ID_predmet == dogovor.ID_predmet).FirstOrDefault().naziv_predmet,
                            odustani = false,
                            seen     = false
                        });
                    }
                }


                #region populate OpisanPredmet
                var detaljiPredmetOsoba = from p in data.Predmet
                                          join op in data.osoba_predmet on p.ID_predmet equals op.ID_predmet
                                          join u in data.Ustanova on p.ID_ustanova equals u.ID_ustanova
                                          join k in data.Kategorija on p.ID_kategorija equals k.ID_kategorija
                                          where osoba.ID_osoba == op.ID_osoba
                                          select new { p.ID_predmet, p.naziv_predmet, p.kratica_predmet, op.cijena, u.ID_ustanova, k.ID_kategorija };

                foreach (var row in detaljiPredmetOsoba)
                {
                    Ustanova   ust = data.Ustanova.Find(row.ID_ustanova);
                    Kategorija kat = data.Kategorija.Find(row.ID_kategorija);
                    model.mojeVlastiteInstrukcije.mojiPredmeti.Add(new OpisanPredmet()
                    {
                        IDpredmet      = row.ID_predmet,
                        nazivPredmet   = row.naziv_predmet,
                        kraticaPredmet = row.kratica_predmet,
                        cijenaPredmet  = row.cijena,
                        IDkategorija   = row.ID_kategorija,
                        IDustanova     = row.ID_ustanova,
                        ustanova       = ust,
                        kategorija     = kat
                    });
                }
                #endregion

                #region populate Ustanova Kategorija

                var ustanovaQuery = from u in data.Ustanova
                                    select u;
                var kategorijaQuery = from k in data.Kategorija
                                      select k;
                model.mojeVlastiteInstrukcije.sveUstanove.AddRange(ustanovaQuery.ToList());
                model.mojeVlastiteInstrukcije.sveKategorije.AddRange(kategorijaQuery.ToList());
                #endregion

                #region populate Predmeti
                var predmetiQuery = from p in data.Predmet
                                    select p;

                model.mojeVlastiteInstrukcije.sviPredmeti.AddRange(predmetiQuery.ToList());
                #endregion



                model.mojeVlastiteInstrukcije.popis_kategorija = new List <odabranaKategorija>();
                foreach (Kategorija kateg in data.Kategorija)
                {
                    odabranaKategorija odabrananadkat = new odabranaKategorija();
                    odabrananadkat.mojiPredmeti = new List <odabranPredmet>();
                    foreach (Predmet pred in data.Predmet.Where(k => k.ID_kategorija == kateg.ID_kategorija))
                    {
                        odabranPredmet item = new odabranPredmet();
                        item.predmet = pred;
                        if (osoba.osoba_predmet.Where(k => k.ID_predmet == pred.ID_kategorija).Count() == 1)
                        {
                            item.odabran = true;
                        }
                        else
                        {
                            item.odabran = false;
                        }
                        odabrananadkat.mojiPredmeti.Add(item);
                    }
                    odabrananadkat.kategorija_ime = kateg.naziv_kategorija;
                    model.mojeVlastiteInstrukcije.popis_kategorija.Add(odabrananadkat);
                }
                model.mojeVlastiteInstrukcije.MojeLokacijeJson = convertLokacije(data.Lokacija.Where(l => l.Osoba.ID_osoba == osoba.ID_osoba).ToList());
                model.trenutniTab = "11";
                if (osoba.razina_prava == 1)
                {
                    model.ostalePostavke.instruktor = true;
                }
                else
                {
                    model.ostalePostavke.instruktor = false;
                }
                return(View(model));
            }
        }
Exemplo n.º 16
0
        public ActionResult Index(Models.PostavkeModel model)
        {
            using (ppij_databaseEntities data = new ppij_databaseEntities()) {
                Osoba osoba = data.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
                //Debug.WriteLine("tab: " + model.trenutniTab);
                if (ModelState.IsValid)
                {
                    String trenutniTab = model.trenutniTab;


                    if (trenutniTab.Equals("11") || trenutniTab.Equals("12"))
                    {
                        if (model.mojeVlastiteInstrukcije != null && model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_klijent != null)
                        {
                            foreach (dogovor_term_osoba dto in model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_klijent)
                            {
                                dogovor_termin dogovor = data.dogovor_termin.Where(d => d.ID_dogovor_termin == dto.termin.ID_dogovor_termin).FirstOrDefault();

                                if (dto.seen == true)
                                {
                                    if (dogovor.dogovor_status == 3)
                                    {
                                        dogovor.dogovor_status = 0;
                                    }
                                    else if (dogovor.dogovor_status == 11)
                                    {
                                        dogovor.dogovor_status = 1;
                                    }
                                }
                                if (dto.odustani == true)
                                {
                                    if (dogovor.dogovor_status == 10)
                                    {
                                        dogovor.dogovor_status = 20;
                                    }
                                    else if (dogovor.dogovor_status == 11 || dogovor.dogovor_status == 1)
                                    {
                                        dogovor.dogovor_status = 2;
                                    }
                                    //Debug.WriteLine("odustano od dogovora: " + dogovor.ID_dogovor_termin);
                                }
                                if (dogovor.dogovor_ocijena == null || dto.termin.dogovor_ocijena != dogovor.dogovor_ocijena)
                                {
                                    dogovor.dogovor_ocijena = dto.termin.dogovor_ocijena;
                                }
                                data.SaveChanges();
                            }
                        }
                        if (model.mojeVlastiteInstrukcije != null && model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_instruktor != null)
                        {
                            foreach (dogovor_term_osoba dto in model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_instruktor)
                            {
                                dogovor_termin dogovor = data.dogovor_termin.Where(d => d.ID_dogovor_termin == dto.termin.ID_dogovor_termin).FirstOrDefault();
                                if (dto.seen == true)
                                {
                                    if (dogovor.dogovor_status == 2)
                                    {
                                        dogovor.dogovor_status = 0;
                                    }
                                    else if (dogovor.dogovor_status == 10)
                                    {
                                        dogovor.dogovor_status = 11;
                                    }
                                }
                                if (dto.odustani == true)
                                {
                                    if (dogovor.dogovor_status == 1 || dogovor.dogovor_status == 11 || dogovor.dogovor_status == 10)
                                    {
                                        dogovor.dogovor_status = 3;
                                    }

                                    //Debug.WriteLine("odustano od dogovora: " + dogovor.ID_dogovor_termin);
                                }
                            }
                        }
                        data.SaveChanges();
                    }
                    else if (trenutniTab.Equals("21") || trenutniTab.Equals("22"))
                    {
                        /*foreach (String t in model.mojeVlastiteInstrukcije.mojiTermini)
                         * {
                         *  Debug.WriteLine("post: " + t);
                         * }*/
                        model.mojeVlastiteInstrukcije.mojiTermini = model.mojeVlastiteInstrukcije.mojiTermini.FirstOrDefault().Split(',').ToList();
                        List <Termin> toBeDel = new List <Termin>();
                        foreach (Termin s in osoba.Termin) //provjera starih termina - da li su još aktualni
                        {
                            //Debug.WriteLine("check to be deleted: " + s.ID_termin);
                            if (model.mojeVlastiteInstrukcije.mojiTermini.Contains(s.ID_termin.ToString()) == false)
                            {
                                //Debug.WriteLine("to be deleted: " + s.ID_termin);
                                toBeDel.Add(s);
                            }
                        }
                        foreach (Termin t in toBeDel)
                        {
                            osoba.Termin.Remove(t);
                        }
                        data.SaveChanges();
                        foreach (String s in model.mojeVlastiteInstrukcije.mojiTermini) //provjera novih termina - koje treba dodati u bazu
                        {
                            //Debug.WriteLine("check to be added: " + s);
                            if (s.Length > 0)
                            {
                                int id = Int32.Parse(s);
                                if (osoba.Termin.Where(st => st.ID_termin == id).Count() == 0)
                                {
                                    //Debug.WriteLine("to be added: " + s);
                                    Termin ter = data.Termin.Where(t => t.ID_termin == id).FirstOrDefault();
                                    osoba.Termin.Add(ter);
                                }
                            }
                        }
                    }
                    else if (trenutniTab.Equals("4"))
                    {
                        if (Crypto.VerifyHashedPassword(osoba.lozinka, model.changePassword.OldPassword + osoba.salt) == false)
                        {
                            ModelState.AddModelError("error_old_password", "pogrešna lozinka");
                            return(View());
                        }
                        string salt = Crypto.GenerateSalt(12);
                        osoba.lozinka = Crypto.HashPassword(model.changePassword.NewPassword + salt);
                        osoba.salt    = salt;
                    }
                    else if (trenutniTab.Equals("3"))
                    {
                        if (osoba.razina_prava != 0)
                        {
                            if (model.ostalePostavke.instruktor == true)
                            {
                                osoba.razina_prava = 1;
                            }
                            else
                            {
                                osoba.razina_prava = 2;
                            }
                        }
                        if (model.mojeVlastiteInstrukcije.MojeLokacijeJson != null)
                        {
                            List <lokacijeJsonObject> lokacijeObj = JsonConvert.DeserializeObject <List <lokacijeJsonObject> >(model.mojeVlastiteInstrukcije.MojeLokacijeJson);
                            if (lokacijeObj != null)
                            {
                                List <Lokacija> lokacije = new List <Lokacija>();
                                foreach (lokacijeJsonObject objekt in lokacijeObj)
                                {
                                    Lokacija lok = new Lokacija()
                                    {
                                        Geo_sirina    = objekt.lat,
                                        Geo_duzina    = objekt.lon,
                                        opis          = objekt.opis,
                                        ID_instruktor = osoba.ID_osoba,
                                        Osoba         = osoba
                                    };
                                    lokacije.Add(lok);
                                }

                                List <Lokacija> toBeDel = new List <Lokacija>();
                                foreach (Lokacija lok in osoba.Lokacija)
                                {
                                    if (lokacije.Where(l => l.Geo_duzina == lok.Geo_duzina && l.Geo_sirina == lok.Geo_sirina).Count() < 1)
                                    {
                                        toBeDel.Add(lok);
                                    }
                                }
                                foreach (Lokacija t in toBeDel)
                                {
                                    osoba.Lokacija.Remove(t);
                                }
                                data.SaveChanges();
                                foreach (Lokacija nova in lokacije)
                                {
                                    Lokacija istaIzBaze;
                                    if (osoba.Lokacija.Where(l => l.Geo_duzina == nova.Geo_duzina && l.Geo_sirina == nova.Geo_sirina).Count() >= 1)
                                    {
                                        istaIzBaze = osoba.Lokacija.Where(l => l.Geo_duzina == nova.Geo_duzina && l.Geo_sirina == nova.Geo_sirina).FirstOrDefault();
                                    }
                                    else
                                    {
                                        istaIzBaze = null;
                                    }
                                    if (istaIzBaze == null)
                                    {
                                        nova.Id = data.Lokacija.Max(l => l.Id) + 1;
                                        osoba.Lokacija.Add(nova);
                                        data.SaveChanges();
                                    }
                                    else if (istaIzBaze.opis.Equals(nova.opis) == false)
                                    {
                                        istaIzBaze.opis = nova.opis;
                                        data.SaveChanges();
                                    }
                                }
                            }
                        }
                    }
                    data.SaveChanges();
                }

                model.ostalePostavke          = new OstalePostavke();
                model.mojeVlastiteInstrukcije = new MojeInstrukcije();
                ViewBag.razinaPrava           = osoba.razina_prava;
                var queryPredmeti = from predmet in data.Predmet
                                    join osobaPredmet in data.osoba_predmet on predmet.ID_predmet equals osobaPredmet.ID_predmet
                                    where osobaPredmet.ID_osoba == osoba.ID_osoba
                                    select predmet;
                ViewBag.predmet = queryPredmeti.ToList <Predmet>();

                model.mojeVlastiteInstrukcije.mojiTermini = osoba.Termin.Select(t => t.ID_termin).ToList().ConvertAll <string>(x => x.ToString());
                model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_instruktor = new List <dogovor_term_osoba>();
                model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_klijent    = new List <dogovor_term_osoba>();
                model.mojeVlastiteInstrukcije.mojiPredmeti  = new List <OpisanPredmet>();
                model.mojeVlastiteInstrukcije.sveKategorije = new List <Kategorija>();
                model.mojeVlastiteInstrukcije.sveUstanove   = new List <Ustanova>();
                model.mojeVlastiteInstrukcije.sviPredmeti   = new List <Predmet>();



                foreach (dogovor_termin dogovor in osoba.dogovor_termin.ToList())
                {
                    if (dogovor.dogovor_status != 20 && dogovor.dogovor_status != 0 &&
                        dogovor.datum_dogovor.Value > DateTime.Now.AddDays(-10) &&
                        dogovor.dogovor_status != 3)
                    {
                        //dogovor.datum_dogovor.Value.AddHours((int)dogovor.Termin.FirstOrDefault().period_termin);
                        //Debug.WriteLine(dogovor.datum_dogovor.Value);
                        model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_instruktor.Add(new dogovor_term_osoba()
                        {
                            termin   = dogovor,
                            lokacija = dogovor.Lokacija,
                            ime      = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_klijent).FirstOrDefault().ime_osoba,
                            prezime  = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_klijent).FirstOrDefault().prezime_osoba,
                            predmet  = data.Predmet.Where(k => k.ID_predmet == dogovor.ID_predmet).FirstOrDefault().naziv_predmet,
                            odustani = false,
                            seen     = false
                        });
                    }
                }
                foreach (dogovor_termin dogovor in osoba.dogovor_termin1.ToList())
                {
                    if (dogovor.dogovor_status != 0 && dogovor.datum_dogovor.Value > DateTime.Now.AddDays(-10) && dogovor.dogovor_status != 2 && dogovor.dogovor_status != 20)
                    {
                        //dogovor.datum_dogovor.Value.AddHours((int)dogovor.Termin.OrderBy(o => o.period_termin).FirstOrDefault().period_termin);
                        //Debug.WriteLine(dogovor.datum_dogovor.Value);
                        model.mojeVlastiteInstrukcije.dogovoreni_termini_kao_klijent.Add(new dogovor_term_osoba()
                        {
                            termin   = dogovor,
                            lokacija = dogovor.Lokacija,
                            ime      = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_instruktor).FirstOrDefault().ime_osoba,
                            prezime  = data.Osoba.Where(o => o.ID_osoba == dogovor.ID_instruktor).FirstOrDefault().prezime_osoba,
                            predmet  = data.Predmet.Where(k => k.ID_predmet == dogovor.ID_predmet).FirstOrDefault().naziv_predmet,
                            odustani = false,
                            seen     = false
                        });
                    }
                }


                #region populate OpisanPredmet
                var detaljiPredmetOsoba = from p in data.Predmet
                                          join op in data.osoba_predmet on p.ID_predmet equals op.ID_predmet
                                          join u in data.Ustanova on p.ID_ustanova equals u.ID_ustanova
                                          join k in data.Kategorija on p.ID_kategorija equals k.ID_kategorija
                                          where osoba.ID_osoba == op.ID_osoba
                                          select new { p.ID_predmet, p.naziv_predmet, p.kratica_predmet, op.cijena, u.ID_ustanova, k.ID_kategorija };

                foreach (var row in detaljiPredmetOsoba)
                {
                    Ustanova   ust = data.Ustanova.Find(row.ID_ustanova);
                    Kategorija kat = data.Kategorija.Find(row.ID_kategorija);
                    model.mojeVlastiteInstrukcije.mojiPredmeti.Add(new OpisanPredmet()
                    {
                        IDpredmet      = row.ID_predmet,
                        nazivPredmet   = row.naziv_predmet,
                        kraticaPredmet = row.kratica_predmet,
                        cijenaPredmet  = row.cijena,
                        IDkategorija   = row.ID_kategorija,
                        IDustanova     = row.ID_ustanova,
                        ustanova       = ust,
                        kategorija     = kat
                    });
                }
                #endregion

                #region populate Ustanova Kategorija

                var ustanovaQuery = from u in data.Ustanova
                                    select u;
                var kategorijaQuery = from k in data.Kategorija
                                      select k;
                model.mojeVlastiteInstrukcije.sveUstanove.AddRange(ustanovaQuery.ToList());
                model.mojeVlastiteInstrukcije.sveKategorije.AddRange(kategorijaQuery.ToList());
                #endregion

                #region populate Predmeti
                var predmetiQuery = from p in data.Predmet
                                    select p;

                model.mojeVlastiteInstrukcije.sviPredmeti.AddRange(predmetiQuery.ToList());
                #endregion

                model.mojeVlastiteInstrukcije.popis_kategorija = new List <odabranaKategorija>();
                foreach (Kategorija kateg in data.Kategorija)
                {
                    odabranaKategorija odabrananadkat = new odabranaKategorija();
                    odabrananadkat.mojiPredmeti = new List <odabranPredmet>();
                    foreach (Predmet pred in data.Predmet.Where(k => k.ID_kategorija == kateg.ID_kategorija))
                    {
                        odabranPredmet item = new odabranPredmet();
                        item.predmet = pred;
                        if (osoba.osoba_predmet.Where(k => k.ID_predmet == pred.ID_kategorija).Count() == 1)
                        {
                            item.odabran = true;
                        }
                        else
                        {
                            item.odabran = false;
                        }
                        odabrananadkat.mojiPredmeti.Add(item);
                    }
                    odabrananadkat.kategorija_ime = kateg.naziv_kategorija;
                    model.mojeVlastiteInstrukcije.popis_kategorija.Add(odabrananadkat);
                }
                model.mojeVlastiteInstrukcije.MojeLokacijeJson = convertLokacije(data.Lokacija.Where(l => l.Osoba.ID_osoba == osoba.ID_osoba).ToList());
                if (osoba.razina_prava == 1)
                {
                    model.ostalePostavke.instruktor = true;
                }
                else
                {
                    model.ostalePostavke.instruktor = false;
                }
                return(View(model));
            }
        }
Exemplo n.º 17
0
        public ActionResult Instrukcija(InstrukcijaModel model, string naredba)
        {
            // pohrani novi zahtjev
            if (naredba != null && naredba != "Traži")
            {
                using (var db = new ppij_databaseEntities())
                {
                    dogovor_termin zahtjev       = new dogovor_termin();
                    int            ID_instruktor = Int32.Parse(naredba);
                    string         id            = "lokacija:" + ID_instruktor;
                    int            ID_lokacija   = Int32.Parse(Request.Form[id].ToString());

                    try
                    {
                        zahtjev.ID_dogovor_termin = db.dogovor_termin.Select(d => d.ID_dogovor_termin).Max() + 1;
                    }
                    catch (InvalidOperationException)
                    {
                        zahtjev.ID_dogovor_termin = 0;
                    }

                    zahtjev.dogovor_status  = 10;
                    zahtjev.dogovor_ocijena = null;
                    zahtjev.ID_instruktor   = ID_instruktor;
                    zahtjev.ID_klijent      = db.Osoba.First(o => o.korisnicko_ime_osoba == User.Identity.Name).ID_osoba;
                    zahtjev.datum_dogovor   = model.Datum.AddHours(model.OdabraniSatID);
                    zahtjev.ID_predmet      = Int32.Parse((string)RouteData.Values["predmet_id"]);
                    zahtjev.trajanje        = model.OdabranoTrajanjeID;
                    zahtjev.ID_lokacija     = ID_lokacija;
                    zahtjev.dogovor_ocijena = 0;
                    db.dogovor_termin.Add(zahtjev);
                    db.SaveChanges();
                }
            }

            List <OpisInstrukcije> opisi = new List <OpisInstrukcije>();

            using (var db = new ppij_databaseEntities())
            {
                // datetime pocetka i zavrsetka
                DateTime pocetak   = new DateTime(model.Datum.Year, model.Datum.Month, model.Datum.Day, model.OdabraniSatID, 0, 0);
                DateTime zavrsetak = pocetak.AddHours(model.OdabranoTrajanjeID);

                // lista svih termina koji obuhvaćaju interval [pocetak, zavrsetak]
                List <int> termini = new List <int>();
                for (int i = 0; i < model.OdabranoTrajanjeID; i++)
                {
                    DateTime termin = pocetak.AddHours(i);
                    int      dan    = (int)termin.DayOfWeek;
                    if (dan == 0)
                    {
                        dan += 7;                         // pretvori nedjelju iz 0 u 7
                    }
                    int sat  = termin.Hour;
                    int blok = (dan * 100 + sat);
                    termini.Add(blok);
                }

                // uzmi sve instruktore koji predaju navedeni predmet
                int ID_predmet = Int32.Parse((string)RouteData.Values["predmet_id"]);
                List <osoba_predmet> instrukcije = db.osoba_predmet.Where(i => i.ID_predmet == ID_predmet).ToList();
                // TODO: uzmi instruktore koji su aktivni
                model.Predmet = db.Predmet.First(p => p.ID_predmet == ID_predmet);

                // makni sebe iz liste instruktora (LOL)
                Osoba korisnik = db.Osoba.Where(o => o.korisnicko_ime_osoba == User.Identity.Name).FirstOrDefault();
                instrukcije = instrukcije.Where(i => i.Osoba.ID_osoba != korisnik.ID_osoba).ToList();

                Debug.WriteLine("---------------");

                // izracunaj opise instruktora
                foreach (osoba_predmet instrukcija in instrukcije)
                {
                    OpisInstrukcije opis = new OpisInstrukcije();
                    opis.Instruktor = instrukcija.Osoba;

                    // pogledaj koji instruktori imaju barem jedan termin postavljen kao ne slobodan
                    Osoba      instruktor       = instrukcija.Osoba;
                    List <int> slobodni_termini = instruktor.Termin.Select(t => t.ID_termin).ToList();
                    if (!TerminiSlobodni(slobodni_termini, termini))
                    {
                        opis.Status = "NEDOSTUPAN";
                    }

                    if (opis.Status == null)
                    {
                        // pogledaj koji instruktori imaju preklapanja sa vec postojecim dogovorenim terminima
                        bool preklapanje = false;
                        List <dogovor_termin> dogovoreni_termini = instruktor.dogovor_termin
                                                                   .Where(d => d.dogovor_status == 1 || d.dogovor_status == 11).ToList();
                        foreach (dogovor_termin dogovoren_termin in dogovoreni_termini)
                        {
                            DateTime pocetak_termina   = (DateTime)dogovoren_termin.datum_dogovor;
                            DateTime zavrsetak_termina = pocetak_termina.AddHours((int)dogovoren_termin.trajanje);
                            if ((pocetak >= pocetak_termina && pocetak < zavrsetak_termina) ||
                                (zavrsetak > pocetak_termina && zavrsetak <= zavrsetak_termina) ||
                                (pocetak <= pocetak_termina && zavrsetak >= zavrsetak_termina))
                            {
                                preklapanje = true;
                                break;
                            }
                        }
                        if (preklapanje)
                        {
                            opis.Status = "REZERVIRAN";
                        }
                    }



                    if (opis.Status == null)
                    {
                        // provjeri da li je već isti zahtjev tom instruktoru
                        DateTime termin = model.Datum.AddHours(model.OdabraniSatID);
                        Debug.WriteLine(termin);
                        int vec_poslan = db.dogovor_termin
                                         .Where(d => d.Osoba1.korisnicko_ime_osoba == User.Identity.Name)
                                         .Where(d => d.ID_instruktor == instrukcija.Osoba.ID_osoba)
                                         .Where(d => d.datum_dogovor == termin)
                                         .Where(d => d.trajanje == model.OdabranoTrajanjeID)
                                         .Where(d => d.ID_predmet == ID_predmet).Count();
                        if (vec_poslan != 0)
                        {
                            Debug.WriteLine("preklapanja:");
                            Debug.WriteLine(opis.Instruktor.prezime_osoba + ":" + opis.Status);
                            vec_poslan = db.dogovor_termin
                                         .Where(d => d.Osoba1.korisnicko_ime_osoba == User.Identity.Name)
                                         .Where(d => d.ID_instruktor == instrukcija.Osoba.ID_osoba)
                                         .Where(d => d.datum_dogovor == termin)
                                         .Where(d => d.trajanje == model.OdabranoTrajanjeID)
                                         .Where(d => d.ID_predmet == ID_predmet)
                                         .Where(d => d.dogovor_status == 0 ||
                                                d.dogovor_status == 3 ||
                                                d.dogovor_status == 2 ||
                                                d.dogovor_status == 20).Count();
                            if (vec_poslan != 0)
                            {
                                opis.Status = "OTKAZAN";
                            }
                            else
                            {
                                opis.Status = "POSLAN";
                            }
                        }
                        else
                        {
                            Debug.WriteLine("nema preklapanja:");
                            Debug.WriteLine(opis.Instruktor.prezime_osoba + ":" + opis.Status);
                            opis.Status = "SLOBODAN";
                        }
                    }

                    // izracunaj prosjecnu ocjenu iz predmeta
                    List <int> ocjene = db.dogovor_termin.Where(i => i.ID_instruktor == opis.Instruktor.ID_osoba &&
                                                                i.ID_predmet == ID_predmet &&
                                                                i.dogovor_ocijena != null)
                                        .Select(i => (int)i.dogovor_ocijena).ToList();
                    opis.Ocjena = 1.0 * ocjene.Sum(x => Convert.ToInt32(x)) / ocjene.Count;
                    if (double.IsNaN(opis.Ocjena))
                    {
                        opis.Ocjena = 0;
                    }
                    // nadji broj instrukcija iz predmeta
                    opis.BrojInstrukcija = db.dogovor_termin.Where(i => i.ID_instruktor == opis.Instruktor.ID_osoba &&
                                                                   i.ID_predmet == ID_predmet &&
                                                                   DateTime.Now > i.datum_dogovor &&
                                                                   i.dogovor_status == 1).Count();
                    // izracunaj cijenu (trajanje * cijena)
                    opis.Cijena = (decimal)instrukcija.cijena * model.OdabranoTrajanjeID;

                    // stavi listu lokacija u combo box opisa
                    opis.Lokacije = instrukcija.Osoba.Lokacija.ToList();

                    opisi.Add(opis);
                }
            }
            // TODO : filtriraj po minimalnoj ocjeni, minimalnom broju instrukcija, rasponu cijene,
            if (model.Ime != null)
            {
                opisi = opisi.Where(i => i.Instruktor.ime_osoba.ToUpper().Contains(model.Ime.Trim().ToUpper())).ToList();
            }
            if (model.Prezime != null)
            {
                opisi = opisi.Where(i => i.Instruktor.prezime_osoba.ToUpper().Contains(model.Prezime.Trim().ToUpper())).ToList();
            }
            opisi       = opisi.Where(i => i.BrojInstrukcija >= model.BrojInstrukcija && i.Ocjena >= model.Ocjena).ToList();
            model.Opisi = opisi;

            return(View(model));
        }