Skip to content

Commit

Permalink
feat: staging branches color
Browse files Browse the repository at this point in the history
  • Loading branch information
sireko committed Aug 22, 2023
1 parent 0f6bb89 commit 7c65d3e
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 11 deletions.
48 changes: 38 additions & 10 deletions web_company_color/models/res_company.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,34 @@
# Copyright 2019 Alexandre Díaz <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import base64
import os
from colorsys import hls_to_rgb, rgb_to_hls

from odoo import api, fields, models

from ..utils import convert_to_image, image_to_rgb, n_rgb_to_hex

URL_BASE = "/web_company_color/static/src/scss/"
URL_SCSS_GEN_TEMPLATE_STAGING = URL_BASE + "custom_colors.staging.gen.scss"
URL_SCSS_GEN_TEMPLATE_DEV = URL_BASE + "custom_colors.dev.gen.scss"
URL_SCSS_GEN_TEMPLATE = URL_BASE + "custom_colors.%d.gen.scss"


class ResCompany(models.Model):
_inherit = "res.company"

SCSS_TEMPLATE_STAGING = """
.o_main_navbar {
background-color: #CF1D1D !important;
}
"""

SCSS_TEMPLATE_DEV = """
.o_main_navbar {
background-color: #DE6B23 !important;
}
"""

SCSS_TEMPLATE = """
.o_main_navbar {
background-color: %(color_navbar_bg)s !important;
Expand Down Expand Up @@ -77,6 +92,8 @@ def write(self, values):
result = super().write(values)
if any([field in values for field in fields_to_check]):
self.scss_create_or_update_attachment()
self.scss_create_or_update_attachment("staging")
self.scss_create_or_update_attachment("dev")
else:
result = super().write(values)
return result
Expand Down Expand Up @@ -122,31 +139,42 @@ def _scss_get_sanitized_values(self):
)
return values

def _scss_generate_content(self):
def _scss_generate_content(self, environment=None):
self.ensure_one()
# ir.attachment need files with content to work
if not self.company_colors:
return "// No Web Company Color SCSS Content\n"
return self.SCSS_TEMPLATE % self._scss_get_sanitized_values()
if environment == "staging":
return self.SCSS_TEMPLATE_STAGING
elif environment == "dev":
return self.SCSS_TEMPLATE_DEV
else:
return self.SCSS_TEMPLATE % self._scss_get_sanitized_values()

def scss_get_url(self):
def scss_get_url(self, from_create=False, environment=None):
self.ensure_one()
return URL_SCSS_GEN_TEMPLATE % self.id

def scss_create_or_update_attachment(self):
environment = environment if environment else os.environ.get("ODOO_STAGE")
environment = environment if environment or from_create else os.environ.get("ODOO_STAGE")
if environment == "staging":
return URL_SCSS_GEN_TEMPLATE_STAGING
elif environment == "dev":
return URL_SCSS_GEN_TEMPLATE_DEV

def scss_create_or_update_attachment(self, environment=None):
IrAttachmentObj = self.env["ir.attachment"]
for record in self:
datas = base64.b64encode(record._scss_generate_content().encode("utf-8"))
custom_url = record.scss_get_url()
datas = base64.b64encode(record._scss_generate_content(environment).encode("utf-8"))
custom_url = record.scss_get_url(True, environment)
company_id = 1 if environment else record.id
custom_attachment = IrAttachmentObj.sudo().search(
[("url", "=", custom_url), ("company_id", "=", record.id)]
[("url", "=", custom_url), ("company_id", "=", company_id)]
)
values = {
"datas": datas,
"db_datas": datas,
"url": custom_url,
"name": custom_url,
"company_id": record.id,
"company_id": company_id,
}
if custom_attachment:
custom_attachment.sudo().write(values)
Expand Down
14 changes: 13 additions & 1 deletion web_environment_ribbon/models/web_environment_ribbon_backend.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Copyright 2017 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import os
import re

from odoo import api, models

Expand All @@ -11,11 +13,17 @@ class WebEnvironmentRibbonBackend(models.AbstractModel):

@api.model
def _prepare_ribbon_format_vals(self):
return {"db_name": self.env.cr.dbname}
dbname = self.env.cr.dbname
regex_match_dev = re.search("^btlnet\-(.*)\-[0-9]+$", self.env.cr.dbname)
if regex_match_dev and regex_match_dev.group(1):
dbname = regex_match_dev.group(1)
return {"db_name": dbname}

@api.model
def _prepare_ribbon_name(self):
name_tmpl = self.env["ir.config_parameter"].sudo().get_param("ribbon.name")
if os.environ.get("ODOO_STAGE"):
name_tmpl = name_tmpl.replace('TEST', os.environ.get("ODOO_STAGE").upper())
vals = self._prepare_ribbon_format_vals()
return name_tmpl and name_tmpl.format(**vals) or name_tmpl

Expand All @@ -27,6 +35,10 @@ def get_environment_ribbon(self):
"""
ir_config_model = self.env["ir.config_parameter"]
name = self._prepare_ribbon_name()

if os.environ.get("ODOO_STAGE") == "production":
name = False

return {
"name": name,
"color": ir_config_model.sudo().get_param("ribbon.color"),
Expand Down

0 comments on commit 7c65d3e

Please sign in to comment.