Forráskód Böngészése

Módulo para imprimir orden de trabajo de DNA

root 7 hónapja
commit
852f853ee0

+ 2 - 0
__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import models

BIN
__init__.pyc


+ 18 - 0
__openerp__.py

@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+{
+    'name' : 'Print Work Orders',
+    'version' : '1.0',
+    'description' : """
+Este modulo Permite realizar impresión de la orden de trabajo.
+    """,
+    'author' : 'Eiru',
+    'category' : 'Service',
+    'depends' : ['repair_workorder','image_header_company'],
+    'data' : [
+        'views/template.xml',
+        'views/workorder.xml'
+    ],
+    'qweb' : ['static/src/xml/*.xml',],
+    'installable' : True,
+    'auto_install' : False,
+}

+ 91 - 0
models.py

@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+
+class RepairWorkorder(models.Model):
+	_inherit = 'repair.workorder'
+
+	@api.model
+	def getRepairWorkorder(self,domain):
+		RepairWorkorder = self.env['repair.workorder'].search(domain)
+		values = []
+		for workorder in RepairWorkorder:
+			try:
+				street = workorder.partner_id.street
+			except Exception as e:
+				street = ''
+			values.append({
+                # ID
+				'id': workorder.id,
+                # WORKORDER INFO
+                'name': workorder.name,
+                'user_name': workorder.user_id.name,
+                'causes': workorder.causes,
+                'order_date': workorder.order_date,
+                'planned_start_date': workorder.planned_start_date,
+                'planned_end_date': workorder.planned_end_date,
+				'diagnostic': workorder.diagnostic,
+                'recommendations': workorder.recommendations,
+                'actions': workorder.actions,
+                # PARTNER INFO
+				'partner_id': workorder.partner_id.id,
+				'partner_name': workorder.partner_id.name,
+				'partner_address': street,
+                'partner_phone': workorder.partner_id.phone,
+				'partner_mobile': workorder.partner_id.mobile,
+                # COMPANY INFO
+                'company_id': workorder.user_id.company_id.id,
+                'company_name': workorder.user_id.company_id.name,
+                'company_logo': workorder.user_id.company_id.logo,
+				'imageheader': workorder.user_id.company_id.imageheader,
+                'company_address': workorder.user_id.company_id.street2,
+                'company_phone': workorder.user_id.company_id.phone,
+			})
+
+		return values
+
+class RepairWorkorderLine(models.Model):
+	_inherit = 'repair.workorder.line'
+
+	@api.model
+	def getRepairWorkorderLine(self,domain):
+		RepairWorkorderLine = self.env['repair.workorder.line'].search(domain)
+		values = []
+		for line in RepairWorkorderLine:
+			values.append({
+                # ID
+				'id': line.id,
+                # LINE INFO
+                'workorder_id': line.workorder_id.id,
+                'description': line.description,
+                'quantity': line.quantity,
+                'brand': line.brand,
+                'number': line.number,
+			})
+
+		return values
+
+class RepairWorkorderConsumed(models.Model):
+	_inherit = 'repair.workorder.consumed'
+
+	@api.model
+	def getRepairWorkorderConsumed(self,domain):
+		RepairWorkorderConsumed = self.env['repair.workorder.consumed'].search(domain)
+		values = []
+		for line in RepairWorkorderConsumed:
+			values.append({
+                # ID
+				'id': line.id,
+                # LINE INFO
+                'workorder_id': line.workorder_id.id,
+                'product_id':[
+                    line.product_id.id,
+                    line.product_id.name,
+                ],
+                'description': line.description,
+                'quantity': line.quantity,
+                'price_unit': line.price_unit,
+                'subtotal': line.subtotal,
+			})
+
+		return values

BIN
models.pyc


BIN
static/description/icon.png


+ 3 - 0
static/src/css/style.css

@@ -0,0 +1,3 @@
+.print_workorder{
+    height: 35px;
+}

+ 530 - 0
static/src/js/workorder.js

