Browse Source

[FIX] Cierre de caja y apertura con saldo anterior

adrielso 6 years ago
parent
commit
61ba878529

+ 7 - 1
models/account_bank_statement_config.py

@@ -9,7 +9,7 @@ class accountBankStatementConfig(models.Model):
     ## Forma de Importar Pagso en caja Ventas/compras/RRHH
     import_statement_payments = fields.Selection([('automatic_import', 'Automático'),('manual_import','Manual')],'Importar pagos en caja',default='automatic_import',help='Tipo de importar los pago en caja', required=True)
     import_statement_payslip = fields.Selection([('automatic_import', 'Automático'),('manual_import','Manual')],'Importar pagos de RRHH en caja',default='automatic_import',help='Tipo de importar los pago en caja', required=True)
-
+    
     ## TRANSFERENCIA
     transfer_user_ids = fields.Many2many('res.users', 'statement_config_transfer_user', 'account_bank_statement_config_id','res_users_id', string='statement_transfer_user')
     transfer_statement_ids = fields.Many2many('account.bank.statement.type', 'statement_config_transfer_statement', 'account_bank_statement_config_id', 'account_bank_statement_type_id', string="statement_config_transfer_statement")
@@ -26,5 +26,11 @@ class accountBankStatementConfig(models.Model):
     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')
+
     ## Abrir Cajas
     statement_open_config = fields.Boolean('statement_open_config', default=False, help="Permitir abrir mas de una caja(por usuario, por diario, por tipo de caja)")
+
+    ## statement confirm
+    statement_confirm_user =fields.Many2many('res.users', 'statement_config_confirm_user', 'account_bank_statement_config_id', 'res_users_id', string='User allowed to close the box')
+    statement_confirm_transfer_user = fields.Many2many('res.users', 'statement_config_confirm_transfer_user', 'account_bank_statement_config_id', 'res_users_id', string='User allowed to transfer')
+    statement_confirm_balance = fields.Many2many('res.users', 'statement_config_confirm_balance', 'account_bank_statement_config_id', 'res_users_id', string='usuario permitido para ajuste de cierre')

+ 39 - 0
models/account_bank_statement_utility.py

@@ -620,8 +620,40 @@ class AccountBankStatementUtility(models.Model):
     @api.model
     def account_bank_statement_open_cashbox(self, id):
         statement = self._get_statement_transfer(id)
+
+        cashBoxConfirm = self._get_cashbox_statement_confirm(statement)
+        for casBox in cashBoxConfirm:
+            name = "SALDO ANTERIOR /"+str(casBox.statement_id.name)
+            lineTransfer = self._create_statement_line_transfer(statement, name, abs(casBox.amount_next_open), '')
+            if (not lineTransfer):
+                return {
+                    'state': False,
+                    'message': "Error al registrar el saldo anterior."
+                }
+
+            confirmCasBox = self.env['cashbox.statement.confirm'].browse(casBox.id)
+            values = {
+                        'statement_open': statement.id,
+                         'state_avaliable': False
+                    }
+
+            confirmCasBox = self._writer_cashbox_statement_confirm(confirmCasBox,values)
+
+
         return statement.button_open()
 
+    '''
+        get cashbox.statement.confirm
+    '''
+    def _get_cashbox_statement_confirm(self, statement):
+        return self.env['cashbox.statement.confirm'].search([('statement_id.type_statement.id', '=', statement.type_statement.id),('user_statement', '=', statement.user_id.id),('journal_id', '=', statement.journal_id.id), ('state_avaliable', '=', True)])
+
+    '''
+        writer casbox statement confirm
+    '''
+    def _writer_cashbox_statement_confirm(self, casbox, values):
+        return casbox.write(values)
+
     '''
         method Open CashBox
     '''
@@ -673,6 +705,8 @@ class AccountBankStatementUtility(models.Model):
     def account_bank_statement_confirm(self, values):
         ## Date Server
         date_server = self.get_server_datetime()
+        ## User
+        user = self.env.user
         ## Statement
         bankStatement = self._get_statement_transfer(values['statementId'])
         if (not bankStatement):
@@ -695,6 +729,7 @@ class AccountBankStatementUtility(models.Model):
             lineBalance = self._create_statement_line_transfer(bankStatement, name, amount, values['refBalance'])
 
         ## TRANSFERENCIA
+        cash_box_transfer = []
         if (values['transfer']):
             statementTransfer = self._get_statement_transfer(values['statementTransfer'])
             if (not statementTransfer):
