From 3a233406dc1ce0af4e41f40eb9203a1737c92d4f Mon Sep 17 00:00:00 2001 From: Thomas Pot Date: Sun, 15 Mar 2026 16:42:26 +0100 Subject: [PATCH] [NEW] Test script update and extra cron job for setting database parameter expiration date --- testserver_o2b/__manifest__.py | 1 + testserver_o2b/data/ir_cron.xml | 10 ++ testserver_o2b/models/init_test.py | 204 +++++++++++++++++++++-------- 3 files changed, 159 insertions(+), 56 deletions(-) create mode 100644 testserver_o2b/data/ir_cron.xml diff --git a/testserver_o2b/__manifest__.py b/testserver_o2b/__manifest__.py index 6fd2845..13ae4dc 100644 --- a/testserver_o2b/__manifest__.py +++ b/testserver_o2b/__manifest__.py @@ -13,5 +13,6 @@ 'depends': ['mail','base','mailcatcher_menu',], 'data': [ 'views/templates.xml', + 'data/ir_cron.xml', ], } diff --git a/testserver_o2b/data/ir_cron.xml b/testserver_o2b/data/ir_cron.xml new file mode 100644 index 0000000..824baa2 --- /dev/null +++ b/testserver_o2b/data/ir_cron.xml @@ -0,0 +1,10 @@ + + + + Testserver: Set Date (ONLY FOR TEST ENV.) + + code + model.set_db_param() + days + + \ No newline at end of file diff --git a/testserver_o2b/models/init_test.py b/testserver_o2b/models/init_test.py index 21ee34c..dcc711c 100644 --- a/testserver_o2b/models/init_test.py +++ b/testserver_o2b/models/init_test.py @@ -1,70 +1,162 @@ # -*- coding: utf-8 -*- from odoo import tools from odoo import api, fields, models -from collections.abc import Mapping -import logging -_logger = logging.getLogger(__name__) +from datetime import datetime, timedelta import os import uuid import odoo +import logging +_logger = logging.getLogger(__name__) + class IrLogging(models.Model): _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): - db_id = uuid.uuid1() - _logger.error(db_id) + database_uuid = str(uuid.uuid1()) + _logger.debug(f"____ Database UID: {database_uuid}") + 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_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 = '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');""") - 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: + 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(""" - 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) - if isinstance(ADDONS_PATH, str): - addons_list = ADDONS_PATH.split(',') - else: - addons_list = list(ADDONS_PATH) - for ap in addons_list: - if ap.endswith('testserver'): - _logger.error(os.system(f'./{ap}/testserver.sh')) + 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 _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]})