diff --git a/partner_default_delivery_carrier/README.rst b/partner_default_delivery_carrier/README.rst new file mode 100644 index 0000000000..36bc613025 --- /dev/null +++ b/partner_default_delivery_carrier/README.rst @@ -0,0 +1,96 @@ +=============================== +Partner Default Delivery Method +=============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f3e43cfc2a5eacb3f8537942e49e31d98e75effb42d313065bfbd23687bf5fef + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdelivery--carrier-lightgray.png?logo=github + :target: https://github.com/OCA/delivery-carrier/tree/14.0/partner_default_delivery_carrier + :alt: OCA/delivery-carrier +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/delivery-carrier-14-0/delivery-carrier-14-0-partner_default_delivery_carrier + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/delivery-carrier&target_branch=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Allows defining a default delivery carrier for new partners. + +The default value will be set in the Sales configuration, and will be +company-specific. +Whenever a new partner is created, field "Delivery Method" will be filled with +the company's default carrier. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +In "Sales > Configuration > Settings > Shipping" an option will be available +to choose the default delivery carrier (by company). It will be used to prefill +field "Delivery Method" on new partners. + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Silvio Gregorini + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-SilvioC2C| image:: https://github.com/SilvioC2C.png?size=40px + :target: https://github.com/SilvioC2C + :alt: SilvioC2C + +Current `maintainer `__: + +|maintainer-SilvioC2C| + +This module is part of the `OCA/delivery-carrier `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_default_delivery_carrier/__init__.py b/partner_default_delivery_carrier/__init__.py new file mode 100644 index 0000000000..fa9e2cf3a4 --- /dev/null +++ b/partner_default_delivery_carrier/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2021 Camptocamp +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/partner_default_delivery_carrier/__manifest__.py b/partner_default_delivery_carrier/__manifest__.py new file mode 100644 index 0000000000..7c3d68f586 --- /dev/null +++ b/partner_default_delivery_carrier/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2021 Camptocamp +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Partner Default Delivery Method", + "summary": "Allows defining default delivery methods for partners", + "version": "16.0.1.0.0", + "category": "Delivery", + "website": "https://github.com/OCA/delivery-carrier", + "author": "Camptocamp, Odoo Community Association (OCA)", + "maintainers": ["SilvioC2C"], + "installable": True, + "license": "AGPL-3", + "depends": ["delivery", "sale"], + "data": ["views/res_config_settings.xml"], +} diff --git a/partner_default_delivery_carrier/i18n/partner_default_delivery_carrier.pot b/partner_default_delivery_carrier/i18n/partner_default_delivery_carrier.pot new file mode 100644 index 0000000000..3755e1dff0 --- /dev/null +++ b/partner_default_delivery_carrier/i18n/partner_default_delivery_carrier.pot @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_default_delivery_carrier +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \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: partner_default_delivery_carrier +#: model_terms:ir.ui.view,arch_db:partner_default_delivery_carrier.res_config_settings_view_form_inherit +msgid "" +"\n" +" Partners Default Delivery Method\n" +" \n" +" " +msgstr "" + +#. module: partner_default_delivery_carrier +#: model:ir.model,name:partner_default_delivery_carrier.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: partner_default_delivery_carrier +#: model:ir.model.fields,field_description:partner_default_delivery_carrier.field_res_config_settings__display_name +msgid "Display Name" +msgstr "" + +#. module: partner_default_delivery_carrier +#: model:ir.model.fields,field_description:partner_default_delivery_carrier.field_res_config_settings__id +msgid "ID" +msgstr "" + +#. module: partner_default_delivery_carrier +#: model:ir.model.fields,field_description:partner_default_delivery_carrier.field_res_config_settings____last_update +msgid "Last Modified on" +msgstr "" + +#. module: partner_default_delivery_carrier +#: model:ir.model.fields,field_description:partner_default_delivery_carrier.field_res_config_settings__partner_default_delivery_carrier_id +msgid "Partner Default Delivery Carrier" +msgstr "" diff --git a/partner_default_delivery_carrier/models/__init__.py b/partner_default_delivery_carrier/models/__init__.py new file mode 100644 index 0000000000..ef47382fa1 --- /dev/null +++ b/partner_default_delivery_carrier/models/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2021 Camptocamp +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import res_config_settings diff --git a/partner_default_delivery_carrier/models/res_config_settings.py b/partner_default_delivery_carrier/models/res_config_settings.py new file mode 100644 index 0000000000..02dcaccf82 --- /dev/null +++ b/partner_default_delivery_carrier/models/res_config_settings.py @@ -0,0 +1,32 @@ +# Copyright 2021 Camptocamp +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + partner_default_delivery_carrier_id = fields.Many2one("delivery.carrier") + + def get_values(self): + return dict( + super().get_values() or {}, + partner_default_delivery_carrier_id=self.env["ir.default"] + .sudo() + .get( + "res.partner", + "property_delivery_carrier_id", + company_id=self.env.company.id, + ), + ) + + def set_values(self): + super().set_values() + self.env["ir.default"].sudo().set( + "res.partner", + "property_delivery_carrier_id", + self.partner_default_delivery_carrier_id.id, + company_id=self.env.company.id, + ) + return diff --git a/partner_default_delivery_carrier/readme/CONFIGURE.rst b/partner_default_delivery_carrier/readme/CONFIGURE.rst new file mode 100644 index 0000000000..d87779a832 --- /dev/null +++ b/partner_default_delivery_carrier/readme/CONFIGURE.rst @@ -0,0 +1,3 @@ +In "Sales > Configuration > Settings > Shipping" an option will be available +to choose the default delivery carrier (by company). It will be used to prefill +field "Delivery Method" on new partners. diff --git a/partner_default_delivery_carrier/readme/CONTRIBUTORS.rst b/partner_default_delivery_carrier/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..06182b18d4 --- /dev/null +++ b/partner_default_delivery_carrier/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Silvio Gregorini +* Miguel Angel Robles Urquiza (https://braintec.com) diff --git a/partner_default_delivery_carrier/readme/DESCRIPTION.rst b/partner_default_delivery_carrier/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..65d7f2fdc1 --- /dev/null +++ b/partner_default_delivery_carrier/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +Allows defining a default delivery carrier for new partners. + +The default value will be set in the Sales configuration, and will be +company-specific. +Whenever a new partner is created, field "Delivery Method" will be filled with +the company's default carrier. diff --git a/partner_default_delivery_carrier/static/description/icon.png b/partner_default_delivery_carrier/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/partner_default_delivery_carrier/static/description/icon.png differ diff --git a/partner_default_delivery_carrier/static/description/index.html b/partner_default_delivery_carrier/static/description/index.html new file mode 100644 index 0000000000..3ef8406928 --- /dev/null +++ b/partner_default_delivery_carrier/static/description/index.html @@ -0,0 +1,434 @@ + + + + + + +Partner Default Delivery Method + + + +
+

