From 0931aa7727ca22e73ca10d36c001926651ff212a Mon Sep 17 00:00:00 2001 From: sinergia Date: Fri, 1 Jul 2022 00:14:59 -0500 Subject: [PATCH] tab 'equipment' in sale invisible with product --- equipment.py | 2 ++ sale.py | 63 ++++++++++++++++++++++++++++++++- view/optical_equipment_form.xml | 3 ++ view/sale_line_form.xml | 5 +++ 4 files changed, 72 insertions(+), 1 deletion(-) diff --git a/equipment.py b/equipment.py index a46ba14..695e7dc 100644 --- a/equipment.py +++ b/equipment.py @@ -33,6 +33,8 @@ class OpticalEquipment(ModelSQL, ModelView): 'equipment','subscription', "Subscriptions", states={'readonly': True}) + current_subscription = fields.Many2One('sale.subscription') + @staticmethod def get_origin(): return None diff --git a/sale.py b/sale.py index 0c8fe5e..a916ec3 100644 --- a/sale.py +++ b/sale.py @@ -1,6 +1,8 @@ from trytond.pool import Pool, PoolMeta from trytond.model import ModelView, ModelSQL, fields from trytond.pyson import Eval, Bool, If +from trytond.transaction import Transaction + class SaleLine(metaclass=PoolMeta): @@ -8,6 +10,65 @@ class SaleLine(metaclass=PoolMeta): __name__ = 'sale.line' 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 @ModelView.button @@ -24,7 +85,7 @@ class SaleLine(metaclass=PoolMeta): def view_attributes(cls): return super(SaleLine, cls).view_attributes() + [ ('//page[@id="equipment"]', 'states', { - 'invisible': ~Eval('lines.product.equipment'), + 'invisible': ~Eval('product_equipment', True), })] diff --git a/view/optical_equipment_form.xml b/view/optical_equipment_form.xml index 39daa60..9c14628 100644 --- a/view/optical_equipment_form.xml +++ b/view/optical_equipment_form.xml @@ -20,6 +20,7 @@