|
@@ -0,0 +1,88 @@
|
|
|
+
|
|
|
+
|
|
|
+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):
|
|
|
+
|
|
|
+ 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
|
|
|
+
|
|
|
+ if len(self.move_line_debt) > 1:
|
|
|
+
|
|
|
+ datos_journal = self.env['account.journal'].search([('type', '=', 'sale')])
|
|
|
+ datos_journal.write({'entry_posted' : True})
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if self.currency_id.id == 3:
|
|
|
+ monto_residual = self.residual
|
|
|
+ else:
|
|
|
+ monto_residual = self.residual/self.currency_id.rate_ids.rate
|
|
|
+
|
|
|
+
|
|
|
+ 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)})
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if estado == None:
|
|
|
+ estado='draft'
|
|
|
+ move_dato.write({'state' : estado})
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ 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
|