diff --git a/purchase_stock_partner_default_picking_type/__init__.py b/purchase_stock_partner_default_picking_type/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/purchase_stock_partner_default_picking_type/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/purchase_stock_partner_default_picking_type/__manifest__.py b/purchase_stock_partner_default_picking_type/__manifest__.py new file mode 100644 index 0000000..5bada47 --- /dev/null +++ b/purchase_stock_partner_default_picking_type/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright (C) 2025 Akretion (https://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Purchase Stock Default Picking Type on Partner', + 'version': '16.0.1.0.0', + 'category': 'Purchases', + 'license': 'AGPL-3', + 'summary': 'Configure the default picking type for purchase orders on partners', + 'description': """ +Purchase Stock Default Picking Type on Partner +============================================== + +Allow to configure on partners the default picking type for purchase orders. + +Please contact Alexis de Lattre from Akretion for any help or question about this module. + """, + 'author': 'Akretion', + 'website': 'https://github.com/akretion/odoo-usability', + 'depends': ['purchase_stock'], + 'data': ['views/res_partner.xml'], + 'installable': True, +} diff --git a/purchase_stock_partner_default_picking_type/models/__init__.py b/purchase_stock_partner_default_picking_type/models/__init__.py new file mode 100644 index 0000000..327d893 --- /dev/null +++ b/purchase_stock_partner_default_picking_type/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_partner +from . import purchase_order diff --git a/purchase_stock_partner_default_picking_type/models/purchase_order.py b/purchase_stock_partner_default_picking_type/models/purchase_order.py new file mode 100644 index 0000000..835b623 --- /dev/null +++ b/purchase_stock_partner_default_picking_type/models/purchase_order.py @@ -0,0 +1,23 @@ +# Copyright 2025 Akretion France (https://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class PurchaseOrder(models.Model): + _inherit = "purchase.order" + + # If I set picking_type_id as computed field with store=True and readonly=False + # it doesn't work when creating a PO from the smartbutton of the partner form view + # in v14 and v16... and I don't understand why :-( + # So, until I find the cause of this, I use a good old onchange ! + @api.onchange("partner_id", "company_id") + def onchange_partner_id(self): + super().onchange_partner_id() + if self.partner_id and self.company_id: + partner = self.partner_id.commercial_partner_id.with_company(self.company_id.id) + if partner.purchase_picking_type_id: + self.picking_type_id = partner.purchase_picking_type_id + else: + self.picking_type_id = self._get_picking_type(self.company_id.id) diff --git a/purchase_stock_partner_default_picking_type/models/res_partner.py b/purchase_stock_partner_default_picking_type/models/res_partner.py new file mode 100644 index 0000000..f85d9c2 --- /dev/null +++ b/purchase_stock_partner_default_picking_type/models/res_partner.py @@ -0,0 +1,15 @@ +# Copyright 2025 Akretion France (https://www.akretion.com/) +# @author: Alexis de Lattre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + # Used only for manual POs + purchase_picking_type_id = fields.Many2one( + 'stock.picking.type', string="Purchase Picking Type", + company_dependent=True, + domain="[('code', '=', 'incoming'), ('company_id', '=', current_company_id)]") diff --git a/purchase_stock_partner_default_picking_type/static/description/icon.png b/purchase_stock_partner_default_picking_type/static/description/icon.png new file mode 100644 index 0000000..3a0328b Binary files /dev/null and b/purchase_stock_partner_default_picking_type/static/description/icon.png differ diff --git a/purchase_stock_partner_default_picking_type/views/res_partner.xml b/purchase_stock_partner_default_picking_type/views/res_partner.xml new file mode 100644 index 0000000..c62b63b --- /dev/null +++ b/purchase_stock_partner_default_picking_type/views/res_partner.xml @@ -0,0 +1,21 @@ + + + + + + + res.partner + + + + + + + + + +