Browse Source

[ADD] Pagos de funcionario individual

adrielso 7 years ago
parent
commit
1af4a44afe

+ 1 - 3
model/eiru_payslip_payments.py

@@ -17,7 +17,6 @@ class HrPayslip(models.Model):
         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)])
-
         line_move = []
         for line in moveline:
             line_move.append({
@@ -26,9 +25,8 @@ 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', '=', [journal.id]), ('date', '=', fields.Date.context_today(self))])
+        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:

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

@@ -2,6 +2,10 @@
     width: auto !important;
     height: auto !important;
 }
+.payslip-payment-unity {
+    width: auto !important;
+    height: auto !important;
+}
 .label-descrip {
     float: left;
     width: 130px;

+ 225 - 0
static/src/js/payslip_payments_unity.js

@@ -0,0 +1,225 @@
+(function() {
+
+    openerp.widgetInstanceUnity = null;
+    openerp.parentInstanceUnity = {};
+    var instance = openerp.web;
+
+    openerp.payslipPaymentsUnity = openerp.Widget.extend({
+        template: 'eiru_payslip_payments.PayslipUnityWidget',
+        id: undefined,
+        hrPayslip: [],
+        payslipLine: [],
+        accountJournal: [],
+        resCompany: [],
+        resCurrency: [],
+
+        /* init */
+        init: function (parent) {
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+        /* Start */
+        start: function () {
+            var self = this;
+            this.$el.click(function(){
+                self.fetchPaymentInit();
+            });
+            self.buttons.click(function(e) {
+                /* E (Editar) */
+                if (e.target.accessKey === 'E')
+                    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');
+            });
+        },
+        /* Actualizar ID */
+        updateId: function(id) {
+            var self = this;
+            self.id = id;
+        },
+        /* ---------------------------------------------------------------------
+         * Description: Funcione Inicial Pagos de Nominas
+         * -------------------------------------------------------------------*/
+         /* Método Inicial */
+        fetchPaymentInit: function() {
+            var self = this;
+            self.fetchPayslip().then(function(hrPayslip) {
+                return hrPayslip;
+            }).then(function(hrPayslip) {
+                self.hrPayslip = hrPayslip;
+                return self.fetchPayslipLine();
+            }).then(function(payslipLine) {
+                self.payslipLine = payslipLine;
+                return self.fecthJournal();
+            }).then(function(accountJournal) {
+                self.accountJournal = accountJournal;
+                return self.fecthCompany();
+            }).then(function(resCompany) {
+                self.resCompany = resCompany;
+                return self.fecthCurrency();
+            }).then(function(resCurrency) {
+                self.resCurrency = resCurrency;
+                return self.showPayslipPayments();
+            }).then(function() {
+                return self.reloadLine();
+            });
+        },
+        /* Consultar nominas de funcionario */
+        fetchPayslip: function() {
+            var self = this;
+            var fields = ['id', 'name', 'employee_id', 'date_from', 'date_to', 'move_id', 'number', 'line_ids', 'journal_id'];
+            var domain = [['id', '=', self.id]];
+            var payslip = new instance.Model('hr.payslip');
+            return payslip.query(fields).filter(domain).all();
+        },
+        /* Consultar detalles nominas de funcionario */
+        fetchPayslipLine: function() {
+            var self = this;
+            var fields = ['id', 'name', 'code', 'total', 'amount', 'slip_id'];
+            var domain = [['slip_id', '=', self.id], ['code', '=', 'NET']];
+            var payslipLine = new instance.Model('hr.payslip.line');
+            return payslipLine.query(fields).filter(domain).all();
+        },
+        /* Consultar método de pagos */
+        fecthJournal: function() {
+            var fields = ['id', 'name', 'code', 'type', 'currency', 'default_debit_account_id', 'default_credit_account_id'];
+            var domain = [['active', '=', true], ['type', 'in', ['bank', 'cash']], ['currency', '=', false]];
+            var journalSalario = new instance.Model('account.journal');
+            return journalSalario.query(fields).filter(domain).all();
+        },
+        /* Consultar Compania */
+        fecthCompany: function() {
+            var fields = ['id','name', 'currency_id'];
+            var domain = [['id', '=', 1]];
+            var resCompanyIds = new instance.Model('res.company');
+            return resCompanyIds.query(fields).filter(domain).all();
+        },
+        /* Consultar Moneda Activas */
+        fecthCurrency : function() {
+            var fields = ['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
+            var domain = [['active','=', true]];
+            var resCurrecy = new instance.Model('res.currency');
+            return resCurrecy.query(fields).filter(domain).all();
+        },
+        /* Filtar moneda de la compania*/
+        getCurrencyCompany: function(id) {
+            var self = this;
+            return _.filter(self.resCurrency, function(item) {
+                return item.id === id;
+            });
+        },
+        /* Activar el modal de pagos */
+        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();
+            // cabecera
+            var headerModalName = [{
+                name: hrPayslip.name
+            }];
+            //  ítem cuerpo
+            var dataPayslip = [{
+                employee: hrPayslip.employee_id[1],
+                periodo: moment(hrPayslip.date_from).format('DD/MM/YYYY')+" - "+moment(hrPayslip.date_to).format('DD/MM/YYYY'),
+                ref: hrPayslip.number,
+                amount: accounting.formatMoney(payslipLine.amount, currency.symbol, currency.decimal_places, currency.thousands_separator, currency.decimal_separator)
+            }];
+
+            var payslipPayment = instance.qweb.render('EiruPayslipPaymentsModal', {
+                data: dataPayslip,
+                dataName: headerModalName,
+                journal: self.accountJournal
+            });
+
+            $('.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');
+
+            /* Cerrar el modal */
+            $('.expired-account-modal').on('hidden.bs.modal', function (e) {
+                defer.resolve(false);
+                self.removeModal(e);
+            });
+
+            /* payments */
+            buttonPayment.click(function(e) {
+                if (!journal.val()) {
+                    instance.notification.do_warn("Atención","Seleccione un método de pago.");
+                    journal.css('border-color','red');
+                    return;
+                }
+                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()
+                    }
+                ],{
+                    context: new instance.CompoundContext()
+                }).then(function(results) {
+                    defer.resolve(results);
+
+                    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.removeModal(e);
+            });
+
+            return defer;
+        },
+        /* Remover la ventana modal */
+        removeModal: function() {
+            $('.expired-account-modal').remove();
+            $('.modal-backdrop').remove();
+        },
+        /* Recargar la vista  */
+        reloadLine: function() {
+            openerp.parentInstanceUnity.reload();
+        },
+    });
+
+    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.parentInstanceUnity = this;
+
+                if (openerp.widgetInstanceUnity) {
+                    openerp.widgetInstanceUnity.updateId(record.id);
+                }
+
+                if (this.$el.find('.payments-unity').length !== 0 )
+                    return;
+
+                openerp.widgetInstanceUnity = new openerp.payslipPaymentsUnity(this);
+
+                var elemento = this.$el.find('.oe_form_sheet.oe_form_sheet_width');
+                elemento = elemento.find('.payslip-payment-unity');
+
+                openerp.widgetInstanceUnity.appendTo(elemento[0]);
+                openerp.widgetInstanceUnity.updateId(record.id);
+            }
+        });
+    }
+})();

