#! /usr/bin/env python # -*- coding: iso-8859-15 -*- # # Backend CUPS réalisant les devis # Codé par Benoit et Fred, inspirés par CUPSPykota # Licence : GNU General Public Licence, version 2 # Structure lineaire : # 1) Preliminaires # 2) Recuperation des donnees de l'utilisateur # 3) Calcul du prix de l'impression # 4) Formulation du mail # 5) Envoi du mail import sys sys.path.append('/usr/scripts/impression') import crans_backend sys.path.append('/usr/scripts/gestion') from config import impression import resource # Limitation à 50 Mo de mémoire resource.setrlimit(resource.RLIMIT_DATA, (1024*1024*50, 1024*1024*50)) resource.setrlimit(resource.RLIMIT_RSS, (1024*1024*50, 1024*1024*50)) ## 1) Preliminaires : description = '%s devis "Crans" "Mail un devis au demandeur"' % sys.argv[0] fic = crans_backend.preliminaires(sys.argv, description) nom_fic = fic.name sys.stderr.write("DEBUG: Fichier %s nettoye.\n" % nom_fic) ## 2) Recuperation de l'utilisateur et de son mail en lecture seule : utilisateur = crans_backend.utilisateur(sys.argv[2],0) # Recuperation de l'adresse mail adrmail = utilisateur.mail() if adrmail.find('@') == -1 : adrmail += "@crans.org" adrmail = adrmail.encode("iso8859-15") sys.stderr.write("DEBUG: Utilisateur %s recupere.\n" % utilisateur.Nom()) ## 3) Calcul du prix de l'impression : if "media=transparency" in sys.argv: prix = crans_backend.calcul_prix(nom_fic, "transparent") else: prix = crans_backend.calcul_prix(nom_fic, "") sys.stderr.write("DEBUG: Prix calcule : %s euros\n" % prix.c_total_euros) ## 4) Formulation du mail au vue des resultats if prix.c_total_euros > (utilisateur.solde() - impression.decouvert) : possible = u""" Désolé, je crois que cela ne va pas être possible d'imprimer. Vous devez alimenter votre compte impression pour pouvoir imprimer ce document""" else : possible = u""" L'impression que vous avez demandé vous coûterait la modique somme de %(prix)s. Il vous sera possible d'imprimer ce document sur Laserjet. Voici le détail de votre devis, 100 unités correspondant à un remplissage total d'une face A4 : * Format de papier : %(taille)s * Pour une copie : Noir : %(noir)s unités Couleur : %(couleur)s unités Nombre de faces : %(faces)s Nombre de pages : %(pages)s * Nombre de copies : %(copies)s Prix total : %(prix)s""" if prix.taille=="NON_VALIDE": possible = u""" ATTENTION : Le format de papier que vous avez choisi n'est pas valide. Il ne vous sera pas possible d'imprimer ce document sur Laserjet. Rappel : Si vous utilisez lp, il faut définir l'option PageSize""" sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : unicode(sys.argv[3],"utf-8" ,'replace')} mail = u""" Bonjour, Votre compte impression est actuellement crédité de %(solde)s euros. %(possible)s -- L'imprimante devis """ % {'solde' : utilisateur.solde(), 'possible' : possible} ## 5) Envoi du mail : try: prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : utilisateur.Nom(), 'adrmail' : adrmail}, sujet, mail ) sys.stderr.write("DEBUG: Mail envoye ; Fin du devis...\n" ) except: sys.stderr.write("ERROR: Erreur : Impossible d'envoyer le mail a l'adresse <%s>" % adrmail) sys.exit(0)