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

[FIX] forma de importar el pagos de Nómina en caja

adrielso 7 éve
szülő
commit
fb11d11ba8

+ 203 - 39
model/eiru_payslip_payments.py

@@ -1,22 +1,91 @@
 # -*- coding: utf-8 -*-
 from openerp import api, fields, models
 from openerp.exceptions import except_orm
+from datetime import datetime
+from pytz import timezone
 
 class HrPayslip(models.Model):
     _inherit = 'hr.payslip'
 
+    '''
+        Get timezone
+    '''
+    def get_timezone(self):
+        tz_name = self._context.get('tz') or self.env.user.tz
+        return timezone(tz_name)
+
+    '''
+        Get server date
+    '''
+    def get_server_datetime(self):
+        return datetime.now(self.get_timezone()).strftime(DATE_FORMAT)
+
+    '''
+        GET Statement
+    '''
     @api.model
-    def create_from_prayslip(self, values):
-        ### period Actual
-        period = self.env['account.period'].search([('date_start', '<=', fields.Date.context_today(self) ),('date_stop', '>=', fields.Date.context_today(self))])
-        ### Diario & Moneda
-        journal = self.env['account.journal'].browse(int(values['journal_id']))
-        ### payslip
-        payslip = self.env['hr.payslip'].browse([(values['id'])])
-        ### payslip line
-        payslip_line = self.env['hr.payslip.line'].search([('slip_id', '=', payslip.id), ('code','=', 'NET')])
-        # Move lines
-        moveline = self.env['account.move.line'].search([('move_id', 'in', [payslip.move_id.id]),('partner_id', 'in', [payslip.employee_id.address_home_id.id]), ('account_id', '=', 75)])
+    def get_bank_statement_available(self):
+        '''
+            Obtener las caja abierta/nueva  del usuario
+        '''
+        BankStatement = []
+        for statement in self.env['account.bank.statement'].search([('state','!=','confirm'),('user_id','=',self.env.user.id)]):
+
+            if (statement.journal_id.type == 'cash' and statement.state =='draft'):
+                continue
+
+            BankStatement.append({
+                'id': statement.id,
+                'name': statement.name,
+                'journalID': statement.journal_id.id,
+                'userId': statement.user_id.id,
+                'date': statement.date,
+                'createDate': statement.create_date,
+                'periodId': statement.period_id.id,
+                'state': statement.state,
+                'journalType': statement.journal_id.type
+            })
+
+        return BankStatement
+
+    '''
+         ____                                  _          ____                 _ _
+        |  _ \ __ _ _   _ _ __ ___   ___ _ __ | |_ ___   |  _ \ __ _ _   _ ___| (_)_ __
+        | |_) / _` | | | | '_ ` _ \ / _ \ '_ \| __/ __|  | |_) / _` | | | / __| | | '_ \
+        |  __/ (_| | |_| | | | | | |  __/ | | | |_\__ \  |  __/ (_| | |_| \__ \ | | |_) |
+        |_|   \__,_|\__, |_| |_| |_|\___|_| |_|\__|___/  |_|   \__,_|\__, |___/_|_| .__/
+                    |___/                                            |___/        |_|
+    '''
+    '''
+        Verificar si la nomina ya esta en un registro de caja
+    '''
+    def verify_statement_line(self, payslip):
+        return self.env['account.bank.statement.line'].search([('ref', 'in', [payslip.number])])
+
+    '''
+        Get Payslip
+    '''
+    def get_eiru_payslip_payments(self, id):
+        return self.env['hr.payslip'].browse(id)
+
+    '''
+        Get payslip line
+    '''
+    def get_eiru_payslip_line_payments(self, payslipId, code):
+        return self.env['hr.payslip.line'].search([('slip_id', '=', payslipId), ('code','=', code)])
+
+    '''
+        Get Journal
+    '''
+    def get_eiru_journal_payments(self, journalId):
+        return self.env['account.journal'].browse(journalId)
+
+    '''
+        Get move line to payslip
+    '''
+    def get_eiru_move_line_payslip(self, payslip):
+        moveline = self.env['account.move.line'].search([('move_id', 'in', [payslip.move_id.id]),('partner_id', 'in', [payslip.employee_id.address_home_id.id]),('account_id', '=', 75)])
+
         line_move = []
         for line in moveline:
             line_move.append({
@@ -25,45 +94,140 @@ class HrPayslip(models.Model):
                 'credit': line.debit if line.debit > 0 else 0.0 ,
                 'counterpart_move_line_id': line.id,
             })
