I am facing an issue while trying to define an action server in Odoo14. The objective is to call a Python method that returns a window action because I need to access fields in the current model and pass them to the context. Unfortunately, directly using a window action with a context that calls fields doesn't seem to be working as expected. Below is the code snippet I am using:
XML Code:
<odoo><record id="action_add_supplier_payment_bank_statement_line_new" model="ir.actions.server">
<field name="name">Créer un paiement</field>
<field name="model_id" ref="account.model_account_bank_statement_line"/>
<field name="binding_model_id" ref="account.model_account_bank_statement_line"/>
<field name="state">code</field>
<field name="binding_view_types">list</field>
<field name="code">action = model.action_payment_bank_statement_line()</field>
</record>
</odoo>
Python Method:
def action_payment_bank_statement_line(self): action_ref = 'account.view_account_payment_form' print(action_ref) action = self.env['ir.actions.act_window']._for_xml_id(action_ref) action['context'] = { 'default_payment_type': 'outbound', 'default_partner_type': 'customer', 'default_ref': self.payment_ref, 'default_amount': self.amount, 'default_date': datetime.strptime(self.date, '%Y-%m-%d') } action['view_mode'] = 'form' action['target'] = 'new' return action
However, I'm encountering the following error when I click on action button:
result = request.dispatch() File "/opt/odoo14/odoo/odoo/http.py", line 696, in dispatch result = self._call_function(**self.params) File "/opt/odoo14/odoo/odoo/http.py", line 370, in _call_function return checked_call(self.db, *args, **kwargs) File "/opt/odoo14/odoo/odoo/service/model.py", line 94, in wrapper return f(dbname, *args, **kwargs) File "/opt/odoo14/odoo/odoo/http.py", line 358, in checked_call result = self.endpoint(*a, **kw) File "/opt/odoo14/odoo/odoo/http.py", line 919, in __call__ return self.method(*args, **kw) File "/opt/odoo14/odoo/odoo/http.py", line 544, in response_wrap response = f(*args, **kw) File "/opt/odoo14/odoo/addons/web/controllers/main.py", line 1728, in run result = action.run() File "/opt/odoo14/odoo/odoo/addons/base/models/ir_actions.py", line 632, in run res = runner(run_self, eval_context=eval_context) File "/opt/odoo14/odoo/addons/website/models/ir_actions.py", line 61, in _run_action_code_multi res = super(ServerAction, self)._run_action_code_multi(eval_context) File "/opt/odoo14/odoo/odoo/addons/base/models/ir_actions.py", line 501, in _run_action_code_multi safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True) # nocopy allows to return 'action' File "/opt/odoo14/odoo/odoo/tools/safe_eval.py", line 347, in safe_eval raise ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr)) Exception The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/opt/odoo14/odoo/odoo/http.py", line 652, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo14/odoo/odoo/http.py", line 317, in _handle_exception raise exception.with_traceback(None) from new_cause ValueError: : "" while evaluating 'action = record.action_payment_bank_statement_line()'
I would appreciate any assistance in identifying and correcting the issue in the code, or any alternative suggestions for defining the action server correctly.