This question has been flagged
5 Replies
8275 Views

In Odoo 11 CE, I am trying to customise the Payslip object, "hr.payslip", which has a One2Many relation with the object "hr.payslip.lines" through the field "line_ids".

I have added a custom field to the object hr.payslip.


net_pay = fields.Float(string='Net Pay', related='line_ids.total', domain=[('line_ids.code', 'ilike', "NET")])


The aim of this field is to fetch the value from the field 'total' in the hr.payslip.line where the field 'code' is set to "NET".  There is only one line per payslip with this code.

The problem I'm having is that the domain does not seem to be applied and the net_pay is just returning the 'total' value from the first line (which has the code "GROSS"), and not excluding lines that have a code different to "NET".

What am I doing wrong?

Avatar
Discard
Author

EDITED:

I thought I found the answer to my question thanks to this answer by Lan Pham at stackoverflow

https://stackoverflow.com/questions/59534725/odoo-domain-not-working-with-a-related-field

But the code below doesn't fetch the 'amount' from the payslip.line with code 'NET' for the relevant payslip. It seems to get the first possible value from the hr.payslip.line table.

net_pay = fields.Float(string='Net Pay', compute='_get_netpay')

@api.multi

def _get_netpay(self):

for line in self:

line.net_pay = self.env['hr.payslip.line'].search([('code', '=', "NET")], limit=1).amount

How can I make the "net_pay' field fetch from the line that belongs to the payslip?

Best Answer

Hi @Bill

Sorry but what you wanna do it's out of the scope of related field and their domain that only will be applied to relational fields, o2m, m2m, m2o to provide a way to filter the values to select at the UI.

What you wanna do it's easily get it done with a computed field that you could program the whole logic to determine the value for the field

Avatar
Discard
Author

Hi Axel,

I thought I had it solved but the code above does not pull the 'amount' from the line that belongs to the relevant payslip. It's returning the same value regardless of which payslip I am looking at. Can you suggest how to fix it?

Author Best Answer

For a solution to achieve what I was hoping to do with related fields, but using computed fields instead (as suggested by Axel), see this thread:

https://www.odoo.com/fr_FR/forum/aide-1/question/how-can-i-filter-records-returned-from-a-computed-field-based-on-values-from-a-related-model-173568

Avatar
Discard

That link is an answer of a very different and specific question. The one on this post was a wrong usage of the domain on a non filterable field

Author

Yes, you're right Axel. I didn't mean to suggest you hadn't been helpful. I've edited the parts that I can and marked your answer as the best one.