Bläddra i källkod

Modification pour inclure l'affichage des fichiers Excels pour la DIMG

Celine.meneu 12 år sedan
förälder
incheckning
1afc6c1026
14 ändrade filer med 308 tillägg och 26 borttagningar
  1. 1 0
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Domaine/CG67.FicheCollege.Domaine.csproj
  2. 27 2
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Domaine/Etablissement.cs
  3. 8 11
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Domaine/FichierTravaux.cs
  4. 1 0
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/CG67.FicheCollege.Entrepot.csproj
  5. 4 3
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/EntrepotEtablissement.cs
  6. 7 1
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/EntrepotFactory.cs
  7. 106 0
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/EntrepotFichiersTravaux.cs
  8. 1 0
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Interface/CG67.FicheCollege.Interface.csproj
  9. 12 0
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Interface/IEntrepotFichiersTravaux.cs
  10. 15 1
      CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Service/ServiceFiche.cs
  11. 1 0
      CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/CG67.FicheCollege.Web.csproj
  12. 98 0
      CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/FileDownloadHandler.cs
  13. 4 0
      CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/Web.config
  14. 23 8
      CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/xslt/FicheCollege.xslt

+ 1 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Domaine/CG67.FicheCollege.Domaine.csproj

@@ -51,6 +51,7 @@
     <Compile Include="ContratAide.cs" />
     <Compile Include="Effectif.cs" />
     <Compile Include="EffectifDetail.cs" />
+    <Compile Include="FichierTravaux.cs" />
     <Compile Include="InvestissementDCE.cs" />
     <Compile Include="Etablissement.cs" />
     <Compile Include="Contact.cs" />

+ 27 - 2
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Domaine/Etablissement.cs

@@ -24,6 +24,7 @@ namespace CG67.FicheCollege.Domaine
     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);
+    public delegate IList<FichierTravaux> dlgLoadFichiersTravaux(string codeRNE);
 
     [Serializable]    
     public class Etablissement
@@ -48,6 +49,7 @@ namespace CG67.FicheCollege.Domaine
         private dlgLoadProjetPilote LoaderProjetPilote;
         private dlgLoadRestauration LoaderRestauration;
         private dlgLoadSoutienScolaireEnLigne LoaderSoutienScolaireEnLigne;
+        private dlgLoadFichiersTravaux LoaderFichiersTravaux;
 
         #endregion
 
@@ -165,6 +167,12 @@ namespace CG67.FicheCollege.Domaine
         /// Le(s) secteur(s) de recrutement de l'établissement.
         /// </summary>
         private IList<EtablissementRecrutement> mLstSecteurRecrutement;
+
+
+        /// <summary>
+        ///  Liste des fichiers de travaux
+        /// </summary>
+        private IList<FichierTravaux> mLstFichiersTravaux;
         /// <summary>
         /// adresse de l'établissement.
         /// </summary>
@@ -191,7 +199,8 @@ namespace CG67.FicheCollege.Domaine
         /// Liste de travaux de n-1 à n+1
         /// </summary>
         private IList<ProgTravaux> mLstTravaux;
-        /// <summary>
+
+             /// <summary>
         /// objet restauration
         /// </summary>
         private Restauration mRestaurer;
@@ -593,6 +602,20 @@ namespace CG67.FicheCollege.Domaine
             }
             set { mLstTravaux = value; }
         }
+
+
+        public IList<FichierTravaux> LstFichiersTravaux
+        {
+            get
+            {
+                if (mLstFichiersTravaux == null)
+                    mLstFichiersTravaux = this.LoaderFichiersTravaux(mCodeRNE);
+                return mLstFichiersTravaux;
+            }
+            set { mLstFichiersTravaux = value; }
+        }
+
+
         public Restauration Restaurer
         {
             get
@@ -1146,7 +1169,8 @@ namespace CG67.FicheCollege.Domaine
                                 dlgLoadMCG loaderMCG, dlgLoadLogement loaderLogement,
                                 dlgLoadProgTravaux loaderProgTravaux, 
                                 dlgLoadProjetPilote loaderProjetPilote, 
-                                dlgLoadRestauration loaderRestauration)
+                                dlgLoadRestauration loaderRestauration,
+                                dlgLoadFichiersTravaux loaderFichiersTravaux)
         {
             this.mCodeRNE = codeRNE;
             this.mIsPrive = isPrive;
@@ -1187,6 +1211,7 @@ namespace CG67.FicheCollege.Domaine
             this.LoaderProgTravaux = loaderProgTravaux;
             this.LoaderProjetPilote = loaderProjetPilote;
             this.LoaderRestauration = loaderRestauration;
+            this.LoaderFichiersTravaux = loaderFichiersTravaux;
         }
         public Etablissement() { }
     #endregion

+ 8 - 11
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Domaine/FichierTravaux.cs

@@ -4,22 +4,19 @@ using System.Text;
 
 namespace CG67.FicheCollege.Domaine
 {
+    [Serializable]
     public class FichierTravaux
     {
-        private bool existe;
-
-        public bool Existe
+        private string fichier=string.Empty;
+        
+        public string Fichier
         {
-            get { return existe; }
-            set { existe = value; }
+            get { return fichier; }
+            set { fichier = value; }
         }
-
-        private string nomFichier;
-
-        public string NomFichier
+        public FichierTravaux(string fichier)
         {
-            get { return nomFichier; }
-            set { nomFichier = value; }
+            this.Fichier = fichier;
         }
     }
 }

+ 1 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/CG67.FicheCollege.Entrepot.csproj

@@ -57,6 +57,7 @@
     <Compile Include="EntrepotContratAide.cs" />
     <Compile Include="EntrepotDotation.cs" />
     <Compile Include="EntrepotEffectifDetail.cs" />
+    <Compile Include="EntrepotFichiersTravaux.cs" />
     <Compile Include="EntrepotInvestissementDCE.cs" />
     <Compile Include="EntrepotEtablissement.cs" />
     <Compile Include="EntrepotFactory.cs" />

+ 4 - 3
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/EntrepotEtablissement.cs

@@ -84,8 +84,8 @@ namespace CG67.FicheCollege.Entrepot
                                  dr["TypeEtablissement"].ToString(), Convert.ToInt16(dr["AnneeConstruction"].ToString()),
                                  dr["Telephone"].ToString(), dr["Email"].ToString(), dr["Fax"].ToString(),
                                  dr["NomPropriétaire"].ToString(), adresse, dr["ComplementAdresse"].ToString(),
-                                 Convert.ToInt32(dr["CodePostal"].ToString()), dr["Ville"].ToString(), dr["LienPhoto"].ToString(),dr["fichierPPM"].ToString(),
-                                 dr.GetBoolean(dr.GetOrdinal("DemiPension")), dr.GetBoolean(dr.GetOrdinal("Internat")),dr.GetBoolean(dr.GetOrdinal("Ascenseur")), int.Parse(dr["CapaciteTheorique"].ToString()),
+                                 Convert.ToInt32(dr["CodePostal"].ToString()), dr["Ville"].ToString(), dr["LienPhoto"].ToString(), dr["fichierPPM"].ToString(),
+                                 dr.GetBoolean(dr.GetOrdinal("DemiPension")), dr.GetBoolean(dr.GetOrdinal("Internat")), dr.GetBoolean(dr.GetOrdinal("Ascenseur")), int.Parse(dr["CapaciteTheorique"].ToString()),
                                  EntrepotFactory.GetEntrepotActionEducative().GetByCodeRNEAndAnnee,
                                  EntrepotFactory.GetEntrepotClasseDecouverte().GetByCodeRNEAndAnnee,
                                  EntrepotFactory.GetEntrepotATC().GetByCodeRNE,
@@ -102,7 +102,8 @@ namespace CG67.FicheCollege.Entrepot
                                  EntrepotFactory.GetEntrepotLogement().GetByCodeRNE,
                                  EntrepotFactory.GetEntrepotProgTravaux().GetByCodeRNEAndAnnee,
                                  EntrepotFactory.GetEntrepotProjetPilote().GetByCodeRNEAndAnnee,
-                               EntrepotFactory.GetEntrepotRestauration().GetByRNEAndAnnee);
+                               EntrepotFactory.GetEntrepotRestauration().GetByRNEAndAnnee,
+                               EntrepotFactory.GetEntrepotFichiersTravaux().GetByCodeRNE);
                             }
                         }
                         

