From 9c783419cfd2449d043dfea3e298c6d8bdc03253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 22 Nov 2025 15:37:31 +0100 Subject: [PATCH] Rename advance payment conditions into lines Closes #12854 --- modules/sale_advance_payment/CHANGELOG | 1 + modules/sale_advance_payment/account.py | 12 +-- modules/sale_advance_payment/sale.py | 85 ++++++++++--------- modules/sale_advance_payment/sale.xml | 12 +-- .../tests/scenario_advance_payment.rst | 14 +-- modules/sale_advance_payment/tryton.cfg | 2 +- ...form.xml => advance_payment_line_form.xml} | 0 ...list.xml => advance_payment_line_list.xml} | 0 .../sale_advance_payment/view/sale_form.xml | 4 +- 9 files changed, 70 insertions(+), 60 deletions(-) rename modules/sale_advance_payment/view/{advance_payment_condition_form.xml => advance_payment_line_form.xml} (100%) rename modules/sale_advance_payment/view/{advance_payment_condition_list.xml => advance_payment_line_list.xml} (100%) diff --git a/modules/sale_advance_payment/CHANGELOG b/modules/sale_advance_payment/CHANGELOG index c333e7c9a5..4a3590db57 100644 --- a/modules/sale_advance_payment/CHANGELOG +++ b/modules/sale_advance_payment/CHANGELOG @@ -1,3 +1,4 @@ +* Rename advance payment conditions into lines Version 7.6.0 - 2025-04-28 -------------------------- diff --git a/modules/sale_advance_payment/account.py b/modules/sale_advance_payment/account.py index 5a9d3c4459..341abb9b88 100644 --- a/modules/sale_advance_payment/account.py +++ b/modules/sale_advance_payment/account.py @@ -49,11 +49,11 @@ class Invoice(metaclass=PoolMeta): def get_sales(self, name): pool = Pool() - AdvancePaymentCondition = pool.get('sale.advance_payment.condition') + Line = pool.get('sale.advance_payment.line') sales = set(super().get_sales(name)) for line in self.lines: - if isinstance(line.origin, AdvancePaymentCondition): + if isinstance(line.origin, Line): sales.add(line.origin.sale.id) return list(sales) @@ -63,7 +63,7 @@ class Invoice(metaclass=PoolMeta): return ['OR', domain, ('lines.origin.sale' + clause[0][len(name):], - *clause[1:3], 'sale.advance_payment.condition', *clause[3:]), + *clause[1:3], 'sale.advance_payment.line', *clause[3:]), ] @@ -84,16 +84,16 @@ class InvoiceLine(metaclass=PoolMeta): @property def origin_name(self): pool = Pool() - Condition = pool.get('sale.advance_payment.condition') + Line = pool.get('sale.advance_payment.line') name = super().origin_name - if isinstance(self.origin, Condition) and self.origin.id >= 0: + if isinstance(self.origin, Line) and self.origin.id >= 0: name = self.origin.sale.rec_name return name @classmethod def _get_origin(cls): return (super()._get_origin() - + ['sale.advance_payment.condition']) + + ['sale.advance_payment.line']) @classmethod def copy(cls, lines, default=None): diff --git a/modules/sale_advance_payment/sale.py b/modules/sale_advance_payment/sale.py index f26ca35f4a..ec91d3e05d 100644 --- a/modules/sale_advance_payment/sale.py +++ b/modules/sale_advance_payment/sale.py @@ -5,6 +5,7 @@ from itertools import chain from simpleeval import simple_eval +from trytond import backend, config from trytond.i18n import gettext from trytond.model import ( DeactivableMixin, ModelSQL, ModelView, Workflow, fields) @@ -33,14 +34,14 @@ class AdvancePaymentTerm( 'untaxed_amount': sale.untaxed_amount, } - def get_conditions(self, sale): - conditions = [] + def get_lines(self, sale): + lines = [] term_context = self.get_advance_payment_context(sale) - for line in self.lines: - condition = line.get_condition(sale.currency, **term_context) - if condition.amount > 0: - conditions.append(condition) - return conditions + for sale_line in self.lines: + line = sale_line.get_line(sale.currency, **term_context) + if line.amount > 0: + lines.append(line) + return lines class AdvancePaymentTermLine(ModelView, ModelSQL, CompanyMultiValueMixin): @@ -109,11 +110,11 @@ class AdvancePaymentTermLine(ModelView, ModelSQL, CompanyMultiValueMixin): context = self.get_compute_amount_context(**names) return simple_eval(decistmt(self.formula), **context) - def get_condition(self, currency, **context): + def get_line(self, currency, **context): pool = Pool() - AdvancePaymentCondition = pool.get('sale.advance_payment.condition') + Line = pool.get('sale.advance_payment.line') - return AdvancePaymentCondition( + return Line( block_supply=self.block_supply, block_shipping=self.block_shipping, amount=currency.round(self.compute_amount(**context)), @@ -139,8 +140,8 @@ class AdvancePaymentTermLineAccount(ModelSQL, CompanyValueMixin): ]) -class AdvancePaymentCondition(ModelSQL, ModelView): - __name__ = 'sale.advance_payment.condition' +class AdvancePaymentLine(ModelSQL, ModelView): + __name__ = 'sale.advance_payment.line' _rec_name = 'description' _states = { @@ -187,6 +188,16 @@ class AdvancePaymentCondition(ModelSQL, ModelView): cls._order.insert(0, ('amount', 'ASC')) cls.__access__.add('sale') + @classmethod + def __register__(cls, module): + # Migration from 7.0: rename condition into line + backend.TableHandler.table_rename( + config.get( + 'table', 'sale.advance_payment.condition', + default='sale_advance_payment_condition'), + cls._table) + super().__register__(module) + @classmethod def get_sale_states(cls): pool = Pool() @@ -207,13 +218,13 @@ class AdvancePaymentCondition(ModelSQL, ModelView): return self.sale.currency if self.sale else None @classmethod - def copy(cls, conditions, default=None): + def copy(cls, lines, default=None): if default is None: default = {} else: default = default.copy() default.setdefault('invoice_lines', []) - return super().copy(conditions, default) + return super().copy(lines, default) def create_invoice(self): invoice = self.sale._get_invoice() @@ -277,9 +288,8 @@ class Sale(metaclass=PoolMeta): ondelete='RESTRICT', states={ 'readonly': Eval('state') != 'draft', }) - advance_payment_conditions = fields.One2Many( - 'sale.advance_payment.condition', 'sale', - 'Advance Payment Conditions', + advance_payment_lines = fields.One2Many( + 'sale.advance_payment.line', 'sale', "Advance Payment Lines", states={ 'readonly': Eval('state') != 'draft', }) @@ -303,12 +313,12 @@ class Sale(metaclass=PoolMeta): @Workflow.transition('quotation') def quote(cls, sales): pool = Pool() - AdvancePaymentCondition = pool.get('sale.advance_payment.condition') + AdvancePaymentLine = pool.get('sale.advance_payment.line') super().quote(sales) - AdvancePaymentCondition.delete( - list(chain(*(s.advance_payment_conditions for s in sales)))) + AdvancePaymentLine.delete( + list(chain(*(s.advance_payment_lines for s in sales)))) for sale in sales: sale.set_advance_payment_term() @@ -320,7 +330,7 @@ class Sale(metaclass=PoolMeta): default = {} else: default = default.copy() - default.setdefault('advance_payment_conditions', None) + default.setdefault('advance_payment_lines', None) return super().copy(sales, default=default) def set_advance_payment_term(self): @@ -333,20 +343,19 @@ class Sale(metaclass=PoolMeta): self.advance_payment_term.id) else: advance_payment_term = self.advance_payment_term - self.advance_payment_conditions = \ - advance_payment_term.get_conditions(self) + self.advance_payment_lines = advance_payment_term.get_lines(self) def get_advance_payment_invoices(self, name): invoices = set() - for condition in self.advance_payment_conditions: - for invoice_line in condition.invoice_lines: + for line in self.advance_payment_lines: + for invoice_line in line.invoice_lines: if invoice_line.invoice: invoices.add(invoice_line.invoice.id) return list(invoices) @classmethod def search_advance_payment_invoices(cls, name, clause): - return [('advance_payment_conditions.invoice_lines.invoice' + return [('advance_payment_lines.invoice_lines.invoice' + clause[0][len(name):], *clause[1:])] @property @@ -360,7 +369,7 @@ class Sale(metaclass=PoolMeta): recall_lines = [] advance_lines = [ l - for c in self.advance_payment_conditions + for c in self.advance_payment_lines for l in c.invoice_lines if l.type == 'line' and l.invoice.state == 'paid'] for advance_line in advance_lines: @@ -391,8 +400,8 @@ class Sale(metaclass=PoolMeta): for sale in sales: if (sale.advance_payment_eligible() and not sale.advance_payment_completed): - for condition in sale.advance_payment_conditions: - invoice = condition.create_invoice() + for line in sale.advance_payment_lines: + invoice = line.create_invoice() if invoice: invoices.append(invoice) Invoice.save(invoices) @@ -416,31 +425,31 @@ class Sale(metaclass=PoolMeta): of the sale's advance payment. """ return bool((shipment_type == 'out' or shipment_type is None) - and self.advance_payment_conditions) + and self.advance_payment_lines) @property def advance_payment_completed(self): """ Returns True when the advance payment process is completed """ - return (bool(self.advance_payment_conditions) - and all(c.completed for c in self.advance_payment_conditions)) + return (bool(self.advance_payment_lines) + and all(c.completed for c in self.advance_payment_lines)) @property def supply_blocked(self): - for condition in self.advance_payment_conditions: - if not condition.block_supply: + for line in self.advance_payment_lines: + if not line.block_supply: continue - if not condition.completed: + if not line.completed: return True return False @property def shipping_blocked(self): - for condition in self.advance_payment_conditions: - if not condition.block_shipping: + for line in self.advance_payment_lines: + if not line.block_shipping: continue - if not condition.completed: + if not line.completed: return True return False diff --git a/modules/sale_advance_payment/sale.xml b/modules/sale_advance_payment/sale.xml index 0e7e8e7ee1..3dc18dbb31 100644 --- a/modules/sale_advance_payment/sale.xml +++ b/modules/sale_advance_payment/sale.xml @@ -9,15 +9,15 @@ this repository contains the full copyright notices and license terms. --> sale_form - - sale.advance_payment.condition + + sale.advance_payment.line form - advance_payment_condition_form + advance_payment_line_form - - sale.advance_payment.condition + + sale.advance_payment.line tree - advance_payment_condition_list + advance_payment_line_list diff --git a/modules/sale_advance_payment/tests/scenario_advance_payment.rst b/modules/sale_advance_payment/tests/scenario_advance_payment.rst index e93089f134..6487947261 100644 --- a/modules/sale_advance_payment/tests/scenario_advance_payment.rst +++ b/modules/sale_advance_payment/tests/scenario_advance_payment.rst @@ -147,8 +147,8 @@ Create a sale with advance payment:: >>> line.quantity = 5 >>> sale.advance_payment_term = advance_payment_term >>> sale.click('quote') - >>> condition, = sale.advance_payment_conditions - >>> condition.amount + >>> line, = sale.advance_payment_lines + >>> line.amount Decimal('10.00') >>> sale.click('confirm') >>> sale.click('process') @@ -221,8 +221,8 @@ Create a sale with advance payment:: >>> line.quantity = 6 >>> sale.advance_payment_term = advance_payment_term_no_pack >>> sale.click('quote') - >>> condition, = sale.advance_payment_conditions - >>> condition.amount + >>> line, = sale.advance_payment_lines + >>> line.amount Decimal('12.00') >>> sale.click('confirm') >>> sale.click('process') @@ -321,7 +321,7 @@ There is now a purchase request of the desired quantity:: >>> purchase_request.quantity 10.0 -Testing advance payment conditions exception handling +Testing advance payment lines exception handling ----------------------------------------------------- Create a sale with this term:: @@ -334,8 +334,8 @@ Create a sale with this term:: >>> line.quantity = 5 >>> sale.advance_payment_term = advance_payment_term >>> sale.click('quote') - >>> condition1, = sale.advance_payment_conditions - >>> condition1.amount + >>> line1, = sale.advance_payment_lines + >>> line1.amount Decimal('10.00') >>> sale.click('confirm') >>> sale.click('process') diff --git a/modules/sale_advance_payment/tryton.cfg b/modules/sale_advance_payment/tryton.cfg index cba5153871..84dfb68930 100644 --- a/modules/sale_advance_payment/tryton.cfg +++ b/modules/sale_advance_payment/tryton.cfg @@ -28,7 +28,7 @@ model: sale.AdvancePaymentTerm sale.AdvancePaymentTermLine sale.AdvancePaymentTermLineAccount - sale.AdvancePaymentCondition + sale.AdvancePaymentLine sale.Sale sale.SaleLine wizard: diff --git a/modules/sale_advance_payment/view/advance_payment_condition_form.xml b/modules/sale_advance_payment/view/advance_payment_line_form.xml similarity index 100% rename from modules/sale_advance_payment/view/advance_payment_condition_form.xml rename to modules/sale_advance_payment/view/advance_payment_line_form.xml diff --git a/modules/sale_advance_payment/view/advance_payment_condition_list.xml b/modules/sale_advance_payment/view/advance_payment_line_list.xml similarity index 100% rename from modules/sale_advance_payment/view/advance_payment_condition_list.xml rename to modules/sale_advance_payment/view/advance_payment_line_list.xml diff --git a/modules/sale_advance_payment/view/sale_form.xml b/modules/sale_advance_payment/view/sale_form.xml index 19a6562532..1ee444341e 100644 --- a/modules/sale_advance_payment/view/sale_form.xml +++ b/modules/sale_advance_payment/view/sale_form.xml @@ -3,10 +3,10 @@ this repository contains the full copyright notices and license terms. --> - +