← Back to team overview

avanzosc team mailing list archive

[Merge] lp:~dani-ds/avanzosc/dos_mrp_production_report into lp:~avanzosc-security-team/avanzosc/72horas

 

Daniel Campos (Avanzosc) has proposed merging lp:~dani-ds/avanzosc/dos_mrp_production_report into lp:~avanzosc-security-team/avanzosc/72horas.

Requested reviews:
  Avanzosc_security (avanzosc-security-team)

For more details, see:
https://code.launchpad.net/~dani-ds/avanzosc/dos_mrp_production_report/+merge/223603
-- 
https://code.launchpad.net/~dani-ds/avanzosc/dos_mrp_production_report/+merge/223603
Your team Avanzosc_security is requested to review the proposed merge of lp:~dani-ds/avanzosc/dos_mrp_production_report into lp:~avanzosc-security-team/avanzosc/72horas.
=== modified file 'dos_mrp_production_report/__init__.py'
--- dos_mrp_production_report/__init__.py	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/__init__.py	2014-06-18 16:12:56 +0000
@@ -18,7 +18,7 @@
 #
 ##############################################################################
 
-import report
+import reports
 import wizard
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'dos_mrp_production_report/__openerp__.py'
--- dos_mrp_production_report/__openerp__.py	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/__openerp__.py	2014-06-18 16:12:56 +0000
@@ -19,21 +19,19 @@
 ##############################################################################
 
 {
-	"name" : "DOS MRP Production Report",
-	"version" : "1.0",
-	"author" : "DOS",
-	"category" : "Enterprise Specific Modules",
-	"description":"""Module to print labels from order productions with custom format.
-	""",
-	"depends" : ["mrp"],
-	"init_xml" : [],
-	"demo_xml" : [],
-	"update_xml" : [
-		'mrp_production_report.xml',
-		'mrp_production_wizard.xml',
-	],
-	"website": 'http://www.dos-sl.es',
-	"active": False,
-	"installable": True,
+    "name": "DOS MRP Production Report",
+    "version": "1.0",
+    "author": "DOS",
+    "category": "Enterprise Specific Modules",
+    "description": """Module to print labels from order productions with custom format.
+    """,
+    "depends": ["mrp"],
+    "data": ['reports/mrp_production_report.xml',
+             'wizard/mrp_production_wizard.xml',
+             ],
+    "demo": [],
+    "website": 'http://www.dos-sl.es',
+    "active": False,
+    "installable": True,
 }
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== renamed directory 'dos_mrp_production_report/report' => 'dos_mrp_production_report/reports'
=== modified file 'dos_mrp_production_report/reports/mrp_production_label.py'
--- dos_mrp_production_report/report/mrp_production_label.py	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/reports/mrp_production_label.py	2014-06-18 16:12:56 +0000
@@ -20,113 +20,102 @@
 ##############################################################################
 
 import time
-from datetime import datetime
 from report import report_sxw
