Example #1
0
        // GET: Job/GetUsers
        public string GetUsers()
        {
            using (var db = new SrceAppDatabase1Entities())
            {
                var eventList = db.Job.Select(e => new
                {
                    id       = e.JobID,
                    date     = e.JobDate,
                    start    = e.StartingHour,
                    end      = e.EndingHour,
                    title    = e.Title,
                    color    = e.Color,
                    jobNotes = e.JobNotes
                }).ToList();
                var usersList = db.Technician.Select(e => new
                {
                    name     = e.Name,
                    lastName = e.LastName,
                    hours    = e.WorkHours,
                    level    = e.AccessLevel
                }).ToList();

                JavaScriptSerializer ser = new JavaScriptSerializer();

                return(ser.Serialize(usersList));
            }
        }
 // GET: Template
 public ActionResult Index(int id)
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         List <TemplateViewModel> tempModels = new List <TemplateViewModel>();
         foreach (JobTemplates temp in db.JobTemplates)
         {
             tempModels.Add(new TemplateViewModel()
             {
                 jobID        = id,
                 ChairLayout  = temp.ChairLayout,
                 Chairs       = temp.Chairs,
                 Tables       = temp.Tables,
                 TablesLayout = temp.TablesLayout,
                 Hall         = temp.Hall,
                 Wall         = temp.Wall,
                 ExtraNotes   = temp.ExtraNotes,
                 templateID   = temp.TemplateID
             });
         }
         ComplexTemplateModel model = new ComplexTemplateModel();
         model.jobID    = id;
         model.viewList = tempModels;
         return(View(model));
     }
 }
Example #3
0
 public ActionResult Edit(Job job)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             var jb = db.Job.Find(job.JobID);
             jb.Title        = job.Title;
             jb.StartingHour = job.StartingHour;
             jb.EndingHour   = job.EndingHour;
             jb.JobNotes     = job.JobNotes;
             jb.JobDate      = job.JobDate;
             if (job.JobTemplates != null)
             {
                 jb.JobTemplates.Hall         = job.JobTemplates.Hall;
                 jb.JobTemplates.Chairs       = job.JobTemplates.Chairs;
                 jb.JobTemplates.ChairLayout  = job.JobTemplates.ChairLayout;
                 jb.JobTemplates.Tables       = job.JobTemplates.Tables;
                 jb.JobTemplates.TablesLayout = job.JobTemplates.TablesLayout;
                 jb.JobTemplates.ExtraNotes   = job.JobTemplates.ExtraNotes;
                 jb.JobTemplates.Wall         = job.JobTemplates.Wall;
             }
             db.SaveChanges();
             TempData["message"] = "Uspješno ste promijenili podatke o poslu!";
             return(View(db.Job.Find(job.JobID)));
         }
     }
     return(View(job));
 }
Example #4
0
 // GET: Job/Delete/5
 public ActionResult Delete(int id)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             var job = db.Job.Find((short)id);
             if (job != null)
             {
                 if (ModelState.IsValid)
                 {
                     //Izbaci posao iz liste poslova kod svakog tehnicara koji je prijavljen za taj posao
                     foreach (Technician tech in db.Job.Find((short)id).Technician)
                     {
                         tech.Job.Remove(job);
                     }
                     db.Job.Remove(job);
                     db.SaveChanges();
                 }
             }
         }
         return(RedirectToAction("Index"));
     }
     return(HttpNotFound("Greška kod brisanja!"));
 }
Example #5
0
        // GET: Job/Edit/5
        public ActionResult Edit(short id)
        {
            var db  = new SrceAppDatabase1Entities();
            var job = db.Job.Find(id);

            return(View(job));
        }
 public ActionResult Create(ComplexTemplateModel model, int jobID)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             var newTemplate = new JobTemplates()
             {
                 TemplateID   = checkId(db.JobTemplates.Select(m => m.TemplateID).ToList()),
                 Chairs       = model.view.Chairs,
                 ChairLayout  = model.view.ChairLayout,
                 Tables       = model.view.Tables,
                 TablesLayout = model.view.TablesLayout,
                 Hall         = model.view.Hall,
                 ExtraNotes   = model.view.ExtraNotes,
                 Wall         = model.view.Wall
             };
             db.JobTemplates.Add(newTemplate);
             db.Job.Find(jobID).TemplateID = model.view.templateID;
             db.SaveChanges();
             TempData["message"] = "Rekonfiguracija uspješno dodana!";
         }
         return(RedirectToAction("Index", "Job", null));
     }
     return(View());
 }
