4 Commits

Author SHA1 Message Date
1e6dc183d0 Update install_mailhog_as_service.sh
1.25.0
2026-05-26 12:52:47 +00:00
Thomas Pot
ef684151c9 NEW] Add methods to disable web push notifications 2026-04-28 19:39:01 +02:00
Thomas Pot
ba955407e5 NEW] Add methods to disable web push notifications 2026-04-28 19:32:40 +02:00
Thomas Pot
1d5e7f504c [FIX] Domain must be unique for each website 2026-02-19 17:07:57 +01:00
7 changed files with 65 additions and 173 deletions

View File

@@ -18,7 +18,7 @@ echo ""
echo "===================================" echo "==================================="
echo "Install Go 1.24.3..." echo "Install Go 1.24.3..."
echo "===================================" echo "==================================="
GO_VERSION=1.24.3 GO_VERSION=1.25.0
wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz
sudo rm -rf /usr/local/go sudo rm -rf /usr/local/go

View File

@@ -11,9 +11,8 @@
'author': "Open2bizz", 'author': "Open2bizz",
'website': "http://www.open2bizz.tech", 'website': "http://www.open2bizz.tech",
'category': 'Tools', 'category': 'Uncategorized',
'license': "AGPL-3", 'version': '18.0.1.0.0',
'version': '19.0.1.0.0',
'module_type': 'official', 'module_type': 'official',
'depends': ['mail','base',], 'depends': ['mail','base',],
'data': [ 'data': [

View File

@@ -8,12 +8,10 @@
'author': "Open2bizz", 'author': "Open2bizz",
'website': "http://www.open2bizz.tech", 'website': "http://www.open2bizz.tech",
'category': 'Tools', 'category': 'Uncategorized',
'license': "AGPL-3", 'version': '18.0.1.0.0',
'version': '19.0.1.0.0',
'depends': ['mail','base','mailcatcher_menu',], 'depends': ['mail','base','mailcatcher_menu',],
'data': [ 'data': [
'views/templates.xml', 'views/templates.xml',
'data/ir_cron.xml',
], ],
} }

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<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_type">days</field>
</record>
</odoo>

View File

@@ -1,85 +1,75 @@
# -*- 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', 't'),
('hnode6.openworx.nl', '1025', 'Algemene mailcatcher vanaf hnode4', 'login', 'name', 't'),
)
EXPECTED_IP_PREFIX = '192.168.78.'
REPORT_URL = 'http://127.0.0.1:8069'
ENTERPRISE_CODE = 'M160129258730'
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) self.env.cr.execute("""
_logger.debug(f"_____ reset_base_configuration ____") UPDATE ir_mail_server set active = 'f';
self._remove_param_if_exists('web.base.url.freeze') UPDATE fetchmail_server set active = 'f';
_logger.debug(f"______ remove_param_if_exists web.base.url.freeze ____") UPDATE ir_cron set active = 'f';
self._create_param_if_missing('report.url', self.REPORT_URL) DELETE FROM mail_mail;
_logger.debug(f"_______ create_param_if_missing report.url ____") UPDATE ir_config_parameter set value = 'M160129258730' where key = 'database.enterprise_code';
UPDATE ir_config_parameter set value = (NOW() + INTERVAL '30 DAY') where key = 'database.expiration_date';
UPDATE ir_config_parameter set value = '%s' where key = 'database.uuid';
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');
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');
INSERT INTO ir_mail_server(smtp_host,smtp_port,name,smtp_authentication,smtp_encryption,active) VALUES ('hnode6.openworx.nl','1025','Algemene mailcatcher vanaf hnode4','login','name','t');
""" %(db_id))
if self.env['ir.config_parameter'].search([('key','=','web.base.url.freeze')]):
self.env.cr.execute("""DELETE FROM ir_config_parameter WHERE key = 'web.base.url.freeze';""")
if not self.env['ir.config_parameter'].search([('key','=','report.url')]):
self.env.cr.execute("""INSERT INTO ir_config_parameter(key,value) VALUES ('report.url','http://127.0.0.1:8069');""")
if self.env['ir.model'].search([('model','=','mail.partner.device')]):
self.env.cr.execute("""DELETE FROM mail_partner_device;""")
model = self.env['ir.model'].search([('model','=','delivery.carrier')])
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("""
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';
""")
ADDONS_PATH = odoo.tools.config['addons_path']
_logger.error(ADDONS_PATH)
for ap in ADDONS_PATH.split(','):
if ap[-10:] == 'testserver':
_logger.error(os.system('./%s/testserver.sh' %(ap)))
self._disable_web_push_notifications() self._disable_web_push_notifications()
_logger.debug(f"_______ 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("""
UPDATE ir_mail_server SET active = 'f';
UPDATE fetchmail_server SET active = 'f';
UPDATE ir_cron SET active = 'f';
DELETE FROM mail_mail;
UPDATE ir_config_parameter
SET value = %s
WHERE key = 'database.enterprise_code';
UPDATE ir_config_parameter
SET value = (NOW() + INTERVAL '30 DAY')
WHERE key = 'database.expiration_date';
UPDATE ir_config_parameter
SET value = %s
WHERE key = 'database.uuid';
""", (self.ENTERPRISE_CODE, database_uuid))
for mail_server in self.MAIL_SERVERS:
self.env.cr.execute("""
INSERT INTO ir_mail_server(
smtp_host, smtp_port, name, smtp_authentication, smtp_encryption, active
) VALUES (%s, %s, %s, %s, %s, %s);
""", mail_server)
def _remove_param_if_exists(self, key):
if self.env['ir.config_parameter'].search([('key', '=', key)], limit=1):
self.env.cr.execute("DELETE FROM ir_config_parameter WHERE key = %s;", (key,))
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): def _disable_web_push_notifications(self):
parameter = self.env['ir.config_parameter'].sudo() parameter = self.env['ir.config_parameter'].sudo()
parameter.set_param('web_push.notification.enabled', '0') parameter.set_param('web_push.notification.enabled', '0')
@@ -88,87 +78,3 @@ class IrLogging(models.Model):
('key', 'in', ('mail.web_push_vapid_private_key', 'mail.web_push_vapid_public_key', 'mail.sfu_server_key'))]) ('key', 'in', ('mail.web_push_vapid_private_key', 'mail.web_push_vapid_public_key', 'mail.sfu_server_key'))])
for parameter in parameters: for parameter in parameters:
parameter.sudo().unlink() 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 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]})

View File

@@ -8,9 +8,8 @@
'author': "Open2bizz", 'author': "Open2bizz",
'website': "http://www.open2bizz.tech", 'website': "http://www.open2bizz.tech",
'category': 'Tools', 'category': 'Uncategorized',
'license': "AGPL-3", 'version': '18.0.1.0.0',
'version': '19.0.1.0.0',
'depends': ['testserver_o2b','website'], 'depends': ['testserver_o2b','website'],
'data': [ 'data': [
'views/templates.xml', 'views/templates.xml',

View File

@@ -20,7 +20,7 @@ def post_init_hook(env):
) )
for website in env['website'].search([]): for website in env['website'].search([]):
website.write({ website.write({
'domain': False, 'domain': f"None_{website.domain}",
'homepage_url': new_page.url 'homepage_url': new_page.url
}) })