[MiG] port from 19
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
|
from . import models
|
||||||
|
from . import wizard
|
||||||
|
from .hooks import post_init_hook
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
{
|
||||||
|
'name': "mailcatcher_menu",
|
||||||
|
|
||||||
|
'summary': """
|
||||||
|
Add menu-item to local mailcatcher""",
|
||||||
|
|
||||||
|
'description': """
|
||||||
|
Add menu-item to local mailcatcher
|
||||||
|
""",
|
||||||
|
|
||||||
|
'author': "Open2bizz",
|
||||||
|
'website': "http://www.open2bizz.tech",
|
||||||
|
'category': 'Tools',
|
||||||
|
'license': "AGPL-3",
|
||||||
|
'version': '15.0.1.0.0',
|
||||||
|
'module_type': 'official',
|
||||||
|
'depends': ['mail','base',],
|
||||||
|
'data': [
|
||||||
|
'wizard/install_warning_wizard_view.xml',
|
||||||
|
'views/views.xml',
|
||||||
|
'data/data.xml',
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
],
|
||||||
|
'post_init_hook': 'post_init_hook',
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
||||||
|
# License LGPL-3
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from odoo import http
|
||||||
|
from odoo.http import request, Response
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
MAILHOG_BASE = "http://localhost:8025"
|
||||||
|
|
||||||
|
|
||||||
|
class MailcatcherProxy(http.Controller):
|
||||||
|
|
||||||
|
@http.route(['/mailcatcher', '/mailcatcher/<path:subpath>'],
|
||||||
|
type='http', auth='user', website=False, csrf=False)
|
||||||
|
def mailcatcher_proxy(self, subpath='', **kw):
|
||||||
|
"""Proxy requests to the local MailHog instance."""
|
||||||
|
target_url = f"{MAILHOG_BASE}/{subpath}"
|
||||||
|
if request.httprequest.query_string:
|
||||||
|
target_url += '?' + request.httprequest.query_string.decode('utf-8')
|
||||||
|
|
||||||
|
try:
|
||||||
|
headers = {
|
||||||
|
k: v for k, v in request.httprequest.headers
|
||||||
|
if k.lower() not in ('host', 'cookie', 'authorization')
|
||||||
|
}
|
||||||
|
resp = requests.request(
|
||||||
|
method=request.httprequest.method,
|
||||||
|
url=target_url,
|
||||||
|
headers=headers,
|
||||||
|
data=request.httprequest.get_data(),
|
||||||
|
timeout=30,
|
||||||
|
allow_redirects=False,
|
||||||
|
)
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
_logger.warning("Could not connect to MailHog at %s", MAILHOG_BASE)
|
||||||
|
return Response("MailHog is not available", status=502)
|
||||||
|
|
||||||
|
excluded_headers = {
|
||||||
|
'content-encoding', 'content-length', 'transfer-encoding',
|
||||||
|
'connection',
|
||||||
|
}
|
||||||
|
response_headers = [
|
||||||
|
(k, v) for k, v in resp.headers.items()
|
||||||
|
if k.lower() not in excluded_headers
|
||||||
|
]
|
||||||
|
|
||||||
|
return Response(
|
||||||
|
resp.content,
|
||||||
|
status=resp.status_code,
|
||||||
|
headers=response_headers,
|
||||||
|
)
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!--
|
||||||
|
<record id="object0" model="testserver_o2b.testserver_o2b">
|
||||||
|
<field name="name">Object 0</field>
|
||||||
|
<field name="value">0</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object1" model="testserver_o2b.testserver_o2b">
|
||||||
|
<field name="name">Object 1</field>
|
||||||
|
<field name="value">10</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object2" model="testserver_o2b.testserver_o2b">
|
||||||
|
<field name="name">Object 2</field>
|
||||||
|
<field name="value">20</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object3" model="testserver_o2b.testserver_o2b">
|
||||||
|
<field name="name">Object 3</field>
|
||||||
|
<field name="value">30</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="object4" model="testserver_o2b.testserver_o2b">
|
||||||
|
<field name="name">Object 4</field>
|
||||||
|
<field name="value">40</field>
|
||||||
|
</record>
|
||||||
|
-->
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
||||||
|
# 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)
|
||||||
@@ -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 <<EOL
|
||||||
|
[Unit]
|
||||||
|
Description=MailHog
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
ExecStart=/usr/local/bin/MailHog
|
||||||
|
Restart=always
|
||||||
|
Environment="PATH=/usr/local/go/bin:/usr/bin:/bin"
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOL
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==================================="
|
||||||
|
echo "Enable + start MailHog service..."
|
||||||
|
echo "==================================="
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable mailhog
|
||||||
|
systemctl start mailhog
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "==================================="
|
||||||
|
echo "MailHog is running!"
|
||||||
|
echo "Web UI: http://localhost:8025"
|
||||||
|
echo "SMTP: localhost:1025"
|
||||||
|
echo "==================================="
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# No models needed — MailHog is accessed via the proxy controller
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
||||||
|
# License LGPL-3
|
||||||
|
|
||||||
|
# MailHog is now accessed via the internal proxy controller at /mailcatcher/
|
||||||
|
# so no dynamic URL computation is needed anymore.
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||||
|
"access_mailcatcher_install_warning_wizard","mailcatcher.install.warning.wizard","model_mailcatcher_install_warning_wizard","base.group_user",1,1,1,1
|
||||||
|
Binary file not shown.
|
After Width: | Height: | Size: 382 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
@@ -0,0 +1,18 @@
|
|||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
<body>
|
||||||
|
<div class="document" id="module-name">
|
||||||
|
<h1 class="title">mailcatcher_menu</h1>
|
||||||
|
<p>
|
||||||
|
This module is ONLY for test environments In DC Open2Bizz
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Module is developed by Open2Bizz. Bug reports: support@open2bizz.eu
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<img src="https://www.open2bizz.tech/logo.png" style="max-height: 100px;">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<record model="ir.actions.act_url" id="action_mailcatcher_url">
|
||||||
|
<field name="name">Open Mailcatcher</field>
|
||||||
|
<field name="url">/mailcatcher/</field>
|
||||||
|
<field name="target">new</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<!-- Top menu item -->
|
||||||
|
<menuitem name="MailCatcher" id="mailcatcher_menu.menu_root" sequence="999" web_icon="mailcatcher_menu,static/description/email-icon.png" action="action_mailcatcher_url"/>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import install_warning_wizard
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
||||||
|
# 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()
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="view_mailcatcher_install_warning_wizard" model="ir.ui.view">
|
||||||
|
<field name="name">mailcatcher.install.warning.wizard.form</field>
|
||||||
|
<field name="model">mailcatcher.install.warning.wizard</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Install MailCatcher">
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<h4 class="alert-heading">Warning</h4>
|
||||||
|
<p>
|
||||||
|
You are about to install the <strong>MailCatcher</strong> module.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
This will also install <strong>MailHog</strong> as a systemd service on this server.
|
||||||
|
MailHog will listen on port <strong>8025</strong> (Web UI) and port <strong>1025</strong> (SMTP).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Do you want to proceed with the installation?
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
<button name="action_confirm_install" type="object"
|
||||||
|
string="Confirm Install" class="btn-primary"/>
|
||||||
|
<button string="Cancel" class="btn-secondary" special="cancel"/>
|
||||||
|
</footer>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="ir_cron_set_db_parameter" model="ir.cron">
|
||||||
|
<field name="name">Testserver: Set Date (ONLY FOR TEST ENV.)</field>
|
||||||
|
<field name="model_id" ref="base.model_ir_logging"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">model.set_db_param()</field>
|
||||||
|
<field name="interval_number">1</field>
|
||||||
|
<field name="interval_type">days</field>
|
||||||
|
<field name="user_id" ref="base.user_root"/>
|
||||||
|
<field name="active">True</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="ir_cron_cleanup_filestore_attachments" model="ir.cron">
|
||||||
|
<field name="name">Testserver: Cleanup Unneeded Filestore</field>
|
||||||
|
<field name="model_id" ref="base.model_ir_logging"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">model.cleanup_unneeded_filestore_attachments(5000)</field>
|
||||||
|
<field name="interval_number">15</field>
|
||||||
|
<field name="interval_type">minutes</field>
|
||||||
|
<field name="user_id" ref="base.user_root"/>
|
||||||
|
<field name="active">True</field>
|
||||||
|
</record>
|
||||||
|
<record id="base.autovacuum_job" model="ir.cron">
|
||||||
|
<field name="active">True</field>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@@ -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
|
||||||
|
)
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from .hooks import post_init_hook
|
||||||
@@ -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': '15.0.1.0.0',
|
||||||
|
'depends': ['testserver_o2b','website'],
|
||||||
|
'data': [
|
||||||
|
'views/templates.xml',
|
||||||
|
],
|
||||||
|
'post_init_hook': 'post_init_hook',
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import api, SUPERUSER_ID
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def post_init_hook(cr, registry):
|
||||||
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||||
|
|
||||||
|
Website = env['website'].sudo()
|
||||||
|
WebsitePage = env['website.page'].sudo()
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# 1. Get the generic TEST page template
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
test_view = env.ref(
|
||||||
|
'testserver_website_o2b.testserver_page_website',
|
||||||
|
raise_if_not_found=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not test_view:
|
||||||
|
_logger.error(
|
||||||
|
"Testserver website template "
|
||||||
|
"'testserver_website_o2b.testserver_page_website' not found."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# 2. Unpublish all existing website pages
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
pages = WebsitePage.search([])
|
||||||
|
|
||||||
|
if pages:
|
||||||
|
_logger.info(
|
||||||
|
"Unpublishing %s existing website pages.",
|
||||||
|
len(pages),
|
||||||
|
)
|
||||||
|
|
||||||
|
pages.write({
|
||||||
|
'website_published': False,
|
||||||
|
})
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# 3. Create a TEST homepage for every website
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
websites = Website.search([])
|
||||||
|
|
||||||
|
for website in websites:
|
||||||
|
_logger.info(
|
||||||
|
"Creating test homepage for website %s (%s).",
|
||||||
|
website.name,
|
||||||
|
website.id,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Each website gets its own ir.ui.view.
|
||||||
|
#
|
||||||
|
# In Odoo 15 website.page.website_id is related to
|
||||||
|
# view_id.website_id. Therefore we should not use the same
|
||||||
|
# ir.ui.view for multiple websites.
|
||||||
|
website_test_view = test_view.copy({
|
||||||
|
'name': 'Test environment - %s' % website.name,
|
||||||
|
'key': '%s.website_%s' % (test_view.key, website.id),
|
||||||
|
'website_id': website.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
test_page = WebsitePage.create({
|
||||||
|
'url': '/testmodus',
|
||||||
|
'view_id': website_test_view.id,
|
||||||
|
'website_published': True,
|
||||||
|
'website_indexed': False,
|
||||||
|
})
|
||||||
|
|
||||||
|
# Odoo 15 uses homepage_id, NOT homepage_url.
|
||||||
|
website.write({
|
||||||
|
'domain': False,
|
||||||
|
'homepage_id': test_page.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
_logger.info(
|
||||||
|
"Test homepage %s assigned to website %s.",
|
||||||
|
test_page.id,
|
||||||
|
website.id,
|
||||||
|
)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# 4. Disable all payment acquirers
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Odoo 15 uses payment.acquirer.
|
||||||
|
# payment.provider belongs to later Odoo versions.
|
||||||
|
#
|
||||||
|
if env.registry.get('payment.acquirer'):
|
||||||
|
payment_acquirers = env['payment.acquirer'].sudo().search([
|
||||||
|
('state', '!=', 'disabled'),
|
||||||
|
])
|
||||||
|
|
||||||
|
if payment_acquirers:
|
||||||
|
_logger.info(
|
||||||
|
"Disabling %s payment acquirers.",
|
||||||
|
len(payment_acquirers),
|
||||||
|
)
|
||||||
|
|
||||||
|
payment_acquirers.write({
|
||||||
|
'state': 'disabled',
|
||||||
|
})
|
||||||
|
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
# 5. Unpublish all webshop products
|
||||||
|
# ---------------------------------------------------------
|
||||||
|
#
|
||||||
|
# website_published only exists on product.template when the
|
||||||
|
# relevant website/eCommerce functionality is installed.
|
||||||
|
#
|
||||||
|
if env.registry.get('product.template'):
|
||||||
|
ProductTemplate = env['product.template'].sudo()
|
||||||
|
|
||||||
|
if 'website_published' in ProductTemplate._fields:
|
||||||
|
published_products = ProductTemplate.search([
|
||||||
|
('website_published', '=', True),
|
||||||
|
])
|
||||||
|
|
||||||
|
if published_products:
|
||||||
|
_logger.info(
|
||||||
|
"Unpublishing %s webshop products.",
|
||||||
|
len(published_products),
|
||||||
|
)
|
||||||
|
|
||||||
|
published_products.write({
|
||||||
|
'website_published': False,
|
||||||
|
})
|
||||||
|
|
||||||
|
_logger.info(
|
||||||
|
"Testserver website neutralization completed successfully."
|
||||||
|
)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
@@ -0,0 +1,18 @@
|
|||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
<body>
|
||||||
|
<div class="document" id="module-name">
|
||||||
|
<h1 class="title">Testservers when website</h1>
|
||||||
|
<p>
|
||||||
|
This module is ONLY for test environments In DC Open2Bizz
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Module is developed by Open2Bizz. Bug reports: support@open2bizz.eu
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<img src="https://www.open2bizz.tech/logo.png" style="max-height: 100px;">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<!-- Banner for web layout -->
|
||||||
|
<template id="testserver_banner_website" name="TOP banner test front" inherit_id="website.layout">
|
||||||
|
<xpath expr="//body" position="before">
|
||||||
|
<div>
|
||||||
|
<span style="text-align: center;
|
||||||
|
color: #FFFFFF;
|
||||||
|
background-color: #006CFE;
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
font-size: 16px;">
|
||||||
|
***** This is a test environment *****
|
||||||
|
<a href="https://www.open2bizz.tech/helpdesk" target="_blank" style="color: #000000;">
|
||||||
|
See website to report issue's.
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Test environment page -->
|
||||||
|
<template id="testserver_page_website" name="Website page front">
|
||||||
|
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div id="wrap" class="oe_structure oe_empty">
|
||||||
|
|
||||||
|
<section class="s_banner parallax s_parallax_is_fixed pb96 o_colored_level pt40" data-scroll-background-ratio="1" data-snippet="s_banner" data-name="Banner" style="background-image: none;">
|
||||||
|
|
||||||
|
<span class="s_parallax_bg oe_img_bg o_bg_img_center" style="background-image: url('https://hd-beamers.nl/wp-content/uploads/2014/05/Testbeeld-1280x720p_hd-ready.png'); background-position: 50% 0px;"/>
|
||||||
|
|
||||||
|
<div class="o_we_bg_filter" style="background-image: linear-gradient(135deg, rgba(21, 25, 116, 0.71) 0%, rgba(226, 51, 255, 0.5) 100%);"/>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row s_nb_column_fixed">
|
||||||
|
<div class="col-lg-6 jumbotron rounded o_cc o_cc1 pt32 pb32 o_colored_level" data-name="Box">
|
||||||
|
|
||||||
|
<h1>
|
||||||
|
<font style="font-size: 62px;" class="o_default_snippet_text">
|
||||||
|
TEST
|
||||||
|
</font>
|
||||||
|
<br/>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p class="lead o_default_snippet_text">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
|
||||||
|
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a class="mb-2 btn btn-primary" href="/web/login">
|
||||||
|
Login
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a class="mb-2 btn btn-secondary" href="https://www.open2bizz.nl">
|
||||||
|
Open2Bizz
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
Reference in New Issue
Block a user