public void AddEmploye(EmployeDto empDto, IEnumerable <EmployeSalaireDto> empSalairesDto, IEnumerable <CongeDto> congesDto, IEnumerable <EmployePrelevementDto> empPrelDto) { //Ajouter un nouvel employé avec son ou ses salaires,ses congés et ses prélèvements var emp = new Employe(); emp.AdresseRue1 = empDto.AdresseRue1; emp.AdresseRue2 = empDto.AdresseRue2; emp.AdresseVille = empDto.AdresseVille; emp.Cin = empDto.CIN; emp.CompagnieID = empDto.CompagnieID; emp.DateEmbauche = empDto.DateEmbauche; emp.DateNaissance = empDto.DateNaissance; emp.DepartementID = empDto.DepartementID; emp.Email = empDto.Email; emp.Extension = empDto.Extension; emp.ModifiePar = empDto.ModifiePar; emp.Nif = empDto.NIF; emp.Nom = empDto.Nom; emp.NumeroEmploye = empDto.NumeroEmploye; emp.Phone1 = empDto.Phone1; emp.Phone2 = empDto.Phone2; emp.PosteID = empDto.PosteID; emp.Prenom = empDto.Prenom; emp.Sexe = empDto.Sexe; emp.StatutEmployeID = empDto.StatutEmployeID; emp.StatutMatrimonialID = empDto.StatutMatrimonialID; emp.TypeEmployeID = empDto.TypeEmployeID; foreach (EmployeSalaireDto salDto in empSalairesDto) { var sal = new EmployeSalaire(); sal.BanqueID = salDto.BanqueID; sal.BonusFinAnnee = salDto.BonusFinAnnee; sal.CompteBancaire = salDto.CompteBancaire; sal.HeureSupPaye = salDto.HeureSupPaye; sal.ModifiePar = salDto.ModifiePar; sal.MonnaieID = salDto.MonnaieID; sal.Salaire = salDto.Salaire; sal.TypePaiementID = salDto.TypePaiementID; sal.TypeSalaireID = salDto.TypeSalaireID; emp.EmployeSalaires.Add(sal); } foreach (CongeDto congDto in congesDto) { var cong = new Conge(); cong.AccumulableParAnnee = congDto.AccumulableParAnnee; cong.IncrementableParMois = congDto.IncrementableParMois; cong.JourBalance = congDto.JourBalance; cong.JourParAnnee = congDto.JourParAnnee; cong.ModifiePar = congDto.ModifiePar; cong.TypeCongeID = congDto.TypeCongeID; emp.Conges.Add(cong); } foreach (EmployePrelevementDto prelDto in empPrelDto) { var prel = new EmployePrelevement(); prel.PrelevementID = prelDto.PrelevementID; prel.TypePeriodeID = prelDto.TypePeriodeID; prel.TypeSalaireID = prelDto.TypeSalaireID; prel.Pourcentage = prelDto.Pourcentage; emp.EmployePrelevements.Add(prel); } try { //ajouter les informations du nouvel employé au context et sauvegarder using (var context = new PayrollEntities()) { context.Employes.Add(emp); context.SaveChanges(); } } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } } }
public void UpdateEmploye(EmployeDto empDto, IEnumerable <EmployeSalaireDto> empSalairesDto, IEnumerable <CongeDto> congesDto, IEnumerable <EmployePrelevementDto> empPrelDto) { //Mettre à jour les informations d'un employé existant y compris ses salaires,ses congés et ses prélèvements //Attention: la mise à jour peut occasionner à des insertions, des suppressions et des mises à jour //Copier les données des Dto dans des Entity Objects var emp = new Employe(); emp.EmployeID = empDto.EmployeID; emp.AdresseRue1 = empDto.AdresseRue1; emp.AdresseRue2 = empDto.AdresseRue2; emp.AdresseVille = empDto.AdresseVille; emp.Cin = empDto.CIN; emp.CompagnieID = empDto.CompagnieID; emp.DateEmbauche = empDto.DateEmbauche; emp.DateNaissance = empDto.DateNaissance; emp.DepartementID = empDto.DepartementID; emp.Email = empDto.Email; emp.Extension = empDto.Extension; emp.ModifiePar = empDto.ModifiePar; emp.Nif = empDto.NIF; emp.Nom = empDto.Nom; emp.NumeroEmploye = empDto.NumeroEmploye; emp.Phone1 = empDto.Phone1; emp.Phone2 = empDto.Phone2; emp.PosteID = empDto.PosteID; emp.Prenom = empDto.Prenom; emp.Sexe = empDto.Sexe; emp.StatutEmployeID = empDto.StatutEmployeID; emp.StatutMatrimonialID = empDto.StatutMatrimonialID; emp.TypeEmployeID = empDto.TypeEmployeID; foreach (EmployeSalaireDto salDto in empSalairesDto) { var sal = new EmployeSalaire(); sal.BanqueID = salDto.BanqueID; sal.BonusFinAnnee = salDto.BonusFinAnnee; sal.CompteBancaire = salDto.CompteBancaire; sal.HeureSupPaye = salDto.HeureSupPaye; sal.ModifiePar = salDto.ModifiePar; sal.MonnaieID = salDto.MonnaieID; sal.Salaire = salDto.Salaire; sal.TypePaiementID = salDto.TypePaiementID; sal.TypeSalaireID = salDto.TypeSalaireID; emp.EmployeSalaires.Add(sal); } foreach (CongeDto congDto in congesDto) { var cong = new Conge(); cong.AccumulableParAnnee = congDto.AccumulableParAnnee; cong.IncrementableParMois = congDto.IncrementableParMois; cong.JourBalance = congDto.JourBalance; cong.JourParAnnee = congDto.JourParAnnee; cong.ModifiePar = congDto.ModifiePar; cong.TypeCongeID = congDto.TypeCongeID; emp.Conges.Add(cong); } foreach (EmployePrelevementDto prelDto in empPrelDto) { var prel = new EmployePrelevement(); prel.PrelevementID = prelDto.PrelevementID; prel.TypePeriodeID = prelDto.TypePeriodeID; prel.TypeSalaireID = prelDto.TypeSalaireID; prel.Pourcentage = prelDto.Pourcentage; emp.EmployePrelevements.Add(prel); } //Construire le "object graph" détaché de l'employé à mettre à jour try { //Mettre à jour, insérer ou supprimmer les données using (var context = new PayrollEntities()) { // Charger les données de l'employé se trouvant dans la base avec ses congés, ses prélevements et ses salaires Employe existingEmp = context.Employes .Where(e => e.EmployeID == emp.EmployeID) .Include(e => e.Conges) .Include(e => e.EmployePrelevements) .Include(e => e.EmployeSalaires) .FirstOrDefault(); // Si l'employé a été trouvé, procéder à la mise à jour des ses données personnelles et annexes if (existingEmp != null) { // ***Mettre à jour les données personnelles de l'employé*** var empEntry = context.Entry(existingEmp); empEntry.CurrentValues.SetValues(emp); // ***Mettre à jour les salaires de l'employé*** // Créer une instance du comparateur pour les salaires EmployeSalaireEqualityComparer empSalEqC = new EmployeSalaireEqualityComparer(); // Chercher les nouvellement ajoutés var addedEmpSals = emp.EmployeSalaires.Except(existingEmp.EmployeSalaires, empSalEqC); // Chercher les supprimés var deletedEmpSals = existingEmp.EmployeSalaires.Except(emp.EmployeSalaires, empSalEqC); // Chercher les mis à jour var modifiedEmpSals = emp.EmployeSalaires.Except(addedEmpSals, empSalEqC); // Marquer tous les ajouts comme tels dans le contexte addedEmpSals.ToList().ForEach(sal => context.Entry(sal).State = System.Data.EntityState.Added); // Marquer toutes les suppressions comme telles dans le contexte deletedEmpSals.ToList().ForEach(sal => context.Entry(sal).State = System.Data.EntityState.Deleted); // Mettre à jour les propriétés modifiées par le client foreach (EmployeSalaire epS in modifiedEmpSals) { var existingEmpSal = context.EmployeSalaires.Where(e => e.EmployeID == epS.EmployeID && e.TypeSalaireID == epS.TypeSalaireID); if (existingEmpSal != null) { var empSalEntry = context.Entry(existingEmpSal); empSalEntry.CurrentValues.SetValues(epS); } } // ***Mettre à jour les congés de l'employé*** // Créer une instance du comparateur pour les congés CongeEqualityComparer CongEqC = new CongeEqualityComparer(); // Chercher les nouvellement ajoutés var addedCongs = emp.Conges.Except(existingEmp.Conges, CongEqC); // Chercher les supprimés var deletedCongs = existingEmp.Conges.Except(emp.Conges, CongEqC); // Chercher les mis à jour var modifiedCongs = emp.Conges.Except(addedCongs, CongEqC); // Marquer tous les ajouts comme tels dans le contexte addedCongs.ToList().ForEach(sal => context.Entry(sal).State = System.Data.EntityState.Added); // Marquer toutes les suppressions comme telles dans le contexte deletedCongs.ToList().ForEach(sal => context.Entry(sal).State = System.Data.EntityState.Deleted); // Mettre à jour les propriétés modifiées par le client foreach (Conge epS in modifiedCongs) { var existingCong = context.Conges.Where(e => e.EmployeID == epS.EmployeID && e.TypeCongeID == epS.TypeCongeID); if (existingCong != null) { var CongEntry = context.Entry(existingCong); CongEntry.CurrentValues.SetValues(epS); } } // ***Mettre à jour les prélèvements de l'employé*** // Créer une instance du comparateur pour les prélèvements EmployePrelevementEqualityComparer EmpPrelEqC = new EmployePrelevementEqualityComparer(); // Chercher les nouvellement ajoutés var addedEmpPrels = emp.EmployePrelevements.Except(existingEmp.EmployePrelevements, EmpPrelEqC); // Chercher les supprimés var deletedEmpPrels = existingEmp.EmployePrelevements.Except(emp.EmployePrelevements, EmpPrelEqC); // Chercher les mis à jour var modifiedEmpPrels = emp.EmployePrelevements.Except(addedEmpPrels, EmpPrelEqC); // Marquer tous les ajouts comme tels dans le contexte addedEmpPrels.ToList().ForEach(sal => context.Entry(sal).State = System.Data.EntityState.Added); // Marquer toutes les suppressions comme telles dans le contexte deletedEmpPrels.ToList().ForEach(sal => context.Entry(sal).State = System.Data.EntityState.Deleted); // Mettre à jour les propriétés modifiées par le client foreach (EmployePrelevement epS in modifiedEmpPrels) { var existingEmpPrel = context.EmployePrelevements .Where(e => e.EmployeID == epS.EmployeID && e.PrelevementID == epS.PrelevementID && e.TypePeriodeID == epS.TypePeriodeID && e.TypeSalaireID == epS.TypeSalaireID); if (existingEmpPrel != null) { var EmpPrelEntry = context.Entry(existingEmpPrel); EmpPrelEntry.CurrentValues.SetValues(epS); } } } } } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } } }