Ver Fonte

[ADD] Crear Falta y Recalcular

adrielso há 7 anos atrás
pai
commit
381fe7969a

+ 1 - 2
__init__.py

@@ -1,3 +1,2 @@
 # -*- coding: utf-8 -*-
-
-# from model import eiru_payslip_utility
+from model import payslip_faults

+ 0 - 0
model/__init__.py


+ 55 - 0
model/payslip_faults.py

@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+from openerp import api, fields, models
+from openerp.exceptions import except_orm
+
+class HrPayslip(models.Model):
+    _inherit = 'hr.payslip'
+
+    @api.model
+    def recompute_sheet(self, values):
+        payslip = self.env['hr.payslip'].browse(values)
+        payslip_worked = self.env['hr.payslip.worked_days'].search([('payslip_id', '=' ,payslip.id)])
+        days = 0
+
+        for worked in payslip_worked:
+            days = days + worked.number_of_days
+
+        worked_days = {
+            'name': 'Faltas total',
+            'code': 'FALTAS',
+            'number_of_days': days,
+            'number_of_hours': 0,
+            'payslip_id': payslip.id,
+            'contract_id': payslip.contract_id.id,
+            'sequence': 10
+        }
+
+        line = self.env['hr.payslip.worked_days'].create(worked_days)
+
+        payslip.compute_sheet()
+
+        line.unlink()
+
+        return True if payslip else False
+
+    @api.model
+    def join_payslip_faults(self, values):
+        payslip = self.env['hr.payslip'].browse(values['id'])
+        new_line = self.env['hr.payslip.worked_days']
+        if values['faultsDays'] > 0:
+            payslip_worked_days = {
+                'name': values['faultsDescri'] if values['faultsDescri'] else "Falta",
+                'code': 'FALTAS',
+                'number_of_days': values['faultsDays'],
+                'number_of_hours': 0,
+                'payslip_id': payslip.id,
+                'contract_id': payslip.contract_id.id,
+                'sequence': 10
+            }
+
+            new_line.create(payslip_worked_days)
+
+        recompute_sheet = self.recompute_sheet(values['id'])
+
+        return True if recompute_sheet else False

+ 1 - 1
sonar-project.properties

@@ -1,5 +1,5 @@
 sonar.projectKey=payslip:utility
 sonar.projectName=eiru_payslip_utility
 sonar.projectVersion=1.0
-sonar.sources=static/src
+sonar.sources=.
 sonar.javascript.globals=openerp

+ 109 - 4
static/src/css/style.css

