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"));
        }
Example #2
0
        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));
        }
Example #4
0
        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));
        }
Example #5
0
        // 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"));
        }
Example #6
0
        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));
        }
Example #7
0
 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();
         }
     }
 }
Example #8
0
        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));
        }
Example #9
0
        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();
            }
        }
Example #10
0
        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));
                }
            }
        }