Search code examples
odooodoo-9

Optimizing code for better performance and quality


I have this calculation method that calculates 6 fields and total. It works. Question is how can I optimize it performance wise and code quality wise. Just want to get some suggestions on how to write better code.

def _ocnhange_date(self):
    date = datetime.datetime.now().strftime ("%Y-%m-%d %H:%M:%S")
    self.date = date
    self.drawer_potential = self.drawer_id.product_categ_price * self.drawer_qty
    self.flexible_potential = self.flexible_id.product_categ_price * self.flexible_qty
    self.runner_potential = self.runner_id.product_categ_price * self.runner_qty
    self.group_1_potential = self.group_1_id.product_categ_price * self.group_1_qty
    self.group_2_potential = self.group_2_id.product_categ_price * self.group_2_qty
    self.group_3_potential = self.group_3_id.product_categ_price * self.group_3_qty
    total = [self.drawer_potential,self.flexible_potential,self.runner_potential,self.group_1_potential,
             self.group_2_potential,self.group_3_potential]
    self.total_potentail = sum(total)

Solution

  • I only see two things you can improve here:

    1. Use Odoo's Datetime class to get "now" because it already takes Odoo's datetime format into consideration. In the end that's more maintainable, because if Odoo decides to change the whole format system wide, you have to change your method, too.

    2. Try to avoid so many assignments and instead use methods which allow a combined update of some values. For onchange methods this would be update() and for other value changes it's obviously write().

    def _onchange_date(self):
        self.update({
            'date': fields.Datetime.now(),
            'drawer_potential': self.drawer_id.product_categ_price * self.drawer_qty,
            'flexible_potential': self.flexible_id.product_categ_price * self.flexible_qty,
            # and so on
        })