+ 10 - 0
static/src/xml/eiru_payslip_payments_unity.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<templates xml:space="preserve">
+    <t t-name="eiru_payslip_payments.PayslipUnityWidget">
+        <button class="payments-unity oe_stat_button btn btn-default oe_inline">
+            <div class="stat_button_icon fa fa-money"></div>
+            <div>Pagar Nómina</div>
+        </button>
+  </t>
+</templates>

+ 11 - 0
view/payslip_payments.xml

@@ -11,5 +11,16 @@
                 </label>
             </field>
         </record>
+		<!--ADD botton en  payslip -->
+		<record id="view_eiru_payment_payslip_unity" model="ir.ui.view">
+			<field name="name">view.eiru.payment.payslip.unity</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_title']"  position="before">
+					<div class="oe_right oe_button_box payslip-payment-unity" attrs="{'invisible': [('state','!=','done')]}"></div>
+				</xpath>
+			</field>
+		</record>
 	</data>
 </openerp>

+ 1 - 0
view/template.xml

@@ -4,6 +4,7 @@
             <xpath expr="." position="inside">
                 <link rel="stylesheet" href="/eiru_payslip_payments/static/src/css/style.css"/>
                 <script type="text/javascript" src="/eiru_payslip_payments/static/src/js/payslip_payments.js"/>
+                <script type="text/javascript" src="/eiru_payslip_payments/static/src/js/payslip_payments_unity.js"/>
             </xpath>
         </template>
     </data>