summaryrefslogtreecommitdiff
path: root/addons/purchase/models/res_partner.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/purchase/models/res_partner.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/purchase/models/res_partner.py')
-rw-r--r--addons/purchase/models/res_partner.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/addons/purchase/models/res_partner.py b/addons/purchase/models/res_partner.py
new file mode 100644
index 00000000..8267e5a5
--- /dev/null
+++ b/addons/purchase/models/res_partner.py
@@ -0,0 +1,66 @@
+# -*- 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([('id', 'child_of', self.ids)])
+ all_partners.read(['parent_id'])
+
+ purchase_order_groups = self.env['purchase.order'].read_group(
+ domain=[('partner_id', 'in', all_partners.ids)],
+ fields=['partner_id'], groupby=['partner_id']
+ )
+ partners = self.browse()
+ for group in purchase_order_groups:
+ partner = self.browse(group['partner_id'][0])
+ while partner:
+ if partner in self:
+ partner.purchase_order_count += group['partner_id_count']
+ partners |= partner
+ partner = partner.parent_id
+ (self - partners).purchase_order_count = 0
+
+ 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([('id', 'child_of', self.ids)])
+ all_partners.read(['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'))],
+ fields=['partner_id'], groupby=['partner_id']
+ )
+ partners = self.browse()
+ for group in supplier_invoice_groups:
+ partner = self.browse(group['partner_id'][0])
+ while partner:
+ if partner in self:
+ partner.supplier_invoice_count += group['partner_id_count']
+ partners |= partner
+ partner = partner.parent_id
+ (self - partners).supplier_invoice_count = 0
+
+ @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")