Example #7
0
 public ActionResult Edit()
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         var user        = (Session["user"] as Technician);
         var currentUser = db.Technician.Find(user.TechnicianID);
         return(View(currentUser));
     }
 }
Example #8
0
 private Technician AttemptLogIn(string username, string password)
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         var hashedPassword = Convert.ToBase64String(GetHashedPassword(password, username));
         var user           = db.Technician.Where(u => u.Username == username &&
                                                  u.Password == hashedPassword).FirstOrDefault();
         return(user);
     }
 }
Example #9
0
 public string GetUserEvents(int id)
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         var user                 = Session["user"] as Technician;
         var userJobs             = db.Technician.Find(user.TechnicianID).Job;
         JavaScriptSerializer ser = new JavaScriptSerializer();
         var result               = ser.Serialize(userJobs.Select(d => d.JobID).ToList());
         return(result);
     }
 }
 public ActionResult Add(byte templateID, int jobID)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             db.Job.Find(jobID).TemplateID = templateID;
             db.SaveChanges();
         }
         return(RedirectToAction("Index", "Job", null));
     }
     return(View());
 }
 public ActionResult Edit(byte templateID)
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         JobTemplates  model  = db.JobTemplates.Find(templateID);
         bool          chairs = false;
         StringBuilder sb     = new StringBuilder();
         sb.Append("U dvorani " + model.Hall + " potrebno je");
         if (model.Chairs != null)
         {
             chairs = true;
             sb.Append(" složiti " + model.Chairs + " stolica");
             if (model.ChairLayout != null)
             {
                 sb.Append(" u formaciju " + model.ChairLayout + ".");
             }
             sb.AppendLine();
         }
         if (model.Tables != null)
         {
             if (chairs)
             {
                 sb.Append("Uz to potrebno je složiti ");
             }
             else
             {
                 sb.Append("složiti ");
             }
             sb.Append(model.Tables + " stolova");
             if (model.TablesLayout != null)
             {
                 sb.Append(" u formaciju " + model.TablesLayout);
             }
             sb.AppendLine();
         }
         if (model.ExtraNotes != null)
         {
             sb.Append("Dodatne napomene: ");
             sb.Append(model.ExtraNotes);
             sb.AppendLine();
         }
         sb.AppendLine();
         sb.Append("Dvoranu ");
         string str = model.Wall ? "treba pregraditi." : "nije potrebno pregraditi.";
         sb.Append(str);
         TempData["message"] = sb.ToString();
         return(View(model));
     }
 }
 public ActionResult Delete(byte templateID, int jobID)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             JobTemplates temp = db.JobTemplates.Find(templateID);
             db.Job.Find(jobID).TemplateID = null;
             db.JobTemplates.Remove(temp);
             db.SaveChanges();
         }
         return(RedirectToAction("Index", "Job", null));
     }
     return(View());
 }
Example #13
0
 // GET: Job/DropEvent
 public ActionResult DropEvent(int id, string start, string end)
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         var job = db.Job.Find(id);
         if (job != null)
         {
             if (ModelState.IsValid)
             {
                 job.StartingHour = TimeSpan.Parse(start.Split('T')[1]);
                 job.EndingHour   = TimeSpan.Parse(end.Split('T')[1]);
                 job.JobDate      = DateTime.Parse(end.Split('T')[0]);
                 db.SaveChanges();
             }
         }
     }
     return(RedirectToAction("Index"));
 }
Example #14
0
 public string LockJob(int id)
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         Job job = db.Job.Find((short)id);
         if (job.JobState == (byte)JobStates.Locked)
         {
             return("Posao je već zaključan!");
         }
         byte jobDuration = Byte.Parse(GetHours(job));
         foreach (var technician in job.Technician)
         {
             technician.WorkHours += jobDuration;
         }
         job.JobState = (byte)JobStates.Locked;
         db.SaveChanges();
     }
     return("Posao je završen, radni sati za ovaj dan su obračunati!");
 }