Partner Default Delivery Method

+ + +

Beta License: AGPL-3 OCA/delivery-carrier Translate me on Weblate Try me on Runboat

+

Allows defining a default delivery carrier for new partners.

+

The default value will be set in the Sales configuration, and will be +company-specific. +Whenever a new partner is created, field “Delivery Method” will be filled with +the company’s default carrier.

+

Table of contents

+ +
+

Configuration

+

In “Sales > Configuration > Settings > Shipping” an option will be available +to choose the default delivery carrier (by company). It will be used to prefill +field “Delivery Method” on new partners.

+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

SilvioC2C

+

This module is part of the OCA/delivery-carrier project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/partner_default_delivery_carrier/tests/__init__.py b/partner_default_delivery_carrier/tests/__init__.py new file mode 100644 index 0000000000..75b6257ccc --- /dev/null +++ b/partner_default_delivery_carrier/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2021 Camptocamp +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_default_delivery_carrier diff --git a/partner_default_delivery_carrier/tests/test_default_delivery_carrier.py b/partner_default_delivery_carrier/tests/test_default_delivery_carrier.py new file mode 100644 index 0000000000..29b80efccd --- /dev/null +++ b/partner_default_delivery_carrier/tests/test_default_delivery_carrier.py @@ -0,0 +1,76 @@ +# Copyright 2021 Camptocamp +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestPackageFee(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + + # Companies + cls.company0 = cls.env["res.company"].create({"name": "Avengers"}) + cls.company1 = cls.env["res.company"].create({"name": "S.H.I.E.L.D."}) + cls.company2 = cls.env["res.company"].create({"name": "X-Men"}) + + # Carriers (the first one is just an empty recordset -> no carrier!) + cls.carrier0 = cls.env["delivery.carrier"] + cls.carrier1 = cls.env["delivery.carrier"].create( + { + "name": "Helicarrier", + "fixed_price": 1.0, + "product_id": cls.env["product.product"] + .create({"name": "Shipping1", "type": "service"}) + .id, + } + ) + cls.carrier2 = cls.env["delivery.carrier"].create( + { + "name": "Blackbird", + "fixed_price": 1.0, + "product_id": cls.env["product.product"] + .create({"name": "Shipping1", "type": "service"}) + .id, + } + ) + + # Add everything into proper attributes + cls.carriers = [cls.carrier0, cls.carrier1, cls.carrier2] + cls.companies = [cls.company0, cls.company1, cls.company2] + cls.couples = tuple(zip(cls.companies, cls.carriers)) + + # Allow user to use only the new companies + # You need to do this in this exact order, otherwise an error will + # be raised + cls.env.user.company_ids |= cls.company0 + cls.env.user.company_id = cls.company0 + cls.env.user.company_ids = cls.env["res.company"].union(*cls.companies) + + def _config_create(self, carrier): + return self.env["res.config.settings"].create( + {"partner_default_delivery_carrier_id": int(carrier)} + ) + + def _partner_create(self): + return self.env["res.partner"].create({"name": "MockupPartner"}) + + def test_00_partner_create(self): + for company, carrier in self.couples: + # Switch user company + self.env.user.company_id = company + # Create config with current carrier, save it + config = self._config_create(carrier.id) + config.execute() + # Create new partner, get its carrier + pcarrier = self._partner_create().property_delivery_carrier_id + # Check if partner's carrier is the current carrier + self.assertEqual(pcarrier.id, carrier.id) + + # Check that 3 `ir.default` records were created + mname, fname = "res.partner", "property_delivery_carrier_id" + field = self.env["ir.model.fields"]._get(mname, fname) + domain = [("field_id", "=", field.id)] + count = self.env["ir.default"].sudo().search_count(domain) + self.assertEqual(count, 3) diff --git a/partner_default_delivery_carrier/views/res_config_settings.xml b/partner_default_delivery_carrier/views/res_config_settings.xml new file mode 100644 index 0000000000..9fcb17e873 --- /dev/null +++ b/partner_default_delivery_carrier/views/res_config_settings.xml @@ -0,0 +1,33 @@ + + + + + res.config.settings.view.form.inherit + res.config.settings + + + +
+
+
+ + Partners Default Delivery Method + + +
+ +
+
+
+ + + + + diff --git a/setup/partner_default_delivery_carrier/odoo/addons/partner_default_delivery_carrier b/setup/partner_default_delivery_carrier/odoo/addons/partner_default_delivery_carrier new file mode 120000 index 0000000000..0dd87bb511 --- /dev/null +++ b/setup/partner_default_delivery_carrier/odoo/addons/partner_default_delivery_carrier @@ -0,0 +1 @@ +../../../../partner_default_delivery_carrier \ No newline at end of file diff --git a/setup/partner_default_delivery_carrier/setup.py b/setup/partner_default_delivery_carrier/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/partner_default_delivery_carrier/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)