8
8
from collections import defaultdict
9
9
10
10
from odoo import _ , api , exceptions , fields , models
11
+ from odoo import SUPERUSER_ID
11
12
12
13
_logger = logging .getLogger (__name__ )
13
14
@@ -36,13 +37,11 @@ class EDIExchangeRecord(models.Model):
36
37
direction = fields .Selection (related = "type_id.direction" )
37
38
backend_id = fields .Many2one (comodel_name = "edi.backend" , required = True )
38
39
model = fields .Char (index = True , required = False , readonly = True )
39
- res_id = fields .Many2oneReference (
40
- string = "Record" ,
40
+ res_id = fields .Integer (
41
+ string = "Record ID " ,
41
42
index = True ,
42
43
required = False ,
43
44
readonly = True ,
44
- model_field = "model" ,
45
- copy = False ,
46
45
)
47
46
related_record_exists = fields .Boolean (compute = "_compute_related_record_exists" )
48
47
related_name = fields .Char (compute = "_compute_related_name" , compute_sudo = True )
@@ -53,8 +52,6 @@ class EDIExchangeRecord(models.Model):
53
52
exchanged_on = fields .Datetime (
54
53
string = "Exchanged on" ,
55
54
help = "Sent or received on this date." ,
56
- compute = "_compute_exchanged_on" ,
57
- store = True ,
58
55
readonly = False ,
59
56
)
60
57
edi_exchange_state = fields .Selection (
@@ -125,15 +122,15 @@ def _compute_related_name(self):
125
122
related_record = rec .record
126
123
rec .related_name = related_record .display_name if related_record else ""
127
124
128
- @api .depends ("model" , "type_id" )
125
+ @api .depends ("model" , "type_id" , "res_id" )
129
126
def _compute_exchange_filename (self ):
130
127
for rec in self :
131
128
if not rec .type_id :
132
129
continue
133
130
if not rec .exchange_filename :
134
131
rec .exchange_filename = rec .type_id ._make_exchange_filename (rec )
135
132
136
- @api .depends ("edi_exchange_state" )
133
+ @api .constrains ("edi_exchange_state" )
137
134
def _compute_exchanged_on (self ):
138
135
for rec in self :
139
136
if rec .edi_exchange_state in ("input_received" , "output_sent" ):
@@ -355,8 +352,7 @@ def action_open_related_exchanges(self):
355
352
self .ensure_one ()
356
353
if not self .related_exchange_ids :
357
354
return {}
358
- xmlid = "edi_oca.act_open_edi_exchange_record_view"
359
- action = self .env ["ir.actions.act_window" ]._for_xml_id (xmlid )
355
+ action = self .env .ref ("edi_oca.act_open_edi_exchange_record_view" )
360
356
action ["domain" ] = [("id" , "in" , self .related_exchange_ids .ids )]
361
357
return action
362
358
@@ -372,7 +368,7 @@ def notify_action_complete(self, action, message=None):
372
368
self ._notify_related_record (message )
373
369
374
370
# Trigger generic action complete event on exchange record
375
- event_name = f" { action } _complete"
371
+ event_name = "{ }_complete". format ( action )
376
372
self ._trigger_edi_event (event_name )
377
373
if self .related_record_exists :
378
374
# Trigger specific event on related record
@@ -453,8 +449,8 @@ def _search(
453
449
count = False ,
454
450
access_rights_uid = access_rights_uid ,
455
451
)
456
- if self .env . is_system () :
457
- # restrictions do not apply to group "Settings"
452
+ if self ._uid == SUPERUSER_ID :
453
+ # rules do not apply for the superuser
458
454
return len (ids ) if count else ids
459
455
460
456
# TODO highlight orphaned EDI records in UI:
@@ -531,7 +527,7 @@ def check_access_rule(self, operation):
531
527
"""In order to check if we can access a record, we are checking if we can access
532
528
the related document"""
533
529
super (EDIExchangeRecord , self ).check_access_rule (operation )
534
- if self .env . is_superuser () :
530
+ if self ._uid == SUPERUSER_ID :
535
531
return
536
532
default_checker = self .env ["edi.exchange.consumer.mixin" ].get_edi_access
537
533
by_model_rec_ids = defaultdict (set )
@@ -546,7 +542,7 @@ def check_access_rule(self, operation):
546
542
)
547
543
548
544
for model , rec_ids in by_model_rec_ids .items ():
549
- records = self .env [model ].browse (rec_ids ).with_user (self ._uid )
545
+ records = self .env [model ].browse (rec_ids ).sudo (self ._uid )
550
546
checker = by_model_checker [model ]
551
547
for record in records :
552
548
check_operation = checker (
0 commit comments