77
88from dateutil .relativedelta import relativedelta
99
10- from odoo import _ , api , fields , models
10+ from odoo import _ , api , fields , http , models
1111from odoo .exceptions import UserError
1212
1313from odoo .addons .web .controllers .export import CSVExport , ExcelExport
1414
1515
16+ class FakeRequest :
17+ def __init__ (self , env ):
18+ self .env = env
19+ self .context = env .context
20+ self .session = {}
21+
22+
1623class DelayExport (models .Model ):
1724 _name = "delay.export"
1825 _description = "Asynchronous Export"
@@ -28,7 +35,13 @@ def delay_export(self, data):
2835 params = json .loads (data .get ("data" ))
2936 if not self .env .user .email :
3037 raise UserError (_ ("You must set an email address to your user." ))
31- self .with_delay ().export (params )
38+
39+ # Push a fake request into Odoo's local stack
40+ http ._request_stack .push (FakeRequest (self .env ))
41+ try :
42+ self .with_delay ().export (params )
43+ finally :
44+ http ._request_stack .pop ()
3245
3346 @api .model
3447 def _get_file_content (self , params ):
@@ -58,11 +71,8 @@ def _get_file_content(self, params):
5871 columns_headers = [val ["label" ].strip () for val in fields_name ]
5972
6073 if export_format == "csv" :
61- csv = CSVExport ()
62- return csv .from_data (columns_headers , import_data )
63- else :
64- xls = ExcelExport ()
65- return xls .from_data (columns_headers , import_data )
74+ return CSVExport ().from_data (columns_headers , import_data )
75+ return ExcelExport ().from_data (columns_headers , import_data )
6676
6777 @api .model
6878 def export (self , params ):
0 commit comments