Selaa lähdekoodia

[ADD] Guardar las transferencia

adrielso 6 vuotta sitten
vanhempi
commit
1676ab6366

+ 151 - 2
models/account_bank_statement_utility.py

@@ -9,7 +9,12 @@ class AccountBankStatementUtility(models.Model):
     '''
     @api.model
     def get_account_bank_statement_utility(self, id):
-        print('\n\nget_account_bank_statement_utility\n\n')
+        '''
+            Get Account Bank Statement
+            :param : id: id account bank statement,
+            :return : Object Account bank statement + Amount(account Bank statement line)
+        '''
+        decimal_precision = self.env['decimal.precision'].precision_get('Account')
         bankStatement = self.env['account.bank.statement'].browse(id)
 
         if (not bankStatement):
@@ -17,9 +22,14 @@ class AccountBankStatementUtility(models.Model):
 
         accountStatement = []
         amount = 0.0
+
         for line in bankStatement.line_ids:
             amount += line.amount
 
+        if (bankStatement.balance_start > 0):
+            amount += bankStatement.balance_start
+        # import web_pdb; web_pdb.set_trace()
+
         accountStatement.append({
             'id': bankStatement.id,
             'name': bankStatement.name,
@@ -30,7 +40,146 @@ class AccountBankStatementUtility(models.Model):
             'userName': bankStatement.user_id.name,
             'posSessionName': bankStatement.pos_session_id.name,
             'typeStatement': bankStatement.type_statement,
-            'amount': amount
+            'state': bankStatement.state,
+            'amount': amount,
+            'currencystatement': {
+                'id': bankStatement.currency.id,
+                'symbol': bankStatement.currency.symbol,
+                'rate': bankStatement.currency.rate,
+                'thousandsSeparator': bankStatement.currency.thousands_separator,
+                'decimalSeparator': bankStatement.currency.decimal_separator,
+                'decimalPlaces': bankStatement.currency.decimal_places,
+                'position': bankStatement.currency.position,
+            },
+            'currencyAmount': [{
+                'id': currency.id,
+                'symbol': currency.symbol,
+                'rate': currency.rate,
+                'thousandsSeparator': currency.thousands_separator,
+                'decimalSeparator': currency.decimal_separator,
+                'decimalPlaces': currency.decimal_places,
+                'position': currency.position,
+                'base': currency.base,
+                'accuracy': currency.accuracy,
+                'rounding': currency.rounding,
+                'amountCurency': round((amount * (currency.rate / bankStatement.currency.rate)), decimal_precision)
+            } for currency in self.env['res.currency'].search([('active', '=', True)])]
         })
 
         return accountStatement
+
+    @api.model
+    def get_account_journal_utility(self,id):
+        bankStatement = self.env['account.bank.statement'].browse(id)
+        if (not bankStatement):
+            return False
+
+        domain = [('active', '=', True), ('type', 'in', ['bank', 'cash'])];
+
+        if (bankStatement.type_statement == 'normal'):
+            domain.append(('id', 'in', [bankStatement.journal_id.id]));
+
+        accountJournal = self.env['account.journal'].search(domain)
+        journalUtility = []
+        for journal in accountJournal:
+
+            domainStatment = [('id','!=',bankStatement.id),('journal_id','in',[journal.id]),('date','=',bankStatement.date),('period_id','=',bankStatement.period_id.id)]
+
+            if (journal.type == 'cash'):
+                domainStatment.append(('state','=', 'open'))
+
+            if (journal.type == 'bank'):
+                domainStatment.append(('state','!=','confirm'))
+
+            statementJournal = []
+
+            statement = self.env['account.bank.statement'].search(domainStatment)
+
+            for statementOpen in statement:
+                statementJournal.append({
+                        'id': statementOpen.id,
+                        'journalId': statementOpen.journal_id.id,
+                        'date': statementOpen.date,
+                        'typeStatement': statementOpen.type_statement,
+                        'userId': statementOpen.user_id.id,
+                        'userName': statementOpen.user_id.name,
+                        'name': statementOpen.name,
+                        'state': statementOpen.state,
+                        'statementname': statementOpen.name+" / "+statementOpen.user_id.name
+                })
+
+            journalUtility.append({
+                'id': journal.id,
+                'name': journal.name,
+                'code': journal.code,
+                'type': journal.type,
+                'currencyId': journal.currency.id,
+                'statementJournal': statementJournal
+            })
+
+        return journalUtility
+
+    '''       _____                     __
+             |_   _| __ __ _ _ __  ___ / _| ___ _ __ ___
+               | || '__/ _` | '_ \/ __| |_ / _ \ '__/ __|
+               | || | | (_| | | | \__ \  _|  __/ |  \__ \
+               |_||_|  \__,_|_| |_|___/_|  \___|_|  |___/
+    '''
+    '''
+        Get Account Bank Statement
+    '''
+    def _get_statement_transfer(self,id):
+        return self.env['account.bank.statement'].browse(id)
+
+    '''
+        Get Account Journal
+    '''
+    def _get_journal_transfer(self, id):
+        return self.env['account.journal'].browse(id)
+
+    '''
+        Create Line statement.
+    '''
+    def _create_statement_line_transfer(self, statement, name, amount, ref):
+        statementLine = {
+            'statement_id': statement.id,
+            'name': name,
+            'amount': amount ,
+            'ref': ref,
+            'account_id': statement.journal_id.internal_account_id.id,
+            'journal_id': statement.journal_id.id
+        }
+
+        line = self.env['account.bank.statement.line'].create(statementLine)
+        return line
+
+    '''
+        Create Line statement Transfer
+    '''
+    @api.model
+    def statement_complet_transfers(self, values):
+        statementOrigin = self._get_statement_transfer(values['statementOriginId'])
+        if (not statementOrigin):
+            return False
+
+        statementDestiny = self._get_statement_transfer(values['statementDestinyId'])
+        if (not statementDestiny):
+            return False
+
+        accountJournal = self._get_journal_transfer(values['journalID'])
+        if (not accountJournal):
+            return False
+
+        # output
+        name = "TRANSFERENCIA/"+str(statementDestiny.name)
+        statementOutput = self._create_statement_line_transfer(statementOrigin, name,(-values['amountTransfer']), values['refTransfer'])
+        if (not statementOutput):
+            return False
+
+        # input
+        name = "TRANSFERENCIA/"+str(statementOrigin.name)
+        statementOutput = self._create_statement_line_transfer(statementDestiny, name, abs(values['amountTransfer']), values['refTransfer'])
+        if (not statementOutput):
+            return False
+
+        return True

+ 119 - 26
static/src/js/eiru_statement_transfer.js

@@ -4,13 +4,15 @@
     openerp.parentInstanceStatementTransfer = {};
     var QWeb = openerp.web.qweb;
     var instanceWeb = openerp.web;
-    // StatementTransfer
+
     openerp.EiruStatementTransfer = openerp.Widget.extend({
         template: 'EiruStatementUtility.Transfer',
         id: undefined,
         buttons: undefined,
         bankStatement: [],
-        accountStatement: [],
+        accountJournal :[],
+        statementOpen: [],
+
         /* init */
         init: function(parent) {
             this._super(parent);
@@ -58,48 +60,143 @@
                 return bankStatement;
             }).then(function(bankStatement){
                 self.bankStatement = bankStatement;
-                return self.fetchAccountBankStatement();
-            }).then(function(accountStatement){
-                self.accountStatement = accountStatement;
+                return self.fetchAccountJournal(self.id);
+            }).then(function(accountJournal){
+                self.accountJournal = accountJournal;
                 return self.showModalTransfer();
             });
-
         },
         /* Account bank Statement */
         fetchBankStatement: function(id) {
-            var invoiceMoveLine = new instanceWeb.Model('account.bank.statement');
-            return invoiceMoveLine.call('get_account_bank_statement_utility',[id], {
+            var bankStatement = new instanceWeb.Model('account.bank.statement');
+            return bankStatement.call('get_account_bank_statement_utility',[id], {
                 context: new instanceWeb.CompoundContext()
             });
         },
-
-        fetchAccountBankStatement() {
+        /* Account Journal*/
+        fetchAccountJournal: function(id) {
+            var accountJournal = new instanceWeb.Model('account.bank.statement');
+            return accountJournal.call('get_account_journal_utility',[id], {
+                context: new instanceWeb.CompoundContext()
+            });
+        },
+        /* Get statement Journal */
+        getStatementJournal(id) {
             var self = this;
-            var statement = self.bankStatement[0];
-
-            if (!statement)
-                return false;
-
-            var fields = ['id','journal_id','date','period_id','type_statement','user_id', 'name'];
-            var domain = [['id', '!=', statement.id],['journal_id', '=', statement.journalId],['date', '=', statement.date],['period_id', '=', statement.periodId]];
-            var statementBank = new instanceWeb.Model('account.bank.statement');
-            return statementBank.query(fields).filter(domain).all();
+            var journal = _.filter(self.accountJournal, function(item){
+                return  item.id === id ;
+            });
+            return _.flatten(_.map(journal, function(map){
+                return map.statementJournal;
+            }));
+        },
+        /* Save Statement transfer */
+        statementCompletTransfers: function(values) {
+            var bankStatementTransfer = new instanceWeb.Model('account.bank.statement');
+            return bankStatementTransfer.call('statement_complet_transfers',[values], {
+                context: new instanceWeb.CompoundContext()
+            });
         },
-
         /*Modal  Transfer */
         showModalTransfer: function() {
             var self = this;
             var defer =$.Deferred();
             var results = true;
+            var accountJournal =  self.accountJournal;
+
+            accountJournal.unshift({'name': '', 'id': ''});
 
             var modal = QWeb.render('ModalStatementUtility.Transfer',{
-                'journal': [],
-                'statement': self.accountStatement,
+                'journal': accountJournal
             });
 
             $('.openerp_webclient_container').after(modal);
             $('.expired-account-modal').modal();
 
+
+            var statementAmount = $('.expired-account-modal').find('.statement-amount')             // Monto Disponible.
+            var selectedJournal = $('.expired-account-modal').find('.selected-Journal')             // Journal.
+            var statementOpen = $('.expired-account-modal').find('.statement-open')                 // Caja a Transferir.
+            var amountTransfer = $('.expired-account-modal').find('.amount-transfer')               // Monto a Transferir.
+            var amountTransferSymbol = $('.expired-account-modal').find('.amount-transfer-symbol')  // Symbolo del monto a Transferir.
+            var refTransfer = $('.expired-account-modal').find('.ref-transfer')                     // Referencia de la Transferencia.
+            /* Button */
+            var buttonSave = $('.expired-account-modal').find('.button-save')
+
+            selectedJournal.change(function(e) {
+                statementOpen.empty();
+
+                var statementJournal = self.getStatementJournal(parseInt(selectedJournal.val()));
+                if (!!statementJournal.length)
+                    statementOpen.append('<option value=""></option>');
+
+                _.each(statementJournal, function(item) {
+                    statementOpen.append('<option value="' + item.id + '">' + item.statementname + '</option>');
+                })
+
+            });
+
+            statementAmount.val(self.bankStatement[0].amount)
+            /*Click buttonSave*/
+            buttonSave.click(function(e){
+                /* Journal */
+                if (!selectedJournal.val()) {
+                    instanceWeb.notification.do_warn("Atencion", "Debes seleccionar un tipo de pago para continuar.");
+                    selectedJournal.css('border-color','red');
+                    selectedJournal.focus();
+                    return false;
+                }
+                selectedJournal.css('border-color','#ccc');
+                /* Statement Open */
+                if (!statementOpen.val()) {
+                    instanceWeb.notification.do_warn("Atencion", "Debes seleccionar la caja donde vas a transferir.");
+                    statementOpen.css('border-color','red');
+                    statementOpen.focus();
+                    return false;
+                }
+                statementOpen.css('border-color','#ccc');
+
+                /* ammount transfer*/
+                // if (!amountTransfer.val()) {
+                //     instanceWeb.notification.do_warn("Atencion", "Tienes que seleccionar un método de pago para continuar.");
+                //     amountTransfer.css('border-color','red');
+                //     amountTransfer.focus();
+                //     return false;
+                // }
+                // amountTransfer.css('border-color','#ccc');
+
+                /**Ref transfer*/
+                if (!refTransfer.val()) {
+                    instanceWeb.notification.do_warn("Atencion", "Debes de ingresar un motivo para la transferencia.");
+                    refTransfer.css('border-color','red');
+                    refTransfer.focus();
+                    return false;
+                }
+                refTransfer.css('border-color','#ccc');
+
+                statementTransfer = {
+                    'statementOriginId': self.bankStatement[0].id,
+                    'statementDestinyId': parseInt(statementOpen.val()),
+                    'amountTransfer': 100000,
+                    'refTransfer': refTransfer.val().trim(),
+                    'journalID': parseInt(selectedJournal.val())
+                }
+
+                /* Save Payments */
+                $('.expired-account-modal').find('.widget-content.widget-loading-payments').css('display','flex');
+                self.statementCompletTransfers(statementTransfer).then(function(resultsTransfer) {
+                    return resultsTransfer;
+                }).then(function(resultsTransfer) {
+                    self.reloadPage();
+                    // $('.expired-account-modal').find('.widget-content.widget-loading-payments').css('display','none');
+                    self.removeModal(e);
+                    if (!resultsTransfer)
+                        results = false;
+                });
+
+                defer.resolve(results);
+
+            });
             /* Click Cerrar */
             $('.expired-account-modal').on('hidden.bs.modal', function(e) {
                 results = false;
@@ -107,10 +204,6 @@
                 self.removeModal(e);
             });
 
-            var statementAmount = $('.expired-account-modal').find('.statement-amount')
-
-
-            statementAmount.val(self.bankStatement[0].amount)
             return defer;
         },
     });

+ 6 - 11
static/src/xml/modal/modal_statement_transfer.xml

@@ -50,7 +50,7 @@
                             <div class="col-xs-6">
                                 <label class="statement-input-labe">Método de pago: </label>
                                 <div class="statement-input-group">
-                                    <select class="statement-input-number input-all">
+                                    <select class="statement-input-number selected-Journal">
                                         <t t-foreach="journal" t-as="journal">
                                             <option t-attf-value="{{ journal_value.id }}" >
                                                 <t t-esc="journal_value.name"/>
@@ -65,20 +65,15 @@
                             <div class="col-xs-6">
                                 <label class="statement-input-labe">Caja a Transferir: </label>
                                 <div class="statement-input-group">
-                                    <select class="statement-input-number input-all">
-                                        <t t-foreach="statement" t-as="statement">
-                                            <option t-attf-value="{{ statement_value.id }}" >
-                                                <t t-esc="statement_value.name"/>
-                                            </option>
-                                        </t>
+                                    <select class="statement-input-number statement-open">
                                     </select>
                                 </div>
                             </div>
                             <div class="col-xs-6">
                                 <label class="statement-input-labe">Monto a transferir</label>
                                 <div class="statement-input-group">
-                                    <input type="text" class="form-control statement-input-number" value="0"></input>
-                                    <div class="statement-input-symbol">
+                                    <input type="text" class="form-control statement-input-number amount-transfer" value="0"></input>
+                                    <div class="statement-input-symbol amount-transfer-symbol">
                                         <span class="input-group-text"></span>
                                     </div>
                                 </div>
@@ -89,7 +84,7 @@
                             <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"></input>
+                                    <input type="text" class="form-control statement-input-number input-letters ref-transfer"></input>
                                 </div>
                             </div>
                         </div>
@@ -97,7 +92,7 @@
                     </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">Guardar</button>
+                        <button type="button" class="oe_button oe_form_button oe_highlight statement-utility-button button-save">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>