diff --git a/controllers/__init__.py b/controllers/__init__.py index 75f6a061f6f23e9ecc3201cf44fcc248f66e1a3e..abacf04840d4a28b202898e50c6e7608c743acc9 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 0000000000000000000000000000000000000000..ac60913ba26e2aa500474778ba8ec87a8c46c444 --- /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 6c76a601086abf92c58269f7f241dcc785149bce..541acee01ebc07d9638f1b6f011fa5674c0cb6f1 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 be94263a68435985c1905af07b787c6a8fe708c9..064148de46fdb516d8a05bb27bb444b6b63166dc 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 2466cee8359f5d0fffcf908f1ebffbe5d4948a95..35228c6c3ea003bee9cd719664e7542e3c8b8f58 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 7683ce761fbc5863a5820922634e7b6cbdfe8894..436dc3b5f363f98c439f8d2177bdecd0195ddf53 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>