Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.79 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. import cgi, time, os, csv
  5. from dbconfig import DBset
  6. from intervention import Intervention
  7. from demande import Demande
  8. from demandeur import Demandeur
  9. from recherche import Recherche
  10. from basemodule import Formvalue
  11. from intervenant import Intervenant
  12.  
  13. class Display: # classe qui s'occupe des differents affichage html
  14.     """Classe pour l'affichage des pages"""
  15.  
  16.     def __init__(self):
  17.         self.sql = DBset()
  18.         self.data = cgi.FieldStorage()
  19.         self.user_ip = cgi.escape(os.environ["REMOTE_ADDR"])
  20.         pass
  21.  
  22.     def default(self):
  23.         raise NotImplementedError('Unknown command')
  24.  
  25.     def execute(self):
  26.         self.mode = self.data.getvalue("mode", None)
  27.         if self.mode == "ajax":
  28.             self.ajax_response()
  29.         else:
  30.             self.page = self.data.getvalue("page", "accueil")
  31.             self.header_html()
  32.             getattr(self, "page_"+ self.page, self.default)()
  33.             self.footer_html()
  34.  
  35.  
  36.     def ajax_response(self):
  37.         """ ne peut que mettre a jour une Demande, pour l'instant
  38.           l'idee a terme est de rendre ca + generique, si possible """
  39.  
  40.         action = self.data.getvalue("action", False)
  41.        
  42.         if action == "update":
  43.             name  = self.data.getvalue("name", False)   # le nom de la variable a modifier
  44.             value = self.data.getvalue("value", "")     # la valeur a lui assigner
  45.             genre = self.data.getvalue("genre", "Demande")  # si on ne precise pas ce qu'on modifie, c'est une demande
  46.            
  47.             fieldname, item_id = name.rsplit('_', 1)    # ici, on separe le nom du champ sql du numero id
  48.                                         # par exemple pour 'date_demande_3':
  49.                                         ## fieldname    = 'date_demande'
  50.                                         ## item_id  = '3'
  51.             d = Demande(self.sql, item_id)  # FIXME: Demande est en 'dur' dans le code. C'est mal (mais ca fonctionne).
  52.            
  53.             d.set_var(fieldname,  value)    # on modifie la variable voulue de l'objet en cours
  54.             d.save()            # on le sauvegarde en BDD
  55.             d.load()            # et on le reload immediatement pour etre sur
  56.                                 # de travailler avec les memes donnees que la base
  57.             if fieldname[:3] == "id_":
  58.                 print d.fetch_var(fieldname)
  59.             else:
  60.                 print d.get_var(fieldname)
  61.         else:
  62.             print "Aucune action valide"
  63.  
  64.            
  65.            
  66.     def header_html (self) : # entete commun des diverses pages
  67.         print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '
  68.         print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
  69.         print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"><head>'
  70.         print '<title>Demandes Patrimoine - %s</title>' % self.page
  71.         print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
  72.         print '<link rel="stylesheet" media="screen, print" type="text/css" href="mike.css" />'
  73.         print '<link rel="stylesheet" media="print" type="text/css" href="print.css" />'
  74.         print '</head><body>'
  75.         print '<div class="global page_%s">' % self.page
  76.         self.menu_html()
  77.         print '<div class="cadrecentral">'
  78.                    
  79.     def footer_html(self) : # pied de page commun des diverses pages
  80.         print '<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>'
  81.         print '<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.3/jquery-ui.min.js" type="text/javascript"></script>'
  82.         print '<script src="scripts.js" type="text/javascript" ></script>'
  83.         print '</div></div></body></html>'
  84.                
  85.     def menu_html(self): # menu horizontal commun
  86.         print '''
  87.             <ul class="menu">
  88.                     <li><a href="./?page=nouvelle_demande">Nouvelle demande</a></li>
  89.                     <li><a href="./?page=recherche_demande">Rechercher demande</a></li>
  90.                     <li><a href="./?page=export_demande">Export demande</a></li>                   
  91.                     <li><form method="post" action="?page=imprime_demande">
  92.                         <a href="./?page=imprime_demande">Réimprimer demande</a>
  93.                         <input name="id_demande" size="10" maxlength="10" type="text" style="" />
  94.                         </form>
  95.                     </li>
  96.                     <li><form method="post" action="?page=modifie_demande">
  97.                         <a href="./?page=modifie_demande">Modifier demande</a>
  98.                         <input name="id_demande" size="10" maxlength="10" type="text" style="" />
  99.                         </form>
  100.                     </li>
  101.                     <li><form method="post" action="?page=modifie_extern_demande">
  102.                         <a href="./?page=modifie_demande">Modif externalisation</a>
  103.                         <input name="id_demande" size="10" maxlength="10" type="text" style="" />
  104.                         </form>
  105.                     </li>
  106.             </ul>
  107.                 '''
  108.                
  109.     def page_accueil(self): #page par defaut
  110.         print   "<h1>Bienvenue dans l'interface demandes d'interventions de maintenance</h1>"
  111.  
  112.     def page_nouvelle_demande(self): #nouvelle demande charge les donnees via formulaire post
  113.  
  114.         d = Demande(self.sql)
  115.         print '<h1>Nouvelle Demande</h1>'
  116.         print '<h2>Identification</h2>'
  117.         print '<form method="post" action="./?page=enregistre_demande">'       
  118.  
  119.         print html_input_text('date du jour', 'date_demande', self.date_jour(), 15)
  120.         print d.select_liste_demandeur()
  121.            
  122.         print '<h2>Informations Logement</h2>'
  123.  
  124.         print d.select_type_logement()
  125.         print d.select_residence()             
  126.        
  127.         print html_input_text('Numero de logement', 'numero_logement_demande', '', 5)
  128.         print html_input_text('Nom resident', 'nom_resident_demande', '', 40)
  129.         print html_input_text('Telephone 1', 'telephone1_demande', '', 15)
  130.         print html_input_text('Telephone 2', 'telephone2_demande', '', 15)     
  131.         print d.select_autorisation_entree_demande()
  132.  
  133.         print '<h2>Objet de la demande</h2>'       
  134.         print html_textarea('Demande', 'objet_demande', "Tapez ici l'objet de la demande")
  135.         print '<input type="HIDDEN" name="etat_travail_demande" value="en attente">'
  136.  
  137.         print '</form>'
  138.  
  139.     #partie chargeant les differentes infos et listes à afficher
  140.                
  141.  
  142.  
  143.     def nouveau_numero(self):
  144.         fiche = self.sql.get_last_id("demande")
  145.         return '<p>Numero de fiche : "%s"</p>' % fiche
  146.            
  147.     def date_jour(self):
  148.         return time.strftime('%y-%m-%d',time.localtime())
  149.                
  150.        
  151.     def page_imprime_demande(self): #page affiche une demande
  152.         id = self.data.getvalue("id_demande", None)
  153.         if(id is not None):    
  154.             dem = Demande(self.sql, id)  #charge la classe Demande avec id_demande envoye comme variable
  155.             print dem.to_html()
  156.             self.impression()
  157.         else:
  158.             print "Numero d'id non defini !"
  159.  
  160.     def page_recherche_demande(self):
  161.         d = Demande(self.sql)
  162.         print '<form method="post" action="./?page=liste_demande">'
  163.         #print html_input_text('date du jour', 'date_demande', self.date_jour(), 15)
  164.         print d.select_liste_demandeur()
  165.         print d.select_liste_intervenant()
  166.         print d.select_type_logement()
  167.         print d.select_residence()
  168.         print d.select_etat_travail()
  169.         print html_input_text('Numero de logement', 'numero_logement_demande', '', 5)
  170.         print '<input type="submit" value="rechercher" id="submit" /></p>'
  171.         print '</form>'
  172.        
  173.     def page_liste_demande(self):
  174.        
  175.         requete = "SELECT "+ Recherche.primary + ", " + (','.join(Recherche.variables)) + " FROM " + Recherche.table +" WHERE "
  176.        
  177.         #requete = "SELECT id_demande, " + (','.join(Recherche.variables)) + " FROM pat_demande WHERE "
  178.         for champ in Recherche.variables:# le code ci-dessus simule ceci valeur = self.data.getvalue(champ, "")
  179.             try:
  180.                 if "." in champ:
  181.                     champ = champ.split(".")[1]
  182.                 valeur = self.data.getvalue(champ, "")
  183.             except KeyError:
  184.                 valeur = ""        
  185.             if valeur is not "":
  186.                 requete = requete + ' %s = "%s" AND ' % (champ, valeur)
  187.         print requete
  188.         resultat = self.sql.query(requete)
  189.         print resultat
  190.         if "AND" in requete:
  191.             requete = requete.rstrip(" AND ")
  192.         else:
  193.             print '<p class="error">Il faut remplir au moins un champ du formulaire !</p>'
  194.             self.page_recherche_demande()
  195.             return
  196.         demandes = self.sql.query(requete)
  197.         nb_results = len(demandes)
  198.         if(nb_results == 0):
  199.             print '<p class="error">Aucune fiche ne correspond &agrave; ces crit&egrave;res !</p>'
  200.             self.page_recherche_demande()
  201.             return
  202.         else:
  203.             print nb_results, " fiches correspondent :"
  204.             for d in demandes:
  205.                 dem = Demande(self.sql)
  206.                 dem.load_from_data(d)
  207.                 dem.load()
  208.                 print '<div class="fiche_demande" id="dem_%s">%s</div>' % (dem.get_id(), dem.to_html())
  209.  
  210.     def page_export_demande(self):
  211.         d = Demande(self.sql)
  212.         print '<form method="post" action="./?page=export_liste_demande">'
  213.         #print html_input_text('date du jour', 'date_demande', self.date_jour(), 15)
  214.         print d.select_liste_demandeur()
  215.         print d.select_type_logement()
  216.         print d.select_residence()
  217.         print d.select_etat_travail()
  218.         print html_input_text('Numero de logement', 'numero_logement_demande', '', 5)
  219.         print '<input type="submit" value="Exporter" id="submit" /></p>'
  220.         print '</form>'
  221.  
  222.     def page_export_liste_demande(self):
  223.         requete = "SELECT DISTINCT pat_demande.id_demande,externalisation_intervention," + (','.join(Recherche.variables)) + " FROM pat_demande INNER JOIN pat_intervention ON pat_demande.id_demande = pat_intervention.id_demande WHERE "
  224.         for champ in Recherche.variables:# le code ci-dessus simule ceci valeur = self.data.getvalue(champ, "")
  225.             try:
  226.                 valeur = self.data.getvalue(champ, "")
  227.             except KeyError:
  228.                 valeur = ""        
  229.             if valeur is not "":
  230.                 requete = requete + ' %s = "%s" AND ' % (champ, valeur)
  231. #       if "AND" in requete:
  232. #           requete = requete.rstrip(" AND ")
  233. #       else:
  234. #           print '<p class="error">Il faut remplir au moins un champ du formulaire !</p>'
  235. #           self.page_export_demande()
  236. #           return
  237.         requete = requete + ' pat_intervention.externalisation_intervention = "oui" LIMIT 0, 1 ' #on ajoute en filtre  qu'il y ait une externalisation
  238.         demandes = self.sql.query(requete)
  239.         nb_results = len(demandes)
  240.         if(nb_results == 0):
  241.             print '<p class="error">Aucune fiche ne correspond &agrave; ces crit&egrave;res !</p>'
  242.             self.page_export_demande()
  243.             return
  244.         else:
  245.             c = csv.writer(open("export.csv", "wb"), delimiter=";", quotechar="|")
  246.             row = ["demandeur", "residence"]
  247.             row.extend(Demande.variables) # on rajoute le contenu du tableau Demande.variables à la suite de row
  248.             c.writerow(row)
  249.             for d in demandes:
  250.                 dem = Demande(self.sql)
  251.                 dem.load_from_data(d)
  252.                 dem.load()
  253.                 c.writerow((dem.to_CSV()))
  254.             print '<p><a href="export.csv">fichier d\'export CSV</a></p>'
  255.  
  256.  
  257.  
  258.     def page_modifie_demande(self):
  259.         id_demande = self.data.getvalue("id_demande", None)
  260.         dem = Demande(self.sql, id_demande)
  261.         if(id_demande is not None):
  262.             print dem.to_html()
  263.             print '<div class="affichage_bas">'
  264.             interv = Intervention(self.sql)
  265.             print '<form method="post" action="./?page=enregistre_modification">'
  266.             print html_input_text('date intervention', 'date_intervention', self.date_jour(), 15)
  267.             print interv.select_intervenant()
  268.             print interv.select_type()
  269.             print dem.select_etat_travail()
  270.             print interv.select_externalisation()
  271.             print '<input type="hidden" name="id_demande" value="%s">' % id_demande
  272.             print html_textarea('Intervention', 'commentaire_intervention', "")
  273.             print '</form></div>'
  274.         else:
  275.             print "Numero d'id non defini !"
  276.    
  277.     def page_modifie_extern_demande(self):
  278.         id_demande = self.data.getvalue("id_demande", None)
  279.         dem = Demande(self.sql, id_demande)
  280.         if(id_demande is not None):
  281.             print "titi"
  282.         else :
  283.             print "toto"
  284.            
  285.     def page_enregistre_demande(self):         
  286.         d = Demande(self.sql)
  287.         print d.load_from_form(self.data).save().to_html()
  288.         self.impression()
  289.        
  290.     def impression(self):
  291.         print '''
  292.             <div class="print_enregistre">
  293.             <div class="affichage_gauche">     
  294.             <h3>Type de Travail :</h3>
  295.             <ul>
  296.                 <li>Peinture</li>
  297.                 <li>Electricité</li>
  298.                 <li>Menuiserie Int</li>
  299.                 <li>Menuiserie Ext</li>
  300.                 <li>Mobilier</li>
  301.                 <li>Plomberie - Sanitaire</li>
  302.             </ul>
  303.             </div>
  304.             <div class="affichage_droit">
  305.             <ul>
  306.                 <li>Nettoyage</li>
  307.                 <li>Serrurerie</li>
  308.                 <li>Maconnerie</li>
  309.                 <li>Carrelage</li>
  310.                 <li>Manutention - Demenagement</li>
  311.                 <li>Divers</li>
  312.             </ul>
  313.             </div>
  314.  
  315.             <div class="affichage_gauche">         
  316.             <h3>Etat de la demande :</h3>
  317.             <ul>
  318.                 <li>En cours</li>
  319.                 <li>Terminé</li>
  320.                 <li>Non Réalisé</li>
  321.             </ul>
  322.             </div>
  323.  
  324.             <div class="affichage_droit">
  325.             <h3>Externalisation :</h3>
  326.             <ul>
  327.                 <li>Oui</li>
  328.                 <li>Non</li>
  329.             </ul>
  330.             </div>
  331.            
  332.             <div class="affichage_gauche">
  333.             <h2>Date et detail Intervention :</h2>
  334.             </div>
  335.            
  336.             <hr class="clr"/>
  337.             </div>
  338.             '''
  339.    
  340.     def page_enregistre_modification(self):
  341.         """ """
  342.         inter = Intervention(self.sql)
  343.         inter.load_from_form(self.data).save()
  344.         inter.id_demande
  345.         d = Demande(self.sql, inter.id_demande)
  346.         d.set_etat_travail(self.data.getvalue('etat_travail_demande'))
  347.         print d.to_html()
  348.    
  349. def champ_editable(this, intitule, variable):
  350.     id = "%s_%s" % (variable, this.id_demande)
  351.     valeur = this.get_var(variable).strip()
  352.     html = '<li id="%s"><label for="%s">%s :</label>' % (id, intitule, intitule)
  353.     html = html + '<input type="text" name="%s" value="%s" class="editable">' % (variable, valeur)
  354.     # l'input est de la classe "editable" donc caché (en display:none dans la css)
  355.     if valeur == "":
  356.         valeur = "&nbsp;" # espace insécable, pour être sûr de toujours afficher qq chose
  357.     html = html + '<span class="editme" title="%s">%s</span></li> ' % (id, valeur)
  358.     # les elements de classe editme ont un comportement défini dans scripts.js
  359.     return html
  360.    
  361. def select_editable(this, intitule, variable, valeur, select_html = ":)"):
  362.     id = "%s_%s" % (variable, this.id_demande)
  363.     return '<li id="%s">  %s <span class="editme" title="%s">%s</span></li> ' % (id, select_html,  id, valeur)
  364.  
  365.  
  366. def html_input_text(label, name, value='', size = 15, htmlid = None):  #recupere les infos des listes input et les affiche
  367.     if htmlid is None:
  368.         htmlid = name
  369.     html  = '<p><label for="%s">%s : </label>' % (htmlid, label)
  370.     html += '<input type="text" size="%s" value="%s" name="%s" id="%s" /></p>' % (size, value, name, htmlid)
  371.     return html
  372.  
  373. def html_select(label, name, values, htmlid = None, selected = None, classname = ""):
  374.     if htmlid is None:
  375.         htmlid = name
  376.     if classname is not "":
  377.         classname = ' class="%s"' % classname
  378.     html  = '<p><label for="%s">%s :</label>' % (htmlid, label)
  379.     html += '<select name="%s" id="%s"%s>' % (name, htmlid, classname)
  380.     html += '<option value=""> </option>'
  381.     option_string = '<option value="%s">%s</option>'
  382.     selected_option_string = '<option value="%s" selected="selected">%s</option>'
  383.     try:
  384.         for val, name in values:
  385.             if str(selected) == str(val):
  386.                 html += selected_option_string % (val, name)
  387.             else:
  388.                 html += option_string % (val, name)
  389.     except ValueError: # c'est une liste et pas un dictionnaire
  390.         for val in values:
  391.             if str(selected) == str(val):
  392.                 html += selected_option_string % (val, val)
  393.             else:
  394.                 html += option_string % (val, val)
  395.     html += '</select></p>'
  396.     return html
  397.  
  398. def html_textarea(label, name, value='', htmlid = None):
  399.     if htmlid is None:
  400.         htmlid = name
  401.     html  = '<p><label for="%s">%s :</label>' % (htmlid, label)
  402.     html += '<textarea rows="3" cols="120" name="%s" id="%s">%s</textarea>' % (name, htmlid, value)
  403.     html += '<input type="submit" value="enregistrer" id="submit" /></p>'
  404.     return html
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement