From f11601b0669780f08d8dd60894c5d352fefeea11 Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Fri, 24 May 2024 17:07:26 +0200 Subject: [PATCH] [NEW] lcc_comchain_base,lcc_cyclos_base: add safe wallet to backend info --- .../models/res_partner_backend.py | 40 +++++++++++++++++++ .../services/partner_services.py | 12 ------ lcc_cyclos_base/models/res_partner_backend.py | 10 +++++ lcc_cyclos_base/services/partner_services.py | 9 ----- .../models/res_partner.py | 2 +- .../models/res_partner_backend.py | 3 ++ .../services/partner_services.py | 11 ++--- 7 files changed, 57 insertions(+), 30 deletions(-) diff --git a/lcc_comchain_base/models/res_partner_backend.py b/lcc_comchain_base/models/res_partner_backend.py index 99bc2d28..a06dece8 100644 --- a/lcc_comchain_base/models/res_partner_backend.py +++ b/lcc_comchain_base/models/res_partner_backend.py @@ -45,6 +45,19 @@ def comchain_backend_id(self): return False return "%s:%s" % ("comchain", currency_name) + def _update_search_data(self, backend_keys): + _logger.debug("SEARCH: backend_keys = %s" % backend_keys) + data = super(ResPartnerBackend, self)._update_search_data(backend_keys) + for wallet in self: + if wallet.type != "comchain": + continue + if wallet.comchain_id: + for backend_key in backend_keys: + if backend_key.startswith("comchain:"): + data[backend_key] = [wallet.comchain_id] + _logger.debug("SEARCH: data %s" % data) + return data + @property def comchain_backend_accounts_data(self): """Return normalized backend account's data""" @@ -68,6 +81,33 @@ def comchain_backend_accounts_data(self): "active": self.status == "active", } ) + + company = self.partner_id.company_id + safe_wallet_partner = company.safe_wallet_partner_id + + if safe_wallet_partner: + + safe_wallet_profile_info = safe_wallet_partner.lcc_profile_info() + if safe_wallet_profile_info: + if len(safe_wallet_profile_info) > 1: + raise ValueError("Safe partner has more than one public profile") + + ## Safe wallet is configured and has a public profile + data["safe_wallet_recipient"] = safe_wallet_profile_info[0] + + monujo_backends = safe_wallet_partner.lcc_backend_ids._update_search_data( + [self.comchain_backend_id] + ) + if len(monujo_backends) > 1: + raise ValueError("Safe partner has more than one wallet") + data["safe_wallet_recipient"]["monujo_backends"] = monujo_backends + + else: + _logger.error( + "Safe wallet %s has no public profile", + safe_wallet_partner.name, + ) + return [data] @api.depends("name", "type", "comchain_status") diff --git a/lcc_comchain_base/services/partner_services.py b/lcc_comchain_base/services/partner_services.py index d0ce2472..bf478a27 100644 --- a/lcc_comchain_base/services/partner_services.py +++ b/lcc_comchain_base/services/partner_services.py @@ -11,18 +11,6 @@ class PartnerService(Component): _inherit = "partner.service" - def _update_search_data(self, partner, backend_keys): - _logger.debug("SEARCH: backend_keys = %s" % backend_keys) - data = super(PartnerService, self)._update_search_data(partner, backend_keys) - wallets = partner.get_wallets("comchain") - for wallet in wallets: - if wallet.comchain_id: - for backend_key in backend_keys: - if backend_key.startswith("comchain:"): - data[backend_key] = [wallet.comchain_id] - _logger.debug("SEARCH: data %s" % data) - return data - def _get_backend_credentials(self, partner): data = super(PartnerService, self)._get_backend_credentials(partner) wallets = partner.get_wallets("comchain") diff --git a/lcc_cyclos_base/models/res_partner_backend.py b/lcc_cyclos_base/models/res_partner_backend.py index 960a0084..98139246 100644 --- a/lcc_cyclos_base/models/res_partner_backend.py +++ b/lcc_cyclos_base/models/res_partner_backend.py @@ -18,6 +18,16 @@ class ResPartnerBackend(models.Model): cyclos_id = fields.Char(string="Cyclos id") cyclos_status = fields.Char(string="Cyclos Status") + def _update_search_data(self, backend_keys): + data = super(ResPartnerBackend, self)._update_search_data(backend_keys) + for wallet in self: + if wallet.type != "cyclos": + continue + for backend_key in backend_keys: + if backend_key.startswith("cyclos:") and wallet.cyclos_id: + data[backend_key] = [wallet.cyclos_id] + return data + @property def cyclos_backend_json_data(self): """Return normalized backend account's data""" diff --git a/lcc_cyclos_base/services/partner_services.py b/lcc_cyclos_base/services/partner_services.py index 1316fb8f..3a22b13a 100644 --- a/lcc_cyclos_base/services/partner_services.py +++ b/lcc_cyclos_base/services/partner_services.py @@ -11,15 +11,6 @@ class PartnerService(Component): _inherit = "partner.service" - def _update_search_data(self, partner, backend_keys): - data = super(PartnerService, self)._update_search_data(partner, backend_keys) - wallets = partner.get_wallets("cyclos") - for wallet in wallets: - for backend_key in backend_keys: - if backend_key.startswith("cyclos:") and wallet.cyclos_id: - data[backend_key] = [wallet.cyclos_id] - return data - def _get_backend_credentials(self, partner): data = super(PartnerService, self)._get_backend_credentials(partner) wallets = partner.get_wallets("cyclos") diff --git a/lcc_lokavaluto_app_connection/models/res_partner.py b/lcc_lokavaluto_app_connection/models/res_partner.py index 7722547e..9f36191e 100644 --- a/lcc_lokavaluto_app_connection/models/res_partner.py +++ b/lcc_lokavaluto_app_connection/models/res_partner.py @@ -43,7 +43,7 @@ def _compute_nb_wallets(self): def get_wallets(self, type): self.ensure_one() - wallets = [backend for backend in self.lcc_backend_ids if backend.type == type] + wallets = [wallet for wallet in self.lcc_backend_ids if wallet.type == type] if len(wallets) > 0: if len(wallets) > 1: raise NotImplementedError( diff --git a/lcc_lokavaluto_app_connection/models/res_partner_backend.py b/lcc_lokavaluto_app_connection/models/res_partner_backend.py index ea6babfb..76953880 100644 --- a/lcc_lokavaluto_app_connection/models/res_partner_backend.py +++ b/lcc_lokavaluto_app_connection/models/res_partner_backend.py @@ -33,6 +33,9 @@ class ResPartnerBackend(models.Model): ) partner_id = fields.Many2one("res.partner", string="Partner", required=True) + def _update_search_data(self, backend_keys): + return {} + @api.depends("name", "type") def _compute_status(self): pass diff --git a/lcc_lokavaluto_app_connection/services/partner_services.py b/lcc_lokavaluto_app_connection/services/partner_services.py index aee2bbf7..6bde71f9 100644 --- a/lcc_lokavaluto_app_connection/services/partner_services.py +++ b/lcc_lokavaluto_app_connection/services/partner_services.py @@ -256,8 +256,7 @@ def search_recipients(self, recipients_search_info): if not lcc_profile_info: continue row = lcc_profile_info[0] - row["monujo_backends"] = self._update_search_data( - partner, + row["monujo_backends"] = partner.lcc_backend_ids._update_search_data( [k for k in backend_keys if k.startswith("%s:" % recipient.type)], ) rows.append(row) @@ -302,8 +301,7 @@ def search_recipient_by_uri(self): partner = recipients[0].partner_id recipient = partner.lcc_profile_info()[0] - recipient["monujo_backends"] = self._update_search_data( - partner, + recipient["monujo_backends"] = partner.lcc_backend_ids._update_search_data( [k for k in backend_keys if k.startswith("%s:" % recipients[0].type)], ) @@ -404,7 +402,7 @@ def _get_formatted_recipients(self, recipients, backend_keys): if backend_keys: for partner in recipients: row = partner.lcc_profile_info()[0] - row["monujo_backends"] = self._update_search_data(partner, backend_keys) + row["monujo_backends"] = partner.lcc_backend_ids._update_search_data(backend_keys) rows.append(row) return {"count": len(rows), "rows": rows} @@ -416,9 +414,6 @@ def _prepare_params(self, params): params["%s_id" % key] = val["id"] return params - def _update_search_data(self, partner, backend_keys): - return {} - def _get_backend_credentials(self, partner): return []