summaryrefslogtreecommitdiff
path: root/addons/sale/models/res_partner.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/sale/models/res_partner.py')
-rw-r--r--addons/sale/models/res_partner.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/addons/sale/models/res_partner.py b/addons/sale/models/res_partner.py
new file mode 100644
index 00000000..d77abad7
--- /dev/null
+++ b/addons/sale/models/res_partner.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+from odoo.addons.base.models.res_partner import WARNING_MESSAGE, WARNING_HELP
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ sale_order_count = fields.Integer(compute='_compute_sale_order_count', string='Sale Order Count')
+ sale_order_ids = fields.One2many('sale.order', 'partner_id', 'Sales Order')
+ sale_warn = fields.Selection(WARNING_MESSAGE, 'Sales Warnings', default='no-message', help=WARNING_HELP)
+ sale_warn_msg = fields.Text('Message for Sales Order')
+
+ def _compute_sale_order_count(self):
+ # 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'])
+
+ sale_order_groups = self.env['sale.order'].read_group(
+ domain=[('partner_id', 'in', all_partners.ids)],
+ fields=['partner_id'], groupby=['partner_id']
+ )
+ partners = self.browse()
+ for group in sale_order_groups:
+ partner = self.browse(group['partner_id'][0])
+ while partner:
+ if partner in self:
+ partner.sale_order_count += group['partner_id_count']
+ partners |= partner
+ partner = partner.parent_id
+ (self - partners).sale_order_count = 0
+
+ def can_edit_vat(self):
+ ''' Can't edit `vat` if there is (non draft) issued SO. '''
+ can_edit_vat = super(ResPartner, self).can_edit_vat()
+ if not can_edit_vat:
+ return can_edit_vat
+ SaleOrder = self.env['sale.order']
+ has_so = SaleOrder.search([
+ ('partner_id', 'child_of', self.commercial_partner_id.id),
+ ('state', 'in', ['sent', 'sale', 'done'])
+ ], limit=1)
+ return can_edit_vat and not bool(has_so)