diff --git a/README.md b/README.md index b3bd020..5aa4199 100644 --- a/README.md +++ b/README.md @@ -1,133 +1,42 @@ -# Mailcatcher Testserver +==================== +Testserver Open2Bizz +==================== -## Mailhog installeren -``` -chmod +x install_mailhog_as_service.sh -./install_mailhog_as_service.sh -``` +When installing this module it transforms the database into a test database. -## Workaround bij foutmelding in Ubuntu 22.04: "note: module requires Go 1.20" -``` -- Download gewenste versie van Go: -wget -c https://go.dev/dl/go1.22.0.linux-amd64.tar.gz +**What happens** -- Ga naar de map waar het bestand staat en pak het uit: -sudo tar -C /usr/local/ -xzf go1.22.0.linux-amd64.tar.gz +- Adds a RED banner in backend (using module web_environment_ribbon from OCA) +- Adds a blue banner in backend; stating test env +- Adds a blue banner in FRONTEND (if website is installed) stating test env +- Neutralizes the database: + - Disables incoming emailserver(s) + - Disables outgoing emailserver(s) + - Disables ALL cron jobs + - Disables Delivery services + - Disables Payment providers + - Disables Account (Bank) Sync + - Disables optional freeze url parameter + - Adds ENTERPRISE code from open2bizz (Partner code for test) -- Set PATH Environment Variable -export PATH=$PATH:/usr/local/go/bin +Optional: use the added page for website: testserver_page_website -- Voeg onderstaande code toe aan .profile om het definitief te maken: -# set PATH so it includes /usr/local/go/bin if it exists -if [ -d "/usr/local/go/bin" ] ; then - PATH="/usr/local/go/bin:$PATH" -fi +**Manual** override the home page or make **inheritance** like: -- reload .profile (let op: mét punt!) -. ~/.profile + -- Controleer welke versie van Go actief is: -go version +========================== +DO NOT USE IN PRODUCTION ENVIRONMENT +========================== -- Installeer nu Mailhog met het installatie script +**Bugs:** -``` - -## Na de installatie -``` -systemctl enable mailhog -``` -reboot server +support@open2bizz.nl -Nginx configuratie (gebruik template: xxx.BEWAREN.mailcatcher.open2bizz.com.conf) - -``` -server { - listen 8025; - server_name 434-mailcatcher.staging.open2bizz.com; - - # log - access_log /var/log/nginx/434.access.log; - error_log /var/log/nginx/434.error.log; - - gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; - gzip on; - - - location / { - #kantoor Open2bizz 83.84.200.111 - allow 83.84.200.111; - allow 83.82.145.237; - allow 45.132.40.125; - allow 86.93.238.87; - allow 80.114.214.241; - allow 94.157.36.155; - allow 145.131.221.238; - deny all; - - auth_basic "Administrator Area"; - auth_basic_user_file /etc/nginx/.htpasswd; - - proxy_redirect off; - proxy_pass http://192.168.78.134:8025; - } - - #error pages - error_page 500 501 502 503 504 https://www.open2bizz.tech/503; - - listen 443 ssl; # managed by Certbot - ssl_certificate /etc/letsencrypt/live/434-mailcatcher.staging.open2bizz.com/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/434-mailcatcher.staging.open2bizz.com/privkey.pem; # managed by Certbot - include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot - ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot -``` - - - - -In de nginx config file een wachtwoord opnemen: -``` - - -======================================================== -Voorbeeld: -In de nginx config file voor omgeving 499 een wachtwoord instellen: -======================================================== - - auth_basic "Administrator Area"; - auth_basic_user_file /etc/nginx/.htpasswd-499; -======================================================== - -Voor iedere omgeving is op de 401 een aparte .htpasswd aangemaakt in de map /etc/nginx/ -Voor alle test-omgevingen in de reeks 402 en 499 is een bestand aangemaakt. -Om een nieuw htpasswd te maken (bijvoorbeeld in de 500-reeks) kan het beste een bestaande file gekopieerd worden: - cp /etc/nginx/.htpasswd-402 /etc/nginx/.htpasswd-499 - -Om al de (verborgen) .htpasswd bestanden opvragen: - ls -rtla /etc/nginx | grep .htpasswd - -Een .htpasswd kan bekeken worden met nano, maar je ziet dan alleen de user én het encrypte wachtwoord: - nano /etc/nginx/.htpasswd-499 - -Om een nieuw wachtwoord in te stellen voor de user 'mail' voor omgeving 499: - htpasswd /etc/nginx/.htpasswd-499 mail - -================================================= -Om de wijzigingen toe te passen moet nginx herstart worden: -service nginx restart -================================================= -``` - - - - -## ODOO: Menu maken voor Mailcatcher - -Maak een Menu aan met de naam Mailcatcher -Hang deze aan de groep 'Internal User' -Action: ir.actions.act_url => Thirdparty apps -Klik door op 'Thirdparty apps' en verwijs de action URL naar de in nginx opgegeven naam (bijv: https://426-mailcatcher.staging.open2bizz.com/) -Zet het target op New Window +This module is maintained by Open2bizz. +.. image:: https://www.open2bizz.tech/logo.png + :alt: Open2Bizz + :target: https://www.open2bizz.tech diff --git a/testserver_o2b/README.rst b/testserver_o2b/README.rst deleted file mode 100644 index 5aa4199..0000000 --- a/testserver_o2b/README.rst +++ /dev/null @@ -1,42 +0,0 @@ -==================== -Testserver Open2Bizz -==================== - -When installing this module it transforms the database into a test database. - -**What happens** - -- Adds a RED banner in backend (using module web_environment_ribbon from OCA) -- Adds a blue banner in backend; stating test env -- Adds a blue banner in FRONTEND (if website is installed) stating test env -- Neutralizes the database: - - Disables incoming emailserver(s) - - Disables outgoing emailserver(s) - - Disables ALL cron jobs - - Disables Delivery services - - Disables Payment providers - - Disables Account (Bank) Sync - - Disables optional freeze url parameter - - Adds ENTERPRISE code from open2bizz (Partner code for test) - -Optional: use the added page for website: testserver_page_website - -**Manual** override the home page or make **inheritance** like: - - - -========================== -DO NOT USE IN PRODUCTION ENVIRONMENT -========================== - -**Bugs:** - -support@open2bizz.nl - - -This module is maintained by Open2bizz. - -.. image:: https://www.open2bizz.tech/logo.png - :alt: Open2Bizz - :target: https://www.open2bizz.tech - diff --git a/testserver_o2b/__init__.py b/testserver_o2b/__init__.py index 511a0ca..5ec5d77 100644 --- a/testserver_o2b/__init__.py +++ b/testserver_o2b/__init__.py @@ -1,4 +1,4 @@ # -*- coding: utf-8 -*- -from . import controllers -from . import models \ No newline at end of file +from .hooks import post_init_hook +from . import models diff --git a/testserver_o2b/__manifest__.py b/testserver_o2b/__manifest__.py index c6562f7..4f5dfab 100644 --- a/testserver_o2b/__manifest__.py +++ b/testserver_o2b/__manifest__.py @@ -3,24 +3,18 @@ 'name': "Set as testserver Open2Bizz", 'summary': """ - This module males an Odoo env into a test env!""", + Only to be used when installed as TEST env. Open2Bizz""", - 'description': """ - This module males an Odoo env into a test env! - Only to be used when installed as TEST env. Open2Bizz - """, 'author': "Open2bizz", 'website': "http://www.open2bizz.tech", - 'category': 'Uncategorized', - 'version': '17.0.1.0.0', + 'category': 'Tools', 'license': 'LGPL-3', - 'depends': ['web_environment_ribbon', 'mail','base','mailcatcher_menu'], + 'version': '17.0.1.0.0', + 'depends': ['web_environment_ribbon','mail', 'base', 'mailcatcher_menu', 'website_sale'], 'data': [ - 'views/views.xml', 'views/templates.xml', + 'data/ir_cron.xml', ], - 'demo': [ - 'demo/demo.xml', - ], + 'post_init_hook': 'post_init_hook', } diff --git a/testserver_o2b/controllers/__init__.py b/testserver_o2b/controllers/__init__.py deleted file mode 100644 index 457bae2..0000000 --- a/testserver_o2b/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers \ No newline at end of file diff --git a/testserver_o2b/controllers/controllers.py b/testserver_o2b/controllers/controllers.py deleted file mode 100644 index bcb2eda..0000000 --- a/testserver_o2b/controllers/controllers.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- 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//', auth='public') -# def object(self, obj, **kw): -# return http.request.render('testserver_o2b.object', { -# 'object': obj -# }) diff --git a/testserver_o2b/data/ir_cron.xml b/testserver_o2b/data/ir_cron.xml new file mode 100644 index 0000000..b766b76 --- /dev/null +++ b/testserver_o2b/data/ir_cron.xml @@ -0,0 +1,29 @@ + + + + + Testserver: Set Date (ONLY FOR TEST ENV.) + + code + model.set_db_param() + 1 + days + + True + + + + Testserver: Cleanup Unneeded Filestore + + code + model.cleanup_unneeded_filestore_attachments(5000) + 15 + minutes + + True + + + True + + + diff --git a/testserver_o2b/demo/demo.xml b/testserver_o2b/demo/demo.xml deleted file mode 100644 index fbbff02..0000000 --- a/testserver_o2b/demo/demo.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - \ No newline at end of file diff --git a/testserver_o2b/hooks.py b/testserver_o2b/hooks.py new file mode 100644 index 0000000..bf0a7b9 --- /dev/null +++ b/testserver_o2b/hooks.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from odoo import api + + +def post_init_hook(env): + env['ir.logging'].sudo().cleanup_unneeded_filestore_attachments(limit=50) diff --git a/testserver_o2b/models/init_test.py b/testserver_o2b/models/init_test.py index 6304f2a..23886d2 100644 --- a/testserver_o2b/models/init_test.py +++ b/testserver_o2b/models/init_test.py @@ -1,100 +1,86 @@ # -*- 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', '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): - db_id = uuid.uuid1() - _logger.error(db_id) - 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'); - UPDATE website SET google_analytics_key = NULL WHERE google_analytics_key IS NOT NULL; - UPDATE product_template SET is_published = FALSE WHERE is_published = TRUE; - """ %(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';""") - if self.env['ir.model'].search([('model','=','mail.partner.device')]): - self.env.cr.execute("""DELETE FROM mail_partner_device;""") - 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))) - - - #module_website = self.env['ir.module.module'].search([('name','=','ir.module.module')]) - module_website = self.env['ir.module.module'].search([('name','=','website')]) - if module_website.state == 'installed': - model_website_page = self.env['ir.model'].search([('model','=','website.page')]) - if model_website_page: - for page in self.env['website.page'].search([('is_published','=',True)]): - page.write({ - 'is_published': False - }) - for website in self.env['website'].search([]): - website.write({ - 'domain': f"None{website.id}" - }) - for menu in self.env['website.menu'].search([('is_visible','=',True)]): - if menu.website_id and menu.parent_id: - menu.write({ - 'website_id': False - }) - elif menu.website_id and menu.url == "/": - view = self.env['ir.ui.view']._xmlid_to_res_id('testserver_o2b.testserver_page_website') - if view: - menu.page_id.view_id = view.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_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): parameter = self.env['ir.config_parameter'].sudo() @@ -104,3 +90,117 @@ class IrLogging(models.Model): ('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]}) diff --git a/testserver_o2b/security/ir.model.access.csv b/testserver_o2b/security/ir.model.access.csv deleted file mode 100644 index 36895b7..0000000 --- a/testserver_o2b/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -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 \ No newline at end of file diff --git a/testserver_o2b/views/templates.xml b/testserver_o2b/views/templates.xml index 2bcc032..64cc3cf 100644 --- a/testserver_o2b/views/templates.xml +++ b/testserver_o2b/views/templates.xml @@ -14,50 +14,5 @@ - - - - - - \ No newline at end of file diff --git a/testserver_o2b/views/views.xml b/testserver_o2b/views/views.xml deleted file mode 100644 index c69c61e..0000000 --- a/testserver_o2b/views/views.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/testserver_website_o2b/__init__.py b/testserver_website_o2b/__init__.py new file mode 100644 index 0000000..4e2b3cc --- /dev/null +++ b/testserver_website_o2b/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from .hooks import post_init_hook \ No newline at end of file diff --git a/testserver_website_o2b/__manifest__.py b/testserver_website_o2b/__manifest__.py new file mode 100644 index 0000000..642151e --- /dev/null +++ b/testserver_website_o2b/__manifest__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Set as testserver Open2Bizz, when website is enabled", + + 'summary': """ + Only to be used when installed as TEST env. Open2Bizz""", + + + 'author': "Open2bizz", + 'website': "http://www.open2bizz.tech", + 'category': 'Tools', + 'license': "AGPL-3", + 'version': '17.0.1.0.0', + 'depends': ['testserver_o2b','website'], + 'data': [ + 'views/templates.xml', + ], + 'post_init_hook': 'post_init_hook', +} diff --git a/testserver_website_o2b/hooks.py b/testserver_website_o2b/hooks.py new file mode 100644 index 0000000..64b67f3 --- /dev/null +++ b/testserver_website_o2b/hooks.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models + +import logging +_logger = logging.getLogger(__name__) + + +def post_init_hook(env): + model_website_page = env['ir.model'].search([('model','=','website.page')]) + test_view = env['ir.model.data']._xmlid_to_res_id('testserver_website_o2b.testserver_page_website') + if model_website_page: + for page in env['website.page'].search([]): + _logger.error(f"________Disable page {page.id}") + page.write({ + 'is_published': False + }) + # Create test page as startpage + new_page = env['website.page'].create( + {'name':"Testbeeld", 'url': "/testmodus", 'view_id': test_view, 'is_published': True} + ) + for website in env['website'].search([]): + website.write({ + 'domain': False, + 'homepage_url': new_page.url + }) + + module_ecommerce = env['ir.module.module'].search([('name','=','website_sale')]) + if module_ecommerce and module_ecommerce.state == 'installed': + # disable payment options: + for payment_method in env['payment.method'].search([]): + payment_method.write({ + 'active': False + }) + _logger.error(f"________Disable payment method {payment_method.id}") + # Disable products + for product in env['product.template'].search([]): + product.write({ + 'website_published': False + }) + _logger.error(f"________Disable product {product.id}") + diff --git a/testserver_website_o2b/models/__init__.py b/testserver_website_o2b/models/__init__.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/testserver_website_o2b/models/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/testserver_website_o2b/static/description/icon.png b/testserver_website_o2b/static/description/icon.png new file mode 100644 index 0000000..34cfef5 Binary files /dev/null and b/testserver_website_o2b/static/description/icon.png differ diff --git a/testserver_website_o2b/static/description/index.html b/testserver_website_o2b/static/description/index.html new file mode 100644 index 0000000..c8cdcf3 --- /dev/null +++ b/testserver_website_o2b/static/description/index.html @@ -0,0 +1,18 @@ + + +
+

Testservers when website

+

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

+ +

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

+

+ +

+ +
+ + diff --git a/testserver_website_o2b/views/templates.xml b/testserver_website_o2b/views/templates.xml new file mode 100644 index 0000000..85b43e3 --- /dev/null +++ b/testserver_website_o2b/views/templates.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/web_environment_ribbon/static/description/index.html b/web_environment_ribbon/static/description/index.html index ccb6141..646f378 100644 --- a/web_environment_ribbon/static/description/index.html +++ b/web_environment_ribbon/static/description/index.html @@ -1,4 +1,3 @@ -