diff --git a/modules/account/account.py b/modules/account/account.py
index e2623c631c..773f94bffb 100644
--- a/modules/account/account.py
+++ b/modules/account/account.py
@@ -880,7 +880,7 @@ class Account(
'readonly': _states['readonly'],
},
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
debit_type = fields.Many2One(
'account.account.type', "Debit Type", ondelete='RESTRICT',
@@ -891,7 +891,7 @@ class Account(
| (_states['readonly']) & ~Eval('debit_type')),
},
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
help="The type used if not empty and debit > credit.")
credit_type = fields.Many2One(
@@ -903,7 +903,7 @@ class Account(
| (_states['readonly']) & ~Eval('credit_type')),
},
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
help="The type used if not empty and debit < credit.")
parent = fields.Many2One(
@@ -952,7 +952,7 @@ class Account(
taxes = fields.Many2Many('account.account-account.tax',
'account', 'tax', 'Default Taxes',
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('parent', '=', None),
],
help="Default taxes for documents to be applied "
@@ -2172,12 +2172,12 @@ class GeneralLedgerAccountContext(ModelView):
fiscalyear = fields.Many2One('account.fiscalyear', 'Fiscal Year',
required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
depends=['company'])
start_period = fields.Many2One('account.period', 'Start Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('start_date', '<=', (Eval('end_period'), 'start_date')),
],
states={
@@ -2185,7 +2185,7 @@ class GeneralLedgerAccountContext(ModelView):
})
end_period = fields.Many2One('account.period', 'End Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('start_date', '>=', (Eval('start_period'), 'start_date'))
],
states={
@@ -2710,11 +2710,11 @@ class IncomeStatementContext(ModelView):
fiscalyear = fields.Many2One('account.fiscalyear', 'Fiscal Year',
required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
start_period = fields.Many2One('account.period', 'Start Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('start_date', '<=', (Eval('end_period'), 'start_date'))
],
states={
@@ -2722,7 +2722,7 @@ class IncomeStatementContext(ModelView):
})
end_period = fields.Many2One('account.period', 'End Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('start_date', '>=', (Eval('start_period'), 'start_date')),
],
states={
@@ -2757,11 +2757,11 @@ class IncomeStatementContext(ModelView):
'invisible': ~Eval('comparison', False),
},
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
start_period_cmp = fields.Many2One('account.period', 'Start Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear_cmp')),
+ ('fiscalyear', '=', Eval('fiscalyear_cmp', -1)),
('start_date', '<=', (Eval('end_period_cmp'), 'start_date'))
],
states={
@@ -2771,7 +2771,7 @@ class IncomeStatementContext(ModelView):
})
end_period_cmp = fields.Many2One('account.period', 'End Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear_cmp')),
+ ('fiscalyear', '=', Eval('fiscalyear_cmp', -1)),
('start_date', '>=', (Eval('start_period_cmp'), 'start_date')),
],
states={
@@ -3191,7 +3191,7 @@ class CreateChartProperties(ModelView):
('closed', '!=', True),
('type.receivable', '=', True),
('party_required', '=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
account_payable = fields.Many2One('account.account',
'Default Payable Account',
@@ -3199,7 +3199,7 @@ class CreateChartProperties(ModelView):
('closed', '!=', True),
('type.payable', '=', True),
('party_required', '=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
diff --git a/modules/account/account.xml b/modules/account/account.xml
index 8005853490..4e12085cbc 100644
--- a/modules/account/account.xml
+++ b/modules/account/account.xml
@@ -685,7 +685,7 @@ this repository contains the full copyright notices and license terms. -->
account.general_ledger.account.context
diff --git a/modules/account/fiscalyear.py b/modules/account/fiscalyear.py
index a98616d5be..a34a0edc60 100644
--- a/modules/account/fiscalyear.py
+++ b/modules/account/fiscalyear.py
@@ -34,7 +34,7 @@ class FiscalYear(Workflow, ModelSQL, ModelView):
periods = fields.One2Many('account.period', 'fiscalyear', 'Periods',
states=STATES,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[('start_date', 'ASC'), ('id', 'ASC')])
state = fields.Selection([
@@ -47,7 +47,7 @@ class FiscalYear(Workflow, ModelSQL, ModelView):
domain=[
('sequence_type', '=',
Id('account', 'sequence_type_account_move')),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
company = fields.Many2One(
'company.company', "Company", required=True)
@@ -426,7 +426,7 @@ class BalanceNonDeferralStart(ModelView):
depends={'company'})
period = fields.Many2One('account.period', 'Period', required=True,
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('type', '=', 'adjustment'),
])
credit_account = fields.Many2One('account.account', 'Credit Account',
@@ -603,7 +603,7 @@ class RenewFiscalYearStart(ModelView):
previous_fiscalyear = fields.Many2One(
'account.fiscalyear', "Previous Fiscalyear", required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
help="Used as reference for fiscalyear configuration.")
start_date = fields.Date("Start Date", required=True)
diff --git a/modules/account/move.py b/modules/account/move.py
index 99a409ca2d..fc3cd3d427 100644
--- a/modules/account/move.py
+++ b/modules/account/move.py
@@ -1898,14 +1898,14 @@ class WriteOff(DeactivableMixin, ModelSQL, ModelView):
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
debit_account = fields.Many2One('account.account', "Debit Account",
required=True,
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
@classmethod
@@ -2064,7 +2064,7 @@ class ReconcileLinesWriteOff(ModelView):
writeoff = fields.Many2One('account.move.reconcile.write_off', "Write Off",
required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
date = fields.Date('Date', required=True)
amount = Monetary(
@@ -2491,8 +2491,8 @@ class ReconcileShow(ModelView):
currency = fields.Many2One('currency.currency', "Currency", readonly=True)
lines = fields.Many2Many('account.move.line', None, None, 'Lines',
domain=[
- ('account', '=', Eval('account')),
- ('party', '=', Eval('party')),
+ ('account', '=', Eval('account', -1)),
+ ('party', '=', Eval('party', -1)),
('reconciliation', '=', None),
['OR',
[
diff --git a/modules/account/tax.py b/modules/account/tax.py
index 24c00ed7aa..16fb557b10 100644
--- a/modules/account/tax.py
+++ b/modules/account/tax.py
@@ -380,7 +380,7 @@ class TaxCodeLine(ModelSQL, ModelView):
tax = fields.Many2One(
'account.tax', "Tax", required=True, states=_states,
domain=[
- ('company', '=', Eval('_parent_code', {}).get('company')),
+ ('company', '=', Eval('_parent_code', {}).get('company', -1)),
],
depends={'code'})
amount = fields.Selection([
@@ -820,7 +820,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin):
credit_note_account = fields.Many2One('account.account',
'Credit Note Account',
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('type.statement', '=', 'balance'),
('closed', '!=', True),
],
@@ -1575,7 +1575,7 @@ class TaxRuleLineTemplate(sequence_ordered(), ModelSQL, ModelView):
domain=[
('parent', '=', None),
('account', '=', Eval('_parent_rule', {}).get('account', 0)),
- ('group', '=', Eval('group')),
+ ('group', '=', Eval('group', -1)),
['OR',
('group', '=', None),
If(Eval('_parent_rule', {}).get('kind', 'both') == 'sale',
@@ -1596,7 +1596,7 @@ class TaxRuleLineTemplate(sequence_ordered(), ModelSQL, ModelView):
domain=[
('parent', '=', None),
('account', '=', Eval('_parent_rule', {}).get('account', 0)),
- ('group', '=', Eval('group')),
+ ('group', '=', Eval('group', -1)),
['OR',
('group', '=', None),
If(Eval('_parent_rule', {}).get('kind', 'both') == 'sale',
@@ -1696,7 +1696,7 @@ class TaxRuleLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
origin_tax = fields.Many2One('account.tax', 'Original Tax',
domain=[
('parent', '=', None),
- ('company', '=', Eval('_parent_rule', {}).get('company')),
+ ('company', '=', Eval('_parent_rule', {}).get('company', -1)),
('group', '=', Eval('group')),
['OR',
('group', '=', None),
@@ -1717,7 +1717,7 @@ class TaxRuleLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
tax = fields.Many2One('account.tax', 'Substitution Tax',
domain=[
('parent', '=', None),
- ('company', '=', Eval('_parent_rule', {}).get('company')),
+ ('company', '=', Eval('_parent_rule', {}).get('company', -1)),
('group', '=', Eval('group')),
['OR',
('group', '=', None),
diff --git a/modules/account/tax.xml b/modules/account/tax.xml
index f46ea5a74e..04a338d8bc 100644
--- a/modules/account/tax.xml
+++ b/modules/account/tax.xml
@@ -292,7 +292,7 @@ this repository contains the full copyright notices and license terms. -->
Taxes
account.tax
@@ -456,7 +456,7 @@ this repository contains the full copyright notices and license terms. -->
Rules
account.tax.rule
-
diff --git a/modules/account_be/account.py b/modules/account_be/account.py
index b2744ebd0f..a19c2dd952 100644
--- a/modules/account_be/account.py
+++ b/modules/account_be/account.py
@@ -125,7 +125,7 @@ class BEVATCustomerContext(ModelView):
fiscalyear = fields.Many2One(
'account.fiscalyear', "Fiscal Year", required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
@classmethod
diff --git a/modules/account_consolidation/account.py b/modules/account_consolidation/account.py
index 89e62b3815..f54dbfc4ab 100644
--- a/modules/account_consolidation/account.py
+++ b/modules/account_consolidation/account.py
@@ -93,7 +93,7 @@ class Invoice(metaclass=PoolMeta):
consolidation_company = fields.Many2One(
'company.company', "Consolidation Company",
domain=[
- ('party', '=', Eval('party')),
+ ('party', '=', Eval('party', -1)),
],
states={
'readonly': Eval('state') != 'draft',
diff --git a/modules/account_deposit/account.xml b/modules/account_deposit/account.xml
index 2c9eed520a..c1e4b6b890 100644
--- a/modules/account_deposit/account.xml
+++ b/modules/account_deposit/account.xml
@@ -27,7 +27,7 @@ this repository contains the full copyright notices and license terms. -->
account.move.line
diff --git a/modules/account_es/reporting_tax.py b/modules/account_es/reporting_tax.py
index 60fda8fdc8..07e477ce85 100644
--- a/modules/account_es/reporting_tax.py
+++ b/modules/account_es/reporting_tax.py
@@ -720,16 +720,16 @@ class ESVATBookContext(ModelView):
fiscalyear = fields.Many2One('account.fiscalyear', "Fiscal Year",
required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
start_period = fields.Many2One('account.period', "Start Period",
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('start_date', '<=', (Eval('end_period'), 'start_date')),
])
end_period = fields.Many2One('account.period', "End Period",
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('start_date', '>=', (Eval('start_period'), 'start_date'))
])
es_vat_book_type = fields.Selection([
diff --git a/modules/account_eu/account.py b/modules/account_eu/account.py
index afd469e901..a56eef38da 100644
--- a/modules/account_eu/account.py
+++ b/modules/account_eu/account.py
@@ -116,12 +116,12 @@ class ECSalesListContext(ModelView):
fiscalyear = fields.Many2One(
'account.fiscalyear', "Fiscal Year", required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
period = fields.Many2One(
'account.period', "Period",
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
])
@classmethod
diff --git a/modules/account_fr/account.py b/modules/account_fr/account.py
index c19f0e38d1..75e5e3f8f4 100644
--- a/modules/account_fr/account.py
+++ b/modules/account_fr/account.py
@@ -318,7 +318,7 @@ class FrFECStart(ModelView):
deferral_period = fields.Many2One(
'account.period', "Deferral Period", required=True,
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('type', '=', 'adjustment'),
],
help="The period to exclude which contains "
diff --git a/modules/account_invoice/account.py b/modules/account_invoice/account.py
index d925e3df1d..19eb41f129 100644
--- a/modules/account_invoice/account.py
+++ b/modules/account_invoice/account.py
@@ -91,7 +91,7 @@ class InvoiceSequence(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
])
period = fields.Many2One('account.period', 'Period',
domain=[
- ('fiscalyear', '=', Eval('fiscalyear')),
+ ('fiscalyear', '=', Eval('fiscalyear', -1)),
('type', '=', 'standard'),
])
in_invoice_sequence = fields.Many2One('ir.sequence.strict',
@@ -99,28 +99,28 @@ class InvoiceSequence(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
domain=[
('sequence_type', '=',
Id('account_invoice', 'sequence_type_account_invoice')),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
in_credit_note_sequence = fields.Many2One('ir.sequence.strict',
'Supplier Credit Note Sequence', required=True,
domain=[
('sequence_type', '=',
Id('account_invoice', 'sequence_type_account_invoice')),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
out_invoice_sequence = fields.Many2One('ir.sequence.strict',
'Customer Invoice Sequence', required=True,
domain=[
('sequence_type', '=',
Id('account_invoice', 'sequence_type_account_invoice')),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
out_credit_note_sequence = fields.Many2One('ir.sequence.strict',
'Customer Credit Note Sequence', required=True,
domain=[
('sequence_type', '=',
Id('account_invoice', 'sequence_type_account_invoice')),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
@classmethod
@@ -149,7 +149,7 @@ class MoveLine(metaclass=PoolMeta):
domain=[
('account', '=', Eval('account', -1)),
If(Bool(Eval('party')),
- ('party', '=', Eval('party')),
+ ('party', '=', Eval('party', -1)),
(),
),
],
diff --git a/modules/account_invoice/invoice.py b/modules/account_invoice/invoice.py
index f829628ace..8d4488452c 100644
--- a/modules/account_invoice/invoice.py
+++ b/modules/account_invoice/invoice.py
@@ -163,7 +163,8 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin, InvoiceReportMixin):
party_lang = fields.Function(fields.Char('Party Language'),
'on_change_with_party_lang')
invoice_address = fields.Many2One('party.address', 'Invoice Address',
- required=True, states=_states, domain=[('party', '=', Eval('party'))])
+ required=True, states=_states,
+ domain=[('party', '=', Eval('party', -1))])
currency = fields.Many2One('currency.currency', 'Currency', required=True,
states={
'readonly': (
@@ -2142,7 +2143,7 @@ class InvoicePaymentLine(ModelSQL):
line = fields.Many2One(
'account.move.line', "Payment Line", ondelete='CASCADE', required=True,
domain=[
- ('account', '=', Eval('invoice_account')),
+ ('account', '=', Eval('invoice_account', -1)),
['OR',
('party', '=', Eval('invoice_party', -1)),
('party', 'in', Eval('invoice_alternative_payees', [])),
@@ -3261,14 +3262,14 @@ class PaymentMethod(DeactivableMixin, ModelSQL, ModelView):
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
debit_account = fields.Many2One('account.account', "Debit Account",
required=True,
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
@classmethod
@@ -3427,9 +3428,9 @@ class PayInvoiceStart(ModelView):
payment_method = fields.Many2One(
'account.invoice.payment.method', "Payment Method", required=True,
domain=[
- ('company', '=', Eval('company')),
- ('debit_account', '!=', Eval('invoice_account')),
- ('credit_account', '!=', Eval('invoice_account')),
+ ('company', '=', Eval('company', -1)),
+ ('debit_account', '!=', Eval('invoice_account', -1)),
+ ('credit_account', '!=', Eval('invoice_account', -1)),
],
depends={'amount'})
date = fields.Date('Date', required=True)
@@ -3456,7 +3457,7 @@ class PayInvoiceAsk(ModelView):
writeoff = fields.Many2One(
'account.move.reconcile.write_off', "Write Off",
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
states={
'invisible': Eval('type') != 'writeoff',
diff --git a/modules/account_payment/account.py b/modules/account_payment/account.py
index 0e893b312b..70280398f3 100644
--- a/modules/account_payment/account.py
+++ b/modules/account_payment/account.py
@@ -801,7 +801,7 @@ class StatementLine(metaclass=PoolMeta):
cls.related_to.domain['account.payment'] = [
('company', '=', Eval('company', -1)),
If(Bool(Eval('party')),
- ('party', '=', Eval('party')),
+ ('party', '=', Eval('party', -1)),
()),
('state', 'in', ['processing', 'succeeded', 'failed']),
If(Eval('second_currency'),
diff --git a/modules/account_payment/payment.xml b/modules/account_payment/payment.xml
index ddf3a91d76..1376a40ecc 100644
--- a/modules/account_payment/payment.xml
+++ b/modules/account_payment/payment.xml
@@ -350,7 +350,7 @@ this repository contains the full copyright notices and license terms. -->
Payments
account.payment
@@ -390,7 +390,7 @@ this repository contains the full copyright notices and license terms. -->
Payments
account.payment
Mandates
account.payment.sepa.mandate
diff --git a/modules/account_product/account.py b/modules/account_product/account.py
index 4398e8046b..398b0a8e21 100644
--- a/modules/account_product/account.py
+++ b/modules/account_product/account.py
@@ -14,14 +14,14 @@ class CreateChartProperties(metaclass=PoolMeta):
domain=[
('closed', '!=', True),
('type.expense', '=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
category_account_revenue = fields.Many2One(
'account.account', 'Default Revenue Account',
domain=[
('closed', '!=', True),
('type.revenue', '=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
diff --git a/modules/account_statement/journal.py b/modules/account_statement/journal.py
index 2c7d9f57f4..7db8e3a24a 100644
--- a/modules/account_statement/journal.py
+++ b/modules/account_statement/journal.py
@@ -46,7 +46,7 @@ class Journal(DeactivableMixin, ModelSQL, ModelView):
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('party_required', '=', False),
])
diff --git a/modules/account_statement/statement.py b/modules/account_statement/statement.py
index 715ea6ef0c..ad08e81837 100644
--- a/modules/account_statement/statement.py
+++ b/modules/account_statement/statement.py
@@ -764,7 +764,7 @@ class Line(origin_mixin(_states), sequence_ordered(), ModelSQL, ModelView):
],
[]),
If(Bool(Eval('account')),
- ('account', '=', Eval('account')),
+ ('account', '=', Eval('account', -1)),
()),
If(Eval('statement_state') == 'draft',
('state', '=', 'posted'),
diff --git a/modules/account_statement_rule/account.py b/modules/account_statement_rule/account.py
index 25ed887165..4b30098d85 100644
--- a/modules/account_statement_rule/account.py
+++ b/modules/account_statement_rule/account.py
@@ -72,7 +72,7 @@ class StatementRule(sequence_ordered(), ModelSQL, ModelView):
'account.statement.journal', "Journal",
domain=[
If(Eval('company'),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
()),
])
amount_low = Monetary(
@@ -292,7 +292,7 @@ class StatementRuleLine(sequence_ordered(), ModelSQL, ModelView):
account = fields.Many2One(
'account.account', "Account",
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('type', '!=', None),
],
states={
diff --git a/modules/account_stock_landed_cost/account.py b/modules/account_stock_landed_cost/account.py
index 9f9320f981..6637df3cd0 100644
--- a/modules/account_stock_landed_cost/account.py
+++ b/modules/account_stock_landed_cost/account.py
@@ -81,7 +81,7 @@ class LandedCost(Workflow, ModelSQL, ModelView, MatchMixin):
'readonly': Eval('state') != 'draft',
},
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('state', 'in', ['received', 'done']),
])
invoice_lines = fields.One2Many('account.invoice.line', 'landed_cost',
diff --git a/modules/attendance/attendance.py b/modules/attendance/attendance.py
index 8416b12155..c63896b48f 100644
--- a/modules/attendance/attendance.py
+++ b/modules/attendance/attendance.py
@@ -38,7 +38,7 @@ class Line(ModelSQL, ModelView):
'active_test': False,
},
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
['OR',
('start_date', '=', None),
('start_date', '<=', Eval('date', None)),
diff --git a/modules/commission_waiting/commission.py b/modules/commission_waiting/commission.py
index 56220e4251..7adb8f5d06 100644
--- a/modules/commission_waiting/commission.py
+++ b/modules/commission_waiting/commission.py
@@ -13,7 +13,7 @@ class Agent(metaclass=PoolMeta):
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
help="The account the agent's waiting commission amounts are posted "
"to.")
diff --git a/modules/party/address.py b/modules/party/address.py
index 77622fc714..506f64c00e 100644
--- a/modules/party/address.py
+++ b/modules/party/address.py
@@ -62,7 +62,7 @@ class Address(
identifiers = fields.One2Many(
'party.identifier', 'address', "Identifiers",
domain=[
- ('party', '=', Eval('party')),
+ ('party', '=', Eval('party', -1)),
('type', 'in', ['fr_siret']),
])
contact_mechanisms = fields.One2Many(
diff --git a/modules/product_price_list/price_list.xml b/modules/product_price_list/price_list.xml
index 79cc0c680a..b5c5580f64 100644
--- a/modules/product_price_list/price_list.xml
+++ b/modules/product_price_list/price_list.xml
@@ -20,7 +20,7 @@ this repository contains the full copyright notices and license terms. -->
Price Lists
product.price_list
+ eval="[('company', '=', Eval('company', -1))]" pyson="1"/>
diff --git a/modules/production/stock.py b/modules/production/stock.py
index 4dffb39887..2dddf79398 100644
--- a/modules/production/stock.py
+++ b/modules/production/stock.py
@@ -47,13 +47,13 @@ class Move(metaclass=PoolMeta):
__name__ = 'stock.move'
production_input = fields.Many2One(
'production', "Production Input", readonly=True, ondelete='CASCADE',
- domain=[('company', '=', Eval('company'))],
+ domain=[('company', '=', Eval('company', -1))],
states={
'invisible': ~Eval('production_input'),
})
production_output = fields.Many2One(
'production', "Production Output", readonly=True, ondelete='CASCADE',
- domain=[('company', '=', Eval('company'))],
+ domain=[('company', '=', Eval('company', -1))],
states={
'invisible': ~Eval('production_output'),
})
diff --git a/modules/project/work.py b/modules/project/work.py
index 4fb3c081dd..54cd1238d9 100644
--- a/modules/project/work.py
+++ b/modules/project/work.py
@@ -136,7 +136,7 @@ class Work(sequence_ordered(), tree(separator='\\'), ModelSQL, ModelView):
},
depends={'company'})
party_address = fields.Many2One('party.address', 'Contact Address',
- domain=[('party', '=', Eval('party'))],
+ domain=[('party', '=', Eval('party', -1))],
states={
'invisible': Eval('type') != 'project',
})
diff --git a/modules/purchase/product.py b/modules/purchase/product.py
index b2dcc11fb3..7cd4f08ef9 100644
--- a/modules/purchase/product.py
+++ b/modules/purchase/product.py
@@ -452,9 +452,9 @@ class ProductSupplier(
if operator.endswith('like') and is_full_text(operand):
code_value = lstrip_wildcard(operand)
domain = [bool_op,
- ('template', operator, operand, *extra),
- ('product', operator, operand, *extra),
- ('party', operator, operand, *extra),
+ ('template.rec_name', operator, operand, *extra),
+ ('product.rec_name', operator, operand, *extra),
+ ('party.rec_name', operator, operand, *extra),
('code', operator, code_value, *extra),
('name', operator, operand, *extra),
]
diff --git a/modules/purchase_blanket_agreement/purchase.py b/modules/purchase_blanket_agreement/purchase.py
index c0f7860bb4..cf05404aaa 100644
--- a/modules/purchase_blanket_agreement/purchase.py
+++ b/modules/purchase_blanket_agreement/purchase.py
@@ -475,8 +475,8 @@ class BlanketAgreementLine(ModelSQL, ModelView):
('product', '=', Eval('product')),
],
[]),
- ('party', '=', Eval('_parent_blanket_agreement', {}).get(
- 'supplier')),
+ ('party', '=',
+ Eval('_parent_blanket_agreement', {}).get('supplier', -1)),
],
states=_states)
product_uom_category = fields.Function(
diff --git a/modules/purchase_request_quotation/purchase.py b/modules/purchase_request_quotation/purchase.py
index 2aad251f17..1eacbcd23e 100644
--- a/modules/purchase_request_quotation/purchase.py
+++ b/modules/purchase_request_quotation/purchase.py
@@ -117,7 +117,7 @@ class Quotation(Workflow, ModelSQL, ModelView):
depends={'company'})
supplier_address = fields.Many2One('party.address', 'Supplier Address',
domain=[
- ('party', '=', Eval('supplier')),
+ ('party', '=', Eval('supplier', -1)),
])
lines = fields.One2Many('purchase.request.quotation.line', 'quotation',
'Lines', states={
diff --git a/modules/sale/sale.py b/modules/sale/sale.py
index 3709683cc2..40dbe39c19 100644
--- a/modules/sale/sale.py
+++ b/modules/sale/sale.py
@@ -161,7 +161,7 @@ class Sale(
shipment_address = fields.Many2One('party.address', 'Shipment Address',
domain=['OR',
('party', '=', If(Bool(Eval('shipment_party')),
- Eval('shipment_party'), Eval('party'))),
+ Eval('shipment_party', -1), Eval('party', -1))),
('warehouses', 'where', [
('id', '=', Eval('warehouse', -1)),
If(Eval('state').in_(['draft', 'quotation']),
diff --git a/modules/sale_advance_payment/sale.py b/modules/sale_advance_payment/sale.py
index 299deab18a..9ed254940f 100644
--- a/modules/sale_advance_payment/sale.py
+++ b/modules/sale_advance_payment/sale.py
@@ -164,7 +164,7 @@ class AdvancePaymentCondition(ModelSQL, ModelView):
'account.account', "Account", required=True,
domain=[
('type.unearned_revenue', '=', True),
- ('company', '=', Eval('sale_company')),
+ ('company', '=', Eval('sale_company', -1)),
],
states=_states)
block_supply = fields.Boolean("Block Supply", states=_states)
diff --git a/modules/sale_amendment/sale.py b/modules/sale_amendment/sale.py
index 32b7de66ec..cf1be1660c 100644
--- a/modules/sale_amendment/sale.py
+++ b/modules/sale_amendment/sale.py
@@ -255,9 +255,10 @@ class AmendmentLine(ModelSQL, ModelView):
shipment_address = fields.Many2One(
'party.address', "Shipment Address",
domain=['OR',
- ('party', '=', If(Eval('shipment_party'),
- Eval('shipment_party'), Eval('party'))),
- ('warehouses', '=', Eval('warehouse')),
+ ('party', '=',
+ If(Eval('shipment_party'),
+ Eval('shipment_party', -1), Eval('party', -1))),
+ ('warehouses', '=', Eval('warehouse', -1)),
],
states={
'readonly': Eval('state') != 'draft',
diff --git a/modules/sale_complaint/complaint.py b/modules/sale_complaint/complaint.py
index a3a3af1ee5..f0582d2a84 100644
--- a/modules/sale_complaint/complaint.py
+++ b/modules/sale_complaint/complaint.py
@@ -62,9 +62,9 @@ class Complaint(Workflow, ModelSQL, ModelView):
domain={
'sale.sale': [
If(Eval('customer'),
- ('party', '=', Eval('customer')),
+ ('party', '=', Eval('customer', -1)),
()),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('state', 'in', ['confirmed', 'processing', 'done']),
],
'sale.line': [
@@ -77,9 +77,9 @@ class Complaint(Workflow, ModelSQL, ModelView):
],
'account.invoice': [
If(Eval('customer'),
- ('party', '=', Eval('customer')),
+ ('party', '=', Eval('customer', -1)),
()),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
('type', '=', 'out'),
('state', 'in', ['posted', 'paid']),
],
diff --git a/modules/sale_opportunity/opportunity.py b/modules/sale_opportunity/opportunity.py
index 7be6494547..1611e09764 100644
--- a/modules/sale_opportunity/opportunity.py
+++ b/modules/sale_opportunity/opportunity.py
@@ -59,7 +59,7 @@ class SaleOpportunity(
depends=['party', 'company'])
address = fields.Many2One(
'party.address', "Address", states=_states_stop,
- domain=[('party', '=', Eval('party'))],
+ domain=[('party', '=', Eval('party', -1))],
help="The default address for the invoice and shipment.\n"
"Leave empty to use the default values.")
company = fields.Many2One(
@@ -88,7 +88,7 @@ class SaleOpportunity(
'readonly': _states_stop['readonly'],
'required': ~Eval('state').in_(['lead', 'lost', 'cancelled']),
},
- domain=[('company', '=', Eval('company'))])
+ domain=[('company', '=', Eval('company', -1))])
start_date = fields.Date("Start Date", required=True, states=_states_start)
end_date = fields.Date("End Date", states=_states_stop)
description = fields.Char('Description', states=_states_stop)
diff --git a/modules/sale_opportunity/party.xml b/modules/sale_opportunity/party.xml
index 2a23132768..5b2c86b190 100644
--- a/modules/sale_opportunity/party.xml
+++ b/modules/sale_opportunity/party.xml
@@ -13,7 +13,7 @@ this repository contains the full copyright notices and license terms. -->
Sales Leads/Opportunities
sale.opportunity
diff --git a/modules/sale_point/sale.py b/modules/sale_point/sale.py
index 233f8a74cb..4a3e5b3521 100644
--- a/modules/sale_point/sale.py
+++ b/modules/sale_point/sale.py
@@ -989,7 +989,7 @@ class POSPayment(ModelSQL, ModelView):
method = fields.Many2One(
'sale.point.payment.method', "Method", required=True,
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
If(Eval('amount', 0) < 0,
('cash', '=', True),
()),
@@ -1118,7 +1118,7 @@ class POSPaymentMethod(DeactivableMixin, ModelSQL, ModelView):
domain=[
('type', '!=', None),
('closed', '!=', True),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
])
cash = fields.Boolean("Cash")
diff --git a/modules/sale_price_list/sale.py b/modules/sale_price_list/sale.py
index 1fa2ff36c0..614487cb04 100644
--- a/modules/sale_price_list/sale.py
+++ b/modules/sale_price_list/sale.py
@@ -9,7 +9,7 @@ class Sale(metaclass=PoolMeta):
__name__ = 'sale.sale'
price_list = fields.Many2One('product.price_list', 'Price List',
help="Use to compute the unit price of lines.",
- domain=[('company', '=', Eval('company'))],
+ domain=[('company', '=', Eval('company', -1))],
states={
'readonly': Or(Not(Equal(Eval('state'), 'draft')),
Bool(Eval('lines', [0]))),
diff --git a/modules/sale_product_customer/sale.py b/modules/sale_product_customer/sale.py
index f121ea730a..97cb88cbd6 100644
--- a/modules/sale_product_customer/sale.py
+++ b/modules/sale_product_customer/sale.py
@@ -179,7 +179,7 @@ class BlanketAgreementLine(metaclass=PoolMeta):
],
[]),
('party', '=', Eval('_parent_blanket_agreement', {}).get(
- 'customer')),
+ 'customer', -1)),
],
states={
'readonly': Eval('agreement_state') != 'draft'
diff --git a/modules/sale_subscription/subscription.xml b/modules/sale_subscription/subscription.xml
index effbf4cb90..d197eb240c 100644
--- a/modules/sale_subscription/subscription.xml
+++ b/modules/sale_subscription/subscription.xml
@@ -77,7 +77,7 @@ this repository contains the full copyright notices and license terms. -->
Subscriptions
sale.subscription
diff --git a/modules/sale_supply_drop_shipment/purchase.py b/modules/sale_supply_drop_shipment/purchase.py
index 3f02aa5762..7ffee1d4f0 100644
--- a/modules/sale_supply_drop_shipment/purchase.py
+++ b/modules/sale_supply_drop_shipment/purchase.py
@@ -26,7 +26,7 @@ class Request(metaclass=PoolMeta):
},
depends={'company'})
delivery_address = fields.Many2One('party.address', 'Delivery Address',
- domain=[('party', '=', Eval('customer'))],
+ domain=[('party', '=', Eval('customer', -1))],
states={
'invisible': ~Eval('customer'),
'readonly': Eval('state') != 'draft',
@@ -72,7 +72,7 @@ class Purchase(metaclass=PoolMeta):
},
depends={'company'})
delivery_address = fields.Many2One('party.address', 'Delivery Address',
- domain=[('party', '=', Eval('customer'))],
+ domain=[('party', '=', Eval('customer', -1))],
states={
'readonly': Eval('state') != 'draft',
'invisible': ~Eval('customer'),
diff --git a/modules/sale_supply_drop_shipment/stock.py b/modules/sale_supply_drop_shipment/stock.py
index 729c018014..fc4781a596 100644
--- a/modules/sale_supply_drop_shipment/stock.py
+++ b/modules/sale_supply_drop_shipment/stock.py
@@ -89,7 +89,7 @@ class ShipmentDrop(
states={
'readonly': Eval('state') != 'draft',
},
- domain=[('party', '=', Eval('supplier'))])
+ domain=[('party', '=', Eval('supplier', -1))])
customer = fields.Many2One('party.party', 'Customer', required=True,
states={
'readonly': (((Eval('state') != 'draft')
@@ -105,10 +105,10 @@ class ShipmentDrop(
states={
'readonly': Eval('state') != 'draft',
},
- domain=[('party', '=', Eval('customer'))])
+ domain=[('party', '=', Eval('customer', -1))])
moves = fields.One2Many('stock.move', 'shipment', 'Moves',
domain=[
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
['OR',
[
('from_location.type', '=', 'supplier'),
diff --git a/modules/sale_supply_drop_shipment/stock.xml b/modules/sale_supply_drop_shipment/stock.xml
index dfe26dce03..e44bd1cd8f 100644
--- a/modules/sale_supply_drop_shipment/stock.xml
+++ b/modules/sale_supply_drop_shipment/stock.xml
@@ -191,7 +191,7 @@ this repository contains the full copyright notices and license terms. -->
Drop Shipments
stock.shipment.drop
diff --git a/modules/stock/shipment.py b/modules/stock/shipment.py
index 62a2fd1fca..a3d6212a6a 100644
--- a/modules/stock/shipment.py
+++ b/modules/stock/shipment.py
@@ -337,7 +337,8 @@ class ShipmentIn(
contact_address = fields.Many2One('party.address', 'Contact Address',
states={
'readonly': Eval('state') != 'draft',
- }, domain=[('party', '=', Eval('supplier'))],
+ },
+ domain=[('party', '=', Eval('supplier', -1))],
help="The address at which the supplier can be contacted.")
warehouse = fields.Many2One('stock.location', "Warehouse",
required=True, domain=[('type', '=', 'warehouse')],
@@ -397,7 +398,7 @@ class ShipmentIn(
('to_location', 'child_of',
[Eval('warehouse_input', -1)], 'parent'),
('to_location', '=', Eval('warehouse_input'))),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
states={
'readonly': (
@@ -418,7 +419,7 @@ class ShipmentIn(
Eval('warehouse')),
],
[],),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('to_location', 'ASC'),
@@ -434,7 +435,7 @@ class ShipmentIn(
'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many(
'stock.move', 'shipment', "Moves",
- domain=[('company', '=', Eval('company'))],
+ domain=[('company', '=', Eval('company', -1))],
states={
'readonly': True,
})
@@ -796,7 +797,7 @@ class ShipmentInReturn(ShipmentAssignMixin, Workflow, ModelSQL, ModelView):
'readonly': Eval('state') != 'draft',
},
domain=['OR',
- ('party', '=', Eval('supplier')),
+ ('party', '=', Eval('supplier', -1)),
('warehouses', 'where', [
('id', '=', Eval('warehouse', -1)),
If(Eval('state') == 'draft',
@@ -835,7 +836,7 @@ class ShipmentInReturn(ShipmentAssignMixin, Workflow, ModelSQL, ModelView):
[Eval('to_location', -1)], 'parent'),
],
[])),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('from_location', 'ASC'),
@@ -1160,7 +1161,7 @@ class ShipmentOut(
'readonly': Eval('state') != 'draft',
},
domain=['OR',
- ('party', '=', Eval('customer')),
+ ('party', '=', Eval('customer', -1)),
('warehouses', 'where', [
('id', '=', Eval('warehouse', -1)),
If(Eval('state') == 'draft',
@@ -1210,7 +1211,7 @@ class ShipmentOut(
If(~Eval('state').in_(['done', 'cancelled']),
('to_location', '=', Eval('customer_location')),
()),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('product', 'ASC'),
@@ -1235,7 +1236,7 @@ class ShipmentOut(
[Eval('warehouse_storage', -1)], 'parent'),
()),
('to_location', '=', Eval('warehouse_output')),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('from_location', 'ASC'),
@@ -1253,7 +1254,7 @@ class ShipmentOut(
'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many(
'stock.move', 'shipment', "Moves",
- domain=[('company', '=', Eval('company'))],
+ domain=[('company', '=', Eval('company', -1))],
states={
'readonly': True,
})
@@ -1882,7 +1883,8 @@ class ShipmentOutReturn(
'party.address', "Contact Address",
states={
'readonly': Eval('state') != 'draft',
- }, domain=[('party', '=', Eval('customer'))],
+ },
+ domain=[('party', '=', Eval('customer', -1))],
help="The address the customer can be contacted at.")
warehouse = fields.Many2One('stock.location', "Warehouse", required=True,
states={
@@ -1925,7 +1927,7 @@ class ShipmentOutReturn(
('to_location', 'child_of',
[Eval('warehouse_input', -1)], 'parent'),
('to_location', '=', Eval('warehouse_input'))),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('product', 'ASC'),
@@ -1949,7 +1951,7 @@ class ShipmentOutReturn(
Eval('warehouse')),
],
[]),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('to_location', 'ASC'),
@@ -1965,7 +1967,7 @@ class ShipmentOutReturn(
'get_inventory_moves', setter='set_inventory_moves')
moves = fields.One2Many(
'stock.move', 'shipment', "Moves",
- domain=[('company', '=', Eval('company'))],
+ domain=[('company', '=', Eval('company', -1))],
states={
'readonly': True,
})
@@ -2385,7 +2387,7 @@ class ShipmentInternal(
],
]),
[])),
- ('company', '=', Eval('company')),
+ ('company', '=', Eval('company', -1)),
],
order=[
('from_location', 'ASC'),
diff --git a/modules/web_user/user.xml b/modules/web_user/user.xml
index 1a9993ee99..b8358ba177 100644
--- a/modules/web_user/user.xml
+++ b/modules/web_user/user.xml
@@ -41,7 +41,7 @@ this repository contains the full copyright notices and license terms. -->
web.user
diff --git a/sao/src/common.js b/sao/src/common.js
index b268211d06..d53b749dc1 100644
--- a/sao/src/common.js
+++ b/sao/src/common.js
@@ -1873,13 +1873,13 @@
return;
}
}
+ if (['many2one', 'one2many', 'many2many', 'one2one',
+ 'many2many', 'one2one'].includes(field.type)) {
+ field_name += '.rec_name';
+ }
if (value instanceof Array) {
value = value.map(
v => this.convert_value(field, v, this.context));
- if (~['many2one', 'one2many', 'many2many', 'one2one',
- 'many2many', 'one2one'].indexOf(field.type)) {
- field_name += '.rec_name';
- }
} else {
value = this.convert_value(field, value, this.context);
}
diff --git a/sao/tests/sao.js b/sao/tests/sao.js
index 16f1320f8f..d2022bbe71 100644
--- a/sao/tests/sao.js
+++ b/sao/tests/sao.js
@@ -1961,14 +1961,26 @@
},
'relation': {
'string': "Relation",
- 'relation': 'relation',
'name': 'relation',
+ 'type': 'many2one',
'relation_fields': {
'name': {
'string': "Name",
'name': 'name',
'type': 'char',
},
+ 'm2o': {
+ 'string': "M2O",
+ 'name': 'm2o',
+ 'type': 'many2one',
+ 'relation_fields': {
+ 'foo': {
+ 'string': "Foo",
+ 'name': 'foo',
+ 'type': 'integer',
+ },
+ },
+ },
},
},
});
@@ -2029,12 +2041,19 @@
['OR', c(['name', 'ilike', '%John%']),
c(['name', 'ilike', '%Jane%'])
]],
- [[c(['Many2One', null, 'John'])], [['many2one', 'ilike', '%John%']]],
+ [[c(['Many2One', null, 'John'])],
+ [['many2one.rec_name', 'ilike', '%John%']]],
[[c(['Many2One', null, ['John', 'Jane']])],
[['many2one.rec_name', 'in', ['John', 'Jane']]]],
[[[c(['John'])]], [[['rec_name', 'ilike', '%John%']]]],
+ [[c(['Relation', null, 'John'])],
+ [['relation.rec_name', 'ilike', '%John%']]],
[[c(['Relation.Name', null, "Test"])],
[['relation.name', 'ilike', "%Test%"]]],
+ [[c(['Relation.M2O', null, "Foo"])],
+ [['relation.m2o.rec_name', 'ilike', "%Foo%"]]],
+ [[c(['Relation.M2O.Foo', null, "42"])],
+ [['relation.m2o.foo', '=', 42]]],
[[c(['OR'])], [['rec_name', 'ilike', "%OR%"]]],
[[c(['AND'])], [['rec_name', 'ilike', "%AND%"]]],
].forEach(function(test) {
diff --git a/tryton/tryton/common/domain_parser.py b/tryton/tryton/common/domain_parser.py
index 563149d39e..b369b3bb49 100644
--- a/tryton/tryton/common/domain_parser.py
+++ b/tryton/tryton/common/domain_parser.py
@@ -867,12 +867,13 @@ class DomainParser(object):
(field_name, '<=', rvalue),
])
continue
+ if field['type'] in {
+ 'many2one', 'one2many', 'many2many', 'one2one',
+ }:
+ field_name += '.rec_name'
if isinstance(value, list):
value = [convert_value(field, v, self.context)
for v in value]
- if field['type'] in ('many2one', 'one2many',
- 'many2many', 'one2one'):
- field_name += '.rec_name'
else:
value = convert_value(field, value, self.context)
if 'like' in operator:
diff --git a/tryton/tryton/tests/test_common_domain_parser.py b/tryton/tryton/tests/test_common_domain_parser.py
index c5144de52f..f9812ec343 100644
--- a/tryton/tryton/tests/test_common_domain_parser.py
+++ b/tryton/tryton/tests/test_common_domain_parser.py
@@ -956,14 +956,26 @@ class DomainParserTestCase(TestCase):
},
'relation': {
'string': "Relation",
- 'relation': 'relation',
'name': 'relation',
+ 'type': 'many2one',
'relation_fields': {
'name': {
'string': "Name",
'name': 'name',
'type': 'char',
},
+ 'm2o': {
+ 'string': "M2O",
+ 'name': 'm2o',
+ 'type': 'many2one',
+ 'relation_fields': {
+ 'foo': {
+ 'string': "Foo",
+ 'name': 'foo',
+ 'type': 'integer',
+ },
+ },
+ },
},
},
})
@@ -1088,7 +1100,7 @@ class DomainParserTestCase(TestCase):
])
self.assertEqual(
rlist(dom.parse_clause([('Many2One', None, 'John')])), [
- ('many2one', 'ilike', '%John%'),
+ ('many2one.rec_name', 'ilike', '%John%'),
])
self.assertEqual(
rlist(dom.parse_clause([('Many2One', None, ['John', 'Jane'])])), [
@@ -1097,9 +1109,18 @@ class DomainParserTestCase(TestCase):
self.assertEqual(
rlist(dom.parse_clause(iter([iter([['John']])]))), [
[('rec_name', 'ilike', '%John%')]])
+ self.assertEqual(
+ rlist(dom.parse_clause(iter([['Relation', None, "Test"]]))),
+ [('relation.rec_name', 'ilike', "%Test%")])
self.assertEqual(
rlist(dom.parse_clause(iter([['Relation.Name', None, "Test"]]))),
[('relation.name', 'ilike', "%Test%")])
+ self.assertEqual(
+ rlist(dom.parse_clause(iter([['Relation.M2O', None, "Foo"]]))),
+ [('relation.m2o.rec_name', 'ilike', "%Foo%")])
+ self.assertEqual(
+ rlist(dom.parse_clause(iter([['Relation.M2O.Foo', None, '42']]))),
+ [('relation.m2o.foo', '=', 42)])
self.assertEqual(
rlist(dom.parse_clause(iter([['OR']]))),
[('rec_name', 'ilike', "%OR%")])
diff --git a/trytond/trytond/model/fields/many2many.py b/trytond/trytond/model/fields/many2many.py
index 4283fc9e96..df7eb10319 100644
--- a/trytond/trytond/model/fields/many2many.py
+++ b/trytond/trytond/model/fields/many2many.py
@@ -1,5 +1,6 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+import warnings
from collections import defaultdict
from itertools import chain
@@ -455,6 +456,10 @@ class Many2Many(Field):
return expression
else:
if isinstance(value, str):
+ if not operator.endswith('where'):
+ warnings.warn(
+ f"Missing target field "
+ f"in operand of domain {domain}")
target_name = 'rec_name'
else:
target_name = 'id'
diff --git a/trytond/trytond/model/fields/many2one.py b/trytond/trytond/model/fields/many2one.py
index bd70fbf390..3892ad11c3 100644
--- a/trytond/trytond/model/fields/many2one.py
+++ b/trytond/trytond/model/fields/many2one.py
@@ -1,5 +1,7 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+import warnings
+
from sql import As, Column, Expression, Literal, Query, With
from sql.aggregate import Max
from sql.conditionals import Coalesce
@@ -260,6 +262,8 @@ class Many2One(Field):
return super(Many2One, self).convert_domain(domain, tables,
Model)
else:
+ warnings.warn(
+ f"Missing target field in operand of domain {domain}")
target_name = 'rec_name'
else:
_, target_name = name.split('.', 1)
diff --git a/trytond/trytond/model/fields/one2many.py b/trytond/trytond/model/fields/one2many.py
index faa2a80a2f..e6ac02c2b5 100644
--- a/trytond/trytond/model/fields/one2many.py
+++ b/trytond/trytond/model/fields/one2many.py
@@ -1,5 +1,6 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
+import warnings
from collections import defaultdict
from itertools import chain
@@ -386,6 +387,10 @@ class One2Many(Field):
return expression
else:
if isinstance(value, str):
+ if not operator.endswith('where'):
+ warnings.warn(
+ f"Missing target field "
+ f"in operand of domain {domain}")
target_name = 'rec_name'
else:
target_name = 'id'
diff --git a/trytond/trytond/tests/test_field_many2many.py b/trytond/trytond/tests/test_field_many2many.py
index 5e080bb4e5..9e9948d2d8 100644
--- a/trytond/trytond/tests/test_field_many2many.py
+++ b/trytond/trytond/tests/test_field_many2many.py
@@ -34,7 +34,7 @@ class CommonTestCaseMixin:
}])
many2manys = Many2Many.search([
- ('targets', '=', "Target"),
+ ('targets.rec_name', '=', "Target"),
])
self.assertListEqual(many2manys, [many2many])
@@ -49,7 +49,7 @@ class CommonTestCaseMixin:
}])
many2manys = Many2Many.search([
- ('targets', '=', "Target"),
+ ('targets.rec_name', '=', "Target"),
])
self.assertListEqual(many2manys, [many2many])
@@ -63,7 +63,7 @@ class CommonTestCaseMixin:
}])
many2manys = Many2Many.search([
- ('targets', '!=', "Target"),
+ ('targets.rec_name', '!=', "Target"),
])
self.assertListEqual(many2manys, [])
@@ -110,7 +110,7 @@ class CommonTestCaseMixin:
}])
many2manys = Many2Many.search([
- ('targets', '!=', "Target"),
+ ('targets.rec_name', '!=', "Target"),
])
self.assertListEqual(many2manys, [no_link])
diff --git a/trytond/trytond/tests/test_field_one2many.py b/trytond/trytond/tests/test_field_one2many.py
index 74e714ca92..d336195946 100644
--- a/trytond/trytond/tests/test_field_one2many.py
+++ b/trytond/trytond/tests/test_field_one2many.py
@@ -20,7 +20,7 @@ class SearchTestCaseMixin:
}])
one2manys = One2Many.search([
- ('targets', '=', "Target"),
+ ('targets.rec_name', '=', "Target"),
])
self.assertListEqual(one2manys, [one2many])
@@ -35,7 +35,7 @@ class SearchTestCaseMixin:
}])
one2manys = One2Many.search([
- ('targets', '=', "Target"),
+ ('targets.rec_name', '=', "Target"),
])
self.assertListEqual(one2manys, [one2many])
@@ -49,7 +49,7 @@ class SearchTestCaseMixin:
}])
one2manys = One2Many.search([
- ('targets', '!=', "Target"),
+ ('targets.rec_name', '!=', "Target"),
])
self.assertListEqual(one2manys, [])
@@ -96,7 +96,7 @@ class SearchTestCaseMixin:
}])
one2manys = One2Many.search([
- ('targets', '!=', "Target"),
+ ('targets.rec_name', '!=', "Target"),
])
self.assertListEqual(one2manys, [no_link])
diff --git a/trytond/trytond/tests/test_field_one2one.py b/trytond/trytond/tests/test_field_one2one.py
index 82078c6f4e..b249b3e33c 100644
--- a/trytond/trytond/tests/test_field_one2one.py
+++ b/trytond/trytond/tests/test_field_one2one.py
@@ -140,7 +140,7 @@ class FieldOne2OneTestCase(TestCase):
}])
one2ones = One2One.search([
- ('one2one', '=', "Target"),
+ ('one2one.rec_name', '=', "Target"),
])
self.assertListEqual(one2ones, [one2one])
@@ -157,7 +157,7 @@ class FieldOne2OneTestCase(TestCase):
}])
one2ones = One2One.search([
- ('one2one', '!=', "Target"),
+ ('one2one.rec_name', '!=', "Target"),
])
self.assertListEqual(one2ones, [])