瀏覽代碼

payroll_print

Sebas 7 年之前
當前提交
17e4fa77c8

+ 0 - 0
.scannerwork/.sonar_lock


+ 5 - 0
.scannerwork/report-task.txt

@@ -0,0 +1,5 @@
+projectKey=payroll:print
+serverUrl=http://181.40.66.126:9000
+dashboardUrl=http://181.40.66.126:9000/dashboard/index/payroll:print
+ceTaskId=AV81ZvwsLmS3QZZeLmte
+ceTaskUrl=http://181.40.66.126:9000/api/ce/task?id=AV81ZvwsLmS3QZZeLmte

+ 1 - 0
__init__.py

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

二進制
__init__.pyc


+ 18 - 0
__openerp__.py

@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+{
+    'name' : 'Add print in payroll',
+    'version' : '1.0',
+    'description' : """
+Este modulo permite realizar impresión de la nómina del personal.
+    """,
+    'author' : 'Eiru/Sebastian Penayo ',
+    'category' : 'hr',
+    'depends' : ['base','hr_payroll','hr'],
+    'data' : [
+        'views/template.xml',
+        'views/payroll_print.xml'
+    ],
+    'qweb' : ['static/src/xml/*.xml',],
+    'installable' : True,
+    'auto_install' : False,
+}

+ 5 - 0
sonar-project.properties

@@ -0,0 +1,5 @@
+sonar.projectKey=payroll:print
+sonar.projectName=payroll_print
+sonar.projectVersion=1.0
+sonar.sources=.
+sonar.javascript.globals=openerp

二進制
static/description/icon.png


+ 299 - 0
static/src/js/payroll.js