-        ### Consultar Caja  Abierta, Método de Pagos, Fecha de Hoy
-        bank_statement = self.env['account.bank.statement'].search([('journal_id', 'in', [journal.id]), ('date', '=', fields.Date.context_today(self))])
-        ### account.bank.statement.line
-        statement_line = self.env['account.bank.statement.line'].search([('ref', 'in', [payslip.number])])
-        if statement_line:
-            return statement_line.statement_id.name
-
-        ### Estructur statement
+
+        return line_move
+
+    '''
+        create bank Statement
+    '''
+    def create_eiru_payslip_bank_statement(self, accountJournal, statementId, date_server, resUser):
+        period = self.env['account.period'].search([('date_start', '<=', date_server),('date_stop', '>=', date_server)])
+        ## Domian default
+        domain = [('journal_id', '=', accountJournal.id),('user_id', '=', resUser)]
+        if (statementId):
+            domain.append(('id', '=', statementId))
+        else:
+            domain.append(('date', '=', date_server))
+
+        bank_statement = self.env['account.bank.statement'].search(domain)
+
         bank = {
-            'journal_id': journal.id,
+            'journal_id': accountJournal.id,
             'period_id': period.id,
-            'date': fields.Date.context_today(self),
-            'user_id': self.env.user.id,
-            'state': 'open' if journal.type == 'cash' else 'draft',
+            'date': date_server,
+            'user_id': resUser,
+            'state': 'open' if accountJournal.type == 'cash' else 'draft',
         }
+        bankStatement = bank_statement
 
         if bank_statement:
-            if len(bank_statement) == 1:
-                bank_statement.write(bank)
-            else:
-                bank_statement[len(bank_statement) -1].write(bank)
+            if len(bank_statement) != 1:
+                bankStatement = bank_statement[len(bank_statement) -1]
+
+            bankStatement.write({'state': 'open' if accountJournal.type == 'cash' else 'draft'})
         else:
-            bank_statement = bank_statement.create(bank)
+            bankStatement = bank_statement.create(bank)
+
+        return bankStatement
 
+    '''
+        Create Account Bank Statement Line
+    '''
+    def create_eiru_payslip_bank_statement_line(self, statement, payslip, payslipline):
         bank_statement_line = {
-            'statement_id': bank_statement.id,
+            'statement_id': statement.id,
             'name': payslip.name,
             'partner_id': payslip.employee_id.address_home_id.id,
-            'amount': (-1* payslip_line.amount) ,
-            'ref': payslip.number,
-            'note': values['journal_ref']
+            'amount': (-1* payslipline.amount) ,
+            'ref': payslip.number
         }
 
