Compare commits
24
Commits
15.0_f33851
..
17.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51ba70fc85 | ||
|
|
06d35251f2 | ||
|
|
c3e40659d4 | ||
|
|
07904de196 | ||
|
|
ecd7732619 | ||
|
|
59061098c4 | ||
|
|
e70f670a11 | ||
|
|
804d7fa6c1 | ||
|
|
624cf8a782 | ||
|
|
2d20776490 | ||
|
|
8689f554da | ||
|
|
5ec0750d24 | ||
|
|
94fc63e88e | ||
|
|
f067d253f5 | ||
|
|
4d242c08a6 | ||
|
|
4ae5974174 | ||
|
|
1ad1ac586f | ||
|
|
4a35e5da16 | ||
|
|
bae8eff791 | ||
|
|
6abcd3dc80 | ||
|
|
13dd7d5696 | ||
|
|
ac2bb85127 | ||
|
|
1473a7533d | ||
|
|
e556bca3ae |
@@ -1,86 +1,57 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
echo "";
|
||||||
set -e # stop bij fouten
|
echo "===================================";
|
||||||
|
echo "Install golang-go...";
|
||||||
echo ""
|
echo "===================================";
|
||||||
echo "==================================="
|
apt-get -y install golang-go;
|
||||||
echo "Update apt..."
|
if [ $? == 0 ] ; then
|
||||||
echo "==================================="
|
echo 'golang-go installed'
|
||||||
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.26.0
|
|
||||||
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
|
else
|
||||||
echo "ERROR: MailHog binary not found!"
|
echo 'ERROR: Installing golang-go NOT succesfull!'
|
||||||
exit 1
|
exit
|
||||||
fi
|
fi
|
||||||
|
echo "";
|
||||||
echo ""
|
echo "===================================";
|
||||||
echo "==================================="
|
echo "Installing mailhog...";
|
||||||
echo "Copy MailHog to /usr/local/bin..."
|
echo "===================================";
|
||||||
echo "==================================="
|
go install github.com/mailhog/MailHog@latest;
|
||||||
sudo cp "$HOME/go/bin/MailHog" /usr/local/bin/MailHog
|
if [ $? == 0 ] ; then
|
||||||
|
echo "";
|
||||||
echo ""
|
echo "===================================";
|
||||||
echo "==================================="
|
echo "Mailcatcher installed succesfully!";
|
||||||
echo "Create MailHog service..."
|
echo "===================================";
|
||||||
echo "==================================="
|
echo "";
|
||||||
sudo tee /etc/systemd/system/mailhog.service > /dev/null <<EOL
|
else
|
||||||
|
echo 'ERROR: Installing Mailcatcher NOT succesfull!'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
echo "===================================";
|
||||||
|
echo "Copy Mailhog to bin...";
|
||||||
|
echo "===================================";
|
||||||
|
sudo cp ~/go/bin/MailHog /usr/local/bin/MailHog
|
||||||
|
if [ $? == 0 ] ; then
|
||||||
|
echo 'Mailhog copied'
|
||||||
|
else
|
||||||
|
echo 'ERROR: Copy Mailhog NOT succesfull!'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
echo "";
|
||||||
|
echo "===================================";
|
||||||
|
echo "Create MailHog service...";
|
||||||
|
echo "===================================";
|
||||||
|
sudo tee /etc/systemd/system/mailhog.service <<EOL
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=MailHog
|
Description=MailHog
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
User=root
|
User=root
|
||||||
ExecStart=/usr/local/bin/MailHog
|
ExecStart=/usr/bin/env /usr/local/bin/MailHog > /dev/null 2>&1 &
|
||||||
Restart=always
|
|
||||||
Environment="PATH=/usr/local/go/bin:/usr/bin:/bin"
|
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "==================================="
|
|
||||||
echo "Enable + start MailHog service..."
|
|
||||||
echo "==================================="
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable mailhog
|
systemctl enable mailhog
|
||||||
systemctl start mailhog
|
systemctl start mailhog
|
||||||
|
echo "";
|
||||||
echo ""
|
echo "===================================";
|
||||||
echo "==================================="
|
echo "Mailhog service created and started.";
|
||||||
echo "MailHog is running!"
|
echo "===================================";
|
||||||
echo "Web UI: http://localhost:8025"
|
|
||||||
echo "SMTP: localhost:1025"
|
|
||||||
echo "==================================="
|
|
||||||
@@ -2,5 +2,3 @@
|
|||||||
|
|
||||||
from . import controllers
|
from . import controllers
|
||||||
from . import models
|
from . import models
|
||||||
from . import wizard
|
|
||||||
from .hooks import post_init_hook
|
|
||||||
@@ -11,16 +11,12 @@
|
|||||||
|
|
||||||
'author': "Open2bizz",
|
'author': "Open2bizz",
|
||||||
'website': "http://www.open2bizz.tech",
|
'website': "http://www.open2bizz.tech",
|
||||||
'category': 'Tools',
|
'category': 'Uncategorized',
|
||||||
'license': "AGPL-3",
|
'version': '17.5',
|
||||||
'version': '15.0.1.0.0',
|
|
||||||
'module_type': 'official',
|
'module_type': 'official',
|
||||||
'depends': ['mail','base',],
|
'depends': ['mail','base',],
|
||||||
'data': [
|
'data': [
|
||||||
'wizard/install_warning_wizard_view.xml',
|
|
||||||
'views/views.xml',
|
'views/views.xml',
|
||||||
'data/data.xml',
|
'data/data.xml'
|
||||||
'security/ir.model.access.csv',
|
|
||||||
],
|
],
|
||||||
'post_init_hook': 'post_init_hook',
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,55 +1,21 @@
|
|||||||
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
# -*- coding: utf-8 -*-
|
||||||
# License LGPL-3
|
# from odoo import http
|
||||||
|
|
||||||
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):
|
# class TestserverO2b(http.Controller):
|
||||||
|
# @http.route('/testserver_o2b/testserver_o2b/', auth='public')
|
||||||
|
# def index(self, **kw):
|
||||||
|
# return "Hello, world"
|
||||||
|
|
||||||
@http.route(['/mailcatcher', '/mailcatcher/<path:subpath>'],
|
# @http.route('/testserver_o2b/testserver_o2b/objects/', auth='public')
|
||||||
type='http', auth='user', website=False, csrf=False)
|
# def list(self, **kw):
|
||||||
def mailcatcher_proxy(self, subpath='', **kw):
|
# return http.request.render('testserver_o2b.listing', {
|
||||||
"""Proxy requests to the local MailHog instance."""
|
# 'root': '/testserver_o2b/testserver_o2b',
|
||||||
target_url = f"{MAILHOG_BASE}/{subpath}"
|
# 'objects': http.request.env['testserver_o2b.testserver_o2b'].search([]),
|
||||||
if request.httprequest.query_string:
|
# })
|
||||||
target_url += '?' + request.httprequest.query_string.decode('utf-8')
|
|
||||||
|
|
||||||
try:
|
# @http.route('/testserver_o2b/testserver_o2b/objects/<model("testserver_o2b.testserver_o2b"):obj>/', auth='public')
|
||||||
headers = {
|
# def object(self, obj, **kw):
|
||||||
k: v for k, v in request.httprequest.headers
|
# return http.request.render('testserver_o2b.object', {
|
||||||
if k.lower() not in ('host', 'cookie', 'authorization')
|
# 'object': obj
|
||||||
}
|
# })
|
||||||
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,
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
<data>
|
<data>
|
||||||
|
<function model="ir.config_parameter" name="_mailcatcher_url"/>
|
||||||
</data>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
# 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)
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
#!/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 "==================================="
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# No models needed — MailHog is accessed via the proxy controller
|
from . import mailcatcher_menu
|
||||||
|
|||||||
@@ -1,7 +1,27 @@
|
|||||||
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
# Copyright 2024 Open2Bizz <info@open2bizz.nl>
|
||||||
# License LGPL-3
|
# License LGPL-3
|
||||||
|
|
||||||
# MailHog is now accessed via the internal proxy controller at /mailcatcher/
|
from odoo import api, fields, models, _
|
||||||
# so no dynamic URL computation is needed anymore.
|
|
||||||
|
import logging
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class IrActionUrl(models.Model):
|
||||||
|
_inherit = "ir.config_parameter"
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
#def init(self):
|
||||||
|
def _mailcatcher_url(self):
|
||||||
|
parameters = self.env['ir.config_parameter'].search([('key','=', 'web.base.url')])
|
||||||
|
if parameters:
|
||||||
|
parameter = parameters[0]
|
||||||
|
cont_nr = parameter.value.split("//",1)[1] #Haal https:// van string
|
||||||
|
cont_nr = cont_nr[0:3] #De eerste 3 karakters is het containernummer
|
||||||
|
act_url = "https://" + cont_nr + "-mailcatcher.staging.open2bizz.com"
|
||||||
|
_logger.info('---------- ACT_URL ---------- %s', act_url)
|
||||||
|
action_id = self.env['ir.model.data']._xmlid_to_res_id('mailcatcher_menu.action_mailcatcher_url')
|
||||||
|
action = self.env['ir.actions.act_url'].browse(action_id)
|
||||||
|
if action:
|
||||||
|
action.write({'url':act_url})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
"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
|
"access_mailcatcher_menu_mailcatcher_menu","mailcatcher_menu.mailcatcher_menu","model_mailcatcher_menu_mailcatcher_menu","base.group_user",1,1,1,1
|
||||||
|
|||||||
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<record model="ir.actions.act_url" id="action_mailcatcher_url">
|
<record model="ir.actions.act_url" id="action_mailcatcher_url">
|
||||||
<field name="name">Open Mailcatcher</field>
|
<field name="name">Open Mailcatcher</field>
|
||||||
<field name="url">/mailcatcher/</field>
|
<field name="url">https://mailcatcher.staging.open2bizz.com</field>
|
||||||
<field name="target">new</field>
|
<field name="target">new</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from . import install_warning_wizard
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# 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()
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from .hooks import post_init_hook
|
from . import controllers
|
||||||
from . import models
|
from . import models
|
||||||
@@ -8,13 +8,14 @@
|
|||||||
|
|
||||||
'author': "Open2bizz",
|
'author': "Open2bizz",
|
||||||
'website': "http://www.open2bizz.tech",
|
'website': "http://www.open2bizz.tech",
|
||||||
'category': 'Tools',
|
'category': 'Uncategorized',
|
||||||
'license': "AGPL-3",
|
'version': '17.5.1.0.0',
|
||||||
'version': '15.0.1.0.0',
|
'depends': ['web_environment_ribbon', 'mail','base','mailcatcher_menu',],
|
||||||
'depends': ['mail', 'base', 'mailcatcher_menu'],
|
|
||||||
'data': [
|
'data': [
|
||||||
|
'views/views.xml',
|
||||||
'views/templates.xml',
|
'views/templates.xml',
|
||||||
'data/ir_cron.xml',
|
|
||||||
],
|
],
|
||||||
'post_init_hook': 'post_init_hook',
|
'demo': [
|
||||||
|
'demo/demo.xml',
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import controllers
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# from odoo import http
|
||||||
|
|
||||||
|
|
||||||
|
# class TestserverO2b(http.Controller):
|
||||||
|
# @http.route('/testserver_o2b/testserver_o2b/', auth='public')
|
||||||
|
# def index(self, **kw):
|
||||||
|
# return "Hello, world"
|
||||||
|
|
||||||
|
# @http.route('/testserver_o2b/testserver_o2b/objects/', auth='public')
|
||||||
|
# def list(self, **kw):
|
||||||
|
# return http.request.render('testserver_o2b.listing', {
|
||||||
|
# 'root': '/testserver_o2b/testserver_o2b',
|
||||||
|
# 'objects': http.request.env['testserver_o2b.testserver_o2b'].search([]),
|
||||||
|
# })
|
||||||
|
|
||||||
|
# @http.route('/testserver_o2b/testserver_o2b/objects/<model("testserver_o2b.testserver_o2b"):obj>/', auth='public')
|
||||||
|
# def object(self, obj, **kw):
|
||||||
|
# return http.request.render('testserver_o2b.object', {
|
||||||
|
# 'object': obj
|
||||||
|
# })
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<?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,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>
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# -*- 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
|
|
||||||
)
|
|
||||||
@@ -1,206 +1,65 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from odoo import tools
|
from odoo import tools
|
||||||
from odoo import api, fields, models
|
from odoo import api, fields, models
|
||||||
from datetime import datetime, timedelta
|
from collections.abc import Mapping
|
||||||
|
import logging
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
import os
|
import os
|
||||||
import uuid
|
import uuid
|
||||||
import odoo
|
import odoo
|
||||||
|
|
||||||
import logging
|
|
||||||
_logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class IrLogging(models.Model):
|
class IrLogging(models.Model):
|
||||||
_inherit = 'ir.logging'
|
_inherit = 'ir.logging'
|
||||||
|
|
||||||
MAIL_SERVERS = (
|
|
||||||
('127.0.0.1', '1025', 'Lokale mailcatcher', 'login', 'name', 't'),
|
|
||||||
('192.168.78.199', '1025', 'Algemene mailcatcher', 'login', 'name', 'f'),
|
|
||||||
('hnode6.openworx.nl', '1025', 'Algemene mailcatcher vanaf hnode4', 'login', 'name', 'f'),
|
|
||||||
)
|
|
||||||
EXPECTED_IP_PREFIX = '192.168.78.'
|
|
||||||
REPORT_URL = 'http://127.0.0.1:8069'
|
|
||||||
ENTERPRISE_CODE = 'M160129258730'
|
|
||||||
FILESTORE_CLEANUP_BATCH_LIMIT = 100
|
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
database_uuid = str(uuid.uuid1())
|
db_id = uuid.uuid1()
|
||||||
_logger.debug(f"____ Database UID: {database_uuid}")
|
_logger.error(db_id)
|
||||||
self._reset_base_configuration(database_uuid)
|
|
||||||
_logger.debug(f"_____ reset_base_configuration ____")
|
|
||||||
self._remove_param_if_exists('web.base.url.freeze')
|
|
||||||
_logger.debug(f"______ remove_param_if_exists web.base.url.freeze ____")
|
|
||||||
self._create_param_if_missing('report.url', self.REPORT_URL)
|
|
||||||
_logger.debug(f"_______ create_param_if_missing report.url ____")
|
|
||||||
self._disable_web_push_notifications()
|
|
||||||
_logger.debug(f"_______ disable_web_push_notifications ____")
|
|
||||||
self._disable_delivery_carrier_prod_environment()
|
|
||||||
_logger.debug(f"_______ disable_delivery_carrier_prod_environment ____")
|
|
||||||
self._disable_payment_providers()
|
|
||||||
_logger.debug(f"_______ disable_delivery_carrier_prod_environment ____")
|
|
||||||
self._clear_account_online_links()
|
|
||||||
_logger.debug(f"_______ _disable_payment_providers ____")
|
|
||||||
self._reset_bank_statement_source()
|
|
||||||
_logger.debug(f"_______ _reset_bank_statement_source ____")
|
|
||||||
self._set_warning_ribbon_if_ip_is_invalid()
|
|
||||||
_logger.debug(f"_______ _set_warning_ribbon_if_ip_is_invalid ____")
|
|
||||||
self._run_testserver_script()
|
|
||||||
_logger.debug(f"_______ _run_testserver_script ____")
|
|
||||||
|
|
||||||
def _reset_base_configuration(self, database_uuid):
|
|
||||||
self.env.cr.execute("""
|
self.env.cr.execute("""
|
||||||
UPDATE ir_mail_server SET active = 'f';
|
UPDATE ir_mail_server set active = 'f';
|
||||||
UPDATE fetchmail_server SET active = 'f';
|
UPDATE fetchmail_server set active = 'f';
|
||||||
UPDATE ir_cron SET active = 'f';
|
UPDATE ir_cron set active = 'f';
|
||||||
DELETE FROM mail_mail;
|
DELETE FROM mail_mail;
|
||||||
UPDATE ir_config_parameter
|
UPDATE ir_config_parameter set value = 'M160129258730' where key = 'database.enterprise_code';
|
||||||
SET value = %s
|
UPDATE ir_config_parameter set value = (NOW() + INTERVAL '30 DAY') where key = 'database.expiration_date';
|
||||||
WHERE key = 'database.enterprise_code';
|
UPDATE ir_config_parameter set value = '%s' where key = 'database.uuid';
|
||||||
UPDATE ir_config_parameter
|
INSERT INTO ir_mail_server(smtp_host,smtp_port,name,smtp_authentication,smtp_encryption,active) VALUES ('127.0.0.1','1025','Lokale mailcatcher','login','name','t');
|
||||||
SET value = (NOW() + INTERVAL '30 DAY')
|
INSERT INTO ir_mail_server(smtp_host,smtp_port,name,smtp_authentication,smtp_encryption,active) VALUES ('192.168.78.199','1025','Algemene mailcatcher','login','name','t');
|
||||||
WHERE key = 'database.expiration_date';
|
""" %(db_id))
|
||||||
UPDATE ir_config_parameter
|
if self.env['ir.config_parameter'].search([('key','=','web.base.url.freeze')]):
|
||||||
SET value = %s
|
self.env.cr.execute("""DELETE FROM ir_config_parameter WHERE key = 'web.base.url.freeze';""")
|
||||||
WHERE key = 'database.uuid';
|
if not self.env['ir.config_parameter'].search([('key','=','report.url')]):
|
||||||
""", (self.ENTERPRISE_CODE, database_uuid))
|
self.env.cr.execute("""INSERT INTO ir_config_parameter(key,value) VALUES ('report.url','http://127.0.0.1:8069');""")
|
||||||
|
model = self.env['ir.model'].search([('model','=','delivery.carrier')])
|
||||||
for mail_server in self.MAIL_SERVERS:
|
if model:
|
||||||
|
field = self.env['ir.model.fields'].search([('name','=','prod_environment'),('model_id','=',model.id)])
|
||||||
|
if field:
|
||||||
|
self.env.cr.execute("""UPDATE delivery_carrier SET prod_environment = False WHERE id>0;""")
|
||||||
|
model = self.env['ir.model'].search([('model','=','payment.provider')])
|
||||||
|
if model:
|
||||||
|
field = self.env['ir.model.fields'].search([('name','=','state'),('model_id','=',model.id)])
|
||||||
|
if field:
|
||||||
|
self.env.cr.execute("""UPDATE payment_provider SET state = 'disabled' WHERE id>0;""")
|
||||||
|
model = self.env['ir.model'].search([('model','=','account.online.link')])
|
||||||
|
if model:
|
||||||
|
field = self.env['ir.model.fields'].search([('id','>',0),('model_id','=',model.id)])
|
||||||
|
if field:
|
||||||
|
self.env.cr.execute("""DELETE FROM account_online_link WHERE id > 0;""")
|
||||||
|
if self.env['ir.model'].search([('model','=','account.journal')]):
|
||||||
|
self.env.cr.execute("""UPDATE account_journal set bank_statements_source = 'undefined';""")
|
||||||
|
ip_ok = False
|
||||||
|
with os.popen("ip a") as f:
|
||||||
|
for x in f.readlines():
|
||||||
|
if float(x.find('192.168.78.')) > -1:
|
||||||
|
ip_ok = True
|
||||||
|
if not ip_ok:
|
||||||
self.env.cr.execute("""
|
self.env.cr.execute("""
|
||||||
INSERT INTO ir_mail_server(
|
UPDATE ir_config_parameter set value = 'rgba(255, 240, 0,1)' WHERE key = 'ribbon.background.color';
|
||||||
smtp_host, smtp_port, name, smtp_authentication, smtp_encryption, active
|
UPDATE ir_config_parameter set value = '#000000' WHERE key = 'ribbon.color';
|
||||||
) VALUES (%s, %s, %s, %s, %s, %s);
|
UPDATE ir_config_parameter set value = '!!! IP WRONG !!!' WHERE key = 'ribbon.name';
|
||||||
""", mail_server)
|
""")
|
||||||
|
ADDONS_PATH = odoo.tools.config['addons_path']
|
||||||
def _remove_param_if_exists(self, key):
|
_logger.error(ADDONS_PATH)
|
||||||
if self.env['ir.config_parameter'].search([('key', '=', key)], limit=1):
|
for ap in ADDONS_PATH.split(','):
|
||||||
self.env.cr.execute("DELETE FROM ir_config_parameter WHERE key = %s;", (key,))
|
if ap[-10:] == 'testserver':
|
||||||
|
_logger.error(os.system('./%s/testserver.sh' %(ap)))
|
||||||
def _create_param_if_missing(self, key, value):
|
|
||||||
if not self.env['ir.config_parameter'].search([('key', '=', key)], limit=1):
|
|
||||||
self.env.cr.execute(
|
|
||||||
"INSERT INTO ir_config_parameter(key, value) VALUES (%s, %s);",
|
|
||||||
(key, value),
|
|
||||||
)
|
|
||||||
|
|
||||||
def _disable_web_push_notifications(self):
|
|
||||||
parameter = self.env['ir.config_parameter'].sudo()
|
|
||||||
parameter.set_param('web_push.notification.enabled', '0')
|
|
||||||
|
|
||||||
parameters = self.env['ir.config_parameter'].sudo().search([
|
|
||||||
('key', 'in', ('mail.web_push_vapid_private_key', 'mail.web_push_vapid_public_key', 'mail.sfu_server_key'))])
|
|
||||||
for parameter in parameters:
|
|
||||||
parameter.sudo().unlink()
|
|
||||||
if self.env['ir.model'].search([('model', '=', 'mail.partner.device')]):
|
|
||||||
self.env.cr.execute("""DELETE FROM mail_partner_device;""")
|
|
||||||
|
|
||||||
def _model_has_field(self, model_name, field_name=None):
|
|
||||||
model = self.env['ir.model'].search([('model', '=', model_name)], limit=1)
|
|
||||||
if not model:
|
|
||||||
return False
|
|
||||||
if field_name is None:
|
|
||||||
return True
|
|
||||||
return bool(
|
|
||||||
self.env['ir.model.fields'].search(
|
|
||||||
[('name', '=', field_name), ('model_id', '=', model.id)],
|
|
||||||
limit=1,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def _disable_delivery_carrier_prod_environment(self):
|
|
||||||
if self._model_has_field('delivery.carrier', 'prod_environment'):
|
|
||||||
self.env.cr.execute(
|
|
||||||
"UPDATE delivery_carrier SET prod_environment = False WHERE id > 0;"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _disable_payment_providers(self):
|
|
||||||
if self._model_has_field('payment.provider', 'state'):
|
|
||||||
self.env.cr.execute(
|
|
||||||
"UPDATE payment_provider SET state = 'disabled' WHERE id > 0;"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _clear_account_online_links(self):
|
|
||||||
model = self.env['ir.model'].search([('model', '=', 'account.online.link')], limit=1)
|
|
||||||
if not model:
|
|
||||||
return
|
|
||||||
|
|
||||||
has_any_field = self.env['ir.model.fields'].search(
|
|
||||||
[('id', '>', 0), ('model_id', '=', model.id)],
|
|
||||||
limit=1,
|
|
||||||
)
|
|
||||||
if has_any_field:
|
|
||||||
self.env.cr.execute("DELETE FROM account_online_link WHERE id > 0;")
|
|
||||||
|
|
||||||
def _reset_bank_statement_source(self):
|
|
||||||
if self.env['ir.model'].search([('model', '=', 'account.journal')], limit=1):
|
|
||||||
self.env.cr.execute(
|
|
||||||
"UPDATE account_journal SET bank_statements_source = 'undefined';"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _has_expected_ip(self):
|
|
||||||
with os.popen("ip a") as command_output:
|
|
||||||
return any(self.EXPECTED_IP_PREFIX in line for line in command_output.readlines())
|
|
||||||
|
|
||||||
def _set_warning_ribbon_if_ip_is_invalid(self):
|
|
||||||
if self._has_expected_ip():
|
|
||||||
return
|
|
||||||
|
|
||||||
self.env.cr.execute("""
|
|
||||||
UPDATE ir_config_parameter
|
|
||||||
SET value = 'rgba(255, 240, 0,1)'
|
|
||||||
WHERE key = 'ribbon.background.color';
|
|
||||||
UPDATE ir_config_parameter
|
|
||||||
SET value = '#000000'
|
|
||||||
WHERE key = 'ribbon.color';
|
|
||||||
UPDATE ir_config_parameter
|
|
||||||
SET value = '!!! IP WRONG !!!'
|
|
||||||
WHERE key = 'ribbon.name';
|
|
||||||
""")
|
|
||||||
|
|
||||||
def _run_testserver_script(self):
|
|
||||||
addons_path = odoo.tools.config['addons_path']
|
|
||||||
_logger.error(addons_path)
|
|
||||||
|
|
||||||
addons_list = addons_path.split(',') if isinstance(addons_path, str) else list(addons_path)
|
|
||||||
for addon_path in addons_list:
|
|
||||||
if addon_path.endswith('testserver'):
|
|
||||||
_logger.error(os.system(f'./{addon_path}/testserver.sh'))
|
|
||||||
|
|
||||||
def _get_unneeded_filestore_attachment_ids(self, limit):
|
|
||||||
self.env.cr.execute(
|
|
||||||
"""
|
|
||||||
SELECT id
|
|
||||||
FROM ir_attachment
|
|
||||||
WHERE type = 'binary'
|
|
||||||
AND res_field IS NULL
|
|
||||||
AND store_fname IS NOT NULL
|
|
||||||
AND res_model not in ('sign.document','sign.request')
|
|
||||||
AND public = 'f'
|
|
||||||
ORDER BY COALESCE(file_size, 0) DESC, id ASC
|
|
||||||
LIMIT %s
|
|
||||||
""",
|
|
||||||
(limit,),
|
|
||||||
)
|
|
||||||
return [row[0] for row in self.env.cr.fetchall()]
|
|
||||||
|
|
||||||
def cleanup_unneeded_filestore_attachments(self, limit=FILESTORE_CLEANUP_BATCH_LIMIT):
|
|
||||||
limit = int(limit or 0)
|
|
||||||
if limit <= 0:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
attachment_ids = self._get_unneeded_filestore_attachment_ids(limit)
|
|
||||||
if not attachment_ids:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
self.env['ir.attachment'].sudo().browse(attachment_ids).unlink()
|
|
||||||
_logger.info('Deleted %s unneeded filestore attachments', len(attachment_ids))
|
|
||||||
return len(attachment_ids)
|
|
||||||
|
|
||||||
def set_db_param(self):
|
|
||||||
## Script to set database expiration date, when enterprise and test env.
|
|
||||||
parameter = self.env['ir.config_parameter'].search(
|
|
||||||
[('key', '=', 'database.expiration_date')],
|
|
||||||
limit=1,
|
|
||||||
)
|
|
||||||
if parameter:
|
|
||||||
new_date_time = datetime.now() + timedelta(days=30)
|
|
||||||
parameter.write({'value': str(new_date_time)[:19]})
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_testserver_o2b_testserver_o2b,testserver_o2b.testserver_o2b,model_testserver_o2b_testserver_o2b,base.group_user,1,1,1,1
|
||||||
|
@@ -1,18 +1,24 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
<data>
|
<data>
|
||||||
<!-- Banner for web layout (backend Odoo) -->
|
<!--
|
||||||
<template id="testserver_banner_web" name="TOP banner test backend" inherit_id="web.layout">
|
<template id="listing">
|
||||||
<xpath expr="//body" position="inside">
|
<ul>
|
||||||
<div>
|
<li t-foreach="objects" t-as="object">
|
||||||
<span style="text-align: center;color: #FFFFFF;background-color: #006CFE;position: relative;display: block;font-size: 16px;">
|
<a t-attf-href="#{ root }/objects/#{ object.id }">
|
||||||
This is a test database.
|
<t t-esc="object.display_name"/>
|
||||||
<a href="https://www.open2bizz.tech/helpdesk" target="_blank" style="color: #000000;">
|
</a>
|
||||||
See website to report issue's.
|
</li>
|
||||||
</a>
|
</ul>
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</xpath>
|
|
||||||
</template>
|
</template>
|
||||||
|
<template id="object">
|
||||||
|
<h1><t t-esc="object.display_name"/></h1>
|
||||||
|
<dl>
|
||||||
|
<t t-foreach="object._fields" t-as="field">
|
||||||
|
<dt><t t-esc="field"/></dt>
|
||||||
|
<dd><t t-esc="object[field]"/></dd>
|
||||||
|
</t>
|
||||||
|
</dl>
|
||||||
|
</template>
|
||||||
|
-->
|
||||||
</data>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!-- explicit list view definition -->
|
||||||
|
<!--
|
||||||
|
<record model="ir.ui.view" id="testserver_o2b.list">
|
||||||
|
<field name="name">testserver_o2b list</field>
|
||||||
|
<field name="model">testserver_o2b.testserver_o2b</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree>
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="value"/>
|
||||||
|
<field name="value2"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- actions opening views on models -->
|
||||||
|
<!--
|
||||||
|
<record model="ir.actions.act_window" id="testserver_o2b.action_window">
|
||||||
|
<field name="name">testserver_o2b window</field>
|
||||||
|
<field name="res_model">testserver_o2b.testserver_o2b</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
</record>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- server action to the one above -->
|
||||||
|
<!--
|
||||||
|
<record model="ir.actions.server" id="testserver_o2b.action_server">
|
||||||
|
<field name="name">testserver_o2b server</field>
|
||||||
|
<field name="model_id" ref="model_testserver_o2b_testserver_o2b"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">
|
||||||
|
action = {
|
||||||
|
"type": "ir.actions.act_window",
|
||||||
|
"view_mode": "tree,form",
|
||||||
|
"res_model": model._name,
|
||||||
|
}
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Top menu item -->
|
||||||
|
<!--
|
||||||
|
<menuitem name="testserver_o2b" id="testserver_o2b.menu_root"/>
|
||||||
|
-->
|
||||||
|
<!-- menu categories -->
|
||||||
|
<!--
|
||||||
|
<menuitem name="Menu 1" id="testserver_o2b.menu_1" parent="testserver_o2b.menu_root"/>
|
||||||
|
<menuitem name="Menu 2" id="testserver_o2b.menu_2" parent="testserver_o2b.menu_root"/>
|
||||||
|
-->
|
||||||
|
<!-- actions -->
|
||||||
|
<!--
|
||||||
|
<menuitem name="List" id="testserver_o2b.menu_1_list" parent="testserver_o2b.menu_1"
|
||||||
|
action="testserver_o2b.action_window"/>
|
||||||
|
<menuitem name="Server to list" id="testserver_o2b" parent="testserver_o2b.menu_2"
|
||||||
|
action="testserver_o2b.action_server"/>
|
||||||
|
-->
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from .hooks import post_init_hook
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# -*- 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',
|
|
||||||
}
|
|
||||||
@@ -1,137 +0,0 @@
|
|||||||
# -*- 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."
|
|
||||||
)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 89 KiB |
@@ -1,18 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
<?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>
|
|
||||||
@@ -2,10 +2,13 @@
|
|||||||
Web Environment Ribbon
|
Web Environment Ribbon
|
||||||
======================
|
======================
|
||||||
|
|
||||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
..
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
!! This file is generated by oca-gen-addon-readme !!
|
||||||
!! changes will be overwritten. !!
|
!! changes will be overwritten. !!
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
!! source digest: sha256:633699dce7538787594626fb371be0a97de6e53505ea986d27b7e1faafb870ff
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||||
:target: https://odoo-community.org/page/development-status
|
:target: https://odoo-community.org/page/development-status
|
||||||
@@ -14,18 +17,19 @@ Web Environment Ribbon
|
|||||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
:alt: License: AGPL-3
|
:alt: License: AGPL-3
|
||||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
|
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
|
||||||
:target: https://github.com/OCA/web/tree/15.0/web_environment_ribbon
|
:target: https://github.com/OCA/web/tree/17.0/web_environment_ribbon
|
||||||
:alt: OCA/web
|
:alt: OCA/web
|
||||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||||
:target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_environment_ribbon
|
:target: https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_environment_ribbon
|
||||||
:alt: Translate me on Weblate
|
:alt: Translate me on Weblate
|
||||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
|
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||||
:target: https://runbot.odoo-community.org/runbot/162/15.0
|
:target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=17.0
|
||||||
:alt: Try me on Runbot
|
:alt: Try me on Runboat
|
||||||
|
|
||||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||||
|
|
||||||
Mark a Test Environment with a red ribbon on the top left corner in every page
|
Mark a Test Environment with a red ribbon on the top left corner in
|
||||||
|
every page
|
||||||
|
|
||||||
**Table of contents**
|
**Table of contents**
|
||||||
|
|
||||||
@@ -35,28 +39,29 @@ Mark a Test Environment with a red ribbon on the top left corner in every page
|
|||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
* You can change the ribbon's name ("TEST") by editing the default system
|
- You can change the ribbon's name ("TEST") by editing the default
|
||||||
parameter "ribbon.name" (in the menu Settings > Parameters > System
|
system parameter "ribbon.name" (in the menu Settings > Parameters >
|
||||||
Parameters) To hide the ribbon, set this parameter to "False" or delete it.
|
System Parameters) To hide the ribbon, set this parameter to "False"
|
||||||
* You can customize the ribbon color and background color through system
|
or delete it.
|
||||||
parameters: "ribbon.color", "ribbon.background.color". Fill with valid CSS
|
- You can customize the ribbon color and background color through
|
||||||
colors or just set to "False" to use default values.
|
system parameters: "ribbon.color", "ribbon.background.color". Fill
|
||||||
* You can add the database name in the ribbon by adding "{db_name}" in the
|
with valid CSS colors or just set to "False" to use default values.
|
||||||
system parameter "ribbon.name".
|
- You can add the database name in the ribbon by adding "{db_name}" in
|
||||||
|
the system parameter "ribbon.name".
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
To use this module, you need only to install it. After installation, a red
|
To use this module, you need only to install it. After installation, a
|
||||||
ribbon will be visible on top left corner of every Odoo backend page
|
red ribbon will be visible on top left corner of every Odoo backend page
|
||||||
|
|
||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
In case of trouble, please check there if your issue has already been reported.
|
||||||
If you spotted it first, help us smashing it by providing a detailed and welcomed
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||||
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_environment_ribbon%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_environment_ribbon%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||||
|
|
||||||
Do not contact contributors directly about support or help with technical issues.
|
Do not contact contributors directly about support or help with technical issues.
|
||||||
|
|
||||||
@@ -64,24 +69,24 @@ Credits
|
|||||||
=======
|
=======
|
||||||
|
|
||||||
Authors
|
Authors
|
||||||
~~~~~~~
|
-------
|
||||||
|
|
||||||
* Francesco OpenCode Apruzzese
|
* Francesco OpenCode Apruzzese
|
||||||
* Tecnativa
|
* Tecnativa
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
~~~~~~~~~~~~
|
------------
|
||||||
|
|
||||||
* Francesco Apruzzese <cescoap@gmail.com>
|
- Francesco Apruzzese <cescoap@gmail.com>
|
||||||
* Javi Melendez <javimelex@gmail.com>
|
- Javi Melendez <javimelex@gmail.com>
|
||||||
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
|
- Antonio Espinosa <antonio.espinosa@tecnativa.com>
|
||||||
* Thomas Binsfeld <thomas.binsfeld@acsone.eu>
|
- Thomas Binsfeld <thomas.binsfeld@acsone.eu>
|
||||||
* Xavier Jiménez <xavier.jimenez@qubiq.es>
|
- Xavier Jiménez <xavier.jimenez@qubiq.es>
|
||||||
* Dennis Sluijk <d.sluijk@onestein.nl>
|
- Dennis Sluijk <d.sluijk@onestein.nl>
|
||||||
* Eric Lembregts <eric@lembregts.eu>
|
- Eric Lembregts <eric@lembregts.eu>
|
||||||
|
|
||||||
Maintainers
|
Maintainers
|
||||||
~~~~~~~~~~~
|
-----------
|
||||||
|
|
||||||
This module is maintained by the OCA.
|
This module is maintained by the OCA.
|
||||||
|
|
||||||
@@ -93,6 +98,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|||||||
mission is to support the collaborative development of Odoo features and
|
mission is to support the collaborative development of Odoo features and
|
||||||
promote its widespread use.
|
promote its widespread use.
|
||||||
|
|
||||||
This module is part of the `OCA/web <https://github.com/OCA/web/tree/15.0/web_environment_ribbon>`_ project on GitHub.
|
This module is part of the `OCA/web <https://github.com/OCA/web/tree/17.0/web_environment_ribbon>`_ project on GitHub.
|
||||||
|
|
||||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "Web Environment Ribbon",
|
"name": "Web Environment Ribbon",
|
||||||
"version": "15.0.1.0.0",
|
"version": "17.5.1.0.0",
|
||||||
"category": "Web",
|
"category": "Web",
|
||||||
"author": "Francesco OpenCode Apruzzese, "
|
"author": "Francesco OpenCode Apruzzese, "
|
||||||
"Tecnativa, "
|
"Tecnativa, "
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
"auto_install": False,
|
"auto_install": False,
|
||||||
"installable": True,
|
"installable": True,
|
||||||
"assets": {
|
"assets": {
|
||||||
"web.assets_common": [
|
"web.assets_backend": [
|
||||||
"web_environment_ribbon/static/**/*",
|
"web_environment_ribbon/static/src/components/environment_ribbon/*",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,22 +16,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 3.10\n"
|
"X-Generator: Weblate 3.10\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Nom mostrat"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Última modificació el"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Backend \"Web Environment Ribbon\""
|
msgstr "Backend \"Web Environment Ribbon\""
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Nom mostrat"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Última modificació el"
|
||||||
|
|||||||
@@ -19,22 +19,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 3.10\n"
|
"X-Generator: Weblate 3.10\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Anzeigename"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Zuletzt geändert am"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Web-Umgebung Ribbon-Backend"
|
msgstr "Web-Umgebung Ribbon-Backend"
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Anzeigename"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Zuletzt geändert am"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Translation of Odoo Server.
|
# Translation of Odoo Server.
|
||||||
# This file contains the translation of the following modules:
|
# This file contains the translation of the following modules:
|
||||||
# * web_environment_ribbon
|
# * web_environment_ribbon
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -16,22 +16,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 3.7.1\n"
|
"X-Generator: Weblate 3.7.1\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Nombre mostrado"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Última modificación el"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Backend \"Web Environment Ribbon\""
|
msgstr "Backend \"Web Environment Ribbon\""
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Nombre mostrado"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Última modificación el"
|
||||||
|
|||||||
@@ -19,22 +19,16 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: \n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Nom affiché"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Dernière modification le"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Backend du bandeau de l'environnement Web"
|
msgstr "Backend du bandeau de l'environnement Web"
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Nom affiché"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Dernière modification le"
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: Odoo Server 10.0\n"
|
"Project-Id-Version: Odoo Server 10.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2017-07-13 16:06+0000\n"
|
"POT-Creation-Date: 2017-07-13 16:06+0000\n"
|
||||||
"PO-Revision-Date: 2017-07-13 16:06+0000\n"
|
"PO-Revision-Date: 2023-01-04 02:41+0000\n"
|
||||||
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
|
"Last-Translator: Bole <bole@dajmi5.com>\n"
|
||||||
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
|
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
|
||||||
"Language: hr\n"
|
"Language: hr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,23 +18,18 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: \n"
|
||||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Generator: Weblate 4.14.1\n"
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Naziv za prikaz"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Zadnje modificirano"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr ""
|
msgstr "Pozadina trake okoline"
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Naziv za prikaz"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Zadnje modificirano"
|
||||||
|
|||||||
@@ -16,22 +16,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.3.2\n"
|
"X-Generator: Weblate 4.3.2\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Weergavenaam"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Laatst Gewijzigd op"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Web Environment Ribbon Backend"
|
msgstr "Web Environment Ribbon Backend"
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Weergavenaam"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Laatst Gewijzigd op"
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ msgstr ""
|
|||||||
"POT-Creation-Date: 2017-07-13 16:06+0000\n"
|
"POT-Creation-Date: 2017-07-13 16:06+0000\n"
|
||||||
"PO-Revision-Date: 2021-04-22 15:47+0000\n"
|
"PO-Revision-Date: 2021-04-22 15:47+0000\n"
|
||||||
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
|
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
|
||||||
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/"
|
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
|
||||||
"23907/nl_NL/)\n"
|
"teams/23907/nl_NL/)\n"
|
||||||
"Language: nl_NL\n"
|
"Language: nl_NL\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@@ -20,22 +20,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.3.2\n"
|
"X-Generator: Weblate 4.3.2\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Weergavenaam"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Laatst bijgewerkt op"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Weergavenaam"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Laatst bijgewerkt op"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Translation of Odoo Server.
|
# Translation of Odoo Server.
|
||||||
# This file contains the translation of the following modules:
|
# This file contains the translation of the following modules:
|
||||||
# * web_environment_ribbon
|
# * web_environment_ribbon
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -16,22 +16,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 3.7.1\n"
|
"X-Generator: Weblate 3.7.1\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Nome a Exibir"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Última Modificação em"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Nome a Exibir"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Última Modificação em"
|
||||||
|
|||||||
@@ -20,22 +20,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
"X-Generator: Weblate 3.1.1\n"
|
"X-Generator: Weblate 3.1.1\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Exibir Nome"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "Identificação"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Última Modificação em"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Back-end da fita do ambiente da Web"
|
msgstr "Back-end da fita do ambiente da Web"
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "Exibir Nome"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "Identificação"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "Última Modificação em"
|
||||||
|
|||||||
@@ -19,22 +19,10 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
|
||||||
"%100==4 ? 2 : 3);\n"
|
"%100==4 ? 2 : 3);\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 15.0\n"
|
"Project-Id-Version: Odoo Server 17.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * web_environment_ribbon
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 16.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"Last-Translator: Automatically generated\n"
|
||||||
|
"Language-Team: none\n"
|
||||||
|
"Language: zh\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: \n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#. module: web_environment_ribbon
|
||||||
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
|
msgid "Web Environment Ribbon Backend"
|
||||||
|
msgstr ""
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Translation of Odoo Server.
|
# Translation of Odoo Server.
|
||||||
# This file contains the translation of the following modules:
|
# This file contains the translation of the following modules:
|
||||||
# * web_environment_ribbon
|
# * web_environment_ribbon
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -16,22 +16,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Weblate 3.8\n"
|
"X-Generator: Weblate 3.8\n"
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "显示名称"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr "ID"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
|
||||||
#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "最后修改时间"
|
|
||||||
|
|
||||||
#. module: web_environment_ribbon
|
#. module: web_environment_ribbon
|
||||||
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend
|
||||||
msgid "Web Environment Ribbon Backend"
|
msgid "Web Environment Ribbon Backend"
|
||||||
msgstr "Web环境功能区后台"
|
msgstr "Web环境功能区后台"
|
||||||
|
|
||||||
|
#~ msgid "Display Name"
|
||||||
|
#~ msgstr "显示名称"
|
||||||
|
|
||||||
|
#~ msgid "ID"
|
||||||
|
#~ msgstr "ID"
|
||||||
|
|
||||||
|
#~ msgid "Last Modified on"
|
||||||
|
#~ msgstr "最后修改时间"
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from odoo import api, models
|
|||||||
|
|
||||||
|
|
||||||
class WebEnvironmentRibbonBackend(models.AbstractModel):
|
class WebEnvironmentRibbonBackend(models.AbstractModel):
|
||||||
|
|
||||||
_name = "web.environment.ribbon.backend"
|
_name = "web.environment.ribbon.backend"
|
||||||
_description = "Web Environment Ribbon Backend"
|
_description = "Web Environment Ribbon Backend"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = ["whool"]
|
||||||
|
build-backend = "whool.buildapi"
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
- You can change the ribbon's name ("TEST") by editing the default
|
||||||
|
system parameter "ribbon.name" (in the menu Settings \> Parameters \>
|
||||||
|
System Parameters) To hide the ribbon, set this parameter to "False"
|
||||||
|
or delete it.
|
||||||
|
- You can customize the ribbon color and background color through system
|
||||||
|
parameters: "ribbon.color", "ribbon.background.color". Fill with valid
|
||||||
|
CSS colors or just set to "False" to use default values.
|
||||||
|
- You can add the database name in the ribbon by adding "{db_name}" in
|
||||||
|
the system parameter "ribbon.name".
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
* You can change the ribbon's name ("TEST") by editing the default system
|
|
||||||
parameter "ribbon.name" (in the menu Settings > Parameters > System
|
|
||||||
Parameters) To hide the ribbon, set this parameter to "False" or delete it.
|
|
||||||
* You can customize the ribbon color and background color through system
|
|
||||||
parameters: "ribbon.color", "ribbon.background.color". Fill with valid CSS
|
|
||||||
colors or just set to "False" to use default values.
|
|
||||||
* You can add the database name in the ribbon by adding "{db_name}" in the
|
|
||||||
system parameter "ribbon.name".
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- Francesco Apruzzese \<<cescoap@gmail.com>\>
|
||||||
|
- Javi Melendez \<<javimelex@gmail.com>\>
|
||||||
|
- Antonio Espinosa \<<antonio.espinosa@tecnativa.com>\>
|
||||||
|
- Thomas Binsfeld \<<thomas.binsfeld@acsone.eu>\>
|
||||||
|
- Xavier Jiménez \<<xavier.jimenez@qubiq.es>\>
|
||||||
|
- Dennis Sluijk \<<d.sluijk@onestein.nl>\>
|
||||||
|
- Eric Lembregts \<<eric@lembregts.eu>\>
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
* Francesco Apruzzese <cescoap@gmail.com>
|
|
||||||
* Javi Melendez <javimelex@gmail.com>
|
|
||||||
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
|
|
||||||
* Thomas Binsfeld <thomas.binsfeld@acsone.eu>
|
|
||||||
* Xavier Jiménez <xavier.jimenez@qubiq.es>
|
|
||||||
* Dennis Sluijk <d.sluijk@onestein.nl>
|
|
||||||
* Eric Lembregts <eric@lembregts.eu>
|
|
||||||
+2
-1
@@ -1 +1,2 @@
|
|||||||
Mark a Test Environment with a red ribbon on the top left corner in every page
|
Mark a Test Environment with a red ribbon on the top left corner in
|
||||||
|
every page
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
To use this module, you need only to install it. After installation, a
|
||||||
|
red ribbon will be visible on top left corner of every Odoo backend page
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
To use this module, you need only to install it. After installation, a red
|
|
||||||
ribbon will be visible on top left corner of every Odoo backend page
|
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||||
<title>Web Environment Ribbon</title>
|
<title>Web Environment Ribbon</title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
|
||||||
/*
|
/*
|
||||||
:Author: David Goodger (goodger@python.org)
|
:Author: David Goodger (goodger@python.org)
|
||||||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
|
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
:Copyright: This stylesheet has been placed in the public domain.
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
Default cascading style sheet for the HTML output of Docutils.
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||||
customize this style sheet.
|
customize this style sheet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -366,60 +366,64 @@ ul.auto-toc {
|
|||||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
!! This file is generated by oca-gen-addon-readme !!
|
!! This file is generated by oca-gen-addon-readme !!
|
||||||
!! changes will be overwritten. !!
|
!! changes will be overwritten. !!
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
!! source digest: sha256:633699dce7538787594626fb371be0a97de6e53505ea986d27b7e1faafb870ff
|
||||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/web/tree/15.0/web_environment_ribbon"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_environment_ribbon"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/162/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
|
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/web/tree/17.0/web_environment_ribbon"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_environment_ribbon"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||||
<p>Mark a Test Environment with a red ribbon on the top left corner in every page</p>
|
<p>Mark a Test Environment with a red ribbon on the top left corner in
|
||||||
|
every page</p>
|
||||||
<p><strong>Table of contents</strong></p>
|
<p><strong>Table of contents</strong></p>
|
||||||
<div class="contents local topic" id="contents">
|
<div class="contents local topic" id="contents">
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
|
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
||||||
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
|
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
||||||
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
|
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
|
||||||
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
|
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
|
||||||
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
|
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
|
||||||
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
|
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
|
||||||
<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
|
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="configuration">
|
<div class="section" id="configuration">
|
||||||
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
|
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li>You can change the ribbon’s name (“TEST”) by editing the default system
|
<li>You can change the ribbon’s name (“TEST”) by editing the default
|
||||||
parameter “ribbon.name” (in the menu Settings > Parameters > System
|
system parameter “ribbon.name” (in the menu Settings > Parameters >
|
||||||
Parameters) To hide the ribbon, set this parameter to “False” or delete it.</li>
|
System Parameters) To hide the ribbon, set this parameter to “False”
|
||||||
<li>You can customize the ribbon color and background color through system
|
or delete it.</li>
|
||||||
parameters: “ribbon.color”, “ribbon.background.color”. Fill with valid CSS
|
<li>You can customize the ribbon color and background color through
|
||||||
colors or just set to “False” to use default values.</li>
|
system parameters: “ribbon.color”, “ribbon.background.color”. Fill
|
||||||
<li>You can add the database name in the ribbon by adding “{db_name}” in the
|
with valid CSS colors or just set to “False” to use default values.</li>
|
||||||
system parameter “ribbon.name”.</li>
|
<li>You can add the database name in the ribbon by adding “{db_name}” in
|
||||||
|
the system parameter “ribbon.name”.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="usage">
|
<div class="section" id="usage">
|
||||||
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
|
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
|
||||||
<p>To use this module, you need only to install it. After installation, a red
|
<p>To use this module, you need only to install it. After installation, a
|
||||||
ribbon will be visible on top left corner of every Odoo backend page</p>
|
red ribbon will be visible on top left corner of every Odoo backend page</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="bug-tracker">
|
<div class="section" id="bug-tracker">
|
||||||
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
|
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
|
||||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>.
|
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>.
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
In case of trouble, please check there if your issue has already been reported.
|
||||||
If you spotted it first, help us smashing it by providing a detailed and welcomed
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||||
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_environment_ribbon%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_environment_ribbon%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="credits">
|
<div class="section" id="credits">
|
||||||
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
|
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
|
||||||
<div class="section" id="authors">
|
<div class="section" id="authors">
|
||||||
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
|
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li>Francesco OpenCode Apruzzese</li>
|
<li>Francesco OpenCode Apruzzese</li>
|
||||||
<li>Tecnativa</li>
|
<li>Tecnativa</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="contributors">
|
<div class="section" id="contributors">
|
||||||
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
|
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li>Francesco Apruzzese <<a class="reference external" href="mailto:cescoap@gmail.com">cescoap@gmail.com</a>></li>
|
<li>Francesco Apruzzese <<a class="reference external" href="mailto:cescoap@gmail.com">cescoap@gmail.com</a>></li>
|
||||||
<li>Javi Melendez <<a class="reference external" href="mailto:javimelex@gmail.com">javimelex@gmail.com</a>></li>
|
<li>Javi Melendez <<a class="reference external" href="mailto:javimelex@gmail.com">javimelex@gmail.com</a>></li>
|
||||||
@@ -431,13 +435,13 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="maintainers">
|
<div class="section" id="maintainers">
|
||||||
<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
|
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
||||||
<p>This module is maintained by the OCA.</p>
|
<p>This module is maintained by the OCA.</p>
|
||||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||||
mission is to support the collaborative development of Odoo features and
|
mission is to support the collaborative development of Odoo features and
|
||||||
promote its widespread use.</p>
|
promote its widespread use.</p>
|
||||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/15.0/web_environment_ribbon">OCA/web</a> project on GitHub.</p>
|
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/17.0/web_environment_ribbon">OCA/web</a> project on GitHub.</p>
|
||||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
-7
@@ -27,10 +27,3 @@
|
|||||||
.test-ribbon b {
|
.test-ribbon b {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
header:hover ~ .test-ribbon,
|
|
||||||
nav:hover ~ .test-ribbon {
|
|
||||||
/* Ease out ribbon when user is using the navigation in Odoo */
|
|
||||||
opacity: 0;
|
|
||||||
transition: 0.2s ease;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/** @odoo-module **/
|
||||||
|
|
||||||
|
import {Component, xml} from "@odoo/owl";
|
||||||
|
import {useBus, useService} from "@web/core/utils/hooks";
|
||||||
|
import {registry} from "@web/core/registry";
|
||||||
|
|
||||||
|
export class WebEnvironmentRibbon extends Component {
|
||||||
|
setup() {
|
||||||
|
this.orm = useService("orm");
|
||||||
|
useBus(this.env.bus, "WEB_CLIENT_READY", this.showRibbon.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code from: http://jsfiddle.net/WK_of_Angmar/xgA5C/
|
||||||
|
validStrColour(strToTest) {
|
||||||
|
if (strToTest === "") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (strToTest === "inherit") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (strToTest === "transparent") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
const image = document.createElement("img");
|
||||||
|
image.style.color = "rgb(0, 0, 0)";
|
||||||
|
image.style.color = strToTest;
|
||||||
|
if (image.style.color !== "rgb(0, 0, 0)") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
image.style.color = "rgb(255, 255, 255)";
|
||||||
|
image.style.color = strToTest;
|
||||||
|
return image.style.color !== "rgb(255, 255, 255)";
|
||||||
|
}
|
||||||
|
|
||||||
|
showRibbon() {
|
||||||
|
const ribbon = $(".test-ribbon");
|
||||||
|
const self = this;
|
||||||
|
ribbon.hide();
|
||||||
|
// Get ribbon data from backend
|
||||||
|
self.orm
|
||||||
|
.call("web.environment.ribbon.backend", "get_environment_ribbon")
|
||||||
|
.then(function (ribbon_data) {
|
||||||
|
// Ribbon name
|
||||||
|
if (ribbon_data.name && ribbon_data.name !== "False") {
|
||||||
|
ribbon.show();
|
||||||
|
ribbon.html(ribbon_data.name);
|
||||||
|
}
|
||||||
|
// Ribbon color
|
||||||
|
if (ribbon_data.color && self.validStrColour(ribbon_data.color)) {
|
||||||
|
ribbon.css("color", ribbon_data.color);
|
||||||
|
}
|
||||||
|
// Ribbon background color
|
||||||
|
if (
|
||||||
|
ribbon_data.background_color &&
|
||||||
|
self.validStrColour(ribbon_data.background_color)
|
||||||
|
) {
|
||||||
|
ribbon.css("background-color", ribbon_data.background_color);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WebEnvironmentRibbon.props = {};
|
||||||
|
WebEnvironmentRibbon.template = xml`<div class="test-ribbon" />`;
|
||||||
|
|
||||||
|
registry.category("main_components").add("WebEnvironmentRibbon", {
|
||||||
|
Component: WebEnvironmentRibbon,
|
||||||
|
});
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/* Copyright 2015 Sylvain Calador <sylvain.calador@akretion.com>
|
|
||||||
Copyright 2015 Javi Melendez <javi.melendez@algios.com>
|
|
||||||
Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
|
|
||||||
Copyright 2017 Thomas Binsfeld <thomas.binsfeld@acsone.eu>
|
|
||||||
Copyright 2017 Xavier Jiménez <xavier.jimenez@qubiq.es>
|
|
||||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
|
|
||||||
|
|
||||||
odoo.define("web_environment_ribbon.ribbon", function (require) {
|
|
||||||
"use strict";
|
|
||||||
var rpc = require("web.rpc");
|
|
||||||
var core = require("web.core");
|
|
||||||
|
|
||||||
// Code from: http://jsfiddle.net/WK_of_Angmar/xgA5C/
|
|
||||||
function validStrColour(strToTest) {
|
|
||||||
if (strToTest === "") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (strToTest === "inherit") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (strToTest === "transparent") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var image = document.createElement("img");
|
|
||||||
image.style.color = "rgb(0, 0, 0)";
|
|
||||||
image.style.color = strToTest;
|
|
||||||
if (image.style.color !== "rgb(0, 0, 0)") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
image.style.color = "rgb(255, 255, 255)";
|
|
||||||
image.style.color = strToTest;
|
|
||||||
return image.style.color !== "rgb(255, 255, 255)";
|
|
||||||
}
|
|
||||||
|
|
||||||
core.bus.on("web_client_ready", null, function () {
|
|
||||||
var ribbon = $('<div class="test-ribbon hidden"/>');
|
|
||||||
$("body").append(ribbon);
|
|
||||||
ribbon.hide();
|
|
||||||
// Get ribbon data from backend
|
|
||||||
rpc.query({
|
|
||||||
model: "web.environment.ribbon.backend",
|
|
||||||
method: "get_environment_ribbon",
|
|
||||||
}).then(function (ribbon_data) {
|
|
||||||
// Ribbon name
|
|
||||||
if (ribbon_data.name && ribbon_data.name !== "False") {
|
|
||||||
ribbon.html(ribbon_data.name);
|
|
||||||
ribbon.show();
|
|
||||||
}
|
|
||||||
// Ribbon color
|
|
||||||
if (ribbon_data.color && validStrColour(ribbon_data.color)) {
|
|
||||||
ribbon.css("color", ribbon_data.color);
|
|
||||||
}
|
|
||||||
// Ribbon background color
|
|
||||||
if (
|
|
||||||
ribbon_data.background_color &&
|
|
||||||
validStrColour(ribbon_data.background_color)
|
|
||||||
) {
|
|
||||||
ribbon.css("background-color", ribbon_data.background_color);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -7,7 +7,7 @@ from odoo.tests import common
|
|||||||
class TestEnvironmentRibbonData(common.TransactionCase):
|
class TestEnvironmentRibbonData(common.TransactionCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super(TestEnvironmentRibbonData, cls).setUpClass()
|
super().setUpClass()
|
||||||
cls.env["ir.config_parameter"].set_param("ribbon.name", "Test Ribbon {db_name}")
|
cls.env["ir.config_parameter"].set_param("ribbon.name", "Test Ribbon {db_name}")
|
||||||
cls.env["ir.config_parameter"].set_param("ribbon.color", "#000000")
|
cls.env["ir.config_parameter"].set_param("ribbon.color", "#000000")
|
||||||
cls.env["ir.config_parameter"].set_param("ribbon.background.color", "#FFFFFF")
|
cls.env["ir.config_parameter"].set_param("ribbon.background.color", "#FFFFFF")
|
||||||
@@ -18,7 +18,7 @@ class TestEnvironmentRibbonData(common.TransactionCase):
|
|||||||
ribbon = self.env["web.environment.ribbon.backend"].get_environment_ribbon()
|
ribbon = self.env["web.environment.ribbon.backend"].get_environment_ribbon()
|
||||||
|
|
||||||
expected_ribbon = {
|
expected_ribbon = {
|
||||||
"name": "Test Ribbon {db_name}".format(db_name=self.env.cr.dbname),
|
"name": f"Test Ribbon {self.env.cr.dbname}",
|
||||||
"color": "#000000",
|
"color": "#000000",
|
||||||
"background_color": "#FFFFFF",
|
"background_color": "#FFFFFF",
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user