-from osv import osv
-from tools.translate import _
-import pooler
-
-class mrp_production_label_report(report_sxw.rml_parse):
-	def __init__(self, cr, uid, name, context):
-		super(mrp_production_label_report, self).__init__(cr, uid, name, context=context)
-		self.localcontext.update({
-			'time': time,
-			'get_company_address': self.get_company_address,
-			'get_phone_info': self.get_phone_info,
-			'get_production_order_lines': self.get_production_order_lines,
-		})
-		self.context = context
-		user = self.pool.get('res.users').browse(cr, uid, uid)
-		self.company = user.company_id
-		
-	   
-	def get_company_address (self, order):
-		
-		res = []
-		
-		company = order.company_id or self.company or None
-		
-		if company and company.partner_id:
-			
-			partner = company.partner_id
-			addr_ids = self.pool.get('res.partner').address_get(self.cr, self.uid, [partner.id], ['default'])
-			addr_id = addr_ids['default']
-			addr = self.pool.get('res.partner.address').browse(self.cr, self.uid, addr_id)
-			
-			phone = addr and addr.phone or ''
-			format_phone = phone[0:3] + ' ' + phone[3:6] + ' ' + phone[6:9]
-			
-			res.append(partner and partner.name or "")
-			res.append(addr and addr.street or '')
-			res.append(addr and addr.city or '')
-			res.append(addr and addr.zip or '')
-			res.append(addr and addr.state_id and addr.state_id.name or '')
-			res.append(phone)
-			res.append(format_phone)
-			res.append(addr and addr.email or '')
-			
-		else:
-			
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			
-		return res
-				
-	def get_phone_info (self, order):
-		
-		product_obj = self.pool.get('product.product')
-		product = {}
-		move_lines = order.move_lines2 or order.move_lines or []
-	 
-		for move_line in move_lines:
-
-			if move_line.product_id and product_obj._is_sim(move_line.product_id.categ_id):
-				company = move_line.prodlot_id and move_line.prodlot_id.operador or False
-				if not company:
-					company = move_line.product_id.name and move_line.product_id.name.replace('Tarjeta SIM ', '') or ''
-			
-				product["phone"] = move_line.prodlot_id and move_line.prodlot_id.telefono or ''
-				product["company"] = company
-				
-		return product
-								
-	def get_production_order_lines (self, order):
-		
-		product_obj = self.pool.get('product.product')
-		res = []
-		move_lines = order.move_lines2 or order.move_lines or []
-		
-		move_finished_lines = order.move_created_ids2 or order.move_created_ids or []
-		pack_lot = ""
-		
-		# Obtenemos lote de produccion del producto finalizado (pack)
-		for move_line in move_finished_lines:
-			if move_line.product_id and product_obj._is_pack(move_line.product_id.categ_id):
-				pack_lot = move_line.prodlot_id and move_line.prodlot_id.name or ''
-				break
-				
-		# Obtenemos lineas de teléfono que compones el pack
-		for move_line in move_lines:
-			product = {}
-			
-			if move_line.product_id and product_obj._is_sim(move_line.product_id.categ_id):
-				company = move_line.prodlot_id and move_line.prodlot_id.operador or False
-				if not company:
-					company = move_line.product_id.name and move_line.product_id.name.replace('Tarjeta SIM ', '') or ''
-			
-				product["name"] = pack_lot
-				product["phone"] = move_line.prodlot_id and move_line.prodlot_id.telefono or ''
-				product["company"] = company
-				
-				res.append(product)
-			
-		return res
-		
-report_sxw.report_sxw('report.mrp.production.label.report','mrp.production','addons/dos_mrp_production_report/report/mrp_production_label.rml',parser=mrp_production_label_report)
+
+
+class MrpProductionLabelReport(report_sxw.rml_parse):
+
+    def __init__(self, cr, uid, name, context):
+        super(MrpProductionLabelReport, self).__init__(cr, uid, name,
+                                                       context=context)
+        vals = {'time': time,
+                'get_company_address': self.get_company_address,
+                'get_phone_info': self.get_phone_info,
+                'get_production_order_lines': self.get_production_order_lines,
+                }
+        self.localcontext.update(vals)
+        self.context = context
+        user = self.pool.get('res.users').browse(cr, uid, uid)
+        self.company = user.company_id
+
+    def get_company_address(self, order):
+        res = []
+        company = order.company_id or self.company or None
+        if company and company.partner_id:
+            partner = company.partner_id
+            partner_obj = self.pool['res.partner']
+            addres_obj = self.pool['res.partner.address']
+            addr_ids = partner_obj.address_get(self.cr, self.uid,
+                                               [partner.id], ['default'])
+            addr_id = addr_ids['default']
+            addr = addres_obj.browse(self.cr, self.uid, addr_id)
+            phone = addr and addr.phone or ''
+            format_phone = phone[0:3] + ' ' + phone[3:6] + ' ' + phone[6:9]
+            res.append(partner and partner.name or "")
+            res.append(addr and addr.street or '')
+            res.append(addr and addr.city or '')
+            res.append(addr and addr.zip or '')
+            res.append(addr and addr.state_id and addr.state_id.name or '')
+            res.append(phone)
+            res.append(format_phone)
+            res.append(addr and addr.email or '')
+        else:
+            for i in range(0, 7):
+                res.append(" ")
+        return res
+
+    def get_phone_info(self, order):
+        product_obj = self.pool.get('product.product')
+        product = {}
+        move_lines = order.move_lines2 or order.move_lines or []
+        for move_line in move_lines:
+            if (move_line.product_id and
+                    product_obj._is_sim(move_line.product_id.categ_id)):
+                company = (move_line.prodlot_id and
+                           move_line.prodlot_id.operador or False)
+                if not company:
+                    p_name = move_line.product_id.name
+                    company = (p_name and p_name.replace('Tarjeta SIM ', '')
+                               or '')
+                product["phone"] = (move_line.prodlot_id and
+                                    move_line.prodlot_id.telefono or '')
+                product["company"] = company
+        return product
+
+    def get_production_order_lines(self, order):
+        product_obj = self.pool['product.product']
+        res = []
+        move_lines = order.move_lines2 or order.move_lines or []
+        move_finished_lines = (order.move_created_ids2 or
+                               order.move_created_ids or [])
+        pack_lot = ""
+        # Obtenemos lote de produccion del producto finalizado (pack)
+        for move_line in move_finished_lines:
+            if (move_line.product_id and
+                    product_obj._is_pack(move_line.product_id.categ_id)):
+                pack_lot = (move_line.prodlot_id and
+                            move_line.prodlot_id.name or '')
+                break
+        # Obtenemos lineas de teléfono que compones el pack
+        for move_line in move_lines:
+            product = {}
+            if (move_line.product_id and
+                    product_obj._is_sim(move_line.product_id.categ_id)):
+                company = (move_line.prodlot_id and
+                           move_line.prodlot_id.operador or False)
+                if not company:
+                    p_name = move_line.product_id.name
+                    company = (p_name and p_name .replace('Tarjeta SIM ', '')
+                               or '')
+                product["name"] = pack_lot
+                product["phone"] = (move_line.prodlot_id and
+                                    move_line.prodlot_id.telefono or '')
+                product["company"] = company
+                res.append(product)
+        return res
+
+report_sxw.report_sxw('report.mrp.production.label.report', 'mrp.production',
+                      'addons/dos_mrp_production_report'
+                      '/report/mrp_production_label.rml',
+                      parser=MrpProductionLabelReport)
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== renamed file 'dos_mrp_production_report/mrp_production_report.xml' => 'dos_mrp_production_report/reports/mrp_production_report.xml'
--- dos_mrp_production_report/mrp_production_report.xml	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/reports/mrp_production_report.xml	2014-06-18 16:12:56 +0000
@@ -5,14 +5,14 @@
 				string="Production Label"
 				model="mrp.production"
 				name="mrp.production.label.report"
