184 lines
5.9 KiB
Python
Executable file
184 lines
5.9 KiB
Python
Executable file
#! /usr/bin/env python
|
|
import cherrypy, tempfile, shutil, os
|
|
import crans.impression
|
|
import crans.impression.digicode
|
|
import crans.impression.etat_imprimante
|
|
|
|
FILE_UPLOAD_BASE_FOLDER = cherrypy.config.get('fileUpload.folder', "/var/impression/fichiers/")
|
|
|
|
class FileError(Exception):
|
|
pass
|
|
|
|
class root:
|
|
|
|
##########################
|
|
# affichage
|
|
##########################
|
|
#
|
|
# template principale
|
|
#
|
|
def index(self, submit = None, fileList = None, newFile = None ):
|
|
data = {}
|
|
cherrypy.session['impression'] = None
|
|
if submit == "submit_send":
|
|
try:
|
|
self.savePDF(newFile)
|
|
data['fileName'] = newFile.filename
|
|
except FileError, e:
|
|
data['openError'] = e.args[0]
|
|
elif submit == "submit_chose":
|
|
if (fileList):
|
|
data['fileName'] = fileList
|
|
else:
|
|
data['openError'] = "Choisissez un fichier"
|
|
|
|
data['fileList'] = self.getUploadedFileListFor(cherrypy.session['uid'])
|
|
try:
|
|
data['etatImprimante'] = "<br />".join(crans.impression.etat_imprimante.etat())
|
|
except Exception, e:
|
|
data['etatImprimante'] = 'Imprimante hors ligne'
|
|
data['Erreur_imprimante'] = str(e).replace("\"", "\\\"")
|
|
return {'template':'impression',
|
|
'values':data,
|
|
'stylesheets':['impression.css'],
|
|
'scripts':['impression.js', 'popup.js'],
|
|
}
|
|
index.exposed = True
|
|
|
|
##########################
|
|
# devis
|
|
##########################
|
|
#
|
|
# methode qui affiche la template du devis
|
|
#
|
|
|
|
def devis(self):
|
|
return {
|
|
'template':'impression-devis',
|
|
'values':
|
|
{
|
|
'devis':cherrypy.session['impression'].devisDetaille(),
|
|
'total':cherrypy.session['impression'].prix(),
|
|
'nomFichier':cherrypy.session['impression'].fileName(),
|
|
},
|
|
'standalone':True,
|
|
}
|
|
devis.exposed=True
|
|
|
|
|
|
##########################
|
|
# AJAX
|
|
##########################
|
|
#
|
|
# methode qui renvoie la liste des codes de l'adherent
|
|
#
|
|
def codeList(self):
|
|
try:
|
|
listeBrute = crans.impression.digicode.list_code()
|
|
# liste de la forme :
|
|
# [(code, age, description),...]
|
|
listeBrute = [item[0] for item in listeBrute if item[2] == cherrypy.session['uid']]
|
|
return {'codes': listeBrute}
|
|
except Exception, e:
|
|
cherrypy.log('erreur lors de la creation de la liste de codes :' + str(e), 'IMPRESSION', 1)
|
|
return {'erreur':str(e)}
|
|
codeList.exposed= True
|
|
|
|
#
|
|
# methode qui indique quel fichier utiliser
|
|
#
|
|
def useFile(self, fileName):
|
|
try:
|
|
filepath = os.path.join(os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/"), fileName)
|
|
cherrypy.session['impression'] = crans.impression.impression(filepath, cherrypy.session['uid'])
|
|
return {'nbPages': cherrypy.session['impression'].pages()}
|
|
except Exception, e:
|
|
cherrypy.log("useFile (erreur): %s" % str(e), 'IMPRESSION', 1)
|
|
return {'erreur':str(e) }
|
|
useFile.exposed= True
|
|
|
|
|
|
#
|
|
# methode pour changer les parametres
|
|
#
|
|
def changeSettings(self, copies=None, couleurs=None, recto_verso=None, agrafes=None, papier=None):
|
|
try:
|
|
nouvPrix = cherrypy.session['impression'].changeSettings(papier=papier, couleurs=couleurs, agraphes=agrafes, recto_verso=recto_verso, copies=int(copies))
|
|
except Exception, e:
|
|
cherrypy.log("changeSettings (erreur): %s" % str(e), 'IMPRESSION', 1)
|
|
return {"erreur":str(e)}
|
|
return {'nouvPrix':nouvPrix}
|
|
changeSettings.exposed = True
|
|
|
|
|
|
#
|
|
# methode pour lancer l'impression
|
|
#
|
|
def lancerImpression(self):
|
|
try:
|
|
cherrypy.session['impression'].imprime()
|
|
except crans.impression.SoldeInsuffisant:
|
|
return {"SoldeInsuffisant":1}
|
|
except Exception, e:
|
|
cherrypy.log("lancerImpression (erreur): %s" % str(e), 'IMPRESSION', 1)
|
|
return {"erreur":str(e)}
|
|
return {'code':str(crans.impression.digicode.gen_code(cherrypy.session['uid'])) + "#"}
|
|
lancerImpression.exposed = True
|
|
|
|
#
|
|
# methode pour récupérer l'état de l'imprimante
|
|
#
|
|
def etatImprimante(self):
|
|
try:
|
|
try:
|
|
return {"printer_state" : "<br />".join(crans.impression.etat_imprimante.etat())
|
|
except Exception, e:
|
|
return {"printer_state" : 'Imprimante hors ligne'}
|
|
etatImprimante.exposed = True
|
|
|
|
|
|
|
|
|
|
##########################
|
|
# privees
|
|
##########################
|
|
#
|
|
# methode pour obtenir la liste des fichiers uploadés
|
|
#
|
|
def getUploadedFileListFor(self, adh):
|
|
file_folder = os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/")
|
|
if not os.path.isdir(file_folder):
|
|
return []
|
|
return os.listdir(file_folder)
|
|
|
|
|
|
#
|
|
# methode pour enregistrer un fichier
|
|
#
|
|
def savePDF(self, aFile):
|
|
|
|
_, tempFileName = tempfile.mkstemp()
|
|
f = open(tempFileName, 'w+b')
|
|
size=0
|
|
while True:
|
|
data = aFile.file.read(1024 * 8) # Read blocks of 8KB at a time
|
|
if not data:
|
|
break
|
|
f.write(data)
|
|
size += len(data)
|
|
f.close()
|
|
if size == 0:
|
|
raise FileError("Fichier vide")
|
|
|
|
file_folder = os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/")
|
|
if not os.path.isdir(file_folder):
|
|
os.makedirs(file_folder)
|
|
newFilePath = os.path.join(file_folder, aFile.filename)
|
|
shutil.move(tempFileName, newFilePath)
|
|
cherrypy.log("New file uploaded at : %s" % newFilePath, "IMPRESSION")
|
|
return newFilePath
|
|
|
|
|
|
|
|
|
|
|