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 = """
                WITH reward_to_orders_count AS (
                 SELECT reward.id                    AS lr_id,
                        COUNT(DISTINCT pos_order.id) AS orders_count
                   FROM pos_order_line line
                   JOIN pos_order ON line.order_id = pos_order.id
                   JOIN loyalty_reward reward ON line.reward_id = reward.id
               GROUP BY lr_id
              ),
              program_to_reward AS (
                 SELECT reward.id  AS reward_id,
                        program.id AS program_id
                   FROM loyalty_program program
                   JOIN loyalty_reward reward ON reward.program_id = program.id
                  WHERE program.id = ANY (%s)
              )
       SELECT program_to_reward.program_id,
              SUM(reward_to_orders_count.orders_count)
         FROM program_to_reward
    LEFT JOIN reward_to_orders_count ON reward_to_orders_count.lr_id = program_to_reward.reward_id
     GROUP BY program_to_reward.program_id
                """
self._cr.execute(query, (self.ids,))
res = self._cr.dictfetchall()
res = {k['program_id']: k['sum'] for k in res}
for rec in self:
            rec.pos_order_count = res.get(rec.id) or 0

Back to entity