68 lines
3.1 KiB
Python
68 lines
3.1 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import api, fields, models
|
||
|
from odoo.addons.base.models.res_partner import WARNING_MESSAGE, WARNING_HELP
|
||
|
|
||
|
|
||
|
class res_partner(models.Model):
|
||
|
_name = 'res.partner'
|
||
|
_inherit = 'res.partner'
|
||
|
|
||
|
def _compute_purchase_order_count(self):
|
||
|
# retrieve all children partners and prefetch 'parent_id' on them
|
||
|
all_partners = self.with_context(active_test=False).search_fetch(
|
||
|
[('id', 'child_of', self.ids)],
|
||
|
['parent_id'],
|
||
|
)
|
||
|
purchase_order_groups = self.env['purchase.order']._read_group(
|
||
|
domain=[('partner_id', 'in', all_partners.ids)],
|
||
|
groupby=['partner_id'], aggregates=['__count'],
|
||
|
)
|
||
|
self_ids = set(self._ids)
|
||
|
|
||
|
self.purchase_order_count = 0
|
||
|
for partner, count in purchase_order_groups:
|
||
|
while partner:
|
||
|
if partner.id in self_ids:
|
||
|
partner.purchase_order_count += count
|
||
|
partner = partner.parent_id
|
||
|
|
||
|
def _compute_supplier_invoice_count(self):
|
||
|
# retrieve all children partners and prefetch 'parent_id' on them
|
||
|
all_partners = self.with_context(active_test=False).search_fetch(
|
||
|
[('id', 'child_of', self.ids)],
|
||
|
['parent_id'],
|
||
|
)
|
||
|
supplier_invoice_groups = self.env['account.move']._read_group(
|
||
|
domain=[('partner_id', 'in', all_partners.ids),
|
||
|
('move_type', 'in', ('in_invoice', 'in_refund'))],
|
||
|
groupby=['partner_id'], aggregates=['__count']
|
||
|
)
|
||
|
self_ids = set(self._ids)
|
||
|
|
||
|
self.supplier_invoice_count = 0
|
||
|
for partner, count in supplier_invoice_groups:
|
||
|
while partner:
|
||
|
if partner.id in self_ids:
|
||
|
partner.supplier_invoice_count += count
|
||
|
partner = partner.parent_id
|
||
|
|
||
|
@api.model
|
||
|
def _commercial_fields(self):
|
||
|
return super(res_partner, self)._commercial_fields()
|
||
|
|
||
|
property_purchase_currency_id = fields.Many2one(
|
||
|
'res.currency', string="Supplier Currency", company_dependent=True,
|
||
|
help="This currency will be used, instead of the default one, for purchases from the current partner")
|
||
|
purchase_order_count = fields.Integer(compute='_compute_purchase_order_count', string='Purchase Order Count')
|
||
|
supplier_invoice_count = fields.Integer(compute='_compute_supplier_invoice_count', string='# Vendor Bills')
|
||
|
purchase_warn = fields.Selection(WARNING_MESSAGE, 'Purchase Order', help=WARNING_HELP, default="no-message")
|
||
|
purchase_warn_msg = fields.Text('Message for Purchase Order')
|
||
|
|
||
|
receipt_reminder_email = fields.Boolean('Receipt Reminder', default=False, company_dependent=True,
|
||
|
help="Automatically send a confirmation email to the vendor X days before the expected receipt date, asking him to confirm the exact date.")
|
||
|
reminder_date_before_receipt = fields.Integer('Days Before Receipt', default=1, company_dependent=True,
|
||
|
help="Number of days to send reminder email before the promised receipt date")
|
||
|
buyer_id = fields.Many2one('res.users', string='Buyer')
|