@@ -85,12 +85,33 @@ def _get_report_default_print_behaviour(self):
8585 result ["tray" ] = self .printer_tray_id .system_name
8686 return result
8787
88- def behaviour (self ):
88+ def _set_extra_print_options (self , extras ):
89+ """
90+ extra: A dictionary with extra print options
91+ """
92+ extras_options = {}
93+ for extra , value in extras .items ():
94+ try :
95+ extras_options .update (
96+ getattr (self , "_set_print_extra_%s" % extra )(value )
97+ )
98+ except AttributeError :
99+ extras_options [extra ] = str (value )
100+ return extras_options
101+
102+ def _set_print_extra_quantity (self , value ):
103+ """
104+ We add the 'copies' attribute
105+ """
106+ return {"copies" : str (value )} if value else {}
107+
108+ def behaviour (self , ** extras ):
89109 self .ensure_one ()
90110 printing_act_obj = self .env ["printing.report.xml.action" ]
91111
92112 result = self ._get_user_default_print_behaviour ()
93113 result .update (self ._get_report_default_print_behaviour ())
114+ result .update (self ._set_extra_print_options (extras = extras ))
94115
95116 # Retrieve report-user specific values
96117 print_action = printing_act_obj .search (
@@ -122,8 +143,8 @@ def behaviour(self):
122143 result ["printer_exception" ] = True
123144 return result
124145
125- def print_document_client_action (self , record_ids , data = None ):
126- behaviour = self .behaviour ()
146+ def print_document_client_action (self , record_ids , data = None , ** extras ):
147+ behaviour = self .behaviour (** extras )
127148 printer = behaviour .pop ("printer" , None )
128149 if printer .multi_thread :
129150
@@ -138,17 +159,17 @@ def _launch_print_thread():
138159 return True
139160 else :
140161 try :
141- return self .print_document (record_ids , data = data )
162+ return self .print_document (record_ids , data = data , ** extras )
142163 except Exception :
143164 return
144165
145- def print_document_threaded (self , report_id , record_ids , data ):
166+ def print_document_threaded (self , report_id , record_ids , data , ** extras ):
146167 with registry (self ._cr .dbname ).cursor () as cr :
147168 self = self .with_env (self .env (cr = cr ))
148169 report = self .env ["ir.actions.report" ].browse (report_id )
149- report .print_document (record_ids , data )
170+ report .print_document (record_ids , data , ** extras )
150171
151- def print_document (self , record_ids , data = None ):
172+ def print_document (self , record_ids , data = None , ** extras ):
152173 """Print a document, do not return the document file"""
153174 report_type = REPORT_TYPES .get (self .report_type )
154175 if not report_type :
@@ -160,7 +181,7 @@ def print_document(self, record_ids, data=None):
160181 document , doc_format = getattr (
161182 self .with_context (must_skip_send_to_printer = True ), method_name
162183 )(self .report_name , record_ids , data = data )
163- behaviour = self .behaviour ()
184+ behaviour = self .behaviour (** extras )
164185 printer = behaviour .pop ("printer" , None )
165186
166187 if not printer :
0 commit comments