diff options
Diffstat (limited to 'addons/sale/models/res_partner.py')
| -rw-r--r-- | addons/sale/models/res_partner.py | 45 |
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) |
