Odoo Mindscape. Understand Odoo faster. Explore modules, fields, dependencies and version differences in one place instead of digging through the source code.

Module: Point of Sale - Coupons & Loyalty

Entity: loyalty.program

Compute Method: _compute_pos_order_count

Inputs Method Outputs
  • id
query = """
            SELECT program.id, SUM(orders_count)
            FROM loyalty_program program
                JOIN loyalty_reward reward ON reward.program_id = program.id
                JOIN LATERAL (
                    SELECT COUNT(DISTINCT orders.id) AS orders_count
                    FROM pos_order orders
                        JOIN pos_order_line order_lines ON order_lines.order_id = orders.id
                        WHERE order_lines.reward_id = reward.id
                ) agg ON TRUE
                WHERE program.id = ANY(%s)
                    GROUP BY program.id
                """
self.env.cr.execute(query, (self.ids,))
res = self.env.cr.dictfetchall()
res = {k['id']: k['sum'] for k in res}
for rec in self:
            rec.pos_order_count = res.get(rec.id) or 0

Back to entity