@@ -0,0 +1,530 @@
+openerp.workorder_print = function (instance, local) {
+    local.widgetInstance = null;
+    local.parentInstance = null;
+
+    local.WorkOrderWidget = instance.Widget.extend({
+        template : "workorder_print.WorkOrder",
+        jsonDoc:[],
+
+        init:function(parent){
+            this._super(parent);
+        },
+
+        updateId : function(id){
+            var self = this;
+            self.id=id;
+        },
+
+        start: function () {
+            var self = this;
+            this.$el.click(function (e) {
+                self.fecthInitial();
+            });
+        },
+
+        valorNull:function(dato){
+            var valor ="";
+            if (dato){
+                if(dato == true && typeof dato == 'boolean'){
+                    valor=" ";
+                }else{
+                    valor=dato;
+                }
+            }
+            return valor;
+        },
+
+        fecthInitial: function(){
+            var id= openerp.webclient._current_state.id;
+            var self = this;
+            self.fecthRepairWorkorder(id).then(function(RepairWorkorder){
+                return RepairWorkorder;
+            }).then(function(RepairWorkorder){
+                self.RepairWorkorder = RepairWorkorder;
+                return self.fecthRepairWorkorderLine();
+            }).then(function(RepairWorkorderLine){
+                self.RepairWorkorderLine = RepairWorkorderLine;
+                return self.fetchRepairWorkorderConsumed();
+            }).then(function(RepairWorkorderConsumed){
+                self.RepairWorkorderConsumed = RepairWorkorderConsumed;
+                return self.drawPDF();
+            });
+            return false;
+        },
+
+        fecthRepairWorkorder: function(id){
+            var domain=[['id','=', id]];
+            var RepairWorkorder = new instance.web.Model('repair.workorder');
+            return RepairWorkorder.call('getRepairWorkorder',[domain], {
+                context: new instance.web.CompoundContext()
+            });
+        },
+
+        fecthRepairWorkorderLine: function () {
+            var self = this;
+            var workorder_ids = _.flatten(_.map(self.RepairWorkorder,function(map){
+                return map.id;
+            }));
+            var domain=[['workorder_id','in',workorder_ids]];
+            var RepairWorkorderLine = new instance.web.Model('repair.workorder.line');
+            return RepairWorkorderLine.call('getRepairWorkorderLine',[domain], {
+                context: new instance.web.CompoundContext()
+            });
+        },
+
+        fetchRepairWorkorderConsumed: function () {
+            var self = this;
+            var workorder_ids = _.flatten(_.map(self.RepairWorkorder,function(map){
+                return map.id;
+            }));
+            var domain=[['workorder_id','in',workorder_ids]];
+            var RepairWorkorderConsumed = new instance.web.Model('repair.workorder.consumed');
+            return RepairWorkorderConsumed.call('getRepairWorkorderConsumed',[domain], {
+                context: new instance.web.CompoundContext()
+            });
+        },
+
+        drawPDF:function(){
+            var self = this;
+            var doc = self.RepairWorkorder.shift();
+
+            var docItem = [];
+            var docWorkItem = [];
+            var getColumns = [];
+            var getColumnsMaterial = [];
+
+            var pdfDoc = new jsPDF();
+            pdfDoc.addImage("data:image/png;base64," + doc.imageheader, 'PNG',7,5,190,40);
+
+
+            _.each(self.RepairWorkorderConsumed, function(item){
+                docWorkItem.push({
+                    product : item.product_id[1],
+                    description : item.description,
+                    quantity : item.quantity,
+                    price_unit : accounting.formatNumber(item.price_unit,0,".",","),
+                    subtotal : accounting.formatNumber(item.subtotal,0,".",","),
+                    total : item.subtotal
+                });
+            });
+            getColumnsMaterial.push({
+                title : 'Concepto',
+                dataKey: 'product',
+                align: 'center',
+            });
+            getColumnsMaterial.push({
+                title : 'Descripción',
+                dataKey: 'description',
+                align: 'center',
+            });
+            getColumnsMaterial.push({
+                title : 'Cantidad',
+                dataKey: 'quantity',
+                align: 'left',
+            });
+            getColumnsMaterial.push({
+                title : 'Precio Unitario',
+                dataKey: 'price_unit',
+                align: 'left',
+            });
+            getColumnsMaterial.push({
+                title : 'Subtotal',
+                dataKey: 'subtotal',
+                align: 'left',
+            });
+            var total = _.reduce(_.map(docWorkItem,function(map){
+               return(map.total);
+            }),function(memo, num){
+               return memo + num;
+            },0);
+
+            /*
+            =============================================================
+                OBTENER LINEAS DEL PEDIDO
+            =============================================================
+            */
+            _.each(self.RepairWorkorderLine, function(item){
+                docItem.push({
+                    product : item.description,
+                    brand : item.brand,
+                    number : item.number
+                });
+            });
+            getColumns.push({
+                title : '',
+                dataKey: 'product',
+                align: 'left',
+            });
+            getColumns.push({
+                title : '',
+                dataKey: 'brand',
+                align: 'left',
+            });
+            getColumns.push({
+                title : '',
+                dataKey: 'number',
+                align: 'left',
+            });
+              pdfDoc.autoTable(getColumns, docItem, {
+                theme: 'grid',
+
+                styles: {
+                    overflow: 'linebreak',
+                    columnWidth: 'auto',
+                    fontSize: 7,
+                },
+                headerStyles: {
+                    fillColor: [255, 255, 255],
+                    fontSize: 9
+                },
+                columnStyles: {
+                    product : {columnWidth: '8px',fontStyle: 'bold'},
+                    brand : {columnWidth: '8px'},
+                    number : {columnWidth: '8px'},
+                },
+
+                margin: { top: 68, horizontal: 10},
+
+                addPageContent: function (data) {
+
+                    /*
+                    ====================================================================
+                        CABECERA
+                    ====================================================================
+                    */
+
+                    // pdfDoc.setFontSize(8);
+                    // pdfDoc.setFontStyle('bold');
+                    // pdfDoc.setTextColor(40);
+                    // pdfDoc.text(7,26,doc.company_address);
+                    //
+                    // pdfDoc.setFontSize(8);
+                    // pdfDoc.setFontStyle('bold');
+                    // pdfDoc.setTextColor(40);
+                    // pdfDoc.text(7,30,'Cel.: ' + doc.company_phone);
+
+                    // pdfDoc.setFontSize(15);
+                    // pdfDoc.setFontStyle('bold');
+                    // pdfDoc.setTextColor(40);
+                    // pdfDoc.text(118,10,'');
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(100,43,'No válido como comprobante de venta.');
+
+                    pdfDoc.setFontSize(13);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                      //    pdfDoc.text(93,39,'ORDEN DE TRABAJO Nº: ');
+                    pdfDoc.text(93,39,'ORDEN DE TRABAJO Nº: ' +  doc.name);
+
+                    /*
+                    ====================================================================
+                        PRIMERA SECCION
+                    ====================================================================
+                    */
+
+                    pdfDoc.setFontSize(12);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(47,52,'ORDEN DE TRABAJO - SERVICIO TECNICO');
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(160,52,'Fecha: ');
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(173,52, moment(doc.order_date).format('DD/MM/YYYY'));
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(10,58,'Cliente: ');
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(30,58, doc.partner_name);
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(10,63,'Dirección: ');
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(30,63, doc.partner_address);
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(10,68,'Celular: ');
+
+                    pdfDoc.setFontSize(9);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(30,68,self.valorNull(doc.partner_mobile));
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(10,74,'Observación del equipo');
+
+                }
+            });
+            /*
+            =============================================================
+                DESCRIPCION DEL TRABAJO
+            =============================================================
+            */
+
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(40);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 6,'OBSERVACIÓN');
+
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('normal');
+            // pdfDoc.setTextColor(40);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 11, self.valorNull(doc.recommendations));
+
+
+
+            pdfDoc.setFontSize(10);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(40);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 6,'DIAGNÓSTICO');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(40);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 10, self.valorNull(doc.diagnostic));
+
+            pdfDoc.setFontSize(10);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(40);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 30,'DESCRIPCIÓN DEL TRABAJO');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(40);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 34, self.valorNull(doc.actions));
+
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(40);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 47,'CAUSAS');
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('normal');
+            // pdfDoc.setTextColor(40);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 51, self.valorNull(doc.causes));
+
+            pdfDoc.setFontSize(10);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(40);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 70,'RECOMENDACIONES TÉCNICAS');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(40);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 74, self.valorNull(doc.recommendations));
+
+            var finalY = pdfDoc.autoTable.previous.finalY;
+
+            pdfDoc.autoTable(getColumnsMaterial, docWorkItem, {
+                theme: 'grid',
+                startY: finalY + 97,
+                styles: {
+                    overflow: 'linebreak',
+                    columnWidth: 'auto',
+                    fontSize: 7,
+
+                },
+                headerStyles: {
+                    fillColor: [76, 133, 248],
+                    fontSize: 9
+                },
+                columnStyles: {
+                    product : {columnWidth: '8px',fontStyle: 'bold'},
+                    quantity : {columnWidth: '8px', halign: 'right'},
+                    price_unit : {columnWidth: '8px', halign: 'right'},
+                    subtotal : {columnWidth: '8px', halign: 'right'},
+                },
+                margin: {horizontal: 10},
+                addPageContent: function (data) {
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(10,finalY + 95,'SERVICIO-REPUESTOS-PIEZAS');
+                }
+            });
+
+            var finalY = pdfDoc.autoTable.previous.finalY;
+            pdfDoc.setFontSize(10);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY  + 7,'IMPORTANTE');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 11,'Imprescindible la Presentación de este documento para el retiro de equipos o accesorios del taller de Asistencia Técnica.');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 14,'Se declarará en abandono las piezas que no hayan sido retiradas en el plazo de 90 dias (Según las disposiciones legales vigentes en Paraguay).');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 17,'Los envíos de equipos o servicios deben ser previamente abonados antes del envío por política de la empresa');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(120,pdfDoc.autoTable.previous.finalY + 30,'Conformidad:    ....................................................');
+
+            pdfDoc.setFontSize(8);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(160,pdfDoc.autoTable.previous.finalY + 33,'Firma');
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 33,'Fecha: ');
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 38,'Costo GS. : ');
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(35,pdfDoc.autoTable.previous.finalY + 38,accounting.formatNumber(total,0,'.',','));
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(100,pdfDoc.autoTable.previous.finalY + 38,'Fecha de Trabajo terminado: ' + moment(doc.planned_end_date).format('DD/MM/YYYY'));
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 43,'Responsable. : ');
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('normal');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(38,pdfDoc.autoTable.previous.finalY + 43,doc.user_name);
+
+            pdfDoc.setFontSize(9);
+            pdfDoc.setFontStyle('bold');
+            pdfDoc.setTextColor(10);
+            pdfDoc.text(100,pdfDoc.autoTable.previous.finalY + 44,'Firma:     .................................................................. ');
+
+            // pdfDoc.addImage("data:image/png;base64," + doc.company_logo, 'PNG',7,pdfDoc.autoTable.previous.finalY + 95,33,10);
+            //
+            // pdfDoc.setFontSize(15);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(145,pdfDoc.autoTable.previous.finalY + 100,'N°  ' + doc.name);
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(40);
+            // pdfDoc.text(7,pdfDoc.autoTable.previous.finalY + 110,doc.company_address);
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(40);
+            // pdfDoc.text(150,pdfDoc.autoTable.previous.finalY + 110,'Tel.: ' + doc.company_phone);
+            //
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 120,'Entregado por : ');
+            //
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(140,pdfDoc.autoTable.previous.finalY + 120,'Recibido por : ');
+            //
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 125,'Fecha : ');
+            //
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 130,'IMPORTANTE');
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('normal');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 134,'Imprescindible la Presentación de la contraseña para el retiro. Nos reservamos el derecho de entregar el producto.');
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('normal');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 137,'Se declara en abandono las piezas que no hayan sido retiradas en el plazo de 90 dias (Según las disposiciones legales vigentes en Paraguay.)');
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('normal');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 140,'Los envíos de equipos o servicios deben ser previamente abonados antes del envío por política de la empresa');
+            //
+            //
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(10,pdfDoc.autoTable.previous.finalY + 145,'Recibido por: ');
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(120,pdfDoc.autoTable.previous.finalY + 145,'Conformidad:   ....................................................');
+            //
+            // pdfDoc.setFontSize(8);
+            // pdfDoc.setFontStyle('normal');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(160,pdfDoc.autoTable.previous.finalY + 149,'Firma');
+            //
+            // pdfDoc.setFontSize(10);
+            // pdfDoc.setFontStyle('bold');
+            // pdfDoc.setTextColor(10);
+            // pdfDoc.text(120,pdfDoc.autoTable.previous.finalY + 152,'Fecha: ');
+
+
+
+            pdfDoc.save('Orden de trabajo - ' + doc.name + '.pdf');
+        },
+    });
+    if (instance.web && instance.web.FormView) {
+        instance.web.FormView.include({
+            load_form: function (record) {
+                this._super.apply(this, arguments);
+                if (this.model !== 'repair.workorder') return;
+                local.parentInstance = this;
+                if (local.widgetInstance) {
+                    local.widgetInstance.updateId(record.id);
+                }
+                local.widgetInstance = new local.WorkOrderWidget(this);
+                var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
+                elemento =  elemento.find('.oe_right.oe_button_box.workorder_button_box');
+                local.widgetInstance.appendTo(elemento);
+                local.widgetInstance.updateId(record.id);
+            }
+        });
+    }
+};

