Ajout des fonctions d'impression des factures sur l'imprimante thermique
This commit is contained in:
parent
6b08464bfc
commit
2d4647e9bf
5 changed files with 133 additions and 11 deletions
105
dump.py
105
dump.py
|
@ -8,10 +8,11 @@ from AdafruitThermal import Adafruit_Thermal as AdafruitThermal
|
|||
import subprocess, time, Image, socket
|
||||
import os
|
||||
import json
|
||||
from config import DEVICE
|
||||
|
||||
#
|
||||
CODING='cp437'
|
||||
DEVICE="/dev/ttyUSB0"
|
||||
|
||||
SAMPLE_MACHINE = {
|
||||
'host': 'nouille',
|
||||
'macAddress': '<automatique>',
|
||||
|
@ -60,6 +61,91 @@ def show_entry(entry):
|
|||
printer.feed(1)
|
||||
|
||||
|
||||
def make_fact_elem(element,nb_car,is_last):
|
||||
|
||||
ligne = u''
|
||||
|
||||
u_elem = unicode(element)
|
||||
if len(u_elem) >= nb_car:
|
||||
ligne += u_elem[0:nb_car]
|
||||
else:
|
||||
if is_last:
|
||||
for i in range(nb_car-len(u_elem)):
|
||||
ligne += u' '
|
||||
ligne += u_elem
|
||||
else:
|
||||
ligne += u_elem
|
||||
for i in range(nb_car-len(u_elem)):
|
||||
ligne += u' '
|
||||
|
||||
if is_last:
|
||||
ligne += u''
|
||||
else:
|
||||
ligne += u'|'
|
||||
|
||||
return ligne
|
||||
|
||||
# Fonction spéciale pour l'impression des factures
|
||||
# ! facture est un dictionnaire, pas un objet LDAP !
|
||||
def show_facture(facture):
|
||||
|
||||
#Impression de l'en-tête
|
||||
printer.justify('L')
|
||||
printer.println(facture['recuPaiement'].encode(CODING))
|
||||
printer.justify('C')
|
||||
printer.println(u'--------------------------------'.encode(CODING))
|
||||
printer.boldOn()
|
||||
fid = u'Facture n°'+ facture['fid']
|
||||
printer.println(fid.encode(CODING))
|
||||
printer.boldOff()
|
||||
printer.println(u'--------------------------------'.encode(CODING))
|
||||
|
||||
#Impression de l'en-tête de la facture
|
||||
proprio = facture.proprio()
|
||||
nom_complet = facture['nom'] + u' ' + facture['prenom']
|
||||
printer.justify('R')
|
||||
printer.println((u'Adhérent : ' + nom_complet).encode(CODING))
|
||||
if facture['chbre'] is u'EXT':
|
||||
printer.println(u'Externe'.encode(CODING))
|
||||
else:
|
||||
printer.println((u'Chambre : ' + facture['chbre']).encode(CODING))
|
||||
|
||||
printer.println((u'Début adhésion : ' + facture['debutAdhesion']).encode(CODING))
|
||||
printer.println((u'Fin adhésion : ' + facture['finAdhesion']).encode(CODING))
|
||||
printer.println((u'Fin connexion : ' + facture['finConnexion']).encode(CODING))
|
||||
|
||||
printer.justify('L')
|
||||
printer.println(u'--------------------------------'.encode(CODING))
|
||||
printer.println(u' Code | Désig. |Qté| P.U '.encode(CODING)) #Code(6c. max.),Désignation(11c. max.),Qté(3c. max),PU(8[+1]c.max)
|
||||
printer.println(u'------|-----------|---|---------'.encode(CODING))
|
||||
|
||||
#Impression du corps de la facture + calcul du prix total
|
||||
total = 0.0
|
||||
for art in facture['article']:
|
||||
row = u''
|
||||
row += make_fact_elem(art['code'],6,False)
|
||||
row += make_fact_elem(art['designation'],11,False)
|
||||
row += make_fact_elem(art['nombre'],3,False)
|
||||
row += make_fact_elem(art['pu']+u'e',9,True)
|
||||
total += float(art['pu'])
|
||||
|
||||
printer.println(row.encode(CODING))
|
||||
|
||||
printer.println(u'--------------------------------'.encode(CODING))
|
||||
|
||||
#On affiche le total
|
||||
printer.justify('R')
|
||||
printer.println((u'---------').encode(CODING))
|
||||
printer.println((u'Total à régler '+ '|' + make_fact_elem(total,8,True) + u'e').encode(CODING))
|
||||
printer.println((u'---------').encode(CODING))
|
||||
printer.justify('L')
|
||||
printer.println((u'Payé par ' + facture['modePaiement']).encode(CODING))
|
||||
|
||||
|
||||
#Fin de la facture
|
||||
printer.feed(1)
|
||||
|
||||
|
||||
# Do print
|
||||
def print_liste(liste):
|
||||
printer.setDefault() # Restore printer to defaults
|
||||
|
@ -71,13 +157,16 @@ def print_liste(liste):
|
|||
#if not first:
|
||||
# print_carac('','')
|
||||
first = False
|
||||
|
||||
show_entry(m)
|
||||
|
||||
if 'fid' in m.keys():
|
||||
show_facture(m) # Si le champ fid est présent, c'est une facture -> on utilise la fonction adaptée
|
||||
else:
|
||||
show_entry(m)
|
||||
|
||||
printer.println(u'Veuillez conserver ces'.encode(CODING))
|
||||
printer.println(u'informations en lieu sûr.'.encode(CODING))
|
||||
printer.println(u' '.encode(CODING))
|
||||
printer.println(u' '.encode(CODING))
|
||||
printer.println(u'Veuillez conserver ces'.encode(CODING))
|
||||
printer.println(u'informations en lieu sûr.'.encode(CODING))
|
||||
printer.println(u' '.encode(CODING))
|
||||
printer.println(u' '.encode(CODING))
|
||||
|
||||
printer.feed(2)
|
||||
|
||||
|
@ -88,4 +177,4 @@ if __name__ == '__main__':
|
|||
with open(sys.argv[1], 'r') as f:
|
||||
liste = json.load(f)
|
||||
print_liste(liste)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue