diff --git a/sale_final_customer_address/.gitignore b/sale_final_customer_address/.gitignore new file mode 100644 index 00000000..7a60b85e --- /dev/null +++ b/sale_final_customer_address/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.pyc diff --git a/sale_final_customer_address/README.rst b/sale_final_customer_address/README.rst new file mode 100644 index 00000000..43e8229c --- /dev/null +++ b/sale_final_customer_address/README.rst @@ -0,0 +1,36 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=========================== +Sale Final Customer Address +=========================== + +* Adds a boolean field "Final customer" on delivery addresses (contacts with + type "Delivery Address"). +* Adds a boolean field "Ship to final customer" on Sales Orders. +* When enabled, the shipping address field only shows delivery addresses with + "Final customer" enabled. +* When disabled, it only shows delivery addresses with "Final customer" + disabled. +* When creating a new delivery address from the Sales Order, the default value + for "Final customer" follows the Sales Order checkbox. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Contributors +------------ + +* Ana Juaristi +* Eñaut Alberdi diff --git a/sale_final_customer_address/__init__.py b/sale_final_customer_address/__init__.py new file mode 100644 index 00000000..857b155f --- /dev/null +++ b/sale_final_customer_address/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2026 Eñaut Alberdi - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/sale_final_customer_address/__manifest__.py b/sale_final_customer_address/__manifest__.py new file mode 100644 index 00000000..fd393c51 --- /dev/null +++ b/sale_final_customer_address/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2026 Eñaut Alberdi - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Sale Final Customer Address", + "version": "18.0.1.0.0", + "category": "Sales", + "summary": """Adds a final customer flag on delivery addresses and + filters sale order shipping addresses""", + "license": "AGPL-3", + "author": "AvanzOSC", + "website": "https://github.com/avanzosc/sale-addons", + "depends": [ + "sale", + ], + "data": [ + "views/res_partner_views.xml", + "views/sale_order_views.xml", + ], + "installable": True, +} diff --git a/sale_final_customer_address/i18n/es.po b/sale_final_customer_address/i18n/es.po new file mode 100644 index 00000000..f2587609 --- /dev/null +++ b/sale_final_customer_address/i18n/es.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_final_customer_address +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-02-11 15:14+0000\n" +"PO-Revision-Date: 2026-02-11 15:14+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: sale_final_customer_address +#: model:ir.model,name:sale_final_customer_address.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: sale_final_customer_address +#: model:ir.model.fields,help:sale_final_customer_address.field_sale_order__shipping_final_customer +msgid "Filters shipping addresses according to the final customer flag." +msgstr "Filtra las direcciones de envio segun el check de cliente final." + +#. module: sale_final_customer_address +#: model:ir.model.fields,field_description:sale_final_customer_address.field_res_partner__final_customer +#: model:ir.model.fields,field_description:sale_final_customer_address.field_res_users__final_customer +msgid "Final customer" +msgstr "Cliente final" + +#. module: sale_final_customer_address +#: model:ir.model.fields,help:sale_final_customer_address.field_res_partner__final_customer +#: model:ir.model.fields,help:sale_final_customer_address.field_res_users__final_customer +msgid "Marks delivery addresses that correspond to the final customer." +msgstr "Marca las direcciones de envio que corresponden a cliente final." + +#. module: sale_final_customer_address +#: model:ir.model,name:sale_final_customer_address.model_sale_order +msgid "Sales Order" +msgstr "Pedido de venta" + +#. module: sale_final_customer_address +#: model:ir.model.fields,field_description:sale_final_customer_address.field_sale_order__shipping_final_customer +msgid "Ship to final customer" +msgstr "Direccion envio a cliente final" diff --git a/sale_final_customer_address/i18n/sale_final_customer_address.pot b/sale_final_customer_address/i18n/sale_final_customer_address.pot new file mode 100644 index 00000000..1fb3bfc0 --- /dev/null +++ b/sale_final_customer_address/i18n/sale_final_customer_address.pot @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_final_customer_address +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-02-11 15:14+0000\n" +"PO-Revision-Date: 2026-02-11 15:14+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: sale_final_customer_address +#: model:ir.model,name:sale_final_customer_address.model_res_partner +msgid "Contact" +msgstr "" + +#. module: sale_final_customer_address +#: model:ir.model.fields,help:sale_final_customer_address.field_sale_order__shipping_final_customer +msgid "Filters shipping addresses according to the final customer flag." +msgstr "" + +#. module: sale_final_customer_address +#: model:ir.model.fields,field_description:sale_final_customer_address.field_res_partner__final_customer +#: model:ir.model.fields,field_description:sale_final_customer_address.field_res_users__final_customer +msgid "Final customer" +msgstr "" + +#. module: sale_final_customer_address +#: model:ir.model.fields,help:sale_final_customer_address.field_res_partner__final_customer +#: model:ir.model.fields,help:sale_final_customer_address.field_res_users__final_customer +msgid "Marks delivery addresses that correspond to the final customer." +msgstr "" + +#. module: sale_final_customer_address +#: model:ir.model,name:sale_final_customer_address.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: sale_final_customer_address +#: model:ir.model.fields,field_description:sale_final_customer_address.field_sale_order__shipping_final_customer +msgid "Ship to final customer" +msgstr "" diff --git a/sale_final_customer_address/models/__init__.py b/sale_final_customer_address/models/__init__.py new file mode 100644 index 00000000..07a21524 --- /dev/null +++ b/sale_final_customer_address/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2026 Eñaut Alberdi - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import res_partner +from . import sale_order diff --git a/sale_final_customer_address/models/res_partner.py b/sale_final_customer_address/models/res_partner.py new file mode 100644 index 00000000..50d24f56 --- /dev/null +++ b/sale_final_customer_address/models/res_partner.py @@ -0,0 +1,13 @@ +# Copyright 2026 Eñaut Alberdi - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + final_customer = fields.Boolean( + string="Final customer", + default=False, + help="Marks delivery addresses that correspond to the final customer.", + ) diff --git a/sale_final_customer_address/models/sale_order.py b/sale_final_customer_address/models/sale_order.py new file mode 100644 index 00000000..27b8b7ee --- /dev/null +++ b/sale_final_customer_address/models/sale_order.py @@ -0,0 +1,13 @@ +# Copyright 2026 Eñaut Alberdi - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + shipping_final_customer = fields.Boolean( + string="Ship to final customer", + default=False, + help="Filters shipping addresses according to the final customer flag.", + ) diff --git a/sale_final_customer_address/pyproject.toml b/sale_final_customer_address/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/sale_final_customer_address/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/sale_final_customer_address/views/res_partner_views.xml b/sale_final_customer_address/views/res_partner_views.xml new file mode 100644 index 00000000..33d26e68 --- /dev/null +++ b/sale_final_customer_address/views/res_partner_views.xml @@ -0,0 +1,36 @@ + + + + res.partner + + + +
+
+
+ + + + + +
+
+ + + res.partner + + + +
+
+
+
+
+
diff --git a/sale_final_customer_address/views/sale_order_views.xml b/sale_final_customer_address/views/sale_order_views.xml new file mode 100644 index 00000000..972c574b --- /dev/null +++ b/sale_final_customer_address/views/sale_order_views.xml @@ -0,0 +1,21 @@ + + + + sale.order.form.final.customer + sale.order + + + + [('final_customer', '=', shipping_final_customer), ('parent_id', '=', partner_id), ('type', '=', 'delivery')] + {'default_type': 'delivery', 'show_address': False, 'show_vat': False, 'default_parent_id': partner_id, 'default_final_customer': shipping_final_customer} + + + + + + +