diff --git a/addons/web/data/report_layout.xml b/addons/web/data/report_layout.xml index fbfbfbc21ea..d2abe98c214 100644 --- a/addons/web/data/report_layout.xml +++ b/addons/web/data/report_layout.xml @@ -25,5 +25,12 @@ /web/static/img/preview_clean.png /web/static/pdf/preview_clean.pdf + + + text/scss + res.company.scss + binary + /web/static/src/scss/asset_styles_company_report.scss + diff --git a/addons/web/models/models.py b/addons/web/models/models.py index 3a70ab4f0c8..7f6e83554e3 100644 --- a/addons/web/models/models.py +++ b/addons/web/models/models.py @@ -2,6 +2,7 @@ import babel.dates import pytz from lxml import etree +import base64 from odoo import _, api, fields, models from odoo.osv.expression import AND @@ -360,3 +361,41 @@ class Base(models.AbstractModel): }) return filter_values + + +class ResCompany(models.Model): + _inherit = 'res.company' + + @api.model + def create(self, values): + res = super().create(values) + if 'primary_color' in values or 'secondary_color' in values or 'font' in values: + self._update_asset_style() + return res + + def write(self, values): + res = super().write(values) + if 'primary_color' in values or 'secondary_color' in values or 'font' in values: + self._update_asset_style() + return res + + def _get_asset_style_b64(self): + template_style = self.env.ref('web.styles_company_report', raise_if_not_found=False) + if not template_style: + return '' + # One bundle for everyone, so this method + # necessarily updates the style for every company at once + company_ids = self.sudo().search([]) + company_styles = template_style.render({ + 'company_ids': company_ids, + }) + return base64.b64encode((company_styles)) + + def _update_asset_style(self): + asset_attachment = self.env.ref('web.asset_styles_company_report', raise_if_not_found=False) + if not asset_attachment: + return + asset_attachment = asset_attachment.sudo() + b64_val = self._get_asset_style_b64() + if b64_val != asset_attachment.datas: + asset_attachment.write({'datas': b64_val}) diff --git a/addons/web/static/src/scss/layout_background.scss b/addons/web/static/src/scss/layout_background.scss index 12dc0f109dc..0fea6d0a764 100644 --- a/addons/web/static/src/scss/layout_background.scss +++ b/addons/web/static/src/scss/layout_background.scss @@ -11,7 +11,7 @@ margin-right: 16px; } h3 { - color: $o-company-primary-color; + color: $o-default-report-primary-color; font-weight: 700; font-size: 1.25rem; max-width: 300px; @@ -22,12 +22,12 @@ white-space: nowrap; } ul { - border-top: 1px solid $o-company-secondary-color; - border-bottom: 1px solid $o-company-secondary-color; + border-top: 1px solid $o-default-report-secondary-color; + border-bottom: 1px solid $o-default-report-secondary-color; padding: 4px 0; margin: 0 0 4px 0; li { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } } } @@ -39,7 +39,7 @@ min-height: 620px; strong { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } .table { border-top: 1px solid gray('300'); @@ -49,10 +49,10 @@ border-top: none; } h2 { - color: $o-company-primary-color; + color: $o-default-report-primary-color; } thead tr th { - color: $o-company-secondary-color + color: $o-default-report-secondary-color } tbody { color: gray('700'); @@ -84,7 +84,7 @@ border-top: 1px solid gray('400') !important; } strong { - color: $o-company-primary-color; + color: $o-default-report-primary-color; } } } diff --git a/addons/web/static/src/scss/layout_boxed.scss b/addons/web/static/src/scss/layout_boxed.scss index a32c09379cd..d9be91da7a5 100644 --- a/addons/web/static/src/scss/layout_boxed.scss +++ b/addons/web/static/src/scss/layout_boxed.scss @@ -16,23 +16,23 @@ .o_boxed_footer { margin-top: 200px; white-space: nowrap; - border-top: 3px solid $o-company-secondary-color; + border-top: 3px solid $o-default-report-secondary-color; ul { margin: 4px 0; } } .o_report_layout_boxed { #total strong { - color: $o-company-primary-color; + color: $o-default-report-primary-color; } #informations strong { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } > h2 { text-transform: uppercase; } h2 span { - color: $o-company-primary-color; + color: $o-default-report-primary-color; } table { border: 1px solid gray('700'); @@ -41,7 +41,7 @@ tr th { text-transform: uppercase; border: 1px solid gray('700'); - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } } tbody { @@ -59,12 +59,12 @@ border-bottom: 1px solid gray('700'); } &.o_line_section td { - background-color: rgba($o-company-primary-color, 0.7); + background-color: rgba($o-default-report-primary-color, 0.7); color: #fff; } &.is-subtotal, td.o_price_total { - background-color: rgba($o-company-secondary-color, 0.1); + background-color: rgba($o-default-report-secondary-color, 0.1); } } } @@ -92,7 +92,7 @@ } &:last-child td, &.o_total td { - background-color: rgba($o-company-primary-color, 0.9); + background-color: rgba($o-default-report-primary-color, 0.9); color: #fff; &:first-child { diff --git a/addons/web/static/src/scss/layout_clean.scss b/addons/web/static/src/scss/layout_clean.scss index 0a62584ea88..5d559726281 100644 --- a/addons/web/static/src/scss/layout_clean.scss +++ b/addons/web/static/src/scss/layout_clean.scss @@ -8,14 +8,14 @@ .o_clean_footer { margin: 0 3px; margin-top: 200px; - border-top: 3px solid $o-company-secondary-color; + border-top: 3px solid $o-default-report-secondary-color; h4 { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; font-weight: bolder; } .pagenumber { - border: 3px solid $o-company-primary-color; - background-color: $o-company-secondary-color; + border: 3px solid $o-default-report-primary-color; + background-color: $o-default-report-secondary-color; color: white; padding: 4px 8px; text-align: center; @@ -23,11 +23,11 @@ } .o_report_layout_clean { h1, h2, h3 { - color: $o-company-primary-color; + color: $o-default-report-primary-color; font-weight: bolder; } strong { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } table { &.o_main_table { @@ -35,9 +35,9 @@ } thead { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; tr th { - border-top: 3px solid $o-company-secondary-color !important; + border-top: 3px solid $o-default-report-secondary-color !important; text-transform: uppercase; } tr th:first-child { @@ -50,7 +50,7 @@ border-top: none; } tr:last-child td { - border-bottom: 3px solid $o-company-secondary-color; + border-bottom: 3px solid $o-default-report-secondary-color; } tr { td { @@ -63,7 +63,7 @@ } #total { strong { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } } /*Total table*/ diff --git a/addons/web/static/src/scss/layout_standard.scss b/addons/web/static/src/scss/layout_standard.scss index 5cedf578c48..acd52b32bd4 100644 --- a/addons/web/static/src/scss/layout_standard.scss +++ b/addons/web/static/src/scss/layout_standard.scss @@ -7,19 +7,19 @@ .o_report_layout_standard { h2 { - color: $o-company-primary-color; + color: $o-default-report-primary-color; } #informations strong { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } #total strong{ - color: $o-company-primary-color; + color: $o-default-report-primary-color; } table { thead { - color: $o-company-secondary-color; + color: $o-default-report-secondary-color; } } } diff --git a/addons/web/static/src/scss/report.scss b/addons/web/static/src/scss/report.scss index f6fcdeb9407..86c0f986006 100644 --- a/addons/web/static/src/scss/report.scss +++ b/addons/web/static/src/scss/report.scss @@ -1,6 +1,6 @@ -$o-company-font: 'Lato' !default; -$o-company-primary-color: rgb(0, 0, 0) !default; -$o-company-secondary-color: rgb(0, 0, 0) !default; +$o-default-report-font: 'Lato' !default; +$o-default-report-primary-color: rgb(0, 0, 0) !default; +$o-default-report-secondary-color: rgb(0, 0, 0) !default; html, body { height: 100%; @@ -10,7 +10,7 @@ html, body { body { color: #000 !important; word-wrap: break-word; - font-family: $o-company-font; + font-family: $o-default-report-font; } .border-black td, .border-black th { border-top: 1px solid black !important; diff --git a/addons/web/views/report_templates.xml b/addons/web/views/report_templates.xml index 631330238ae..4f6f6086c7a 100644 --- a/addons/web/views/report_templates.xml +++ b/addons/web/views/report_templates.xml @@ -19,13 +19,13 @@ - +