[FIX] *: handle null value for boolean in sql queries

It has always been a best effort until the v13 to have false as default value
for boolean field.
Until v13: https://github.com/odoo/odoo/blob/12.0/odoo/models.py#L3645

During ORM refactoring in v13 it has been replaced by a default value in sql
From v13: https://github.com/odoo/odoo/blob/13.0/odoo/tools/sql.py#L79

But with a typo since columntype for boolean is bool and not boolean.
What's mean that in v13 we have a lot of null value for boolean (~=False)

In all cases, we try to be aware and check Falsy boolean with 'null or False'
(https://github.com/odoo/odoo/blob/13.0/odoo/osv/expression.py#L1230)

So we should do the same when we write pure sql in method bypassing the ORM.

closes odoo/odoo#53391

closes odoo/odoo#54458

Related: odoo/enterprise#11319
Related: odoo/enterprise#11838
X-original-commit: 118c9f6aafd423f415b2bbfcf8a9cfcd676d9b92
Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
This commit is contained in:
Jeremy Kersten
2020-07-14 15:52:59 +00:00
parent 92a7f8c13f
commit 76b2de42f4
5 changed files with 7 additions and 6 deletions
+1 -1
View File
@@ -248,7 +248,7 @@ class ResPartner(models.Model):
LEFT JOIN account_account_type act ON (a.user_type_id=act.id)
WHERE act.type IN ('receivable','payable')
AND account_move_line.partner_id IN %s
AND account_move_line.reconciled IS FALSE
AND account_move_line.reconciled IS NOT TRUE
""" + where_clause + """
GROUP BY account_move_line.partner_id, act.type
""", where_params)
+1 -1
View File
@@ -251,7 +251,7 @@ class Challenge(models.Model):
AND gg.user_id = ru.id
AND ru.id = log.create_uid
AND gg.write_date < log.create_date
AND gg.closed IS false
AND gg.closed IS NOT TRUE
AND gc.id IN %s
AND (gg.state = 'inprogress'
OR (gg.state = 'reached'
+1 -1
View File
@@ -57,7 +57,7 @@ class AccountFrFec(models.TransientModel):
WHERE
am.date < %s
AND am.company_id = %s
AND aat.include_initial_balance = 'f'
AND aat.include_initial_balance IS NOT TRUE
AND (aml.debit != 0 OR aml.credit != 0)
'''
# For official report: only use posted entries
+3 -2
View File
@@ -50,11 +50,12 @@ class Project(models.Model):
('timesheet_product_required_if_billable_and_timesheets', """
CHECK(
(allow_billable = 't' AND allow_timesheets = 't' AND timesheet_product_id IS NOT NULL)
OR (allow_billable = 'f')
OR (allow_timesheets = 'f')
OR (allow_billable IS NOT TRUE)
OR (allow_timesheets IS NOT TRUE)
OR (allow_billable IS NULL)
OR (allow_timesheets IS NULL)
)""", 'The timesheet product is required when the task can be billed and timesheets are allowed.'),
]
@api.depends('billable_type', 'allow_billable', 'sale_order_id', 'partner_id')
+1 -1
View File
@@ -126,7 +126,7 @@ class SurveyUserInput(models.Model):
LEFT OUTER JOIN survey_user_input previous_user_input
ON user_input.survey_id = previous_user_input.survey_id
AND previous_user_input.state = 'done'
AND previous_user_input.test_entry = False
AND previous_user_input.test_entry IS NOT TRUE
AND previous_user_input.id < user_input.id
AND (user_input.invite_token IS NULL OR user_input.invite_token = previous_user_input.invite_token)
AND (user_input.partner_id = previous_user_input.partner_id OR user_input.email = previous_user_input.email)