Browse Source

[ADD] Sacar/Poner dinero

adrielso 6 năm trước cách đây
mục cha
commit
3f574296c7

+ 4 - 1
models/__init__.py

@@ -1,6 +1,9 @@
 # -*- coding: utf-8 -*-
 import account_bank_statement_config
 import account_bank_statement_type
-import account_bank_statement_transfer
+import account_bank_statement_utility
+import account_bank_statement_cashbox
+# import account_bank_statement_cashbox_input
+# import account_bank_statement_cashbox_output
 import account_bank_statement
 import cash_box_transfer

+ 21 - 0
models/account_bank_statement_cashbox.py

@@ -0,0 +1,21 @@
+from openerp import models, fields, tools, api
+
+class casbox_input(models.Model):
+    _inherit = 'cash.box.in'
+
+    date = fields.Date()
+    message_deleted = fields.Text('Message Deleted')
+    active = fields.Boolean('Active', default=True)
+    line_id = fields.Many2one('account.bank.statement.line', 'Bank statement line')
+    statement_id = fields.Many2one('account.bank.statement', 'Bank statement')
+
+
+class casbox_output(models.Model):
+    _inherit = 'cash.box.out'
+
+    date = fields.Date()
+    ref =fields.Char('ref')
+    message_deleted = fields.Text('Message Deleted')
+    active = fields.Boolean('Active', default=True)
+    line_id = fields.Many2one('account.bank.statement.line', 'Bank statement line')
+    statement_id = fields.Many2one('account.bank.statement', 'Bank statement')

+ 3 - 1
models/account_bank_statement_config.py

@@ -19,9 +19,11 @@ class accountBankStatementConfig(models.Model):
     ## Poner Dinero
     input_cash_box_user_id = fields.Many2many('res.users', 'statement_config_input_user', 'account_bank_statement_config_id', 'res_users_id', string='statement_input_user')
     input_cash_box_statement_ids = fields.Many2many('account.bank.statement.type', 'statement_config_input_statement', 'account_bank_statement_config_id', 'account_bank_statement_type_id', string="statement_config_input_statement")
+    delete_input_user_ids = fields.Many2many('res.users', 'statement_config_deleted_input_user', 'account_bank_statement_config_id','res_users_id', string='statement_delete_input_user')
 
     ## Sacar Dinero
     output_cash_box_user_id = fields.Many2many('res.users', 'statement_config_output_user', 'account_bank_statement_config_id', 'res_users_id', string='statement_output_user')
     output_cash_box_statement_ids = fields.Many2many('account.bank.statement.type', 'statement_config_output_statement', 'account_bank_statement_config_id', 'account_bank_statement_type_id', string="statement_config_output_statement")
-
+    output_negative_amount = fields.Boolean('output_negative_amount', default=False, help="Permitir sacar dinero sin saldo en caja")
+    delete_output_user_ids = fields.Many2many('res.users', 'statement_config_deleted_output_user', 'account_bank_statement_config_id','res_users_id', string='statement_delete_output_user')
     ## Importar Cajas

+ 66 - 0
models/account_bank_statement_transfer.py → models/account_bank_statement_utility.py

@@ -391,3 +391,69 @@ class AccountBankStatementUtility(models.Model):
         return { 'state': True,
                 'message': 'Operación realizada con éxito'
         }