-        line_statement = self.env['account.bank.statement.line'].create(bank_statement_line)
-        reconciled = line_statement.process_reconciliation(line_move)
+        return self.env['account.bank.statement.line'].create(bank_statement_line)
+
+    '''
+        Process Reconciliation Payslip
+    '''
+    def eiru_payslip_process_reconciliation(self, statementLine, moveLine):
+        return statementLine.process_reconciliation(moveLine)
+
+    '''
+        Paymnets Payslip
+    '''
+    @api.model
+    def create_from_prayslip(self, values):
+        ### Date server
+        dateServer = self.get_server_datetime()
+
+        ### UserID
+        resUserId = self.env.user.id
+
+        ### payslip
+        payslip = self.get_eiru_payslip_payments(values['id'])
+        if (not payslip):
+            return {
+                'state': False,
+                'message': 'El registro de la nomina es errónea, por-favor actualice su pagina.'
+            }
+
+        ### Payslip line
+        payslip_line = self.get_eiru_payslip_line_payments(payslip.id, 'NET')
+        if (not payslip_line):
+            return {
+                'state': False,
+                'message': 'No se pudo obtener el sueldo neto de la nomina'
+            }
+
+        ### Account Journal
+        journal =self.get_eiru_journal_payments(values['journalId'])
+        if (not journal):
+            return {
+                'state': False,
+                'message': 'El método de pago no es valido.'
+            }
+
+        ### verify statement line
+        payslipVerify = self.verify_statement_line(payslip)
+        if (payslipVerify):
+            return {
+                'state': False,
+                'message': 'No se pudo completar el pago de nomina, porque ya se encuentra en un registros de caja/extractos bancarios (Referencia: '+str(payslipVerify.statement_id.name)+')'
+            }
+
+        moveLine = self.get_eiru_move_line_payslip(payslip)
+        if (not moveLine):
+            return {
+                'state': False,
+                'message': 'No se puedo obtener las lineas para reconciliar el pagos.'
+            }
+
+        ### Create account bank Statement line
+        statement = self.create_eiru_payslip_bank_statement(journal, values['statementId'], dateServer, resUserId)
+        if (not statement):
+            return {
+                'state': False,
+                'message': 'No se pudo crear la caja.'
+            }
 
-        if reconciled:
-            payslip.write({'state': 'paid'})
-        else :
-            payslip.write({'state': 'done'})
+        ### Create account bank Statement line
+        statementLine = self.create_eiru_payslip_bank_statement_line(statement, payslip, payslip_line)
+        if (not statementLine):
+            return {
+                'state': False,
+                'message': 'No se pudo crear el detalle de la caja.'
+            }
 
-        return True if (reconciled) else False
+        ### process_reconciliation
+        reconciled = self.eiru_payslip_process_reconciliation(statementLine, moveLine)
+
+        if (not reconciled):
+            return {
+                'state': False,
+                'message': 'No se pudo reconciliar la nomina.'
+            }
+
+        payslip.write({'state': 'paid'})
+
+        return {
+            'state': True,
+            'message': 'Guardado correctamente'
+        }

+ 0 - 5
sonar-project.properties

@@ -1,5 +0,0 @@
-sonar.projectKey=eiru:payslip:payments
-sonar.projectName=eiru_payslip_payments
-sonar.projectVersion=1.0
-sonar.sources=.
-sonar.javascript.globals=openerp

+ 46 - 2
static/src/css/style.css

@@ -1,3 +1,46 @@
+.paymnet-payslip-label {
+    width: 150px;
+    height: 30px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    font-size: 17px;
+}
+.paymnet-payslip-label-large{
+    width: 100% !important;
+}
+.paymnet-payslip-group {
+    width: calc(100% - 150px);
+    height: 30px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    float: right;
+}
+.paymnet-payslip-input {
+    width: 100%;
+    height: 30px;
+    font-size: 12pt;
+}
+.input-disabled {
+    background: #e3e3e3 !important;
+}
+.input-number {
+    text-align: right;
+    padding-right: 20px;
+}
+.paymnet-payslip-separator-hr {
+    border: 0px;
+    margin-top: 5px;
+    margin-bottom: 5px;
+}
+.paymnet-payslip-statement-open {
+    display: none;
+}
+.paymnet-payslip-bottom {
+    width: 120px;
+    height: 40px;
+    font-size: 12pt !important;
+}
+
 .eiru-payslip-payments {
     width: auto !important;
     height: auto !important;
@@ -34,10 +77,11 @@
     width: 150px;
     text-align: right;
 }