@@ -743,8 +778,10 @@ class AccountBankStatementUtility(models.Model):
         cashboxConfirm = {
             'name': "CIERRE DE CAJA /"+str(bankStatement.name),
             'date': date_server,
+            'ref': values['refBalance'],
             'statement_id': bankStatement.id,
             'user_statement': bankStatement.user_id.id,
+            'user_confirm': user.id,
             'journal_id' : bankStatement.journal_id.id,
             'amount_statement': amountStatement,
             'amount_real': values['amountReal'],
@@ -752,6 +789,8 @@ class AccountBankStatementUtility(models.Model):
             'amount_difference': abs(lineBalance.amount) if (lineBalance) else 0.0,
             'line_next_open': lineNextOpen.id if(lineNextOpen) else '',
             'amount_next_open': abs(lineNextOpen.amount) if(lineNextOpen) else 0.0,
+            'state_avaliable': True if(lineNextOpen) else False,
+            'casbox_transfer_id': cash_box_transfer.id if (cash_box_transfer) else ''
         }
 
         statementConfirm = self._create_cashbox_statement_confirm(cashboxConfirm)

+ 14 - 3
models/cashbox_statement_confirm.py

@@ -10,11 +10,15 @@ class cashbox_statement_confirm(models.Model):
     date = fields.Date()
     active = fields.Boolean('Active', default=True)
     message_confirm = fields.Text('Message Confirm')
-    ### Statement - Line - user
-    statement_id = fields.Many2one('account.bank.statement', 'Bank statement ')
+    ### Statement confirm - open
+    statement_id = fields.Many2one('account.bank.statement', 'Bank Statement Confirm')
+    statement_open = fields.Many2one('account.bank.statement', 'Bank Statement Open')
+    ## User statement - User Confirm
     user_statement = fields.Many2one('res.users', 'Res user')
+    user_confirm = fields.Many2one('res.users', 'Res user')
+    ## Journal
     journal_id = fields.Many2one('account.journal', 'Journal')
-    ##
+    ## Line
     line_difference = fields.Many2one('account.bank.statement.line', 'Bank statement line difference')
     line_next_open = fields.Many2one('account.bank.statement.line', 'Bank statement line next open statement')
     ### Amount
@@ -22,6 +26,9 @@ class cashbox_statement_confirm(models.Model):
     amount_real = fields.Float('Amount Real', digits_compute=dp.get_precision('Account'), required=True)
     amount_difference = fields.Float('Amount Difference', digits_compute=dp.get_precision('Account'), required=True)
     amount_next_open =  fields.Float('Amount Next open statement', digits_compute=dp.get_precision('Account'), required=True)
+    ## estado del regsitro
+    state_avaliable = fields.Boolean('Avaliable', default=True, help="True : disponible, False : Utilizado")
+    casbox_transfer_id =fields.Many2one('cash.box.transfer', 'cashBox transfer')
 
     '''
         @fields statement_id        = Id de la caja que se esta cerrando.
@@ -33,4 +40,8 @@ class cashbox_statement_confirm(models.Model):
         @fields amount_real         = Monto real del cierre de la caja.
         @fields amount_difference   = Monto de la diferencia del cierre.
         @fields amount_next_open    = Monto de la próxima apertura de caja.
+        @fields user_confirm        = Usuario que cerro la caja
+        @fields statement_open      = Id de la caja que utilize el saldo disponible para proxima apertura
+        @fields state_avaliable     = 'True': disponible, 'False': Utilizado
+        @fields casbox_transfer_id  = id transferencia
     '''

+ 1 - 0
security/ir.model.access.csv

@@ -4,3 +4,4 @@ access_bank_statement_type,account.bank.statement.type,model_account_bank_statem
 access_cash_box_transfer,cash.box.transfer,model_cash_box_transfer,account.group_account_user,1,1,1,1
 access_cash_box_in,cash.box.in,model_cash_box_in,account.group_account_user,1,1,1,1
 access_cash_box_out,cash.box.out,model_cash_box_out,account.group_account_user,1,1,1,1
+access_cashbox_statement_confirm,cashbox.statement.confirm,model_cashbox_statement_confirm,account.group_account_user,1,1,1,1

+ 11 - 6
static/src/js/eiru_statement_confirm.js

