// 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)); } }
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)); }
// 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!")); }
// 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()); }
public ActionResult Edit() { using (var db = new SrceAppDatabase1Entities()) { var user = (Session["user"] as Technician); var currentUser = db.Technician.Find(user.TechnicianID); return(View(currentUser)); } }
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); } }
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()); }
// 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")); }
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!"); }
// 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()); }
//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")); }
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")); }
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)); }
//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!"); }
// 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)); } }
//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); }
//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")); }