[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:
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user