prod_pfinal.py
3.52 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class asw_prod_pfinal(models.TransientModel):
_name = 'asw.prod_pfinal'
_description = 'Producto Precio Final'
def _ppf_producto_default(self):
rta = self.env["asw.producto"].search([["active","=",True]],limit=1)
return(rta)
ppf_producto = fields.Many2one(
string=u'Producto',
comodel_name='asw.producto',
ondelete='set null',
default=_ppf_producto_default
)
ppf_descripcion_producto = fields.Text(
string='Descripcion',
)
ppf_comprobante = fields.Many2one(
string=u'Comprobante',
comodel_name='asw.comprobante',
ondelete='cascade',
)
ppf_cantidad = fields.Float(
string=u'Cantidad',
default=1,
)
ppf_precio= fields.Monetary(
string=u'Precio Final',
currency_field='ppf_moneda',
store=True
)
ppf_importe= fields.Monetary(
string=u'Importe de linea',
currency_field='ppf_moneda',
readonly=True,
store=True,
compute="obtener_ppf_precio_bruto"
)
ppf_precio_bruto= fields.Monetary(
string=u'Precio Neto',
currency_field='ppf_moneda',
readonly=True,
store=True,
compute="obtener_ppf_precio_bruto"
)
ppf_moneda = fields.Many2one(
string=u'Moneda del Producto',
comodel_name='res.currency',
ondelete='set null',
default=lambda self: self.env.user.company_id.currency_id,
)
ppf_impuesto = fields.Many2one(
string=u'IVA',
comodel_name='asw.impuesto',
ondelete='set null',
default=lambda self: self.env["asw.impuesto"].search([["name","=","21%"]], limit=1).id
)
#metodo para obtener el dominio de prods
def get_domain_producto(self):
domain = []
if(self.ppf_comprobante.comp_tipo_comp == 'e'):
return [('pro_puede_ser_vendido','=', True)]
if(self.ppf_comprobante.comp_tipo_comp == 'r'):
return [('pro_puede_ser_comprado','=', True)]
return domain
#metodo de creacion de linea de factura y su asociacion al comprobante en curso
def crear_linea(self):
pb = self.ppf_precio_bruto
pi = self.ppf_importe
vals = {
'lcp_producto' : self.ppf_producto.id,
'lcp_descripcion_producto' : self.ppf_descripcion_producto,
'lcp_comprobante': self.ppf_comprobante.id,
'lcp_cantidad': self.ppf_cantidad,
'lcp_precio': pb,
'lcp_importe': pi,
'lcp_moneda': self.ppf_moneda.id,
'lcp_iva': self.ppf_impuesto.id,
}
#print(vals)
nva_lineaf = self.env['asw.linea_comprobante'].create(vals)
#print(self.ppf_comprobante._onchange_comp_linea_facturas())
return(nva_lineaf._onchange_precio_venta())
@api.depends('ppf_impuesto','ppf_precio')
def obtener_ppf_precio_bruto(self):
for record in self:
pnet= record.ppf_precio#precio final / Bruto
iva = record.ppf_impuesto.imp_porcentaje #iva en porsentaje
record.ppf_precio_bruto = (record.ppf_precio / ((100 + iva)/100)) / record.ppf_cantidad #Neto unitario
record.ppf_importe = record.ppf_precio / ((100 + iva)/100) #Importe de linea sin iva
@api.onchange('ppf_producto')
def _onchange_ppf_producto(self):
self.ppf_impuesto = self.ppf_producto.prod_imp_venta
self.ppf_descripcion_producto = self.ppf_producto.prod_descripcion