From 1ef0fb56dc85eef78323e61a09f31b5d2020ca8c Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Thu, 28 Oct 2010 15:24:09 +0300 Subject: [PATCH] Greek fiscal: add options to ir.actions.report.xml for printing. Now, the printer name and num. of copies is stored within the report object. Note that the report object will have to be duplicated, in case of a second company or fiscal printer. bzr revid: p_christ@hol.gr-20101028122409-7fx6qe73dszs76lj --- addons/account_greek_fiscal/__init__.py | 1 + .../account_fiscalgr_view.xml | 13 +++++++ .../account_invoice_print.py | 2 +- addons/account_greek_fiscal/fiscal_prints.py | 21 ++++++----- .../account_greek_fiscal/ir_actions_report.py | 36 +++++++++++++++++++ 5 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 addons/account_greek_fiscal/ir_actions_report.py diff --git a/addons/account_greek_fiscal/__init__.py b/addons/account_greek_fiscal/__init__.py index 4b0438f7d35..bde4b31195c 100644 --- a/addons/account_greek_fiscal/__init__.py +++ b/addons/account_greek_fiscal/__init__.py @@ -22,6 +22,7 @@ import fiscal_prints import account_invoice_print +import ir_actions_report import wizard import report diff --git a/addons/account_greek_fiscal/account_fiscalgr_view.xml b/addons/account_greek_fiscal/account_fiscalgr_view.xml index c2894ffed07..7144aaf059a 100644 --- a/addons/account_greek_fiscal/account_fiscalgr_view.xml +++ b/addons/account_greek_fiscal/account_fiscalgr_view.xml @@ -41,5 +41,18 @@ + + ir.actions.report.xml.fiscalgr_1 + ir.actions.report.xml + + form + + + + + + + + diff --git a/addons/account_greek_fiscal/account_invoice_print.py b/addons/account_greek_fiscal/account_invoice_print.py index 0de4c552a8e..90e792b8b28 100644 --- a/addons/account_greek_fiscal/account_invoice_print.py +++ b/addons/account_greek_fiscal/account_invoice_print.py @@ -78,7 +78,7 @@ class account_invoice(osv.osv): for i in invoices: if fiscalgr_obj.print_invoice(cr,uid,i,self._name,i['number'], i['property_fiscalgr_invoice_report'][0],context): self.write(cr,uid,i['id'],{'state':'printed'}) - logger.notifyChannel("fiscalgr", netsvc.LOG_INFO, 'printed invoice %s'%i['number']) + logger.notifyChannel("fiscalgr", netsvc.LOG_INFO, 'printed invoice ref. %s'%i['number']) return True diff --git a/addons/account_greek_fiscal/fiscal_prints.py b/addons/account_greek_fiscal/fiscal_prints.py index edc6ea0bfd4..0d4bc4a5fd5 100644 --- a/addons/account_greek_fiscal/fiscal_prints.py +++ b/addons/account_greek_fiscal/fiscal_prints.py @@ -39,9 +39,13 @@ class fiscal_print(osv.osv): _defaults = { } - def _print_fiscal(self,cr,uid,report_id,title,format,content,context=None): + def _print_fiscal(self,cr,uid,report_id,title,format,content,printer='Forol',copies=1,context=None): import tempfile import os + if not printer: + raise Exception(_('No printer specified for report')) + if not copies: + copies=1 (fileno, fp_name) = tempfile.mkstemp('.'+format, 'openerp_') fp = file(fp_name, 'wb+') fp.write(content.encode('iso8859-7')) @@ -51,25 +55,24 @@ class fiscal_print(osv.osv): try: import cups except: - common.message(_('Cannot talk to cups, please install pycups')) - return False + raise Exception(_('Cannot talk to cups, please install pycups')) ccon = cups.Connection() #attrs=ccon.getPrinterAttributes(name=PRINTER) #print "Located \"%s\" at a v%s CUPS server" %(attrs['printer-make-and-model'],attrs['cups-version']) - print 'Trying to print %s at %s'%(fp_name,PRINTER) - job = ccon.printFile(PRINTER,fp_name,title,{}) + #print 'Trying to print %s at %s'%(fp_name,PRINTER) + job = ccon.printFile(printer,fp_name,title,{'copies': str(copies)}) os.unlink(fp_name) if job: print 'Created job %d'% job fprn=self.create(cr,uid,{'cups_jobid':job,'name':title,'report':report_id},context) return True else: - common.message(_('Cannot print at printer %s')%PRINTER) + raise Exception(_('Cannot print at printer %s')%printer) return False def print_invoice(self,cr,uid,inv_data,inv_model,inv_title, inv_report, context): logger=netsvc.Logger() - logger.notifyChannel("fiscalgr", netsvc.LOG_INFO, 'printing one %s invoice '%(type(inv_report))) + logger.notifyChannel("fiscalgr", netsvc.LOG_DEBUG, 'printing one %s invoice '%(inv_report)) report_obj=self.pool.get('ir.actions.report.xml') rep= report_obj.read(cr,uid,inv_report,[]) if (rep['model']!=inv_model or rep['report_type'] != 'txt'): @@ -83,7 +86,9 @@ class fiscal_print(osv.osv): if (format != 'txt'): raise Exception("Invoice format is not txt, strange") # print result - return self._print_fiscal(cr,uid,inv_report,inv_title,format,result.decode('utf-8'),context) + return self._print_fiscal(cr,uid,inv_report,title=inv_title,format=format, + content=result.decode('utf-8'),printer=rep['printer'], + copies=rep['copies'],context=context) #self._reports[id]['result'] = result #self._reports[id]['format'] = format diff --git a/addons/account_greek_fiscal/ir_actions_report.py b/addons/account_greek_fiscal/ir_actions_report.py new file mode 100644 index 00000000000..7b257d23020 --- /dev/null +++ b/addons/account_greek_fiscal/ir_actions_report.py @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2008 Tiny SPRL (). All Rights Reserved +# $Id$ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import fields, osv +# import netsvc + +class report_xml(osv.osv): + _inherit = "ir.actions.report.xml" + _columns = { + # states={'open':[('readonly',False)]} + 'printer': fields.char('Printer', size=50, help="Preferred printer for this report. Useful for server-side printing."), + 'copies': fields.integer('Copies', help="Default number of copies."), + } + +report_xml() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file