+ 7 - 1
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/EntrepotFactory.cs

@@ -164,7 +164,13 @@ namespace CG67.FicheCollege.Entrepot
             return entrepotProgTravaux;
         }
 
-   
+        private static IEntrepotFichiersTravaux entrepotFichiersTravaux;
+        public static IEntrepotFichiersTravaux GetEntrepotFichiersTravaux()
+        {
+            if (entrepotFichiersTravaux == null)
+                entrepotFichiersTravaux = new EntrepotFichiersTravaux();
+            return entrepotFichiersTravaux;
+        }
 
         private static IEntrepotEtablissement entrepotEtablissement;
         public static IEntrepotEtablissement GetEntrepotEtablissement()

+ 106 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Entrepot/EntrepotFichiersTravaux.cs

@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Configuration;
+using System.IO;
+using System.Runtime.InteropServices;
+using CG67.FicheCollege.Domaine;
+using CG67.FicheCollege.Interface;
+using System.Security.Principal;
+using CG67.FicheCollege.Tools;
+
+
+
+namespace CG67.FicheCollege.Entrepot
+{
+    public class EntrepotFichiersTravaux: IEntrepotFichiersTravaux
+    {
+        public IList<FichierTravaux> GetByCodeRNE(string codeRNE)
+        {
+
+            IList<FichierTravaux> result = new List<FichierTravaux>();
+           
+            //fichier.Fichier=@"067003P";
+
+
+            //On récupère la liste des fichiers
+
+
+            string[] files = (GetProtectedFiles(ConfigurationManager.AppSettings["FileRepository"],
+                                               "*.*",
+                                               ConfigurationManager.AppSettings["ImpersonationDomain"],
+                                               ConfigurationManager.AppSettings["ImpersonationUser"],
+                                               ConfigurationManager.AppSettings["ImpersonationPassword"]));
+
+            //Pour chaque fichier, on affiche un lien de  téléchargement
+            foreach (string file in files)
+            {
+//                result.Add(new FichierTravaux (file));
+                string filePath = Path.Combine(ConfigurationManager.AppSettings["FileRepository"], codeRNE + ".xls");
+
+                if (file == filePath)
+                   result.Add(new FichierTravaux (file));
+                
+
+            }
+//           fichier.Fichier = @"\\public\publicng\1PAT\12DIMG\1230SGEPI\PPM\Fichiers DSI (fiches collèges)\0670003P";
+ //           result.Add(fichier);
+            return result;
+        } 
+
+           /// <summary>
+        /// Récupère une liste de fichiers en utilisant un compte d'impersonification
+        /// </summary>
+        /// <param name="path">Le chemin du répertoire</param>
+        /// <param name="searchPattern">Le filtre de recherche de fichiers</param>
+        /// <param name="domain">Le domaine du compte à utiliser</param>
+        /// <param name="username">Le compte à utiliser</param>
+        /// <param name="password">Le mot de passe du compte à utiliser</param>
+        /// <returns>La liste des fichiers dans un tableau</returns>
+        private string [] GetProtectedFiles(string path, string searchPattern, string domain, string username, string password)
+        {
+            IntPtr token = IntPtr.Zero;
+            WindowsImpersonationContext impersonatedUser = null;
+
+            try
+            {
+                //On crée un jeton avec l'utilisateur devant accèder à la liste des fichiers
+                bool result = Impersonation.LogonUser(username, domain,
+                                        password,
+                                        LogonSessionType.Interactive,
+                                        LogonProvider.Default,
+                                        out token);
+
+                //Si le jeton est récupéré
+                if (result)
+                {
+                    //On récupère l'identité Windows
+                    WindowsIdentity id = new WindowsIdentity(token);
+
+                    //On change d'identité
+                    impersonatedUser = id.Impersonate();
+                    //On récupère la liste des fichiers
+                    return Directory.GetFiles(path, searchPattern);
+                }
+                else
+                {
+                    throw new ApplicationException("Echec de récupération du jeton d'authentification.",
+                                                   new Exception(Marshal.GetLastWin32Error().ToString()));
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new ApplicationException("Erreur non gérée lors de la récupération de la liste des fichiers.", ex);
+            }
+            finally
+            {
+                // Finalement on termine le changement d'identité
+                if (impersonatedUser != null)
+                    impersonatedUser.Undo();
+                // On supprime le jeton
+                if (token != IntPtr.Zero)
+                    Impersonation.CloseHandle(token);
+            }
+        }
+    }
+ }

+ 1 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Interface/CG67.FicheCollege.Interface.csproj

@@ -52,6 +52,7 @@
     <Compile Include="IEntrepotContratAide.cs" />
     <Compile Include="IEntrepotDotation.cs" />
     <Compile Include="IEntrepotEffectifDetail.cs" />
+    <Compile Include="IEntrepotFichiersTravaux.cs" />
     <Compile Include="IEntrepotInvestissementDCE.cs" />
     <Compile Include="IEntrepotEtablissement.cs" />
     <Compile Include="IEntrepotInvestissement.cs" />

+ 12 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Interface/IEntrepotFichiersTravaux.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using CG67.FicheCollege.Domaine;
+
+namespace CG67.FicheCollege.Interface
+{
+    public interface IEntrepotFichiersTravaux
+    {
+        IList<FichierTravaux> GetByCodeRNE(string codeRNE);
+    }
+}

+ 15 - 1
CG67.FicheCollege.root/CG67.FicheCollege/Core/CG67.FicheCollege.Service/ServiceFiche.cs

@@ -325,11 +325,25 @@ namespace CG67.FicheCollege.Service
             Etablissement etablissement = GetEtablissementByCodeRNEAndAnnee(codeRNE, annee);
             xmlCollege.AppendChild(Serializer(etablissement,resultat));
             ChiffresSignificatifs chiffres = GetChiffresSignificatifsByAnnee(annee);
-            xmlCollege.AppendChild(Serializer(chiffres,resultat));     
+            xmlCollege.AppendChild(Serializer(chiffres,resultat));
+        //    IList<FichierTravaux> fichierTravaux = GetFichiersTravauxByCodeRNE(codeRNE);
+        //    xmlCollege.AppendChild(Serializer(fichierTravaux, resultat));
             return resultat;
         
         }
 
