Browse Source

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

Celine.meneu 12 năm trước cách đây
mục cha
commit
1afc6c1026
14 tập tin đã thay đổi với 308 bổ sung26 xóa
  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"/>