scripts/impression/backend/devis
rozel 40229d2389 Il est plus scure de rcuprer le 2me argument pass au backend pour
authentifier l'utilisateur.

darcs-hash:20050620215420-061a7-2139235e4591190e894b07cd91799d4550b7b967.gz
2005-06-20 23:54:20 +02:00

119 lines
3.6 KiB
Python
Executable file

#! /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) Nettoyage du fichier
# 4) Calcul du prix de l'impression
# 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 :
if len(sys.argv) == 1 :
print '%s devis "Crans" "Mail un devis au demandeur"' % sys.argv[0]
sys.exit(0)
if len(sys.argv) not in (6, 7) :
sys.stderr.write("ERROR: %s job-id user title copies options [file]\n" % sys.argv[0])
sys.exit(1) # Cela stoppe l'imprimante
if sys.argv[-1].find('/') != -1 :
# Fichier fourni
entree = open(sys.argv[-1])
else :
# Lecture sur stdin
entree = sys.stdin
## 2) Recuperation de l'utilisateur et de son mail en lecture seule :
utilisateur = crans_backend.utilisateur(sys.argv[1],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) Nettoyage du fichier :
fic = crans_backend.fichier(entree)
nom_fic = fic.name
sys.stderr.write("DEBUG: Fichier %s nettoye.\n" % nom_fic)
## 4) Calcul du prix de l'impression :
if "media=transparency" in sys.argv:
prix = crans_backend.calcul_prix(nom_fic, "transparency")
else:
prix = crans_backend.calcul_prix(nom_fic, "")
sys.stderr.write("DEBUG: Prix calcule.\n" )
# 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.\nVous devez alimenter votre compte impression pour pouvoir imprimer ce document."
else :
possible = u"Il vous sera possible d'imprimer ce document sur Laserjet."
if prix.format=="NON_VALIDE":
possible = u"ATTENTION : Le format de papier que vous avez choisi n'est pas valide\n"
possible += u"Il ne vous sera pas possible d'imprimer ce document sur Laserjet.\n"
possible += u"Rappel : Si vous utilisez lp il faut définir l'option PageSize"
## 5) Envoi du mail :
sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : sys.argv[3]}
mail = u"""
Bonjour,
L'impression que vous avez demandé vous sera facturé
la modique somme de %%(prix)s.
Votre compte impression est actuellement crédité de %(solde)s euros.
Rappel : votre compte est bloqué à %(blocage)s euros
%(possible)s
Voici le détail de votre devis
Résultats de l'analyse :
Noir (par face) : %%(noir)s%%%%
Couleur (par face) : %%(couleur)s%%%%
Nombre de faces (par copie) : %%(faces)s
Nombre de pages (par copie) : %%(pages)s
Nombre de copies : %%(copies)s
Format : %%(format)s
Prix total : %%(prix)s
--
L'imprimante devis
""" % {'solde' : utilisateur.solde(), 'blocage' : str(impression.decouvert), 'possible' : possible}
sys.stderr.write("DEBUG: Tentative d'envoi du mail.\n" )
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)