using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace CG67.FicheCollege.Domaine
{
    // pointeurs de fonction, lasy-loading.

    public delegate IList<ActionEducative> dlgLoadActionEducative(string codeRNE, int annee);
    public delegate IList<ClasseDecouverte> dlgLoadClasseDecouverte(string codeRNE, int annee);
    public delegate IList<ATC> dlgLoadATC(string codeRNE);
    public delegate IList<ContratAide> dlgLoadContratAide(string codeRNE);
    public delegate IList<Bilinguisme> dlgLoadBilinguisme(string codeRNE, int annee);
    public delegate Commentaires dlgLoadCommentaires(string codeRNE, int annee);
    public delegate IList<Contact> dlgLoadContact(string codeRNE);
    public delegate Dotation dlgLoadDotation(string codeRNE, int annee);
    public delegate IList<InvestissementDCE> dlgLoadInvestissementDCE(string codeRNE, int annee);
    public delegate IList<Investissement> dlgLoadInvestissement(string codeRNE, int annee);
    public delegate IList<EffectifDetail> dlgLoadEffectifDetail(string codeRNE, int annee);
    public delegate MCG dlgLoadMCG(string codeRNE);
    public delegate Logement dlgLoadLogement(string codeRNE);
    public delegate IList<ProgTravaux> dlgLoadProgTravaux(string codeRNE, int annee);
    public delegate IList<ProjetPilote> dlgLoadProjetPilote(string codeRNE, int annee);
    public delegate Restauration dlgLoadRestauration(string codeRNE, int annee);
    public delegate SoutienScolaireEnLigne dlgLoadSoutienScolaireEnLigne(string codeRNE, int annee);

    [Serializable]    
    public class Etablissement
    {
        #region Propriétés

        #region Loaders
        private dlgLoadActionEducative LoaderActionEducative;
        private dlgLoadClasseDecouverte LoaderClasseDecouverte;
        private dlgLoadATC LoaderATC;
        private dlgLoadContratAide LoaderContratAide;
        private dlgLoadBilinguisme LoaderBilinguisme;
        private dlgLoadCommentaires LoaderCommentaires;
        private dlgLoadContact LoaderContact;
        private dlgLoadDotation LoaderDotation;
        private dlgLoadInvestissementDCE LoaderInvestissementDCE;
        private dlgLoadInvestissement LoaderInvestissement;
        private dlgLoadEffectifDetail LoaderEffectifDetail;
        private dlgLoadMCG LoaderMCG;
        private dlgLoadLogement LoaderLogement;
        private dlgLoadProgTravaux LoaderProgTravaux;
        private dlgLoadProjetPilote LoaderProjetPilote;
        private dlgLoadRestauration LoaderRestauration;
        private dlgLoadSoutienScolaireEnLigne LoaderSoutienScolaireEnLigne;

        #endregion

        /// <summary>
        /// Code RNE de l'établissement.
        /// </summary>
        private string mCodeRNE;
        /// <summary>
        /// annee de generation de la fiche.
        /// </summary>
        private int mAnnee;
        /// annee civil de l'année en cours.
        /// </summary>
        private int mAnneeCivil;
        /// <summary>
        /// Nom de l'établissement.
        /// </summary>
        private string mNom;
        /// <summary>
        /// Type de l'établissement de l'établissement.
        /// </summary>
        private string mTypeEtablissement;
        /// <summary>
        /// Année de contruction de l'établissement.
        /// </summary>
        private int mAnneConstruction;
        /// <summary>
        /// Telephone de l'établissement.
        /// </summary>
        private string mTelephone;
        /// <summary>
        /// E-Mail de l'établissement.
        /// </summary>
        private string mEmail;
        /// <summary>
        /// Fax de l'établissement.
        /// </summary>
        private string mFax;
        /// <summary>
        /// Nom du propriétaire de l'établissement.
        /// </summary>
        private string mNomProprietaire;
        /// <summary>
        /// Valeur théorique ETP (Equivalent Temps Plein) de l'établissement.
        /// </summary>
        private double mValeurETPTheorique;
        /// <summary>
        /// Montant de la réserve monétaire de l'établissement.
        /// </summary>
        private double mReserve;
        /// <summary>
        /// IListe des actions éducatives dont l'établissement participe.
        /// </summary>
        private IList<ClasseDecouverte> mLstClasseDecouverte;
        /// <summary>
        /// IListe des actions éducatives dont l'établissement participe.
        /// </summary>
        private IList<ActionEducative> mLstActionEducatives;
        /// <summary>
        /// IListe des projets pilotes dont l'établissement participe.
        /// </summary>
        private IList<ProjetPilote> mLstProjetPilote;
        /// <summary>
        /// Dotation à l'année N de l'établissement.
        /// </summary>
        private Dotation mDotationAnneeN;
        /// <summary>
        /// Dotation à l'année N - 1 de l'établissement.
        /// </summary>
        private Dotation mDotationAnneeNmoins1;
        /// <summary>
        /// IListe des investissements de l'établissement.
        /// </summary>
        private IList<Investissement> mLstInvestissement;
        /// IListe des effectifs SEGPA l'établissement.
        /// </summary>
        private IList<EffectifDetail> mLstEffectifDetail;
        /// <summary>
        /// IListe du  nombre d'effectif collégien sur les 10 dernières années
        /// </summary>
        private IList<Effectif> mLstEffectif;
        
        /// <summary>
        /// Surface d'emprise de l'établissement
        /// </summary>
        private double mSurface;
        /// <summary>
        /// IListe des années de restructuration
        /// </summary>
        private IList<int> mLstRestructuration;
        /// <summary>
        /// Principal, gesionnaire et conseiller general de l'établissement (Civilité, Nom, Prénom)
        /// </summary>
        private IList<Contact> mContacts;
        /// <summary>
        /// MCG de rattachement de l'établissement
        /// </summary>
        private MCG mMcgRattachement;
        /// <summary>
        /// Logement de fonction
        /// </summary>
        private Logement mLogementFonction;
        /// <summary>
        /// IListe d'ATC
        /// </summary>
        private IList<ATC> mLstATC;
        /// <summary>
        /// IListe des contrats Aidés
        /// </summary>
        private IList<ContratAide> mLstContratAide;
        /// <summary>
        /// IListe des équipements
        /// </summary>
        private IList<InvestissementDCE> mLstInvestissementDCE;
        /// <summary>
        /// Le(s) secteur(s) de recrutement de l'établissement.
        /// </summary>
        private IList<EtablissementRecrutement> mLstSecteurRecrutement;
        /// <summary>
        /// adresse de l'établissement.
        /// </summary>
        private string mAdresse;
        /// <summary>
        /// complément de l'adresse.
        /// </summary>
        private string mComplementAdresse;
        /// <summary>
        /// ville de l'établissement.
        /// </summary>
        private string mVille;
        /// <summary>
        /// Contient les commentaires utiles à différents moments de la fiche.
        /// </summary>
        private Commentaires mCommentairesGeneraux;
        /// <summary>
        /// Liste de travaux de n-1 à n+1
        /// </summary>
        private IList<ProgTravaux> mLstTravaux;
        /// <summary>
        /// objet restauration
        /// </summary>
        private Restauration mRestaurer;
        /// <summary>
        /// objet SoutienScolaireEnligne
        /// </summary>
        private SoutienScolaireEnLigne mSoutienScolaireEnLigne;
        /// <summary>
        /// Bilinguisme
        /// </summary>
        private IList<Bilinguisme> mBilingue;
        /// <summary>
        /// Code postal du l'établissement
        /// </summary>
        private int mCodePostal;
        /// <summary>
        /// Lien vers la photo du collège.
        /// </summary>
        private string mLienPhoto;
        /// <summary>
        /// nombre total de remplacements d'ATC
        /// </summary>
        private int mNbrRemplacementsATC;

        private int mNbrRemplacementsContratAide;

        private bool mIsRestautant;

        private bool mIsInternat;

        private int mEffectifTheorique;

        #endregion

        #region méthodes get/set
        /// <summary>
        /// Obtient ou définit le Code RNE de l'établissement.
        /// </summary>
        public string CodeRNE
        {
            get { return mCodeRNE; }
            set { mCodeRNE = value; }
        }
        /// <summary>
        /// Obtient ou définit le Nom de l'établissement.
        /// </summary>
        public string Nom
        {
            //si le collège n'a pas de nom, on retourne la ville du collège (ex : collège de truchtersheim)
            get 
            {
                if (mNom == string.Empty)
                    return "de " + mVille;
                return mNom;
            }
            set { mNom = value; }
        }
        /// <summary>
        /// Obtient ou définit le Type de l'établissement.
        /// </summary>
        public string TypeEtablissement
        {
            get { return mTypeEtablissement; }
            set { mTypeEtablissement = value; }
        }
        /// <summary>
        /// Obtient ou définit l'année de construction de l'établissement.
        /// </summary>
        public int AnneeConstruction
        {
            get { return mAnneConstruction; }
            set { mAnneConstruction = value; }
        }
        /// <summary>
        /// Obtient ou définit le téléphone de l'établissement.
        /// </summary>
        public string Telephone
        {
            get { return mTelephone; }
            set { mTelephone = value; }
        }
        /// <summary>
        /// Obtient ou définit l'email de l'établissement.
        /// </summary>
        public string Email
        {
            get { return mEmail; }
            set { mEmail = value; }
        }
        /// <summary>
        /// Obtient ou définit le fax de l'établissement.
        /// </summary>
        public string Fax
        {
            get { return mFax; }
            set { mFax = value; }
        }
        /// <summary>
        /// Obtient ou définit le Nom du propriétaire de l'établissement.
        /// </summary>
        public string NomProprietaire
        {
            get { return mNomProprietaire; }
            set { mNomProprietaire = value; }
        }
        /// <summary>
        /// Obtient ou définit la valeur ETP Théorique de l'établissement.
        /// </summary>
        public double ValeurETPTheorique
        {
            get { return mValeurETPTheorique; }
            set { mValeurETPTheorique = value; }
        }
        /// <summary>
        /// Obtient ou définit la réserve monétaire de l'établissement.
        /// </summary>
        public double Reserve
        {
            get { return mReserve; }
            set { mReserve = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe des Classes de découvertes auxquels l'établissement participe.
        /// </summary>
        
        public IList<ClasseDecouverte> LstClasseDecouverte
        {
            get 
            {
                if (mLstClasseDecouverte == null)
                    mLstClasseDecouverte = this.LoaderClasseDecouverte(mCodeRNE, mAnnee);
                return  mLstClasseDecouverte; 
            }
            set { mLstClasseDecouverte = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe des actions éducatives auxquels l'établissement participe.
        /// </summary>

        public IList<ActionEducative> LstActionEducatives
        {
            get
            {
                if (mLstActionEducatives == null)
                    mLstActionEducatives = this.LoaderActionEducative(mCodeRNE, mAnnee);
                return mLstActionEducatives;
            }
            set { mLstActionEducatives = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe des projets pilotes auxquels l'établissement participe.
        /// </summary>
        public IList<ProjetPilote> LstProjetPilote
        {
            get
            {
                if (mLstProjetPilote == null)
                    mLstProjetPilote = this.LoaderProjetPilote(mCodeRNE, mAnnee);
                return mLstProjetPilote;
            }
            set { mLstProjetPilote = value; }
        }
        /// <summary>
        /// Obtient ou définit la dotation à l'année N de l'établissement.
        /// </summary>
        public Dotation DotationAnneeN
        {
            get
            {
                if (mDotationAnneeN == null)
                    mAnneeCivil = System.DateTime.Now.Year;
                    if (System.DateTime.Now.Month > 8)
                        mAnneeCivil += 1;
                     mDotationAnneeN = this.LoaderDotation(mCodeRNE, mAnneeCivil); 
                return mDotationAnneeN;
            }
            set { mDotationAnneeN = value; }
        }
        /// <summary>
        /// Obtient ou définit la dotation à l'année N - 1 de l'établissement.
        /// </summary>
        public Dotation DotationAnneeNmoins1
        {
            get
            {
                if (mDotationAnneeNmoins1 == null)
                    mAnneeCivil = System.DateTime.Now.Year;
                if (System.DateTime.Now.Month > 8)
                    mAnneeCivil += 1;
                mDotationAnneeNmoins1 = this.LoaderDotation(mCodeRNE, mAnneeCivil - 1); 
                return mDotationAnneeNmoins1;
            }
            set { mDotationAnneeNmoins1 = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe des investissements de l'établissement.
        /// </summary>
        public IList<Investissement> LstInvestissement
        {
            get
            {
                if (mLstInvestissement == null)
                    mLstInvestissement = this.LoaderInvestissement(mCodeRNE, mAnnee); 
                return mLstInvestissement;
            }
            set { mLstInvestissement = value; }
        }


        /// <summary>
        /// liste des effectifs de SEGPA, CLA , UPI
        /// </summary>
        public IList<EffectifDetail> LstEffectifDetail
        {
            get
            {
                if (mLstEffectifDetail == null)
                    mLstEffectifDetail = this.LoaderEffectifDetail(mCodeRNE, mAnnee);
                return mLstEffectifDetail;
            }
            set { mLstEffectifDetail = value; }
        }


        /// <summary>
        /// Obtient ou définit la IListe du  nombre d'effectif collégien sur les 10 dernières années
        /// </summary>
        public IList<Effectif> LstEffectif
        {
            get { return mLstEffectif; }
            set { mLstEffectif = value; }
        }
        /// <summary>
        /// Obtient ou définit la surface d'emprise de l'établissement
        /// </summary>
        public double Surface
        {
            get { return mSurface; }
            set { mSurface = value; }
        }
        /// <summary>
        /// Obtient ou définit le IListe des années de restructuration
        /// </summary>
        public IList<int> LstRestructuration
        {
            get { return mLstRestructuration; }
            set { mLstRestructuration = value; }
        }
        /// <summary>
        /// Obtient au définit le principal de l'établissement (Civilité, Nom, Prénom)
        /// </summary>
        public IList<Contact> Contacts
        {
            get {
                if (mContacts == null)
                    mContacts = this.LoaderContact(mCodeRNE); 
                return mContacts; }
            set { mContacts = value; }
        }
        /// <summary>
        /// Obtient ou définit la MCG re rattachement de l'établissement.
        /// </summary>
        public MCG McgRattachement
        {
            get
            {
                if (mMcgRattachement == null)
                    mMcgRattachement = this.LoaderMCG(mCodeRNE); 
                return mMcgRattachement;
            }
            set { mMcgRattachement = value; }
        }
        /// <summary>
        /// Obtient ou définit un objet Logement
        /// </summary>
        public Logement LogementDeFonction
        {
            get
            {
                if (mLogementFonction == null)
                    mLogementFonction = this.LoaderLogement(mCodeRNE); 
                return mLogementFonction;
            }
            set { mLogementFonction = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe d'ATC
        /// </summary>
        public IList<ATC> LstATC
        {
            get
            {
                if (mLstATC == null)
                    mLstATC = this.LoaderATC(mCodeRNE); 
                return mLstATC;
            }
            set { mLstATC = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe d'ATC
        /// </summary>
        public IList<ContratAide> LstContratAide
        {
            get
            {
                if (mLstContratAide == null)
                    mLstContratAide = this.LoaderContratAide(mCodeRNE);
                return mLstContratAide;
            }
            set { mLstContratAide = value; }
        }
        /// <summary>
        /// Obtient ou définit la IListe des équipements obtenus.
        /// </summary>
        public IList<InvestissementDCE> LstInvestissementDCE
        {
            get
            {
                if (mLstInvestissementDCE == null)
                    mLstInvestissementDCE = this.LoaderInvestissementDCE(mCodeRNE, mAnnee);
                return mLstInvestissementDCE;
            }
            set { mLstInvestissementDCE = value; }
        }
        /// <summary>
        /// Obtient ou définit le(s) secteur(s) de recrutement de l'établissement.
        /// </summary>
        public IList<EtablissementRecrutement> LstSecteurRecrutement
        {
            get { return mLstSecteurRecrutement; }
            set { mLstSecteurRecrutement = value; }
        }
        public string Adresse
        {
            get { return mAdresse; }
            set { mAdresse = value; }
        }
        public string ComplementAdresse
        {
            get { return mComplementAdresse; }
            set { mComplementAdresse = value; }
        }
        public string Ville
        {
            get { return mVille; }
            set { mVille = value; }
        }
        public Commentaires CommentaireGeneraux
        {
            get
            {
                if (mCommentairesGeneraux == null)
                    mCommentairesGeneraux = this.LoaderCommentaires(mCodeRNE, mAnnee); 
                return mCommentairesGeneraux;
            }
            set { mCommentairesGeneraux = value; }
        }
        public IList<ProgTravaux> LstTravaux
        {
            get
            {
                if (mLstTravaux == null)
                    mLstTravaux = this.LoaderProgTravaux(mCodeRNE, mAnnee); 
                return mLstTravaux;
            }
            set { mLstTravaux = value; }
        }
        public Restauration Restaurer
        {
            get
            {
                if (mRestaurer == null)
                    mRestaurer = this.LoaderRestauration(mCodeRNE, mAnnee); 
                return mRestaurer;
            }
            set { mRestaurer = value; }
        }
        public SoutienScolaireEnLigne SoutienScolaireLigne
        {
            get
            {
                if (mSoutienScolaireEnLigne == null)
                    mSoutienScolaireEnLigne = this.LoaderSoutienScolaireEnLigne(mCodeRNE, mAnnee);
                return mSoutienScolaireEnLigne;
            }
            set { mSoutienScolaireEnLigne = value; }
        }
        public IList<Bilinguisme> LstBilingue
        {
            get
            {
                if (mBilingue == null)
                    mBilingue = this.LoaderBilinguisme(mCodeRNE, mAnnee);
                return mBilingue;
            }
            set { mBilingue = value; }
        }
        public int CodePostal
        {
            get { return mCodePostal; }
            set { mCodePostal = value; }
        }
        /// <summary>
        /// sera utilisé pour l'affichage sur la première page.
        /// </summary>
        public string NomCollegePourPresentation
        {
            get { return mVille + " - Collège " + Nom; }
        }
        public string LienPhoto
        {
            get { return mLienPhoto; }
            set { mLienPhoto = value; }
        }
        public int NbrRemplacementsATC
        {
            get { return mNbrRemplacementsATC; }
            set { mNbrRemplacementsATC = value; }
        }
        public int NbrRemplacementsContratAide
        {
            get { return mNbrRemplacementsContratAide; }
            set { mNbrRemplacementsContratAide = value; }
        }
        #endregion

        #region autres méthodes
        /// <summary>
        /// retourne le principal de l'établissement
        /// </summary>
        public string Principal
        {
            get
            {
                string retour = string.Empty;
                foreach (Contact cont in Contacts)
                    if (cont.Fonction.ToLower() == "principal")
                        retour = cont.Civilite + " " + Utile.formatStringPrenom(cont.Prenom) + " " + cont.Nom.ToUpper();
                return retour;
            }
        }
        /// <summary>
        /// retourne le gestionnaire de l'établissement
        /// </summary>
        public string Gestionnaire
        {
            get
            {
                string retour = string.Empty;
                foreach (Contact cont in Contacts)
                    if (cont.Fonction.ToLower() == "gestionnaire")
                        retour = cont.Civilite + " " + Utile.formatStringPrenom(cont.Prenom) + " " + cont.Nom.ToUpper();
                return retour;
            }
        }
        /// <summary>
        /// retourne le conseiller general de l'établissement
        /// </summary>
        public string ConseillerGeneral
        {
            get
            {
                string retour = string.Empty;
                foreach (Contact cont in Contacts)
                    if (cont.Fonction.ToLower() == "conseiller général")
                        retour = cont.Civilite + " " + Utile.formatStringPrenom(cont.Prenom) + " " + cont.Nom.ToUpper();
                return retour;
            }
        }
        /// <summary>
        /// retourne la phrase decrivant l'effectif de l'établissement
        /// </summary>
        public string Effectif
        {
            get
            {
                int nbrElevesReel = 0;
               
                //le dernier enregistrement de cette liste est l'effectif actuel.
                foreach (Effectif  effectif in LstEffectif)
                    if (effectif.TypeEffectif == "R")
                        nbrElevesReel = effectif.EffectifTotal;
                
                string retour = nbrElevesReel + " élèves";
                
                return retour;
            }
        }
        /// <summary>
        /// retourne la phrase concernant le(s) restructurations de l'établissement
        /// </summary>
        public string PhraseRestructuration
        {
            get
            {
                string retour = string.Empty;

                foreach (int anneeRestruct in LstRestructuration)
                {
                    if (LstRestructuration.Count == 1)
                    {
                        retour = Convert.ToString(anneeRestruct);
                        break;
                    }
                    else
                    {
                        if (retour == string.Empty)
                            retour = "Plusieurs restructurations lourdes ont été effectuées, les années de celles-ci sont les suivantes : ";
                        retour += "\n - " + anneeRestruct;
                    }

                }
                if (retour == string.Empty)
                    retour = "Néant";
                return retour;
            }
        }
        /// <summary>
        /// retourne le commentaire concernant le(s) aménagement(s) particulier(s) de l'établissement
        /// </summary>
        public string CommentaireAmenagementParticulier
        {
            get
            {
                return CommentaireGeneraux == null ? string.Empty : CommentaireGeneraux.AmenagementsParticuliers;
            }
        }
        /// <summary>
        /// retourne le commentaire concernant la programmation des travaux de l'établissement
        /// </summary>
        public string CommentaireProgTravaux
        {
            get
            {
                return CommentaireGeneraux == null ? string.Empty : CommentaireGeneraux.ProgrammationTravaux;
            }
        }
        /// <summary>
        /// retourne le commentaire concernant le secteur de recrutement de l'établissement
        /// </summary>
        public string CommentaireSecteurRecrutement
        {
            get
            {
                return CommentaireGeneraux == null ? string.Empty : CommentaireGeneraux.SecteurRecrutement;
            }
        }
        /// <summary>
        /// retourne le commentaire concernant le graphique d'évolution des effectifs de l'établissement
        /// </summary>
        public string CommentaireGraphique
        {
            get
            {
                return CommentaireGeneraux == null ? string.Empty : CommentaireGeneraux.TableauEffectif;
            }
        }
        /// <summary>
        /// retourne le commentaire concernant les prévisions d'éffectifs ATC de l'établissement
        /// </summary>
        public string CommentairePrevisionEffectifATC
        {
            get
            {
                return CommentaireGeneraux == null ? string.Empty : CommentaireGeneraux.PrevisionEffectifATC;
            }
        }
        /// <summary>
        /// retourne la phrase concernant la programmation des travaux de l'établissement
        /// </summary>
        //public string PhraseProgTravaux
        //{
        //    get
        //    {
        //        string retour = string.Empty;

        //        string type = string.Empty;
        //        //la requete trie déja par ordre de type d'opération.
        //        foreach (ProgTravaux prog in LstTravaux)
        //        {
        //            if (prog.TypeOperation == type)
        //            {
        //                retour += "\n\n" +  prog.TypeOperation + " :";
        //            }
        //            retour += "\n" + prog.Annee + " : " + prog.Libelle;
        //            type = prog.TypeOperation;
        //        }

        //        if (retour == string.Empty)
        //            retour = "néant";
        //        return retour;
        //    }
        //}
        /// <summary>
        /// retourne la phrase concernant le secteur de recrutement de l'établissement
        /// </summary>
        public string PhraseSecteurRecrutement
        {
            get
            {
                string retour = string.Empty;
                int i=0;
                foreach (EtablissementRecrutement  com in LstSecteurRecrutement)
                {
                    if (i == 0)
                    {
                        retour = com.Libelle;
                        i++;
                    }
                    else
                    {
                        retour += ", " + com.Libelle;
                    }
                }

                if (retour == string.Empty)
                    retour = "l'information n'est actuellement pas disponible";

                return retour;
            }
        }
        /// <summary>
        /// retourne la phrase concernant les prévisions sur 5 ans de l'établissement
        /// </summary>
        public string PhrasePrevision5Ans
        {
            get
            {
                int nbrActuel = 0;
                int nbrPrev = 0;
                int nbrEvolution = 0;
                string retour;
             
                foreach (Effectif effectif in LstEffectif)
                {
                    if (effectif.TypeEffectif =="P")
                        nbrPrev = effectif.EffectifTotal;
                    if (effectif.TypeEffectif == "R")
                        nbrActuel = effectif.EffectifTotal; 
                }
                nbrEvolution = nbrPrev - nbrActuel;
                if (nbrActuel == 0)
                {
                    return "calcul impossible, nbrActuelle =0";
                }
                double pourcentageEvol = (double) nbrEvolution * 100  / (double)nbrActuel;
                if (nbrEvolution < 0)
                {
                    retour = string.Format("Diminution de {0} élèves, soit {1:##0.00}% sur les cinq prochaines années.", (nbrActuel - nbrPrev), pourcentageEvol);
                }
                else if (nbrEvolution == 0)
                {
                    retour = "néant";
                }
                else
                {
                    retour = string.Format("Augmentation de {0} élèves, soit +{1:##0.00}% sur les cinq prochaines années.",nbrEvolution,pourcentageEvol);
                }

                return retour;
            }
        }
      
        /// <summary>
        /// retourne la phrase concernant le total d'ATC de l'établissement
        /// </summary>
    //    public string PhraseTotalATC
    //    {
   //         get
   //         {
   //             int nbr = 0;
   //             foreach (ATC adjoint in LstATC)
   //                 if (adjoint.ValeurETP < 1)
   //                     nbr++;
   //             if (nbr != 0)
   //                 //return LstATC.Count + " agents , dont " + nbr + " à temps partiel.";
   //                 return LstATC.Count + " agents.";
   //             else
  //                  return LstATC.Count + " agents.";
  //          }
  //      }
        /// <summary>
        /// retourne la phrase concernant la valeur ETP totale des ATC de l'établissement
        /// </summary>
 //       public string PhraseValeurETP
 //       {
 //           get
 //           {
 //               double valeurReel = 0;
 //               foreach (ATC adjoint in LstATC)
 //                   valeurReel += adjoint.ValeurETP;

//                string retour = "ETP réels : " + valeurReel + "\nEtp Barème : " + ValeurETPTheorique + "\nEcart : ";
//                double ecart = valeurReel - ValeurETPTheorique;
//                if (ecart >= 0)
//                    retour += ecart;
 //               else
 //                   retour += (ecart - ecart * 2);

   //             return retour;
   //         }
  //      }
        /// <summary>
        /// retourne la phrase concernant le nombre de jours de formation des ATC de l'établissement
        /// </summary>
   //     public string PhraseNombreJoursFormation
   //     {
   //         get
   //         {
   //             int valeur = 0;
   //             foreach (ATC adjoint in LstATC)
   //                 valeur += adjoint.NbJoursFormation;

  //              return valeur + " jours.";
  //          }
 //       }
        /// <summary>
        /// retourne la phrase concernant le(s) remplacement(s) de l'établissement
        /// </summary>
        /// 
        public string PhraseRemplacements
        {
            get
            {
                if (NbrRemplacementsATC == 0)
                    return "néant";
                else if (NbrRemplacementsATC == 1)
                    return "Le remplacement d'un agent à été assuré";
                else
                    return "Le remplacement de " + NbrRemplacementsATC + " à été assuré";
            }
        }
        /// <summary>
        /// retourne la phrase concernant le total de contrat aidé
        /// </summary>
        public string PhraseTotalContratAide
        {
            get
            {
             //   int nbr = 0;
              //  foreach (ContratAide adjoint in LstContratAide)
              //      if (adjoint.Quotite < 1)
             //           nbr++;
             //   if (nbr != 0)
                    //return LstATC.Count + " agents , dont " + nbr + " à temps partiel.";
             //       return LstContratAide.Count + " agents.";
             //   else
                    return LstContratAide.Count + " agents.";
            }
        }
        /// <summary>
        /// retourne la phrase concernant la valeur ETP totale des ATC de l'établissement
        /// </summary>
        //public string PhraseValeurETPContratAide
       // {
       //     get
       //     {
       //         double valeurReel = 0;
       //         foreach (ContratAide adjoint in LstContratAide)
       //             valeurReel += adjoint.ValeurETP;

       //         string retour = "ETP réels : " + valeurReel + "\nEtp Barème : " + ValeurETPTheorique + "\nEcart : ";
       //         double ecart = valeurReel - ValeurETPTheorique;
       //         if (ecart >= 0)
       //             retour += ecart;
       //         else
       //             retour += (ecart - ecart * 2);

       //         return retour;
      //      }
      //  }
        /// <summary>
        /// retourne la phrase concernant le nombre de jours de formation des ATC de l'établissement
        /// </summary>
     //  public string PhraseNombreJoursFormationContratAide
     //   {
     //       get
     //       {
     //           int valeur = 0;
     //           foreach (ContratAide adjoint in LstContratAide)
     //               valeur += adjoint.NbJoursFormation;

 //               return valeur + " jours.";
  //          }
   //     }
        /// <summary>
        /// retourne la phrase concernant le(s) remplacement(s) de l'établissement
        /// </summary>
   //     public string PhraseRemplacementsContratAide
   //     {
   //         get
   //         {
   //             if (NbrRemplacementsContratAide == 0)
   //                 return "néant";
   //             else if (NbrRemplacementsContratAide == 1)
   //                 return "Le remplacement d'un agent à été assuré";
   //             else
   //                 return "Le remplacement de " + NbrRemplacementsContratAide + " à été assuré";
   //         }
  //      }



        public bool IsRestaurant
        {
            get { return mIsRestautant; }
            set { mIsRestautant = value; }
        }
        public bool IsInternat
        {
            get { return mIsInternat; }
            set { mIsInternat = value; }
        }
        public int EffectifTheorique
        {
            get { return mEffectifTheorique; }
            set { mEffectifTheorique = value; }
        }
        #endregion

        #region Constructeurs
        /// <summary>
        /// constructeur minimal d'établissement, sera utilisé au chargement de l'application.
        /// </summary>
        /// <param name="codeRNE"></param>
        /// <param name="nom"></param>
        /// <param name="ville"></param>
        public Etablissement(string codeRNE, string nom, string ville)
        {
            this.mCodeRNE = codeRNE;
            this.mNom = nom;
            this.mVille = ville;
        }
        public Etablissement(string codeRNE, int annee, string nom, string typeEtablissement, int anneeConstruction, string telephone, string email, string fax, string nomProprietaire, string adresse, string complementAdresse, int codePostal, string ville, string lienPhoto, 
                                bool isRestaurant,bool isInternat,int effectifTheorique,
                                dlgLoadActionEducative loaderActionEducative,
                                dlgLoadClasseDecouverte loaderClasseDecouverte,
                                dlgLoadATC loaderATC,
                                dlgLoadContratAide loaderContratAide, 
                                dlgLoadBilinguisme loaderBilinguisme,
                                dlgLoadSoutienScolaireEnLigne loaderSoutienScolaireEnLigne, 
                                dlgLoadCommentaires loaderCommentaires,
                                dlgLoadContact loaderContact,
                                dlgLoadDotation loaderDotation,
                                dlgLoadInvestissementDCE loaderInvestissementDCE, 
                                dlgLoadInvestissement loaderInvestissement,
                                dlgLoadEffectifDetail loaderEffectifDetail, 
                                dlgLoadMCG loaderMCG, dlgLoadLogement loaderLogement,
                                dlgLoadProgTravaux loaderProgTravaux, 
                                dlgLoadProjetPilote loaderProjetPilote, 
                                dlgLoadRestauration loaderRestauration)
        {
            this.mCodeRNE = codeRNE;
            this.mAnnee = annee;
            this.mNom = nom;
            this.mTypeEtablissement = typeEtablissement;
            this.mAnneConstruction = anneeConstruction;
            this.mTelephone = telephone;
            this.mEmail = email;
            this.mFax = fax;
            this.mNomProprietaire = nomProprietaire;
            this.mAdresse = adresse;
            this.mComplementAdresse = complementAdresse;
            this.mVille = ville;
            this.mCodePostal = codePostal;
            this.mLienPhoto = lienPhoto;
            this.mIsRestautant = isRestaurant;
            this.mIsInternat = isInternat;
            this.mEffectifTheorique = effectifTheorique;
            this.LoaderActionEducative = loaderActionEducative;
            this.LoaderClasseDecouverte = loaderClasseDecouverte;
            this.LoaderATC = loaderATC;
            this.LoaderContratAide = loaderContratAide;
            this.LoaderBilinguisme = loaderBilinguisme;
            this.LoaderSoutienScolaireEnLigne = loaderSoutienScolaireEnLigne;
            this.LoaderCommentaires = loaderCommentaires;
            this.LoaderContact = loaderContact;
            this.LoaderDotation = loaderDotation;
            this.LoaderInvestissementDCE = loaderInvestissementDCE;
            this.LoaderInvestissement = loaderInvestissement;
            this.LoaderEffectifDetail = loaderEffectifDetail;
            this.LoaderMCG = loaderMCG;
            this.LoaderLogement = loaderLogement;
            this.LoaderProgTravaux = loaderProgTravaux;
            this.LoaderProjetPilote = loaderProjetPilote;
            this.LoaderRestauration = loaderRestauration;
        }
        public Etablissement() { }
    #endregion


    }
}