Example #15
0
        // GET: Job/Create
        public ActionResult Create(string start, string end, string view)
        {
            if (ModelState.IsValid)
            {
                using (var db = new SrceAppDatabase1Entities())
                {
                    List <short> jobIds = new List <short>(db.Job.Count()); // stvaranje liste sa svim JobId u bazi
                    foreach (Job job in db.Job)
                    {
                        jobIds.Add(job.JobID);
                    }

                    TimeSpan startTime;
                    TimeSpan endTime;
                    if (String.Equals(view, "month"))
                    {
                        startTime = new TimeSpan(16, 00, 00);
                        endTime   = new TimeSpan(18, 00, 00);
                    }
                    else
                    {
                        startTime = TimeSpan.Parse(start.Split('T')[1]);
                        endTime   = TimeSpan.Parse(end.Split('T')[1]);
                    }

                    Job newJob = new Job
                    {
                        JobID            = checkId(jobIds),
                        StartingHour     = startTime,
                        EndingHour       = endTime,
                        JobDate          = DateTime.Parse(start.Split('T')[0]),
                        JobState         = (byte)JobStates.Unassigned,
                        TechnicianNumber = 1
                    };
                    db.Job.Add(newJob);
                    db.SaveChanges();
                    TempData["message"] = "Posao je uspješno dodan!";
                    return(View("Index"));
                }
            }
            return(View());
        }
Example #16
0
        //Metoda koja se poziva pri prijavi tehničara na određeni posao
        public ActionResult CheckIn(int id)
        {
            Technician user = Session["user"] as Technician;

            using (var db = new SrceAppDatabase1Entities())
            {
                Job job = db.Job.Find((short)id);
                if (job == null)
                {
                    new EntryPointNotFoundException();
                }

                //Ako je posao u stanju traženja zamjene posla i s ovim check-in zahtjevom su se popunila mjesta
                //onda vrati stanje u dodjeljeno. (Uzima se broj tehničara - 1 jer ovaj sad nije još u potpunosti spremljen u bazi).
                if (job.JobState == (byte)JobStates.SwapRequest && job.Technician.Count == (job.TechnicianNumber - 1))
                {
                    job.JobState = (byte)JobStates.Assigned;
                }
                if (job.Title == null)
                {
                    job.Title = user.Name + " " + user.LastName;
                    if (!(job.JobState == (byte)JobStates.SwapRequest))
                    {
                        job.Color = user.Color;
                    }
                }
                else
                {
                    job.Title += ", " + user.Name + " " + user.LastName;
                    if (!(job.JobState == (byte)JobStates.SwapRequest))
                    {
                        job.Color = "#9f00ff";
                    }
                }
                if (ModelState.IsValid)
                {
                    db.Technician.Find(user.TechnicianID).Job.Add(job);
                    db.SaveChanges();
                }
            }
            return(RedirectToAction("Index"));
        }
Example #17
0
 public ActionResult Edit(Technician user)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             var usr = db.Technician.Find(user.TechnicianID);
             usr.Name        = user.Name;
             usr.LastName    = user.LastName;
             usr.PhoneNumber = user.PhoneNumber;
             usr.DateOfBirth = user.DateOfBirth;
             usr.email       = user.email;
             db.SaveChanges();
             TempData["message"] = "Uspješno ste promijenili osobne podatke!";
             return(View(db.Technician.Find(user.TechnicianID)));
         }
         return(View(user));
     }
     return(HttpNotFound("Došlo je do greške"));
 }
Example #18
0
 public ActionResult Register(RegisterViewModel model)
 {
     if (ModelState.IsValid)
     {
         using (var db = new SrceAppDatabase1Entities())
         {
             List <short> techIds = new List <short>(db.Technician.Count());
             foreach (Technician tech in db.Technician)
             {
                 techIds.Add(tech.TechnicianID);
             }
             byte[]     hashedPassword = GetHashedPassword(model.Password, model.Username);
             string     storedPassword = Convert.ToBase64String(hashedPassword);
             Technician newUser        = new Technician
             {
                 TechnicianID    = new JobController().checkId(techIds),
                 Name            = model.Name,
                 LastName        = model.LastName,
                 PhoneNumber     = model.PhoneNumber,
                 DateOfBirth     = model.DateOfBirth,
                 DateHired       = model.DateHired,
                 Color           = model.Color,
                 email           = model.email,
                 Username        = model.Username,
                 Password        = storedPassword,
                 AccessLevel     = AccessLevel.Technician.Value,
                 WorkHours       = 0,
                 ThisMonthSalary = 0,
                 LastMonthSalary = 0,
                 ThisYearSalary  = 0
             };
             db.Technician.Add(newUser);
             db.SaveChanges();
             TempData["message"] = "Uspješno ste registrirali račun. Možete se ulogirati sa kreiranim podacima";
         }
         return(RedirectToAction("Index", "Home"));
     }
     // If we got this far, something failed, redisplay form
     return(View(model));
 }
