diff --git a/lib/impression/__init__.py b/lib/impression/__init__.py index f660e91a..871ef10f 100644 --- a/lib/impression/__init__.py +++ b/lib/impression/__init__.py @@ -1,32 +1,32 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- # ############################################################# -# .. -# .... ............ ........ -# . ....... . .... .. -# . ... .. .. .. .. ..... . .. -# .. .. ....@@@. .. . ........ . -# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... -# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... -# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. -# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... -# ...@@@.... @@@ .@@.......... ........ ..... .. -# . ..@@@@.. . .@@@@. .. ....... . ............. -# . .. .... .. .. . ... .... -# . . .... ............. .. ... -# .. .. ... ........ ... ... -# ................................ -# +# .. +# .... ............ ........ +# . ....... . .... .. +# . ... .. .. .. .. ..... . .. +# .. .. ....@@@. .. . ........ . +# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... +# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... +# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. +# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... +# ...@@@.... @@@ .@@.......... ........ ..... .. +# . ..@@@@.. . .@@@@. .. ....... . ............. +# . .. .... .. .. . ... .... +# . . .... ............. .. ... +# .. .. ... ........ ... ... +# ................................ +# # ############################################################# -# __init__.py -# +# __init__.py +# # Classe impression -# -# Copyright (c) 2006 by www.crans.org +# +# Copyright (c) 2006 by www.crans.org # ############################################################# """ -Classe pour grer l'envoie de pdf l'imprimante. -Calcule le cot des options d'impression. +Classe pour gérer l'envoie de pdf à l'imprimante. +Calcule le coût des options d'impression. """ __version__ = '1' @@ -35,20 +35,20 @@ sys.path.append('/usr/scripts/gestion') import config import cout from crans.utils import QuoteForPOSIX as escapeForShell -import crans.utils.logs +import crans.utils.logs log = crans.utils.logs.getFileLogger('impression') -# Dbut : Ajout log pour restimer les cots +# Début : Ajout log pour réestimer les coûts import time import hptools -comm = hptools.snmp(host="laserjet.adm.crans.org",version="1",community="public") -# Fin +comm = hptools.snmp(host="imprimante.adm.crans.org",version="1",community="public") +# Fin # ######################################################## # # CONSTANTES # # ######################################################## # -# # -# Dbut : Ajout log pour restimer les cots +# +# Début : Ajout log pour réestimer les coûts FICHIER_LOG="/var/log/log_couts/impressions" SNMP_CAR_B_PC="enterprises.11.2.3.9.4.2.1.4.1.10.1.1.18.1.0" @@ -67,10 +67,10 @@ SNMP_TAM_B_PR="enterprises.11.2.3.9.4.2.1.4.1.10.5.1.1.5.0" SNMP_TAM_C_PR="enterprises.11.2.3.9.4.2.1.4.1.10.5.1.1.6.0" SNMP_TAM_M_PR="enterprises.11.2.3.9.4.2.1.4.1.10.5.1.1.7.0" SNMP_TAM_Y_PR="enterprises.11.2.3.9.4.2.1.4.1.10.5.1.1.8.0" -# Fin +# Fin DECOUVERT_AUTHORISE = config.impression.decouvert -PAS_D_AGRAPHES = "pasdagraphes" +PAS_D_AGRAPHES = "pasdagraphes" AGRAPHE_DIAGONALE = "agraphediagonale" UNE_AGRAPHE = "uneagraphe" DEUX_AGRAPHE = "Deuxagraphes" @@ -83,7 +83,7 @@ NB_AGRAPHES = { UNE_AGRAPHE: 1, DEUX_AGRAPHE: 2, TROIS_AGRAPHE: 3, - STITCHING: 6, + STITCHING: 6, } PAPIER_A4 = "A4" @@ -115,14 +115,14 @@ LABELS = { DEUX_AGRAPHE: '2 agrafes', TROIS_AGRAPHE: '3 agrafes', STITCHING: 'stitching (6 agrafes)', - + PAPIER_A4: "A4", PAPIER_A4_TRANSPARENT: "A4 transparent", PAPIER_A3: "A3", - + IMPRESSION_COULEUR: "impression couleurs", IMPRESSION_NB: "impression noir et blanc", - + IMPRESSION_RECTO: "impression recto", IMPRESSION_RECTO_VERSO: "impression recto-verso", IMPRESSION_RECTO_VERSO_SHORT: "impression recto-verso", @@ -135,14 +135,14 @@ LPR_OPTIONS = { DEUX_AGRAPHE: ' -o StapleLocation=2parallel', TROIS_AGRAPHE: ' -o StapleLocation=3parallel', STITCHING: ' -o StapleLocation=Stitching', - + PAPIER_A4: ' -o InputSlot=Tray4 -o pdf-paper=571x817 -o PageSize=A4', PAPIER_A4_TRANSPARENT: ' -o PageSize=A4 -o InputSlot=Tray1 -o Media=Transparency', PAPIER_A3: ' -o pdf-expand -o pdf-paper=825x1166 -o InputSlot=Tray3 -o HPPaperPolicy=A3 -o PageSize=A3', - + IMPRESSION_COULEUR: ' -o HPColorasGray=False', IMPRESSION_NB: ' -o HPColorasGray=True', - + IMPRESSION_RECTO: ' -o sides=one-sided', IMPRESSION_RECTO_VERSO: ' -o sides=two-sided-long-edge', IMPRESSION_RECTO_VERSO_SHORT: ' -o sides=two-sided-short-edge', @@ -152,12 +152,12 @@ LPR_OPTIONS = { # ######################################################## # # ERREURS # # ######################################################## # -# +# class FichierInvalide(Exception): """ - Exception renvoyée lorsqu'un fichier ne passe pas. - utilisée avec deux arguments : une chaîndécrivant l'erreur et une chine avec le nom du fichier + Exception renvoyée lorsqu'un fichier ne passe pas. + utilisée avec deux arguments : une chaîndéÃécrivant l'erreur et une chÃine avec le nom du fichier """ def __str__(self): """ @@ -166,7 +166,7 @@ class FichierInvalide(Exception): return self.args[0] def file(self): """ - Nom du fichier qui pose problme + Nom du fichier qui pose problème """ try: return self.args[1] @@ -175,7 +175,7 @@ class FichierInvalide(Exception): class SoldeInsuffisant(Exception): """ - Solde insuffisant pour l'impression demande + Solde insuffisant pour l'impression demandée """ pass class PrintError(Exception): @@ -185,18 +185,18 @@ class PrintError(Exception): pass class SettingsError(Exception): """ - Erreur de paramtres. + Erreur de paramètres. """ pass # ######################################################## # # CLASSE IMPRESSION # # ######################################################## # -# +# # class impression: """impression - - Un objet impression correspond un fichier pdf et un adhrent. + + Un objet impression correspond ˆ un fichier pdf et un adhŽrent. """ # fichier (chemin) _fichier = "" @@ -218,14 +218,16 @@ class impression: # (prix pour papier A4) _base_prix_nb = 0.0 _base_prix_couleurs = 0.0 - - + + def __init__(self, path_to_pdf, adh = None): """impression(path_to_pdf [, adh]) - - Cre un nouvel objet impression partir du fichier pdf point par path_to_pdf. - Si adh ext donn, il peut tre soit une instance d'un objet adhrent de crans_ldap soit le login de l'adhrent. - Lve l'exception FichierInvalide si le fichier n'existe pas ou si ce n'est pas un pdf. + + Crée un nouvel objet impression à partir du fichier pdf pointé + par path_to_pdf. Si adh ext donné, il peut être soit une + instance d'un objet adhérent de crans_ldap soit le login de + l'adhérent. Lève l'exception FichierInvalide si le fichier + n'existe pas ou si ce n'est pas un pdf. """ self._fichier = path_to_pdf # on verifie que le fichier existe @@ -244,12 +246,12 @@ class impression: raise Exception, "Erreur dans le calcul du cout : %s " % str(e) self._calcule_prix() - + def changeSettings(self, agraphes = None, papier = None, couleurs = None, recto_verso=None, copies=None): """changeSettings([keyword=value]) - + Change les parametres de l'impression, recalcule et renvoie le nouveau prix. - Lve une exceotion SettingError si les paramtres son invalides. + Lève une exceotion SettingError si les paramètres son invalides. """ #recalcule et renvoie le prix if (couleurs): @@ -290,61 +292,61 @@ class impression: def printSettings(self): """printSettings() - - Affiche les paramtres courrants sur la sortie standard + + Affiche les paramètres courrants sur la sortie standard """ print "Type impression: " + LABELS[self._settings['couleurs']] print "Agraphes: " + LABELS[self._settings['agraphes']] print "Papier: " + LABELS[self._settings['papier']] print "Disposition: " + LABELS[self._settings['recto_verso']] print "Copies: " + str(self._settings['copies']) - + def prix(self): """prix() - + Renvoie le prix courrant de l'impression """ return self._prix - + def fileName(self): """fileName() - + renvoie le nom du fichier pdf (exemple : monPdf.pdf) """ return os.path.basename(self._fichier) - + def filePath(self): """filePath() - - renvoie le chemin d'accs au fichier pdf. + + renvoie le chemin d'accs au fichier pdf. """ return self._fichier - - + + def devisDetaille(self): """devisDetaille() - - renvoie un disctionnaire contenant le devis (intitul, PU., quantit) pour tous les lments de l'impression + + renvoie un disctionnaire contenant le devis (intitulé, PU., quantité) pour tous les éléments de l'impression (papier, encre, agrafes...) """ return self._details_devis - + def pages(self): """pages() - - renvoie le nombre de pages du document (page au sens nombre de faces imprimer et non le nombre de feuilles) + + renvoie le nombre de pages du document (page au sens nombre de faces à imprimer et non le nombre de feuilles) """ return self._nb_pages - + def imprime(self): """imprime() - - imprime le document pdf. dbite l'adhrent si adhrent il y a. - (si il a t indiqu l'initialisation de l'objet) + + imprime le document pdf. débite l'adhérent si adhérent il y a. + (si il a été indiqué à l'initialisation de l'objet) """ - # debite l'adhrent si adherent il y a + # debite l'adhérent si adherent il y a if (self._adh != None): adh = self._get_adh(self._adh) if (self._prix > (adh.solde() - DECOUVERT_AUTHORISE)): @@ -354,10 +356,10 @@ class impression: del adh # imprime le document self._exec_imprime() - + def printDevis(self): """printDevis() - + Affiche le devis sur la sortie standard. """ print "titre \t\t | p.u. \t quandtite \t total" @@ -373,32 +375,32 @@ class impression: base_prix_encre = self._base_prix_couleurs else: base_prix_encre = self._base_prix_nb - + if (self._settings['papier'] == PAPIER_A3): - pu_encre = base_prix_encre * 2 + pu_encre = base_prix_encre * 2 else: - pu_encre = base_prix_encre + pu_encre = base_prix_encre facture.append(( LABELS[self._settings['couleurs']] + ' sur papier ' + LABELS[self._settings['papier']], pu_encre, self._settings['copies'])) prix+= self._settings['copies'] * pu_encre - + #calcul du prix des feuilles if (self._settings['recto_verso'] == IMPRESSION_RECTO_VERSO) or (self._settings['recto_verso'] == IMPRESSION_RECTO_VERSO_SHORT): nbfeuilles = int(self._nb_pages/2.+0.5) * self._settings['copies'] - else: + else: nbfeuilles = self._nb_pages * self._settings['copies'] facture.append(( 'feuilles ' + LABELS[self._settings['papier']], - PU_FEUILLE[self._settings['papier']], + PU_FEUILLE[self._settings['papier']], nbfeuilles)) prix+= PU_FEUILLE[self._settings['papier']] * nbfeuilles - + # calcul prix des Agraphes facture.append(( 'agrafes', - PU_AGRAPHE, + PU_AGRAPHE, NB_AGRAPHES[self._settings['agraphes']] * self._settings['copies'])) prix+= NB_AGRAPHES[self._settings['agraphes']] * self._settings['copies'] * PU_AGRAPHE @@ -424,7 +426,7 @@ class impression: ## def _exec_imprime(self): """ Envoie l'impression a l'imprimante avec les parametres actuels """ - + if (self._adh != None): log.info('Impression [%s] : %s' % (self._adh, self._fichier)) else: @@ -434,42 +436,42 @@ class impression: # Creation de la liste d'options # pour le nombre de copies et specifie non assemblee #options += '-# %d -o Collate=True' % self.nb_copies - - # Pour specifier l'imprimante + + # Pour specifier l'imprimante options += ' -P laserjet' - + #Indique la presence d'un bac de sortie avec agrafeuse options += " -o Option20=MBMStaplerStacker -o OutputBin=StackerStapled" - + # Pour specifier la version du language postscript utilise par pdftops options += ' -o pdf-level3' - + # Pour donner le titre de l'impression options += " -T '%s'" % self._fichier - + # Pour donner le login de l'adherent if (self._adh != None): options += ' -U %s' % self._adh - + # Pour demander une page de garde #options += ' -o job-sheets=crans' #page de garde de type standard #options += " -o job-billing=%.2f" % self.cout #options += ' -o job-sheets=none' - - + + # option agrafes options += LPR_OPTIONS[self._settings['agraphes']] - + # option papier - options += LPR_OPTIONS[self._settings['papier']] - + options += LPR_OPTIONS[self._settings['papier']] + # option disposition - options += LPR_OPTIONS[self._settings['recto_verso']] - + options += LPR_OPTIONS[self._settings['recto_verso']] + # options couleurs - options += LPR_OPTIONS[self._settings['couleurs']] - - # Dbut : Ajout log pour restimer les cots + options += LPR_OPTIONS[self._settings['couleurs']] + + # Début : Ajout log pour réestimer les coûts # Commandes snmp recuperation des etats val_car_b_pc=int(comm.get(SNMP_CAR_B_PC)) val_car_c_pc=int(comm.get(SNMP_CAR_C_PC)) @@ -487,9 +489,9 @@ class impression: val_tam_c_pr=int(comm.get(SNMP_TAM_C_PR)) val_tam_m_pr=int(comm.get(SNMP_TAM_M_PR)) val_tam_y_pr=int(comm.get(SNMP_TAM_Y_PR)) - + fichier_log_imp=open(FICHIER_LOG,"a") - fichier_log_imp.write("%d %3d %2s : %3d %3d %3d %3d : %5d %5d %5d %5d : %3d %3d %3d %3d : %5d %5d %5d %5d : %s\n" % + fichier_log_imp.write("%d %3d %2s : %3d %3d %3d %3d : %5d %5d %5d %5d : %3d %3d %3d %3d : %5d %5d %5d %5d : %s\n" % (time.time(),self._settings['copies'],self._settings['papier'], val_car_b_pc, val_car_c_pc, @@ -501,16 +503,16 @@ class impression: val_car_y_pr, val_tam_b_pc, val_tam_c_pc, - val_tam_m_pc, + Val_tam_m_pc, val_tam_y_pc, val_tam_b_pr, val_tam_c_pr, val_tam_m_pr, val_tam_y_pr, - self._fichier) ) + self._fichier) ) fichier_log_imp.close() - # Fin - + # Fin + liste_nom_fichier_pdf=(' '+escapeForShell( self._fichier ) )*self._settings['copies'] import commands #(status,rep) = commands.getstatusoutput("lpr %s %s" % (options, self.nom_fichier_pdf)) @@ -519,5 +521,5 @@ class impression: log.error("erreur impression") log.error("lpr status:%d | rep: %s" % (status, rep)) raise PrintError, "lpr %s %s \n status:%d rep: %s" % (options, liste_nom_fichier_pdf, status, rep) - - + + diff --git a/lib/impression/etat_imprimante.py b/lib/impression/etat_imprimante.py index fe736205..5f1e2865 100644 --- a/lib/impression/etat_imprimante.py +++ b/lib/impression/etat_imprimante.py @@ -2,10 +2,10 @@ # -*- coding: iso-8859-15 -*- """ etat_imprimante.py - - Rcupre, filtre et formate l'tat actuel de l'imprimante - Copyright (c) 2006 by www.crans.org + Rcupre, filtre et formate l'tat actuel de l'imprimante + + Copyright (c) 2006 by www.crans.org """ @@ -54,9 +54,9 @@ def etat_laserjet(): u"JAUNE": u"", u"NOIR": u"", u'Pr aide appuyer \x1f': u"", - u'13.12.12 BOURRAGE DS':u"Bourrage papier", + u'13.12.12 BOURRAGE DS':u"Bourrage papier", u'ACCESSOIRE GAUCHE':u"", - u'13.03.00 BOURRAGE':u"Bourrage papier", + u'13.03.00 BOURRAGE':u"Bourrage papier", u'DS TRAPPE SUP DROITE':u"", u'COMM TAMB. NOIR':u"", u'PAGES REST.': u"",