
Suppression des lignes inutiles. darcs-hash:20050707144158-061a7-b8aa7d7a59a100f164d2165158c36c76f5ebf97d.gz
143 lines
4.1 KiB
Python
Executable file
143 lines
4.1 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) 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
|
|
|
|
|
|
## 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")
|
|
To = u"%s <%s>" % (utilisateur.Nom(), adrmail)
|
|
|
|
## 3) Calcul du prix de l'impression :
|
|
|
|
prix = crans_backend.calcul_prix(nom_fic,sys.argv)
|
|
|
|
|
|
## 4) Formulation du mail au vue des resultats
|
|
|
|
sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : unicode(sys.argv[3],"utf-8" ,'replace')}
|
|
|
|
|
|
# Probleme de taille de papier
|
|
if prix.erreur=="Taille invalide":
|
|
sys.stderr.write(("ERROR: Erreur : utilisateur : %s, format invalide : %s\n" % (utilisateur.Nom(), prix.taille)).encode('latin-1'))
|
|
possible = u"""
|
|
Le format de papier que vous avez choisi (%(taille)s) n'est pas valide.
|
|
|
|
Cela ne va pas être possible d'imprimer ce document sur Laserjet.
|
|
|
|
Rappel : Si vous utilisez lp, il faut définir l'option PageSize
|
|
""" % {'taille' : prix.taille}
|
|
|
|
# Postscript mal formatte
|
|
elif prix.erreur:
|
|
sys.stderr.write(("ERROR: Erreur : utilisateur : %s, raison : %s\n" % (utilisateur.Nom(), prix.erreur)).encode('latin-1'))
|
|
possible = u"""
|
|
Il y a malheureusement eu une erreur lors de votre impression.
|
|
|
|
Le message d'erreur est le suivant :
|
|
%(erreur)s
|
|
|
|
Si l'erreur se reproduit, envoyez un mail à %(adresse_imprimante)s
|
|
""" % { 'erreur' : prix.erreur, "adresse_imprimante" : impression.From_imprimante}
|
|
|
|
# Compte non suffisamment approvisionné :
|
|
elif prix.c_total_euros > (utilisateur.solde() - impression.decouvert) :
|
|
sys.stderr.write("DEBUG: Pas d'impression : Compte trop bas\n")
|
|
template = u"""
|
|
L'impression que vous avez demandé vous coûterait la modique somme
|
|
de %(prix)s.
|
|
|
|
Désolé, je crois que cela ne va pas être possible d'imprimer.
|
|
|
|
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
|
|
|
|
Vous devez alimenter votre compte impression pour pouvoir imprimer
|
|
ce document.
|
|
"""
|
|
possible = prix.remplis_template(template)
|
|
|
|
# Tout est OK
|
|
else :
|
|
template =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
|
|
"""
|
|
possible = prix.remplis_template(template)
|
|
|
|
## 5) Envoi du mail :
|
|
|
|
mail = u"""
|
|
Bonjour,
|
|
|
|
Votre compte impression est actuellement crédité de %(solde)s euros.
|
|
%(possible)s
|
|
|
|
--
|
|
L'imprimante devis
|
|
""" % {'solde' : utilisateur.solde(), 'possible' : possible}
|
|
|
|
try:
|
|
crans_backend.send_email(prix.From, To, 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>\n" % adrmail)
|
|
|
|
sys.exit(0)
|