on evite que l'impression garde longtemps un utilisateur locke en ecriture + fonctions pour la gestion des codes du digicode par l'intranet

darcs-hash:20061009172138-f46e9-a6141b3b4fa7cb02d9253b4436632bccf7859208.gz
This commit is contained in:
gdetrez 2006-10-09 19:21:38 +02:00
parent ab37a42fe0
commit b4965161f1
2 changed files with 89 additions and 16 deletions

View file

@ -26,13 +26,9 @@
""" """
__version__ = '1' __version__ = '1'
import sys, syslog, os.path import sys, syslog, os.path
sys.path.append('/usr/scripts/gestion') sys.path.append('/usr/scripts/gestion')
import config import config
#def __init__():
# pass
import cout import cout
# ######################################################## # # ######################################################## #
# CONSTANTES # # CONSTANTES #
@ -55,7 +51,6 @@ NB_AGRAPHES = {
DEUX_AGRAPHE: 2, DEUX_AGRAPHE: 2,
TROIS_AGRAPHE: 3, TROIS_AGRAPHE: 3,
STITCHING: 6, STITCHING: 6,
} }
PAPIER_A4 = "A4" PAPIER_A4 = "A4"
@ -161,7 +156,7 @@ class impression:
def __init__(self, path_to_pdf, adh = None): def __init__(self, path_to_pdf, adh = None):
self._fichier = path_to_pdf self._fichier = path_to_pdf
self._adh = self._get_adh(adh) self._adh = adh
# calcule le prix de l'encre tout de suite # calcule le prix de l'encre tout de suite
self._base_prix_couleurs, self._nb_pages = cout.base_prix_couleurs(path_to_pdf) self._base_prix_couleurs, self._nb_pages = cout.base_prix_couleurs(path_to_pdf)
self._base_prix_nb, self._nb_pages = cout.base_prix_nb(path_to_pdf) self._base_prix_nb, self._nb_pages = cout.base_prix_nb(path_to_pdf)
@ -234,10 +229,12 @@ class impression:
def imprime(self): def imprime(self):
# debite l'adherent si adherent il y a # debite l'adherent si adherent il y a
if (self._adh != None): if (self._adh != None):
if (self._prix > (self._adh.solde() - DECOUVERT_AUTHORISE)): adh = self._get_adh(self._adh)
if (self._prix > (adh.solde() - DECOUVERT_AUTHORISE)):
raise SoldeInsuffisant raise SoldeInsuffisant
self._adh.solde(-self._prix, "impression: " + self._fichier) adh.solde(-self._prix, "impression: " + self._fichier)
self._adh.save() adh.save()
del adh
# imprime le document # imprime le document
self._exec_imprime() self._exec_imprime()

View file

@ -23,9 +23,54 @@
# Copyright (c) 2006 by www.crans.org # Copyright (c) 2006 by www.crans.org
# ############################################################# # #############################################################
import sys, time, tempfile, os, commands, string, random import sys, time, tempfile, os, commands, string, random
import crans.utils.files
def __init__(): def __init__():
pass pass
# #############################################################
# CONSTANTES
# #############################################################
CODES_SERVER = "zamok"
CODES_DIR = "/var/impression/codes/"
# test pour voir si on est bien sur la bonne machine
import socket
if socket.gethostname() != CODES_SERVER:
raise EnvironmentError, "La manipulation des codes pour le digicode n'est possible que sur %s" % CODES_SERVER
# #############################################################
# EXCEPTIONS
# #############################################################
def CodeAlreadyExists(Exception):
pass
# #############################################################
# FONCTIONS
# #############################################################
# ###############################
# save_code
# ###############################
# enregistre le codes avec "monString" dans le fichier
#
def save_code(code, monString=""):
code = str(code)
if os.path.exists( os.path.join( CODES_DIR, code ) ):
raise CodeAlreadyExists
# On enregistre le fichier avec le code pour numero
codefichier = open( os.path.join( CODES_DIR, code ) , 'w')
codefichier.write(monString)
codefichier.write("\n")
codefichier.close()
return code
# ###############################
# gen_code
# ###############################
# genere un code aleatoire
# et l'enregistre
#
def gen_code(user_name): def gen_code(user_name):
""" Genere le code et l'enregistre dans /var/impression/codes pour radius """ """ Genere le code et l'enregistre dans /var/impression/codes pour radius """
# Generation du code et ecriture du code # Generation du code et ecriture du code
@ -37,7 +82,7 @@ def gen_code(user_name):
# On genere un code # On genere un code
code = rand.randint(100000, 999999) code = rand.randint(100000, 999999)
# Si le code est libre, on sort de la boucle # Si le code est libre, on sort de la boucle
if not os.path.exists("/var/impression/codes/%d" % code): if not os.path.exists( os.path.join( CODES_DIR, str( code ) ) ):
break break
else: else:
@ -51,9 +96,40 @@ def gen_code(user_name):
sys.stderr.write("ERROR: Plus de codes disponibles.\n") sys.stderr.write("ERROR: Plus de codes disponibles.\n")
sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n") sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n")
return return
save_code(code, user_name)
# On enregistre le fichier avec le code pour numero
codefichier = open("/var/impression/codes/%d" % code, 'w')
codefichier.write("Utilisateur %s\n" % user_name)
codefichier.close()
return code return code
# ###############################
# list_code
# ###############################
# liste les codes et leur age en secondes
#
def list_code():
files = os.listdir(CODES_DIR)
code_list = []
for aCode in files:
age = crans.utils.files.ageOfFile(os.path.join(CODES_DIR, aCode ) )
content = read_code_file(aCode)
code_list.append((aCode, age, content ) )
return code_list
def read_code_file(code):
myfile = open(os.path.join(CODES_DIR, code ), 'r')
lineStr = myfile.readline()
myfile.close()
return lineStr.replace('\n','')
# ###############################
# menage
# ###############################
# supprime les codes vieux de plus de 24h
#
def menage():
fileList = os.listdir(CODES_DIR)
for aFile in fileList:
aFilePath = os.path.join(CODES_DIR, aFile)
if os.path.isfile(aFilePath):
if crans.utils.files.fileIsOlderThan(aFilePath, days=1):
os.remove(aFilePath)