tab 'equipment' in sale invisible with product

This commit is contained in:
sinergia 2022-07-01 00:14:59 -05:00
parent 0566d0d66f
commit 0931aa7727
4 changed files with 72 additions and 1 deletions

View File

@ -33,6 +33,8 @@ class OpticalEquipment(ModelSQL, ModelView):
'equipment','subscription', "Subscriptions", 'equipment','subscription', "Subscriptions",
states={'readonly': True}) states={'readonly': True})
current_subscription = fields.Many2One('sale.subscription')
@staticmethod @staticmethod
def get_origin(): def get_origin():
return None return None

63
sale.py
View File

@ -1,6 +1,8 @@
from trytond.pool import Pool, PoolMeta from trytond.pool import Pool, PoolMeta
from trytond.model import ModelView, ModelSQL, fields from trytond.model import ModelView, ModelSQL, fields
from trytond.pyson import Eval, Bool, If from trytond.pyson import Eval, Bool, If
from trytond.transaction import Transaction
class SaleLine(metaclass=PoolMeta): class SaleLine(metaclass=PoolMeta):
@ -8,6 +10,65 @@ class SaleLine(metaclass=PoolMeta):
__name__ = 'sale.line' __name__ = 'sale.line'
address_equipment = fields.Many2One('party.address', "Direccion") address_equipment = fields.Many2One('party.address', "Direccion")
product_equipment = fields.Boolean("Product Equipment")
unit_digits = fields.Function(fields.Integer('Unit Digits'),
'on_change_with_unit_digits')
def on_change_with_unit_digits(self, name=None):
if self.unit:
return self.unit.digits
return 2
@fields.depends('product', 'unit', 'quantity', 'sale',
'_parent_sale.party',
methods=['_get_tax_rule_pattern', '_get_context_sale_price',
'on_change_with_amount'])
def on_change_product(self):
Product = Pool().get('product.product')
if not self.product:
self.product_equipment = False
return
party = None
if self.sale and self.sale.party:
self.product_equipment = False
party = self.sale.party
# Set taxes before unit_price to have taxes in context of sale price
taxes = []
pattern = self._get_tax_rule_pattern()
for tax in self.product.customer_taxes_used:
if party and party.customer_tax_rule:
tax_ids = party.customer_tax_rule.apply(tax, pattern)
if tax_ids:
taxes.extend(tax_ids)
continue
taxes.append(tax.id)
if party and party.customer_tax_rule:
tax_ids = party.customer_tax_rule.apply(None, pattern)
if tax_ids:
taxes.extend(tax_ids)
self.taxes = taxes
category = self.product.sale_uom.category
if not self.unit or self.unit.category != category:
self.unit = self.product.sale_uom
self.unit_digits = self.product.sale_uom.digits
with Transaction().set_context(self._get_context_sale_price()):
self.unit_price = Product.get_sale_price([self.product],
self.quantity or 0)[self.product.id]
if self.unit_price:
self.unit_price = self.unit_price.quantize(
Decimal(1) / 10 ** self.__class__.unit_price.digits[1])
self.type = 'line'
self.amount = self.on_change_with_amount()
self.product_equipment = True
@classmethod @classmethod
@ModelView.button @ModelView.button
@ -24,7 +85,7 @@ class SaleLine(metaclass=PoolMeta):
def view_attributes(cls): def view_attributes(cls):
return super(SaleLine, cls).view_attributes() + [ return super(SaleLine, cls).view_attributes() + [
('//page[@id="equipment"]', 'states', { ('//page[@id="equipment"]', 'states', {
'invisible': ~Eval('lines.product.equipment'), 'invisible': ~Eval('product_equipment', True),
})] })]

View File

@ -20,6 +20,7 @@
<field name="biomedical_class"/> <field name="biomedical_class"/>
<label name="calibration"/> <label name="calibration"/>
<field name="calibration"/> <field name="calibration"/>
<newline/>
<label name="mark_category"/> <label name="mark_category"/>
<field name="mark_category"/> <field name="mark_category"/>
<label name="model_category"/> <label name="model_category"/>
@ -38,6 +39,8 @@
<field name="health_register"/> <field name="health_register"/>
<label name="origin_country"/> <label name="origin_country"/>
<field name="origin_country"/> <field name="origin_country"/>
<label name="current_subscription"/>
<field name="current_subscription"/>
<notebook> <notebook>
<page string="Subscriptions" id="subscriptions_equipment"> <page string="Subscriptions" id="subscriptions_equipment">

View File

@ -8,4 +8,9 @@
<field name="address_equipment"/> <field name="address_equipment"/>
</page> </page>
</xpath> </xpath>
<xpath
expr="/form/notebook/page[@id='general']/field[@name='product']" position="after">
<label name="product_equipment"/>
<field name="product_equipment"/>
</xpath>
</data> </data>