From 7758c36cb80384bed6b365cac87c4b7f568bba82 Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Fri, 23 Sep 2022 13:53:47 +0200 Subject: [PATCH] [add] controller --- controllers/__init__.py | 2 +- controllers/main.py | 32 ++++++++++++++++++ models/res_partner.py | 25 +++----------- views/res_partner.xml | 12 +------ wizard/multi_partner_release_wizard.py | 44 ++++++++++++++++--------- wizard/multi_partner_release_wizard.xml | 12 +++++-- 6 files changed, 77 insertions(+), 50 deletions(-) create mode 100644 controllers/main.py diff --git a/controllers/__init__.py b/controllers/__init__.py index 75f6a06..abacf04 100644 --- a/controllers/__init__.py +++ b/controllers/__init__.py @@ -1,4 +1,4 @@ # Copyright 2022 Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from . import banner_release, portal +from . import banner_release, main, portal diff --git a/controllers/main.py b/controllers/main.py new file mode 100644 index 0000000..ac60913 --- /dev/null +++ b/controllers/main.py @@ -0,0 +1,32 @@ +# Copyright 2022 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import exceptions, http +from odoo.http import request + + +class ReleaseController(http.Controller): + # ------------------------------------------------------ + # Routes + # ------------------------------------------------------ + @http.route( + ["/post-modules"], + type="json", + auth="none", + method=["POST"], + csrf=False, + ) + def post_modules(self): + ip_addr = request.httprequest.remote_addr + partner_id = ( + request.env["res.partner"].sudo().search([("server_ip", "=", ip_addr)]) + ) + if partner_id: + modules = request.jsonrequest.get("modules") + partner_id.retrieve_modules(modules) + else: + return exceptions.AccessDenied() + + # ------------------------------------------------------ + # Common functions + # ------------------------------------------------------ diff --git a/models/res_partner.py b/models/res_partner.py index 6c76a60..541acee 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,9 +1,8 @@ # © 2022 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import requests -from odoo import _, exceptions, fields, models +from odoo import fields, models class ResPartner(models.Model): @@ -26,8 +25,7 @@ class ResPartner(models.Model): string="Lien de partage client", compute="_compute_release_share_link", ) - server_url = fields.Char("URL du serveur") - database_name = fields.Char("Nom de la base de données") + server_ip = fields.Char("IP du serveur") # ------------------------------------------------------ # Computed fields / Search Fields @@ -53,23 +51,10 @@ class ResPartner(models.Model): if partner.is_company: partner._portal_ensure_token() - def retrieve_modules(self): + def retrieve_modules(self, modules): existing_modules = self.env["res.partner.module"].search([]) for partner in self: - if not partner.server_url or not partner.database_name: - raise exceptions.UserError( - _("L'url et la base de données doivent être renseignés.") - ) - - try: - response = requests.get( - partner.server_url + "/get-modules", - headers={"DbName": partner.database_name}, - ).json() - except Exception as e: - raise exceptions.UserError(e.__str__()) - - for module in response: + for module in modules: if module.get("author_type") != "odoo": # Mise à jour du module if module.get("name") in existing_modules.mapped("name"): @@ -94,7 +79,7 @@ class ResPartner(models.Model): lambda m: m.get("name") if m.get("author_type") != "odoo" else None, - response, + modules, ) ) ) diff --git a/views/res_partner.xml b/views/res_partner.xml index be94263..064148d 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -18,19 +18,9 @@ > <group> <group> - <div class="text-muted" colspan="2"> - Format de l'url : https://exemple.com - </div> - <field name="server_url" /> - <field name="database_name" /> + <field name="server_ip" /> </group> <group> - <button - name="retrieve_modules" - type="object" - string="Récupérer/Mettre à jour la liste depuis le serveur" - class="btn-info" - /> </group> </group> <field name="module_ids"> diff --git a/wizard/multi_partner_release_wizard.py b/wizard/multi_partner_release_wizard.py index 2466cee..35228c6 100644 --- a/wizard/multi_partner_release_wizard.py +++ b/wizard/multi_partner_release_wizard.py @@ -1,7 +1,7 @@ # Copyright 2022 Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from odoo import fields, models, api +from odoo import fields, models class MultiPartnerReleaseWizard(models.TransientModel): @@ -43,23 +43,35 @@ class MultiPartnerReleaseWizard(models.TransientModel): detail_module = [] for module in self.release_module_ids: detail_module.append( - (0, 0, { - "module_id": module.module_id.id, - "release_type": module.release_type, - "log": module.log, - }) + ( + 0, + 0, + { + "module_id": module.module_id.id, + "release_type": module.release_type, + "log": module.log, + }, + ) ) - partner.write({ - "release_ids": [(0, 0, { - "user_id": self.user_id.id, - "release_date": self.release_date, - "description": self.description, - "release_module_ids": detail_module, - })] - }) + partner.write( + { + "release_ids": [ + ( + 0, + 0, + { + "user_id": self.user_id.id, + "release_date": self.release_date, + "description": self.description, + "release_module_ids": detail_module, + }, + ) + ] + } + ) return { - 'type': 'ir.actions.client', - 'tag': 'reload', + "type": "ir.actions.client", + "tag": "reload", } diff --git a/wizard/multi_partner_release_wizard.xml b/wizard/multi_partner_release_wizard.xml index 7683ce7..436dc3b 100644 --- a/wizard/multi_partner_release_wizard.xml +++ b/wizard/multi_partner_release_wizard.xml @@ -45,7 +45,12 @@ </field> </group> <footer> - <button name="create_releases" type="object" string="Créer les releases" class="btn-primary"/> + <button + name="create_releases" + type="object" + string="Créer les releases" + class="btn-primary" + /> <button string="Fermer" class="oe_link" special="cancel" /> </footer> </sheet> @@ -54,7 +59,10 @@ </record> <!-- Action Window --> - <record id="multi_partner_release_wizard_act_window" model="ir.actions.act_window"> + <record + id="multi_partner_release_wizard_act_window" + model="ir.actions.act_window" + > <field name="name">Releases Client</field> <field name="type">ir.actions.act_window</field> <field name="res_model">multi.partner.release.wizard</field> -- GitLab