This module was moved from enterprise to community and now includes pos_coupon and pos_gift_card aswell. TaskId-2675382
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import _, fields, models
|
|
from odoo.tools import unique
|
|
|
|
class LoyaltyProgram(models.Model):
|
|
_inherit = 'loyalty.program'
|
|
|
|
pos_config_ids = fields.Many2many('pos.config', string="Point of Sales", readonly=True)
|
|
pos_order_count = fields.Integer("PoS Order Count", compute='_compute_pos_order_count')
|
|
|
|
def _compute_pos_order_count(self):
|
|
read_group_res = self.env['pos.order.line']._read_group(
|
|
[('reward_id', 'in', self.reward_ids.ids)], ['reward_id:array_agg'], ['order_id'])
|
|
for program in self:
|
|
program_reward_ids = program.reward_ids.ids
|
|
program.pos_order_count = sum(1 if any(id in group['reward_id'] for id in program_reward_ids) else 0 for group in read_group_res)
|
|
|
|
def _compute_total_order_count(self):
|
|
super()._compute_total_order_count()
|
|
for program in self:
|
|
program.total_order_count += program.pos_order_count
|
|
|
|
def action_view_pos_orders(self):
|
|
self.ensure_one()
|
|
pos_order_ids = list(unique(r['order_id'] for r in\
|
|
self.env['pos.order.line'].search_read([('reward_id', 'in', self.reward_ids.ids)], fields=['order_id'])))
|
|
return {
|
|
'name': _("PoS Orders"),
|
|
'view_mode': 'tree,form',
|
|
'res_model': 'pos.order',
|
|
'type': 'ir.actions.act_window',
|
|
'domain': [('id', 'in', pos_order_ids)],
|
|
'context': dict(self._context, create=False),
|
|
}
|