/// <summary>
        /// Surcharge de la méthode save pour mettre a jour les valeurs conditionnées
        /// </summary>
        protected override void Save(bool forceSave, bool withHisto)
        {
            if (SelectedEntity != null && SelectedEntity is EqLiaisonInterne)
            {
                if (!((EqLiaisonInterne)SelectedEntity).PresenceTelemesure)
                {
                    ((EqLiaisonInterne)SelectedEntity).DateMiseEnServiceTelemesure = null;
                }
            }

            //gestion de la liaison inter EE
            bool liaisonInterEe = ((EqLiaisonInterne)this.SelectedEntity).LiaisonInterEe;
            if (liaisonInterEe != LiaisonInterEeBeforeChange)
            {
                if (liaisonInterEe)
                {
                    //on ajoute son doublon
                    EqLiaisonInterne principale = this.SelectedEntity as EqLiaisonInterne;
                    EqLiaisonInterne liaisonInt = new EqLiaisonInterne();
                    if (principale.EqLiaisonInterne2 != null)
                    {
                        liaisonInt = principale.EqLiaisonInterne2;
                    }
                    liaisonInt.ClePp = principale.ClePp2;
                    liaisonInt.ClePp2 = principale.ClePp;
                    liaisonInt.CleTypeEq = principale.CleTypeEq;
                    liaisonInt.CleTypeLiaison = principale.CleTypeLiaison;
                    liaisonInt.CleUtilisateur = CurrentUser.CleUtilisateur;
                    liaisonInt.Commentaire = principale.Commentaire;
                    liaisonInt.DateMajCommentaire = null;
                    liaisonInt.DateMajEquipement = DateTime.Now;
                    liaisonInt.DateMiseEnService = principale.DateMiseEnService;
                    liaisonInt.DateMiseEnServiceTelemesure = principale.DateMiseEnServiceTelemesure;
                    liaisonInt.LiaisonInterEe = true;
                    liaisonInt.LibellePointCommun = principale.LibellePointCommun;
                    liaisonInt.PresenceTelemesure = principale.PresenceTelemesure;
                    if (principale.EqLiaisonInterne2 == null)
                    {
                        liaisonInt.Libelle = string.Format("LIEE - {0} - 2", this.SelectedEntity.Libelle);
                        this.SelectedEntity.Libelle = string.Format("LIEE - {0} - 1", this.SelectedEntity.Libelle);
                        //on créer le lien entre les deux liaison
                        ((EqLiaisonInterne)this.SelectedEntity).EqLiaisonInterne2 = liaisonInt;

                    }

                    if (!this.SelectedEntity.IsNew)
                    {
                        liaisonInt.EqLiaisonInterne2 = (EqLiaisonInterne)this.SelectedEntity;
                    }

                    base.Save(forceSave, withHisto);
                }
                else
                {
                    EqLiaisonInterne li = (EqLiaisonInterne)this.SelectedEntity;
                    //On renomme la liaison actuelle
                    this.SelectedEntity.Libelle = li.LibellePrincipaleRemove;

                    //on supprime la liaison associé
                    ((EqEquipementService)this.service).CanPhysicalDeleteByEquipement(li.CleLiaisonInterEe.Value,
                        (error, canPhysicalDelete) =>
                        {
                            if (canPhysicalDelete)
                            {
                                service.Delete(li.EqLiaisonInterne2);
                            }
                            else
                            {
                                li.EqLiaisonInterne2.CleLiaisonInterEe = null;
                                li.EqLiaisonInterne2.LiaisonInterEe = false;
                                li.EqLiaisonInterne2.Supprime = true;
                                li.EqLiaisonInterne2.DateMajEquipement = DateTime.Now;

                                foreach (EqRaccordIsolant ri in li.EqLiaisonInterne2.EqRaccordIsolant1)
                                {
                                    ri.CleLiaison = null;
                                }

                                this.LogOuvrage("S", li.EqLiaisonInterne2);
                            }

                            //On supprime le lien vers la seconde liaison interne
                            li.CleLiaisonInterEe = null;
                            li.LiaisonInterEe = false;

                            base.Save(forceSave, withHisto);
                        }
                    );
                }

            }
            else
            {
                base.Save(forceSave, withHisto);
            }
        }
        private void GenererJeuTestOuvrage()
        {
            string MonSuffixe = " " + OuvrageSuffixe01;

            // Création d'un ensemble électrique
            EnsembleElectrique EnsElecToAdd = new EnsembleElectrique()
                {
                    Libelle = "GOP - EnsElecTest" + MonSuffixe,
                    EnumPeriodiciteNullable = 27
                };

            // Ajout de l'ensemble électrique au service
            ServiceEnsElectrique.Add(EnsElecToAdd);

            // Création de 2 portions intégrités
            PortionIntegrite PIToAdd01 = new PortionIntegrite()
                {
                    Code = "TestPI01",
                    DateMiseEnService = DateTime.Now,
                    Libelle = "GOP - Portion01Test" + MonSuffixe,
                    CleDiametre = 21,
                    CleRevetement = 14,
                    DateMajCommentaire = DateTime.Now
                };
            PortionIntegrite PIToAdd02 = new PortionIntegrite()
                {
                    Code = "TestPI02",
                    DateMiseEnService = DateTime.Now,
                    DateMajCommentaire = DateTime.Now,
                    Libelle = "GOP - Portion02Test" + MonSuffixe,
                    CleDiametre = 21,
                    CleRevetement = 14
                };

            EnsElecToAdd.PortionIntegrite.Add(PIToAdd01);
            EnsElecToAdd.PortionIntegrite.Add(PIToAdd02);

            // Ajout d'un secteur sur chaque portion
            PiSecteurs PISToPortion01 = new PiSecteurs()
                {
                    CleSecteur = 55
                };

            PiSecteurs PISToPortion02 = new PiSecteurs()
                {
                    CleSecteur = 56
                };

            PIToAdd01.PiSecteurs.Add(PISToPortion01);
            PIToAdd02.PiSecteurs.Add(PISToPortion02);

            // Création d'une PP par portions
            Pp PpToPortion01 = new Pp()
                {
                    Libelle = "GOP - PP01Test" + MonSuffixe,
                    CleNiveauSensibilite = 6,
                    CleCategoriePp = 21,
                    PkNullable = 1,
                    CleSecteur = 55,
                    CleCommune = 21488,
                    CleUtilisateur = 1745,
                    DateMajPp = DateTime.Now
                };
            Pp PpToPortion02 = new Pp()
                {
                    Libelle = "GOP - PP02Test" + MonSuffixe,
                    CleNiveauSensibilite = 6,
                    CleCategoriePp = 21,
                    PkNullable = 1,
                    CleSecteur = 56,
                    CleCommune = 21488,
                    CleUtilisateur = 1745,
                    DateMajPp = DateTime.Now
                };

            PIToAdd01.Pps.Add(PpToPortion01);
            PIToAdd02.Pps.Add(PpToPortion02);

            // Création d'un équipement de chaque type pour chaque PP
            EqSoutirage MonSOToPp01 = new EqSoutirage()
                {
                    Libelle = "GOP - Sourtirage01Test" + MonSuffixe,
                    CleRedresseur = 265,
                    CleDeversoir = 240,
                    DateMiseEnServiceRedresseurNullable = DateTime.Now,
                    TensionReglageNullable = 5,
                    IntensiteReglageNullable = 10,
                    DateControleNullable = DateTime.Now,
                    LongueurDeversoirNullable = 10,
                    CleTypeEq = 2,
                    DateMajEquipement = DateTime.Now
                };
            EqLiaisonExterne MaLEToPp01 = new EqLiaisonExterne()
                {
                    Libelle = "GOP - LiaisonExterne01Test" + MonSuffixe,
                    CleNomTiersAss = 185,
                    TypeFluide = "GAZ",
                    CleTypeLiaison = 21,
                    CleTypeEq = 5,
                    DateMajEquipement = DateTime.Now
                };
            EqDrainage MonDRToPp01 = new EqDrainage()
                {
                    Libelle = "GOP - Drainage01Test" + MonSuffixe,
                    CleTypeDrainage = 246,
                    CleTypeEq = 3,
                    IntensiteMaximaleSupporteeNullable = 12,
                    DateMajEquipement = DateTime.Now
                };
            EqPostegaz MonPGToPp01 = new EqPostegaz()
            {
                Libelle = "GOP - PosteGaz01Test" + MonSuffixe,
                TypePoste = "DP",
                CleTypeEq = 8,
                DateMajEquipement = DateTime.Now
            };
            EqFourreauMetallique MonFMToPp01 = new EqFourreauMetallique()
            {
                Libelle = "GOP - FourreauMetallique01Test" + MonSuffixe,
                CleTypeEq = 7,
                DateMajEquipement = DateTime.Now,
                LongueurNullable = 1
            };
            EqAnodeGalvanique MonAGToPp01 = new EqAnodeGalvanique()
            {
                Libelle = "GOP - AnodeGalvanique01Test" + MonSuffixe,
                CleTypeAnode = 233,
                CleTypeEq = 9,
                DateMajEquipement = DateTime.Now
            };
            EqLiaisonInterne MaLIToPp01 = new EqLiaisonInterne()
            {
                Libelle = "GOP - LiaisonInterbe01Test" + MonSuffixe,
                CleTypeLiaison = 21,
                CleTypeEq = 4,
                DateMajEquipement = DateTime.Now
            };
            MaLIToPp01.Pp2 = PpToPortion02;
            EqRaccordIsolant MonRIToPp01 = new EqRaccordIsolant()
            {
                Libelle = "GOP - RaccordIsolant01Test" + MonSuffixe,
                CleTypeRi = 260,
                EnumEtatElect = 11,
                EnumConfigElectNormale = 16,
                CleTypeLiaison = 251,
                CleTypeEq = 11,
                DateMajEquipement = DateTime.Now
            };
            EqPile MaPIToPp01 = new EqPile()
            {
                Libelle = "GOP - Pile01Test" + MonSuffixe,
                CleCaracteristiquePile = 22,
                CleTypeDeversoir = 235,
                CleTypeEq = 12,
                DateMajEquipement = DateTime.Now
            };
            EqTiersCroiseSansLiaison MaTCToPp01 = new EqTiersCroiseSansLiaison()
            {
                Libelle = "GOP - TiersCroisé01Test" + MonSuffixe,
                CleTypeEq = 6,
                DateMajEquipement = DateTime.Now
            };
            EqDispoEcoulementCourantsAlternatifs MonDEToPp01 = new EqDispoEcoulementCourantsAlternatifs()
            {
                Libelle = "GOP - DispEcoulement01Test" + MonSuffixe,
                CapaciteCondensateurNullable = 16000,
                CleTypePriseDeTerre = 257,
                CleTypeEq = 10,
                DateMajEquipement = DateTime.Now
            };

            PpToPortion01.EqEquipement.Add(MonSOToPp01);
            PpToPortion01.EqEquipement.Add(MaLEToPp01);
            PpToPortion01.EqEquipement.Add(MonDRToPp01);
            PpToPortion01.EqEquipement.Add(MonPGToPp01);
            PpToPortion01.EqEquipement.Add(MonFMToPp01);
            PpToPortion01.EqEquipement.Add(MonAGToPp01);
            PpToPortion01.EqEquipement.Add(MaLIToPp01);
            PpToPortion01.EqEquipement.Add(MonRIToPp01);
            PpToPortion01.EqEquipement.Add(MaPIToPp01);
            PpToPortion01.EqEquipement.Add(MaTCToPp01);
            PpToPortion01.EqEquipement.Add(MonDEToPp01);

            EqLiaisonExterne MaLE2ToPp01 = new EqLiaisonExterne()
            {
                Libelle = "GOP - LiaisonExterneDelete01Test" + MonSuffixe,
                CleNomTiersAss = 185,
                TypeFluide = "GAZ",
                CleTypeLiaison = 21,
                CleTypeEq = 5,
                DateMajEquipement = DateTime.Now,
                Supprime = true
            };
            EqDrainage MonDR2ToPp01 = new EqDrainage()
            {
                Libelle = "GOP - DrainageDelete01Test" + MonSuffixe,
                CleTypeDrainage = 246,
                CleTypeEq = 3,
                IntensiteMaximaleSupporteeNullable = 12,
                DateMajEquipement = DateTime.Now,
                Supprime = true
            };

            PpToPortion01.EqEquipement.Add(MaLE2ToPp01);
            PpToPortion01.EqEquipement.Add(MonDR2ToPp01);

            // ---------------------------------------------------------------------

            EqSoutirage MonSOToPp02 = new EqSoutirage()
            {
                Libelle = "GOP - Sourtirage02Test" + MonSuffixe,
                CleRedresseur = 265,
                CleDeversoir = 240,
                DateMiseEnServiceRedresseurNullable = DateTime.Now,
                TensionReglageNullable = 5,
                IntensiteReglageNullable = 10,
                DateControleNullable = DateTime.Now,
                LongueurDeversoirNullable = 10,
                CleTypeEq = 2,
                DateMajEquipement = DateTime.Now
            };
            EqLiaisonExterne MaLEToPp02 = new EqLiaisonExterne()
            {
                Libelle = "GOP - LiaisonExterne02Test" + MonSuffixe,
                CleNomTiersAss = 185,
                TypeFluide = "GAZ",
                CleTypeLiaison = 21,
                CleTypeEq = 5,
                DateMajEquipement = DateTime.Now
            };
            EqDrainage MonDRToPp02 = new EqDrainage()
            {
                Libelle = "GOP - Drainage02Test" + MonSuffixe,
                CleTypeDrainage = 246,
                IntensiteMaximaleSupporteeNullable = 12,
                CleTypeEq = 3,
                DateMajEquipement = DateTime.Now
            };
            EqPostegaz MonPGToPp02 = new EqPostegaz()
            {
                Libelle = "GOP - PosteGaz02Test" + MonSuffixe,
                TypePoste = "DP",
                CleTypeEq = 8,
                DateMajEquipement = DateTime.Now
            };
            EqFourreauMetallique MonFMToPp02 = new EqFourreauMetallique()
            {
                Libelle = "GOP - FourreauMetallique02Test" + MonSuffixe,
                CleTypeEq = 7,
                DateMajEquipement = DateTime.Now,
                LongueurNullable = 1
            };
            EqAnodeGalvanique MonAGToPp02 = new EqAnodeGalvanique()
            {
                Libelle = "GOP - AnodeGalvanique02Test" + MonSuffixe,
                CleTypeAnode = 233,
                CleTypeEq = 9,
                DateMajEquipement = DateTime.Now
            };
            EqLiaisonInterne MaLIToPp02 = new EqLiaisonInterne()
            {
                Libelle = "GOP - LiaisonInterbe02Test" + MonSuffixe,
                CleTypeLiaison = 21,
                CleTypeEq = 4,
                DateMajEquipement = DateTime.Now
            };
            MaLIToPp02.Pp2 = PpToPortion02;

            EqRaccordIsolant MonRIToPp02 = new EqRaccordIsolant()
            {
                Libelle = "GOP - RaccordIsolant02Test" + MonSuffixe,
                CleTypeRi = 260,
                EnumEtatElect = 11,
                EnumConfigElectNormale = 16,
                CleTypeLiaison = 251,
                CleTypeEq = 11,
                DateMajEquipement = DateTime.Now
            };
            EqPile MaPIToPp02 = new EqPile()
            {
                Libelle = "GOP - Pile02Test" + MonSuffixe,
                CleCaracteristiquePile = 22,
                CleTypeDeversoir = 235,
                CleTypeEq = 12,
                DateMajEquipement = DateTime.Now
            };
            EqTiersCroiseSansLiaison MaTCToPp02 = new EqTiersCroiseSansLiaison()
            {
                Libelle = "GOP - TiersCroisé02Test" + MonSuffixe,
                CleTypeEq = 6,
                DateMajEquipement = DateTime.Now
            };
            EqDispoEcoulementCourantsAlternatifs MonDEToPp02 = new EqDispoEcoulementCourantsAlternatifs()
            {
                Libelle = "GOP - DispEcoulement02Test" + MonSuffixe,
                CapaciteCondensateurNullable = 16000,
                CleTypePriseDeTerre = 257,
                CleTypeEq = 10,
                DateMajEquipement = DateTime.Now
            };

            PpToPortion02.EqEquipement.Add(MonSOToPp02);
            PpToPortion02.EqEquipement.Add(MaLEToPp02);
            PpToPortion02.EqEquipement.Add(MonDRToPp02);
            PpToPortion02.EqEquipement.Add(MonPGToPp02);
            PpToPortion02.EqEquipement.Add(MonFMToPp02);
            PpToPortion02.EqEquipement.Add(MonAGToPp02);
            PpToPortion02.EqEquipement.Add(MaLIToPp02);
            PpToPortion02.EqEquipement.Add(MonRIToPp02);
            PpToPortion02.EqEquipement.Add(MaPIToPp02);
            PpToPortion02.EqEquipement.Add(MaTCToPp02);
            PpToPortion02.EqEquipement.Add(MonDEToPp02);

            EqLiaisonExterne MaLE2ToPp02 = new EqLiaisonExterne()
            {
                Libelle = "GOP - LiaisonExterneDelete01Test" + MonSuffixe,
                CleNomTiersAss = 185,
                TypeFluide = "GAZ",
                CleTypeLiaison = 21,
                CleTypeEq = 5,
                DateMajEquipement = DateTime.Now,
                Supprime = true
            };
            EqDrainage MonDR2ToPp02 = new EqDrainage()
            {
                Libelle = "GOP - DrainageDelete02Test" + MonSuffixe,
                CleTypeDrainage = 246,
                CleTypeEq = 3,
                IntensiteMaximaleSupporteeNullable = 12,
                DateMajEquipement = DateTime.Now,
                Supprime = true
            };

            PpToPortion01.EqEquipement.Add(MaLE2ToPp02);
            PpToPortion01.EqEquipement.Add(MonDR2ToPp02);

            // Sauvegarde
            ServiceEnsElectrique.SaveChanges(error =>
            {
                if (error != null)
                {
                    ErrorWindow.CreateNew("Erreur");
                }
                else
                {
                    InfoWindow.CreateNew("Le jeu de test a bien été créé.");
                }

            });
        }
 /// <summary>
 /// Créez un nouvel objet EqLiaisonInterne.
 /// </summary>
 /// <param name="cleEquipement">Valeur initiale de la propriété CleEquipement.</param>
 /// <param name="clePp">Valeur initiale de la propriété ClePp.</param>
 /// <param name="cleTypeEq">Valeur initiale de la propriété CleTypeEq.</param>
 /// <param name="libelle">Valeur initiale de la propriété Libelle.</param>
 /// <param name="supprime">Valeur initiale de la propriété Supprime.</param>
 /// <param name="dateMajEquipement">Valeur initiale de la propriété DateMajEquipement.</param>
 /// <param name="clePp2">Valeur initiale de la propriété ClePp2.</param>
 /// <param name="cleTypeLiaison">Valeur initiale de la propriété CleTypeLiaison.</param>
 /// <param name="liaisonInterEe">Valeur initiale de la propriété LiaisonInterEe.</param>
 /// <param name="presenceTelemesure">Valeur initiale de la propriété PresenceTelemesure.</param>
 public static EqLiaisonInterne CreateEqLiaisonInterne(global::System.Int32 cleEquipement, global::System.Int32 clePp, global::System.Int32 cleTypeEq, global::System.String libelle, global::System.Boolean supprime, global::System.DateTime dateMajEquipement, global::System.Int32 clePp2, global::System.Int32 cleTypeLiaison, global::System.Boolean liaisonInterEe, global::System.Boolean presenceTelemesure)
 {
     EqLiaisonInterne eqLiaisonInterne = new EqLiaisonInterne();
     eqLiaisonInterne.CleEquipement = cleEquipement;
     eqLiaisonInterne.ClePp = clePp;
     eqLiaisonInterne.CleTypeEq = cleTypeEq;
     eqLiaisonInterne.Libelle = libelle;
     eqLiaisonInterne.Supprime = supprime;
     eqLiaisonInterne.DateMajEquipement = dateMajEquipement;
     eqLiaisonInterne.ClePp2 = clePp2;
     eqLiaisonInterne.CleTypeLiaison = cleTypeLiaison;
     eqLiaisonInterne.LiaisonInterEe = liaisonInterEe;
     eqLiaisonInterne.PresenceTelemesure = presenceTelemesure;
     return eqLiaisonInterne;
 }