Просмотр исходного кода

[FIX] Validations account Interest

adrielso 6 лет назад
Родитель
Сommit
52c104fb51

+ 0 - 1
models/__init__.py

@@ -2,5 +2,4 @@
 
 import account_interest
 import account_interest_config
-import res_partner_interest
 import eiru_account_interest

+ 47 - 0
models/account_interest.py

@@ -2,6 +2,7 @@
 from openerp import models, fields, tools, api
 import openerp.addons.decimal_precision as dp
 from datetime import datetime
+from openerp.exceptions import ValidationError
 
 class AccountInterest(models.Model):
     _name = 'account.interest'
@@ -29,6 +30,31 @@ class AccountInterest(models.Model):
         interest.write({'name':("INTEREST/%06d" % (interest.id))})
         return interest
 
+    '''
+        Unlink
+    '''
+    @api.multi
+    def unlink(self):
+        interestLine = self.env['account.interest.line'].search([('interest_id.id', '=', self.id)])
+
+        invoice_ids = map(lambda x: x.invoice.id, interestLine)
+        moves_ids = map(lambda x: x.move_line_id.id, interestLine)
+
+        invoiceNumber = ""
+        invoice = self.env['account.invoice'].search([('id', 'in', invoice_ids)])
+        if (invoice):
+            for invoiceN in invoice:
+                invoiceNumber += "%s, " % (invoiceN.number)
+
+            raise ValidationError('Existe relacion de la lineas de interes con las facturas (%s)' % (invoiceNumber))
+            return False
+
+        moveLine = self.env['account.move.line'].search([('id', 'in', moves_ids)])
+        for lineMove in moveLine:
+            lineMove.write({'date_interest': lineMove.date_maturity})
+
+        return super(AccountInterest, self).unlink()
+
 '''
     Invoice
 '''
@@ -38,6 +64,26 @@ class accountInvoiceInterest(models.Model):
     interest_ids = fields.One2many('account.interest', 'invoice_id', string=' Account Interest')
     is_interest = fields.Boolean('Factura de interés', default=False, help="Indica si esta factura fue generado por un interés.")
 
+    '''
+        Unlink Invoice
+    '''
+    @api.multi
+    def unlink(self):
+        interestLine = self.env['account.interest.line'].search([('invoice.id', '=', self.id)])
+        for line in interestLine:
+            moveLine = self.env['account.move.line'].browse(line.move_line_id.id)
+
+            if (moveLine):
+                moveLine.write({'date_interest': moveLine.date_maturity})
+
+            line.write({
+                'state': 'open',
+                'reference': ''
+            })
+
+        return super(accountInvoiceInterest, self).unlink()
+
+
 '''
     partner
 '''
@@ -62,6 +108,7 @@ class AccountInterestLine(models.Model):
     state = fields.Selection([('cancel','Cancelado'),('open','Abierto'),('invoiced','Facturado')],'Estado del pago', default="open")
     amount_dicount = fields.Float('amount disconut', digits_compute=dp.get_precision('Account'), help="Monto del descuento")
 
+
 '''
     Move Line
 '''

+ 40 - 6
models/eiru_account_interest.py

@@ -8,6 +8,39 @@ from datetime import datetime,timedelta
 import logging
 _logger = logging.getLogger(__name__)
 
+class ResPartnerInterest(models.Model):
+    _inherit = 'res.partner'
+
+    @api.model
+    def eiru_account_interest_verify_partner(self, id):
+        partner = self.env['res.partner'].browse(id)
+        partnerIDS = []
+
+        if (partner.is_company):
+            partnerIDS= map(lambda x: x.id, partner.child_ids)
+
+        partnerIDS.append(partner.id)
+
+        interest = self. env['account.interest']
+        interest.get_account_invoice_interest(None,partnerIDS)
+
+        return {
+            'state': True,
+            'message': "Verificación de interés terminado",
+        }
+
+class AccountInvoiceInterest(models.Model):
+    _inherit = 'account.invoice'
+
+    @api.model
+    def eiru_account_interest_verify_invoice(self, id):
+        interest = self. env['account.interest']
+        interest.get_account_invoice_interest(id,None)
+
+        return {
+            'state': True,
+            'message': "Verificación de interés terminado",
+        }
 
 class EiruAccountInterest(models.Model):
     _inherit = 'account.interest'
@@ -73,9 +106,10 @@ class EiruAccountInterest(models.Model):
         if (invoice):
             domain.append(('id', '=', invoice))
         if (partner):