@@ -1,7 +1,112 @@
-.eiru-payslip-utility {
+.detallis-employee-label {
+    float: left;
+    width: 130px;
+    height: 30px;
+    padding-bottom: 8px;
+    font-size: 13px;
+}
+.faults-input {
+    width: 100%;
+}
+.payslip-footer {
+    text-align: right !important;
+    padding-right: 30px;
+    padding-top: 10px;
+    padding-bottom: 10px;
+}
+.oe_stat_button.btn.btn-default.refresh-faults {
+    width: 40px !important;
+}
+
+/*.eiru-payslip-utility {
     width: auto !important;
     height: auto !important;
-}
-.oe_stat_button.btn.btn-default.oe_inline.payslip-utility {
+}*/
+
+/*.oe_stat_button.btn.btn-default.oe_inline.payslip-utility {
     width: 160px !important;
-}
+}*/
+/*.payslip-details-title {
+    padding-left: 10px;
+    color: #bdbdbd;
+}*/
+
+/*.detallis-employee-input {
+    border-color: #eee !important;
+}*/
+/*.detallis-employee-input.long {
+    width: calc(100% - 10px);
+    border: 0px;
+    font-weight: bold;
+}*/
+/*.detallis-employee-input.short {
+    width: calc(100% - 140px);
+}*/
+/*.detallis-employee-separator {
+    margin-top: 0px;
+    margin-bottom: 5px;
+}*/
+
+/*.payslip-faults {
+    margin-top: -15px;
+}*/
+
+/*.expired-account-modal .payslip-table {
+    width: 868px;
+    height: 140px;
+    position: relative;
+}*/
+
+/*.expired-account-modal .modal-head-wrapper-payslip {
+    width: 100%;
+}*/
+
+/*.expired-account-modal .modal-item-payslip {
+    width: 100%;
+    height: 90px;
+    overflow-y: auto;
+}*/
+/*id*/
+/*.expired-account-modal .payslip-table table tbody tr td:nth-child(1){
+    display: none;
+}*/
+/*.expired-account-modal table thead tr th:nth-child(1){
+    display: none;
+}*/
+
+/*.expired-account-modal .payslip-table table tbody tr td:nth-child(2){
+    width: 40px ;
+}*/
+/*.expired-account-modal .payslip-table table thead tr th:nth-child(2){
+    width: 40px;
+}*/
+/*.expired-account-modal .payslip-table table tbody tr td:nth-child(3){
+    width: 671px ;
+    padding-left: 20px;
+}*/
+/*.expired-account-modal .payslip-table table thead tr th:nth-child(3){
+    width: 671px;
+}*/
+/*.expired-account-modal .payslip-table table tbody tr td:nth-child(4){
+    width: 150px ;
+    text-align: right;
+    padding-left: 20px;
+    padding-right: 10px;
+}*/
+/*.expired-account-modal .payslip-table table thead tr th:nth-child(4){
+    width: 150px;
+}*/
+/*.payslip-title{
+    text-align: center;
+    padding-top: -10px
+}*/
+
+/*.payslip-header {
+    padding-left: 15px;
+    padding-top: 10px;
+    padding-bottom: 10px;
+}*/
+/*.payslip_faults_edit {
+    width: 50px !important;
+    background: red !important;
+}*/

+ 0 - 94
static/src/js/eiru_payslip_utility.js

@@ -1,94 +0,0 @@
-openerp.eiru_payslip_utility = function(instance, local) {
-
-    local.widgetInstance = null;
-    local.parentInstance = null;
-
-    local.PayslipUtilityWidget = instance.Widget.extend({
-        template: 'eiru_payslip_utility.PayslipWidget',
-        id: undefined,
-        //
-        init: function(parent) {
-            this._super(parent);
-            this.buttons = parent.$buttons;
-        },
-        start: function() {
-            var self = this;
-            this.$el.click(function() {
-                // console.log(instance.web.num2word(1000000));
-        //         self.fectchInitial()
-            });
-        //     self.buttons.click(function(e) {
-        //         /* E (Editar) */
-        //         if (e.target.accessKey === 'E')
-        //             self.$el.css('display','none');
-        //         /* C (Crear) */
-        //         if (e.target.accessKey === 'C')
-        //             self.$el.css('display','none');
-        //         /* S (Guarrdar) */
-        //         if (e.target.accessKey === 'S')
-        //             self.$el.css('display','flex');
-        //         /* D (Cancelar) */
-        //         if (e.target.accessKey === 'D')
-        //             self.$el.css('display','flex');
-        //     });
-        },
-        updateId: function(id) {
-            var self = this;
-            self.id = id;
-        },
-
-        // fectchInitial: function() {
-        //     var self = this;
-        //     self.fectchGenerateNomina().then(function(payslip) {
-        //         return payslip;
-        //     }).then(function(payslip) {
-        //         local.parentInstance.reload();
-        //         if (!payslip)
-        //             instance.web.notification.do_warn("Atención","No existe nomina para ser generada, en el periodo seleccionado");
-        //     })
-        // },
-        // fectchGenerateNomina: function() {
-        //     var self = this;
-        //     var defer = $.Deferred();
-        //     var hr_payslip = new instance.web.Model('hr.payslip');
-        //
-        //     hr_payslip.call('generate_payroll_eiru',[self.id], {
-        //         context: new instance.web.CompoundContext()
-        //     }).then(function(results) {
-        //         defer.resolve(results);
-        //     });
-        //     return defer;
-        // },
-    });
-
-    if (instance.web && instance.web.FormView) {
-        instance.web.FormView.include({
-            load_record: function(record) {
-                this._super.apply(this, arguments);
-
-                if (this.model !== 'hr.payslip')
-                    return;
-
-                local.parentInstance = this;
-
-                if (local.widgetInstance) {
-                    local.widgetInstance.updateId(record.id);
-                }
-
-                if (this.$el.find('.payslip-utility').length !== 0 )
-                    return;
-
-                local.widgetInstance = new local.PayslipUtilityWidget(this);
-
-                var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
-
-                elemento.find('.oe_right.oe_button_box').css('width','auto !important');
-                elemento = elemento.find('.oe_right.oe_button_box.eiru-payslip-utility');
-
-                local.widgetInstance.appendTo(elemento);
-                local.widgetInstance.updateId(record.id);
-
-            }
-        });
-    }
-}

+ 186 - 0
static/src/js/payslip_utility.js

@@ -0,0 +1,186 @@
+(function() {
+
+    var QWeb = openerp.web.qweb;
+    openerp.widgetInstance = null;
+    openerp.PayslipUtility = {};
+
+    openerp.PayslipUtility = openerp.Widget.extend({
+        template: 'payslip_add.FaultsWidget',
+        /* init */
+        init: function (parent) {
+            this._super(parent);
+        },
+        /* Start */
+        start: function () {
+            var self = this;
+            var addFaults = this.$el.find('.add-faults');
+            var editFaults = this.$el.find('.edit-faults');
+            var refreshFaults = this.$el.find('.refresh-faults');
+
+            // create
+            addFaults.click(function() {
+                self.fectchAddFaults();
+            });
+            // Edit/ unlink
+            editFaults.click(function() {
+            });
+            // Update
+            refreshFaults.click(function(){
+                self.fectchRecomputeSheet();
+            })
+        },
+        /* Actualizar ID */
+        updateId: function(id) {
+            var self = this;
+            self.id = id;
+        },
+        /* Description: Recargar el Widget */
+        reloadLine: function() {
+            openerp.parentInstance.reload();
+        },
+        /* Description: Función para remover el modal */
+        removeModal: function() {
+            $('.expired-account-modal').remove();
+            $('.modal-backdrop').remove();
+        },
+        /* ---------------------------------------------------------------------
+         * Description: Recalcular faltas de funcionario
+         * -------------------------------------------------------------------*/
+         /* Description: Función Inicial para recalcular las faltas*/
+         fectchRecomputeSheet: function() {
+            var self= this;
+            self.$el.find('.refresh-faults').attr("disabled", true);
+            self.recomputeSheet().then(function(results) {
+                return results;
+            }).then(function(){
+                self.$el.find('.refresh-faults').removeAttr("disabled");
+                self.reloadLine()
+            });
+         },
+         /* Description: Función para recalcular las faltas */
+         recomputeSheet: function(){
+             var self = this;
+             var defer = $.Deferred();
+             var recomputePayslip = new openerp.web.Model('hr.payslip');
+
+             recomputePayslip.call('recompute_sheet',[ self.id ],{
+                     context: new openerp.web.CompoundContext()
+             }).then(function(results) {
+                 defer.resolve(results);
+             });
+
+             return defer;
+         },
+        /* ---------------------------------------------------------------------
+         * Description: Crear Faltas
+         * -------------------------------------------------------------------*/
+        /* Description: Función Inicial Add Faltas */
+        fectchAddFaults: function() {
+            var self = this;
+            self.showPayslipAddFaults();
+        },
+        /* Description: Adicionar Faltas (Modal) */
+        showPayslipAddFaults: function() {
+            var self = this;
+            var defer =$.Deferred();
+            var results = true;
+
+            var modal = QWeb.render('EiruPayslipAddFaults');
+            $('.openerp_webclient_container').after(modal);
+            $('.expired-account-modal').modal();
+            // Close modal
+            $('.expired-account-modal').on('hidden.bs.modal', function (e) {
+                results = false;
+                defer.resolve(results)
+                self.removeModal(e);
+            });
+            // Add faults
+            $('.expired-account-modal').find('.add-faults').click(function(e) {
+                var details = $('.expired-account-modal').find('.payslip-details').val();
+                var number =  $('.expired-account-modal').find('.payslip-number-days').val();
+
+                if (!details){
+                    openerp.web.notification.do_warn("Atención","Definir un motivo de la falta .");
+                    $('.expired-account-modal').find('.payslip-details').css('border-color','red');
+                    return
+                } else {
+                    $('.expired-account-modal').find('.payslip-details').css('border-color','#ccc');
+                }
+
+                if (number <= 0){
+                    openerp.web.notification.do_warn("Atención","Días no trabajado, debe ser mayor que 0.");
+                    $('.expired-account-modal').find('.payslip-number-days').css('border-color','red');
+                    return
+                } else {
+                    $('.expired-account-modal').find('.payslip-number-days').css('border-color','#ccc');
+                }
+                self.joinPayslipFaults(number, details).then(function(results){
+                    return results;
+                }).then(function(results){
+                    self.reloadLine()
+                    if (!results)
+                        results = false;
+                });
+                defer.resolve(results);
+                self.removeModal(e);
+            });
+
+            return defer;
+        },
+        /* Description: Función para agregar nueva falta y hacer el calculo de faltas en la nomina */
+        joinPayslipFaults: function(faultsCount, faultsDescri) {
+            var self = this;
+            var defer = $.Deferred();
+            var payslip = new openerp.web.Model('hr.payslip');
+
+            payslip.call('join_payslip_faults',[
+                {
+                    id: self.id,
+                    faultsDays: faultsCount,
+                    faultsDescri: faultsDescri
+                }
+            ], {
+                    context: new openerp.web.CompoundContext()
+            }).then(function(results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+        /* ---------------------------------------------------------------------
+         * Description: Editar/Remover Faltas
+         * -------------------------------------------------------------------*/
+
+    });
+
+    if (openerp.web && openerp.web.FormView) {
+        openerp.web.FormView.include({
+            load_record: function(record) {
+                this._super.apply(this, arguments);
+
+                if (this.model !== 'hr.payslip')
+                    return;
+
+                if (this.$el.find('.oe_form_sheet.oe_form_sheet_width').closest('.modal-content.openerp').length !== 0)
+                    return;
+
+                openerp.parentInstance = this;
+
+                if (openerp.widgetInstance) {
+                    openerp.widgetInstance.updateId(record.id);
+                }
+
+                if (this.$el.find('.payslip-add-faults').length !== 0 )
+                    return;
+
+                openerp.widgetInstance = new openerp.PayslipUtility(this);
+
+                var elemento = this.$el.find('.oe_notebook_page');
+                elemento = elemento.find('.payslip-utility-add-faults');
+
+                openerp.widgetInstance.appendTo(elemento);
+                openerp.widgetInstance.updateId(record.id);
+            }
+        });
+    }
+})();

+ 12 - 2
static/src/xml/eiru_payslip_utility.xml

@@ -2,9 +2,19 @@
 
 <templates xml:space="preserve">
     <t t-name="eiru_payslip_utility.PayslipWidget">
-            <button class="oe_stat_button btn btn-default oe_inline payslip-utility">
+        <div class="payslip-utility">
+            <button class="oe_stat_button btn btn-default oe_inline payslip-utility-adelanto">
                 <div class="stat_button_icon fa fa-exchange fa-2x"></div>
-                <div>Adelantos / Faltas</div>
+                <div>Adelantos</div>
             </button>
+            <button class="oe_stat_button btn btn-default oe_inline payslip-utility-faltas">
+                <div class="stat_button_icon fa fa-exchange fa-2x"></div>
+                <div>Faltas</div>
+            </button>
+            <button class="oe_stat_button btn btn-default oe_inline payslip-utility-delet">
+                <div class="stat_button_icon fa fa-exchange fa-2x"></div>
+                <div>deletar</div>
+            </button>
+        </div>
   </t>
 </templates>

+ 39 - 0
static/src/xml/hr_payslip_table.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="EiruPayslipUtilityTable">
+        <div class=" oe_view_manager_body payslip-table">
+            <div class="modal-head-wrapper-payslip">
+                <table class="oe_list_content">
+                    <thead >
+                        <tr class="oe_list_header_columns" t-foreach="faultsHeader" t-as="head" >
+                            <th class="oe_list_header_char oe_sortable"><t t-esc="head_value.colum1"/></th>
+                            <th class="oe_list_header_char oe_sortable"></th>
+                            <th class="oe_list_header_char oe_sortable"><t t-esc="head_value.colum3"/></th>
+                            <th class="oe_list_header_char oe_sortable"><t t-esc="head_value.colum4"/></th>
+                        </tr>
+                    </thead>
+                </table>
+            </div>
+            <div class="modal-item-payslip">
+                <table class="oe_list_content">
+                    <tbody class="table-tbody">
+                        <tr t-foreach="faultsData" t-as="field">
+                            <td>
+                                <t t-esc="field_value.id"/>
+                            </td>
+                            <td>
+                                <input type="checkbox"></input>
+                            </td>
+                            <td>
+                                <t t-esc="field_value.description"/>
+                            </td>
+                            <td>
+                                <t t-esc="field_value.quantity"/>
+                            </td>
+                        </tr>
+                    </tbody>
+                </table>
+            </div>
+        </div>
+    </t>
+</template>

+ 174 - 0
static/src/xml/hr_payslip_utility.xml

@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="EiruPayslipUtilityModal">
+        <div class="modal in expired-account-modal" tabindex="-1" role="dialog">
+            <div class="modal-dialog modal-lg" role="document">
+                <div class="modal-content openerp">
+                    <!-- title  -->
+                    <div class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>
+                        <h3 class="modal-title">
+                            Faltas / Adelantos
+                        </h3>
+                    </div>
+                    <!-- Body -->
+                    <div class="modal-body">
+                        <!-- Detalles del funcionario -->
+                        <div>
+                            <div class="row">
+                                <label class="payslip-details-title">
+                                    Detalles del funcionario
+                                </label>
+                            </div>
+                            <div class="row">
+                                <!-- Referenica de la nomina -->
+                                <div class="col-xs-6">
+                                    <input class="detallis-employee-input long" value="Nómina salarial de Adrielso Kunert para octubre-2017" readonly="readonly"></input>
+                                </div>
+                                <!-- referencia slip-->
+                                <div class="col-xs-6">
+                                    <label class="detallis-employee-label">
+                                        Referencia :
+                                    </label>
+                                    <input class="detallis-employee-input short" readonly="readonly" value="slip/235"></input>
+                                </div>
+                                <!-- employee -->
+                                <div class="col-xs-6">
+                                    <label class="detallis-employee-label">
+                                        Empleado :
+                                    </label>
+                                    <input class="detallis-employee-input short" value="Adrielso Kunert Bueno " readonly="readonly"></input>
+                                </div>
+                                <!-- periodo -->
+                                <div class="col-xs-6">
+                                    <label class="detallis-employee-label">
+                                        Período :
+                                    </label>
+                                    <input class="detallis-employee-input short" readonly="readonly" value="17-09-2017 - 16-10-2017"></input>
+                                </div>
+                            </div>
+                        </div>
+                        <hr class="detallis-employee-separator"/>
+                        <!-- Faltas -->
+                        <div>
+                            <div class="row payslip-title">
+                                <label class="payslip-details-title">Faltas</label>
+                            </div>
+                            <div class="row">
+                                <div class="col-xs-8">
+                                    <label class="detallis-employee-label">Descripción</label>
+                                </div>
+                                <div class="col-xs-2">
+                                    <label class="detallis-employee-label">Días no trabajado</label>
+                                </div>
+                                <div class="col-xs-8 payslip-faults">
+                                    <input class="faults-input payslip-details"></input>
+                                </div>
+                                <div class="col-xs-2 payslip-faults">
+                                    <input class="faults-input payslip-number-days" type="number" value="0"></input>
+                                </div>
+                                <div class="col-xs-2 payslip-faults">
+                                    <button type="button" class="oe_button oe_form_button oe_highlight add-faults">Adicionar</button>
+                                </div>
+                            </div>
+                            <div class="row">
+                                <t t-call="EiruPayslipUtilityTable"/>
+                            </div>
+                        </div>
+                        <!-- Adelantos -->
+                        <!-- <hr class="detallis-employee-separator"/>
+                        <div>
+                            <div class="row payslip-title">
+                                <label class="payslip-details-title">
+                                    Adelantos
+                                </label>
+                            </div>
+                            <div class="row">
+                                <div class="col-xs-8">
+                                    <label class="detallis-employee-label">
+                                        Descripción
+                                    </label>
+                                </div>
+                                <div class="col-xs-2">
+                                    <label class="detallis-employee-label">
+                                        Importe
+                                    </label>
+                                </div>
+                                <div class="col-xs-8 payslip-faults">
+                                    <input class="faults-input"></input>
+                                </div>
+                                <div class="col-xs-2 payslip-faults">
+                                    <input class="faults-input" type="number" value="0"></input>
+                                </div>
+                                <div class="col-xs-2 payslip-faults">
+                                    <button type="button" class="oe_button oe_form_button oe_highlight add-faults">
+                                        Adicionar
+                                    </button>
+                                </div>
+                            </div>
+                            <div class="row">
+                                <t t-call="EiruPayslipUtilityTable"/>
+                            </div>
+                        </div> -->
+
+                    </div>
+                    <!-- Pie de Pagina -->
+                    <div class="modal-footer payslip-footer">
+                        <button type="button" class="oe_button oe_form_button oe_link dismmis-modal" data-dismiss="modal">Cancelar</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>
+<!-- <hr/>
+<div class="payslip-adelanto">
+    <button type="button" class="oe_button oe_form_button oe_highlight payments-payslip">Pagar</button>
+</div> -->
+<!-- <div class="row" t-foreach="dataName" t-as="head">
+    <div class="col-xs-12">
+        <label class="label-descrip payslip-name">
+            <t t-esc="head_value.name"/>
+        </label>
+    </div>
+</div> -->
+<!-- <div class="row" t-foreach="data" t-as="data">
+    <div class="col-xs-6">
+        <label class="label-descrip">Empleado : </label>
+        <span class="details-employee">
+            <t t-esc="data_value.employee"/>
+        </span>
+    </div>
+    <div class="col-xs-6">
+        <label class="label-descrip">Periodo : </label>
+        <span class="details-employee">
+            <t t-esc="data_value.periodo"/>
+        </span>
+    </div>
+    <div class="col-xs-6">
+        <label class="label-descrip">Referencia : </label>
+        <span class="details-employee">
+            <t t-esc="data_value.ref"/>
+        </span>
+    </div>
+    <div class="col-xs-6">
+        <label class="label-descrip labe-input">Monto a Pagar : </label>
+        <input class="details-employee amount-net" readonly='readonly' t-attf-value="{{ data.amount }}"></input>
+    </div>
+</div> -->
+<!-- <div class="row">
+    <div class="col-xs-6">
+        <label class="label-descrip labe-input">Método de pago: </label>
+        <select class="current-journal">
+            <t t-foreach="journal" t-as="journal">
+                <option t-attf-value="{{ journal_value.id }}" >
+                    <t t-esc="journal_value.name"/>
+                </option>
+            </t>
+        </select>
+    </div>
+    <div class="col-xs-6">
+        <label class="label-descrip labe-input">Referencia de pago: </label>
+        <input type="text" class="journal-ref"></input>
+    </div>
+</div> -->

+ 45 - 0
static/src/xml/modal_payslip_add_faults.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="EiruPayslipAddFaults">
+        <div class="modal in expired-account-modal payslip-faults-add " tabindex="-1" role="dialog">
+            <div class="modal-dialog modal-lg" role="document">
+                <div class="modal-content openerp">
+                    <!-- title  -->
+                    <div class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>
+                        <h3 class="modal-title">
+                            Nueva falta de funcionario
+                        </h3>
+                    </div>
+                    <!-- Body -->
+                    <div class="modal-body">
+                        <!-- Adicionar Falta-->
+                        <div>
+                            <div class="row">
+                                <div class="col-xs-8">
+                                    <label class="detallis-employee-label">Motivo de la falta</label>
+                                </div>
+                                <div class="col-xs-2">
+                                    <label class="detallis-employee-label">Días no trabajado</label>
+                                </div>
+                                <div class="col-xs-8 payslip-faults">
+                                    <input class="faults-input payslip-details"></input>
+                                </div>
+                                <div class="col-xs-2 payslip-faults">
+                                    <input class="faults-input payslip-number-days" type="number" value="0"></input>
+                                </div>
+                                <div class="col-xs-2 payslip-faults">
+                                    <button type="button" class="oe_button oe_form_button oe_highlight add-faults">Adicionar</button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- Pie de Pagina -->
+                    <div class="modal-footer payslip-footer">
+                        <button type="button" class="oe_button oe_form_button oe_link dismmis-modal" data-dismiss="modal">Cancelar</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 19 - 0
static/src/xml/payslip_add_faults.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<templates xml:space="preserve">
+    <t t-name="payslip_add.FaultsWidget">
+        <div class="payslip-add-faults">
+            <button class="oe_stat_button btn btn-default refresh-faults" title="Recalcular las falta del funcionario">
+                <div class="stat_button_icon fa fa-refresh"></div>
+            </button>
+            <button class="oe_stat_button btn btn-default add-faults" title="Crear nueva falta de funcionario">
+                <div class="stat_button_icon fa fa-plus-square-o"></div>
+                <div>Crear</div>
+            </button>
+            <button class="oe_stat_button btn btn-default oe_inline edit-faults" title="Modificar o eliminarfalta de funcionario">
+                <div class="stat_button_icon fa fa-pencil-square-o"></div>
+                <div>Editar/Eliminar</div>
+            </button>
+        </div>
+  </t>
+</templates>

+ 32 - 0
views/eiru_payslip_utility.xml

@@ -11,5 +11,37 @@
 				</xpath>
 			</field>
 		</record>
+		<!-- create -->
+		<record id="view_payslip_utility_add" model="ir.ui.view">
+			<field name="name">view.payslip.utility.add</field>
+			<field name="model">hr.payslip</field>
+			<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
+			<field name="arch" type="xml">
+				<field name="worked_days_line_ids" position="before">
+					<div class="payslip-utility-add-faults" attrs="{'invisible': [('state','!=','done')]}"></div>
+				</field>
+			</field>
+		</record>
+		<!-- Lista -->
+		<!-- <record id="view_payslip_faults_tree" model="ir.ui.view">
+			<field name="name">view.payslip.faults.tree</field>
+			<field name="model">hr.payslip</field>
+			<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
+			<field name="arch" type="xml">
+				<field name="worked_days_line_ids" position="replace">
+					<field name="worked_days_line_ids" class="">
+						<tree string="Worked Days" editable="bottom">
+							<field name="name"/>
+							<field name="code"/>
+							<field name="number_of_days" sum="Total Working Days"/>
+							<field name="number_of_hours"/>
+							<field name="contract_id" invisible="True"/>
+							<field name="sequence" invisible="True"/>
+						</tree>
+					</field>
+				</field>
+
+			</field>
+		</record> -->
 	</data>
 </openerp>

+ 2 - 1
views/templates.xml

@@ -3,7 +3,8 @@
         <template id="eiru_payslip_utility.eiru_assets" name="aeiru_payslip_payments_eiru_assets" inherit_id="eiru_assets.assets">
             <xpath expr="." position="inside">
                 <link rel="stylesheet" href="/eiru_payslip_utility/static/src/css/style.css"/>
-                <script type="text/javascript" src="/eiru_payslip_utility/static/src/js/eiru_payslip_utility.js"/>
+                <!-- <script type="text/javascript" src="/eiru_payslip_utility/static/src/js/eiru_payslip_utility.js"/> -->
+                <script type="text/javascript" src="/eiru_payslip_utility/static/src/js/payslip_utility.js"/>
             </xpath>
         </template>
     </data>