prod_pfinal.py 3.52 KB
# -*- 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