131 lines
4.6 KiB
Python
Executable file
131 lines
4.6 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
|
|
|
|
|
|
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: %s" % str(e), 'IMPRESSION', 1)
|
|
return {'erreur':str(e) }
|
|
useFile.exposed= True
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
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)}
|
|
cherrypy.log("impression demandee " , 'IMPRESSION')
|
|
return {'code':str(crans.impression.digicode.gen_code("Impression intranet : " + cherrypy.session['uid'])) + "#"}
|
|
lancerImpression.exposed = True
|
|
|
|
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)
|
|
|
|
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
|
|
|
|
|
|
##########################
|
|
# 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
|