+        private static IList<FichierTravaux> GetFichiersTravauxByCodeRNE(string codeRNE)
+        {
+            try
+            {
+                return EntrepotFactory.GetEntrepotFichiersTravaux().GetByCodeRNE(codeRNE);
+            }
+            catch
+            {
+                throw;
+            }
+        }
+
    
   
     }

+ 1 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/CG67.FicheCollege.Web.csproj

@@ -90,6 +90,7 @@
     <Compile Include="FicheCollege.aspx.designer.cs">
       <DependentUpon>FicheCollege.aspx</DependentUpon>
     </Compile>
+    <Compile Include="FileDownloadHandler.cs" />
     <Compile Include="GenerationFiche.aspx.cs">
       <SubType>ASPXCodeBehind</SubType>
       <DependentUpon>GenerationFiche.aspx</DependentUpon>

+ 98 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/FileDownloadHandler.cs

@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Web;
+using CG67.FicheCollege.Domaine;
+using CG67.FicheCollege.Tools;
+using System.IO;
+using System.Security.Principal;
+
+namespace CG67.FicheCollege
+{
+    /// <summary>
+    /// Gestionnaire de téléchargement de fichier avec impersonification
+    /// </summary>
+    public class FileDownloadHandler : IHttpHandler
+    {
+        #region IHttpHandler Membres
+
+        public bool IsReusable
+        {
+            get { return true; }
+        }
+
+        /// <summary>
+        /// Traite la requête HTTP
+        /// </summary>
+        /// <param name="context">Le contexte HTTP</param>
+        public void ProcessRequest(HttpContext context)
+        {
+            IntPtr token = IntPtr.Zero;
+            WindowsImpersonationContext impersonatedUser = null;
+
+
+           
+            //On crée un jeton avec l'utilisateur devant accèder à la liste des fichiers
+            bool result = Impersonation.LogonUser(ConfigurationManager.AppSettings["ImpersonationUser"], ConfigurationManager.AppSettings["ImpersonationDomain"],
+                        ConfigurationManager.AppSettings["ImpersonationPassword"],
+                        LogonSessionType.Interactive,
+                        LogonProvider.Default,
+                        out token);
+
+            //Si le jeton est récupéré
+            if (result)
+            {
+                //On récupère l'identité Windows
+                WindowsIdentity id = new WindowsIdentity(token);
+
+                //On change d'identité
+                impersonatedUser = id.Impersonate();
+                //On construit le chemin et le FileInfo vers le fichier à télécharger
+
+              //  string filePath = Path.Combine(ConfigurationManager.AppSettings["FileRepository"], context.Request.QueryString["file"]);
+           // string filePath = Path.Combine(ConfigurationManager.AppSettings["FileRepository"], context.Request.QueryString["file"]);
+           //   FileInfo file = new FileInfo(filePath);
+
+                FileInfo file = new FileInfo(context.Request.QueryString["file"]);
+
+
+                //Si le fichier existe
+                // if (File.Exists(filePath))
+                  if (File.Exists(file.FullName))
+                {
+                    context.Response.ClearContent();
+                    //Préparation des headers HTTP pour le téléchargement
+                    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
+                    context.Response.AddHeader("Content-Length", file.Length.ToString());
+                    string fileExtension = Path.GetExtension(file.Name).ToLower();
+
+                    //On passe le bon Mime Type
+                    switch (fileExtension)
+                    {
+                        case "xls":
+                            context.Response.ContentType = "application/vnd.ms-excel";
+                            break;
+                        case "xlsx":
+                            context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+                            break;
+                        default:
+                            break;
+                    }
+                    //On transmet le fichier pour téléchargement
+                    context.Response.TransmitFile(file.FullName);
+                    context.Response.End();
+                }
+            }
+
+            // Finalement on termine le changement d'identité
+            if (impersonatedUser != null)
+                impersonatedUser.Undo();
+            // On supprime le jeton
+            if (token != IntPtr.Zero)
+                Impersonation.CloseHandle(token);
+
+        }
+
+        #endregion
+    }
+}

