From b3fec20699b146ab899b8d62bd3461cb6f431e36 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Fri, 26 Jan 2018 18:02:28 +0000 Subject: [PATCH 01/18] [ADD] telegram_expense_manager: currency_id in expenses account.move.line --- telegram_expense_manager/models/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index e0d5359..bbd9a88 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -469,6 +469,7 @@ def _em_add_record(self, common = { 'partner_id': self.id, 'name': text or 'unknown', + 'currency_id': currency and self.env['res.currency'].search([('name', '=', 'currency')], limit=1).id, } if isinstance(amount, basestring): amount = float(amount.replace(',', '.')) From c5c51f6d610a689d29ff0938410d942cf6107951 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Fri, 26 Jan 2018 19:02:02 +0000 Subject: [PATCH 02/18] [FIX] telegram_expense_manager: typo --- telegram_expense_manager/models/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index bbd9a88..79d87c0 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -469,7 +469,7 @@ def _em_add_record(self, common = { 'partner_id': self.id, 'name': text or 'unknown', - 'currency_id': currency and self.env['res.currency'].search([('name', '=', 'currency')], limit=1).id, + 'currency_id': currency and self.env['res.currency'].search([('name', '=', currency)], limit=1).id, } if isinstance(amount, basestring): amount = float(amount.replace(',', '.')) From c6e537c9cefc4c7d0d1cf7cf3e06e22b310542b9 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Mon, 29 Jan 2018 10:36:43 +0000 Subject: [PATCH 03/18] [ADD] telegram_expense_manager: multicurrency expenses --- .../data/telegram_command.xml | 2 +- .../models/account_analytic_account.py | 28 +++++++++++++++++++ telegram_expense_manager/models/api.py | 8 +++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/telegram_expense_manager/data/telegram_command.xml b/telegram_expense_manager/data/telegram_command.xml index 46dfcc3..30af7f3 100644 --- a/telegram_expense_manager/data/telegram_command.xml +++ b/telegram_expense_manager/data/telegram_command.xml @@ -345,7 +345,7 @@ data['total'] = sum((acc.move_balance for acc in accounts)) -/account_ +/account_ Total: diff --git a/telegram_expense_manager/models/account_analytic_account.py b/telegram_expense_manager/models/account_analytic_account.py index e03045e..57e06e1 100644 --- a/telegram_expense_manager/models/account_analytic_account.py +++ b/telegram_expense_manager/models/account_analytic_account.py @@ -52,3 +52,31 @@ def _compute_move_debit_credit_balance(self): move_balance = fields.Monetary(compute='_compute_move_debit_credit_balance', string='Balance') move_debit = fields.Monetary(compute='_compute_move_debit_credit_balance', string='Debit') move_credit = fields.Monetary(compute='_compute_move_debit_credit_balance', string='Credit') + currency_ids = fields.Many2many("res.currency", "analytic_account_currency_rel") + + @api.multi + def _attach_new_currency(self, currency): + for record in self: + if currency not in record.currency_ids: + record.currency_ids = [(4, currency.id)] + + @api.multi + def get_currency_balance(self, currency=None): + self.ensure_one() + AccountMoveLine = self.env['account.move.line'] + domain = [('analytic_account_id', 'in', self.mapped('id'))] + if self._context.get('from_date', False): + domain.append(('date', '>=', self._context['from_date'])) + if self._context.get('to_date', False): + domain.append(('date', '<=', self._context['to_date'])) + if currency: + domain.append(('currency_id', '=', currency.id)) + else: + domain.append(('currency_id', '=', False)) + + account_amounts = AccountMoveLine.search_read(domain, ['analytic_account_id', 'balance']) + move_balance = 0.0 + for account_amount in account_amounts: + move_balance += account_amount['balance'] + + return move_balance diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index 79d87c0..1d8aba5 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -466,10 +466,16 @@ def _em_add_record(self, journal = self.env.ref(journal_ref) + currency_id = currency and self.env['res.currency'].search([('name', '=', currency)], limit=1) + + if currency_id: + analytic_account_ids = self.env['account.analytic.account'].browse([from_data['analytic_account_id'], to_data['analytic_account_id']]) + analytic_account_ids._attach_new_currency(currency_id) + common = { 'partner_id': self.id, 'name': text or 'unknown', - 'currency_id': currency and self.env['res.currency'].search([('name', '=', currency)], limit=1).id, + 'currency_id': currency_id and currency_id.id or None, } if isinstance(amount, basestring): amount = float(amount.replace(',', '.')) From 7ada112778695dd82a8c80686e072647e06007cd Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Mon, 29 Jan 2018 10:51:00 +0000 Subject: [PATCH 04/18] [ADD] telegram_expense_manager: multicurrency /income --- telegram_expense_manager/models/api.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index 1d8aba5..de5dc27 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +import re + from odoo import models, api, fields from odoo.exceptions import AccessError from odoo.tools.translate import _ @@ -233,10 +235,13 @@ def em_handle_callback_data(self, callback_data, raw_text, add_record=None): error = None if callback_data.get('action') == ASK_AMOUNT: + m = re.match(r'([0-9][ +\-\/0-9.,]*) ?([^0-9]*)', raw_text) + amount = m.group(1) + currency = m.group(2) if not record: - record = add_record('', raw_text) + record = add_record('', amount, currency=currency) else: - record.em_update_amount(raw_text) + record.em_update_amount(amount, currency=currency) elif callback_data.get('action') == ASK_NOTE: record.em_update_note(raw_text) elif callback_data.get('action') == ASK_ANALYTIC: @@ -469,7 +474,8 @@ def _em_add_record(self, currency_id = currency and self.env['res.currency'].search([('name', '=', currency)], limit=1) if currency_id: - analytic_account_ids = self.env['account.analytic.account'].browse([from_data['analytic_account_id'], to_data['analytic_account_id']]) + analytic_account_lst = [from_data.get('analytic_account_id'), to_data.get('analytic_account_id')] + analytic_account_ids = self.env['account.analytic.account'].browse(analytic_account_lst) analytic_account_ids._attach_new_currency(currency_id) common = { From 18e08e60fcc77ca472e6520459114b8b0ecc4ad5 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Mon, 29 Jan 2018 13:18:06 +0000 Subject: [PATCH 05/18] [ADD] telegram_expense_manager: multicurrency in total row for /account_all --- telegram_expense_manager/data/telegram_command.xml | 3 ++- telegram_expense_manager/models/account_analytic_account.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/telegram_expense_manager/data/telegram_command.xml b/telegram_expense_manager/data/telegram_command.xml index 30af7f3..9250f84 100644 --- a/telegram_expense_manager/data/telegram_command.xml +++ b/telegram_expense_manager/data/telegram_command.xml @@ -341,12 +341,13 @@ accounts = env["account.analytic.account"].sudo().search( order='id ASC', ) data['accounts'] = accounts +data['currency_ids'] = env["account.move.line"].sudo().search([('analytic_account_id', 'in', accounts.ids)]).mapped('currency_id').sorted(key=lambda r: r.id) data['total'] = sum((acc.move_balance for acc in accounts)) /account_ -Total: +Total: diff --git a/telegram_expense_manager/models/account_analytic_account.py b/telegram_expense_manager/models/account_analytic_account.py index 57e06e1..814f632 100644 --- a/telegram_expense_manager/models/account_analytic_account.py +++ b/telegram_expense_manager/models/account_analytic_account.py @@ -62,7 +62,6 @@ def _attach_new_currency(self, currency): @api.multi def get_currency_balance(self, currency=None): - self.ensure_one() AccountMoveLine = self.env['account.move.line'] domain = [('analytic_account_id', 'in', self.mapped('id'))] if self._context.get('from_date', False): From 9feee23339e4888af62de9bcf6580b21c1c0b8a9 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Mon, 29 Jan 2018 19:55:10 +0000 Subject: [PATCH 06/18] [ADD] telegram_expense_manager: multicurrency /account_all report --- .../data/telegram_command.xml | 5 ++-- .../models/account_analytic_account.py | 26 +++++++++++++------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/telegram_expense_manager/data/telegram_command.xml b/telegram_expense_manager/data/telegram_command.xml index 9250f84..a15593e 100644 --- a/telegram_expense_manager/data/telegram_command.xml +++ b/telegram_expense_manager/data/telegram_command.xml @@ -341,13 +341,14 @@ accounts = env["account.analytic.account"].sudo().search( order='id ASC', ) data['accounts'] = accounts +data['base_currency'] = partner.company_id.currency_id data['currency_ids'] = env["account.move.line"].sudo().search([('analytic_account_id', 'in', accounts.ids)]).mapped('currency_id').sorted(key=lambda r: r.id) data['total'] = sum((acc.move_balance for acc in accounts)) -/account_ -Total: +/account_ ( ) — +Total: ( ) diff --git a/telegram_expense_manager/models/account_analytic_account.py b/telegram_expense_manager/models/account_analytic_account.py index 814f632..5d52646 100644 --- a/telegram_expense_manager/models/account_analytic_account.py +++ b/telegram_expense_manager/models/account_analytic_account.py @@ -62,20 +62,30 @@ def _attach_new_currency(self, currency): @api.multi def get_currency_balance(self, currency=None): + balance = 0.0 AccountMoveLine = self.env['account.move.line'] domain = [('analytic_account_id', 'in', self.mapped('id'))] + if self._context.get('from_date', False): domain.append(('date', '>=', self._context['from_date'])) if self._context.get('to_date', False): domain.append(('date', '<=', self._context['to_date'])) - if currency: + + base_currency = self.env.user.partner_id.company_id.currency_id + if currency and currency != base_currency: domain.append(('currency_id', '=', currency.id)) - else: + balance = sum(AccountMoveLine.search(domain).mapped('balance')) + elif currency and currency == base_currency: + base_currency_sum = 0.0 domain.append(('currency_id', '=', False)) + line_ids = AccountMoveLine.search(domain) + balance += sum(line_ids.mapped('balance')) + else: + domain.append(('currency_id', '!=', False)) + all_currencies_line_ids = AccountMoveLine.search(domain) + currency_ids = all_currencies_line_ids.mapped('currency_id') + for currency_id in currency_ids: + balance += sum(all_currencies_line_ids.filtered(lambda r: r.currency_id == currency_id).mapped('balance')) * currency_id.rate + balance += self.get_currency_balance(currency=base_currency) - account_amounts = AccountMoveLine.search_read(domain, ['analytic_account_id', 'balance']) - move_balance = 0.0 - for account_amount in account_amounts: - move_balance += account_amount['balance'] - - return move_balance + return round(balance, 1) From a7b45673fdd61e18fcb7a2be83d348cf26586a40 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 30 Jan 2018 10:30:48 +0000 Subject: [PATCH 07/18] [ADD] telegram_expense_manager: res.currency.alias --- telegram_expense_manager/__manifest__.py | 1 + telegram_expense_manager/models/__init__.py | 1 + .../models/res_currency.py | 21 +++++++++++++++++++ .../views/res_currency_view.xml | 21 +++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 telegram_expense_manager/models/res_currency.py create mode 100644 telegram_expense_manager/views/res_currency_view.xml diff --git a/telegram_expense_manager/__manifest__.py b/telegram_expense_manager/__manifest__.py index 7445f51..87071b4 100644 --- a/telegram_expense_manager/__manifest__.py +++ b/telegram_expense_manager/__manifest__.py @@ -30,6 +30,7 @@ "data/cron.xml", "views/schedule.xml", "views/account_account.xml", + "views/res_currency_view.xml", "security/ir.model.access.csv", ], "qweb": [ diff --git a/telegram_expense_manager/models/__init__.py b/telegram_expense_manager/models/__init__.py index 3463133..0399eec 100644 --- a/telegram_expense_manager/models/__init__.py +++ b/telegram_expense_manager/models/__init__.py @@ -4,3 +4,4 @@ from . import api from . import schedule from . import account_account +from . import res_currency diff --git a/telegram_expense_manager/models/res_currency.py b/telegram_expense_manager/models/res_currency.py new file mode 100644 index 0000000..e4fbd14 --- /dev/null +++ b/telegram_expense_manager/models/res_currency.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, tools, _ + + +class CurrencyAlias(models.Model): + _name = "res.currency.alias" + + name = fields.Char(string='Currency Alias') + _sql_constraints = [ + + ('unique_name', 'unique (name)', 'The currency alias must be unique!'), + ] + + currency_id = fields.Many2one('res.currency', string='Currency', readonly=True) + + +class Currency(models.Model): + _inherit = "res.currency" + + alias_ids = fields.One2many('res.currency.alias', 'currency_id', string='Aliases') diff --git a/telegram_expense_manager/views/res_currency_view.xml b/telegram_expense_manager/views/res_currency_view.xml new file mode 100644 index 0000000..89fff51 --- /dev/null +++ b/telegram_expense_manager/views/res_currency_view.xml @@ -0,0 +1,21 @@ + + + + res.currency.form.inherit.expense_manager + res.currency + + + + + + + + + + + + + + + + From 47c113db88f634aa6f674665b0d76858a73a56ce Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 30 Jan 2018 10:48:21 +0000 Subject: [PATCH 08/18] [ADD] telegram_expense_manager: use currency aliases to get an expense currency --- telegram_expense_manager/models/api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index de5dc27..bb87ad0 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -471,7 +471,8 @@ def _em_add_record(self, journal = self.env.ref(journal_ref) - currency_id = currency and self.env['res.currency'].search([('name', '=', currency)], limit=1) + currency_alias = currency and self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1) + currency_id = currency_alias and currency_alias.currency_id if currency_id: analytic_account_lst = [from_data.get('analytic_account_id'), to_data.get('analytic_account_id')] From ed9bec16a01a4315228cd17d36ed210443fd5a39 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 30 Jan 2018 10:54:59 +0000 Subject: [PATCH 09/18] [FIX] telegram_expense_manager: base_currency might not have rate 1 --- telegram_expense_manager/models/account_analytic_account.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_expense_manager/models/account_analytic_account.py b/telegram_expense_manager/models/account_analytic_account.py index 5d52646..d37921e 100644 --- a/telegram_expense_manager/models/account_analytic_account.py +++ b/telegram_expense_manager/models/account_analytic_account.py @@ -85,7 +85,8 @@ def get_currency_balance(self, currency=None): all_currencies_line_ids = AccountMoveLine.search(domain) currency_ids = all_currencies_line_ids.mapped('currency_id') for currency_id in currency_ids: - balance += sum(all_currencies_line_ids.filtered(lambda r: r.currency_id == currency_id).mapped('balance')) * currency_id.rate + rate = self.env['res.currency']._get_conversion_rate(base_currency, currency_id) + balance += sum(all_currencies_line_ids.filtered(lambda r: r.currency_id == currency_id).mapped('balance')) * rate balance += self.get_currency_balance(currency=base_currency) return round(balance, 1) From 050d3985b1ade13d3362b907494868e86b08e61c Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 30 Jan 2018 12:20:39 +0000 Subject: [PATCH 10/18] [ADD] telegram_expense_manager: add em_currency_id on partner's form --- telegram_expense_manager/__manifest__.py | 1 + telegram_expense_manager/models/__init__.py | 1 + telegram_expense_manager/models/res_partner.py | 15 +++++++++++++++ .../views/res_partner_view.xml | 17 +++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 telegram_expense_manager/models/res_partner.py create mode 100644 telegram_expense_manager/views/res_partner_view.xml diff --git a/telegram_expense_manager/__manifest__.py b/telegram_expense_manager/__manifest__.py index 87071b4..371d66b 100644 --- a/telegram_expense_manager/__manifest__.py +++ b/telegram_expense_manager/__manifest__.py @@ -31,6 +31,7 @@ "views/schedule.xml", "views/account_account.xml", "views/res_currency_view.xml", + "views/res_partner_view.xml", "security/ir.model.access.csv", ], "qweb": [ diff --git a/telegram_expense_manager/models/__init__.py b/telegram_expense_manager/models/__init__.py index 0399eec..bb248ef 100644 --- a/telegram_expense_manager/models/__init__.py +++ b/telegram_expense_manager/models/__init__.py @@ -5,3 +5,4 @@ from . import schedule from . import account_account from . import res_currency +from . import res_partner diff --git a/telegram_expense_manager/models/res_partner.py b/telegram_expense_manager/models/res_partner.py new file mode 100644 index 0000000..88c6821 --- /dev/null +++ b/telegram_expense_manager/models/res_partner.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, _ + + +class Partner(models.Model): + _inherit = "res.partner" + + def _default_em_currency(self): + return self.env.user.company_id.currency_id + + em_currency_id = fields.Many2one('res.currency', + string="Base currency for personal expense management", + ondelete='restrict', + default=_default_em_currency) diff --git a/telegram_expense_manager/views/res_partner_view.xml b/telegram_expense_manager/views/res_partner_view.xml new file mode 100644 index 0000000..70eded2 --- /dev/null +++ b/telegram_expense_manager/views/res_partner_view.xml @@ -0,0 +1,17 @@ + + + + res.partner.form.inherit.expense_manager + res.partner + + + + + + + + + + + + From 4ac68c096728184377226f0736e78d36a5a0c651 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 30 Jan 2018 14:13:04 +0000 Subject: [PATCH 11/18] [ADD] telegram_expense_manager: allow multicurrency by default --- telegram_expense_manager/__manifest__.py | 1 + telegram_expense_manager/security/base_security.xml | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 telegram_expense_manager/security/base_security.xml diff --git a/telegram_expense_manager/__manifest__.py b/telegram_expense_manager/__manifest__.py index 371d66b..085b2d5 100644 --- a/telegram_expense_manager/__manifest__.py +++ b/telegram_expense_manager/__manifest__.py @@ -33,6 +33,7 @@ "views/res_currency_view.xml", "views/res_partner_view.xml", "security/ir.model.access.csv", + "security/base_security.xml", ], "qweb": [ ], diff --git a/telegram_expense_manager/security/base_security.xml b/telegram_expense_manager/security/base_security.xml new file mode 100644 index 0000000..bfda818 --- /dev/null +++ b/telegram_expense_manager/security/base_security.xml @@ -0,0 +1,6 @@ + + + + + + From 87b2c0a97727bccee6f1a8317865b6f55e3f8a4b Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 30 Jan 2018 14:20:12 +0000 Subject: [PATCH 12/18] [FIX] telegram_expense_manager: search currency by name first, if fails then search in aliases --- telegram_expense_manager/models/api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index bb87ad0..52f3c40 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -471,8 +471,9 @@ def _em_add_record(self, journal = self.env.ref(journal_ref) + currency_id = currency and self.env['res.currency'].search([('name', '=', currency)], limit=1) currency_alias = currency and self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1) - currency_id = currency_alias and currency_alias.currency_id + currency_id = currency_id or currency_alias and currency_alias.currency_id if currency_id: analytic_account_lst = [from_data.get('analytic_account_id'), to_data.get('analytic_account_id')] From ca01be30746b7906e4d8fcedd80e4c075159df9f Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Wed, 31 Jan 2018 14:03:24 +0000 Subject: [PATCH 13/18] [FIX] telegram_expense_manager: fix multicurrency /account_all report --- .../data/telegram_command.xml | 6 ++--- .../models/account_analytic_account.py | 25 ++++++++++++------- telegram_expense_manager/models/api.py | 8 +++--- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/telegram_expense_manager/data/telegram_command.xml b/telegram_expense_manager/data/telegram_command.xml index a15593e..9a77e3e 100644 --- a/telegram_expense_manager/data/telegram_command.xml +++ b/telegram_expense_manager/data/telegram_command.xml @@ -341,14 +341,14 @@ accounts = env["account.analytic.account"].sudo().search( order='id ASC', ) data['accounts'] = accounts -data['base_currency'] = partner.company_id.currency_id +data['base_currency'] = partner.em_currency_id data['currency_ids'] = env["account.move.line"].sudo().search([('analytic_account_id', 'in', accounts.ids)]).mapped('currency_id').sorted(key=lambda r: r.id) data['total'] = sum((acc.move_balance for acc in accounts)) -/account_ ( ) — -Total: ( ) +/account_ ( ) — +Total: ( ) diff --git a/telegram_expense_manager/models/account_analytic_account.py b/telegram_expense_manager/models/account_analytic_account.py index d37921e..44a484c 100644 --- a/telegram_expense_manager/models/account_analytic_account.py +++ b/telegram_expense_manager/models/account_analytic_account.py @@ -61,32 +61,39 @@ def _attach_new_currency(self, currency): record.currency_ids = [(4, currency.id)] @api.multi - def get_currency_balance(self, currency=None): + def get_currency_balance(self, base_currency=None, currency=None): + # this method runs in sudo() mode - see /account_all telegram command respose_code (acc search) balance = 0.0 AccountMoveLine = self.env['account.move.line'] domain = [('analytic_account_id', 'in', self.mapped('id'))] + def get_base_currency_sum(): + base_currency_sum = 0.0 + domain.append(('currency_id', '=', False)) + line_ids = AccountMoveLine.search(domain) + base_currency_sum += sum(line_ids.mapped('balance')) + return base_currency_sum + if self._context.get('from_date', False): domain.append(('date', '>=', self._context['from_date'])) if self._context.get('to_date', False): domain.append(('date', '<=', self._context['to_date'])) - base_currency = self.env.user.partner_id.company_id.currency_id if currency and currency != base_currency: domain.append(('currency_id', '=', currency.id)) balance = sum(AccountMoveLine.search(domain).mapped('balance')) elif currency and currency == base_currency: - base_currency_sum = 0.0 - domain.append(('currency_id', '=', False)) - line_ids = AccountMoveLine.search(domain) - balance += sum(line_ids.mapped('balance')) + balance = get_base_currency_sum() else: - domain.append(('currency_id', '!=', False)) - all_currencies_line_ids = AccountMoveLine.search(domain) + # this is for tatal sum + currency_domain = domain[:] + currency_domain.append(('currency_id', '!=', False)) + all_currencies_line_ids = AccountMoveLine.search(currency_domain) currency_ids = all_currencies_line_ids.mapped('currency_id') for currency_id in currency_ids: rate = self.env['res.currency']._get_conversion_rate(base_currency, currency_id) + filtered_line_ids = all_currencies_line_ids.filtered(lambda r: r.currency_id == currency_id) balance += sum(all_currencies_line_ids.filtered(lambda r: r.currency_id == currency_id).mapped('balance')) * rate - balance += self.get_currency_balance(currency=base_currency) + balance += get_base_currency_sum() return round(balance, 1) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index 52f3c40..b249726 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -470,12 +470,12 @@ def _em_add_record(self, journal_ref, from_data, to_data): journal = self.env.ref(journal_ref) + base_currency_id = self.em_currency_id - currency_id = currency and self.env['res.currency'].search([('name', '=', currency)], limit=1) - currency_alias = currency and self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1) - currency_id = currency_id or currency_alias and currency_alias.currency_id + currency_id = currency and (self.env['res.currency'].search([('name', '=', currency)], limit=1) \ + or self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1)) - if currency_id: + if currency_id and currency_id != base_currency_id: analytic_account_lst = [from_data.get('analytic_account_id'), to_data.get('analytic_account_id')] analytic_account_ids = self.env['account.analytic.account'].browse(analytic_account_lst) analytic_account_ids._attach_new_currency(currency_id) From 4874de36066f7fa24b664887e83b66fb269c3324 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Wed, 31 Jan 2018 14:42:10 +0000 Subject: [PATCH 14/18] [ADD] telegram_expense_manager: multicurrency expense record report --- telegram_expense_manager/data/telegram_command.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/telegram_expense_manager/data/telegram_command.xml b/telegram_expense_manager/data/telegram_command.xml index 9a77e3e..f13b0b5 100644 --- a/telegram_expense_manager/data/telegram_command.xml +++ b/telegram_expense_manager/data/telegram_command.xml @@ -88,6 +88,8 @@ if not error: data['analytic_liquidity'] = analytic_liquidity data['analytic_payable'] = analytic_payable data['record'] = record + data['base_currency'] = partner.em_currency_id + data['currency_ids'] = env["account.move.line"].sudo().search([('analytic_account_id', '=', analytic_liquidity.id)]).mapped('currency_id').sorted(key=lambda r: r.id) @@ -98,7 +100,7 @@ if not error: New record is added! Check or edit it here: /record_ New Balance: - + ( ) — From e645bd0ee1dd309a84ffd9aa2109aff00d7ec121 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Tue, 6 Feb 2018 13:53:16 +0000 Subject: [PATCH 15/18] [FIX] telegram_expense_manager: take currency from alias if there is no currency found --- telegram_expense_manager/models/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index b249726..080c3db 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -473,7 +473,7 @@ def _em_add_record(self, base_currency_id = self.em_currency_id currency_id = currency and (self.env['res.currency'].search([('name', '=', currency)], limit=1) \ - or self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1)) + or self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1).currency_id) if currency_id and currency_id != base_currency_id: analytic_account_lst = [from_data.get('analytic_account_id'), to_data.get('analytic_account_id')] From e77fd45ca9ba6d4bb4e6da16d920fa6894d7e0f4 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Fri, 9 Feb 2018 09:09:18 +0000 Subject: [PATCH 16/18] [ADD] telegram_expense_manager: case-insensitive currency search --- telegram_expense_manager/models/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index 080c3db..b89bfcb 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -472,8 +472,8 @@ def _em_add_record(self, journal = self.env.ref(journal_ref) base_currency_id = self.em_currency_id - currency_id = currency and (self.env['res.currency'].search([('name', '=', currency)], limit=1) \ - or self.env['res.currency.alias'].sudo().search([('name', '=', currency)], limit=1).currency_id) + currency_id = currency and (self.env['res.currency'].search([('name', 'ilike', currency)], limit=1) \ + or self.env['res.currency.alias'].sudo().search([('name', 'ilike', currency)], limit=1).currency_id) if currency_id and currency_id != base_currency_id: analytic_account_lst = [from_data.get('analytic_account_id'), to_data.get('analytic_account_id')] From b3262fdc4513ff28acee64619a39a34988d538a2 Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Fri, 9 Feb 2018 11:33:47 +0000 Subject: [PATCH 17/18] [FIX] telegram_expense_manager: don't specify base currency in account.move.line - all lines without currency_id are concidered as in base currency --- telegram_expense_manager/models/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram_expense_manager/models/api.py b/telegram_expense_manager/models/api.py index b89bfcb..1eba998 100644 --- a/telegram_expense_manager/models/api.py +++ b/telegram_expense_manager/models/api.py @@ -483,7 +483,7 @@ def _em_add_record(self, common = { 'partner_id': self.id, 'name': text or 'unknown', - 'currency_id': currency_id and currency_id.id or None, + 'currency_id': currency_id and currency_id != base_currency_id and currency_id.id or None, } if isinstance(amount, basestring): amount = float(amount.replace(',', '.')) From ab00b11bc20a0a8acc30675c30fabfb44e8f40de Mon Sep 17 00:00:00 2001 From: Ildar Nasyrov Date: Mon, 12 Feb 2018 06:50:09 +0000 Subject: [PATCH 18/18] [ADD] telegram_expense_manager: data file for currency aliases --- telegram_expense_manager/__manifest__.py | 1 + .../data/res_currency_data.xml | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 telegram_expense_manager/data/res_currency_data.xml diff --git a/telegram_expense_manager/__manifest__.py b/telegram_expense_manager/__manifest__.py index 085b2d5..a8e2cda 100644 --- a/telegram_expense_manager/__manifest__.py +++ b/telegram_expense_manager/__manifest__.py @@ -28,6 +28,7 @@ "data/account.xml", "data/analytic.xml", "data/cron.xml", + "data/res_currency_data.xml", "views/schedule.xml", "views/account_account.xml", "views/res_currency_view.xml", diff --git a/telegram_expense_manager/data/res_currency_data.xml b/telegram_expense_manager/data/res_currency_data.xml new file mode 100644 index 0000000..f9c6eca --- /dev/null +++ b/telegram_expense_manager/data/res_currency_data.xml @@ -0,0 +1,44 @@ + + + + + + + + руб + + + + руб. + + + + р. + + + + рубль + + + + рубля + + + + рублей + + + + доллар + + + + долларов + + + + евро + + + +