# -*- coding: utf-8 -*- ############################################################################### # License, author and contributors information in: # # __manifest__.py file at the root folder of this module. # ############################################################################### from odoo import models, fields, api, _ from odoo.exceptions import UserError, ValidationError, Warning import datetime class hgt_cobro_multiple(models.TransientModel): _name = 'hgt.pago_multiple' _description = 'Pago multiple avanzado' _inherit = ['asw.action.manager'] # Informacion pago pcw_cliente = fields.Many2one( comodel_name='asw.cliente', string='Cliente', readonly=True, compute='_compute_cliente', required=True ) nota = fields.Text(string='nota',readonly=True) comprobantes = fields.Many2many(comodel_name='asw.comprobante', string='Comprobantes') ###########################################Validaciones y calculos ###################################### @api.depends('comprobantes') def _compute_cliente(self): if not len(self.pcw_cliente) == 0: return(None) context = self.env.context if len(self.comprobantes) == 0: active_ids = context.get('active_ids') facturas = self.env['asw.comprobante'].search([('id', 'in', active_ids)]) self.comprobantes = facturas.ids else: facturas = self.comprobantes idc = [] Texto = "Facturas de proveedores a pagar:" Total = 0 for factura in facturas: if not factura.comp_cliente.id in idc: idc.append(factura.comp_cliente.id) if not factura.comp_adeudado > 0: raise UserError(f"Factura {factura.display_name} ya esta pagada o valor nulo") if factura.comp_estado in ["b","c"]: raise UserError(f"Factura {factura.display_name} en estado invalido para pagar") if (factura.comp_talonario.tal_tipo == "e"): raise UserError(f"El comprobante {factura.display_name} es de venta") Total = Total + factura.comp_adeudado Texto = f"{Texto}\n{factura.display_name} {factura.comp_adeudado}" if not len(idc) == 1: raise UserError("Solo se puede cobrar a un cliente a la vez, cierre la ventana y seleccione de vuelta los comprobantes a operar") Texto = f"{Texto}\nTotal {Total}".replace(".",self.PuntoDecimal()) self.pcw_cliente = idc[0] self.nota = Texto ############################################Asistente################################################################## def PuntoDecimal(self): """devuelve si es coma o punto segun la configuracion del sistema""" idioma = self.env.user.lang res_lang = self.env["res.lang"].sudo().search([["code","=",idioma]]) decimal = res_lang.decimal_point #print(decimal) return(decimal) def AgregarChequesMultiples(self): #print(self.comprobantes, self.pcw_cliente) val = {"pcw_cliente":self.pcw_cliente, "comprobantes": self.comprobantes.ids} pg = self.env["hgt.pago_multiple_avanzado"].create(val) pg.comprobantes = self.comprobantes.ids #print(pg) return { 'context': self.env.context, 'view_type': 'form', 'view_mode': 'form', 'res_model': 'hgt.pago_multiple_avanzado', 'res_id': pg.id, 'view_id': False, 'type': 'ir.actions.act_window', 'target': 'self', }