public ActionResult Create(BenevoleCreateViewModel vm) { Benevole b = new Benevole() { Nom = vm.Nom, Prenom = vm.Prenom, Permis = vm.Permis, Commentaire = vm.Commentaire, Email = vm.Email, Tel = vm.Tel }; db.Benevoles.Add(b); foreach (CreneauDef c in db.CreneauDefs) { Dispo d = new Dispo() { CreneauDef = c, EstDispo = vm.Jours.Any(j => j.IsSelected && c.JourEvenement.Id == j.Id), ModifManuel = false }; b.Dispoes.Add(d); } db.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Create([Bind(Include = "Id,Nom,Description")] TypeTache typeTache) { if (ModelState.IsValid) { db.TypeTaches.Add(typeTache); db.SaveChanges(); return(RedirectToAction("Create")); } return(View(typeTache)); }
public ActionResult Create([Bind(Include = "Id,Nom,Description,Ordre,DateDebut,DateFin")] JourEvenement jourEvenement) { if (ModelState.IsValid) { db.JourEvenements.Add(jourEvenement); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(jourEvenement)); }
public ActionResult Create([Bind(Include = "Id,Nom,Description,TypeTacheId")] Tache tache) { if (ModelState.IsValid) { db.Taches.Add(tache); db.SaveChanges(); return(RedirectToAction("Create")); } ViewBag.Id = new SelectList(db.Creneaux, "Id", "Id", tache.Id); ViewBag.TypesTaches = new SelectList(db.TypeTaches.OrderBy(s => s.Ordre), "Id", "Nom", tache.TypeTache.Id); return(View(tache)); }
// GET: Admin public ActionResult GenerateCreneauDef() { if (db.Creneaux.Count() > 0) { throw new ArgumentException("Creneau non vide"); } int duree = db.Confs.First(s => s.IsCurrent).DureeCreneauMinute; foreach (var j in db.JourEvenements) { DateTime cur = j.DateDebut; int i = 0; while (cur < j.DateFin) { CreneauDef d = new CreneauDef() { JourEvenement = j, NoCreneau = i }; i++; cur = cur.AddMinutes(duree); db.CreneauDefs.Add(d); } } db.SaveChanges(); return(RedirectToAction("Index", "Home")); }
public ActionResult Edit(int id, CreneauDefViewModel vm) { Tache tache = db.Taches.Include("Creneaux.CreneauDef").First(s => s.Id == id); var creneauxDef = db.CreneauDefs.ToList(); var dico = new Dictionary <int, JourEvenement>(); foreach (var j in db.JourEvenements) { dico.Add(j.Id, j); } ViewBag.Jours = dico; if (ModelState.IsValid) { Regex r = new Regex(@"\[([0-9]+)\]"); foreach (var key in Request.Form.AllKeys.Where(k => k.Contains("Creneaux") && k.Contains("NbBenevoleMin"))) { var m = r.Match(key); int jourId = int.Parse(m.Groups[0].Captures[0].Value.Trim(new char[] { '[', ']' })); m = m.NextMatch(); int noCreneau = int.Parse(m.Groups[0].Captures[0].Value.Trim(new char[] { '[', ']' })); var min = int.Parse(Request.Form[key].ToString()); var max = int.Parse(Request.Form[key.Replace("NbBenevoleMin", "NbBenevoleMax")].ToString()); var cre = tache.Creneaux.FirstOrDefault(s => s.CreneauDef.JourId == jourId && s.CreneauDef.NoCreneau == noCreneau); if (min == 0 && cre != null) { db.Creneaux.Remove(cre); } else if (min > 0) { if (max <= min) { max = min; } if (cre == null) { cre = new Creneau() { TacheId = tache.Id, CreneauDefId = creneauxDef.First(s => s.NoCreneau == noCreneau && s.JourId == jourId).Id, }; db.Creneaux.Add(cre); } cre.NbBenevoleMax = max; cre.NbBenevoleMin = min; } } db.SaveChanges(); CreneauDefViewModel newVm = new CreneauDefViewModel(db.Taches.Include("Creneaux.CreneauDef").First(s => s.Id == id), db.JourEvenements.Include("CreneauDefs")); return(View(newVm)); } return(View(vm)); }
public void InitializeCleanUp() { //Clean using (var ctx = new FestivArtsContext()) { List <Planning> plans = ctx.Plannings.Where(s => s.Nom.StartsWith("TUImportExport")).ToList(); foreach (var p in plans) { ctx.Affectations.RemoveRange(p.Affectations); ctx.Plannings.Remove(p); ctx.SaveChanges(); } } }
public ActionResult Index(ImportViewModel vm) { if (ModelState.IsValid && Request.Files.Count == 1) { using (var workbook = new XLWorkbook(Request.Files[0].InputStream)) { Planning p; if (!string.IsNullOrWhiteSpace(vm.NewNom)) { p = new Planning() { Date = DateTime.Now, Nom = vm.NewNom }; db.Plannings.Add(p); db.SaveChanges(); } else { p = db.Plannings.First(s => s.Id == vm.PlanningId); } try { ImportExcelUtil.ImportPlanning(p, db, workbook); vm.LastPlanningId = p.Id; } catch (ImportException ex) { ModelState.AddModelError("NewNom", ex.Message); } } } vm.Jours = db.JourEvenements.ToList(); return(View(vm)); }
private static void ImportTache(IXLWorksheet sheet, ref int line, Tache t, JourEvenement jour, Planning p, FestivArtsContext ctx) { IXLRow timeRow = sheet.Row(line); line++; int maxB = t.GetMaxBenevoleByDay(jour.Id); Regex regex = new Regex("^([0-9]+)"); var aAjouter = new Dictionary <int, HashSet <int> >(); for (int l = 0; l < maxB; l++) { IXLRow r = sheet.Row(line); int i = ExcelUtils.FIRST_PLAN_COLUMN; foreach (CreneauDef d in jour.CreneauDefs.OrderBy(s => s.NoCreneau)) { var cell = r.Cell(i); string benStr = cell.Value.ToString(); if (!string.IsNullOrWhiteSpace(benStr)) { var m = regex.Match(benStr.Trim()); if (m.Success) { int id = int.Parse(m.Groups[0].Captures[0].Value); var b = ctx.Benevoles.FirstOrDefault(s => s.Id == id); if (b == null) { throw new ImportException(string.Format("Cell ({0}) Tache {1} : n° de bénévole introuvable : {2}'", cell.Address.ToStringRelative(true), t.Nom, benStr)); } var c = t.Creneaux.FirstOrDefault(s => s.CreneauDefId == d.Id); if (c == null) { throw new ImportException(string.Format("Cell ({0}) Tache {1} : creneau introuvable. Creneau def {2}'", cell.Address.ToStringRelative(true), t.Nom, d.Id)); } if (!aAjouter.ContainsKey(b.Id)) { aAjouter.Add(b.Id, new HashSet <int>()); } if (!aAjouter[b.Id].Contains(c.Id)) { aAjouter[b.Id].Add(c.Id); } } else { throw new ImportException(string.Format("Cell ({0}) ne correspond pas a un n° de bénévole : {1}'", cell.Address.ToStringRelative(true), benStr)); } } i++; } line++; } if (aAjouter.Count > 0) { var anciensA = ctx.Affectations.Where(s => s.Creneau.CreneauDef.JourId == jour.Id && s.PlanningId == p.Id && s.Creneau.TacheId == t.Id).ToList(); foreach (Affectation a in anciensA) { if (aAjouter.ContainsKey(a.BenevoleId) && aAjouter[a.BenevoleId].Contains(a.CreneauId)) { //L'affectation existait déjà, on ne fait rien aAjouter[a.BenevoleId].Remove(a.CreneauId); } else { //N'existe plus, on la supprime; ctx.Affectations.Remove(a); } } foreach (var kv in aAjouter.Where(s => s.Value.Count > 0).ToList()) { foreach (var v in kv.Value) { Affectation a = new Affectation() { BenevoleId = kv.Key, CreneauId = v, PlanningId = p.Id }; ctx.Affectations.Add(a); } } ctx.SaveChanges(); } }
public void ImportExport() { //Creation des données using (var ctx = new FestivArtsContext()) { Planning p = new Planning() { Date = DateTime.Now, Nom = "TUImportExport" }; Planning p2 = new Planning() { Date = DateTime.Now, Nom = "TUImportExportResult" }; ctx.Plannings.Add(p); ctx.Plannings.Add(p2); ctx.SaveChanges(); int i = 0, j = 0; var benevoles = ctx.Benevoles.ToList(); foreach (var c in ctx.Creneaux.ToList()) { foreach (var b in benevoles) { var a = new Affectation() { BenevoleId = b.Id, PlanningId = p.Id, CreneauId = c.Id }; if (j < c.NbBenevoleMax) { ctx.Affectations.Add(a); } else { break; } j++; } i++; j = 0; ctx.SaveChanges(); } Assert.AreEqual(ctx.Creneaux.Sum(s => s.NbBenevoleMax), p.Affectations.Count); } //Génération exel var workbooks = new Dictionary <int, Stream>(); using (var ctx = new FestivArtsContext()) { Planning p = ctx.Plannings.First(s => s.Nom == "TUImportExport"); foreach (var jour in ctx.JourEvenements) { workbooks.Add(jour.Id, new MemoryStream()); var wb = new XLWorkbook(); ExcelUtils.FillPlanning(wb, ctx, jour, p); wb.SaveAs(workbooks[jour.Id]); workbooks[jour.Id].Position = 0; } } foreach (var k in workbooks.Keys) { //Import using (var ctx = new FestivArtsContext()) { Planning p = ctx.Plannings.First(s => s.Nom == "TUImportExportResult"); var wb = new XLWorkbook(workbooks[k]); ImportExcelUtil.ImportPlanning(p, ctx, wb); } } //Assert using (var ctx = new FestivArtsContext()) { Planning p = ctx.Plannings.Include("Affectations.Creneau.CreneauDef").First(s => s.Nom == "TUImportExport"); Planning pres = ctx.Plannings.Include("Affectations.Creneau.CreneauDef").First(s => s.Nom == "TUImportExportResult"); Dictionary <int, List <Affectation> > affectationByDay = new Dictionary <int, List <Affectation> >(); Dictionary <int, List <Affectation> > affectationResultByDay = new Dictionary <int, List <Affectation> >(); foreach (int i in ctx.JourEvenements.Select(s => s.Id)) { affectationByDay.Add(i, new List <Affectation>()); affectationResultByDay.Add(i, new List <Affectation>()); } p.Affectations.ForEach(s => affectationByDay[s.Creneau.CreneauDef.JourId].Add(s)); pres.Affectations.ForEach(s => affectationResultByDay[s.Creneau.CreneauDef.JourId].Add(s)); foreach (var j in ctx.JourEvenements) { try { Assert.AreEqual(affectationByDay[j.Id].Count, affectationResultByDay[j.Id].Count); } catch (AssertFailedException) { var wb = new XLWorkbook(workbooks[j.Id]); wb.SaveAs(@"D:\testResult\" + j.Nom + ".xlsx"); wb = new XLWorkbook(); ExcelUtils.FillPlanning(wb, ctx, j, pres); wb.SaveAs(@"D:\testResult\" + j.Nom + "_res.xlsx"); throw; } } Assert.AreEqual(p.Affectations.Count, pres.Affectations.Count); foreach (var a in p.Affectations) { Assert.AreEqual(1, pres.Affectations.Count(s => s.BenevoleId == a.BenevoleId && s.CreneauId == a.CreneauId)); } } }