diff --git a/mailcatcher_menu/hooks.py b/mailcatcher_menu/hooks.py new file mode 100644 index 0000000..6ce6ec2 --- /dev/null +++ b/mailcatcher_menu/hooks.py @@ -0,0 +1,40 @@ +# Copyright 2024 Open2Bizz +# License LGPL-3 + +import logging +import os +import subprocess + +_logger = logging.getLogger(__name__) + + +def post_init_hook(cr, registry): + """Install MailHog as a systemd service when the module is installed.""" + script_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + 'install_mailhog_as_service.sh', + ) + + if not os.path.isfile(script_path): + _logger.error("MailHog install script not found at %s", script_path) + return + + _logger.info("Running MailHog install script: %s", script_path) + try: + result = subprocess.run( + ['bash', script_path], + capture_output=True, + text=True, + timeout=300, + ) + if result.returncode == 0: + _logger.info("MailHog installed successfully.\n%s", result.stdout) + else: + _logger.error( + "MailHog install script failed (exit %s):\n%s\n%s", + result.returncode, result.stdout, result.stderr, + ) + except subprocess.TimeoutExpired: + _logger.error("MailHog install script timed out after 300 seconds") + except Exception as e: + _logger.error("Failed to run MailHog install script: %s", e) diff --git a/mailcatcher_menu/install_mailhog_as_service.sh b/mailcatcher_menu/install_mailhog_as_service.sh new file mode 100644 index 0000000..c950793 --- /dev/null +++ b/mailcatcher_menu/install_mailhog_as_service.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +set -e # stop bij fouten + +echo "" +echo "===================================" +echo "Update apt..." +echo "===================================" +apt update + +echo "" +echo "===================================" +echo "Install dependencies..." +echo "===================================" +apt-get -y install wget tar + +echo "" +echo "===================================" +echo "Install Go 1.24.3..." +echo "===================================" +GO_VERSION=1.24.3 +wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz + +sudo rm -rf /usr/local/go +sudo tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz + +# Go environment correct instellen +export GOROOT=/usr/local/go +export GOPATH=$HOME/go +export PATH=$GOROOT/bin:$GOPATH/bin:$PATH + +echo "Go version:" +go version + +echo "" +echo "===================================" +echo "Installing MailHog..." +echo "===================================" +/usr/local/go/bin/go install github.com/mailhog/MailHog@latest + +if [ -f "$HOME/go/bin/MailHog" ]; then + echo "MailHog installed successfully" +else + echo "ERROR: MailHog binary not found!" + exit 1 +fi + +echo "" +echo "===================================" +echo "Copy MailHog to /usr/local/bin..." +echo "===================================" +sudo cp "$HOME/go/bin/MailHog" /usr/local/bin/MailHog + +echo "" +echo "===================================" +echo "Create MailHog service..." +echo "===================================" +sudo tee /etc/systemd/system/mailhog.service > /dev/null < +# License LGPL-3 + +from odoo import models, fields, api, _ + + +class MailcatcherInstallWarningWizard(models.TransientModel): + _name = 'mailcatcher.install.warning.wizard' + _description = 'MailCatcher Install Warning' + + module_id = fields.Many2one('ir.module.module', string='Module', readonly=True) + + def action_confirm_install(self): + """User confirmed — proceed with the actual module installation.""" + self.ensure_one() + return self.module_id.with_context( + skip_mailcatcher_warning=True + ).button_immediate_install() + + +class IrModuleModule(models.Model): + _inherit = 'ir.module.module' + + def button_immediate_install(self): + """Override to show a warning before installing mailcatcher_menu.""" + if self.env.context.get('skip_mailcatcher_warning'): + return super().button_immediate_install() + + mailcatcher_modules = self.filtered(lambda m: m.name == 'mailcatcher_menu') + if mailcatcher_modules: + wizard = self.env['mailcatcher.install.warning.wizard'].create({ + 'module_id': mailcatcher_modules[0].id, + }) + return { + 'name': _('Install MailCatcher Module'), + 'type': 'ir.actions.act_window', + 'res_model': 'mailcatcher.install.warning.wizard', + 'res_id': wizard.id, + 'view_mode': 'form', + 'target': 'new', + } + + return super().button_immediate_install() diff --git a/mailcatcher_menu/wizard/install_warning_wizard_view.xml b/mailcatcher_menu/wizard/install_warning_wizard_view.xml new file mode 100644 index 0000000..a5f5922 --- /dev/null +++ b/mailcatcher_menu/wizard/install_warning_wizard_view.xml @@ -0,0 +1,28 @@ + + + mailcatcher.install.warning.wizard.form + mailcatcher.install.warning.wizard + +
+ +
+
+
+
+
+
diff --git a/testserver_o2b/data/ir_cron.xml b/testserver_o2b/data/ir_cron.xml new file mode 100644 index 0000000..b766b76 --- /dev/null +++ b/testserver_o2b/data/ir_cron.xml @@ -0,0 +1,29 @@ + + + + + Testserver: Set Date (ONLY FOR TEST ENV.) + + code + model.set_db_param() + 1 + days + + True + + + + Testserver: Cleanup Unneeded Filestore + + code + model.cleanup_unneeded_filestore_attachments(5000) + 15 + minutes + + True + + + True + + + diff --git a/testserver_o2b/hooks.py b/testserver_o2b/hooks.py new file mode 100644 index 0000000..7d6ec9d --- /dev/null +++ b/testserver_o2b/hooks.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from odoo import api, SUPERUSER_ID + + +def post_init_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + + env['ir.logging'].sudo().cleanup_unneeded_filestore_attachments( + limit=50 + ) \ No newline at end of file diff --git a/testserver_website_o2b/__init__.py b/testserver_website_o2b/__init__.py new file mode 100644 index 0000000..4e2b3cc --- /dev/null +++ b/testserver_website_o2b/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from .hooks import post_init_hook \ No newline at end of file diff --git a/testserver_website_o2b/__manifest__.py b/testserver_website_o2b/__manifest__.py new file mode 100644 index 0000000..7a1330a --- /dev/null +++ b/testserver_website_o2b/__manifest__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Set as testserver Open2Bizz, when website is enabled", + + 'summary': """ + Only to be used when installed as TEST env. Open2Bizz""", + + + 'author': "Open2bizz", + 'website': "http://www.open2bizz.tech", + 'category': 'Tools', + 'license': "AGPL-3", + 'version': '16.0.1.0.0', + 'depends': ['testserver_o2b','website'], + 'data': [ + 'views/templates.xml', + ], + 'post_init_hook': 'post_init_hook', +} diff --git a/testserver_website_o2b/hooks.py b/testserver_website_o2b/hooks.py new file mode 100644 index 0000000..5301d22 --- /dev/null +++ b/testserver_website_o2b/hooks.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +import logging + +from odoo import api, fields, models, SUPERUSER_ID + +_logger = logging.getLogger(__name__) + + +def post_init_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + + model_website_page = env['ir.model'].search([ + ('model', '=', 'website.page') + ]) + + test_view = env['ir.model.data']._xmlid_to_res_id( + 'testserver_website_o2b.testserver_page_website' + ) + + if model_website_page: + for page in env['website.page'].search([]): + _logger.error("________Disable page %s", page.id) + page.write({ + 'is_published': False, + }) + + new_page = env['website.page'].create({ + 'name': "Testbeeld", + 'url': "/testmodus", + 'view_id': test_view, + 'is_published': True, + }) + + for website in env['website'].search([]): + website.write({ + 'domain': False, + 'homepage_url': new_page.url, + }) + + module_ecommerce = env['ir.module.module'].search([ + ('name', '=', 'website_sale') + ]) + + if module_ecommerce and module_ecommerce.state == 'installed': + # Disable payment options + for payment_method in env['payment.method'].search([]): + payment_method.write({ + 'active': False, + }) + _logger.error( + "________Disable payment method %s", + payment_method.id, + ) + + # Disable products + for product in env['product.template'].search([]): + product.write({ + 'website_published': False, + }) + _logger.error( + "________Disable product %s", + product.id, + ) \ No newline at end of file diff --git a/testserver_website_o2b/models/__init__.py b/testserver_website_o2b/models/__init__.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/testserver_website_o2b/models/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/testserver_website_o2b/static/description/icon.png b/testserver_website_o2b/static/description/icon.png new file mode 100644 index 0000000..34cfef5 Binary files /dev/null and b/testserver_website_o2b/static/description/icon.png differ diff --git a/testserver_website_o2b/static/description/index.html b/testserver_website_o2b/static/description/index.html new file mode 100644 index 0000000..c8cdcf3 --- /dev/null +++ b/testserver_website_o2b/static/description/index.html @@ -0,0 +1,18 @@ + + +
+

Testservers when website

+

+ This module is ONLY for test environments In DC Open2Bizz +

+ +

+ Module is developed by Open2Bizz. Bug reports: support@open2bizz.eu +

+

+ +

+ +
+ + diff --git a/testserver_website_o2b/views/templates.xml b/testserver_website_o2b/views/templates.xml new file mode 100644 index 0000000..dd8cc96 --- /dev/null +++ b/testserver_website_o2b/views/templates.xml @@ -0,0 +1,48 @@ + + + + + + + + + + +