+
+    '''
+       ____          ____               ___                  ___        _
+      / ___|__ _ ___| __ )  _____  __  |_ _|_ __            / _ \ _   _| |_
+     | |   / _` / __|  _ \ / _ \ \/ /   | || '_ \   _____  | | | | | | | __|
+     | |__| (_| \__ \ |_) | (_) >  <    | || | | | |_____| | |_| | |_| | |_
+      \____\__,_|___/____/ \___/_/\_\  |___|_| |_|          \___/ \__,_|\__|
+
+    '''
+    '''
+        Create Statement Line
+    '''
+    def _create_statement_line_input_outup(self, statement,ref,amount,type,name):
+        statementLine = {
+            'statement_id': statement.id,
+            'name': name,
+            'amount': type in ('input') and amount or -amount,
+            'ref': ref,
+            'account_id': statement.journal_id.internal_account_id.id,
+            'journal_id': statement.journal_id.id,
+            'is_deleted': True
+        }
+
+        line = self.env['account.bank.statement.line'].create(statementLine)
+        return line
+
+    '''
+        Create cashBox input
+    '''
+    def create_cash_box_in_out(self, line, amount, ref, name, type):
+        cash = {
+            'name': "%s %s" %((name),(line.statement_id.name)),
+            'amount': amount,
+            'ref': ref,
+            'date': line.date,
+            'line_id': line.id,
+            'statement_id': line.statement_id.id,
+        }
+        if (type =='input'):
+            return self.env['cash.box.in'].create(cash)
+        else:
+            return self.env['cash.box.out'].create(cash)
+
+    '''
+        Create casbox input/output
+    '''
+    @api.model
+    def create_cash_box_input_output(self, values):
+        statement = self._get_statement_transfer(values['statementId'])
+        if (not statement):
+            return False
+
+        name = values['type'] in ('input') and 'Entrada de Dinero' or 'Salida de Dinero'
+
+        lineStatement = self._create_statement_line_input_outup(statement, values['ref'], values['amount'], values['type'], name)
+        if (not lineStatement):
+            return False
+
+        casBox = self.create_cash_box_in_out(lineStatement, values['amount'], values['ref'], name, values['type'])
+
+        if (not casBox):
+            return False
+
+        return {
+            'state': True
+        }

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

@@ -169,3 +169,6 @@
     font-size: 14pt;
     font-weight: bold;
 }
+.is_output{
+    display: none;
+}

+ 252 - 0
static/src/js/eiru_statement_cashbox_input.js

