Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import cgi, time, os, csv
- from dbconfig import DBset
- from intervention import Intervention
- from demande import Demande
- from demandeur import Demandeur
- from recherche import Recherche
- from basemodule import Formvalue
- from intervenant import Intervenant
- class Display: # classe qui s'occupe des differents affichage html
- """Classe pour l'affichage des pages"""
- def __init__(self):
- self.sql = DBset()
- self.data = cgi.FieldStorage()
- self.user_ip = cgi.escape(os.environ["REMOTE_ADDR"])
- pass
- def default(self):
- raise NotImplementedError('Unknown command')
- def execute(self):
- self.mode = self.data.getvalue("mode", None)
- if self.mode == "ajax":
- self.ajax_response()
- else:
- self.page = self.data.getvalue("page", "accueil")
- self.header_html()
- getattr(self, "page_"+ self.page, self.default)()
- self.footer_html()
- def ajax_response(self):
- """ ne peut que mettre a jour une Demande, pour l'instant
- l'idee a terme est de rendre ca + generique, si possible """
- action = self.data.getvalue("action", False)
- if action == "update":
- name = self.data.getvalue("name", False) # le nom de la variable a modifier
- value = self.data.getvalue("value", "") # la valeur a lui assigner
- genre = self.data.getvalue("genre", "Demande") # si on ne precise pas ce qu'on modifie, c'est une demande
- fieldname, item_id = name.rsplit('_', 1) # ici, on separe le nom du champ sql du numero id
- # par exemple pour 'date_demande_3':
- ## fieldname = 'date_demande'
- ## item_id = '3'
- d = Demande(self.sql, item_id) # FIXME: Demande est en 'dur' dans le code. C'est mal (mais ca fonctionne).
- d.set_var(fieldname, value) # on modifie la variable voulue de l'objet en cours
- d.save() # on le sauvegarde en BDD
- d.load() # et on le reload immediatement pour etre sur
- # de travailler avec les memes donnees que la base
- if fieldname[:3] == "id_":
- print d.fetch_var(fieldname)
- else:
- print d.get_var(fieldname)
- else:
- print "Aucune action valide"
- def header_html (self) : # entete commun des diverses pages
- print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '
- print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
- print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"><head>'
- print '<title>Demandes Patrimoine - %s</title>' % self.page
- print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'
- print '<link rel="stylesheet" media="screen, print" type="text/css" href="mike.css" />'
- print '<link rel="stylesheet" media="print" type="text/css" href="print.css" />'
- print '</head><body>'
- print '<div class="global page_%s">' % self.page
- self.menu_html()
- print '<div class="cadrecentral">'
- def footer_html(self) : # pied de page commun des diverses pages
- print '<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>'
- print '<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.3/jquery-ui.min.js" type="text/javascript"></script>'
- print '<script src="scripts.js" type="text/javascript" ></script>'
- print '</div></div></body></html>'
- def menu_html(self): # menu horizontal commun
- print '''
- <ul class="menu">
- <li><a href="./?page=nouvelle_demande">Nouvelle demande</a></li>
- <li><a href="./?page=recherche_demande">Rechercher demande</a></li>
- <li><a href="./?page=export_demande">Export demande</a></li>
- <li><form method="post" action="?page=imprime_demande">
- <a href="./?page=imprime_demande">Réimprimer demande</a>
- <input name="id_demande" size="10" maxlength="10" type="text" style="" />
- </form>
- </li>
- <li><form method="post" action="?page=modifie_demande">
- <a href="./?page=modifie_demande">Modifier demande</a>
- <input name="id_demande" size="10" maxlength="10" type="text" style="" />
- </form>
- </li>
- <li><form method="post" action="?page=modifie_extern_demande">
- <a href="./?page=modifie_demande">Modif externalisation</a>
- <input name="id_demande" size="10" maxlength="10" type="text" style="" />
- </form>
- </li>
- </ul>
- '''
- def page_accueil(self): #page par defaut
- print "<h1>Bienvenue dans l'interface demandes d'interventions de maintenance</h1>"
- def page_nouvelle_demande(self): #nouvelle demande charge les donnees via formulaire post
- d = Demande(self.sql)
- print '<h1>Nouvelle Demande</h1>'
- print '<h2>Identification</h2>'
- print '<form method="post" action="./?page=enregistre_demande">'
- print html_input_text('date du jour', 'date_demande', self.date_jour(), 15)
- print d.select_liste_demandeur()
- print '<h2>Informations Logement</h2>'
- print d.select_type_logement()
- print d.select_residence()
- print html_input_text('Numero de logement', 'numero_logement_demande', '', 5)
- print html_input_text('Nom resident', 'nom_resident_demande', '', 40)
- print html_input_text('Telephone 1', 'telephone1_demande', '', 15)
- print html_input_text('Telephone 2', 'telephone2_demande', '', 15)
- print d.select_autorisation_entree_demande()
- print '<h2>Objet de la demande</h2>'
- print html_textarea('Demande', 'objet_demande', "Tapez ici l'objet de la demande")
- print '<input type="HIDDEN" name="etat_travail_demande" value="en attente">'
- print '</form>'
- #partie chargeant les differentes infos et listes à afficher
- def nouveau_numero(self):
- fiche = self.sql.get_last_id("demande")
- return '<p>Numero de fiche : "%s"</p>' % fiche
- def date_jour(self):
- return time.strftime('%y-%m-%d',time.localtime())
- def page_imprime_demande(self): #page affiche une demande
- id = self.data.getvalue("id_demande", None)
- if(id is not None):
- dem = Demande(self.sql, id) #charge la classe Demande avec id_demande envoye comme variable
- print dem.to_html()
- self.impression()
- else:
- print "Numero d'id non defini !"
- def page_recherche_demande(self):
- d = Demande(self.sql)
- print '<form method="post" action="./?page=liste_demande">'
- #print html_input_text('date du jour', 'date_demande', self.date_jour(), 15)
- print d.select_liste_demandeur()
- print d.select_liste_intervenant()
- print d.select_type_logement()
- print d.select_residence()
- print d.select_etat_travail()
- print html_input_text('Numero de logement', 'numero_logement_demande', '', 5)
- print '<input type="submit" value="rechercher" id="submit" /></p>'
- print '</form>'
- def page_liste_demande(self):
- requete = "SELECT "+ Recherche.primary + ", " + (','.join(Recherche.variables)) + " FROM " + Recherche.table +" WHERE "
- #requete = "SELECT id_demande, " + (','.join(Recherche.variables)) + " FROM pat_demande WHERE "
- for champ in Recherche.variables:# le code ci-dessus simule ceci valeur = self.data.getvalue(champ, "")
- try:
- if "." in champ:
- champ = champ.split(".")[1]
- valeur = self.data.getvalue(champ, "")
- except KeyError:
- valeur = ""
- if valeur is not "":
- requete = requete + ' %s = "%s" AND ' % (champ, valeur)
- print requete
- resultat = self.sql.query(requete)
- print resultat
- if "AND" in requete:
- requete = requete.rstrip(" AND ")
- else:
- print '<p class="error">Il faut remplir au moins un champ du formulaire !</p>'
- self.page_recherche_demande()
- return
- demandes = self.sql.query(requete)
- nb_results = len(demandes)
- if(nb_results == 0):
- print '<p class="error">Aucune fiche ne correspond à ces critères !</p>'
- self.page_recherche_demande()
- return
- else:
- print nb_results, " fiches correspondent :"
- for d in demandes:
- dem = Demande(self.sql)
- dem.load_from_data(d)
- dem.load()
- print '<div class="fiche_demande" id="dem_%s">%s</div>' % (dem.get_id(), dem.to_html())
- def page_export_demande(self):
- d = Demande(self.sql)
- print '<form method="post" action="./?page=export_liste_demande">'
- #print html_input_text('date du jour', 'date_demande', self.date_jour(), 15)
- print d.select_liste_demandeur()
- print d.select_type_logement()
- print d.select_residence()
- print d.select_etat_travail()
- print html_input_text('Numero de logement', 'numero_logement_demande', '', 5)
- print '<input type="submit" value="Exporter" id="submit" /></p>'
- print '</form>'
- def page_export_liste_demande(self):
- 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 "
- for champ in Recherche.variables:# le code ci-dessus simule ceci valeur = self.data.getvalue(champ, "")
- try:
- valeur = self.data.getvalue(champ, "")
- except KeyError:
- valeur = ""
- if valeur is not "":
- requete = requete + ' %s = "%s" AND ' % (champ, valeur)
- # if "AND" in requete:
- # requete = requete.rstrip(" AND ")
- # else:
- # print '<p class="error">Il faut remplir au moins un champ du formulaire !</p>'
- # self.page_export_demande()
- # return
- requete = requete + ' pat_intervention.externalisation_intervention = "oui" LIMIT 0, 1 ' #on ajoute en filtre qu'il y ait une externalisation
- demandes = self.sql.query(requete)
- nb_results = len(demandes)
- if(nb_results == 0):
- print '<p class="error">Aucune fiche ne correspond à ces critères !</p>'
- self.page_export_demande()
- return
- else:
- c = csv.writer(open("export.csv", "wb"), delimiter=";", quotechar="|")
- row = ["demandeur", "residence"]
- row.extend(Demande.variables) # on rajoute le contenu du tableau Demande.variables à la suite de row
- c.writerow(row)
- for d in demandes:
- dem = Demande(self.sql)
- dem.load_from_data(d)
- dem.load()
- c.writerow((dem.to_CSV()))
- print '<p><a href="export.csv">fichier d\'export CSV</a></p>'
- def page_modifie_demande(self):
- id_demande = self.data.getvalue("id_demande", None)
- dem = Demande(self.sql, id_demande)
- if(id_demande is not None):
- print dem.to_html()
- print '<div class="affichage_bas">'
- interv = Intervention(self.sql)
- print '<form method="post" action="./?page=enregistre_modification">'
- print html_input_text('date intervention', 'date_intervention', self.date_jour(), 15)
- print interv.select_intervenant()
- print interv.select_type()
- print dem.select_etat_travail()
- print interv.select_externalisation()
- print '<input type="hidden" name="id_demande" value="%s">' % id_demande
- print html_textarea('Intervention', 'commentaire_intervention', "")
- print '</form></div>'
- else:
- print "Numero d'id non defini !"
- def page_modifie_extern_demande(self):
- id_demande = self.data.getvalue("id_demande", None)
- dem = Demande(self.sql, id_demande)
- if(id_demande is not None):
- print "titi"
- else :
- print "toto"
- def page_enregistre_demande(self):
- d = Demande(self.sql)
- print d.load_from_form(self.data).save().to_html()
- self.impression()
- def impression(self):
- print '''
- <div class="print_enregistre">
- <div class="affichage_gauche">
- <h3>Type de Travail :</h3>
- <ul>
- <li>Peinture</li>
- <li>Electricité</li>
- <li>Menuiserie Int</li>
- <li>Menuiserie Ext</li>
- <li>Mobilier</li>
- <li>Plomberie - Sanitaire</li>
- </ul>
- </div>
- <div class="affichage_droit">
- <ul>
- <li>Nettoyage</li>
- <li>Serrurerie</li>
- <li>Maconnerie</li>
- <li>Carrelage</li>
- <li>Manutention - Demenagement</li>
- <li>Divers</li>
- </ul>
- </div>
- <div class="affichage_gauche">
- <h3>Etat de la demande :</h3>
- <ul>
- <li>En cours</li>
- <li>Terminé</li>
- <li>Non Réalisé</li>
- </ul>
- </div>
- <div class="affichage_droit">
- <h3>Externalisation :</h3>
- <ul>
- <li>Oui</li>
- <li>Non</li>
- </ul>
- </div>
- <div class="affichage_gauche">
- <h2>Date et detail Intervention :</h2>
- </div>
- <hr class="clr"/>
- </div>
- '''
- def page_enregistre_modification(self):
- """ """
- inter = Intervention(self.sql)
- inter.load_from_form(self.data).save()
- inter.id_demande
- d = Demande(self.sql, inter.id_demande)
- d.set_etat_travail(self.data.getvalue('etat_travail_demande'))
- print d.to_html()
- def champ_editable(this, intitule, variable):
- id = "%s_%s" % (variable, this.id_demande)
- valeur = this.get_var(variable).strip()
- html = '<li id="%s"><label for="%s">%s :</label>' % (id, intitule, intitule)
- html = html + '<input type="text" name="%s" value="%s" class="editable">' % (variable, valeur)
- # l'input est de la classe "editable" donc caché (en display:none dans la css)
- if valeur == "":
- valeur = " " # espace insécable, pour être sûr de toujours afficher qq chose
- html = html + '<span class="editme" title="%s">%s</span></li> ' % (id, valeur)
- # les elements de classe editme ont un comportement défini dans scripts.js
- return html
- def select_editable(this, intitule, variable, valeur, select_html = ":)"):
- id = "%s_%s" % (variable, this.id_demande)
- return '<li id="%s"> %s <span class="editme" title="%s">%s</span></li> ' % (id, select_html, id, valeur)
- def html_input_text(label, name, value='', size = 15, htmlid = None): #recupere les infos des listes input et les affiche
- if htmlid is None:
- htmlid = name
- html = '<p><label for="%s">%s : </label>' % (htmlid, label)
- html += '<input type="text" size="%s" value="%s" name="%s" id="%s" /></p>' % (size, value, name, htmlid)
- return html
- def html_select(label, name, values, htmlid = None, selected = None, classname = ""):
- if htmlid is None:
- htmlid = name
- if classname is not "":
- classname = ' class="%s"' % classname
- html = '<p><label for="%s">%s :</label>' % (htmlid, label)
- html += '<select name="%s" id="%s"%s>' % (name, htmlid, classname)
- html += '<option value=""> </option>'
- option_string = '<option value="%s">%s</option>'
- selected_option_string = '<option value="%s" selected="selected">%s</option>'
- try:
- for val, name in values:
- if str(selected) == str(val):
- html += selected_option_string % (val, name)
- else:
- html += option_string % (val, name)
- except ValueError: # c'est une liste et pas un dictionnaire
- for val in values:
- if str(selected) == str(val):
- html += selected_option_string % (val, val)
- else:
- html += option_string % (val, val)
- html += '</select></p>'
- return html
- def html_textarea(label, name, value='', htmlid = None):
- if htmlid is None:
- htmlid = name
- html = '<p><label for="%s">%s :</label>' % (htmlid, label)
- html += '<textarea rows="3" cols="120" name="%s" id="%s">%s</textarea>' % (name, htmlid, value)
- html += '<input type="submit" value="enregistrer" id="submit" /></p>'
- return html
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement