using CD67.FicheCollege.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; namespace CD67.FicheCollege.Factory { public partial class ActionEduFactory : Internal.BaseFactory { public override IQueryable getAll() { return base.getAll("Ordre"); } public void Up(ref Entity.ActionEdu item) { int ordre = item.Ordre; //Cas de sortie immédiate if (item.Ordre == 1) return; Entity.ActionEdu itemToSubstitute = dbContext.ActionsEdu.Where(i => i.Ordre == ordre - 1).First(); itemToSubstitute.Ordre += 1; item.Ordre -= 1; dbContext.SaveChanges(); } public void Down(ref Entity.ActionEdu item) { int ordre = item.Ordre; //Cas de sortie immédiate if (item.Ordre == dbContext.ActionsEdu.Max(i => i.Ordre)) return; Entity.ActionEdu itemToSubstitute = dbContext.ActionsEdu.Where(i => i.Ordre == ordre + 1).First(); itemToSubstitute.Ordre -= 1; item.Ordre += 1; dbContext.SaveChanges(); } private void Sort() { int ordre = 1; foreach (Entity.ActionEdu statut in dbContext.ActionsEdu.OrderBy(i => i.Ordre)) { statut.Ordre = ordre++; } dbContext.SaveChanges(); } public override void add(ref Entity.ActionEdu entity) { //Initialisation de l'ordre if (dbContext.ActionsEdu.Count() == 0) entity.Ordre = 1; else entity.Ordre = dbContext.ActionsEdu.Max(i => i.Ordre) + 1; base.add(ref entity); } public override void delete(ref Entity.ActionEdu entity) { base.delete(ref entity); Sort(); } public ActionEdu clone_to_year(ActionEdu actionEdu, int annee_id) { if (base.getAll().Where(a => a.AnneeId == annee_id && a.TokenId == actionEdu.TokenId).Count() > 0) { throw new InvalidOperationException("Cette action éducative existe déjà pour l'année cible"); } ActionEdu clone = new ActionEdu(); // Nouvelle année clone.AnneeId = annee_id; // On reprend les valeurs de tous les autres champs clone.Numero = actionEdu.Numero; clone.Nom = actionEdu.Nom; clone.Montant = actionEdu.Montant; clone.TiersSid = actionEdu.TiersSid; clone.Description = actionEdu.Description; clone.CommentaireInterne = actionEdu.CommentaireInterne; clone.CommentairePublic = actionEdu.CommentairePublic; clone.Neutralise = actionEdu.Neutralise; clone.Ordre = actionEdu.Ordre; clone.ActionEduThematiqueId = actionEdu.ActionEduThematiqueId; clone.TokenId = actionEdu.TokenId; // Recréé les affectations foreach (ActionEduCollege actionEduCollege in actionEdu.ActionsEduColleges) { ActionEduCollege cloneActionEduCollege = new ActionEduCollege(); cloneActionEduCollege.Commentaire = actionEduCollege.Commentaire; cloneActionEduCollege.NbEleves = actionEduCollege.NbEleves; try { cloneActionEduCollege.College = dbContext.Colleges.Where(c => c.TokenId == actionEduCollege.College.TokenId && c.Annee_Id == annee_id).First(); } catch(InvalidOperationException) { throw new InvalidOperationException("Un ou plusieurs collegesaffectés à cette action n'ont pas été créés pour l'année en cours"); } clone.ActionsEduColleges.Add(cloneActionEduCollege); } // enregistre le clone en base base.add(ref clone); return clone; } } }