Example #19
0
 //Metoda koja raspodjeljuje tehničarima poslova
 //Kriterij pri dodjeljivanju posla je broj odrađenih sati ovaj mjesec zbrojen sa brojem potencijalnih radnih sati
 //Potencijalni radni sati označavaju vrijednost u slučaju da tehničar radi svaki posao za koji se prijavio u tekućem tjednu.
 //cilj je ravnomjerno raspodjeliti sate tehničarima tako da na kraju mjeseca imaju relativno slične plaće
 public string AssignTechnicians()
 {
     using (var db = new SrceAppDatabase1Entities())
     {
         var jobs = db.Job.Where(m => m.JobState == (byte)JobStates.Unassigned).ToList();
         if (jobs.Count == 0)
         {
             return("Svi trenutni poslovi su raspodjeljeni!");
         }
         var allTechnicians = CalculatePotentialHours(db.Technician.Where(m => m.AccessLevel == AccessLevel.Technician.Value).ToList(), jobs);
         foreach (var job in jobs)
         {
             var technicians        = job.Technician.ToList();
             var orderedTechnicians = GetSignedTechnicians(allTechnicians, technicians);
             for (int i = technicians.Count - 1; i >= job.TechnicianNumber; i--)
             {
                 var           user           = orderedTechnicians[i];
                 List <string> title          = job.Title.Split(new string[] { ", " }, StringSplitOptions.None).ToList();
                 int           indexSubstring = title.IndexOf(user.Key.Name + " " + user.Key.LastName);
                 if (indexSubstring == 0)
                 {
                     job.Title = job.Title.Replace(user.Key.Name + " " + user.Key.LastName + ", ", "");
                 }
                 else
                 {
                     job.Title = job.Title.Replace(", " + user.Key.Name + " " + user.Key.LastName, "");
                 }
                 job.Technician.Remove(user.Key);
             }
             if (job.TechnicianNumber == 1)
             {
                 job.Color = job.Technician.First().Color;
             }
             job.JobState = (byte)JobStates.Assigned;
             UpdatePotentialHours(allTechnicians, orderedTechnicians, job);
         }
         db.SaveChanges();
     }
     return("Tehničari su uspješno raspodjeljeni!");
 }
Example #20
0
        // Dohvaćanje svih poslova iz baze...
        public string GetEvents()
        {
            using (var db = new SrceAppDatabase1Entities())
            {
                var eventList = db.Job.Select(e => new
                {
                    id          = e.JobID,
                    date        = e.JobDate,
                    start       = e.StartingHour,
                    end         = e.EndingHour,
                    title       = e.Title,
                    color       = e.Color,
                    jobTemplate = e.TemplateID,
                    jobState    = e.JobState
                }).ToList();

                var list = new List <object>();

                foreach (var job in eventList)
                {
                    list.Add(new
                    {
                        id           = job.id,
                        start        = FormData(job.date, job.start),
                        end          = FormData(job.date, job.end),
                        title        = job.title,
                        color        = job.color,
                        templateInfo = job.jobTemplate.Equals(null) ? null : TemplateInfo((byte)job.jobTemplate),
                        jobState     = job.jobState
                    });
                }

                JavaScriptSerializer ser = new JavaScriptSerializer();
                return(ser.Serialize(list));
            }
        }
