diff --git a/addons/point_of_sale/models/res_partner.py b/addons/point_of_sale/models/res_partner.py index a0246c6fadb..e2a8de5f9e4 100644 --- a/addons/point_of_sale/models/res_partner.py +++ b/addons/point_of_sale/models/res_partner.py @@ -15,10 +15,33 @@ class ResPartner(models.Model): pos_order_ids = fields.One2many('pos.order', 'partner_id', readonly=True) def _compute_pos_order(self): - partners_data = self.env['pos.order'].read_group([('partner_id', 'in', self.ids)], ['partner_id'], ['partner_id']) - mapped_data = dict([(partner['partner_id'][0], partner['partner_id_count']) for partner in partners_data]) - for partner in self: - partner.pos_order_count = mapped_data.get(partner.id, 0) + # retrieve all children partners and prefetch 'parent_id' on them + all_partners = self.with_context(active_test=False).search([('id', 'child_of', self.ids)]) + all_partners.read(['parent_id']) + + pos_order_data = self.env['pos.order'].read_group( + domain=[('partner_id', 'in', all_partners.ids)], + fields=['partner_id'], groupby=['partner_id'] + ) + + self.pos_order_count = 0 + for group in pos_order_data: + partner = self.browse(group['partner_id'][0]) + while partner: + if partner in self: + partner.pos_order_count += group['partner_id_count'] + partner = partner.parent_id + + def action_view_pos_order(self): + ''' + This function returns an action that displays the pos orders from partner. + ''' + action = self.env.ref('point_of_sale.action_pos_pos_form').read()[0] + if self.is_company: + action['domain'] = [('partner_id.commercial_partner_id.id', '=', self.id)] + else: + action['domain'] = [('partner_id.id', '=', self.id)] + return action @api.model def create_from_ui(self, partner): diff --git a/addons/point_of_sale/views/res_partner_view.xml b/addons/point_of_sale/views/res_partner_view.xml index 2a35f808651..ef2ebe9645f 100644 --- a/addons/point_of_sale/views/res_partner_view.xml +++ b/addons/point_of_sale/views/res_partner_view.xml @@ -8,8 +8,8 @@
-