-.current-journal {
+
+/* .current-journal {
     width: 200px;
     height: 30px;
-}
+} */
 .journal-ref {
     width: 200px;
     height: 30px;

+ 114 - 25
static/src/js/payslip_payments_unity.js

@@ -12,7 +12,9 @@
         accountJournal: [],
         resCompany: [],
         resCurrency: [],
-
+        eiruAccountBankUtatementUtility: [],
+        statementConfig: [],
+        statementAvailable: [],
         /* init */
         init: function (parent) {
             this._super(parent);
@@ -21,7 +23,7 @@
         /* Start */
         start: function () {
             var self = this;
-            this.$el.click(function(){
+            this.$el.click(function() {
                 self.fetchPaymentInit();
             });
             self.buttons.click(function(e) {
@@ -44,7 +46,6 @@
         /* ---------------------------------------------------------------------
          * Description: Funcione Inicial Pagos de Nominas
          * -------------------------------------------------------------------*/
-         /* Método Inicial */
         fetchPaymentInit: function() {
             var self = this;
             self.fetchPayslip().then(function(hrPayslip) {
@@ -63,6 +64,15 @@
                 return self.fecthCurrency();
             }).then(function(resCurrency) {
                 self.resCurrency = resCurrency;
+                return self.fetchVerifyModule('eiru_account_bank_statement_utility');
+            }).then(function(eiruAccountBankUtatementUtility) {
+                self.eiruAccountBankUtatementUtility = eiruAccountBankUtatementUtility;
+                return self.fetchStatementConfig();
+            }).then(function(statementConfig) {
+                self.statementConfig = statementConfig;
+                return self.fetchStatementAvailable();
+            }).then(function(statementAvailable) {
+                self.statementAvailable = statementAvailable;
                 return self.showPayslipPayments();
             }).then(function() {
                 return self.reloadLine();
@@ -105,6 +115,41 @@
             var resCurrecy = new instance.Model('res.currency');
             return resCurrecy.query(fields).filter(domain).all();
         },
+        /* Verificar modulo instalados */
+        fetchVerifyModule: function(module) {
+            if (!module)
+                return [];
+            var moduleModule =new openerp.web.Model('ir.module.module');
+            var fields = ['id', 'name', 'state'];
+            var domain = [['name', '=', module], ['state', '=', 'installed']];
+            return moduleModule.query(fields).filter(domain).all();
+        },
+        /* statement Config */
+        fetchStatementConfig: function() {
+            var self = this;
+            if (!self.eiruAccountBankUtatementUtility.length)
+                return [];
+
+            var fields = ['id','name', 'active', 'import_statement_payslip', 'import_statement_payslip'];
+            var domain = [['active', '=', true]];
+            var statementConfig = new openerp.web.Model('account.bank.statement.config');
+            return statementConfig.query(fields).filter(domain).all();
+        },
+        /* Get statement Available*/
+        fetchStatementAvailable: function() {
+            var self = this;
+            var statementAvailable = new openerp.web.Model('hr.payslip');
+            return statementAvailable.call('get_bank_statement_available',{
+                    context: new openerp.web.CompoundContext()
+            });
+        },
+        /* GET statement JournalId*/
+        getStatementeJournal: function(journalId) {
+            var self = this;
+            return _.filter(self.statementAvailable, function(item){
+                return item.journalID === journalId;
+            });
+        },
         /* Filtar moneda de la compania*/
         getCurrencyCompany: function(id) {
             var self = this;
@@ -116,14 +161,22 @@
         showPayslipPayments: function(payslip, currency) {
             var self = this;
             var defer = $.Deferred();
-            var hrPayslip = self.hrPayslip.shift();
-            var payslipLine = self.payslipLine.shift();
-            var company = self.resCompany.shift();
-            var currency = self.getCurrencyCompany(company.currency_id[0]).shift();
+            var hrPayslip = self.hrPayslip[0];
+            var payslipLine = self.payslipLine[0];
+            var company = self.resCompany[0];
+            var currency = self.getCurrencyCompany(company.currency_id[0])[0];
+            var journal = self.accountJournal;
             // cabecera
             var headerModalName = [{
                 name: hrPayslip.name
             }];
+
+            if (!!journal){
+                journal.unshift({
+                    'id':'',
+                    'name':'',
+                });
+            }
             //  ítem cuerpo
             var dataPayslip = [{
                 employee: hrPayslip.employee_id[1],
@@ -135,15 +188,15 @@
             var payslipPayment = instance.qweb.render('EiruPayslipPaymentsModal', {
                 data: dataPayslip,
                 dataName: headerModalName,
-                journal: self.accountJournal
+                journal: journal
             });
 
             $('.openerp_webclient_container').after(payslipPayment);
             $('.expired-account-modal').modal();
 
             var buttonPayment =$('.expired-account-modal').find('.payments-payslip');
-            var journal_ref = $('.expired-account-modal').find('.journal-ref');
-            var journal =  $('.expired-account-modal').find('.current-journal');
+            var journal =  $('.expired-account-modal').find('.journal-selected');
+            var statementSelected =  $('.expired-account-modal').find('.statement-selected');
 
             /* Cerrar el modal */
             $('.expired-account-modal').on('hidden.bs.modal', function (e) {
@@ -151,36 +204,72 @@
                 self.removeModal(e);
             });
 
+            /* journal Change*/
+            journal.change(function(e) {
+                $('.expired-account-modal').find('.paymnet-payslip-statement-open').css('display','none');
+                statementSelected.empty();
+                if (journal.val() && self.eiruAccountBankUtatementUtility.length && self.statementConfig.length && self.statementAvailable.length) {
+                    if (self.statementConfig[0].import_statement_payslip === 'manual_import') {
+                        var statement = self.getStatementeJournal(parseInt(journal.val()));
+                        if (!!statement.length) {
+                            $('.expired-account-modal').find('.paymnet-payslip-statement-open').css('display','flex');
+                            statementSelected.append('<option value=""></option>');
+                            _.each(statement, function(item) {
+                                statementSelected.append('<option value="' + item.id + '">' + item.name+" - "+moment(item.date).format("DD-MM-YYYY")+ '</option>');
+                            });
+                        }
+                    }
+                }
+            });
             /* payments */
             buttonPayment.click(function(e) {
                 if (!journal.val()) {
-                    instance.notification.do_warn("Atención","Seleccione un método de pago.");
+                    instance.notification.do_warn("Atención","Tienes que seleccionar un método de pago para continuar.");
                     journal.css('border-color','red');
-                    return;
+                    journal.focus();
+                    return false;
                 }
                 journal.css('border-color','#ccc');
 
-                var payslip = new  instance.Model('hr.payslip');
-                payslip.call('create_from_prayslip', [
-                    {
-                        id: hrPayslip.id,
-                        journal_id: journal.val(),
-                        journal_ref: journal_ref.val()
+                var statement = self.getStatementeJournal(parseInt(journal.val()));
+                if (!!statement.length && self.eiruAccountBankUtatementUtility.length && self.statementConfig.length && self.statementAvailable.length) {
+                    if (self.statementConfig[0].import_statement_payslip === 'manual_import') {
+                        if (!statementSelected.val()) {
+                            instance.notification.do_warn("Atención","Tienes que seleccionar una caja para continuar.");
+                            statementSelected.css('border-color','red');
+                            statementSelected.focus();
+                            return false;
+                        }
+                        statementSelected.css('border-color','#ccc');
                     }
-                ],{
-                    context: new instance.CompoundContext()
-                }).then(function(results) {
-                    defer.resolve(results);
+                }
+                values ={
+                    'id': hrPayslip.id,
+                    'journalId': parseInt(journal.val()),
+                    'statementId': !!statementSelected.val() ? parseInt(statementSelected.val()) : ''
+                };
 
-                    if (results.length > 0){
-                        instance.notification.do_warn("Atención","No se pudo completar el pago de  "+hrPayslip.name+" , porque ya se encuentra en un registros de caja/extractos bancarios (Referencia:"+results+")", true);
+                self.paymentsPayslip(values).then(function(paymentsPayslip){
+                    return paymentsPayslip;
+                }).then(function(paymentsPayslip) {
+                    if (!paymentsPayslip.state) {
+                        instance.notification.do_warn("Atención", paymentsPayslip.message, true);
                     }
-                   });
+                    defer.resolve(paymentsPayslip)
+                });
+
                 self.removeModal(e);
             });
 
             return defer;
         },
+        /*Pagar nominas */
+        paymentsPayslip: function(values){
+            var payslip = new  instance.Model('hr.payslip');
+            return payslip.call('create_from_prayslip', [values],{
+                context: new instance.CompoundContext()
+            });
+        },
         /* Remover la ventana modal */
         removeModal: function() {
             $('.expired-account-modal').remove();

+ 60 - 36
static/src/xml/hr_payslip_payments.xml

@@ -13,58 +13,82 @@
                     </div>
                     <!-- Body -->
                     <div class="modal-body">
+
                         <div class="row" t-foreach="dataName" t-as="head">
                             <div class="col-xs-12">
-                                <label class="label-descrip payslip-name">
+                                <label class="paymnet-payslip-label paymnet-payslip-label-large">
                                     <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>
+
+                        <hr class="paymnet-payslip-separator-hr"/>
+
+                        <div t-foreach="data" t-as="data">
+                            <div class="row">
+                                <div class="col-xs-6">
+                                    <label class="paymnet-payslip-label">Empleado :</label>
+                                    <div class="paymnet-payslip-group">
+                                        <input class="paymnet-payslip-input input-disabled" type="text" t-attf-value="{{ data_value.employee }}" readonly="readonly"/>
+                                    </div>
+                                </div>
+                                <div class="col-xs-6">
+                                    <label class="paymnet-payslip-label">Periodo : </label>
+                                    <div class="paymnet-payslip-group">
+                                        <input type="text" class="paymnet-payslip-input input-disabled" t-attf-value=" {{ data_value.periodo }}" readonly="readonly"/>
+                                    </div>
+                                </div>
                             </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 class="row">
+                                <div class="col-xs-6">
+                                    <label class="paymnet-payslip-label">Referencia : </label>
+                                    <div class="paymnet-payslip-group">
+                                        <input type="text" class="paymnet-payslip-input input-disabled" t-attf-value=" {{ data_value.ref }}" readonly="readonly"/>
+                                    </div>
+                                </div>
+                                <div class="col-xs-6">
+                                    <label class="paymnet-payslip-label">Monto a Pagar : </label>
+                                    <div class="paymnet-payslip-group">
+                                        <input type="text" class="paymnet-payslip-input input-disabled input-number " t-attf-value=" {{ data.amount }}" readonly="readonly"/>
+                                    </div>
+                                </div>
                             </div>
                         </div>
+
+                        <hr class="paymnet-payslip-separator-hr"/>
+
                         <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>
+                                <label class="paymnet-payslip-label">Método de pago: </label>
+                                <div class="paymnet-payslip-group">
+                                    <select class="paymnet-payslip-input journal-selected">
+                                        <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>
+                                <div class="col-xs-6 paymnet-payslip-statement-open">
+                                    <label class="paymnet-payslip-label">Caja</label>
+                                    <div class="paymnet-payslip-group">
+                                        <select class="paymnet-payslip-input statement-selected">
+                                        </select>
+                                    </div>
+                                </div>
                         </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>
                     <!-- Pie de Pagina -->
                     <div class="modal-footer">
-                        <button type="button" class="oe_button oe_form_button oe_highlight payments-payslip">Pagar</button>
-                        <button type="button" class="oe_button oe_form_button oe_link dismmis-modal" data-dismiss="modal">Cancelar</button>
+                        <button type="button" class="oe_button oe_form_button oe_highlight paymnet-payslip-bottom payments-payslip">Pagar</button>
+                        <button type="button" class="oe_button oe_form_button oe_link paymnet-payslip-bottom dismmis-modal" data-dismiss="modal">Cancelar</button>
                     </div>
                 </div>
             </div>