@@ -127,9 +127,11 @@
             amountSymbol.text(currency.symbol);
             amountCashbox.val(accounting.formatNumber(self.bankStatement[0].amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
             amountReal.val(accounting.formatNumber(self.bankStatement[0].amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+            amountOpen.val(accounting.formatNumber(self.bankStatement[0].amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+            // amountTransfer.val(accounting.formatNumber(self.bankStatement[0].amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
             amountDiffer.val('0');
             amountTransfer.val('0');
-            amountOpen.val(accounting.formatNumber(self.bankStatement[0].amount, currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+            amountOpen
             refBalance.val('Balance de cierre correcto.')
 
             $('.expired-account-modal').find('.is-not-transfer').css('display','none');
@@ -153,7 +155,7 @@
                 amountReal.val(accounting.formatNumber(realAmount,0, currency.thousandsSeparator, currency.decimalSeparator));
                 amountDiffer.val(accounting.formatNumber(differenceAmount,0, currency.thousandsSeparator, currency.decimalSeparator));
                 amountOpen.val(accounting.formatNumber(realAmount,0, currency.thousandsSeparator, currency.decimalSeparator));
-                amountTransfer.val(0);
+                // amountTransfer.val(accounting.formatNumber(realAmount,0, currency.thousandsSeparator, currency.decimalSeparator));
                 amountReal.css('border-color','#ccc');
 
                 amountDiffer.css('color','#555');
@@ -186,7 +188,7 @@
                 amountDiffer.val(accounting.formatNumber(differenceAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
                 amountReal.val(accounting.formatNumber( realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
                 amountOpen.val(accounting.formatNumber( realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
-                amountTransfer.val(0);
+                // amountTransfer.val(accounting.formatNumber( realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
             });
             /**
             * [Transferencia]
@@ -194,24 +196,27 @@
             transferCasbox.click(function(e){
                 var realAmount = accounting.unformat(amountReal.val(),currency.decimalSeparator);
                 amountOpen.val(accounting.formatNumber(realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+                amountTransfer.val('0');
 
                 transferSelected = e.target;
                 selectedTrnasfer = false
                 cashboxTransfer.val('');
-                amountTransfer.val('0');
+                // amountTransfer.val('0');
                 refTransfer.val("");
                 $('.expired-account-modal').find('.is-transfer-confirm').css('display','none');
 
                 if (this.checked) {
                     $('.expired-account-modal').find('.is-transfer-confirm').css('display','flex');
                     selectedTrnasfer = true;
+                    amountTransfer.val(accounting.formatNumber(realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+                    amountOpen.val('0');
                 }
             })
 
             cashboxTransfer.change(function(e) {
                 var realAmount = accounting.unformat(amountReal.val(),currency.decimalSeparator);
-                amountOpen.val(accounting.formatNumber(realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
-                amountTransfer.val('0')
+                // amountOpen.val(accounting.formatNumber(realAmount,currency.decimalPlaces, currency.thousandsSeparator, currency.decimalSeparator));
+                // amountTransfer.val('0')
 
             })
             /* amount transfer Keyup */

+ 30 - 4
views/account_bank_statemente_config.xml

@@ -124,19 +124,45 @@
                         </page>
 
                         <!-- open -confirm statement -->
-                        <page string="Abrir &amp; cerrar caja">
-                            <separator string="forma de abrir y cerrar caja "/>
+                        <page string="Apertura &amp; Cierre caja">
+                            <separator string="Apertura de caja"/>
 
                             <div class="openerp oe_form oe_form_field">
-                                <span class="oe_form_text_content"></span>
+                                <span class="oe_form_text_content">
+                                    Permite configurar si el usuario podrá o no tener mas de una caja abierta.
+                                </span>
                             </div>
 
                             <group style="margin: 0px">
                                 <label for="statement_open_config" string="Permitir abrir mas de una caja" style="width: 200px"></label>
                                 <field name="statement_open_config"  style="width: 200px" nolabel="1" />
                             </group>
-                        </page>
 
+                            <separator string="Cierre de caja"/>
+
+                            <div class="openerp oe_form oe_form_field">
+                                <span class="oe_form_text_content">
+                                    Permite configurar si el usuario  podrá hacer el cierre de caja, la transferencia a caja General o el ajuste de saldo.
+                                </span>
+                            </div>
+
+                            <group col="2">
+                                <group  string="Cerrar caja">
+                                    <label for="statement_confirm_user" string="Usuarios permitidos" style="width: 200px"></label>
+                                    <field name="statement_confirm_user" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
+                                </group>
+                                <group string="Ajuste de saldo de cierre">
+                                    <label for="statement_confirm_balance" string="Usuarios permitidos" style="width: 200px"></label>
+                                    <field name="statement_confirm_balance" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
+                                </group>
+                            </group>
+                            <group col="2">
+                                <group  string ="Transferencia a caja general">
+                                    <label for="statement_confirm_transfer_user" string="Usuarios permitidos" style="width: 200px"></label>
+                                    <field name="statement_confirm_transfer_user" class="oe_inline"  widget="many2many_tags" options="{'no_create': True}" nolabel="1"/>
+                                </group>
+                            </group>
+                        </page>
                     </notebook>
                 </form>
             </field>