Le défi Octura Solutions
Vous avez trouvé le défi caché
Vous lisez le code source des sites que vous visitez. C'est exactement comme ça que nous pensons. Voici un vrai problème d'ingénierie Odoo. Résolvez-le, envoyez-le, et passez directement notre présélection habituelle.
Pourquoi ce défi existe
Nous construisons Odoo pour vivre, et nous recrutons des ingénieurs qui ouvrent le capot avant de demander le manuel. Un CV en dit peu sur la façon dont vous écrivez du code ORM correct et performant. Un patch en dit beaucoup. Voici donc un patch à écrire.
Le brief
Un client nous a transmis le champ calculé ci-dessous, tiré d'un module personnalisé Odoo 19. Il fonctionne sur un enregistrement isolé, mais en production il est lent sur les listes de commandes, et certains totaux de points sont faux. Trois défauts s'y cachent.
# models/sale_order.py (Odoo 19)
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
loyalty_points = fields.Integer(
string='Loyalty Points',
compute='_compute_loyalty_points',
store=True,
)
@api.depends('order_line.price_subtotal', 'partner_id')
def _compute_loyalty_points(self):
for order in self:
points = 0
for line in order.order_line:
product = self.env['product.product'].browse(line.product_id.id)
if product.loyalty_eligible:
points += int(line.price_subtotal / 10)
order.loyalty_points = points + order.partner_id.bonus_pointsVotre mission
- Identifier les trois défauts : un de performance, deux de correction. Expliquez précisément pourquoi chacun est un problème.
- Réécrire la méthode pour qu'elle soit correcte et qu'elle traite un recordset par lots (pas un accès par enregistrement).
- Expliquer en quelques phrases pourquoi votre version reste correcte sous des règles multi-sociétés et avec des lignes négatives (avoirs).
Pas de piège caché au-delà des trois défauts. Nous évaluons la justesse, le raisonnement ORM et la clarté, pas la longueur.
Comment soumettre
- Poussez votre solution dans un dépôt public ou un gist (la méthode corrigée plus votre explication écrite).
- Ouvrez le formulaire de candidature ci-dessous. Collez le lien dans le champ portfolio et votre raisonnement dans la lettre de motivation.
- Une bonne solution saute la présélection et passe directement à un échange technique avec notre équipe senior.
Vous préférez le courriel ? Écrivez à career@octurasolutions.com