@@ -0,0 +1,252 @@
+(function() {
+
+    openerp.widgetInstanceStatementCashBoxInput = null;
+    openerp.parentInstanceStatementCashBoxInput = {};
+    var QWeb = openerp.web.qweb;
+    var instanceWeb = openerp.web;
+
+    openerp.EiruStatementCashBoxInput = openerp.Widget.extend({
+        template: 'EiruStatementUtility.CashBoxInput',
+        id: undefined,
+        buttons: undefined,
+        bankStatement: [],
+        statementConfig: [],
+        resUser: [],
+        /* init */
+        init: function(parent) {
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+        /* start */
+        start: function () {
+            var self = this
+            this.$el.click(function() {
+                self.fetchInitial();
+            });
+            self.buttons.click(function(e) {
+                /* C (Crear) */
+                if (e.target.accessKey === 'C')
+                    self.$el.css('display','none');
+                /* 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 de la visat actual  */
+        updateId: function(id) {
+            var self = this;
+            self.id = id;
+        },
+        /* Reload Page*/
+        reloadPage: function() {
+             openerp.parentInstanceStatementCashBoxInput.reload();
+        },
+        /* Description: Función para remover el modal */
+        removeModal: function() {
+            $('.expired-account-modal').remove();
+            $('.modal-backdrop').remove();
+        },
+        /*Get User*/
+        fetchGetUserLogin: function() {
+            var bankStatementUser = new instanceWeb.Model('account.bank.statement');
+            return bankStatementUser.call('eiru_transfers_get_user', {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+        /* statement Config */
+        fetchStatementConfigTransfer: function() {
+            var fields = ['id','name','input_cash_box_user_id','input_cash_box_statement_ids'];
+            var domain = [['active', '=', true]];
+            var statementConfig = new openerp.web.Model('account.bank.statement.config');
+            return statementConfig.query(fields).filter(domain).all();
+        },
+        /* Método inicial */
+        fetchInitial: function() {
+            var self = this;
+            self.fetchBankStatement(self.id).then(function(bankStatement) {
+                return bankStatement;
+            }).then(function(bankStatement) {
+                self.bankStatement = bankStatement;
+                return self.fetchStatementConfigTransfer();
+            }).then(function(statementConfig) {
+                self.statementConfig = statementConfig;
+                return self.fetchGetUserLogin();
+            }).then(function(resUser) {
+                self.resUser = resUser;
+
+                if (!self.statementConfig.length) {
+                    instanceWeb.notification.do_warn("Atencion", "No fue posible localizar las configuración de las caja.");
+                    return  false;
+                }
+                if (!self.resUser.length) {
+                    instanceWeb.notification.do_warn("Atencion", "No fue posible localizar el usuario.");
+                    return  false;
+                }
+                if (!!self.bankStatement.length) {
+                    var statementConfig = self.statementConfig[0];
+                    var resUser = self.resUser[0];
+                    var statementUser = self.bankStatement[0];
+                    /*  Verificar si el tipo caja tiene permiso para la transferencia */
+                    if (!(_.contains(statementConfig.input_cash_box_statement_ids, statementUser.typeStatement))) {
+                        instanceWeb.notification.do_warn("Atencion", "El tipo de caja no tiene permiso para poner dinero.");
+                        return  false;
+                    }
+                    /* Verificar si el usuario tiene permiso para la transferencia*/
+                    if (!(_.contains(statementConfig.input_cash_box_user_id, resUser.id))) {
+                        instanceWeb.notification.do_warn("Atencion", "El usuario no tiene permiso para poner dinero.");
+                        return false;
+                    }
+                }
+                return self.showModalCashBox();
+            });
+        },
+        /* Account bank Statement */
+        fetchBankStatement: function(id) {
+            var bankStatement = new instanceWeb.Model('account.bank.statement');
+            return bankStatement.call('get_account_bank_statement_utility',[id], {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+        // /*Modal  Transfer */
+        showModalCashBox: function() {
+            var self = this;
+            var defer =$.Deferred();
+            var results = true;
+            var bankStatement = self.bankStatement[0];
+            var statement = [];
+            var currency ;
+            if (!!bankStatement) {
+                currency = bankStatement.currencystatement;
+                statement = [{
+                    'amount': accounting.formatNumber(bankStatement.amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator),
+                    'symbol': bankStatement.currencystatement.symbol
+                }];
+            }
+            var header = [{
+                    'title': 'Poner dinero en caja '
+            }];
+            var modal = QWeb.render('ModalStatementUtility.CashBox',{
+                'header':header,
+                'statement': statement
+            });
+            $('.openerp_webclient_container').after(modal);
+            $('.expired-account-modal').modal();
+
+            var refCashBox = $('.expired-account-modal').find('.ref-cash-box');
+            var amountCashBox = $('.expired-account-modal').find('.amount-cash-box');
+            /* button */
+            var buttonCashBox = $('.expired-account-modal').find('.button-cash-box');
+
+            /*Monto del chque */
+            amountCashBox.keyup(function(e) {
+                var amount_add = Math.abs(accounting.unformat(amountCashBox.val(),currency.decimalSeparator));
+                amountCashBox.val(accounting.formatNumber(amount_add, 0, currency.thousandsSeparator, currency.decimalSeparator));
+                amountCashBox.css('border-color','#ccc');
+                if (e.keyCode === 13)
+                    buttonCashBox.focus();
+            });
+
+            /*Monto del cheque */
+            amountCashBox.focusout(function(e) {
+                var amount_add = (accounting.unformat(amountCashBox.val(),currency.decimalSeparator));
+                if (amount_add <=  0) {
+                    instanceWeb.notification.do_warn("Atencion", "El monto no puede ser 0.");
+                    amountCashBox.css('border-color','red');
+                    amountCashBox.focus();
+                    return false;
+                }
+            });
+            /*Click buttonSave*/
+            buttonCashBox.click(function(e) {
+                var amount = (accounting.unformat(amountCashBox.val(),currency.decimalSeparator));
+                /* Ref transfer */
+                if (!refCashBox.val()) {
+                    instanceWeb.notification.do_warn("Atencion", "Debes de ingresar un motivo.");
+                    refCashBox.css('border-color','red');
+                    refCashBox.focus();
+                    return false;
+                }
+                refCashBox.css('border-color','#ccc');
+
+                /* ammount transfer*/
+                if (amount <= 0) {
+                    instanceWeb.notification.do_warn("Atencion", "El valor debe ser mayor a cero.");
+                    amountCashBox.css('border-color','red');
+                    amountCashBox.focus();
+                    return false;
+                }
+                amountCashBox.css('border-color','#ccc');
+
+                var input ={
+                    'statementId': self.id,
+                    'ref': !!refCashBox.val() ? refCashBox.val() :'',
+                    'amount': amount,
+                    'type': 'input'
+                }
+
+                /* Save Payments */
+                self.StatementCreateCashBox(input).then(function(resultsInput) {
+                    return resultsInput;
+                }).then(function(resultsInput) {
+                    self.reloadPage();
+                    self.removeModal(e);
+                    if (!resultsInput)
+                        results = false;
+                });
+
+                defer.resolve(results);
+
+            });
+
+            /* Click Cerrar */
+            $('.expired-account-modal').on('hidden.bs.modal', function(e) {
+                results = false;
+                defer.resolve(results);
+                self.removeModal(e);
+            });
+
+            return defer;
+        },
+        /*Create CashBox Input */
+        StatementCreateCashBox: function(values) {
+            var bankStatement = new instanceWeb.Model('account.bank.statement');
+            return bankStatement.call('create_cash_box_input_output',[values], {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+    });
+
+    if (openerp.web && openerp.web.FormView) {
+        openerp.web.FormView.include({
+            load_record: function(record) {
+                this._super.apply(this, arguments);
+
+                if (this.model !== 'account.bank.statement')
+                    return;
+
+                openerp.parentInstanceStatementCashBoxInput = this;
+
+                if (openerp.widgetInstanceStatementCashBoxInput) {
+                    openerp.widgetInstanceStatementCashBoxInput.updateId(record.id);
+                    if (this.$el.find('.button-statement-Cashbox-Input').length !== 0 )
+                        return ;
+                }
+
+                if (this.$el.find('.button-statement-Cashbox-Input').length !== 0 )
+                    return;
+
+                openerp.widgetInstanceStatementCashBoxInput = new openerp.EiruStatementCashBoxInput(this);
+                var element =this.$el.find('.oe_form').find('.eiru-statement-utility');
+
+                openerp.widgetInstanceStatementCashBoxInput.appendTo(element[0]);
+                openerp.widgetInstanceStatementCashBoxInput.updateId(record.id);
+            }
+        });
+    }
+})();

+ 304 - 0
static/src/js/eiru_statement_cashbox_output.js

@@ -0,0 +1,304 @@
+(function() {
+
+    openerp.widgetInstanceStatementCashBoxOutput = null;
+    openerp.parentInstanceStatementCashBoxOutput = {};
+    var QWeb = openerp.web.qweb;
+    var instanceWeb = openerp.web;
+
+    openerp.EiruStatementCashBoxOutput = openerp.Widget.extend({
+        template: 'EiruStatementUtility.CashBoxOutput',
+        id: undefined,
+        buttons: undefined,
+        bankStatement: [],
+        statementConfig: [],
+        resUser: [],
+        /* init */
+        init: function(parent) {
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+        /* start */
+        start: function () {
+            var self = this
+            this.$el.click(function() {
+                self.fetchInitial();
+            });
+            self.buttons.click(function(e) {
+                /* C (Crear) */
+                if (e.target.accessKey === 'C')
+                    self.$el.css('display','none');
+                /* 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 de la visat actual  */
+        updateId: function(id) {
+            var self = this;
+            self.id = id;
+        },
+        /* Reload Page*/
+        reloadPage: function() {
+             openerp.parentInstanceStatementCashBoxOutput.reload();
+        },
+        /* Description: Función para remover el modal */
+        removeModal: function() {
+            $('.expired-account-modal').remove();
+            $('.modal-backdrop').remove();
+        },
+        /*Get User*/
+        fetchGetUserLogin: function(){
+            var bankStatementUser = new instanceWeb.Model('account.bank.statement');
+            return bankStatementUser.call('eiru_transfers_get_user', {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+        /* statement Config */
+        fetchStatementConfigTransfer: function() {
+            var fields = ['id','name','output_cash_box_user_id','output_cash_box_statement_ids','output_negative_amount'];
+            var domain = [['active', '=', true]];
+            var statementConfig = new openerp.web.Model('account.bank.statement.config');
+            return statementConfig.query(fields).filter(domain).all();
+        },
+        /* Método inicial */
+        fetchInitial: function() {
+            var self = this;
+            self.fetchBankStatement(self.id).then(function(bankStatement) {
+                return bankStatement;
+            }).then(function(bankStatement) {
+                self.bankStatement = bankStatement;
+                return self.fetchStatementConfigTransfer();
+            }).then(function(statementConfig) {
+                self.statementConfig = statementConfig;
+                return self.fetchGetUserLogin();
+            }).then(function(resUser) {
+                self.resUser = resUser;
+
+                if (!self.statementConfig.length) {
+                    instanceWeb.notification.do_warn("Atencion", "No fue posible localizar las configuración de las caja.");
+                    return  false;
+                }
+                if (!self.resUser.length) {
+                    instanceWeb.notification.do_warn("Atencion", "No fue posible localizar el usuario.");
+                    return  false;
+                }
+                if (!!self.bankStatement.length) {
+                    var statementConfig = self.statementConfig[0];
+                    var resUser = self.resUser[0];
+                    var statementUser = self.bankStatement[0];
+                    /*  Verificar si el tipo caja tiene permiso para la transferencia */
+                    if (!(_.contains(statementConfig.output_cash_box_statement_ids, statementUser.typeStatement))) {
+                        instanceWeb.notification.do_warn("Atencion", "El tipo caja no tiene permiso para sacar dinero.");
+                        return  false;
+                    }
+                    /* Verificar si el usuario tiene permiso para la transferencia*/
+                    if (!(_.contains(statementConfig.output_cash_box_user_id, resUser.id))) {
+                        instanceWeb.notification.do_warn("Atencion", "El usuario no tiene permiso para sacar dinero .");
+                        return false;
+                    }
+                    if (statementUser.amount <= 0) {
+                        if (!statementConfig) {
+                            instanceWeb.notification.do_warn("Atencion", "La caja seleccionada no tiene saldo disponible.");
+                            return false;
+                        }
+                        if (!statementConfig.output_negative_amount) {
+                            instanceWeb.notification.do_warn("Atencion", "La caja seleccionada no tiene saldo disponible.");
+                            return false;
+                        }
+                    }
+                }
+                return self.showModalCashBox();
+            });
+        },
+        /* Account bank Statement */
+        fetchBankStatement: function(id) {
+            var bankStatement = new instanceWeb.Model('account.bank.statement');
+            return bankStatement.call('get_account_bank_statement_utility',[id], {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+        // /*Modal  Transfer */
+        showModalCashBox: function() {
+            var self = this;
+            var defer =$.Deferred();
+            var results = true;
+            var bankStatement = self.bankStatement[0];
+            var statement = [];
+            var currency ;
+            if (!!bankStatement) {
+                currency = bankStatement.currencystatement;
+                statement = [{
+                    'amount': accounting.formatNumber(bankStatement.amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator),
+                    'symbol': bankStatement.currencystatement.symbol
+                }];
+            }
+            var header = [{
+                    'title': 'Sacar dinero de caja '
+            }];
+            var modal = QWeb.render('ModalStatementUtility.CashBox',{
+                'header':header,
+                'statement': statement
+            });
+            $('.openerp_webclient_container').after(modal);
+            $('.expired-account-modal').modal();
+
+            $('.expired-account-modal').find('.is_output').css('display','flex');
+            var refCashBox = $('.expired-account-modal').find('.ref-cash-box');
+            var amountCashBox = $('.expired-account-modal').find('.amount-cash-box');
+            var amountTotalCash = $('.expired-account-modal').find('.amount-total-cash');
+            /* button */
+            var buttonCashBox = $('.expired-account-modal').find('.button-cash-box');
+            refCashBox.keyup(function(e) {
+                if (e.keyCode === 13)
+                    amountCashBox.focus();
+            });
+            /*Monto del chque */
+            amountCashBox.keyup(function(e) {
+                var amount_add = Math.abs(accounting.unformat(amountCashBox.val(),currency.decimalSeparator));
+                amountCashBox.val(accounting.formatNumber(amount_add, 0, currency.thousandsSeparator, currency.decimalSeparator));
+                amountCashBox.css('border-color','#ccc');
+                if (e.keyCode === 13)
+                    buttonCashBox.focus();
+            });
+            /*Monto del cheque */
+            amountCashBox.focusout(function(e) {
+                var amount_add = (accounting.unformat(amountCashBox.val(),currency.decimalSeparator));
+                var amountTotal = (accounting.unformat(amountTotalCash.val(),currency.decimalSeparator));
+
+                if (amount_add <=  0) {
+                    instanceWeb.notification.do_warn("Atencion", "El monto no puede ser 0.");
+                    amountCashBox.css('border-color','red');
+                    amountCashBox.focus();
+                    return false;
+                }
+                if (!self.statementConfig.length) {
+                    if (amount_add > amountTotal) {
+                        instanceWeb.notification.do_warn("Atencion", "El valor que quieres retirar supera el saldo disponible en la caja");
+                        amountCashBox.css('border-color','red');
+                        amountCashBox.focus();
+                        return false;
+                    }
+                }
+                if (!self.statementConfig[0].output_negative_amount) {
+                    if (amount_add > amountTotal) {
+                        instanceWeb.notification.do_warn("Atencion", "El valor que quieres retirar supera el saldo disponible en la caja");
+                        amountCashBox.css('border-color','red');
+                        amountCashBox.focus();
+                        return false;
+                    }
+                }
+                amountCashBox.css('border-color','#ccc');
+                amountCashBox.val(accounting.formatNumber(amount_add, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+            });
+            /*Click buttonSave*/
+            buttonCashBox.click(function(e) {
+                var amount = (accounting.unformat(amountCashBox.val(),currency.decimalSeparator));
+                var amountTotal = (accounting.unformat(amountTotalCash.val(),currency.decimalSeparator));
+
+                /* Ref transfer */
+                if (!refCashBox.val()) {
+                    instanceWeb.notification.do_warn("Atencion", "Debes de ingresar un motivo.");
+                    refCashBox.css('border-color','red');
+                    refCashBox.focus();
+                    return false;
+                }
+                refCashBox.css('border-color','#ccc');
+
+                /* ammount transfer*/
+                if (amount <= 0) {
+                    instanceWeb.notification.do_warn("Atencion", "El valor debe ser mayor a cero.");
+                    amountCashBox.css('border-color','red');
+                    amountCashBox.focus();
+                    return false;
+                }
+                if (!self.statementConfig.length) {
+                    if (amount > amountTotal) {
+                        instanceWeb.notification.do_warn("Atencion", "El valor que quieres retirar supera el saldo disponible en la caja");
+                        amountCashBox.css('border-color','red');
+                        amountCashBox.focus();
+                        return false;
+                    }
+                }
+                if (!self.statementConfig[0].output_negative_amount) {
+                    if (amount > amountTotal) {
+                        instanceWeb.notification.do_warn("Atencion", "El valor que quieres retirar supera el saldo disponible en la caja");
+                        amountCashBox.css('border-color','red');
+                        amountCashBox.focus();
+                        return false;
+                    }
+                }
+                amountCashBox.css('border-color','#ccc');
+
+                var input = {
+                    'statementId': self.id,
+                    'ref': !!refCashBox.val() ? refCashBox.val() :'',
+                    'amount': amount,
+                    'type': 'output'
+                }
+
+                /* Save Payments */
+                self.StatementCreateCashBox(input).then(function(resultsInput) {
+                    return resultsInput;
+                }).then(function(resultsInput) {
+                    self.reloadPage();
+                    self.removeModal(e);
+                    if (!resultsInput)
+                        results = false;
+                });
+
+                defer.resolve(results);
+
+            });
+
+            /* Click Cerrar */
+            $('.expired-account-modal').on('hidden.bs.modal', function(e) {
+                results = false;
+                defer.resolve(results);
+                self.removeModal(e);
+            });
+
+            return defer;
+        },
+        /*Create CashBox Input */
+        StatementCreateCashBox: function(values) {
+            var bankStatement = new instanceWeb.Model('account.bank.statement');
+            return bankStatement.call('create_cash_box_input_output',[values], {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+    });
+
+    if (openerp.web && openerp.web.FormView) {
+        openerp.web.FormView.include({
+            load_record: function(record) {
+                this._super.apply(this, arguments);
+
+                if (this.model !== 'account.bank.statement')
+                    return;
+
+                openerp.parentInstanceStatementCashBoxOutput = this;
+
+                if (openerp.widgetInstanceStatementCashBoxOutput) {
+                    openerp.widgetInstanceStatementCashBoxOutput.updateId(record.id);
+                    if (this.$el.find('.button-statement-casbox-output').length !== 0 )
+                        return ;
+                }
+
+                if (this.$el.find('.button-statement-casbox-output').length !== 0 )
+                    return;
+
+                openerp.widgetInstanceStatementCashBoxOutput = new openerp.EiruStatementCashBoxOutput(this);
+                var element =this.$el.find('.oe_form').find('.eiru-statement-utility');
+
+                openerp.widgetInstanceStatementCashBoxOutput.appendTo(element[0]);
+                openerp.widgetInstanceStatementCashBoxOutput.updateId(record.id);
+            }
+        });
+    }
+})();

+ 8 - 0
static/src/xml/eiru_statement_cashbox_input.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+    <t t-name="EiruStatementUtility.CashBoxInput">
+        <button class="button-statement-Cashbox-Input eiru-statement-button oe_button oe_form_button oe_highlight">
+            <span>Poner dinero</span>
+        </button>
+  </t>
+</templates>

+ 8 - 0
static/src/xml/eiru_statement_cashbox_output.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<templates xml:space="preserve">
+    <t t-name="EiruStatementUtility.CashBoxOutput">
+        <button class="button-statement-casbox-output eiru-statement-button oe_button oe_form_button oe_highlight">
+            <span>Sacar dinero</span>
+        </button>
+  </t>
+</templates>

+ 55 - 0
static/src/xml/modal/modal_statement_cashbox.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<template xml:space="preserve">
+    <t t-name="ModalStatementUtility.CashBox">
+        <div class="modal in expired-account-modal" tabindex="-1" role="dialog">
+            <div class="modal-dialog modal-lg" role="document">
+                <div class="modal-content openerp">
+                    <div class="modal-header paymnets-invoice-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>
+                        <h3 class="modal-title" t-foreach="header" t-as="header">
+                            <t t-esc="header_value.title"/>
+                        </h3>
+                    </div>
+                    <!-- Body -->
+                    <div class="modal-body">
+
+                        <div class="row">
+                            <div class="col-xs-12">
+                                <label class="statement-input-labe">Motivo</label>
+                                <div class="statement-input-group">
+                                    <input type="text" class="form-control statement-input-number input-letters ref-cash-box"></input>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="row" t-foreach="statement" t-as="statement">
+                            <div class="col-xs-6 is_output" >
+                                <label class="statement-input-labe">Disponible en caja</label>
+                                <div class="statement-input-group">
+                                    <input type="text" class="form-control statement-input-number amount-total-cash" readonly="readonly" t-attf-value="{{ statement_value.amount }}"></input>
+                                    <div class="statement-input-symbol">
+                                        <span class="input-group-text"><t t-esc="statement_value.symbol"/></span>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="col-xs-6">
+                                <label class="statement-input-labe">Monto</label>
+                                <div class="statement-input-group">
+                                    <input type="text" class="form-control statement-input-number amount-cash-box" value="0"></input>
+                                    <div class="statement-input-symbol">
+                                        <span class="input-group-text"><t t-esc="statement_value.symbol"/></span>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- Pie de Pagina -->
+                    <div class="modal-footer statement-utility-footer">
+                        <button type="button" class="oe_button oe_form_button oe_highlight statement-utility-button button-cash-box">Guardar</button>
+                        <button type="button" class="oe_button oe_form_button oe_link dismmis-modal statement-utility-button" data-dismiss="modal">Salir</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 25 - 15
views/account_bank_statemente_config.xml

@@ -38,25 +38,23 @@
                                 <field name="import_statement_payslip"  style="width: 200px" nolabel="1"/>
                             </group>
                         </page>
+
                         <!-- Transferencia -->
                         <page string="Transferencia de valores">
                             <separator string="Transferencia de cajas"/>
-
                             <div class="openerp oe_form oe_form_field">
                                 <span class="oe_form_text_content">Permite a los usuarios a realizar transferencia de valores para otras cajas.</span>
                             </div>
-
                             <group col="2">
-                                <group style="margin: 0px" string="Cajas permitidas ">
+                                <group style="margin: 0px" string="Cajas permitidas">
                                     <label for="transfer_statement_ids" string="Tipos de caja permitidas" style="width: 200px"></label>
                                     <field name="transfer_statement_ids" widget="many2many_checkboxes" nolabel="1"/>
                                 </group>
-                                <group style="margin: 0px" string="Usuarios permitidos ">
+                                <group style="margin: 0px" string="Usuarios permitidos">
                                     <label for="transfer_user_ids" string="Usuarios permitidos" style="width: 200px"></label>
                                     <field name="transfer_user_ids" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
                                 </group>
                             </group>
-
                             <group col='2'>
                                 <group string="Transferencia sin saldo en caja">
                                     <label for="transfer_negative_amount" string="Permitir transferencia sin saldo" style="width: 200px"></label>
@@ -67,46 +65,58 @@
                                     <field name="delete_transfer_user_ids" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
                                 </group>
                             </group>
-                            
                         </page>
+
                         <!-- Sacar Dinero -->
                         <page string="Sacar dinero">
                             <separator string="Permitir sacar dinero"/>
-
                             <div class="openerp oe_form oe_form_field">
                                 <span class="oe_form_text_content"></span>
                             </div>
-
                             <group col="2">
-                                <group style="margin: 0px">
+                                <group style="margin: 0px" string="Cajas permitidas">
                                     <label for="output_cash_box_statement_ids" string="Tipos de caja permitidas" style="width: 200px"></label>
                                     <field name="output_cash_box_statement_ids" widget="many2many_checkboxes" nolabel="1"/>
                                 </group>
-                                <group style="margin: 0px">
+                                <group style="margin: 0px" string="Usuarios permitidos">
                                     <label for="output_cash_box_user_id" string="Usuarios permitidos" style="width: 200px"></label>
                                     <field name="output_cash_box_user_id" widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
                                 </group>
                             </group>
-
+                            <group col="2">
+                                <group string="Sacar dinero sin saldo en caja">
+                                    <label for="output_negative_amount" string="Permitir sacar dinero" style="width: 200px"></label>
+                                    <field name="output_negative_amount" class="oe_inline" nolabel="1"/>
+                                </group>
+                                <group string="Eliminar Line">
+                                    <label for="delete_output_user_ids" string="Usuarios permitidos" style="width: 200px"></label>
+                                    <field name="delete_output_user_ids" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
+                                </group>
+                            </group>
                         </page>
+
                         <!-- Poner Dinero -->
                         <page string="Poner dinero">
                             <separator string="Permitir poner dinero"/>
-
                             <div class="openerp oe_form oe_form_field">
                                 <span class="oe_form_text_content"></span>
                             </div>
-
                             <group col="2">
-                                <group style="margin: 0px">
+                                <group style="margin: 0px" string="Cajas permitidas">
                                     <label for="input_cash_box_statement_ids" string="Tipos de caja permitidas" style="width: 200px"></label>
                                     <field name="input_cash_box_statement_ids" widget="many2many_checkboxes"  nolabel="1"/>
                                 </group>
-                                <group style="margin: 0px">
+                                <group style="margin: 0px"  string="Usuarios permitidos">
                                     <label for="input_cash_box_user_id" string="Usuarios permitidos" style="width: 200px"></label>
                                     <field name="input_cash_box_user_id" widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
                                 </group>
                             </group>
+                            <group col="2">
+                                <group string="Eliminar Line">
+                                    <label for="delete_input_user_ids" string="Usuarios permitidos" style="width: 200px"></label>
+                                    <field name="delete_input_user_ids" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
+                                </group>
+                            </group>
                         </page>
                     </notebook>
                 </form>

+ 7 - 0
views/template.xml

@@ -3,8 +3,15 @@
         <template id="eiru_account_bank_statement_utility.eiru_assets" name="eiru_account_bank_statement_utility_assets" inherit_id="eiru_assets.assets">
             <xpath expr="." position="inside">
                 <link rel="stylesheet" href="/eiru_account_bank_statement_utility/static/src/css/style.css"/>
+                <!-- transferencia -->
                 <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/eiru_statement_transfer.js"/>
                 <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/eiru_statement_transfer_deleted.js"/>
+                <!-- Poner dinero  -->
+                <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/eiru_statement_cashbox_input.js"/>
+
+                <!-- Sacar dinero  -->
+                <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/eiru_statement_cashbox_output.js"/>
+
                 <!-- <script type="text/javascript" src="/eiru_account_bank_statement_utility/static/src/js/import_statement.js"/> -->
             </xpath>
         </template>