confirmar_cancelacion_wizzard.py
4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# -*- 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',
domain = [('comp_talonario.tal_codigo','=','NDEB')]
)
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.cancelar_recibo()
self.crear_notacred()
self.cc_cobro.cancelar_cobro()
def cancelar_facturas(self):
for fac in self.cc_facturas:
if fac.comp_talonario.tal_codigo not in ['NDEB']:
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 cancelar_recibo(self):
comprobante = self.cc_cobro.co_recibos.filtered(lambda t: t.comp_talonario.tal_menu == 'rec')
comprobante.comp_fecha_cancelacion = datetime.today()
def crear_notacred(self):
lista =[]
comprobantes = self.cc_cobro.co_recibos.filtered(lambda t: t.comp_talonario.tal_codigo == 'NDEB')
for comprobante in comprobantes:
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.write({
'referencia_orig_ptv': comprobante.comp_talonario.tal_pto_vta,
'referencia_orig_numero': comprobante.comp_nro,
'referencia_orig_letra': comprobante.comp_talonario.tal_letra,
'referencia_orig_fact': comprobante.id,
})
contra_comprobante.comp_fecha = datetime.today()
#linea de NCred
inter_prod = self.env['asw.producto'].search([('prod_descripcion','=','INTERES')])
linea_comp = self.env['asw.linea_comprobante'].create({
'lcp_producto': inter_prod.id,
'lcp_comprobante': contra_comprobante.id,
'lcp_precio': comprobante.comp_total,
'lcp_importe': comprobante.comp_total,
})
contra_comprobante.validar()
#se agrega al recibo original
comprobante.write({
'comp_nota_credito' : contra_comprobante.id
})
#La agrego a lista de faturas en cobro
lista.append(contra_comprobante.id)
self.cc_cobro.co_notascred = lista
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ú')