-            domain.append(('partner_id.id', '=', partner))
+            domain.append(('partner_id.id', 'in', partner))
 
         accountInvoice = self.env['account.invoice'].search(domain)
+
         for invoice in accountInvoice:
             self.get_move_line_in_invoice(invoice.id)
 
@@ -90,7 +124,7 @@ class EiruAccountInterest(models.Model):
 
         dateServer = self._convert_str_to_datetime(self.get_date())
 
-        domain = [('state','!=','draft'), ('credit','<=', 0), ('partner_id','=',accountInvoice.partner_id.id),('invoice','=',accountInvoice.id)]
+        domain = [('state','!=','draft'), ('credit','<=', 0),('invoice','=',accountInvoice.id)]
         for line in self.env['account.move.line'].search(domain):
             expiredDays = dateServer - self._convert_str_to_datetime(line.date_maturity)
             if (line.date_interest):
@@ -118,7 +152,7 @@ class EiruAccountInterest(models.Model):
         _logger.info('Verify account interest')
         accountInvoice = self.env['account.invoice'].browse(invoiceId)
 
-        domain = [('invoice_id', '=', accountInvoice.id),('customer_id.id', '=', accountInvoice.partner_id.id)]
+        domain = [('invoice_id', '=', accountInvoice.id)]
         accountInterest = self.env['account.interest'].search(domain)
 
         dateServer = self.get_date()
