コード例 #1
0
ファイル: EmployeRepository.cs プロジェクト: mpoincare/Paroll
        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);
                    }
                }
            }
        }
コード例 #2
0
ファイル: EmployeRepository.cs プロジェクト: mpoincare/Paroll
        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);
                    }
                }
            }
        }