summaryrefslogtreecommitdiff
path: root/backend_theme_v14
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 17:14:58 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 17:14:58 +0700
commit1ca3b3df3421961caec3b747a364071c80f5c7da (patch)
tree6778a1f0f3f9b4c6e26d6d87ccde16e24da6c9d6 /backend_theme_v14
parentb57188be371d36d96caac4b8d65a40745c0e972c (diff)
initial commit
Diffstat (limited to 'backend_theme_v14')
-rw-r--r--backend_theme_v14/LICENSE.txt165
-rw-r--r--backend_theme_v14/__init__.py3
-rw-r--r--backend_theme_v14/__manifest__.py33
-rw-r--r--backend_theme_v14/controllers/__init__.py2
-rw-r--r--backend_theme_v14/controllers/main.py23
-rw-r--r--backend_theme_v14/images/screen.pngbin0 -> 311325 bytes
-rw-r--r--backend_theme_v14/models/__init__.py4
-rw-r--r--backend_theme_v14/models/res_company.py11
-rw-r--r--backend_theme_v14/models/res_users.py25
-rw-r--r--backend_theme_v14/static/description/icon.pngbin0 -> 14177 bytes
-rw-r--r--backend_theme_v14/static/description/index.html45
-rw-r--r--backend_theme_v14/static/description/screenshot1.pngbin0 -> 305452 bytes
-rw-r--r--backend_theme_v14/static/description/screenshot2.pngbin0 -> 193655 bytes
-rw-r--r--backend_theme_v14/static/src/font/Roboto-Regular.ttfbin0 -> 162876 bytes
-rw-r--r--backend_theme_v14/static/src/img/checked.svg14
-rw-r--r--backend_theme_v14/static/src/img/material-background.pngbin0 -> 111869 bytes
-rw-r--r--backend_theme_v14/static/src/js/sidebar-toggle.js25
-rw-r--r--backend_theme_v14/static/src/js/sidebar.js33
-rw-r--r--backend_theme_v14/static/src/scss/colors.scss2
-rw-r--r--backend_theme_v14/static/src/scss/sidebar.scss70
-rw-r--r--backend_theme_v14/static/src/scss/style.scss438
-rw-r--r--backend_theme_v14/views/assets.xml21
-rw-r--r--backend_theme_v14/views/res_company_view.xml17
-rw-r--r--backend_theme_v14/views/sidebar.xml35
-rw-r--r--backend_theme_v14/views/users.xml15
25 files changed, 981 insertions, 0 deletions
diff --git a/backend_theme_v14/LICENSE.txt b/backend_theme_v14/LICENSE.txt
new file mode 100644
index 0000000..0a04128
--- /dev/null
+++ b/backend_theme_v14/LICENSE.txt
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/backend_theme_v14/__init__.py b/backend_theme_v14/__init__.py
new file mode 100644
index 0000000..724cd13
--- /dev/null
+++ b/backend_theme_v14/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import models
+from . import controllers \ No newline at end of file
diff --git a/backend_theme_v14/__manifest__.py b/backend_theme_v14/__manifest__.py
new file mode 100644
index 0000000..dcc1d29
--- /dev/null
+++ b/backend_theme_v14/__manifest__.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Copyright 2016, 2020 Openworx - Mario Gielissen
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+{
+ "name": "Openworx Material Backend Theme V14",
+ "summary": "Openworx Material Backend Theme V14",
+ "version": "14.0.0.2",
+ "category": "Theme/Backend",
+ "website": "https://www.openworx.nl",
+ "description": """
+ Openworx Material Backend theme for Odoo 14.0 community edition.
+ """,
+ 'images':[
+ 'images/screen.png'
+ ],
+ "author": "Openworx",
+ "license": "LGPL-3",
+ "installable": True,
+ "depends": [
+ 'web',
+ 'web_responsive',
+
+ ],
+ "data": [
+ 'views/assets.xml',
+ 'views/res_company_view.xml',
+ 'views/users.xml',
+ 'views/sidebar.xml',
+ ],
+ #'live_test_url': 'https://youtu.be/JX-ntw2ORl8'
+
+}
diff --git a/backend_theme_v14/controllers/__init__.py b/backend_theme_v14/controllers/__init__.py
new file mode 100644
index 0000000..cd4d6a8
--- /dev/null
+++ b/backend_theme_v14/controllers/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import main \ No newline at end of file
diff --git a/backend_theme_v14/controllers/main.py b/backend_theme_v14/controllers/main.py
new file mode 100644
index 0000000..9b586a3
--- /dev/null
+++ b/backend_theme_v14/controllers/main.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+# Copyright 2016, 2019 Openworx
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+import base64
+from odoo.http import Controller, request, route
+from werkzeug.utils import redirect
+
+DEFAULT_IMAGE = '/backend_theme_v14/static/src/img/material-background.png'
+
+class DasboardBackground(Controller):
+
+ @route(['/dashboard'], type='http', auth='user', website=False)
+ def dashboard(self, **post):
+ user = request.env.user
+ company = user.company_id
+ if company.dashboard_background:
+ image = base64.b64decode(company.dashboard_background)
+ else:
+ return redirect(DEFAULT_IMAGE)
+
+ return request.make_response(
+ image, [('Content-Type', 'image')])
diff --git a/backend_theme_v14/images/screen.png b/backend_theme_v14/images/screen.png
new file mode 100644
index 0000000..56c6f8d
--- /dev/null
+++ b/backend_theme_v14/images/screen.png
Binary files differ
diff --git a/backend_theme_v14/models/__init__.py b/backend_theme_v14/models/__init__.py
new file mode 100644
index 0000000..889e628
--- /dev/null
+++ b/backend_theme_v14/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+from . import res_company
+from . import res_users
+
diff --git a/backend_theme_v14/models/res_company.py b/backend_theme_v14/models/res_company.py
new file mode 100644
index 0000000..5940bcc
--- /dev/null
+++ b/backend_theme_v14/models/res_company.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Copyright 2016, 2019 Openworx
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+from odoo import models, fields
+
+class ResCompany(models.Model):
+
+ _inherit = 'res.company'
+
+ dashboard_background = fields.Binary(attachment=True) \ No newline at end of file
diff --git a/backend_theme_v14/models/res_users.py b/backend_theme_v14/models/res_users.py
new file mode 100644
index 0000000..fd3ecd6
--- /dev/null
+++ b/backend_theme_v14/models/res_users.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Copyright 2016, 2019 Openworx
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+from odoo import models, fields
+
+class ResUsers(models.Model):
+
+ _inherit = 'res.users'
+
+ sidebar_visible = fields.Boolean("Show App Sidebar", default=True)
+
+ def __init__(self, pool, cr):
+ """ Override of __init__ to add access rights on notification_email_send
+ and alias fields. Access rights are disabled by default, but allowed
+ on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS.
+ """
+ init_res = super(ResUsers, self).__init__(pool, cr)
+ # duplicate list to avoid modifying the original reference
+ type(self).SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS)
+ type(self).SELF_WRITEABLE_FIELDS.extend(['sidebar_visible'])
+ # duplicate list to avoid modifying the original reference
+ type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS)
+ type(self).SELF_READABLE_FIELDS.extend(['sidebar_visible'])
+ return init_res \ No newline at end of file
diff --git a/backend_theme_v14/static/description/icon.png b/backend_theme_v14/static/description/icon.png
new file mode 100644
index 0000000..4218e4e
--- /dev/null
+++ b/backend_theme_v14/static/description/icon.png
Binary files differ
diff --git a/backend_theme_v14/static/description/index.html b/backend_theme_v14/static/description/index.html
new file mode 100644
index 0000000..0c97ebc
--- /dev/null
+++ b/backend_theme_v14/static/description/index.html
@@ -0,0 +1,45 @@
+<section class="oe_container">
+ <div class="oe_row oe_spaced">
+ <div class="oe_span12">
+ <h1 class="oe_slogan" style="color:#337ab7;">Openworx Material Backend Theme</h1>
+ <h2 class="oe_slogan">The most popular backend theme for Odoo 14.0 Community</h2>
+ <div class="oe_screenshot" style="text-align: center;">
+ <h3 class="oe_slogan" style="color:#337ab7;">Enterprise look'n'feel App dashboard</h3>
+ <img style="max-width: 100%;" src="screenshot1.png"/><br><br>
+ <h3 class="oe_slogan" style="color:#337ab7;">Formview</h3>
+ <img style="max-width: 100%;" src="screenshot2.png"/><br><br>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section class="oe_container oe_separator">
+</section>
+
+<section class="oe_container" style="background-color:#E8E8E8; padding:20px 0px 90px 0px">
+ <div class="oe_row">
+ <div class="oe_span12">
+ <div class="oe_centeralign">
+ <p>You can change the App dashboard background under Company Settings.</p>
+ <p>Remark: It is possible that the Odoo service needs to be restarted after install.</p>
+ </div>
+ </div>
+ </div>
+</section>
+
+<section class="oe_container oe_separator">
+</section>
+
+<section class="oe_container oe_dark">
+ <div class="oe_row">
+ <div class="oe_span12 oe_centeralign">
+ <br/>
+ <h3>Help & Support</h3>
+ <br/>
+ Website: <a href="https://www.openworx.nl" target="_blank">Openworx</a><br/>
+ Contact: <a href="mailto:info@openworx.nl" subject="Material Backend Theme v14">Email Support</a><br/>
+ <br/>
+ </div>
+ </div>
+</section>
+
diff --git a/backend_theme_v14/static/description/screenshot1.png b/backend_theme_v14/static/description/screenshot1.png
new file mode 100644
index 0000000..cf9418b
--- /dev/null
+++ b/backend_theme_v14/static/description/screenshot1.png
Binary files differ
diff --git a/backend_theme_v14/static/description/screenshot2.png b/backend_theme_v14/static/description/screenshot2.png
new file mode 100644
index 0000000..8eee3a4
--- /dev/null
+++ b/backend_theme_v14/static/description/screenshot2.png
Binary files differ
diff --git a/backend_theme_v14/static/src/font/Roboto-Regular.ttf b/backend_theme_v14/static/src/font/Roboto-Regular.ttf
new file mode 100644
index 0000000..8c082c8
--- /dev/null
+++ b/backend_theme_v14/static/src/font/Roboto-Regular.ttf
Binary files differ
diff --git a/backend_theme_v14/static/src/img/checked.svg b/backend_theme_v14/static/src/img/checked.svg
new file mode 100644
index 0000000..5125976
--- /dev/null
+++ b/backend_theme_v14/static/src/img/checked.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="15px" height="15px" viewBox="0 0 15 15" enable-background="new 0 0 15 15" xml:space="preserve">
+<g>
+ <path fill="#666766" d="M12.385,5.578L7.65,10.313l-0.89,0.888c-0.119,0.119-0.281,0.184-0.444,0.184
+ c-0.162,0-0.328-0.064-0.445-0.184l-0.89-0.888L2.615,7.944C2.497,7.828,2.432,7.664,2.432,7.5c0-0.163,0.065-0.325,0.183-0.444
+ l0.89-0.89c0.118-0.117,0.281-0.183,0.444-0.183c0.164,0,0.327,0.065,0.445,0.183l1.923,1.929l4.289-4.296
+ c0.119-0.118,0.282-0.183,0.445-0.183c0.164,0,0.327,0.065,0.445,0.183l0.889,0.89c0.118,0.118,0.184,0.281,0.184,0.445
+ C12.568,5.296,12.503,5.46,12.385,5.578z"/>
+</g>
+</svg>
+
diff --git a/backend_theme_v14/static/src/img/material-background.png b/backend_theme_v14/static/src/img/material-background.png
new file mode 100644
index 0000000..de0bb76
--- /dev/null
+++ b/backend_theme_v14/static/src/img/material-background.png
Binary files differ
diff --git a/backend_theme_v14/static/src/js/sidebar-toggle.js b/backend_theme_v14/static/src/js/sidebar-toggle.js
new file mode 100644
index 0000000..038bc6d
--- /dev/null
+++ b/backend_theme_v14/static/src/js/sidebar-toggle.js
@@ -0,0 +1,25 @@
+/* Copyright 2017 Openworx.
+ * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
+
+odoo.define('backend_theme_v14.sidebar-toggle', function (require) {
+ "use strict";
+
+ var session = require('web.session');
+ var rpc = require('web.rpc');
+ var id = session.uid;
+ rpc.query({
+ model: 'res.users',
+ method: 'read',
+ args: [[id], ['sidebar_visible']],
+ }).then(function(res) {
+ var dbfield = res[0];
+ var toggle = dbfield.sidebar_visible;
+ if (toggle === true) {
+ $("#app-sidebar").removeClass("toggle-sidebar");
+ } else {
+ $("#app-sidebar").addClass("toggle-sidebar");
+ };
+ });
+
+});
+
diff --git a/backend_theme_v14/static/src/js/sidebar.js b/backend_theme_v14/static/src/js/sidebar.js
new file mode 100644
index 0000000..3bc7a22
--- /dev/null
+++ b/backend_theme_v14/static/src/js/sidebar.js
@@ -0,0 +1,33 @@
+/* Copyright 2016, 2019 Openworx.
+ * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
+
+// Check if debug mode is active and then add debug into URL when clicking on the App sidebar
+odoo.define('backend_theme_v14.Sidebar', function(require) {
+ "use strict";
+ var core = require('web.core');
+ var session = require('web.session');
+ var Widget = require('web.Widget');
+ $(function() {
+ (function($) {
+ $.addDebug = function(url) {
+ url = url.replace(/(.{4})/, "$1?debug");
+ return url;
+ }
+ $.addDebugWithAssets = function(url) {
+ url = url.replace(/(.{4})/, "$1?debug=assets");
+ return url;
+ }
+ $.delDebug = function(url) {
+ var str = url.match(/web(\S*)#/);
+ url = url.replace("str/g", "");
+ return url;
+ }
+ }) (jQuery);
+ $("#sidebar a").each(function() {
+ var url = $(this).attr('href');
+ if (session.debug == 1) $(this).attr('href', $.addDebug(url));
+ if (session.debug == 'assets') $(this).attr('href', $.addDebugWithAssets(url));
+ if (session.debug == false) $(this).attr('href', $.delDebug(url));
+ });
+ });
+});
diff --git a/backend_theme_v14/static/src/scss/colors.scss b/backend_theme_v14/static/src/scss/colors.scss
new file mode 100644
index 0000000..3b7102c
--- /dev/null
+++ b/backend_theme_v14/static/src/scss/colors.scss
@@ -0,0 +1,2 @@
+$brand-primary: #008DCA;
+$brand-secondary: #5EC269;
diff --git a/backend_theme_v14/static/src/scss/sidebar.scss b/backend_theme_v14/static/src/scss/sidebar.scss
new file mode 100644
index 0000000..158a148
--- /dev/null
+++ b/backend_theme_v14/static/src/scss/sidebar.scss
@@ -0,0 +1,70 @@
+/* Copyright 2016, 2018 Openworx.
+ * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
+
+/* App Sidebar Panel */
+
+$odoo-sidebar-width: 180px;
+
+.app-sidebar-panel {
+ flex: 0 0 $odoo-sidebar-width;
+ background-color: $gray-base;
+ height: calc(100% - 46px) !important;
+ //height: 100% !important;
+ overflow-y: auto;
+ @media (max-width: 768px) {
+ display: none;
+ }
+}
+
+/* @media (min-width: 768px) {
+ .o_menu_apps {
+ display: none !important;
+ }
+} */
+
+//.app-sidebar-panel:hover {
+// @include o-flex(0, 0, $odoo-sidebar-width);
+//}
+
+.app-sidebar {
+ white-space: nowrap;
+ padding: 0;
+ .app-sidebar-menu {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ >li {
+ display: block;
+ margin: 0;
+ padding: 0;
+ border: 0px;
+ >a {
+ display: block;
+ position: relative;
+ margin: 0;
+ border: 0px;
+ padding: 8px 15px;
+ text-decoration: none;
+ font-size: 13px;
+ font-weight: 300;
+ color: $gray-lighter;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+ > li:hover > a{
+ background: darken(#0099ff, 15%);
+ color: #fff;
+ }
+ }
+}
+
+.app-sidebar-menuitem {
+ width: 23px;
+ height: 22px;
+ margin-right: 5px;
+}
+
+.toggle-sidebar {
+ display: none;
+}
diff --git a/backend_theme_v14/static/src/scss/style.scss b/backend_theme_v14/static/src/scss/style.scss
new file mode 100644
index 0000000..3d4630e
--- /dev/null
+++ b/backend_theme_v14/static/src/scss/style.scss
@@ -0,0 +1,438 @@
+/* Copyright 2016, 2019 Openworx.
+ * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
+
+
+@font-face {
+ font-family: Roboto;
+ src: url(/backend_theme_v14/static/src/font/Roboto-Regular.ttf)
+}
+
+
+$gray-base: #000;
+$gray-darker: lighten($gray-base, 13.5%);
+$gray-dark: #666;
+$gray: #777;
+$gray-light: #AEA79F;
+$gray-lighter: lighten($gray-base, 93.5%);
+
+$brand-primary-dark: darken($brand-primary, 10%);
+$brand-secondary-dark: darken($brand-secondary, 10%);
+
+body {
+
+ font-family: "Roboto";
+}
+
+.o_loading {
+ background-color: $brand-primary;
+}
+
+.o_main_navbar {
+ background-color : $brand-primary;
+}
+
+.o_main_navbar > a:hover, .o_main_navbar > a:focus, .o_main_navbar > button:hover, .o_main_navbar > button:focus {
+
+ background-color: $brand-primary-dark;
+ color: inherit;
+
+}
+
+.o_main_navbar > ul > li > a:hover, .o_main_navbar > ul > li > label:hover {
+ background-color: $brand-primary-dark;
+}
+
+.o_main_navbar .show .dropdown-toggle {
+
+ background-color: $brand-primary-dark;
+
+}
+
+//.app-sidebar {
+// display: none;
+//}
+
+// Sidebar
+html .o_web_client {
+ flex-flow: row wrap;
+
+ >header {
+ flex: 0 0 100%;
+ }
+
+ >.o_action_manager {
+ @media (max-width: 768px) {
+ flex: 0 0 100%;
+ }
+ flex: 0 0 calc(100% - 180px);
+ height: calc(100% - 46px) !important;
+ }
+
+ .toggle-sidebar~.o_action_manager {
+ flex: 0 0 100%;
+ }
+}
+
+// Fix color Add file button
+.o_control_panel .o_cp_sidebar .o_hidden_input_file .o_form_binary_form span {
+ color: $gray-dark !important;
+}
+
+// Buttons
+
+.btn {
+ border-radius: 0px;
+}
+
+.btn-primary {
+
+ color: #fff;
+ background-color: $brand-secondary;
+ border-color: $brand-secondary;
+
+}
+
+.btn-primary:hover {
+
+ color: #fff;
+ background-color: $brand-secondary-dark;
+ border-color: $brand-secondary-dark;
+}
+
+.btn-secondary {
+ border: none;
+}
+
+.btn:active, .btn.active {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background-color: #eee !important;
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background-color: #eee !important;
+}
+
+
+.btn-link {
+ color: $brand-secondary;
+}
+
+.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled {
+ color: $brand-primary;
+}
+
+.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(.disabled):hover {
+ color: $brand-primary;
+}
+
+.o_dropdown_toggler_btn, .o_dropdown_toggler_btn:hover, .o_dropdown_toggler_btn:focus, .o_dropdown_toggler_btn:hover, .o_dropdown_toggler_btn:focus, .btn-icon, .o_graph_button {
+ text-transform: none !important;
+ color: $gray-dark !important;
+ background-color: transparent !important;
+ border: none !important;
+}
+
+.dropdown-menu {
+ border-radius: 0px;
+}
+
+oe_highlight {
+ color: #ffffff !important;
+ background-color: $brand-primary !important;
+}
+
+.o_external_button {
+ color: $brand-primary !important;
+ background: #ffffff;
+}
+
+.o_button_icon {
+ color: $brand-primary !important;
+}
+
+// Badges
+
+.badge {
+ border: 1px solid $brand-secondary;
+}
+
+// Calendar
+
+.o_calendar_container .o_calendar_sidebar_container .ui-datepicker table .ui-state-active {
+ background: none;
+ background-color: $brand-primary !important;
+ color: #ffffff !important;
+}
+.o_calendar_container .o_calendar_sidebar_container .ui-datepicker table .ui-state-default {
+ color: $brand-primary;
+}
+
+.datepicker {
+ .table-sm {
+ > thead {
+ color: white;
+ background-color: $brand-primary;
+
+ > tr {
+ &:first-child {
+ th:hover {
+ color: white;
+ background-color: darken($brand-primary, 10%);
+ }
+ }
+
+ &:last-child {
+ color: $o-datepicker-week-color;
+ background-color: $o-datepicker-week-bg-color;
+ }
+ > th {
+ border-radius: 0;
+ }
+ }
+ }
+
+ > tbody {
+ > tr {
+ > td {
+ &.active, .active {
+ background-color: $o-brand-primary;
+ border-radius: 100px;
+ }
+
+ &.today:before {
+ border-bottom-color: $o-brand-primary;
+ }
+ }
+ }
+ }
+ }
+}
+
+.datepicker .table-sm > tbody > tr > td.active, .datepicker .table-sm > tbody > tr > td .active {
+ background-color: $brand-primary;
+ border-radius: 0;
+}
+
+// Filter search label
+
+.o_searchview {
+ .o_searchview_facet {
+
+ background-color: #ffffff;
+
+ .o_searchview_facet_label {
+ background-color: $brand-primary;
+ }
+ }
+}
+
+a {
+
+ color: $brand-secondary;
+ text-decoration: none;
+ background-color: transparent;
+ -webkit-text-decoration-skip: objects;
+
+}
+
+a:hover {
+
+ color: $brand-secondary-dark;
+ text-decoration: none;
+
+}
+
+
+.o_control_panel {
+ background-color: #ffffff;
+}
+
+.breadcrumb {
+ background-color: inherit;
+}
+
+// Input
+
+input[type="text"], input[type="password"], input[type="number"],
+textarea, select, .o_form_view.o_form_editable .o_form_field_many2manytags,
+.o_searchview
+{
+ border: 0;
+ border-radius: 0;
+ border-bottom: 1px solid #ccc;
+}
+
+.o_web_client input:focus, .o_web_client textarea:focus, .o_web_client select:focus {
+ outline: none;
+ border-bottom: 2px solid $brand-primary;
+}
+
+.o_input {
+ border: 1px solid #ccc;
+ border-top-style: none;
+ border-right-style: none;
+ border-left-style: none;
+ color: $gray;
+}
+
+.o_field_widget {
+ &.o_field_many2one .o_external_button {
+ color: $brand-secondary
+ }
+}
+
+.o_required_modifier {
+ &.o_input, .o_input {
+ background-color: lighten($brand-primary, 35%) ! important;
+ }
+}
+
+.input-group-text {
+ background-color: transparent;
+ color: #fff;
+ border: 0px;
+}
+
+// Listview
+
+.o_list_view.table {
+ border: none;
+}
+.o_list_view.table thead, .o_list_view.table tfoot, .o_list_view.table td,.o_list_view.table th {
+ border: none;
+}
+
+.o_list_view.table thead {
+ background-color: #e2e2e0;
+}
+
+.o_list_view.table thead > tr > th.o_column_sortable:hover {
+ background-color: #D6D6D3;
+}
+
+.o_list_view.table tbody tr.o_group_header {
+ background-color: #dfdfdf;
+ background-image: none;
+ border-top: 1px solid #e2e2e0;
+}
+
+.table-striped > tbody > tr:nth-of-type(2n+1) {
+ background-color: #eef0f0;
+}
+
+.o_list_view tfoot {
+ background-color: $brand-primary;
+ color: #ffffff;
+ cursor: default;
+ font-weight: normal;
+}
+
+.ui-autocomplete .ui-menu-item.ui-state-focus {
+ background-color: #dee2e6;
+}
+
+.ui-menu-item a:hover,.ui-menu-item a:focus {
+ color: #666666 !important;
+}
+.ui-autocomplete .ui-menu-item.ui-state-focus a{
+ color: #666666 !important;
+}
+
+.o_form_view .oe_button_box .oe_stat_button .o_stat_info .o_stat_value {
+ color: $brand-primary;
+}
+
+.o_form_view .o_horizontal_separator {
+ color: #666666;
+ font-weight: bold;
+}
+
+// Forms
+
+.o_form_view {
+
+ .o_form_sheet_bg {
+ background: none !important;
+ background-color: #F9F9F9 !important;
+ padding: 0px;
+ .o_form_sheet {
+ border: 1px solid #d9d7d7;
+ box-shadow: 0 5px 20px -15px black;
+ }
+ }
+
+ .o_form_statusbar {
+ //margin: -16px;
+
+ .o_statusbar_status {
+ > .o_arrow_button {
+ background: #ffffff;
+ }
+ }
+ }
+}
+
+// App Dashboard
+
+.o_menu_apps .dropdown-menu.show {
+ background: url(/dashboard);
+ background-origin: border-box;
+ background-size: cover;
+ height: calc(100vh);
+ max-height: calc(100vh);
+ border-top: $o-navbar-height solid transparent;
+ top: 0 !important;
+}
+
+.o_main_navbar > ul.o_menu_systray {
+ float: right;
+ position: relative;
+ z-index: 200;
+}
+
+.fa-th-large::before {
+ content: "\f00a";
+}
+
+.o_menu_apps .full {
+ width: 46px;
+ font-size: 18px;
+ text-align: center;
+ position: relative;
+ z-index: 200;
+}
+
+.o-app-name {
+ color: #fff;
+ font-size: 15px;
+ font-weight: 400;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.45);
+}
+
+.o_menu_apps .dropdown-menu.show .o-app-icon {
+ padding: 20px 0 0;
+}
+
+.o_menu_apps .dropdown-menu.show .o-app-icon:hover {
+ box-shadow: 0 8px 15px -10px black;
+ transform: translateY(-1px);
+}
+
+.dropdown-item.o_app {
+ background: transparent;
+}
+
+.o-menu-search-result {
+ color: #fff;
+}
+
+// Chat window
+
+.o_thread_window .o_thread_window_header {
+ background-color: $brand-primary;
+}
diff --git a/backend_theme_v14/views/assets.xml b/backend_theme_v14/views/assets.xml
new file mode 100644
index 0000000..c14e49c
--- /dev/null
+++ b/backend_theme_v14/views/assets.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ Copyright 2016, 2019 Openworx.
+ @author Mario Gielissen <mario@openworx.nl>
+ License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+-->
+
+<odoo>
+ <data>
+ <template id="assets_backend" name="Openworx Backend Theme" inherit_id="web.assets_backend">
+ <xpath expr=".">
+ <link rel="stylesheet" href="/backend_theme_v14/static/src/scss/colors.scss"/>
+ <link rel="stylesheet" href="/backend_theme_v14/static/src/scss/style.scss"/>
+ <link rel="stylesheet" href="/backend_theme_v14/static/src/scss/sidebar.scss"/>
+ <script type="application/javascript" src="/backend_theme_v14/static/src/js/sidebar.js"/>
+ <script type="application/javascript" src="/backend_theme_v14/static/src/js/sidebar-toggle.js"/>
+ </xpath>
+ </template>
+ </data>
+</odoo>
diff --git a/backend_theme_v14/views/res_company_view.xml b/backend_theme_v14/views/res_company_view.xml
new file mode 100644
index 0000000..1c870c2
--- /dev/null
+++ b/backend_theme_v14/views/res_company_view.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="res_company_form" model="ir.ui.view">
+ <field name="name">res.company.form</field>
+ <field name="model">res.company</field>
+ <field name="inherit_id" ref="base.view_company_form" />
+ <field name="arch" type="xml">
+ <xpath expr="//notebook" position="inside">
+ <page name="background" string="Apps Dashboard">
+ <group name="dashboard_settings">
+ <field name="dashboard_background" widget="image" class="oe_avatar"/>
+ </group>
+ </page>
+ </xpath>
+ </field>
+ </record>
+</odoo> \ No newline at end of file
diff --git a/backend_theme_v14/views/sidebar.xml b/backend_theme_v14/views/sidebar.xml
new file mode 100644
index 0000000..0fa35dd
--- /dev/null
+++ b/backend_theme_v14/views/sidebar.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ Copyright 2016, 2019 Openworx.
+ @author Mario Gielissen <mario@openworx.nl>
+ License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+-->
+
+<odoo>
+ <template id="app_sidebar" inherit_id="web.webclient_bootstrap" name="Apps Sidebar">
+ <xpath expr="//t[@t-set='body_classname']" position="after">
+ <div id="app-sidebar" class="app-sidebar-panel">
+<!-- <div class="app-sidebar navbar-collapse collapse"> -->
+ <div class="app-sidebar">
+ <ul id="sidebar" class="app-sidebar-menu">
+ <li class="nav-item" t-as="menu" t-foreach="menu_data['children']" >
+ <t t-set="debug_param" t-value="''"/>
+ <a t-att-href="'/web%s#menu_id=%s&amp;action=' % (debug_param, menu['id'])"
+ t-att-class="'nav-link nav-toggle' if menu.get('children') else 'nav-link '"
+ t-att-data-menu="menu['id']"
+ t-att-data-menu-xmlid="menu.get('xmlid')"
+ t-att-data-action-model="menu['action'] and menu['action'].split(',')[0] or None"
+ t-att-data-action-id="menu['action'] and menu['action'].split(',')[1] or None">
+ <img t-attf-src="/web/image/ir.ui.menu/{{ menu['id'] }}/web_icon_data" t-att-alt="menu['name']" class="app-sidebar-menuitem" t-att-title="menu['name']"/>
+ <span class="title" >
+ <t t-esc="menu['name']"/>
+ </span>
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </xpath>
+ </template>
+</odoo>
diff --git a/backend_theme_v14/views/users.xml b/backend_theme_v14/views/users.xml
new file mode 100644
index 0000000..7445e4c
--- /dev/null
+++ b/backend_theme_v14/views/users.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="res_users_preferences" model="ir.ui.view">
+ <field name="name">res.users.preferences</field>
+ <field name="model">res.users</field>
+ <field name="inherit_id" ref="base.view_users_form_simple_modif" />
+ <field name="arch" type="xml">
+ <xpath expr="//group[last()]" position="after">
+ <group name="App Sidebar">
+ <field name="sidebar_visible" readonly="0"/>
+ </group>
+ </xpath>
+ </field>
+ </record>
+</odoo>