The spreadsheet module is moved to the community version for the upcoming spreadsheet dashboards This module is the core engine of spreadsheets in Odoo. It contains `o-spreadsheet` library (o_spreadsheet.js) and all basic integrations with odoo such as accounting formulas, lists, pivot, filters, etc. This module alone does not have any action or menu to open a spreadsheet. Those actions come with `documents_spreadsheet` module or the upcoming `spreadsheet_dashboard` module. Task 2799682 Part-of: odoo/odoo#97606
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,
|
|
}
|