+ 9 - 0
static/src/xml/workorder.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="workorder_print.WorkOrder">
+        <button class="print_workorder oe_stat_button btn btn-default oe_inline">
+            <div class="stat_button_icon fa fa-download"></div>
+            <div> Imprimir </div>
+        </button>
+    </t>
+</template>

+ 10 - 0
views/template.xml

@@ -0,0 +1,10 @@
+<openerp>
+    <data>
+        <template id="workorder_print.assets_backend" name="workorder_print_assets" inherit_id="eiru_assets.assets">
+            <xpath expr="." position="inside">
+                <link rel="stylesheet" href="/workorder_print/static/src/css/style.css"/> 
+                <script type="text/javascript" src="/workorder_print/static/src/js/workorder.js"/>
+            </xpath>
+        </template> 
+    </data>
+</openerp>

+ 15 - 0
views/workorder.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+	<data>
+        <record model="ir.ui.view" id="workorder_print">
+            <field name="name">workorder.print</field>
+            <field name="model">repair.workorder</field>
+            <field name="inherit_id" ref="repair_workorder.form_repair_workorder"/>
+            <field name="arch" type="xml">
+                <xpath expr="//div[@class='oe_right oe_button_box']" position="inside">
+					<div class="workorder_button_box oe_right oe_button_box" id="workorder_button_container"></div>
+				</xpath>
+            </field>
+        </record>
+	</data>
+</openerp>