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