Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][ADD] purchase_currency #2508

Open
wants to merge 1 commit into
base: 16.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions purchase_currency/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
=================
Purchase Currency
=================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:d37288d0febe4e6faa7753303b3c57863c066034c774036b4fec2298fc0d8d2c
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |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%2Fpurchase--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_currency
:alt: OCA/purchase-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_currency
: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/purchase-workflow&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

Set the default currency for the company's purchase orders.

**Table of contents**

.. contents::
:local:

Use Cases / Context
===================

This module is useful when a company operates in a multi-currency
environment and most of the purchases are made in a currency other than
the main currency of the company.

Configuration
=============

Go to **Settings** → **Purchase**:

- Set the **"Default Purchase Currency"** to an available currency
- Press the **"Save"** button to apply the changes

Usage
=====

Once the module is configured, the default currency will be set:

1. As the default value for the **"Currency"** field in **Request for Quotation**.
2. As the default **Journal Currency** in **Vendor Bill**.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-workflow/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 <https://github.com/OCA/purchase-workflow/issues/new?body=module:%20purchase_currency%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
~~~~~~~

* Cetmix

Contributors
~~~~~~~~~~~~

* `Cetmix <http://cetmix.com>`_

* Ivan Sokolov
* Mikhail Lapin
* Maksim Shurupov
* Dinar Gabbasov

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.

This module is part of the `OCA/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/purchase_currency>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 4 additions & 0 deletions purchase_currency/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import models
17 changes: 17 additions & 0 deletions purchase_currency/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "Purchase Currency",
"version": "16.0.1.0.0",
"category": "Purchase",
"license": "AGPL-3",
"summary": "Select the default currency for purchases",
"author": "Cetmix, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/purchase-workflow",
"depends": ["purchase", "sale", "stock"],
"data": [
"views/res_config_settings_views.xml",
],
"installable": True,
}
8 changes: 8 additions & 0 deletions purchase_currency/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import purchase_order
from . import res_company
from . import res_config_settings
from . import sale_order_line
from . import stock_rule
23 changes: 23 additions & 0 deletions purchase_currency/models/purchase_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import api, fields, models


class PurchaseOrder(models.Model):
_inherit = "purchase.order"

currency_id = fields.Many2one(default=lambda self: self._default_currency_id())

def _default_currency_id(self):
company = self.env.company
return company.default_purchase_currency_id or company.currency_id

@api.onchange("partner_id", "company_id")
def onchange_partner_id(self):
default_currency_id = self.env.company.default_purchase_currency_id.id
if not default_currency_id:
return super().onchange_partner_id()
return super(
PurchaseOrder, self.with_context(default_currency_id=default_currency_id)
).onchange_partner_id()
12 changes: 12 additions & 0 deletions purchase_currency/models/res_company.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ResCompany(models.Model):
_inherit = "res.company"

default_purchase_currency_id = fields.Many2one(
comodel_name="res.currency", string="Default Purchase Currency"
)
13 changes: 13 additions & 0 deletions purchase_currency/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"

company_default_purchase_currency_id = fields.Many2one(
related="company_id.default_purchase_currency_id",
readonly=False,
)
16 changes: 16 additions & 0 deletions purchase_currency/models/sale_order_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import models


class SaleOrderLine(models.Model):
_inherit = "sale.order.line"

def _purchase_service_prepare_order_values(self, supplierinfo):
result = super()._purchase_service_prepare_order_values(supplierinfo)
supplier_currency = supplierinfo.partner_id.property_purchase_currency_id

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we explicit with_company(self.company_id) to be extra sure to get the currect currency? supplierinfo should already have the company context from previous _purchase_service_create, maybe we should doublecheck to make sure

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_purchase_service_create

The current company is taken from the sale.order.line record. I think is correct situation.

default_purchase_currency = self.env.company.default_purchase_currency_id
if not supplier_currency and default_purchase_currency:
result.update(currency_id=default_purchase_currency.id)
return result
20 changes: 20 additions & 0 deletions purchase_currency/models/stock_rule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import models


class StockRule(models.Model):
_inherit = "stock.rule"

def _prepare_purchase_order(self, company_id, origins, values):
result = super()._prepare_purchase_order(company_id, origins, values)
values = values[0]
partner = values["supplier"].partner_id
supplier_currency = partner.with_company(
company_id
).property_purchase_currency_id
default_purchase_currency = self.env.company.default_purchase_currency_id
if not supplier_currency and default_purchase_currency:
result.update(currency_id=default_purchase_currency.id)
return result
4 changes: 4 additions & 0 deletions purchase_currency/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Go to **Settings** → **Purchase**:

- Set the **"Default Purchase Currency"** to an available currency
- Press the **"Save"** button to apply the changes
3 changes: 3 additions & 0 deletions purchase_currency/readme/CONTEXT.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
This module is useful when a company operates in a multi-currency
environment and most of the purchases are made in a currency other than
the main currency of the company.
6 changes: 6 additions & 0 deletions purchase_currency/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
* `Cetmix <http://cetmix.com>`_

* Ivan Sokolov
* Mikhail Lapin
* Maksim Shurupov
* Dinar Gabbasov
1 change: 1 addition & 0 deletions purchase_currency/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Set the default currency for the company's purchase orders.
4 changes: 4 additions & 0 deletions purchase_currency/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Once the module is configured, the default currency will be set:

1. As the default value for the **"Currency"** field in **Request for Quotation**.
2. As the default **Journal Currency** in **Vendor Bill**.
Loading
Loading