-				rml="dos_mrp_production_report/report/mrp_production_label.rml"
+				rml="dos_mrp_production_report/reports/mrp_production_label.rml"
 				header="False"
 				auto="False" />
 		<report id="mrp_production_track_label_report"
 				string="Etiqueta de Enlace"
 				model="mrp.production"
 				name="mrp.production.track.label.report"
-				rml="dos_mrp_production_report/report/mrp_production_track_label.rml"
+				rml="dos_mrp_production_report/reports/mrp_production_track_label.rml"
 				header="False"
 				auto="False" />
 	</data>

=== modified file 'dos_mrp_production_report/reports/mrp_production_track_label.py'
--- dos_mrp_production_report/report/mrp_production_track_label.py	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/reports/mrp_production_track_label.py	2014-06-18 16:12:56 +0000
@@ -20,87 +20,73 @@
 ##############################################################################
 
 import time
-from datetime import datetime
 from report import report_sxw
-from osv import osv
-from tools.translate import _
-import pooler
-
-class mrp_production_track_label_report(report_sxw.rml_parse):
-	def __init__(self, cr, uid, name, context):
-		super(mrp_production_track_label_report, self).__init__(cr, uid, name, context=context)
-		self.localcontext.update({
-			'time': time,
-			'get_company_address': self.get_company_address,
-			'get_production_order_lines': self.get_production_order_lines,
-		})
-		self.context = context
-		user = self.pool.get('res.users').browse(cr, uid, uid)
-		self.company = user.company_id
-		
-	   
-	def get_company_address (self, order):
-		
-		res = []
-		
-		company = order.company_id or self.company or None
-		
-		if company and company.partner_id:
-			
-			partner = company.partner_id
-			addr_ids = self.pool.get('res.partner').address_get(self.cr, self.uid, [partner.id], ['default'])
-			addr_id = addr_ids['default']
-			addr = self.pool.get('res.partner.address').browse(self.cr, self.uid, addr_id)
-			
-			phone = addr and addr.phone or ''
-			format_phone = phone[0:3] + ' ' + phone[3:6] + ' ' + phone[6:9]
-			
-			res.append(partner and partner.name or "")
-			res.append(addr and addr.street or '')
-			res.append(addr and addr.city or '')
-			res.append(addr and addr.zip or '')
-			res.append(addr and addr.state_id and addr.state_id.name or '')
-			res.append(phone)
-			res.append(format_phone)
-			res.append(addr and addr.email or '')
-			
-		else:
-			
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			res.append(" ")
-			
-		return res
-
-	def get_production_order_lines (self, order):
-		
-		product_obj = self.pool.get('product.product')
-		res = []
-		move_lines = order.move_lines2 or order.move_lines or []
-		
-		move_finished_lines = order.move_created_ids2 or order.move_created_ids or []
-		pack_lot = ""
-		
-		# Obtenemos lote de produccion del producto finalizado (pack)
-		for move_line in move_finished_lines:
-			if move_line.product_id and product_obj._is_pack(move_line.product_id.categ_id):
-				pack_lot = move_line.prodlot_id and move_line.prodlot_id.name or ''
-				break
-				
-		# Obtenemos enlaces que componen el pack
-		for move_line in move_lines:
-			product = {}
-			
-			if move_line.product_id and product_obj._is_link(move_line.product_id.categ_id):
-				product["name"] = pack_lot
-				res.append(product)
-			
-		return res
-		
-report_sxw.report_sxw('report.mrp.production.track.label.report','mrp.production','addons/dos_mrp_production_report/report/mrp_production_track_label.rml',parser=mrp_production_track_label_report)
+
+
+class MrpProductionTrackLabelReport(report_sxw.rml_parse):
+    def __init__(self, cr, uid, name, context):
+        super(MrpProductionTrackLabelReport, self).__init__(cr, uid, name,
+                                                            context=context)
+        vals = {'time': time,
+                'get_company_address': self.get_company_address,
+                'get_production_order_lines': self.get_production_order_lines,
+                }
+        self.localcontext.update(vals)
+        self.context = context
+        user = self.pool['res.users'].browse(cr, uid, uid)
+        self.company = user.company_id
+
+    def get_company_address(self, order):
+        res = []
+        company = order.company_id or self.company or None
+        if company and company.partner_id:
+            partner = company.partner_id
+            partner_obj = self.pool['res.partner']
+            address_obj = self.pool.get('res.partner.address')
+            addr_ids = partner_obj.address_get(self.cr, self.uid,
+                                               [partner.id], ['default'])
+            addr_id = addr_ids['default']
+            addr = address_obj.browse(self.cr, self.uid, addr_id)
+            phone = addr and addr.phone or ''
+            format_phone = phone[0:3] + ' ' + phone[3:6] + ' ' + phone[6:9]
+            res.append(partner and partner.name or "")
+            res.append(addr and addr.street or '')
+            res.append(addr and addr.city or '')
+            res.append(addr and addr.zip or '')
+            res.append(addr and addr.state_id and addr.state_id.name or '')
+            res.append(phone)
+            res.append(format_phone)
+            res.append(addr and addr.email or '')
+        else:
+            for i in range(0, 7):
+                res.append(" ")
+        return res
+
+    def get_production_order_lines(self, order):
+        product_obj = self.pool['product.product']
+        res = []
+        move_lines = order.move_lines2 or order.move_lines or []
+        move_finished_lines = (order.move_created_ids2 or
+                               order.move_created_ids or [])
+        pack_lot = ""
+        # Obtenemos lote de produccion del producto finalizado (pack)
+        for move_line in move_finished_lines:
+            if (move_line.product_id and
+                    product_obj._is_pack(move_line.product_id.categ_id)):
+                pack_lot = (move_line.prodlot_id and
+                            move_line.prodlot_id.name or '')
+                break
+        # Obtenemos enlaces que componen el pack
+        for move_line in move_lines:
+            product = {}
+            if (move_line.product_id and
+                    product_obj._is_link(move_line.product_id.categ_id)):
+                product["name"] = pack_lot
+                res.append(product)
+        return res
+
+report_sxw.report_sxw('report.mrp.production.track.label.report',
+                      'mrp.production', 'addons/dos_mrp_production_report'
+                      '/report/mrp_production_track_label.rml',
+                      parser=MrpProductionTrackLabelReport)
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== renamed file 'dos_mrp_production_report/mrp_production_wizard.xml' => 'dos_mrp_production_report/wizard/mrp_production_wizard.xml'
--- dos_mrp_production_report/mrp_production_wizard.xml	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/wizard/mrp_production_wizard.xml	2014-06-18 16:12:56 +0000
@@ -1,9 +1,45 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
-    <data>
-        <wizard string="Print Production Labels" 
-        		model="mrp.production"
-        		name="mrp.production.print_labels" 
-        		id="mrp_production_print_labels"/>
-    </data>
+	<data>
+	
+	<record id="view_print_production_labels" model="ir.ui.view">
+		<field name="name">view.print.production.labels</field>
+		<field name="model">wizard.print.labels</field>
+		<field name="type">form</field>
+		<field name="arch" type="xml">
+			<form string="Print Production Labels">
+				<separator string="The following production labels will be print:" colspan="4"/>
+				<field name="text_print" nolabel="1" colspan="4" width="600" height="250" />
+				<group colspan="4" col="6">
+					<button  icon="gtk-cancel" special="cancel" string="Cancel"/>
+					<button  icon="gtk-ok" name="print_labels" string="Print" type="object"/>
+				</group>
+				<newline />
+			</form>
+		</field>
+	</record>
+	
+	<record id="view_done_form" model="ir.ui.view">
+		<field name="name">view.done.form</field>
+		<field name="model">wizard.print.labels</field>
+		<field name="type">form</field>
+		<field name="arch" type="xml">
+		<form string="Print Production Labels">
+			<separator string="Production labels have been successfully sent to print" colspan="4"/>
+			<field name="qty_labels" readonly="1"/>
+			<button icon="gtk-ok" special="cancel" string="Done"/>
+		</form>
+		</field>
+	</record>
+
+	<act_window 
+		id= "mrp_production_print_labels"
+		name= "Print Production Labels" 
+		res_model= "wizard.print.labels"
+		src_model= "mrp.production"
+		key2= "client_action_multi"
+		view_id = "view_print_production_labels"
+		target ="new" />
+
+	</data>
 </openerp>