Example #21
0
        //Metoda koja generira izvještaj za tekući mjesec
        //Uzimaju se svi poslovi koji su u stanju 1 odn. nisu još obračunati.
        //Metoda prolazi kroz poslove te u novu txt datoteku zapisuje radne sate
        //te ukupni broj radnih sati za tekući mjesec.
        //Po završetku, stanja obrađenih poslova se ažuriraju na 2 (zaključano stanje).
        //Tehničarima se resetiraju podaci o odrađenim satima te tako započinje praćenje rada u
        //sljedećem mjesecu.
        public string CreateReport()
        {
            string data;

            using (var db = new SrceAppDatabase1Entities()) {
                var jobs = db.Job.Where(m => m.JobState == (byte)JobStates.Locked);
                List <Technician> technicians = db.Technician.Where(m => m.AccessLevel == AccessLevel.Technician.Value).ToList();

                //Lista koja je indirektno povezana sa listom tehničara a sadrži
                //listu prijavljenih poslova od tehničara u svakom njenom elementu.
                List <List <Job> > technicianJobs = new List <List <Job> >();

                //Povezivanje liste tehničara sa listom lista poslova koje su odradili.
                foreach (var tech in technicians)
                {
                    technicianJobs.Add(tech.Job.Where(m => m.JobState == (byte)JobStates.Locked).ToList());
                }

                string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                string month       = DateTime.Now.Month < 10 ? "0" + DateTime.Now.Month : DateTime.Now.Month.ToString();
                string date        = month + "-" + DateTime.Now.Year;
                string filePath    = desktopPath + "\\Izvještaj_" + date + ".txt";
                if (!System.IO.File.Exists(filePath))
                {
                    if (jobs.Count() == 0)
                    {
                        data = "Ovaj mjesec ne postoji niti jedan odrađeni posao.";
                        return(data);
                    }
                    using (StreamWriter sw = new StreamWriter(filePath))
                    {
                        foreach (var tech in technicians)
                        {
                            sw.Write("\t" + tech.LastName);
                        }
                        sw.WriteLine();
                        var maxCount = 0;
                        foreach (var job in technicianJobs)
                        {
                            if (maxCount < job.Count)
                            {
                                maxCount = job.Count;
                            }
                        }
                        for (int i = 0; i < maxCount; i++)
                        {
                            foreach (var tech in technicianJobs)
                            {
                                if (i < tech.Count)
                                {
                                    sw.Write("\t" + GetHours(tech[i]));
                                }
                                else
                                {
                                    sw.Write("\t" + " ");
                                }
                            }
                            sw.WriteLine();
                        }
                        sw.Write("Ukupno: ");
                        int j = 0;
                        foreach (var tech in technicians)
                        {
                            if (j != 0)
                            {
                                sw.Write("\t");
                            }
                            sw.Write(tech.WorkHours);
                            j++;
                        }
                    }
                    foreach (var job in jobs)
                    {
                        job.JobState = (byte)JobStates.Archived;
                    }
                    foreach (var tech in technicians)
                    {
                        UpdateSalary(tech);
                    }
                    db.SaveChanges();
                    data = "Izvještaj je generiran i dostupan na radnoj površini!";
                }
                else
                {
                    data = "Izvještaj za ovaj mjesec je već napravljen i nalazi se na radnoj površini.";
                }
            }
            return(data);
        }
Example #22
0
        //Metoda koja se poziva kada tehničar odjavljuje posao
        public ActionResult CheckOut(int id)
        {
            Technician user = Session["user"] as Technician;

            using (var db = new SrceAppDatabase1Entities())
            {
                Job job = db.Job.Find((short)id);


                if (job == null)
                {
                    new EntryPointNotFoundException();
                }


                if (ModelState.IsValid)
                {
                    db.Technician.Find(user.TechnicianID).Job.Remove(job);
                    int numTech = db.Job.Find(id).Technician.Count();
                    if (numTech != 0)
                    {
                        if (numTech == 1)                         //Ako ostane jedan tehničar event oboja u boju tehničara i prikazano je ime tehničara
                        {
                            var tech = db.Job.Find(id).Technician.First();
                            job.Color = tech.Color;
                            job.Title = tech.Name + " " + tech.LastName;
                        }
                        else
                        {                           //Ukoliko ostane više tehničara miče se iz stringa title user-a koji se trenutno odjavio
                            List <string> title          = job.Title.Split(new string[] { ", " }, StringSplitOptions.None).ToList();
                            int           indexSubstring = title.IndexOf(user.Name + " " + user.LastName);
                            if (indexSubstring == 0)
                            {
                                job.Title = job.Title.Replace(user.Name + " " + user.LastName + ", ", "");
                            }
                            else
                            {
                                job.Title = job.Title.Replace(", " + user.Name + " " + user.LastName, "");
                            }
                        }
                    }
                    else
                    {
                        job.Color    = null;                      //Ako nema prijavljenih tehničara onda se vraća defaultni event
                        job.Title    = null;
                        job.JobNotes = null;
                        if (job.JobState == 1 || job.JobState == 4)
                        {
                            job.Color = Colors.Red.Value;
                            if (job.JobState == 1)
                            {
                                job.JobState = (byte)JobStates.SwapRequest;
                            }
                        }
                    }

                    db.SaveChanges();
                }
            }

            return(RedirectToAction("Index"));
        }