+ 4 - 0
CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/Web.config

@@ -63,7 +63,11 @@
 
       <httpHandlers>
         <add verb="GET,POST" path="*.histo" type="CG67.FicheCollege.HttpHandlerHistogramme, CG67.FicheCollege"/>
+		<add verb="*" path="file.download" validate="false" type="CG67.FicheCollege.FileDownloadHandler, CG67.FicheCollege"/>
+	  
   	</httpHandlers>
 
     </system.web>
+	
+	
 </configuration>

+ 23 - 8
CG67.FicheCollege.root/CG67.FicheCollege/Web/CG67.FicheCollege.Web/xslt/FicheCollege.xslt

@@ -28,7 +28,7 @@
             <tr>
                 <td>Code RNE du collège</td>
                 <td>
-                    <xsl:value-of select="Etablissement/CodeRNE"/>
+					<xsl:value-of select="Etablissement/CodeRNE"/>
                 </td>
             </tr>
             <tr>
@@ -430,13 +430,28 @@
           <xsl:if test="count(Etablissement/LstInvestissement/child::*)=0">
             Néant
           </xsl:if>
-          <tr>
-            <table>
-				<br></br>
-              <h3>Travaux de maintenance réalisés et prévus</h3>
-			</table>
-			  Données accessibles en Février 2014
-			<!--  <br></br>
+			<tr>
+				<table>
+					<br></br>
+					<h3>Travaux de maintenance réalisés et prévus</h3>
+				</table>
+				
+				<xsl:if test="count(Etablissement/LstFichiersTravaux/child::*)>0">
+				<xsl:for-each select="Etablissement/LstFichiersTravaux/FichierTravaux">
+			
+						<a href="file.download?file={Fichier}">
+							<xsl:value-of select="Fichier"/>
+						</a>
+			     		<br></br>
+				</xsl:for-each>		 
+			   </xsl:if>
+				<xsl:if test="count(Etablissement/LstFichiersTravaux/child::*)=0">
+					Néant
+				</xsl:if>
+				
+			  <!--  Données
+			  accessibles en Février 2014
+			  <br></br>
 			  <xsl:element name="a">
 				  <xsl:attribute name="href">
 					  ..\xls\<xsl:value-of select="Etablissement/LienFichier"/>