@ -9,7 +9,7 @@ from psycopg2 import ProgrammingError
from odoo import SUPERUSER_ID , _ , api , fields , models
from odoo.exceptions import UserError
from odoo.tools import pycompat , sql
from odoo.tools import pycompat , sql , table_columns
from odoo.tools.safe_eval import safe_eval
from odoo.addons.base.models.ir_model import IrModel
@ -726,6 +726,40 @@ class BiSQLView(models.Model):
self . _log_execute ( req )
sql_view . size = self . env . cr . fetchone ( ) [ 0 ]
def check_manual_fields ( self , model ) :
# check the fields we need are defined on self, to stop it going
# early on install / startup - particularly problematic during upgrade
if " group_operator " in table_columns (
self . env . cr , " bi_sql_view_field "
) and model . _name . startswith ( self . _model_prefix ) :
# Use SQL instead of ORM, as ORM might not be fully initialised -
# we have no control over the order that fields are defined!
# We are not concerned about user security rules.
self . env . cr . execute (
"""
SELECT
f . name ,
f . ttype ,
f . group_operator
FROM
bi_sql_view v
LEFT JOIN bi_sql_view_field f ON f . bi_sql_view_id = v . id
WHERE
v . model_name = % s
;
""" ,
( model . _name , ) ,
)
sql_fields = self . env . cr . fetchall ( )
for sql_field in sql_fields :
if (
sql_field [ 0 ] in model . _fields
and sql_field [ 1 ] in ( " integer " , " float " )
and sql_field [ 2 ]
) :
model . _fields [ sql_field [ 0 ] ] . group_operator = sql_field [ 2 ]
def button_preview_sql_expression ( self ) :
self . button_validate_sql_expression ( )
res = self . _execute_sql_request ( )