Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
1 Odpovědět
1799 Zobrazení

I have added a new function to register a batch payment. When I am pressing it, its giving me the following error: 

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/odoo/src/odoo/odoo/http.py", line 654, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/odoo/src/odoo/odoo/http.py", line 301, in _handle_exception
    raise exception.with_traceback(None) from new_cause
ValueError: Expected singleton: account.payment(29747, 29748, 29749, 29750, 29751)

This is the code:

def action_register_payment(self):
_logger.info(f'\n\n\n START \n\n\n.')
action = self.mapped('slip_ids').action_register_payment()
_logger.info(f'\n\n\n Action {action}\n\n\n.')
payments = self.env['account.payment'].browse(action['res_ids'])
_logger.info(f'\n\n\n PAYMENT {payments}\n\n\n.')
batch_action = payments.with_context(payment_date = self.date_end).create_batch_payment()
_logger.info(f'\n\n\n batch_action {batch_action}\n\n\n.')
edit = self.write({'batch_payment_id': batch_action['res_id']})
_logger.info(f'\n\n\n EDit {edit}\n\n\n.')

return batch_action


On Odoo version 13 its working fine, but on Version 15 its not

Avatar
Zrušit
Nejlepší odpověď

Hi,

In order to fix this singleton error, you might want to loop through the actions and process them individually, because it returns multiple payments

Here's a possible way to handle multiple actions:


def action_register_payment(self):

_logger.info(f'\n\n\n START \n\n\n.')


actions = self.mapped('slip_ids').action_register_payment()


for action in actions:

payments = self.env['account.payment'].browse(action['res_ids'])

_logger.info(f'\n\n\n PAYMENT {payments}\n\n\n.')

batch_action = payments.with_context(payment_date=self.date_end).create_batch_payment()

_logger.info(f'\n\n\n batch_action {batch_action}\n\n\n.')

edit = self.write({'batch_payment_id': batch_action['res_id']})

_logger.info(f'\n\n\n EDit {edit}\n\n\n.')


return batch_action # This might need to be adjusted based on your requirements


You have to verify in which variable, you are getting multiple records and based on it, iterate it over the for loop to fix the issue.



further more, you can refer below links for more detailed explanation

Singleton Error In Odoo || Reason And Solution || How To Fix Singleton Error in Odoo


hope this will help you

thanks

Avatar
Zrušit
Autor

Thanks for your assistance, I tried to implement it and got this error:
TypeError: string indices must be integers

can you confirm from which line you are getting error?

Autor

This line : payments = self.env['account.payment'].browse(action['res_ids'])

Related Posts Odpovědi Zobrazení Aktivita
1
bře 15
5121
1
zář 23
3760
1
zář 15
6319
1
dub 24
2473
1
kvě 25
769