=== modified file 'dos_mrp_production_report/wizard/wizard_mrp_production_print.py'
--- dos_mrp_production_report/wizard/wizard_mrp_production_print.py	2014-06-11 10:23:47 +0000
+++ dos_mrp_production_report/wizard/wizard_mrp_production_print.py	2014-06-18 16:12:56 +0000
@@ -18,127 +18,115 @@
 #
 ##############################################################################
 
-import wizard
-import pooler
-import tools
 
-from tools.translate import _
-from osv import fields,osv
-import time
+from openerp.tools.translate import _
+from openerp.osv import fields, orm
 import netsvc
-from tools.misc import UpdateableStr, UpdateableDict
 import base64
 
-print_init_form = '''<?xml version="1.0" encoding="utf-8"?>
-<form string="Print Production Labels">
-	<separator string="The following production labels will be print:" colspan="4"/>
-	<field name="text_print" nolabel="1" colspan="4" width="600" height="250" />
-	<newline />
-</form>'''
-
-print_init_fields = {
-	'text_print': {'string':'Message', 'type':'text', 'readonly':True},
-}
-
-print_done_form = '''<?xml version="1.0" encoding="utf-8"?>
-<form string="Print Production Labels">
-	<separator string="Production labels have been successfully sent to print" colspan="4"/>
-	<field name="qty_labels"/>
-</form>'''
-
-print_done_fields = {
-	'qty_labels': {'string':'Printed Labels', 'type':'integer', 'readonly': True},
-}
-
-
-def _get_defaults(self, cr, uid, data, context):
-	p = pooler.get_pool(cr.dbname)
-	user = p.get('res.users').browse(cr, uid, uid, context)
-	
-	text_print = ''
-	i = 0
-	
-	mrp_productions = p.get(data['model']).browse(cr, uid, data['ids'], context)
- 
-	for mrp in mrp_productions:
-
-		i += 1
-		name = mrp.name or ''
-		product_name = mrp.product_id and mrp.product_id.name or ''
-			
-		text_print += str(i) + '. ' + name + ' - ' + product_name + '\n'
-			
-	return {'text_print': text_print}
-
-
-def create_report(cr, uid, res_ids, report_name=False, context={}):
-	if not report_name or not res_ids:
-		raise osv.except_osv(_('Error !'),_('Report name and Resources ids are required !!!'))
-	
-	try:
-		service = netsvc.LocalService("report."+report_name);
-		result, format = service.create(cr, uid, res_ids, {}, context)
-		
-	except Exception,e:
-		print 'Exception in create report:',e
-		raise osv.except_osv(_('Error !'),_('Exception in create report.'))
-	
-	return result, format
-
-
-def _print_labels(self, cr, uid, data, context):
-	import re
-	p = pooler.get_pool(cr.dbname)
-	user = p.get('res.users').browse(cr, uid, uid, context)
-	
-	report_obj = p.get('ir.actions.report.xml')
-	printer_obj = p.get('printing.printer')
-	
-	qty_labels = 0
-	
-	# Obtenemos la impresora Brother-QL-1060N-62x29
-	default_printer = printer_obj.search(cr, uid, [('system_name', '=', 'Brother-QL-1060N-62x29')])
-
-	if default_printer:
-		default_printer = default_printer[0]
-		printer = printer_obj.browse(cr, uid, default_printer, context).system_name
-	else:
-		raise osv.except_osv(_('Error !'),_('Not found any default printer. Please set the default printer.')) 
-	
-	
-	mrp_productions = p.get(data['model']).browse(cr, uid, data['ids'], context)
-
-	for mrp in mrp_productions:
-		
-		# Creamos informe
-		result, format = create_report(cr, uid, [mrp.id], 'mrp.production.label.report', context={})
-	
-		# Imprimimos informe (dos etiquetas de sim)
-		report_obj.print_direct(cr, uid, base64.encodestring(result), format, printer)
-		report_obj.print_direct(cr, uid, base64.encodestring(result), format, printer)
-
-		qty_labels += 2
-		
-		# Etiqueta de enlace para 3bymesa
-		move_lines = mrp.move_lines2 or mrp.move_lines or []
-		if move_lines[0].product_id.id == 58 or move_lines[1].product_id.id == 58:
-			result, format = create_report(cr, uid, [mrp.id], 'mrp.production.track.label.report', context={})
-			report_obj.print_direct(cr, uid, base64.encodestring(result), format, printer)
-			qty_labels += 1
-		
-	return {'qty_labels': qty_labels}
-	
-	
-class print_labels(wizard.interface):
-	states = {
-		'init': {
-			'actions': [_get_defaults],
-			'result': {'type': 'form', 'arch': print_init_form, 'fields': print_init_fields, 'state':[('end','Cancel'), ('done','Print')]}
-		},
-		'done': {
-			'actions': [_print_labels],
-			'result': {'type': 'form', 'arch': print_done_form, 'fields': print_done_fields, 'state': [('end', 'Close')] }
-		}
-	}
-	
-print_labels('mrp.production.print_labels')
+
+class WizardPrintLabels(orm.TransientModel):
+    _name = "wizard.print.labels"
+    _description = "Module to print labels with custom format."
+
+    def _get_defaults(self, cr, uid, context):
+        res = {}
+        if 'active_model' in context and 'active_ids' in context:
+            model = context['active_model']
+            ids = context['active_ids']
+            text_print = ''
+            i = 0
+            mrp_productions = self.pool[model].browse(cr, uid, ids, context)
+            for mrp in mrp_productions:
+                i += 1
+                name = mrp.name or ''
+                product_name = mrp.product_id and mrp.product_id.name or ''
+                text_print += (str(i) + '. ' + name +
+                               ' - ' + product_name + '\n')
+            res = text_print
+        return res
+
+    _columns = {
+        'text_print': fields.text('Message', readonly=True),
+        'qty_labels': fields.integer('Printed Labels'),
+    }
+
+    _defaults = {
+        'text_print': _get_defaults,
+        'qty_labels': lambda self, cr, uid,
+        context: context.get('qty_labels', 0)
+    }
+
+    def print_labels(self, cr, uid, data, context):
+        report_obj = self.pool['ir.actions.report.xml']
+        printer_obj = self.pool['printing.printer']
+        qty_labels = 0
+        # Obtenemos la impresora Brother-QL-1060N-62x29
+        # TODO revisar impresion
+        default_printer = printer_obj.search(cr, uid,
+                                             [('system_name', '=',
+                                               'Brother-QL-1060N-62x29')])
+        if default_printer:
+            default_printer = default_printer[0]
+            printer = printer_obj.browse(cr, uid, default_printer,
+                                         context).system_name
+        else:
+            raise orm.except_orm(_('Error !'),
+                                 _('Not found any default printer. '
+                                   'Please set the default printer.'))
+            mrp_productions = self.pool[data['model']].browse(cr, uid,
+                                                              data['ids'],
+                                                              context)
+        for mrp in mrp_productions:
+            # Creamos informe
+            result, format = self.create_report(cr, uid, [mrp.id],
+                                                'mrp.production.label.report',
+                                                context={})
+            # Imprimimos informe (dos etiquetas de sim)
+            report_obj.print_direct(cr, uid, base64.encodestring(result),
+                                    format, printer)
+            report_obj.print_direct(cr, uid, base64.encodestring(result),
+                                    format, printer)
+            qty_labels += 2
+            # Etiqueta de enlace para 3bymesa
+            move_lines = mrp.move_lines2 or mrp.move_lines or []
+            move_line1 = move_lines[0].product_id.id
+            move_line2 = move_lines[1].product_id.id
+            # TODO ids hardcode comparison
+            if move_line1 == 58 or move_line2 == 58:
+                res = self.create_report(cr, uid, [mrp.id],
+                                         'mrp.production.track.label.report',
+                                         context={})
+                report_obj.print_direct(cr, uid, base64.encodestring(res),
+                                        res, printer)
+                qty_labels += 1
+        data_obj = self.pool['ir.model.data']
+        id2 = data_obj._get_id(cr, uid, 'dos_mrp_production_report',
+                               'view_done_form')
+        if id2:
+            id2 = data_obj.browse(cr, uid, id2, context=context).res_id
+            context['qty_labels'] = qty_labels
+        return {
+            'view_type': 'form',
+            'view_mode': 'form',
+            'res_model': 'wizard.print.labels',
+            'views': [(id2, 'form')],
+            'view_id': False,
+            'type': 'ir.actions.act_window',
+            'target': 'new',
+            'context': context
+            }
+
+        def create_report(cr, uid, res_ids, report_name=False, context={}):
+            if not report_name or not res_ids:
+                raise orm.except_orm(_('Error !'),
+                                     _('Report name and Resources ids'
+                                       ' are required !!!'))
+            try:
+                service = netsvc.LocalService("report." + report_name)
+                result, format = service.create(cr, uid, res_ids, {}, context)
+            except Exception, e:
+                print 'Exception in create report:', e
+                raise orm.except_orm(_('Error !'),
+                                     _('Exception in create report.'))
+            return result, format


Follow ups