55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
from odoo import api, models
|
|
|
|
|
|
class ResCurrency(models.Model):
|
|
_inherit = "res.currency"
|
|
|
|
@api.model
|
|
def get_currencies_for_spreadsheet(self, currency_names):
|
|
"""
|
|
Returns the currency structure of provided currency names.
|
|
This function is meant to be called by the spreadsheet js lib,
|
|
hence the formatting of the result.
|
|
|
|
:currency_names list(str): list of currency names (e.g. ["EUR", "USD", "CAD"])
|
|
:return: list of dicts of the form `{ "code": str, "symbol": str, "decimalPlaces": int, "position":str }`
|
|
"""
|
|
currencies = self.with_context(active_test=False).search(
|
|
[("name", "in", currency_names)],
|
|
)
|
|
result = []
|
|
for currency_name in currency_names:
|
|
currency = next(filter(lambda curr: curr.name == currency_name, currencies), None)
|
|
if currency:
|
|
currency_data = {
|
|
"code": currency.name,
|
|
"symbol": currency.symbol,
|
|
"decimalPlaces": currency.decimal_places,
|
|
"position": currency.position,
|
|
}
|
|
else:
|
|
currency_data = None
|
|
result.append(currency_data)
|
|
return result
|
|
|
|
@api.model
|
|
def get_company_currency_for_spreadsheet(self, company_id=None):
|
|
"""
|
|
Returns the currency structure for the currency of the company.
|
|
This function is meant to be called by the spreadsheet js lib,
|
|
hence the formatting of the result.
|
|
|
|
:company_id int: Id of the company
|
|
:return: dict of the form `{ "code": str, "symbol": str, "decimalPlaces": int, "position":str }`
|
|
"""
|
|
company = self.env["res.company"].browse(company_id) if company_id else self.env.company
|
|
if not company.exists():
|
|
return False
|
|
currency = company.currency_id
|
|
return {
|
|
"code": currency.name,
|
|
"symbol": currency.symbol,
|
|
"decimalPlaces": currency.decimal_places,
|
|
"position": currency.position,
|
|
}
|