confirmar_cancelacion_wizzard.py 2.67 KB
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import UserError
from datetime import datetime

class vnt_confirmar_cancelacion(models.TransientModel):
    _name = 'vnt.confirmar_cancelacion'
    _description = 'Confirmar Cancelación'
    _inherit = ['asw.generador_comprobante', 'asw.action.manager']

    cc_notas = fields.Many2many(
        string=u"Nota Débito",
        comodel_name='asw.comprobante',
    )

    cc_facturas = fields.Many2many(
        string=u"Facturas Originales",
        comodel_name='asw.comprobante',
    )

    cc_cobro = fields.Many2one(
        string='Cobro',
        comodel_name='vnt.cobros',
    )

    def cancelar(self):
        self.chequear_cancelacion_notas()
        self.cancelar_facturas()
        self.crear_notacred()
        self.cc_cobro.cancelar_cobro() 
    
    def cancelar_facturas(self):
        for fac in self.cc_facturas:
            fac.comp_estado = 'a'

    def chequear_cancelacion_notas(self):
        for nota in self.cc_notas:
            if nota.comp_fecha_cancelacion == False:
                raise UserError("Todas las notas deben ser canceladas para continuar con la cancelación") 

    def crear_notacred(self):
        comprobante = self.cc_cobro.co_recibos.filtered(lambda t: t.comp_talonario.tal_menu == 'rec')

        referencia = 'Reintegro del comprobante : ' + comprobante.comp_talonario.tal_codigo + "/" +comprobante.comp_nro_letras

        talonario = self.env['asw.talonario'].search([('tal_pto_vta','=',comprobante.comp_talonario.tal_pto_vta),('tal_letra','=', comprobante.comp_talonario.tal_letra),('tal_codigo','=','NCRED')])
                    
        if talonario:
            contra_comprobante = self.generar_comprobante(
                talonario        = talonario,
                cliente          = comprobante.comp_cliente,
                total            = comprobante.comp_total,
                referencia       = referencia,
                comp_estado      = comprobante.comp_estado,
                comp_nro_letras  = comprobante.comp_nro_letras,
                comp_subtotal    = comprobante.comp_subtotal,
                comp_moneda      = comprobante.comp_moneda.id,
                comp_nota_credito = comprobante.id
            )

            contra_comprobante.comp_fecha = datetime.today()
            contra_comprobante.duplicar_lineas(comprobante)
            
            comprobante.write({
                'comp_nota_credito' : contra_comprobante.id            
            })
     

        else:
            raise UserError('No existe talonario para la Nota de Crédito correspondiente. Créelo o diríjase a soporte para que lo haga, y vuelva a este menú')