Skip to Content
Meniu
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Această întrebare a fost marcată
2 Răspunsuri
1418 Vizualizări

I created a custom app to add some fields to the project module (see code below).
I can succesfully load the app but when I open the project task I get the following error. How to resolve this?


-------- error -----------
AttributeError: 'project.task' object has no attribute '_compute_progress'

The above server error caused the following client error:

null


-------- code -----------

from odoo import fields, models, api


@api.depends("planned_effort", "realized", "kanban_state")

def _compute_progress(self):

    for record in self: 

        if record['kanban_state'] == 'done':

            record['progressed'] = 100

        elif record['planned_effort'] > 0: 

            record['progressed'] = round(record['realized'] / record['planned_effort'] * 100)

        else:

            record['progressed'] = 0


class ClassAdditionalFields(models.Model):

   _inherit = 'project.task'

   planned_effort = fields.Integer(string='Planned effort (hr)', default=1)

   realized = fields.Integer(string='Realized (hr)', default=0)

   progressed = fields.Integer(string='Task progress', compute="_compute_progress", readonly=True)

 

Imagine profil
Abandonează
Cel mai bun răspuns

Hi,

This is because you have defined the compute function outside of your class definition as global. Try to define your function under the class definition (see the code below) , this will solve this issue

class ClassAdditionalFields(models.Model):
_inherit = 'project.task'

planned_effort = fields.Integer(string='Planned effort (hr)', default=1)
realized = fields.Integer(string='Realized (hr)', default=0)
progressed = fields.Integer(string='Task progress', compute="_compute_progress", readonly=True)

@api.depends("planned_effort", "realized", "kanban_state")
def _compute_progress(self):
for record in self:
if record['kanban_state'] == 'done':
record['progressed'] = 100
elif record['planned_effort'] > 0:
record['progressed'] = round(record['realized'] / record['planned_effort'] * 100)
else:
record['progressed'] = 0

Hope this will help you

Thanks

Imagine profil
Abandonează
Autor Cel mai bun răspuns

Hi,

It worked! Thank you. 
Had the @api before under the class definition but forgot to have the same indent as the fields above. 
This indent together with placing the @api under the class definition made the difference.

Imagine profil
Abandonează
Related Posts Răspunsuri Vizualizări Activitate
3
aug. 25
2835
1
mai 25
2771
1
apr. 25
3740
1
apr. 25
4609
1
apr. 25
2043