pago_discriminado.py 3.59 KB
# -*- 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',
    }