Jelajahi Sumber

[ADD] importar adelanto en cajas

adrielso 7 tahun lalu
induk
melakukan
7154c22c82

+ 61 - 2
model/payslip_faults.py

@@ -137,9 +137,68 @@ class HrPayslip(models.Model):
             'payslip_id': payslip.id
         }
 
-        payslip_input.create(input_line)
+        input_payslip = payslip_input.create(input_line)
 
-        return True if payslip_input else  False
+        if input_payslip:
+            if (values['salary_rule'] == 'ADL'):
+
+                ValueStatement = {
+                    'id_imput': input_payslip.id,
+                    'journal_id': values['journal'],
+                    'journal_ref': values['journal_ref']
+                }
+
+                self.bank_statement_import(ValueStatement)
+
+        return True if input_payslip else  False
+
+    @api.model
+    def bank_statement_import(self, values):
+        #period Actual
+        period = self.env['account.period'].search([('date_start', '<=', fields.Date.context_today(self) ),('date_stop', '>=', fields.Date.context_today(self))])
+        ### consultar payslip_input
+        payslip_input = self.env['hr.payslip.input'].search([('id', '=', values['id_imput'])])
+        ### consultar payslip
+        payslip = self.env['hr.payslip'].search([('id', '=', payslip_input.payslip_id.id)])
+        ### consultar salariRule
+        salary_rule = self.env['hr.salary.rule'].search([('code', '=', payslip_input.code)])
+        ### consultar accountJournal
+        journal = self.env['account.journal'].search([('id', '=', values['journal_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))])
+        ### Instanciar lineas de la caja
+        statement_line = self.env['account.bank.statement.line']
+        ## Crear o Actualizar statement
+        bank = {
+            'journal_id': journal.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',
+        }
+        # #
+        if bank_statement:
+            if len(bank_statement) == 1:
+                bank_statement.write(bank)
+            else:
+                bank_statement[len(bank_statement) -1].write(bank)
+        else:
+            bank_statement = bank_statement.create(bank)
+        ### Crear statement_line
+        bank_statement_line = {
+            'date' : bank_statement.date,
+            'statement_id' : bank_statement.id,
+            'journal_id': bank_statement.journal_id.id,
+            'amount': payslip_input.amount,
+            'account_id': bank_statement.journal_id.internal_account_id.id,
+            'ref': payslip_input.code,
+            'name': str(payslip_input.name)+"(Ref. pago: "+str(values['journal_ref']) if values['journal_ref'] else payslip_input.name,
+            'partner_id': payslip.employee_id.address_home_id.id,
+            'note': payslip_input.id,
+        }
+        statement_line.create(bank_statement_line)
+
+        return True if statement_line else False
 
     # Eliminar Adelanto/Comision
     @api.model

+ 27 - 1
static/src/css/style.css

@@ -87,7 +87,7 @@
 .expired-account-modal .payslip-table-advancement table tbody tr td:nth-child(2){
     display: none;
 }
-.expired-account-modal table thead tr th:nth-child(2){
+.expired-account-modal .payslip-table-advancement table thead tr th:nth-child(2){
     display: none;
 }
 /* Tipo de Operacion  */
@@ -123,3 +123,29 @@
 .expired-account-modal .payslip-table-advancement table thead tr th:nth-child(6){
     width: 20px;
 }
+/*export */
+/*id*/
+.expired-account-modal .payslip-table-advancement-export table tbody tr td:nth-child(1){
+    display: none;
+}
+.expired-account-modal .payslip-table-advancement-export table thead tr th:nth-child(1){
+    display: none;
+}
+/* Descriptcion */
+.expired-account-modal .payslip-table-advancement-export table tbody tr td:nth-child(2){
+    width: 538px ;
+    padding-left: 20px;
+}
+.expired-account-modal .payslip-table-advancement-export table thead tr th:nth-child(2){
+    width: 538px;
+}
+/* Importe */
+.expired-account-modal .payslip-table-advancement-export table tbody tr td:nth-child(3){
+    width: 160px ;
+    padding-right: 30px;
+    text-align: right;
+}
+.expired-account-modal .payslip-table-advancement-export table thead tr th:nth-child(3){
+    width: 160px;
+    text-align: center;
+}

+ 207 - 16
static/src/js/payslip_advancement.js

@@ -16,6 +16,8 @@
         resCompany: [],
         resCurrency: [],
         payslipInput: [],
+        accountJournal: [],
+        statementLine: [],
         /* init */
         init: function (parent) {
             this._super(parent);
@@ -28,6 +30,8 @@
             var editAdvancement = this.$el.find('.edit-advancement');
             var refreshAdvancement = this.$el.find('.refresh-advancement');
             var printAdvancement = this.$el.find('.print-advancement');
+            var exportCash = this.$el.find('.export-cash');
+
             // create
             addAdvancement.click(function() {
                 self.fetchAddAdvancement();
@@ -44,6 +48,9 @@
             printAdvancement.click(function() {
                 self.fetchPrintAdvancement();
             });
+            exportCash.click(function() {
+                self.fetchExportCash();
+            });
         },
         /* Actualizar ID */
         updateIdAdvancement: function(id) {
@@ -126,6 +133,9 @@
                 return self.fetchResCurrecy();
             }).then(function(resCurrency) {
                 self.resCurrency = resCurrency;
+                return self.fetchJournal();
+            }).then(function(accountJournal) {
+                self.accountJournal = accountJournal;
                 return self.showPayslipAddAdvancement();
             }).then(function() {
                 return self.recomputeSheet();
@@ -154,6 +164,13 @@
             var salaryRule = new openerp.web.Model('hr.salary.rule');
             return salaryRule.query(['name','code']).filter([['code','in',['ADL','CMS']]]).all();
         },
+        /* Consultar método de pagos */
+        fetchJournal: 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 openerp.web.Model('account.journal');
+            return journalSalario.query(fields).filter(domain).all();
+        },
         /* Description: Modal crear Adealnto/ comision de Funcionario */
         showPayslipAddAdvancement: function() {
             var self = this;
@@ -171,7 +188,8 @@
             ];
             var modalAdvancement = QWeb.render('EiruPayslipAddAdvancement',{
                 employeData: employeData,
-                salaryRule: self.salaryRule
+                salaryRule: self.salaryRule,
+                journal: self.accountJournal
             });
 
             $('.openerp_webclient_container').after(modalAdvancement);
@@ -187,6 +205,21 @@
             var details = $('.expired-account-modal').find('.advancement-details');
             var ammount_input = $('.expired-account-modal').find('.advancement-amount');
             var addAdvancement = $('.expired-account-modal').find('.add-advancement');
+            var current_journal = $('.expired-account-modal').find('.current-journal');
+            var journal_ref = $('.expired-account-modal').find('.journal-ref');
+
+            salary_rule.change(function(){
+                if (salary_rule.val() !== 'ADL'){
+                    current_journal.attr("disabled", true);
+                    current_journal.css("color", '#cfcfcf');
+
+                    journal_ref.attr("disabled", true);
+                } else {
+                    current_journal.removeAttr("disabled");
+                    current_journal.css("color", '#4c4c4c');
+                    journal_ref.removeAttr("disabled");
+                }
+            })
 
             addAdvancement.click(function(e){
                 /* Operacion */
@@ -213,7 +246,7 @@
                 ammount_input.css('border-color','#ccc');
                 var payslip = new openerp.web.Model('hr.payslip');
                 if (amount > payslipLine.amount && salary_rule.val() === "ADL"){
-                    openerp.web.notification.do_warn("Atención","El importe del adelanto no puede superar el dueldo neto,\n Importe permitido "+ accounting.formatMoney(payslipLine.amount, currency.symbol,currency.decimal_places, currency.thousands_separator, currency.decimal_separator));
+                    openerp.web.notification.do_warn("Atención","El importe del adelanto no puede superar el sueldo neto,\n Importe permitido "+ accounting.formatMoney(payslipLine.amount, currency.symbol,currency.decimal_places, currency.thousands_separator, currency.decimal_separator));
                     ammount_input.focus();
                     return;
                 }
@@ -228,7 +261,9 @@
                         id: self.id,
                         salary_rule: salary_rule.val(),
                         details: details.val(),
-                        ammount_input: amount
+                        ammount_input: amount,
+                        journal: current_journal.val(),
+                        journal_ref: journal_ref.val()
                     }
                 ],{
                     context: new openerp.web.CompoundContext()
@@ -304,17 +339,15 @@
             var defer = $.Deferred();
             var inputSalari = [];
             var rule;
+            var payslipInput = self.getpayslipInput('CMS');
 
-            _.each(self.payslipInput, function(item) {
+            _.each(payslipInput, function(item) {
                 rule = self.getSalaryRule(item.code).shift();
                 if (!rule){
                     rule = {};
                     rule.name= item.code;
                 }
                 var amount = item.amount;
-                if (item.code === 'ADL'){
-                    amount = (item.amount * -1);
-                }
 
                 inputSalari.push(
                     {
@@ -479,6 +512,7 @@
                     $('.expired-account-modal').find('.number').val(accounting.formatMoney(payslipLine.amount, currency.symbol,currency.decimal_places, currency.thousands_separator, currency.decimal_separator));
                     defer.resolve(payslipLine);
                 });
+
                 $(e.target).closest('td').closest('tr').remove();
            });
            /* Keyup */
@@ -563,17 +597,17 @@
             return resUser.query(['name']).filter([['active', '=', true],['id', '=', self.uid]]).all();
         },
         /* Filtar Adelantos */
-        getpayslipInput: function() {
+        getpayslipInput: function(code) {
             var self = this;
             return _.filter(self.payslipInput, function(item) {
-                return item.code === "ADL";
+                return item.code === code;
             });
 
         },
         /* Generar la impresion de Adelanto */
         jsPdfPrintAdvancement: function() {
             var self = this;
-            var payslipInput = self.getpayslipInput();
+            var payslipInput = self.getpayslipInput('ADL');
 
             if (payslipInput.length === 0){
                 openerp.web.notification.do_warn("Atención","El funcionario no cuenta con adelantos registrado");
@@ -678,8 +712,9 @@
             pdfDoc.text(10, fila, "TOTAL EN LETRAS ");
 
             pdfDoc.setFontType('normal');
-            pdfDoc.setFontSize(12);
-            pdfDoc.text(50, fila, moneda+": "+openerp.web.num2word(total));
+            pdfDoc.setFontSize(10);
+            var text =moneda+": "+openerp.web.num2word(total);
+            pdfDoc.text(50, fila, pdfDoc.splitTextToSize(text, 150),null, null, null);
 
             fila = fila + 20;
             pdfDoc.setFontType('bold');
@@ -698,13 +733,169 @@
         getNameCurrency: function(code) {
             var moneda = "";
             if (code === 'PYG') {
-                moneda ="GUARANÍES"
+                moneda ="GUARANÍES";
             }
             if (code === 'USD') {
-                moneda ="DÓLARES AMERICANOS "
+                moneda ="DÓLARES AMERICANOS";
+            }
+            return moneda;
+        },
+        /*---------------------------------------------------------------------
+         * Description: Exportar los adelanto en Registro de caja
+         * -------------------------------------------------------------------*/
+        /* Description : Metodo Inicial de Exportar adelanto en caja*/
+        fetchExportCash: function() {
+            var self = this;
+
+            self.fetchPayslipInput().then(function(payslipInput) {
+                return payslipInput;
+            }).then(function(payslipInput) {
+                self.payslipInput = payslipInput;
+                return self.fetchJournal();
+            }).then(function(accountJournal) {
+                self.accountJournal = accountJournal;
+                return self.fetchStatementLine();
+            }).then(function(statementLine) {
+                self.statementLine = statementLine;
+                return self.fetchResCompany();
+            }).then(function(resCompany) {
+                self.resCompany = resCompany;
+                return self.fetchResCurrecy();
+            }).then(function(resCurrency) {
+                self.resCurrency = resCurrency;
+                return self.joinInputAdvancement();
+            });
+        },
+        /* Consultar Lineas de Cajas */
+        fetchStatementLine: function() {
+            var statementLine = new openerp.web.Model('account.bank.statement.line');
+            return statementLine.query(['name', 'note', 'ref']).filter([['ref','=', 'ADL']]).all();
+        },
+        /* Filtar los adelanto que no Exista en caja */
+        joinInputAdvancement: function() {
+            var self = this;
+            var company = self.resCompany.shift();
+            var currency = self.getCurrencyCompany(company.currency_id[0]).shift();
+            var payslipInput = self.getAdvancementNotInBox();
+            var InputPayslip = [];
+            _.each(payslipInput, function(item) {
+                InputPayslip.push({
+                    'id': item.id,
+                    'name': item.name,
+                    'amount': accounting.formatMoney((-1 * item.amount), currency.symbol,currency.decimal_places, currency.thousands_separator, currency.decimal_separator)
+                });
+            })
+            self.showModalAdvancementExportCash(InputPayslip);
+        },
+        /* Filtra los adelanto que no están en caja */
+        getAdvancementNotInBox: function() {
+            var self = this;
+            var payslipInput = self.getpayslipInput('ADL');
+
+            var id_input = _.map(self.statementLine, function(map) {
+                return parseInt(map.note);
+            });
+            return _.filter(payslipInput, function(filter) {
+                return !_.contains(id_input, filter.id);
+            });
+        },
+        /* Modal Exportar adelanto en caja*/
+        showModalAdvancementExportCash: function(payslipInput){
+            var self = this;
+            var row_export;
+
+            if (payslipInput.length === 0){
+                openerp.web.notification.do_warn("Atención","No existe adelanto para importar en caja");
+                return;
             }
-            return moneda
-        }
+
+            var modalAdvancementExportCash = QWeb.render('EiruAdvancementExportCash', {
+                inputAdvancement: payslipInput,
+                journal: self.accountJournal
+            });
+
+            $('.openerp_webclient_container').after(modalAdvancementExportCash);
+            $('.expired-account-modal').modal();
+
+            /* Salir*/
+            $('.expired-account-modal').on('hidden.bs.modal', function (e) {
+                self.removeModal(e);
+            });
+            //
+            var advancement_details = $('.expired-account-modal').find('.advancement-details');
+            var advancement_amount = $('.expired-account-modal').find('.advancement-amount');
+            var current_journal = $('.expired-account-modal').find('.current-journal');
+            var journal_ref = $('.expired-account-modal').find('.journal-ref');
+            var advancement_export = $('.expired-account-modal').find('.advancement-export');
+            var tableRow = $('.expired-account-modal').find('.table-tbody').find('tr');
+            // Deshabilitar Campos
+            current_journal.attr("disabled", true);
+            journal_ref.attr("disabled", true);
+            advancement_export.attr("disabled", true);
+            /* Seleccionar  fila */
+            tableRow.click(function (e) {
+                row_export = $(e.target);
+                tableRow.removeClass('table-row-select');
+                $(e.target).closest('tr').addClass('table-row-select');
+                /* Cargar Campo Description y importe */
+                advancement_details.val(($(e.target).closest('tr').children()[1].textContent).trim());
+                advancement_amount.val(($(e.target).closest('tr').children()[2].textContent).trim());
+                // Actualizar el Id de elemento seleccionado
+                self.row_id_select = parseInt($(e.target).closest('tr').children()[0].textContent);
+                // Habilitar Campos
+                current_journal.removeAttr("disabled");
+                journal_ref.removeAttr("disabled");
+                advancement_export.removeAttr("disabled");
+                current_journal.focus();
+            });
+            // clic en botón exportar
+            advancement_export.click(function() {
+                if (!current_journal.val()){
+                    openerp.web.notification.do_warn("Atención","El método de pago es obligatorio");
+                    current_journal.focus();
+                    current_journal.css('border-color','red');
+                    return;
+                }
+                current_journal.css('border-color','#ccc');
+
+                self.bankStatementImport(self.row_id_select, parseInt(current_journal.val()), journal_ref.val()).then(function(results){
+                    return results;
+                }).then(function() {
+
+                    row_export.closest('td').closest('tr').remove();
+
+                    current_journal.attr("disabled", true);
+                    journal_ref.attr("disabled", true);
+                    advancement_export.attr("disabled", true);
+
+                    journal_ref.val('');
+                    current_journal.val('');
+
+                    advancement_details.val('');
+                    advancement_amount.val('0');
+
+                    row_export = "";
+                });
+            });
+        },
+        /* bank_statement_import*/
+        bankStatementImport: function(id_imput, journal_id, journal_ref) {
+            var payslip = new openerp.web.Model('hr.payslip');
+            var defer = $.Deferred();
+            payslip.call('bank_statement_import',
+            [
+                {
+                    'id_imput': id_imput,
+                    'journal_id': journal_id,
+                    'journal_ref': journal_ref
+                }
+            ],{
+                context: new openerp.web.CompoundContext()
+            }).then(function(results) {
+                defer.resolve(results)
+            });
+            return defer;
+        },
     });
 
     if (openerp.web && openerp.web.FormView) {

+ 81 - 0
static/src/xml/modal/modal_advancement_export_cash.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="EiruAdvancementExportCash">
+        <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">
+                            Exportar adelanto en registros de caja
+                        </h3>
+                    </div>
+                    <!-- Body -->
+                    <div class="modal-body">
+                        <div class="row">
+                            <div class="col-xs-6">
+                                <label class="detallis-employee-label">Descripción</label>
+                                <input class="detallis-employee-input advancement-details" readonly="readonly" ></input>
+                            </div>
+                            <div class="col-xs-6">
+                                <label class="detallis-employee-label">Importe</label>
+                                <input class="detallis-employee-input advancement-amount" readonly="readonly"></input>
+                            </div>
+                        </div>
+                        <hr class="detallis-employee-separator"/>
+                        <div class="row">
+                            <div class="col-xs-5">
+                                <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-5">
+                                <label class="label-descrip labe-input">Referencia de pago: </label>
+                                <input type="text" class="journal-ref"></input>
+                            </div>
+                            <div class="col-xs-2 payslip-faults">
+                                <button type="button" class="oe_button oe_form_button oe_highlight advancement-export">Exportar</button>
+                            </div>
+                        </div>
+                        <hr class="detallis-employee-separator"/>
+                        <!-- Table -->
+                        <div class=" oe_view_manager_body payslip-table-advancement-export">
+                            <div class="modal-head-wrapper-payslip">
+                                <table class="oe_list_content">
+                                    <thead >
+                                        <tr class="oe_list_header_columns">
+                                            <th class="oe_list_header_char oe_sortable"></th>
+                                            <th class="oe_list_header_char oe_sortable">Descripción</th>
+                                            <th class="oe_list_header_char oe_sortable">Importe</th>
+                                        </tr>
+                                    </thead>
+                                </table>
+                            </div>
+                            <div class="modal-item-payslip">
+                                <table class="oe_list_content">
+                                    <tbody class="table-tbody">
+                                        <tr t-foreach="inputAdvancement" t-as="input">
+                                            <td><t t-esc="input_value.id"/></td>
+                                            <td><t t-esc="input_value.name"/></td>
+                                            <td><t t-esc="input_value.amount"/></td>
+                                        </tr>
+                                    </tbody>
+                                </table>
+                            </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">Salir</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 18 - 0
static/src/xml/modal/modal_payslip_add_advancement.xml

@@ -53,6 +53,24 @@
                                     <input class="faults-input advancement-amount" type="text" ></input>
                                 </div>
                             </div>
+                            <hr class="detallis-employee-separator"/>
+                            <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>
+
                         </div>
                     </div>
                     <!-- Pie de Pagina -->

+ 1 - 1
static/src/xml/modal/modal_payslip_modify_advancement.xml

@@ -8,7 +8,7 @@
                     <div class="modal-header">
                         <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>
                         <h3 class="modal-title">
-                            Advancement - Commission
+                            Commission
                         </h3>
                     </div>
                     <!-- Body -->

+ 6 - 2
static/src/xml/payslip_add_advancement.xml

@@ -10,10 +10,14 @@
                 <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-advancement" title="Modificar u eliminar los adelantos o las comisiones">
+            <button class="oe_stat_button btn btn-default oe_inline edit-advancement" title="Modificar u eliminar las comisiones">
                 <div class="stat_button_icon fa fa-pencil-square-o"></div>
                 <div>Editar/Eliminar</div>
-            </button> -->
+            </button>
+            <button class="oe_stat_button btn btn-default oe_inline export-cash" title="Imprimir adelanto u comisión de funcionario">
+                <div class="stat_button_icon fa fa-exchange"></div>
+                <div>Exportar a Caja</div>
+            </button>
             <button class="oe_stat_button btn btn-default oe_inline print-advancement" title="Imprimir adelanto u comisión de funcionario">
                 <div class="stat_button_icon fa fa-print"></div>
                 <div>Imprimir</div>