@@ -0,0 +1,299 @@
+openerp.payroll_print = function (instance, local) {
+    local.widgetInstance = null;
+    local.parentInstance = null;
+
+    local.PrintPayrollWidget = instance.Widget.extend({
+        template : "payroll_print.PrintPayroll",
+        resInvoice:[],
+        resPersonal:[],
+        personal:[],
+        pagare:[],
+        resInvoiceLine:[],
+        jsonDoc:[],
+        // Init
+
+        init:function(parent){
+            this._super(parent);
+        },
+
+        updateId : function(id){
+            var self = this;
+            self.id=id;
+        },
+
+        start: function () {
+            var self = this;
+            this.$el.click(function () {
+                self.fecthInitial();
+            });
+        },
+
+        fecthInitial: function(){
+            var id= openerp.webclient._current_state.id;
+            var self = this;
+            self.fecthInvoice(id).then(function(invoice){
+                return invoice;
+            }).then(function(invoice){
+                self.resInvoice = invoice;
+                return self.fetchInvoiceLine();
+            }).then(function(invoiceLine){
+                self.resInvoiceLine = invoiceLine;
+                return self.fetchPersonal();
+            }).then(function(personal){
+                self.resPersonal = personal;
+                return self.drawPDF();
+            });
+            return false;
+        },
+
+        // Consultar Pagos
+        fecthInvoice: function(id){
+            var defer = $.Deferred();
+            var fields =['id', 'name', 'number', 'employee_id', 'invoice_line', 'create_date', 'date_from','date_to'];
+            var domain=[['id', '=', id]];
+            var Invoice = new instance.web.Model('hr.payslip');
+            Invoice.query(fields).filter(domain).order_by('id').all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+        // Invoice line (Linea de Factura)
+        fetchInvoiceLine: function () {
+            var self = this;
+            var defer = $.Deferred();
+            var id = _.flatten(_.map(self.resInvoice,function(map){
+                return map.id;
+            }));
+            var domain=[['slip_id','=', id]];
+            var InvoiceLine = new instance.web.Model('hr.payslip.line');
+            InvoiceLine.query(['id', 'name', 'slip_id', 'total']).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        // Consultar Personal
+        fetchPersonal: function () {
+            var self = this;
+            var defer = $.Deferred();
+            var employee_id = _.flatten(_.map(self.resInvoice,function(map){
+                return map.employee_id[0];
+            }));
+            var fields=['id','name_related','address_home_id','identification_id','job_id', 'address_id'];
+            var domain=[['id','=', employee_id]];
+            var Personal = new instance.web.Model('hr.employee');
+
+            Personal.query(fields).filter(domain).order_by('id').all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        getPartner: function(employee_id){
+            var self = this;
+            return _.filter(self.resPersonal,function(item){
+                return item.id === employee_id;
+            }).shift();
+        },
+
+        // Verificar si los Valores no son nulos
+        valorNull:function(dato){
+            var valor ="";
+            if (dato){
+                valor=dato;
+            }
+            return valor;
+        },
+
+        // Generar el PDF
+        drawPDF:function(){
+            var self = this;
+            var doc=[];
+            var docItem=[];
+            var getColumns=[];
+            var resInvoice = self.resInvoice;
+            var resInvoiceLine = self.resInvoiceLine;
+            var employee = self.getPartner(resInvoice[0].employee_id[0]);
+
+
+            var pdfDoc = new jsPDF();
+            doc.push({
+                id : resInvoice[0].id,
+                number : self.valorNull(resInvoice[0].number),
+                name : self.valorNull(resInvoice[0].name),
+                date : moment(resInvoice[0].create_date).format("DD [de] MMMM [de] YYYY"),
+                reference : resInvoice[0].name,
+                date_from : moment(resInvoice[0].date_from).format("DD[-]MM[-]YYYY"),
+                date_to : moment(resInvoice[0].date_to).format("DD[-]MM[-]YYYY"),
+                employee_id : self.valorNull(resInvoice[0].employee_id[1]),
+                address_home_id : self.valorNull(employee.address_home_id[0].address),
+                identification : self.valorNull(employee.identification_id[1]),
+                job_id : self.valorNull(employee.job_id[1])
+            });
+
+            for (var i = 0; i < resInvoiceLine.length; i++) {
+
+                docItem.push({
+                    xnumber : i + 1,
+                    line_name : resInvoiceLine[i].name,
+                    line_price_total : accounting.formatNumber(resInvoiceLine[i].total,0,".",",")
+                })
+
+            }
+
+            // Nuevo pdf
+            getColumns.push({
+                title : 'Orden',
+                dataKey: 'xnumber'
+            });
+            getColumns.push({
+                title : 'Descripcion',
+                dataKey: 'line_name'
+            });
+            getColumns.push({
+                title : 'SubTotal',
+                dataKey: 'line_price_total'
+            });
+
+            var rows = docItem;
+            pdfDoc.autoTable(getColumns, rows, {
+
+                styles: { overflow: 'linebreak', fontSize: 8, columnWidth: 'wrap'},
+                columnStyles: {
+                    xnumber : {halign:'left',columnWidth: '4px'},
+                    line_name : {columnWidth: '10px'},
+                    line_price_total : {halign:'right',columnWidth: '4px'},
+                },
+                margin: { top: 55, horizontal: 7},
+
+                addPageContent: function () {
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Fecha: ', 7, 15);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(doc[0].date, 21, 15);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Nómina: ', 7, 25);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(doc[0].number, 32, 25);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Descripción: ', 7, 30);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(doc[0].name, 35, 30);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Funcionario: ', 7, 35);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(doc[0].employee_id, 30, 35);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(135, 35,'Identificación N°: ');
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(doc[0].identification, 170, 35);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Direccion: ', 7, 40);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(28,40, doc[0].address_home_id);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(135,40,'Cargo: ');
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(147,40, doc[0].job_id);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text('Fecha desde: ', 7, 45);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(34,45, doc[0].date_from);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(135,45,'Fecha hasta: ');
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(158,45, doc[0].date_to);
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('bold');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(135,128,'Firma: ');
+
+                    pdfDoc.setFontSize(10);
+                    pdfDoc.setFontStyle('normal');
+                    pdfDoc.setTextColor(40);
+                    pdfDoc.text(158,128,'.......................');
+                }
+
+            });
+            pdfDoc.save('Nómina.pdf')
+        },
+    });
+
+    if(instance.web && instance.web.FormView){
+        instance.web.FormView.include({
+            load_form: function (record) {
+                this._super.apply(this, arguments);
+                if (this.model !== 'hr.payslip') return
+                local.parentInstance = this;
+                if (local.widgetInstance) {
+                    local.widgetInstance.updateId(record.id);
+                }
+                local.parentInstance = this;
+                if (local.widgetInstance) {
+                    local.widgetInstance.updateId(record.id);
+                }
+                local.widgetInstance = new local.PrintPayrollWidget(this);
+                var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
+                elemento =  elemento.find('.oe_right.oe_button_box.payroll_button_box');
+                local.widgetInstance.appendTo(elemento);
+                local.widgetInstance.updateId(record.id);
+            }
+        })
+
+    }
+}

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

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="payroll_print.PrintPayroll">
+        <button class="print_payroll oe_stat_button btn btn-default oe_inline">
+            <div class="stat_button_icon fa fa-print"></div>
+            <div>Imprimir Nómina</div>
+        </button>
+    </t>
+</template>

+ 15 - 0
views/payroll_print.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+    <data>
+        <record id="views_payroll_print" model="ir.ui.view">
+            <field name="name">hr.payslip.print</field>
+            <field name="model">hr.payslip</field>
+            <field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
+            <field name="arch" type="xml">
+                <xpath expr="//div[@class='oe_right oe_button_box']" position="before">
+                    <div class="oe_right oe_button_box payroll_button_box" id="print_payroll"></div>
+                </xpath>
+            </field>
+        </record>
+	</data>
+</openerp>

+ 8 - 0
views/qweb.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<template id="template" xml:space="preserve">
+    <t t-extend="ListView.buttons">
+        <t t-jquery="button.oe_list_add" t-operation="replace">
+            <button t-if="widget.model == 'hr.payslip'"  class="oe_button oe_new_button oe_highlight" type="button">Boton</button>
+        </t>
+    </t>
+</template>

+ 9 - 0
views/template.xml

@@ -0,0 +1,9 @@
+<openerp>
+    <data>
+        <template id="payroll_print.assets_backend" name="payroll_print_assets" inherit_id="eiru_assets.assets">
+            <xpath expr="." position="inside">
+                <script type="text/javascript" src="/payroll_print/static/src/js/payroll.js"/>
+            </xpath>
+        </template>
+    </data>
+</openerp>