@@ -126,7 +160,7 @@ class EiruAccountInterest(models.Model):
         if (not accountInterest):
             accountInterest = self.env['account.interest'].create({
                 'invoice_id': accountInvoice.id,
-                'customer_id': accountInvoice.partner_id.id,
+                'customer_id': accountInvoice.commercial_partner_id.id if(accountInvoice.commercial_partner_id) else accountInvoice.partner_id.id,
                 'date': dateServer,
                 'currency_id': accountInvoice.currency_id.id,
                 'reference': accountInvoice.number,
@@ -221,7 +255,6 @@ class EiruAccountInterest(models.Model):
             'invoice_line': invoice_line,
             'origin': '%s/%s' % (accountInterest.name, accountInterest.reference),
             'is_interest': True
-
         }
 
         ''' Create / open /invoice '''
@@ -238,7 +271,8 @@ class EiruAccountInterest(models.Model):
                 accountInterestLine.write({
                     'invoice': accountInvoice.id,
                     'reference':  accountInvoice.number,
-                    'state': 'invoiced'
+                    'state': 'invoiced',
+                    'amount_dicount': round(line['discount'],decimal_precision)
                 })
 
         return {

+ 0 - 10
models/res_partner_interest.py

@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-from openerp import models, fields, tools, api, _
-
-class ResPartnerInterest(models.Model):
-    _inherit = 'res.partner'
-
-    @api.model
-    def eiru_account_interest_verify(self, id):
-        interest = self. env['account.interest']
-        interest.get_account_invoice_interest(None,id)

+ 0 - 93
static/src/js/verify_interest.js

@@ -1,93 +0,0 @@
-(function() {
-
-    openerp.widgetInstanceInterest = null;
-    openerp.parentInstanceInterest = {};
-    var QWeb = openerp.web.qweb;
-    var instanceWeb = openerp.web;
-    openerp.BankPaymentsInterest = openerp.Widget.extend({
-        template: 'verify.Interest',
-        id: undefined,
-        buttons: undefined,
-        bankPayments: [],
-        /* 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');
-            });
-        },
-        /* Check state*/
-        checkState: function(id, state) {
-            var self = this;
-            self.id = id;
-        },
-        /* Reload Page*/
-        reloadPage: function() {
-            openerp.parentInstanceInterest.reload();
-        },
-        // /* Método inicial  */
-        fetchInitial: function() {
-            var self = this;
-            self.fetchBankPaymentsJournal(self.id).then(function(bankPayments) {
-                return bankPayments;
-            }).then(function(bankPayments) {
-                self.bankPayments = bankPayments;
-                return self.reloadPage();
-            });
-        },
-        fetchBankPaymentsJournal: function(id) {
-            var bankStatement = new instanceWeb.Model('res.partner');
-            return bankStatement.call('eiru_account_interest_verify',[id],{
-                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 !== 'res.partner')
-                    return;
-
-                openerp.parentInstanceInterest = this;
-
-                if (openerp.widgetInstanceInterest) {
-                    openerp.widgetInstanceInterest.checkState(record.id, record.state);
-                    if (this.$el.find('.verify-interest-partner').length !== 0)
-                        return;
-                }
-
-                if (this.$el.find('.verify-interest-partner').length !== 0)
-                    return;
-
-                openerp.widgetInstanceInterest = new openerp.BankPaymentsInterest(this);
-
-                var element =this.$el.find('.oe_form').find('.eiru-verify-interest');
-
-                openerp.widgetInstanceInterest.appendTo(element[0]);
-                openerp.widgetInstanceInterest.checkState(record.id, record.state);
-            }
-        });
-    }
-})();

+ 82 - 0
static/src/js/verify_interest_invoice.js

@@ -0,0 +1,82 @@
+(function() {
+
+    openerp.widgetInstanceInterestInvoiceVerify = null;
+    openerp.parentInstanceInterestInvoiceVerify = {};
+    var QWeb = openerp.web.qweb;
+    var instanceWeb = openerp.web;
+    openerp.VerifyInterestInvoice = openerp.Widget.extend({
+        id: undefined,
+        buttons: undefined,
+        /* init */
+        init: function(parent) {
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+        /* Check state*/
+        checkState: function(id) {
+            var self = this;
+            self.id = id;
+            if (self.id)
+                self.fetchInitial();
+        },
+        /* Reload Page*/
+        reloadPage: function() {
+            openerp.parentInstanceInterestInvoiceVerify.reload();
+        },
+        // /* Método inicial  */
+        fetchInitial: function() {
+            var self = this;
+            self.fetchInvoice(self.id).then(function(accountInvoice){
+                return accountInvoice;
+            }).then(function(accountInvoice) {
+                self.accountInvoice = accountInvoice;
+                if ((accountInvoice[0].state !== 'open') || ((accountInvoice[0].state === 'open') && (accountInvoice[0].is_interest))){
+                    return false;
+                }
+                self.verifyInterestPartner(accountInvoice[0].id).then(function(results) {
+                    return results;
+                }).then(function(results){
+                    instanceWeb.notification.do_warn("Atencion",results.message);
+                    return self.reloadPage();
+                });
+            });
+        },
+        fetchInvoice: function(id){
+            var invoice = new instanceWeb.Model('account.invoice');
+            var fields =['id', 'name', 'state', 'is_interest'];
+            var domain=[['id', '=', id]]
+            return  invoice.query(fields).filter(domain).all();
+        },
+        /* Verificar  interest */
+        verifyInterestPartner: function(id) {
+            var bankStatement = new instanceWeb.Model('account.invoice');
+            return bankStatement.call('eiru_account_interest_verify_invoice',[id],{
+                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.invoice')
+                    return;
+
+                openerp.parentInstanceInterestInvoiceVerify = this;
+
+                if (openerp.widgetInstanceInterestInvoiceVerify) {
+                    if (openerp.widgetInstanceInterestInvoiceVerify.id === record.id){
+                        openerp.widgetInstanceInterestInvoiceVerify.id = undefined;
+                        return
+                    }
+                    openerp.widgetInstanceInterestInvoiceVerify.checkState(record.id);
+                    return;
+                }
+
+                openerp.widgetInstanceInterestInvoiceVerify = new openerp.VerifyInterestInvoice(this);
+                openerp.widgetInstanceInterestInvoiceVerify.checkState(record.id);
+            }
+        });
+    }
+})();

+ 70 - 0
static/src/js/verify_interest_partner.js

@@ -0,0 +1,70 @@
+(function() {
+
+    openerp.widgetInstanceInterestPartner = null;
+    openerp.parentInstanceInterestPartner = {};
+    var QWeb = openerp.web.qweb;
+    var instanceWeb = openerp.web;
+    openerp.VerifyInterestPartner = openerp.Widget.extend({
+        id: undefined,
+        buttons: undefined,
+        /* init */
+        init: function(parent) {
+            this._super(parent);
+            this.buttons = parent.$buttons;
+        },
+        /* Check state*/
+        checkState: function(id) {
+            var self = this;
+            self.id = id;
+            if (self.id)
+                self.fetchInitial();
+        },
+        /* Reload Page*/
+        reloadPage: function() {
+            openerp.parentInstanceInterestPartner.reload();
+        },
+        // /* Método inicial  */
+        fetchInitial: function() {
+            var self = this;
+            self.verifyInterestPartner(self.id).then(function(results) {
+                return results;
+            }).then(function(results) {
+                instanceWeb.notification.do_warn("Atencion",results.message);
+                return self.reloadPage();
+            });
+        },
+        /* Verificar  interest */
+        verifyInterestPartner: function(id) {
+            var bankStatement = new instanceWeb.Model('res.partner');
+            return bankStatement.call('eiru_account_interest_verify_partner',[id],{
+                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 !== 'res.partner')
+                    return;
+
+                openerp.parentInstanceInterestPartner = this;
+
+                if (openerp.widgetInstanceInterestPartner) {
+                    if (openerp.widgetInstanceInterestPartner.id === record.id){
+                        openerp.widgetInstanceInterestPartner.id = undefined;
+                        return;
+                    }
+                    
+                    openerp.widgetInstanceInterestPartner.checkState(record.id);
+                    return;
+                }
+
+                openerp.widgetInstanceInterestPartner = new openerp.VerifyInterestPartner(this);
+                openerp.widgetInstanceInterestPartner.checkState(record.id);
+            }
+        });
+    }
+})();

+ 5 - 5
views/account_interest.xml

@@ -54,11 +54,11 @@
 			<field name="model">account.interest</field>
 			<field name="arch" type="xml">
 				<tree create="0" edit="0">
-					<field name="name" />
-					<field name="date" />
-					<field name="customer_id" />
-					<field name="invoice_id" />
-					<field name="currency_id" />
+					<field name="name" string="Nombre" />
+					<field name="date" string="Fecha"/>
+					<field name="customer_id" string="Cliente"/>
+					<field name="invoice_id" string="Nº Factura"/>
+					<field name="currency_id" string="Moneda"/>
 					<field name="state" string="Estado"/>
 				</tree>
 			</field>

+ 5 - 5
views/account_invoice_interst.xml

@@ -7,15 +7,15 @@
 			<field name="inherit_id" ref="account.invoice_form"/>
 			<field name="arch" type="xml">
 				<notebook>
-					 <page string=" Interés por  mora">
+					 <page string=" Interés por mora">
 	 					<div class="eiru-verify-interest"></div>
 						 <group col="1">
 						   <field name="interest_ids" readonly="1" nolabel='1' delete='false' create='false'>
 							   <tree delete='false' create='false' widget="many2onebutton">
-								   <field name="name"/>
-								   <field name="date"/>
-								   <field name="reference"/>
-								   <field name="state"/>
+								   <field name="name" string="Nombre"/>
+								   <field name="date" string="Fecha"/>
+								   <field name="reference" string="Nº Factura"/>
+								   <field name="state" string="Estado"/>
 							   </tree>
 						   </field>
 						 </group>

+ 5 - 10
views/eiru_verify_interest.xml

@@ -6,25 +6,20 @@
 			<field name="model">res.partner</field>
 			<field name="inherit_id" ref="base.view_partner_form"/>
 			<field name="arch" type="xml">
-				<field name="street" position="before">
-					<div class="eiru-verify-interest"></div>
-				</field>
-
 				<notebook>
-					 <page string=" Interés por  mora">
+					 <page string="Interés por mora">
 						 <group col="1">
 						   <field name="interest_ids" readonly="1" nolabel='1' delete='false' create='false'>
 							   <tree delete='false' create='false'>
-								   <field name="name"/>
-								   <field name="date"/>
-								   <field name="invoice_id"/>
-								   <field name="state"/>
+								   <field name="name" string="Nombre"/>
+								   <field name="date" string="Fecha"/>
+								   <field name="invoice_id" string="Nº Factura"/>
+								   <field name="state" string="Estado"/>
 							   </tree>
 						   </field>
 						 </group>
 					 </page>
 				</notebook>
-
 			</field>
 		</record>
 	</data>

+ 2 - 1
views/templates.xml

@@ -3,8 +3,9 @@
         <template id="eiru_account_interest.eiru_assets" name="eiru_account_interest_eiru_assets" inherit_id="eiru_assets.assets">
             <xpath expr="." position="inside">
                 <link rel="stylesheet" href="/eiru_account_interest/static/src/css/style.css"/>
-                <script type="text/javascript" src="/eiru_account_interest/static/src/js/verify_interest.js"/>
                 <script type="text/javascript" src="/eiru_account_interest/static/src/js/account_interest_invoice.js"/>
+                <script type="text/javascript" src="/eiru_account_interest/static/src/js/verify_interest_partner.js"/>
+                <script type="text/javascript" src="/eiru_account_interest/static/src/js/verify_interest_invoice.js"/>
             </xpath>
         </template>
     </data>