# -*- coding: utf-8 -*- from openerp import models, fields, api from openerp.osv import osv class invoice_interes(models.Model): _inherit = "account.invoice" _name = "account.invoice" move_line_debt = fields.One2many('account.move.line', inverse_name="invoice", string="id Move line", domain=['&', ('reconcile_id', '=', False), '&', ('account_id.active','=', True), '&', ('account_id.type', '=', 'receivable'), ('state', '!=', 'draft')]) state_move_line= fields.Boolean(readonly=True, default=False) @api.multi def update_ammount_move(self): # Variables total_voucher=0 monto_residual=0 cuota_dividida=0 estado =None cambio_py=0 if len(self.payment_ids) < 1: raise osv.except_osv('Advertencia','No es posible continuar con la operación, para generar la división del saldo es necesario que pague su primera entrega') return #Verifica si existe mas de una linea en move live if len(self.move_line_debt) > 1: # Actulizar estado del journal cuando tipo es venta datos_journal = self.env['account.journal'].search([('type', '=', 'sale')]) datos_journal.write({'entry_posted' : True}) # rate_model = self.env['res.currency.rate'].search([('currency_id', '=', 166)]) # rate_py = rate_model[len(rate_model)-1] # cambio_py =rate_py.rate if self.currency_id.id == 3: monto_residual = self.residual else: monto_residual = self.residual/self.currency_id.rate_ids.rate # Calular la divicion la cuota cuota_dividida = (monto_residual / len(self.move_line_debt)) print(monto_residual) print(cuota_dividida) for move_line in self.move_line_debt: move_dato = self.env['account.move'].search([('id', 'in', move_line.move_id.ids)]) if move_dato: estado = move_dato.state move_dato.write({'state' : 'draft'}) line_voucher = self.env['account.voucher.line'].search([('move_line_id', '=', move_line.id), ('amount', '>', 0)],order='id') print(line_voucher) if line_voucher: for voucher in line_voucher: if voucher.voucher_id.payment_rate_currency_id.id == 3: print("moneda Dolar ") total_voucher += voucher.amount else: print("ota moneda") print("Cambio "+str(voucher.voucher_id.payment_rate_currency_id)) total_voucher +=(voucher.amount / voucher.voucher_id.payment_rate_currency_id.rate_ids.rate) print("cuota "+str(cuota_dividida)) print("pagado " +str(total_voucher)) print('total '+str(cuota_dividida + total_voucher)) move_line_dato = self.env['account.move.line'].search([('id', '=', move_line.id)]) move_line_dato.write({'debit' : (cuota_dividida + total_voucher)}) # move_line_dato.write({'amount_currency' : ((move_line_dato.debit - move_line_dato.credit)*cambio_py)}) if estado == None: estado='draft' move_dato.write({'state' : estado}) # move_line_dato._amount_residual(move_line_dato.amount_residual_currency) datos_journal.write({'entry_posted' : False}) incoice_datos = self.env['account.invoice'].search([('id', '=',self.id )]) incoice_datos.write({'state_move_line' : True}) move_line_state = self.env['account.move.line'].search([('ref', '=', self.number)]) move_line_state.write({'state' : 'valid'}) else: raise osv.except_osv('Advertencia','No es posible generar la división del saldo sobre una única linea') return