diff --git a/sf_dlm/models/product_template.py b/sf_dlm/models/product_template.py new file mode 100644 index 00000000..1e37be2b --- /dev/null +++ b/sf_dlm/models/product_template.py @@ -0,0 +1,292 @@ +from odoo import models, fields +import logging +import base64 + + +class ResProductTemplate(models.Model): + _inherit = 'product.template' + + # 模型的长,宽,高,体积,精度,材料 + model_name = fields.Char('模型名称') + categ_type = fields.Selection( + [("成品", "成品"), ("胚料", "胚料"), ("原材料", "原材料")], string='产品的类别', related='categ_id.type', store=True) + model_long = fields.Float('模型长[mm]', digits=(16, 3)) + model_width = fields.Float('模型宽[mm]', digits=(16, 3)) + model_height = fields.Float('模型高[mm]', digits=(16, 3)) + model_volume = fields.Float('模型体积[m³]') + model_machining_precision = fields.Selection([ + ('0.10', '±0.10mm'), + ('0.05', '±0.05mm'), + ('0.03', '±0.03mm'), + ('0.02', '±0.02mm'), + ('0.01', '±0.01mm')], string='加工精度') + product_model_type_id = fields.Many2one('sf.model.type', string='产品模型类型') + embryo_model_type_id = fields.Many2one('sf.model.type', string='胚料模型类型') + model_processing_panel = fields.Char('模型加工面板') + model_surface_process_id = fields.Many2one('sf.production.process', string='表面工艺') + model_process_parameters_id = fields.Many2one('sf.processing.technology', string='工艺参数') + # model_price = fields.Float('模型单价', digits=(16, 3)) + model_remark = fields.Char('模型备注说明') + length = fields.Float('长[mm]', digits=(16, 3)) + width = fields.Float('宽[mm]', digits=(16, 3)) + height = fields.Float('高[mm]', digits=(16, 3)) + materials_id = fields.Many2one('sf.production.materials', string='材料') + materials_type_id = fields.Many2one('sf.materials.model', string='材料型号') + single_manufacturing = fields.Boolean(string="单个制造") + upload_model_file = fields.Many2many('ir.attachment', 'upload_model_file_attachment_ref', string='上传模型文件') + model_code = fields.Char('模型编码') + is_bfm = fields.Boolean('业务平台是否自动创建', default=False) + + def _get_volume_uom_id_from_ir_config_parameter(self): + product_length_in_feet_param = self.env['ir.config_parameter'].sudo().get_param('product.volume_in_cubic_feet') + if product_length_in_feet_param == '1': + return self.env.ref('uom.product_uom_cubic_foot') + else: + return self.env.ref('sf_dlm.product_uom_cubic_millimeter') + + # model_file = fields.Binary('模型文件') + + # 胚料的库存路线设置 + # def _get_routes(self, route_type): + # route_manufacture = self.env.ref('mrp.route_warehouse0_manufacture', raise_if_not_found=False).sudo() + # route_mto = self.env.ref('stock.route_warehouse0_mto', raise_if_not_found=False).sudo() + # route_purchase = self.env.ref('purchase_stock.route_warehouse0_buy', raise_if_not_found=False).sudo() + # if route_manufacture and route_mto: + # # 外协 + # if route_type == 'subcontract': + # route_subcontract = self.env.ref('mrp_subcontracting.route_resupply_subcontractor_mto', + # raise_if_not_found=False).sudo() + # return [route_mto.id, route_purchase.id, route_subcontract.id] + # elif route_type == 'purchase': + # # 采购 + # return [route_mto.id, route_purchase.id] + # else: + # return [route_mto.id, route_manufacture.id] + # return [] + + # route_ids = fields.Many2many(default=lambda self: self._get_route()) + + # 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品 + def product_create(self, product_id, item, order_id, order_number, i): + copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy() + copy_product_id.product_tmpl_id.active = True + model_type = self.env['sf.model.type'].search([], limit=1) + attachment = self.attachment_create(item['model_name'], item['model_data']) + vals = { + 'name': '%s-%s-%s' % ('P', order_id.name, i), + 'model_long': item['model_long'] + model_type.embryo_tolerance, + 'model_width': item['model_width'] + model_type.embryo_tolerance, + 'model_height': item['model_height'] + model_type.embryo_tolerance, + 'model_volume': (item['model_long'] + model_type.embryo_tolerance) * ( + item['model_width'] + model_type.embryo_tolerance) * ( + item['model_height'] + model_type.embryo_tolerance), + 'product_model_type_id': model_type.id, + 'model_processing_panel': 'R', + 'model_machining_precision': item['model_machining_precision'], + 'model_code': item['barcode'], + 'length': item['model_long'], + 'width': item['model_width'], + 'height': item['model_height'], + 'volume': item['model_long'] * item['model_width'] * item['model_height'], + 'model_file': '' if not item['model_file'] else base64.b64decode(item['model_file']), + 'model_name': attachment.name, + 'upload_model_file': [(6, 0, [attachment.id])], + # 'single_manufacturing': True, + # 'tracking': 'serial', + 'list_price': item['price'], + # 'categ_id': self.env.ref('sf_dlm.product_category_finished_sf').id, + 'materials_id': self.env['sf.production.materials'].search( + [('materials_no', '=', item['texture_code'])]).id, + 'materials_type_id': self.env['sf.materials.model'].search( + [('materials_no', '=', item['texture_type_code'])]).id, + 'model_surface_process_id': self.env['sf.production.process'].search( + [('process_encode', '=', item['surface_process_code'])]).id, + # 'model_process_parameters_id': self.env['sf.processing.technology'].search( + # [('process_encode', '=', item['process_parameters_code'])]).id, + 'model_remark': item['remark'], + 'default_code': '%s-%s' % (order_number, i), + # 'barcode': item['barcode'], + 'active': True, + # 'route_ids': self._get_routes('') + } + copy_product_id.sudo().write(vals) + # product_id.product_tmpl_id.active = False + return copy_product_id + + def attachment_create(self, name, data): + attachment = self.env['ir.attachment'].create({ + 'datas': base64.b64decode(data), + 'type': 'binary', + 'public': True, + 'description': '模型文件', + 'name': name + }) + return attachment + + # 创建胚料 + def no_bom_product_create(self, product_id, item, order_id, route_type, i): + no_bom_copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy() + no_bom_copy_product_id.product_tmpl_id.active = True + materials_id = self.env['sf.production.materials'].search( + [('materials_no', '=', item['texture_code'])]) + materials_type_id = self.env['sf.materials.model'].search( + [('materials_no', '=', item['texture_type_code'])]) + model_type = self.env['sf.model.type'].search([], limit=1) + supplier = self.env['mrp.bom'].get_supplier(materials_type_id) + logging.info('no_bom_copy_product_supplier-vals:%s' % supplier) + vals = { + 'name': '%s-%s-%s [%s %s-%s * %s * %s]' % ('R', + order_id.name, i, materials_id.name, materials_type_id.name, + item['model_long'] + model_type.embryo_tolerance, + item['model_width'] + model_type.embryo_tolerance, + item['model_height'] + model_type.embryo_tolerance), + 'length': item['model_long'] + model_type.embryo_tolerance, + 'width': item['model_width'] + model_type.embryo_tolerance, + 'height': item['model_height'] + model_type.embryo_tolerance, + 'volume': (item['model_long'] + model_type.embryo_tolerance) * ( + item['model_width'] + model_type.embryo_tolerance) * ( + item['model_height'] + model_type.embryo_tolerance), + 'embryo_model_type_id': model_type.id, + 'list_price': item['price'], + 'materials_id': materials_id.id, + 'materials_type_id': materials_type_id.id, + 'is_bfm': True, + # 'route_ids': self._get_routes(route_type), + # 'categ_id': self.env.ref('sf_dlm.product_category_embryo_sf').id, + # 'model_surface_process_id': self.env['sf.production.process'].search( + # [('process_encode', '=', item['surface_process_code'])]).id, + # 'model_process_parameters_id': self.env['sf.processing.technology'].search( + # [('process_encode', '=', item['process_parameters_code'])]).id, + 'active': True + } + # 外协和采购生成的胚料需要根据材料型号绑定供应商 + if route_type == 'subcontract' or route_type == 'purchase': + no_bom_copy_product_id.purchase_ok = True + no_bom_copy_product_id.seller_ids = [ + (0, 0, {'partner_id': supplier.partner_id.id, 'delay': 1.0})] + if route_type == 'subcontract': + partner = self.env['res.partner'].search([('id', '=', supplier.partner_id.id)]) + partner.is_subcontractor = True + no_bom_copy_product_id.write(vals) + logging.info('no_bom_copy_product_id-vals:%s' % vals) + # product_id.product_tmpl_id.active = False + return no_bom_copy_product_id + + # @api.onchange('upload_model_file') + # def onchange_model_file(self): + # for item in self: + # if len(item.upload_model_file) > 1: + # raise ValidationError('只允许上传一个文件') + # if item.upload_model_file: + # file_attachment_id = item.upload_model_file[0] + # item.model_name = file_attachment_id.name + # # 附件路径 + # report_path = file_attachment_id._full_path(file_attachment_id.store_fname) + # shapes = read_step_file(report_path) + # output_file = get_resource_path('sf_dlm', 'static/file', 'out.stl') + # write_stl_file(shapes, output_file, 'binary', 0.03, 0.5) + # # 转化为glb + # output_glb_file = get_resource_path('sf_dlm', 'static/file', 'out.glb') + # util_path = get_resource_path('sf_dlm', 'static/util') + # cmd = 'python %s/stl2gltf.py %s %s -b' % (util_path, output_file, output_glb_file) + # os.system(cmd) + # # 转base64 + # with open(output_glb_file, 'rb') as fileObj: + # image_data = fileObj.read() + # base64_data = base64.b64encode(image_data) + # item.model_file = base64_data + + +class ResMrpBom(models.Model): + _inherit = 'mrp.bom' + + subcontractor_id = fields.Many2one('res.partner', string='外包商') + + def bom_create_line_has(self, embryo): + vals = { + 'bom_id': self.id, + 'product_id': embryo.id, + 'product_tmpl_id': embryo.product_tmpl_id.id, + 'product_qty': 1, + 'product_uom_id': 1 + } + return self.env['mrp.bom.line'].create(vals) + + # 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品后再次进行创建bom + def bom_create(self, product, bom_type, product_type): + bom_id = self.env['mrp.bom'].create({ + 'product_tmpl_id': product.product_tmpl_id.id, + 'type': bom_type, + # 'subcontractor_id': '' or subcontract.partner_id.id, + 'product_qty': 1, + 'product_uom_id': 1 + }) + if bom_type == 'subcontract' and product_type is not False: + subcontract = self.get_supplier(product.materials_type_id) + bom_id.subcontractor_id = subcontract.partner_id.id + return bom_id + + # 胚料BOM组件:选取当前胚料原材料, + # 然后根据当前的胚料的体积得出需要的原材料重量(立方米m³) *材料密度 * 1000 = 所需原材料重量KG(公斤) + # 胚料所需原材料公式:当前的胚料的体积(立方米m³) *材料密度 * 1000 = 所需原材料重量KG(公斤) + def bom_create_line(self, embryo): + # 选取当前胚料原材料 + raw_bom_line = self.get_raw_bom(embryo) + if raw_bom_line: + bom_line = self.env['mrp.bom.line'].create({ + 'bom_id': self.id, + 'product_id': raw_bom_line.id, + 'product_tmpl_id': raw_bom_line.product_tmpl_id.id, + 'product_qty': round(embryo.volume * raw_bom_line.materials_type_id.density / 1000000), + 'product_uom_id': raw_bom_line.uom_id.id, + }) + return bom_line + else: + return False + + # 查询材料型号默认排第一的供应商 + def get_supplier(self, materials_type): + seller_id = self.env['sf.supplier.sort'].search( + [('materials_model_id', '=', materials_type.id)], + limit=1, + order='sequence asc') + return seller_id + + # 匹配bom + def get_bom(self, product): + embryo_has = self.env['product.product'].search( + [('categ_id.type', '=', '胚料'), ('materials_type_id', '=', product.materials_type_id.id), + ('length', '>', product.length), ('width', '>', product.width), + ('height', '>', product.height), ('is_bfm', '=', False) + ], + limit=1, + order='volume desc' + ) + logging.info('get_bom-vals:%s' % embryo_has) + if embryo_has: + rate_of_waste = ((embryo_has.volume - product.model_volume) % embryo_has.volume) * 100 + if rate_of_waste <= 20: + return embryo_has + else: + return + + # 查bom的原材料 + def get_raw_bom(self, product): + raw_bom = self.env['product.product'].search( + [('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)]) + return raw_bom + + +class ResProductCategory(models.Model): + _inherit = "product.category" + + type = fields.Selection( + [("成品", "成品"), ("胚料", "胚料"), ("原材料", "原材料")], + default="", string="类型") + + # @api.constrains('type') + # def _check_type(self): + # category = self.env['product.category'].search( + # [('type', '=', self.type)]) + # if category: + # raise ValidationError("该类别已存在,请选择其他类别") diff --git a/sf_dlm/models/product_workorder.py b/sf_dlm/models/product_workorder.py new file mode 100644 index 00000000..eafa3175 --- /dev/null +++ b/sf_dlm/models/product_workorder.py @@ -0,0 +1,13 @@ +from odoo import api, fields, models + + + +class ResMrpWorkOrder(models.Model): + _inherit = 'mrp.workorder' + _order = 'sequence' + + product_tmpl_id_length = fields.Float(related='production_id.product_tmpl_id.length', readonly=True, store=True, check_company=True, string="胚料长度(mm)") + product_tmpl_id_width = fields.Float(related='production_id.product_tmpl_id.width', readonly=True, store=True, check_company=True, string="胚料宽度(mm)") + product_tmpl_id_height = fields.Float(related='production_id.product_tmpl_id.height', readonly=True, store=True, check_company=True, string="胚料高度(mm)") + product_tmpl_id_materials_id = fields.Many2one(related='production_id.product_tmpl_id.materials_id', readonly=True, store=True, check_company=True, string="材料") + product_tmpl_id_materials_type_id = fields.Many2one(related='production_id.product_tmpl_id.materials_type_id', readonly=True, store=True, check_company=True, string="型号") diff --git a/sf_dlm/static/file/out.glb b/sf_dlm/static/file/out.glb new file mode 100644 index 00000000..c4a6352b Binary files /dev/null and b/sf_dlm/static/file/out.glb differ diff --git a/sf_dlm/static/file/out.stl b/sf_dlm/static/file/out.stl new file mode 100644 index 00000000..4f8b834a Binary files /dev/null and b/sf_dlm/static/file/out.stl differ diff --git a/sf_dlm/static/util/stl2gltf.py b/sf_dlm/static/util/stl2gltf.py new file mode 100644 index 00000000..1bdcc942 --- /dev/null +++ b/sf_dlm/static/util/stl2gltf.py @@ -0,0 +1,277 @@ +import os + +def stl_to_gltf(binary_stl_path, out_path, is_binary): + import struct + + gltf2 = ''' +{ + "scenes" : [ + { + "nodes" : [ 0 ] + } + ], + "nodes" : [ + { + "mesh" : 0 + } + ], + "meshes" : [ + { + "primitives" : [ { + "attributes" : { + "POSITION" : 1 + }, + "indices" : 0 + } ] + } + ], + "buffers" : [ + { + %s + "byteLength" : %d + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteOffset" : 0, + "byteLength" : %d, + "target" : 34963 + }, + { + "buffer" : 0, + "byteOffset" : %d, + "byteLength" : %d, + "target" : 34962 + } + ], + "accessors" : [ + { + "bufferView" : 0, + "byteOffset" : 0, + "componentType" : 5125, + "count" : %d, + "type" : "SCALAR", + "max" : [ %d ], + "min" : [ 0 ] + }, + { + "bufferView" : 1, + "byteOffset" : 0, + "componentType" : 5126, + "count" : %d, + "type" : "VEC3", + "min" : [%f, %f, %f], + "max" : [%f, %f, %f] + } + ], + "asset" : { + "version" : "2.0" + } +} +''' + + header_bytes = 80 + unsigned_long_int_bytes = 4 + float_bytes = 4 + vec3_bytes = 4 * 3 + spacer_bytes = 2 + num_vertices_in_face = 3 + + vertices = {} + indices = [] + + if not is_binary: + out_bin = os.path.join(out_path, "out.bin") + out_gltf = os.path.join(out_path, "out.gltf") + else: + out_bin = out_path + + unpack_face = struct.Struct("<12fH").unpack + face_bytes = float_bytes*12 + 2 + + with open(path_to_stl, "rb") as f: + f.seek(header_bytes) # skip 80 bytes headers + + num_faces_bytes = f.read(unsigned_long_int_bytes) + number_faces = struct.unpack(" maxx: maxx = x + if y < miny: miny = y + if y > maxy: maxy = y + if z < minz: minz = z + if z > maxz: maxz = z + + # f.seek(spacer_bytes, 1) # skip the spacer + + number_vertices = len(vertices) + vertices_bytelength = number_vertices * vec3_bytes # each vec3 has 3 floats, each float is 4 bytes + unpadded_indices_bytelength = number_vertices * unsigned_long_int_bytes + + out_number_vertices = len(vertices) + out_number_indices = len(indices) + + unpadded_indices_bytelength = out_number_indices * unsigned_long_int_bytes + indices_bytelength = (unpadded_indices_bytelength + 3) & ~3 + + out_bin_bytelength = vertices_bytelength + indices_bytelength + + if is_binary: + out_bin_uir = "" + else: + out_bin_uir = '"uri": "out.bin",' + + gltf2 = gltf2 % ( out_bin_uir, + #buffer + out_bin_bytelength, + + # bufferViews[0] + indices_bytelength, + + # bufferViews[1] + indices_bytelength, + vertices_bytelength, + + # accessors[0] + out_number_indices, + out_number_vertices - 1, + + # accessors[1] + out_number_vertices, + minx, miny, minz, + maxx, maxy, maxz + ) + + glb_out = bytearray() + if is_binary: + gltf2 = gltf2.replace(" ", "") + gltf2 = gltf2.replace("\n", "") + + scene = bytearray(gltf2.encode()) + + scene_len = len(scene) + padded_scene_len = (scene_len + 3) & ~3 + body_offset = padded_scene_len + 12 + 8 + + file_len = body_offset + out_bin_bytelength + 8 + + # 12-byte header + glb_out.extend(struct.pack(' 3: + is_binary = True + else: + is_binary = False + + if out_path.lower().endswith(".glb"): + print("Use binary mode since output file has glb extension") + is_binary = True + else: + if is_binary: + print("output file should have glb extension but not %s", out_path) + + if not os.path.exists(path_to_stl): + print("stl file does not exists %s" % path_to_stl) + + if not is_binary: + if not os.path.isdir(out_path): + os.mkdir(out_path) + + stl_to_gltf(path_to_stl, out_path, is_binary) \ No newline at end of file diff --git a/sf_dlm/views/product_workorder.xml b/sf_dlm/views/product_workorder.xml new file mode 100644 index 00000000..4c5f2a10 --- /dev/null +++ b/sf_dlm/views/product_workorder.xml @@ -0,0 +1,27 @@ + + + + production.workorder.dlm + mrp.workorder + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_machine_connect/static/src/js/test.js b/sf_machine_connect/static/src/js/test.js new file mode 100644 index 00000000..1f1c1d58 --- /dev/null +++ b/sf_machine_connect/static/src/js/test.js @@ -0,0 +1,82 @@ +/** @odoo-module **/ + +import { browser } from "@web/core/browser/browser"; +import { Dialog } from "@web/core/dialog/dialog"; +import { _lt } from "@web/core/l10n/translation"; +import { useChildRef, useOwnedDialogs, useService } from "@web/core/utils/hooks"; +import { sprintf } from "@web/core/utils/strings"; +import { isMobileOS } from "@web/core/browser/feature_detection"; +import * as BarcodeScanner from "@web/webclient/barcode/barcode_scanner"; + +const {xml, Component} = owl; +import { standardFieldProps } from "@web/views/fields/standard_field_props"; +// Import the registry +import {registry} from "@web/core/registry"; + + +export class CodeField extends Component { + setup() { + super.setup(); + } + async onBarcodeBtnClick() { + const barcode = await BarcodeScanner.scanBarcode(); + if (barcode) { + await this.onBarcodeScanned(barcode); + if ("vibrate" in browser.navigator) { + browser.navigator.vibrate(100); + } + } else { + this.notification.add(this.env._t("Please, scan again !"), { + type: "warning", + }); + } + } + async search(barcode) { + const results = await this.orm.call("sf.tray", "name_search", [code], { + name: barcode, + args: this.getDomain(), + operator: "ilike", + limit: 2, // If one result we set directly and if more than one we use normal flow so no need to search more + context: this.context, + }); + return results.map((result) => { + const [id, displayName] = result; + return { + id, + name: displayName, + }; + }); + } + async onBarcodeScanned(barcode) { + const results = await this.search(barcode); + const records = results.filter((r) => !!r.id); + if (records.length === 1) { + this.update([{ id: records[0].id, name: records[0].name }]); + } else { + const searchInput = this.autocompleteContainerRef.el.querySelector("input"); + searchInput.value = barcode; + searchInput.dispatchEvent(new Event("input")); + if (this.env.isSmall) { + searchInput.click(); + } + } + } +} + +CodeField.template = xml` + + + + + + + + + + + + + + maintenance.request.view.form.inherit.mrp + maintenance.request + + + + + + + + + + +
+
+
+
+
+ + ['|', (not workorder_id and 1 or 0, '=', 1), '|', ('workcenter_id', '=', + False), ('workcenter_id.order_ids', 'in', workorder_id)] + + +
+
+ + + maintenence.request.view.search.inherit.mrp + maintenance.request + + + + + + + + + + + + + diff --git a/sf_manufacturing/views/tray_view.xml b/sf_manufacturing/views/tray_view.xml new file mode 100644 index 00000000..869b9843 --- /dev/null +++ b/sf_manufacturing/views/tray_view.xml @@ -0,0 +1,31 @@ + + + + + 托盘条形码生成 + sf.tray + + + + + + + + + + +
+
+ +
+ +
+
+
+
+
+
\ No newline at end of file diff --git a/vista_backend_theme/__init__.py b/vista_backend_theme/__init__.py new file mode 100644 index 00000000..0e0b6dfa --- /dev/null +++ b/vista_backend_theme/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from .hooks import test_pre_init_hook, test_post_init_hook +from . import wizard +from . import models + diff --git a/vista_backend_theme/__manifest__.py b/vista_backend_theme/__manifest__.py new file mode 100644 index 00000000..8582050b --- /dev/null +++ b/vista_backend_theme/__manifest__.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +{ + "name": "Vista Backend Theme V16", + "description": """Minimalist and elegant backend theme for Odoo 16, Backend Theme, Theme""", + "summary": "Vista Backend Theme V16 is an attractive theme for backend", + "category": "Themes/Backend", + "version": "16.0.1.0.0", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + "depends": ['base', 'web', 'mail', 'base_setup'], + "data": [ + 'security/ir.model.access.csv', + 'views/icons.xml', + 'views/layout.xml', + 'views/theme.xml', + 'views/assets.xml', + 'data/theme_data.xml', + 'views/res_config.xml', + ], + 'assets': { + 'web.assets_backend': { + '/vista_backend_theme/static/src/scss/theme.scss', + '/vista_backend_theme/static/src/js/systray.js', + '/vista_backend_theme/static/src/js/load.js', + '/vista_backend_theme/static/src/js/chrome/sidebar_menu.js', + '/vista_backend_theme/static/src/xml/systray.xml', + '/vista_backend_theme/static/src/xml/top_bar.xml', + '/vista_backend_theme/static/src/js/web_window_title.js', + }, + 'web.assets_frontend': { + '/vista_backend_theme/static/src/scss/login.scss', + '/vista_backend_theme/static/src/scss/login.scss', + + }, + }, + 'images': [ + 'static/description/banner.png', + 'static/description/theme_screenshot.png', + 'static/description/main_screenshot.png', + ], + 'license': 'LGPL-3', + 'pre_init_hook': 'test_pre_init_hook', + 'post_init_hook': 'test_post_init_hook', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/vista_backend_theme/data/demo.xml b/vista_backend_theme/data/demo.xml new file mode 100644 index 00000000..937ce77e --- /dev/null +++ b/vista_backend_theme/data/demo.xml @@ -0,0 +1,11 @@ + + + + + + web.base.title + Demo + + + + \ No newline at end of file diff --git a/vista_backend_theme/data/theme_data.xml b/vista_backend_theme/data/theme_data.xml new file mode 100644 index 00000000..1b0f85d2 --- /dev/null +++ b/vista_backend_theme/data/theme_data.xml @@ -0,0 +1,8 @@ + + + + + default + + + diff --git a/vista_backend_theme/hooks.py b/vista_backend_theme/hooks.py new file mode 100644 index 00000000..b091628e --- /dev/null +++ b/vista_backend_theme/hooks.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import base64 + +from odoo import api, SUPERUSER_ID +from odoo.modules import get_module_resource + + +def test_pre_init_hook(cr): + """pre init hook""" + + env = api.Environment(cr, SUPERUSER_ID, {}) + menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)]) + + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'contacts.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'link-tracker.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'dashboards.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'sales.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Invoicing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'accounting.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'inventory.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'purchase.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'calendar.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'crm.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Note': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'note.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'website.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'pos.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'manufacturing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'repairs.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'email-marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'sms-marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'project.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'surveys.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'employee.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'recruitment.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'attendances.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'timeoff.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'expenses.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'maintenance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'live-chat.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'lunch.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'fleet.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'timesheets.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'events.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'elearning.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', 'members.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + + +def test_post_init_hook(cr, registry): + """post init hook""" + env = api.Environment(cr, SUPERUSER_ID, {}) diff --git a/vista_backend_theme/models/__init__.py b/vista_backend_theme/models/__init__.py new file mode 100644 index 00000000..b4db3f9a --- /dev/null +++ b/vista_backend_theme/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import ir_ui_view +from . import res_config diff --git a/vista_backend_theme/models/ir_ui_view.py b/vista_backend_theme/models/ir_ui_view.py new file mode 100644 index 00000000..633dbc95 --- /dev/null +++ b/vista_backend_theme/models/ir_ui_view.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +import logging + +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + +class View(models.Model): + _inherit = 'ir.ui.view' + + @api.model + def _render_template(self, template, values=None): + if template in ['web.login', 'web.webclient_bootstrap']: + if not values: + values = {} + values["title"] = self.env['ir.config_parameter'].sudo().get_param("web.base.title", "") + return super(View, self)._render_template(template, values) diff --git a/vista_backend_theme/models/res_config.py b/vista_backend_theme/models/res_config.py new file mode 100644 index 00000000..dcacb5de --- /dev/null +++ b/vista_backend_theme/models/res_config.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +import logging + +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + +CONFIG_PARAM_WEB_WINDOW_TITLE = "web.base.title" + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + web_window_title = fields.Char('Window Title') + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + ir_config = self.env['ir.config_parameter'].sudo() + web_window_title = ir_config.get_param(CONFIG_PARAM_WEB_WINDOW_TITLE, default='') + res.update( + web_window_title=web_window_title + ) + return res + + def set_values(self): + super(ResConfigSettings, self).set_values() + ir_config = self.env['ir.config_parameter'].sudo() + ir_config.set_param(CONFIG_PARAM_WEB_WINDOW_TITLE, self.web_window_title or "") diff --git a/vista_backend_theme/security/ir.model.access.csv b/vista_backend_theme/security/ir.model.access.csv new file mode 100644 index 00000000..8e9ee184 --- /dev/null +++ b/vista_backend_theme/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_theme_data,access.theme.data,model_theme_data,,1,1,1,1 diff --git a/vista_backend_theme/static/description/assets/icons/chevron.png b/vista_backend_theme/static/description/assets/icons/chevron.png new file mode 100644 index 00000000..2089293d Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/chevron.png differ diff --git a/vista_backend_theme/static/description/assets/icons/cogs.png b/vista_backend_theme/static/description/assets/icons/cogs.png new file mode 100644 index 00000000..95d0bad6 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/cogs.png differ diff --git a/vista_backend_theme/static/description/assets/icons/consultation.png b/vista_backend_theme/static/description/assets/icons/consultation.png new file mode 100644 index 00000000..8319d4ba Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/consultation.png differ diff --git a/vista_backend_theme/static/description/assets/icons/ecom-black.png b/vista_backend_theme/static/description/assets/icons/ecom-black.png new file mode 100644 index 00000000..a9385ff1 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/ecom-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/education-black.png b/vista_backend_theme/static/description/assets/icons/education-black.png new file mode 100644 index 00000000..3eb09b27 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/education-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/hotel-black.png b/vista_backend_theme/static/description/assets/icons/hotel-black.png new file mode 100644 index 00000000..130f613b Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/hotel-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/license.png b/vista_backend_theme/static/description/assets/icons/license.png new file mode 100644 index 00000000..a5869797 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/license.png differ diff --git a/vista_backend_theme/static/description/assets/icons/lifebuoy.png b/vista_backend_theme/static/description/assets/icons/lifebuoy.png new file mode 100644 index 00000000..658d56cc Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/lifebuoy.png differ diff --git a/vista_backend_theme/static/description/assets/icons/manufacturing-black.png b/vista_backend_theme/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 00000000..697eb0e9 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/manufacturing-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/pos-black.png b/vista_backend_theme/static/description/assets/icons/pos-black.png new file mode 100644 index 00000000..97c0f90c Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/pos-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/puzzle.png b/vista_backend_theme/static/description/assets/icons/puzzle.png new file mode 100644 index 00000000..65cf854e Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/puzzle.png differ diff --git a/vista_backend_theme/static/description/assets/icons/restaurant-black.png b/vista_backend_theme/static/description/assets/icons/restaurant-black.png new file mode 100644 index 00000000..4a35eb93 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/restaurant-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/service-black.png b/vista_backend_theme/static/description/assets/icons/service-black.png new file mode 100644 index 00000000..301ab51c Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/service-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/trading-black.png b/vista_backend_theme/static/description/assets/icons/trading-black.png new file mode 100644 index 00000000..9398ba2f Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/trading-black.png differ diff --git a/vista_backend_theme/static/description/assets/icons/training.png b/vista_backend_theme/static/description/assets/icons/training.png new file mode 100644 index 00000000..884ca024 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/training.png differ diff --git a/vista_backend_theme/static/description/assets/icons/update.png b/vista_backend_theme/static/description/assets/icons/update.png new file mode 100644 index 00000000..ecbc5a01 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/update.png differ diff --git a/vista_backend_theme/static/description/assets/icons/user.png b/vista_backend_theme/static/description/assets/icons/user.png new file mode 100644 index 00000000..6ffb23d9 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/user.png differ diff --git a/vista_backend_theme/static/description/assets/icons/wrench.png b/vista_backend_theme/static/description/assets/icons/wrench.png new file mode 100644 index 00000000..6c04dea0 Binary files /dev/null and b/vista_backend_theme/static/description/assets/icons/wrench.png differ diff --git a/vista_backend_theme/static/description/banner.png b/vista_backend_theme/static/description/banner.png new file mode 100644 index 00000000..ee5ab0d2 Binary files /dev/null and b/vista_backend_theme/static/description/banner.png differ diff --git a/vista_backend_theme/static/description/icon.png b/vista_backend_theme/static/description/icon.png new file mode 100644 index 00000000..69b4507f Binary files /dev/null and b/vista_backend_theme/static/description/icon.png differ diff --git a/vista_backend_theme/static/description/images/app_drawer.png b/vista_backend_theme/static/description/images/app_drawer.png new file mode 100644 index 00000000..273ecd73 Binary files /dev/null and b/vista_backend_theme/static/description/images/app_drawer.png differ diff --git a/vista_backend_theme/static/description/images/custom_date.png b/vista_backend_theme/static/description/images/custom_date.png new file mode 100644 index 00000000..1550395b Binary files /dev/null and b/vista_backend_theme/static/description/images/custom_date.png differ diff --git a/vista_backend_theme/static/description/images/discuss.png b/vista_backend_theme/static/description/images/discuss.png new file mode 100644 index 00000000..51af4628 Binary files /dev/null and b/vista_backend_theme/static/description/images/discuss.png differ diff --git a/vista_backend_theme/static/description/images/discuss_mobile.png b/vista_backend_theme/static/description/images/discuss_mobile.png new file mode 100644 index 00000000..77cc6da6 Binary files /dev/null and b/vista_backend_theme/static/description/images/discuss_mobile.png differ diff --git a/vista_backend_theme/static/description/images/form_view.png b/vista_backend_theme/static/description/images/form_view.png new file mode 100644 index 00000000..f4de53bc Binary files /dev/null and b/vista_backend_theme/static/description/images/form_view.png differ diff --git a/vista_backend_theme/static/description/images/hero.gif b/vista_backend_theme/static/description/images/hero.gif new file mode 100644 index 00000000..56939001 Binary files /dev/null and b/vista_backend_theme/static/description/images/hero.gif differ diff --git a/vista_backend_theme/static/description/images/icons/design.png b/vista_backend_theme/static/description/images/icons/design.png new file mode 100644 index 00000000..f09d096e Binary files /dev/null and b/vista_backend_theme/static/description/images/icons/design.png differ diff --git a/vista_backend_theme/static/description/images/icons/quality.png b/vista_backend_theme/static/description/images/icons/quality.png new file mode 100644 index 00000000..81de174a Binary files /dev/null and b/vista_backend_theme/static/description/images/icons/quality.png differ diff --git a/vista_backend_theme/static/description/images/icons/responsive.png b/vista_backend_theme/static/description/images/icons/responsive.png new file mode 100644 index 00000000..d3cd0869 Binary files /dev/null and b/vista_backend_theme/static/description/images/icons/responsive.png differ diff --git a/vista_backend_theme/static/description/images/kanban.png b/vista_backend_theme/static/description/images/kanban.png new file mode 100644 index 00000000..ecf0f82e Binary files /dev/null and b/vista_backend_theme/static/description/images/kanban.png differ diff --git a/vista_backend_theme/static/description/images/kanban_mobile.png b/vista_backend_theme/static/description/images/kanban_mobile.png new file mode 100644 index 00000000..eef8b831 Binary files /dev/null and b/vista_backend_theme/static/description/images/kanban_mobile.png differ diff --git a/vista_backend_theme/static/description/images/login.png b/vista_backend_theme/static/description/images/login.png new file mode 100644 index 00000000..ab34a37f Binary files /dev/null and b/vista_backend_theme/static/description/images/login.png differ diff --git a/vista_backend_theme/static/description/images/responsive.png b/vista_backend_theme/static/description/images/responsive.png new file mode 100644 index 00000000..e1a91a1c Binary files /dev/null and b/vista_backend_theme/static/description/images/responsive.png differ diff --git a/vista_backend_theme/static/description/images/sale_tree_view.png b/vista_backend_theme/static/description/images/sale_tree_view.png new file mode 100644 index 00000000..80ca1ab6 Binary files /dev/null and b/vista_backend_theme/static/description/images/sale_tree_view.png differ diff --git a/vista_backend_theme/static/description/images/search.png b/vista_backend_theme/static/description/images/search.png new file mode 100644 index 00000000..812a26c4 Binary files /dev/null and b/vista_backend_theme/static/description/images/search.png differ diff --git a/vista_backend_theme/static/description/images/tree_view.png b/vista_backend_theme/static/description/images/tree_view.png new file mode 100644 index 00000000..c0ccf378 Binary files /dev/null and b/vista_backend_theme/static/description/images/tree_view.png differ diff --git a/vista_backend_theme/static/description/index.html b/vista_backend_theme/static/description/index.html new file mode 100644 index 00000000..ee1968de --- /dev/null +++ b/vista_backend_theme/static/description/index.html @@ -0,0 +1,444 @@ + +
+
+
+

Vista Backend Theme V16

+

Multi-Color + & Multi-Design Backend Theme for + Odoo 16

+
+ +
+
+ + +
+
+
+
The app enables a user friendly backend + theme for Odoo 16.0 community edition.
+
+
+
+ + +
+
+
+
+ +
+
Carefully Crafted
+
+ +
+
+ +
+
Responsive Design
+
+ +
+
+ +
+
Quality Checked
+
+
+
+ + + +
+
+
+

Kanban View

+

Kanban view with a clean layout and modified font.

+ +
+
+
+ + + +
+
+
+ Custom + Login +

Minimal, Colorful Login Screen

+

Customized minimal and colorful login screen.

+ +
+ +
+ Colored UI + Elements +

Discuss

+

Discuss page with a different style.

+ +
+ +
+
+ + + +
+
+
+ +
+
+ Responsive + Layout +

Truly Responsive

+

Fully responsive layout which enables to view and manage everything from the + comfort of your mobile device.

+
+
+ +
+ + + +
+
+
+ Responsive + Layout +

Modified App Drawer

+

Modified app drawer which helps to navigate through different applications.

+
+
+ +
+
+
+ + + + +
+
+
+ +
+
+ Colored UI + Elements +

Custom Date Picker

+

Customized date picker

+
+
+ +
+ + + + +
+
+
+ Colored UI + Elements +

Tree View

+

Tree view with a clean layout and modified font.

+ +
+ +
+ Colored UI + Elements +

Form View

+

Form view with a clean layout and modified font.

+ +
+ +
+
+ + + +
+
+
+

+ Our Services

+

+ We provide following services

+
+ +
+
+ +
+
Odoo + Customization
+
+ +
+
+ +
+
Odoo + Implementation
+
+ +
+
+ +
+
Odoo + Support
+
+ + +
+
+ +
+
Hire + Odoo + Developer
+
+ +
+
+ +
+
Odoo + Integration
+
+ +
+
+ +
+
Odoo + Migration
+
+ + +
+
+ +
+
Odoo + Consultancy
+
+ +
+
+ +
+
Odoo + Implementation
+
+ +
+
+ +
+
Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

+ Our Industries

+

+ Our industry specifics and process segments to solve your complex business barriers.

+
+ +
+
+ +
+ Trading +
+

Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

+ Need Help?

+

+ Do you have any queries regarding our products & services? Let us know.

+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ + \ No newline at end of file diff --git a/vista_backend_theme/static/description/main_screenshot.png b/vista_backend_theme/static/description/main_screenshot.png new file mode 100644 index 00000000..fdca2294 Binary files /dev/null and b/vista_backend_theme/static/description/main_screenshot.png differ diff --git a/vista_backend_theme/static/description/theme_screenshot.png b/vista_backend_theme/static/description/theme_screenshot.png new file mode 100644 index 00000000..d79893e7 Binary files /dev/null and b/vista_backend_theme/static/description/theme_screenshot.png differ diff --git a/vista_backend_theme/static/src/img/icons/accounting.png b/vista_backend_theme/static/src/img/icons/accounting.png new file mode 100644 index 00000000..f496ce70 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/accounting.png differ diff --git a/vista_backend_theme/static/src/img/icons/apps.png b/vista_backend_theme/static/src/img/icons/apps.png new file mode 100644 index 00000000..ee8031f2 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/apps.png differ diff --git a/vista_backend_theme/static/src/img/icons/attendance.png b/vista_backend_theme/static/src/img/icons/attendance.png new file mode 100644 index 00000000..86c84cd9 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/attendance.png differ diff --git a/vista_backend_theme/static/src/img/icons/bell.png b/vista_backend_theme/static/src/img/icons/bell.png new file mode 100644 index 00000000..77caa55c Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/bell.png differ diff --git a/vista_backend_theme/static/src/img/icons/calendar.png b/vista_backend_theme/static/src/img/icons/calendar.png new file mode 100644 index 00000000..e07d78c6 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/calendar.png differ diff --git a/vista_backend_theme/static/src/img/icons/contacts.png b/vista_backend_theme/static/src/img/icons/contacts.png new file mode 100644 index 00000000..8582a80b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/contacts.png differ diff --git a/vista_backend_theme/static/src/img/icons/crm.png b/vista_backend_theme/static/src/img/icons/crm.png new file mode 100644 index 00000000..cb305553 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/crm.png differ diff --git a/vista_backend_theme/static/src/img/icons/dashboards.png b/vista_backend_theme/static/src/img/icons/dashboards.png new file mode 100644 index 00000000..12c0769c Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/dashboards.png differ diff --git a/vista_backend_theme/static/src/img/icons/discuss.png b/vista_backend_theme/static/src/img/icons/discuss.png new file mode 100644 index 00000000..8dac1f03 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/discuss.png differ diff --git a/vista_backend_theme/static/src/img/icons/documents.png b/vista_backend_theme/static/src/img/icons/documents.png new file mode 100644 index 00000000..e9146849 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/documents.png differ diff --git a/vista_backend_theme/static/src/img/icons/dots-menu-green.png b/vista_backend_theme/static/src/img/icons/dots-menu-green.png new file mode 100644 index 00000000..c64e6405 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/dots-menu-green.png differ diff --git a/vista_backend_theme/static/src/img/icons/dots-menu-navy.png b/vista_backend_theme/static/src/img/icons/dots-menu-navy.png new file mode 100644 index 00000000..8c97a426 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/dots-menu-navy.png differ diff --git a/vista_backend_theme/static/src/img/icons/dots-menu-primary.png b/vista_backend_theme/static/src/img/icons/dots-menu-primary.png new file mode 100644 index 00000000..527574d6 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/dots-menu-primary.png differ diff --git a/vista_backend_theme/static/src/img/icons/dots-menu.png b/vista_backend_theme/static/src/img/icons/dots-menu.png new file mode 100644 index 00000000..6188bc22 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/dots-menu.png differ diff --git a/vista_backend_theme/static/src/img/icons/dots-menu2.png b/vista_backend_theme/static/src/img/icons/dots-menu2.png new file mode 100644 index 00000000..ebee2b80 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/dots-menu2.png differ diff --git a/vista_backend_theme/static/src/img/icons/elearning.png b/vista_backend_theme/static/src/img/icons/elearning.png new file mode 100644 index 00000000..986fb047 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/elearning.png differ diff --git a/vista_backend_theme/static/src/img/icons/email-marketing.png b/vista_backend_theme/static/src/img/icons/email-marketing.png new file mode 100644 index 00000000..12addfd3 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/email-marketing.png differ diff --git a/vista_backend_theme/static/src/img/icons/employee.png b/vista_backend_theme/static/src/img/icons/employee.png new file mode 100644 index 00000000..6532a023 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/employee.png differ diff --git a/vista_backend_theme/static/src/img/icons/events.png b/vista_backend_theme/static/src/img/icons/events.png new file mode 100644 index 00000000..df607fa4 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/events.png differ diff --git a/vista_backend_theme/static/src/img/icons/expenses.png b/vista_backend_theme/static/src/img/icons/expenses.png new file mode 100644 index 00000000..8df58834 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/expenses.png differ diff --git a/vista_backend_theme/static/src/img/icons/fleet.png b/vista_backend_theme/static/src/img/icons/fleet.png new file mode 100644 index 00000000..a03b1fce Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/fleet.png differ diff --git a/vista_backend_theme/static/src/img/icons/inventory.png b/vista_backend_theme/static/src/img/icons/inventory.png new file mode 100644 index 00000000..b4bb3f4b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/inventory.png differ diff --git a/vista_backend_theme/static/src/img/icons/link-tracker.png b/vista_backend_theme/static/src/img/icons/link-tracker.png new file mode 100644 index 00000000..052f1400 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/link-tracker.png differ diff --git a/vista_backend_theme/static/src/img/icons/live-chat.png b/vista_backend_theme/static/src/img/icons/live-chat.png new file mode 100644 index 00000000..348899bb Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/live-chat.png differ diff --git a/vista_backend_theme/static/src/img/icons/lunch.png b/vista_backend_theme/static/src/img/icons/lunch.png new file mode 100644 index 00000000..60873c82 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/lunch.png differ diff --git a/vista_backend_theme/static/src/img/icons/maintenance.png b/vista_backend_theme/static/src/img/icons/maintenance.png new file mode 100644 index 00000000..1710d800 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/maintenance.png differ diff --git a/vista_backend_theme/static/src/img/icons/manufacturing.png b/vista_backend_theme/static/src/img/icons/manufacturing.png new file mode 100644 index 00000000..c5069247 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/manufacturing.png differ diff --git a/vista_backend_theme/static/src/img/icons/members.png b/vista_backend_theme/static/src/img/icons/members.png new file mode 100644 index 00000000..ce004aab Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/members.png differ diff --git a/vista_backend_theme/static/src/img/icons/notes.png b/vista_backend_theme/static/src/img/icons/notes.png new file mode 100644 index 00000000..5da39fd8 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/notes.png differ diff --git a/vista_backend_theme/static/src/img/icons/planning.png b/vista_backend_theme/static/src/img/icons/planning.png new file mode 100644 index 00000000..5423a12b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/planning.png differ diff --git a/vista_backend_theme/static/src/img/icons/pos.png b/vista_backend_theme/static/src/img/icons/pos.png new file mode 100644 index 00000000..54eb5b20 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/pos.png differ diff --git a/vista_backend_theme/static/src/img/icons/project.png b/vista_backend_theme/static/src/img/icons/project.png new file mode 100644 index 00000000..fa538151 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/project.png differ diff --git a/vista_backend_theme/static/src/img/icons/purchase.png b/vista_backend_theme/static/src/img/icons/purchase.png new file mode 100644 index 00000000..653ae082 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/purchase.png differ diff --git a/vista_backend_theme/static/src/img/icons/recruitment.png b/vista_backend_theme/static/src/img/icons/recruitment.png new file mode 100644 index 00000000..ca680ed5 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/recruitment.png differ diff --git a/vista_backend_theme/static/src/img/icons/repairs.png b/vista_backend_theme/static/src/img/icons/repairs.png new file mode 100644 index 00000000..09b4a593 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/repairs.png differ diff --git a/vista_backend_theme/static/src/img/icons/sales.png b/vista_backend_theme/static/src/img/icons/sales.png new file mode 100644 index 00000000..33551fdb Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/sales.png differ diff --git a/vista_backend_theme/static/src/img/icons/services.png b/vista_backend_theme/static/src/img/icons/services.png new file mode 100644 index 00000000..22e478fa Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/services.png differ diff --git a/vista_backend_theme/static/src/img/icons/settinga.png b/vista_backend_theme/static/src/img/icons/settinga.png new file mode 100644 index 00000000..a458f8e5 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/settinga.png differ diff --git a/vista_backend_theme/static/src/img/icons/sms-marketing.png b/vista_backend_theme/static/src/img/icons/sms-marketing.png new file mode 100644 index 00000000..ef1307d0 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/sms-marketing.png differ diff --git a/vista_backend_theme/static/src/img/icons/speech-bubble.png b/vista_backend_theme/static/src/img/icons/speech-bubble.png new file mode 100644 index 00000000..c00880fb Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/speech-bubble.png differ diff --git a/vista_backend_theme/static/src/img/icons/surveys.png b/vista_backend_theme/static/src/img/icons/surveys.png new file mode 100644 index 00000000..1d6ac982 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/surveys.png differ diff --git a/vista_backend_theme/static/src/img/icons/timeoff.png b/vista_backend_theme/static/src/img/icons/timeoff.png new file mode 100644 index 00000000..3f00454b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/timeoff.png differ diff --git a/vista_backend_theme/static/src/img/icons/timesheet.png b/vista_backend_theme/static/src/img/icons/timesheet.png new file mode 100644 index 00000000..afca506a Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/timesheet.png differ diff --git a/vista_backend_theme/static/src/img/icons/website.png b/vista_backend_theme/static/src/img/icons/website.png new file mode 100644 index 00000000..bbbf0aa8 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons/website.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/accounting.png b/vista_backend_theme/static/src/img/icons_green/accounting.png new file mode 100644 index 00000000..81c046ed Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/accounting.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/apps.png b/vista_backend_theme/static/src/img/icons_green/apps.png new file mode 100644 index 00000000..ab8864a2 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/apps.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/attendance.png b/vista_backend_theme/static/src/img/icons_green/attendance.png new file mode 100644 index 00000000..9ba39c8b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/attendance.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/bell.png b/vista_backend_theme/static/src/img/icons_green/bell.png new file mode 100644 index 00000000..08c167f3 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/bell.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/calendar.png b/vista_backend_theme/static/src/img/icons_green/calendar.png new file mode 100644 index 00000000..06643f6f Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/calendar.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/contacts.png b/vista_backend_theme/static/src/img/icons_green/contacts.png new file mode 100644 index 00000000..56a35088 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/contacts.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/crm.png b/vista_backend_theme/static/src/img/icons_green/crm.png new file mode 100644 index 00000000..a67d78ea Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/crm.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/dashboards.png b/vista_backend_theme/static/src/img/icons_green/dashboards.png new file mode 100644 index 00000000..7b157cd0 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/dashboards.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/discuss.png b/vista_backend_theme/static/src/img/icons_green/discuss.png new file mode 100644 index 00000000..77dc5147 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/discuss.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/documents.png b/vista_backend_theme/static/src/img/icons_green/documents.png new file mode 100644 index 00000000..66332beb Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/documents.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/elearning.png b/vista_backend_theme/static/src/img/icons_green/elearning.png new file mode 100644 index 00000000..3ecf3e47 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/elearning.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/email-marketing.png b/vista_backend_theme/static/src/img/icons_green/email-marketing.png new file mode 100644 index 00000000..e2d9f8f0 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/email-marketing.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/employee.png b/vista_backend_theme/static/src/img/icons_green/employee.png new file mode 100644 index 00000000..f111b0b7 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/employee.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/events.png b/vista_backend_theme/static/src/img/icons_green/events.png new file mode 100644 index 00000000..f6adc69f Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/events.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/expenses.png b/vista_backend_theme/static/src/img/icons_green/expenses.png new file mode 100644 index 00000000..55bea20a Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/expenses.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/fleet.png b/vista_backend_theme/static/src/img/icons_green/fleet.png new file mode 100644 index 00000000..f29df0b1 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/fleet.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/inventory.png b/vista_backend_theme/static/src/img/icons_green/inventory.png new file mode 100644 index 00000000..00966182 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/inventory.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/link-tracker.png b/vista_backend_theme/static/src/img/icons_green/link-tracker.png new file mode 100644 index 00000000..02d1b154 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/link-tracker.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/live-chat.png b/vista_backend_theme/static/src/img/icons_green/live-chat.png new file mode 100644 index 00000000..f87b80f7 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/live-chat.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/lunch.png b/vista_backend_theme/static/src/img/icons_green/lunch.png new file mode 100644 index 00000000..2bee60d5 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/lunch.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/maintenance.png b/vista_backend_theme/static/src/img/icons_green/maintenance.png new file mode 100644 index 00000000..691e3308 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/maintenance.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/manufacturing.png b/vista_backend_theme/static/src/img/icons_green/manufacturing.png new file mode 100644 index 00000000..c3ad4995 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/manufacturing.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/members.png b/vista_backend_theme/static/src/img/icons_green/members.png new file mode 100644 index 00000000..4178f04c Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/members.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/notes.png b/vista_backend_theme/static/src/img/icons_green/notes.png new file mode 100644 index 00000000..7d766c07 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/notes.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/planning.png b/vista_backend_theme/static/src/img/icons_green/planning.png new file mode 100644 index 00000000..6c57ea8b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/planning.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/pos.png b/vista_backend_theme/static/src/img/icons_green/pos.png new file mode 100644 index 00000000..904187a4 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/pos.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/project.png b/vista_backend_theme/static/src/img/icons_green/project.png new file mode 100644 index 00000000..ecf627a3 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/project.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/purchase.png b/vista_backend_theme/static/src/img/icons_green/purchase.png new file mode 100644 index 00000000..4635eec5 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/purchase.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/recruitment.png b/vista_backend_theme/static/src/img/icons_green/recruitment.png new file mode 100644 index 00000000..8faaf128 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/recruitment.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/repairs.png b/vista_backend_theme/static/src/img/icons_green/repairs.png new file mode 100644 index 00000000..89f0ff72 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/repairs.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/sales.png b/vista_backend_theme/static/src/img/icons_green/sales.png new file mode 100644 index 00000000..81164740 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/sales.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/services.png b/vista_backend_theme/static/src/img/icons_green/services.png new file mode 100644 index 00000000..57ad052b Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/services.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/settinga.png b/vista_backend_theme/static/src/img/icons_green/settinga.png new file mode 100644 index 00000000..9dfcc0aa Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/settinga.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/sms-marketing.png b/vista_backend_theme/static/src/img/icons_green/sms-marketing.png new file mode 100644 index 00000000..8ec17575 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/sms-marketing.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/surveys.png b/vista_backend_theme/static/src/img/icons_green/surveys.png new file mode 100644 index 00000000..7fb1cd73 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/surveys.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/timeoff.png b/vista_backend_theme/static/src/img/icons_green/timeoff.png new file mode 100644 index 00000000..1295f82c Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/timeoff.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/timesheet.png b/vista_backend_theme/static/src/img/icons_green/timesheet.png new file mode 100644 index 00000000..3cfc4509 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/timesheet.png differ diff --git a/vista_backend_theme/static/src/img/icons_green/website.png b/vista_backend_theme/static/src/img/icons_green/website.png new file mode 100644 index 00000000..d1bba818 Binary files /dev/null and b/vista_backend_theme/static/src/img/icons_green/website.png differ diff --git a/vista_backend_theme/static/src/js/chrome/sidebar.js b/vista_backend_theme/static/src/js/chrome/sidebar.js new file mode 100644 index 00000000..565f48c3 --- /dev/null +++ b/vista_backend_theme/static/src/js/chrome/sidebar.js @@ -0,0 +1,44 @@ +odoo.define('vista_backend_theme.SideBar', function (require) { + "use strict"; + var Widget = require('web.Widget'); + var SideBar = Widget.extend({ + events: _.extend({}, Widget.prototype.events, { + 'click .nav-link': '_onAppsMenuItemClicked', + }), + template: "vista_backend_theme.Sidebar", + + init: function (parent, menuData) { + this._super.apply(this, arguments); + this._apps = _.map(menuData.children, function (appMenuData) { + return { + actionID: parseInt(appMenuData.action.split(',')[1]), + menuID: appMenuData.id, + name: appMenuData.name, + xmlID: appMenuData.xmlid, + web_icon_data: appMenuData.web_icon_data, + }; + }); + }, + + getApps: function () { + return this._apps; + }, + + _openApp: function (app) { + this.trigger_up('app_clicked', { + action_id: app.actionID, + menu_id: app.menuID, + }); + }, + + _onAppsMenuItemClicked: function (ev) { + var $target = $(ev.currentTarget); + var actionID = $target.data('action-id'); + var menuID = $target.data('menu-id'); + var app = _.findWhere(this._apps, { actionID: actionID, menuID: menuID }); + this._openApp(app); + }, + }); + + return SideBar; +}); \ No newline at end of file diff --git a/vista_backend_theme/static/src/js/chrome/sidebar_menu.js b/vista_backend_theme/static/src/js/chrome/sidebar_menu.js new file mode 100644 index 00000000..fc0f947b --- /dev/null +++ b/vista_backend_theme/static/src/js/chrome/sidebar_menu.js @@ -0,0 +1,107 @@ +odoo.define('code_backend_theme.SidebarMenu', function (require) { + "use strict"; + + //sidebar toggle effect + $(document).on("click", "#closeSidebar", function(event){ + $("#closeSidebar").hide(); + $("#openSidebar").show(); + }); + $(document).on("click", "#openSidebar", function(event){ + $("#openSidebar").hide(); + $("#closeSidebar").show(); + }); + $(document).on("click", "#openSidebar", function(event){ + $("#sidebar_panel").css({'display':'block'}); + $(".o_action_manager").css({'margin-left': '90px','transition':'all .1s linear'}); + $(".top_heading").css({'margin-left': '70px','transition':'all .1s linear'}); + + //add class in navbar + var navbar = $(".o_main_navbar"); + var navbar_id = navbar.data("id"); + $("nav").addClass(navbar_id); + navbar.addClass("small_nav"); + + //add class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").addClass(action_manager_id); + action_manager.addClass("sidebar_margin"); + + //add class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").addClass(top_head_id); + top_head.addClass("sidebar_margin"); + }); + $(document).on("click", "#closeSidebar", function(event){ + $("#sidebar_panel").css({'display':'none'}); + $(".o_action_manager").css({'margin-left': '0px'}); + $(".top_heading").css({'margin-left': '0px'}); + + //remove class in navbar + var navbar = $(".o_main_navbar"); + var navbar_id = navbar.data("id"); + $("nav").removeClass(navbar_id); + navbar.removeClass("small_nav"); + + //remove class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").removeClass(action_manager_id); + action_manager.removeClass("sidebar_margin"); + + //remove class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").removeClass(top_head_id); + top_head.removeClass("sidebar_margin"); + }); + + $(document).on("click", ".sidebar a", function(event){ + var menu = $(".sidebar a"); + var $this = $(this); + var id = $this.data("id"); + $("header").removeClass().addClass(id); + menu.removeClass("active"); + $this.addClass("active"); + + //sidebar close on menu-item click + $("#sidebar_panel").css({'display':'none'}); + $(".o_action_manager").css({'margin-left': '0px'}); + $(".top_heading").css({'margin-left': '0px'}); + $("#closeSidebar").hide(); + $("#openSidebar").show(); + + //remove class in navbar + var navbar = $(".o_main_navbar"); + var navbar_id = navbar.data("id"); + $("nav").removeClass(navbar_id); + navbar.removeClass("small_nav"); + + //remove class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").removeClass(action_manager_id); + action_manager.removeClass("sidebar_margin"); + + //remove class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").removeClass(top_head_id); + top_head.removeClass("sidebar_margin"); + }); +// //Custom +// var showBar = false; +// +// $(document).on("click", "#triggerSidebar", function(event){ +// +// if(showBar){ +// hideSidebar(); +// }else{ +// showSidebar(); +// } +// $("#triggerSidebar").toggleClass('c_sidebar_active c_sidebar_passive'); +// $('#dotsMenuContainer').toggleClass('c_dots_menu c_dots_menu_toggled'); +// showBar = !showBar; +// }); +}); \ No newline at end of file diff --git a/vista_backend_theme/static/src/js/load.js b/vista_backend_theme/static/src/js/load.js new file mode 100644 index 00000000..690337cb --- /dev/null +++ b/vista_backend_theme/static/src/js/load.js @@ -0,0 +1,14 @@ +odoo.define('vista_backend_theme.Load', function (require) { + "use strict"; + + var rpc = require('web.rpc'); + var session = require('web.session'); + + $(document).ready(function () { + rpc.query({ + model: 'theme.data', + method: 'action_apply', + args: [this] + }); + }); +}); \ No newline at end of file diff --git a/vista_backend_theme/static/src/js/systray.js b/vista_backend_theme/static/src/js/systray.js new file mode 100644 index 00000000..1ddbf5cd --- /dev/null +++ b/vista_backend_theme/static/src/js/systray.js @@ -0,0 +1,30 @@ +/** @odoo-module **/ + +import SystrayMenu from 'web.SystrayMenu'; +import Widget from 'web.Widget'; +import Session from 'web.session'; + + +var ThemeWidget = Widget.extend({ + template: 'theme_systray', + events: { + 'click #theme_vista': '_onClick', + }, + is_admin: false, + willStart: function () { + this.is_admin = Session.is_admin; + return this._super.apply(this, arguments); + }, + _onClick: function(){ + this.do_action({ + type: 'ir.actions.act_window', + name: 'theme data', + res_model: 'theme.data', + view_mode: 'form', + views: [[false, 'form']], + target: 'new' + }); + }, +}); +SystrayMenu.Items.push(ThemeWidget); +export default ThemeWidget; diff --git a/vista_backend_theme/static/src/js/web_window_title.js b/vista_backend_theme/static/src/js/web_window_title.js new file mode 100644 index 00000000..f6fd3635 --- /dev/null +++ b/vista_backend_theme/static/src/js/web_window_title.js @@ -0,0 +1,12 @@ +/** @odoo-module alias=web.window.title **/ + +import { WebClient } from "@web/webclient/webclient"; +import {patch} from "@web/core/utils/patch"; + +patch(WebClient.prototype, "Web Window Title", { + setup() { + const title = document.title; + this._super(); + this.title.setParts({ zopenerp: title }); + } +}); diff --git a/vista_backend_theme/static/src/scss/login.scss b/vista_backend_theme/static/src/scss/login.scss new file mode 100644 index 00000000..c451adc5 --- /dev/null +++ b/vista_backend_theme/static/src/scss/login.scss @@ -0,0 +1,72 @@ +$one__light: #FFF !default; +$one__primary: #00005A !default; +$one__primary-dark: #274aa5 !important; +$one__border-light: #d4d4d4 !important; + +$transition-normal: all 0.4s linear !default; + + +.c_login_container{ + background: $one__light !important; + width: 100% !important; + + .card-body{ + background-color: transparent !important; + } +} +.input-group-prepend{ + .input-group-text{ + border-radius: 0px !important; + border-right: 0px !important; + background: transparent !important; + } +} + +.form-control{ + border-radius: 0px !important; + border-color: $one__border-light; + background-color: none; + + &:focus{ + box-shadow: none !important; + } +} + +//Buttons +.btn{ + border-radius: 0px; + + &:hover{ + filter: brightness(90%) !important; + box-shadow: none; + transition: $transition-normal; + } + +} + +.btn-primary{ + background-color: $one__primary !important; + border-color: $one__primary !important; + color: $one__light !important; + + &:hover{ + background-color: $one__primary-dark !important; + } + + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(235,240,253, 0.8); + } +} + +//Links +a, .btn-link { + color: $one__primary; + text-decoration: none; + background-color: transparent; + + &:hover{ + color: $one__primary-dark; + text-decoration: none !important; + transition: $transition-normal; + } +} \ No newline at end of file diff --git a/vista_backend_theme/static/src/scss/login_black.scss b/vista_backend_theme/static/src/scss/login_black.scss new file mode 100644 index 00000000..dcac31cf --- /dev/null +++ b/vista_backend_theme/static/src/scss/login_black.scss @@ -0,0 +1,72 @@ +$one__light: #fff !default; +$one__primary: #1F2631 !default; +$one__primary-dark: #1c222c !important; +$one__border-light: #d4d4d4 !important; + +$transition-normal: all 0.4s linear !default; + + +.c_login_container{ + background: $one__light !important; + width: 100% !important; + + .card-body{ + background-color: transparent !important; + } +} +.input-group-prepend{ + .input-group-text{ + border-radius: 0px !important; + border-right: 0px !important; + background: transparent !important; + } +} + +.form-control{ + border-radius: 0px !important; + border-color: $one__border-light; + background-color: none; + + &:focus{ + box-shadow: none !important; + } +} + +//Buttons +.btn{ + border-radius: 0px; + + &:hover{ + filter: brightness(90%) !important; + box-shadow: none; + transition: $transition-normal; + } + +} + +.btn-primary{ + background-color: $one__primary !important; + border-color: $one__primary !important; + color: $one__light !important; + + &:hover{ + background-color: $one__primary-dark !important; + } + + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(235,240,253, 0.8); + } +} + +//Links +a, .btn-link { + color: $one__primary; + text-decoration: none; + background-color: transparent; + + &:hover{ + color: $one__primary-dark; + text-decoration: none !important; + transition: $transition-normal; + } +} \ No newline at end of file diff --git a/vista_backend_theme/static/src/scss/login_green.scss b/vista_backend_theme/static/src/scss/login_green.scss new file mode 100644 index 00000000..781b85b5 --- /dev/null +++ b/vista_backend_theme/static/src/scss/login_green.scss @@ -0,0 +1,71 @@ +$one__light: #fff !default; +$one__primary: #00A97F !default; +$one__primary-dark: #009872 !important; +$one__border-light: #d4d4d4 !important; +$transition-normal: all 0.4s linear !default; + + +.c_login_container{ + background: $one__light !important; + width: 100% !important; + + .card-body{ + background-color: transparent !important; + } +} +.input-group-prepend{ + .input-group-text{ + border-radius: 0px !important; + border-right: 0px !important; + background: transparent !important; + } +} + +.form-control{ + border-radius: 0px !important; + border-color: $one__border-light; + background-color: none; + + &:focus{ + box-shadow: none !important; + } +} + +//Buttons +.btn{ + border-radius: 0px; + + &:hover{ + filter: brightness(90%) !important; + box-shadow: none; + transition: $transition-normal; + } + +} + +.btn-primary{ + background-color: $one__primary !important; + border-color: $one__primary !important; + color: $one__light !important; + + &:hover{ + background-color: $one__primary-dark !important; + } + + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(235,240,253, 0.8); + } +} + +//Links +a, .btn-link { + color: $one__primary; + text-decoration: none; + background-color: transparent; + + &:hover{ + color: $one__primary-dark; + text-decoration: none !important; + transition: $transition-normal; + } +} \ No newline at end of file diff --git a/vista_backend_theme/static/src/scss/theme.scss b/vista_backend_theme/static/src/scss/theme.scss new file mode 100644 index 00000000..22923a40 --- /dev/null +++ b/vista_backend_theme/static/src/scss/theme.scss @@ -0,0 +1,1032 @@ +//Variables + +$one__font: "Odoo Unicode Support Noto", "Lucida Grande", Helvetica, Verdana, Arial, sans-serif; + +//Colors +$one__light: #FFF !default; +$one__primary: #00005A !default; +$one__sidebar-color-hover: #274aa5 !important; +$one__sidebar-border: #00005A !important; +$one__sidebar-color: #00005A !important; +$one__sidebar_text: #fff !default; +$one__primary-light: #ebf0fd !default; +$one__primary-dark: #274aa5 !important; +$one__light-font-primary: #1f2631 !important; +$one__light-font-secondary: #575757 !important; +$one__hover-bkg-light: #f5f5f5 !important; +$one__border-light: #d4d4d4 !important; +$one__info: #454555 !important; + +//Border Style +$one__border: 0px; +$one__button-padding: auto; +//Misc +$transition-normal: all 0.4s linear !default; +$transition-fast: all 0.2s linear !default; +//Paths +$dots_menu_toggled: url('/vista_backend_theme/static/src/img/icons/dots-menu-primary.png'); + + +//Misc +$transition-normal: all 0.4s linear !default; + +//Animations +@mixin c_fadeBackgroundOut($name, $s_opacity, $e_opacity, $r, $g, $b){ + @keyframes #{$name}{ + 0%{ + background-color: rgba($r, $g, $b, $s_opacity); + } + + 100%{ + background-color: rgba($r, $g, $b, $e_opacity); + } + } +} + + + +body{ + background-color: $one__light !important; + font-family: $one__font; +} +//NAVBAR +.o_main_navbar { + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + background-color: $one__light; + border-bottom: none; + -moz-box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + -webkit-box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + color: $one__light-font-primary; + //height: 60px !important; +} +@media (min-width: 768px) { + .o_menu_systray .o-dropdown.dropdown > .o-dropdown--menu { + top: 46px !important; + left: 85% !important; + right: 20px !important; + } +} + +.top_heading a.o_menu_brand{ + font-weight: bolder !important; +} + +.o_menu_systray > li{ + font-size: 1.5rem !important; + } + +.o_menu_systray > *{ + margin-right: 15px; + &:last-child{ + margin-right: 0px; + } + @media (max-width: 767.98px) { + margin-right: 0px !important; + &:last-child{ + margin-right: 0px; + } + } +} + +@media (max-width: 767.98px) { + .o_user_menu .o_user_avatar { + margin-right: 0px !important; + } +} + +li.o_MessagingMenu.o-is-open { + background-color: $one__hover-bkg-light; + border-bottom: none !important; +} +.o_mail_systray_item .o_notification_counter{ + background-color: $one__primary !important; + color: $one__light !important; +} +.o_MessagingMenu_counter { + margin-left: -12px !important; +} +.o_notification_counter{ + margin-left: -18px !important; +} +.o_NotificationGroup_date{ + color: $one__primary !important +} +.o_menu_sections > li > a, .o_main_navbar > li > label{ + color: $one__light-font-primary; + display: block !important; + &:hover{ + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; + } +} +.o_switch_company_menu > a{ + color: $one__light-font-primary; + font-size: 1.8rem !important +} +.oe_topbar_name{ + color: $one__light-font-primary; + + @media (max-width: 576px) { + display: none; + } +} +.o_main_navbar > a:hover, .o_main_navbar > a:focus, .o_main_navbar > button:hover, .o_main_navbar > button:focus { + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; +} + +.o_MessagingMenu, .o_mail_systray_item{ + a{ + color: $one__light-font-primary; + } +} +.o_MessagingMenu_counter, .o_notification_counter { + background-color: $one__primary; + color: $one__light; +} +.o_main_navbar .show .dropdowdropdown-toggle, .o_main_navbar .show .dropdown-toggle { + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; +} +.o_main_navbar .o_user_menu .oe_topbar_avatar { + height: 32px !important; + width: 32px !important; +} +.oe_topbar_name{ + color: $one__light-font-primary !important; +} +.o_dashboards .o_website_dashboard div.o_box h2, .o_dashboards .o_website_dashboard div.o_box h4 { + color: $one__primary !important; +} +.o_control_panel { + padding: 2.5rem 1rem !important; + //margin-bottom: 1.5rem !important; + border-bottom: 0.5px solid $one__border-light; + width: 98%; + margin-left: auto; + margin-right: auto; +} +.o_form_view .oe_button_box .oe_stat_button .o_button_icon { + color: $one__primary; +} +.o_control_panel .breadcrumb{ + background-color: none !important; + padding: auto !important +} +.o_control_panel .breadcrumb > li, .breadcrumb-item > a{ + font-size: 2rem !important; + color: $one__light-font-secondary; + max-width: 100% !important; +} +.o_control_panel > div{ + display: flex; + justify-content: space-between; +} + +.breadcrumb-item.active{ + $color: $one__light-font-primary; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after, +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::before { + border-left-color: $one__primary !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after, +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before { + border-left-color: none !important; +} +.o_statusbar_status > .o_arrow_button.btn-secondary{ + background-color: $one__light !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled { + border-left: none !important; +} +// .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before, +// .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::after { +// background-color: $one__light !important; +// } + + + +.o_content{ + width: 98%; + margin-left: auto; + margin-right: auto; +} +.top_heading{ + display: flex; + align-items: center; + ul.o_menu_apps{ + list-style: none; + margin: 0 0.8rem 0 0; + padding: 0px; + } + li.dropdown{ + list-style: none; + } + a.o_menu_brand{ + color: $one__light-font-primary; + font-size: 1.5rem !important; + } +} +.o_menu_sections, .o_menu_systray{ + display: flex; + align-items: center; + list-style: none !important; + //height: 60px !important; + + li{ + margin-right: 1rem; + + &:last-child{ + margin-right: 0 !important; + } + } + .o-dropdown.dropdown > .o-dropdown--menu{ + border-color: transparent; + } +} +.o_main_navbar .dropdown .dropdown-toggle, +.o_main_navbar .o_menu_sections .dropdown .dropdown-toggle, +.o_nav_entry +{ + color: $one__light-font-primary; +} +.o_menu_systray, .o_menu_sections{ + li{ + position: relative !important; + a.o_MessagingMenu_toggler, a.dropdown-toggle{ + display: flex !important; + align-items: center !important; + height: 60px !important; + padding: 0px 7.5px; + + img{ + margin-right: 0.8rem; + transform: none !important; + } + } + } +} +.o_main_navbar .dropdown-menu.show { + min-width: auto !important; +} +.o_form_view .o_form_uri > span:first-child { + color: $one__primary; +} +.o_onboarding_container{ + margin-top: -1.575rem !important; +} +.o_loading_indicator.o_loading > span { + background: $one__primary !important; +} +.o_menu_systray > li > a > span.fa{ + color: $one__light-font-primary; + font-size: 1.9rem !important; + margin: auto 11px !important; +} + +//`Custom` +.c_navbar_container{ + display: flex; + justify-content: center; + width: 100%; + margin-left: auto; + margin-right: auto; + padding: 0 1rem 0 0 !important; +} + +.c_sidebar_active{ + height: 46px; + width: 60px; + display: flex !important; + justify-content: center; + align-items: center; + background-color: $one__primary; + color: $one__light !important; + margin-right: 1.5rem !important; + clip-path: polygon(0 0, 100% 0%, 86% 100%, 0% 100%); + + &:hover{ + background-color: $one__primary-dark; + transition: $transition-normal; + } +} + +.c_sidebar_passive{ + height: 46px; + width: 60px; + display: flex !important; + justify-content: center; + align-items: center; + background-color: $one__light; + color: $one__primary !important; + clip-path: polygon(0 0, 100% 0%, 86% 100%, 0% 100%); +} + +//END OF NAVBAR +.dropdown-menu{ + border-radius: 0px; + a, .dropdown-item{ + color: $one__light-font-primary; + &:hover{ + color: $one__primary !important; + background-color: $one__primary-light; + transition: $transition-normal; + } + } +} +//Buttons + +.btn{ + border-radius: 0px; + + &:hover{ + filter: brightness(90%) !important; + box-shadow: none; + transition: $transition-normal; + } + +} + +.btn-primary{ + background-color: $one__primary !important; + border-color: $one__primary !important; + color: $one__light !important; + + &:hover{ + background-color: $one__primary-dark !important; + } + + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(235,240,253, 0.8); + } +} +.btn-secondary{ + background-color: $one__hover-bkg-light; + border-color: $one__hover-bkg-light; + color: $one__light-font-primary; + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(245,245,245, 1); + } + + +} +.btn-fill-info, .btn-info { + background-color: $one__info; + border-color: $one__info; + color: $one__light; +} +.btn-group, .o_filter_menu{ + button, div.btn-group{ + margin-right: 3px; + &:last-child{ + margin-right: 0px !important; + } + } +} +.btn-link{ + color: $one__primary !important; + + &:hover{ + background-color: $one__hover-bkg-light !important; + } +} + +.o_control_panel .o_cp_bottom_left > .o_cp_action_menus .o_dropdown_toggler_btn, +.o_control_panel .o_cp_bottom_left > .o_cp_action_menus .dropdown-toggle + { + margin-right: 0px !important; +} +.o_activity_view .o_record_selector, .o_stat_value { + color: $one__primary !important; +} + +.o_web_settings_invite{ + height: 26px !important; + margin-top: 6px !important; +} + +.o_NotificationList{ + div:hover { + background-color: $one__primary-light; + } +} +.o_MessagingMenu_tabButton, .o_MessagingMenu_newMessageButton{ + color: $one__primary; + opacity: 0.8; + .o-active{ + opacity: 1; + font-weight: bold; + } +} +.o_ThreadPreview_date, .o_activity_filter_button, .o_mail_activity_action{ + color: $one__primary !important; + + &:before{ + color: $one__light-font-primary; + } + &:hover{ + color: $one__primary-dark !important; + } +} +//Controls +.custom-control.custom-checkbox .custom-control-input:not(:checked):not(:indeterminate) ~ .custom-control-label::before { + background: none; + outline: 1px solid $one__hover-bkg-light; +} +.custom-checkbox .custom-control-label::before { + border-radius: 0px; +} +.custom-control-input:checked ~ .custom-control-label::before { + color: $one__light; + border-color: $one__primary; + background-color: $one__primary; +} +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23FFFFFF' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); +} + +.o_input{ + border-radius: 0px !important; + border-color: $one__border-light; +} +.o_required_modifier.o_input, .o_required_modifier .o_input, .o_searchview .o_searchview_autocomplete li.o_selection_focus { + background-color: $one__primary-light !important; +} +.ui-menu-item > a{ + background-color: $one__light !important; + color: $one__primary !important; + &:hover, &:active, &:focus, &:focus-within, &:focus-visible, &:visited{ + color: $one__primary !important; + background-color: $one__primary-light !important; + } +} +.nav-tabs .nav-link { + border-radius: 0px !important; + border-top: 3px solid transparent !important; +} +.nav-tabs .nav-link.active { + border-top: 3px solid $one__primary !important; +} +.nav-tabs .nav-link:hover{ + border-top: 3px solid $one__primary !important; + color: $one__primary-dark; + transition: transition-normal !important; +} +.o_form_view .o_horizontal_separator { + color: $one__primary; +} +.panel-heading.note-toolbar { + background-color: $one__light !important; +} +div.o_boolean_toggle.custom-control.custom-checkbox > input.custom-control-input:checked + label.custom-control-label::before { + background-color: $one__primary !important; +} +//Misc. +.badge-primary{ + background-color: $one__primary; + border-radius: 0px; + padding: 5px; +} +//Links +a { + color: $one__primary; + text-decoration: none; + background-color: transparent; + + &hover{ + color: $one__primary-dark; + text-decoration: none; + transition: $transition-normal; + } +} +a.o_menu_brand{ + color: $one__light-font-primary; + font-weight: bold; +} +.o_form_uri{ + color: $one__primary !important; +} +.o_Message_prettyBody > div > p > a { + background-color: $one__primary !important; +} + +.o_onboarding_step_title > a { + color: $one__light; +} +.oe_kanban_action_a{ + color: $one__light-font-primary; +} +.o_kanban_view .oe_kanban_card.oe_kanban_global_click:focus, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click:focus-within, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click_edit:focus, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click_edit:focus-within, +.o_kanban_view .o_kanban_record.oe_kanban_global_click:focus, +.o_kanban_view .o_kanban_record.oe_kanban_global_click:focus-within, +.o_kanban_view .o_kanban_record.oe_kanban_global_click_edit:focus, +.o_kanban_view .o_kanban_record.oe_kanban_global_click_edit:focus-within{ + outline: thin solid $one__primary-light !important; +} +//Tables +.o_list_view thead { + background-color: $one__hover-bkg-light; +} + +.o_list_view .o_list_table thead { + color: $one__light-font-secondary; + border-bottom: 1px solid $one__border-light; +} +.o_list_view .o_list_table thead > tr > th:not(.o_list_record_selector) { + border-left: none; +} +table thead th { + vertical-align: bottom; + border-top: none !important; + border-bottom: none !important; + padding: 0.5rem !important; +} +table-sm th, .table-sm td { + padding: 0.5rem !important; + border-top: none !important; +} +tr:nth-child(even){ + background-color: $one__hover-bkg-light; +} +.o_list_view .o_list_table tfoot { + background-color: $one__light; + filter: brightness(95.5%) !important; +} + +//Search +.o_searchview .o_searchview_facet, .o_setting_search { + background: $one__light; + border-radius: 0px !important; + border: 1px solid $one__border-light; + color: $one__light-font-secondary; +} +.o_searchview .o_searchview_facet .o_searchview_facet_label { + background-color: $one__light; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_searchview_facet_label { + color: $one__light-font-secondary; + margin: 0px -3px 3px 3px; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_facet_remove{ + bottom: 3px !important; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_facet_values { + padding: 2px 18px 0 5px !important; +} +.o_searchview{ + padding: 0.5rem !important; + border-radius: 0px; +} +.searchInput{ + border: none !important; +} +.searchIcon{ + margin: 5px 10px 0 0; +} +.o_setting_search { + padding: 5px; +} + +//Kanban +.oe_kanban_card{ + border-color: $one__border-light; + padding: 1rem !important; +} + +//Calendar +@include c_fadeBackgroundOut('fadeCalendarRow', 1, 0.6, 212, 212, 212 ); + +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-current-day.ui-datepicker-today a, +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-current-day a, +.o_calendar_view .o_calendar_widget .fc-dayGridMonth-view .fc-content-skeleton .fc-today .fc-day-number +{ + color: $one__light !important; + background-color: $one__primary !important; +} + +.o_calendar_sidebar_container .ui-datepicker td a{ + color: $one__light-font-secondary; +} +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-today a{ + background-color: $one__border-light; +} + +.o_calendar_sidebar_container .ui-datepicker .o_selected_range.o_color:not(.ui-datepicker-unselectable) { + animation: fadeCalendarRow 2s forwards; +} + +.fc-now-indicator { + border-color: $one__primary !important; +} +.fc-ltr .fc-time-grid .fc-now-indicator-arrow { + left: 0; + border-width: 5px 0 5px 6px; + border-top-color: transparent !important; + border-bottom-color: transparent !important; +} + +.o_calendar_view .fc-view .fc-event.o_calendar_color_1.o_cw_custom_highlight { + box-shadow: 0 12px 12px -5px rgba(156, 181, 245, 0.8); + color: $one__primary; + font-weight: bold; +} +.o_calendar_view .fc-view .fc-event.o_calendar_color_1 .fc-bg { + background-color: $one__primary-light; +} +.o_calendar_view .fc-view .fc-event.o_calendar_color_1 { + border-color: $one__primary; + color: #274aa5; + opacity: 0.8; + + &:hover{ + background: $one__primary-light; + box-shadow: 0 12px 12px -5px rgba(156, 181, 245, 0.8); + } +} + +.bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover { + background-color: $one__primary !important; +} + +//Dashboard Sidebar +.o_Discuss, .o_setting_container{ + width: 98%; + margin-right: auto; + margin-left: auto; + border-top: none; +} +.o_widget_Discuss .o_Discuss_content { + border-top: none !important; +} +.o_DiscussSidebar, .settings_tab{ + color: $one__light-font-primary; + background-color: transparent !important; + border-right: 2px solid $one__border-light; + height: 95%; + margin-top: auto; + margin-bottom: auto; +} +.o_DiscussSidebarItem{ + padding: 0.4rem 0 !important; +} +.o_DiscussSidebarItem_activeIndicator.o-item-active{ + width: 0; + height: 0; + background: transparent; + margin-top: 0.375rem; + margin-right: 8px !important; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid $one__primary; +} +.o_DiscussSidebarItem:hover{ + background-color: transparent !important; + color: $one__primary; +} +.o_DiscussSidebar_separator{ + width: 95% !important; + margin-left: auto; + margin-right: auto; + background-color: transparent !important; +} +.o_MessageList{ + padding: 10px !important; +} + +.o_Message.o-not-discussion{ + background-color: $one__hover-bkg-light; + border-color: $one__border-light; +} + +//Settings + +.o_setting_container .settings_tab { + .app_name{ + color: $one__light-font-primary !important; + } +} + +.o_base_settings .o_control_panel .o_panel .o_setting_search .searchInput { + max-width: none !important; + margin: 4px 0 0 10px !important; +} + +.o_setting_container .settings_tab .tab{ + height: 30px !important; +} + +.o_setting_container .settings{ + padding: 10px !important; +} +.o_setting_container .settings_tab .app_name { + color: $one__light-font-primary; + + &:hover{ + color :$one__primary !important; + } +} +.o_setting_container .settings_tab .selected{ + background: transparent !important; + box-shadow: none !important; + position: relative; + + &:before{ + content: ""; + position: absolute; + width: 0; + height: 0; + top: 24%; + left: 0; + background: transparent; + margin-top: 0.375rem; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid $one__primary; + } + + .app_name{ + color: $one__light-font-primary; + + &:hover{ + color :$one__primary !important; + } + } +} + +.o_form_image_controls > .o_select_file_button{ + background: $one__primary !important; + color: $one__light; +} + +.o_search_panel .o_search_panel_category .o_search_panel_section_icon { + color: $one__primary; +} +.o_search_panel .list-group-item header.active { + background-color: $one__primary-light; + color: $one__primary; +} + +//Chat +.o_ChatWindowHeader{ + background-color: $one__primary !important; + color: $one__light !important; + border-radius: 0px !important; +} +//Tables +.o_purchase_dashboard .table > thead > tr > td.o_main, .o_purchase_dashboard .table tbody > tr > td.o_main { + background-color: $one__primary; + + &:hover{ + background-color: $one__primary-dark; + } + + a{ + color: $one__light; + } +} + +//Tags +.o_field_widget.o_field_many2manytags .o_tag_color_5, +.o_kanban_view .o_kanban_record .o_field_many2manytags .o_tag.o_tag_color_5 span, +.o_kanban_view .o_kanban_record .o_kanban_tags .o_tag.o_tag_color_5 span { + background-color: $one__primary; +} + +.badge-pill{ + a{ + color: $one__light; + } +} + + +.oe_kanban_card .o_kanban_tags .o_tag, .o_kanban_view .o_kanban_record .o_field_many2manytags .o_tag, .o_kanban_view .o_kanban_record .o_kanban_tags .o_tag { + background-color: transparent !important; +} + +.o-menu-toggle{ + display: none !important; +} +.c_dots_menu{ + background-image: url('/vista_backend_theme/static/src/img/icons/dots-menu.png'); + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} +.c_dots_menu_toggled{ + background-image: $dots_menu_toggled; + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} + +//Responsive Layout +@media (max-width: 767.98px) { + //Settings + .o_base_settings .o_setting_container { + flex-flow: column nowrap; + + .settings_tab{ + flex-direction: row; + height: 40px; + margin-top: -5px; + justify-content: center; + } + } + //App Bar + .o_control_panel > div { + flex-direction: column; + margin-bottom: 0.5rem; + } + .o_control_panel .breadcrumb > li, .breadcrumb-item > a { + font-size: 1.8rem !important; + margin-bottom: 0.5rem; + } + .o_control_panel .o_cp_top_right { + width: 100%; + margin-bottom: 0.5rem; + } + .o_search_panel .o_search_panel_section_header { + display: none; + } + .o_search_panel { + flex: 0 0 120px !important; + padding: 8px 8px 32px 0px !important; + } + //Discuss + .o_Discuss.o-mobile{ + width: 100% !important; + border-top: 1px solid $one__border-light; + } + .o_MobileMessagingNavbar_tab.o-active > span{ + color: $one__primary !important; + } +} + +#sidebar_panel { + height: 100%; + position: fixed; + top: 0px; + background-color: $one__sidebar-color; + border-right: 1px solid $one__sidebar_border; + display: none; + width: 80px; + overflow-y: scroll; + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + z-index: 999; +} +.sidebar_app_name{ + display: none; +} +#sidebar_panel::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari and Opera */ +} +.sidebar_menu{ + margin-top: 20px !important; +} +.sidebar > h6{ + color: $one__light; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 2px; + font-size: 0.9rem; + margin-left: auto; + margin-right: auto; + width: 38px; + display: block; + margin-top: 18px !important; +} +.sidebar_panel .sidebar { + padding: 0; + white-space: nowrap; + padding-bottom: 20px; + padding-top: 5px; +} +.sidebar_panel .sidebar_close { + text-align: end; + display: none; + position: sticky; + height: 35px; + padding-top: 5px; + top: 0; + background: #2a3042; + z-index: 1; +} +.sidebar_panel .sidebar_close a#closeSidebar { + font-size: 18px; + margin-right: 10px; + color: #ffffff; + opacity: .3; +} +.sidebar_panel .sidebar_close a#closeSidebar img { + width: 15px; +} +.sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 20px; +} +.sidebar_panel .sidebar .sidebar_logo img { + max-width: 150px; +} + +.sidebar_panel .sidebar .sidebar_head { + padding-top: 20px; + padding-left: none; + color: $one__light; +} + +.sidebar_panel .sidebar .sidebar_menu { + list-style: none; + margin: 0; + padding: 0; +} + +.sidebar_panel .sidebar .sidebar_menu li { + margin: 0; + padding: 0; + border: 0px; + display: block; +} + +.sidebar_panel .sidebar .sidebar_menu li a { + margin: 0; + border: 0px; + display: block; + cursor: pointer; + overflow: hidden; + padding: 8px 10px 8px 25px; + color: #ffffff; + font-size: 13px; + transition:.3s all; +} +.sidebar_panel .sidebar .sidebar_menu li:hover a { + background: $one__sidebar-color-hover; + color: $one__light; +} + +.sidebar_panel .nav-link { + opacity: 1 !important; + transition:.3s all; +} +.sidebar_panel .sidebar a.nav-link.active { + color: $one__light !important; + border-left: 4px solid $one__light; + + img{ + margin-left: -0.5rem !important; + } +} + +.sidebar_panel .sidebar .sidebar_menu li a .sidebar_img { + width: 32px; + height: 32px; + margin: 8px 8px 8px 0; +} +.sidebar_menu > li a.nav-link{ + &:hover{ + transform: scale(1.05) !important; + transition: all 0.3s linear !important; + } +} + +.datepicker{ + z-index: 9999 !important; +} +div.dropdown-menu.bootstrap-datetimepicker-widget { + width: 28rem !important; +} +// .datepicker .table-sm > thead, +// .datepicker > div > table > tbody > tr > td.active{ +// background-color: $one__primary; +// } +// .datepicker .table-sm > thead > tr:first-child th:hover { +// background-color: $one__primary-dark; +// } +// .datepicker .table-sm > tbody > tr > td.today::before{ +// border-bottom-color: $one__primary; +// } + + +// here is van add + +.o_calendar_renderer .o_calendar_widget .fc-timeGridDay-view .fc-axis.fc-time span, +.o_calendar_renderer .o_calendar_widget .fc-timeGridWeek-view .fc-axis.fc-time span { + max-width: 45px; + margin-top: 0px !important; + position: relative; + display: block; +} + +.o_searchview .o_searchview_icon { + z-index: 9999 !important; + margin-top: 12px; +} \ No newline at end of file diff --git a/vista_backend_theme/static/src/scss/theme_black.scss b/vista_backend_theme/static/src/scss/theme_black.scss new file mode 100644 index 00000000..870202dc --- /dev/null +++ b/vista_backend_theme/static/src/scss/theme_black.scss @@ -0,0 +1,1188 @@ +//Font CSS +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUbOvISTs.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUZevISTs.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUbuvISTs.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUb-vISTs.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 300; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofAnsSUYevI.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIOOaBXso.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIMeaBXso.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIOuaBXso.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofIO-aBXso.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofINeaB.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUbOvISTs.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUZevISTs.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* vietnamese */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUbuvISTs.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUb-vISTs.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Nunito'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXW3I6Li01BKofA6sKUYevI.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + + +//Variables + +//Fonts +$one__font: 'Nunito', Helvetica, Verdana, Arial, sans-serif !important; + +//Colors +$one__light: #fff !default; +$one__primary: #1F2631 !default; +$one__sidebar-color: #1F2631 !important; +$one__sidebar-color-hover: #1c222c !default; +$one__sidebar-border: #1F2631 !important; +$one__sidebar_text: #fff !default; +$one__primary-light: #e9e9ea !default; +$one__primary-dark: #1c222c !important; +$one__light-font-primary: #030405 !important; +$one__light-font-secondary: #575757 !important; +$one__hover-bkg-light: #f5f5f5 !important; +$one__border-light: #d4d4d4 !important; +$one__info: #454555 !important; + +//Border Style +$one__border: 100px; +$one__button-padding: 25px; +//Misc +$transition-normal: all 0.4s linear !default; +$transition-fast: all 0.2s linear !default; + +//Paths +$dots_menu_toggled: url('/vista_backend_theme/static/src/img/icons/dots-menu-navy.png'); + + +//Misc +$transition-normal: all 0.4s linear !default; + +//Animations +@mixin c_fadeBackgroundOut($name, $s_opacity, $e_opacity, $r, $g, $b){ + @keyframes #{$name}{ + 0%{ + background-color: rgba($r, $g, $b, $s_opacity); + } + + 100%{ + background-color: rgba($r, $g, $b, $e_opacity); + } + } +} + + + +body{ + background-color: $one__light !important; + font-family: $one__font; +} +//NAVBAR +.o_main_navbar { + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + background-color: $one__light; + border-bottom: none; + -moz-box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + -webkit-box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + color: $one__light-font-primary; + //height: 60px !important; +} +@media (min-width: 768px) { + .o_menu_systray .o-dropdown.dropdown > .o-dropdown--menu { + top: 46px !important; + left: 85% !important; + right: 20px !important; + } +} +.top_heading a.o_menu_brand{ + font-weight: bolder !important; +} + +.o_menu_systray > li{ + font-size: 1.5rem !important; + } + +.o_menu_systray > *{ + margin-right: 15px; + &:last-child{ + margin-right: 0px; + } + @media (max-width: 767.98px) { + margin-right: 0px !important; + &:last-child{ + margin-right: 0px; + } + } +} + +@media (max-width: 767.98px) { + .o_user_menu .o_user_avatar { + margin-right: 0px !important; + } +} + +li.o_MessagingMenu.o-is-open { + background-color: $one__hover-bkg-light; + border-bottom: none !important; +} +.o_mail_systray_item .o_notification_counter{ + background-color: $one__primary !important; + color: $one__light !important; +} +.o_MessagingMenu_counter { + margin-left: -12px !important; +} +.o_notification_counter{ + margin-left: -18px !important; +} +.o_NotificationGroup_date{ + color: $one__primary !important +} +.o_menu_sections > li > a, .o_main_navbar > li > label{ + color: $one__light-font-primary; + display: block !important; + &:hover{ + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; + } +} +.o_switch_company_menu > a{ + color: $one__light-font-primary; + font-size: 1.8rem !important +} +.oe_topbar_name{ + color: $one__light-font-primary; + + @media (max-width: 576px) { + display: none; + } +} +.o_main_navbar > a:hover, .o_main_navbar > a:focus, .o_main_navbar > button:hover, .o_main_navbar > button:focus { + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; +} + +.o_MessagingMenu, .o_mail_systray_item{ + a{ + color: $one__light-font-primary; + } +} +.o_MessagingMenu_counter, .o_notification_counter { + background-color: $one__primary; + color: $one__light; +} +.o_main_navbar .show .dropdowdropdown-toggle, .o_main_navbar .show .dropdown-toggle { + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; +} +.o_main_navbar .o_user_menu .oe_topbar_avatar { + height: 32px !important; + width: 32px !important; +} +.oe_topbar_name{ + color: $one__light-font-primary !important; +} +.o_dashboards .o_website_dashboard div.o_box h2, .o_dashboards .o_website_dashboard div.o_box h4 { + color: $one__primary !important; +} +.o_control_panel { + padding: 2.5rem 1rem !important; + margin-bottom: 1.5rem !important; + border-bottom: 1px solid $one__border-light; + width: 98%; + margin-left: auto; + margin-right: auto; +} +.o_form_view .oe_button_box .oe_stat_button .o_button_icon { + color: $one__primary; +} +.o_control_panel .breadcrumb{ + background-color: none !important; + padding: auto !important +} +.o_control_panel .breadcrumb > li, .breadcrumb-item > a{ + font-size: 2rem !important; + color: $one__light-font-secondary; + max-width: 100% !important; +} +.o_control_panel > div{ + display: flex; + justify-content: space-between; +} + +.breadcrumb-item.active{ + $color: $one__light-font-primary; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after, +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::before { + border-left-color: $one__primary !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after, +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before { + border-left-color: none !important; +} +.o_statusbar_status > .o_arrow_button.btn-secondary{ + background-color: $one__light !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled { + border-left: none !important; +} +// .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before, +// .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::after { +// background-color: $one__light !important; +// } + + + +.o_content{ + width: 98%; + margin-left: auto; + margin-right: auto; +} +.top_heading{ + display: flex; + align-items: center; + ul.o_menu_apps{ + list-style: none; + margin: 0 0.8rem 0 0; + padding: 0px; + } + li.dropdown{ + list-style: none; + } + a.o_menu_brand{ + color: $one__light-font-primary; + font-size: 1.5rem !important; + } +} +.o_menu_sections, .o_menu_systray{ + display: flex; + align-items: center; + list-style: none !important; + //height: 60px !important; + + li{ + margin-right: 1rem; + + &:last-child{ + margin-right: 0 !important; + } + } + .o-dropdown.dropdown > .o-dropdown--menu{ + border-color: transparent; + } +} +.o_main_navbar .dropdown .dropdown-toggle, +.o_main_navbar .o_menu_sections .dropdown .dropdown-toggle, +.o_nav_entry +{ + color: $one__light-font-primary; +} +.o_menu_systray, .o_menu_sections{ + li{ + position: relative !important; + a.o_MessagingMenu_toggler, a.dropdown-toggle{ + display: flex !important; + align-items: center !important; + height: 60px !important; + padding: 0px 7.5px; + + img{ + margin-right: 0.8rem; + transform: none !important; + } + } + } +} +.o_main_navbar .dropdown-menu.show { + min-width: auto !important; +} +.o_form_view .o_form_uri > span:first-child { + color: $one__primary; +} +.o_onboarding_container{ + margin-top: -1.575rem !important; +} +.o_loading_indicator.o_loading > span { + background: $one__primary !important; +} +.o_menu_systray > li > a > span.fa{ + color: $one__light-font-primary; + font-size: 1.9rem !important; + margin: auto 11px !important; +} + +//`Custom` +.c_navbar_container{ + display: flex; + justify-content: center; + width: 100%; + margin-left: auto; + margin-right: auto; + padding: 0 1rem 0 0 !important; +} + +.c_sidebar_active{ + height: 46px; + width: 60px; + display: flex !important; + justify-content: center; + align-items: center; + background-color: $one__primary; + color: $one__light !important; + margin-right: 1.5rem !important; + clip-path: polygon(0 0, 100% 0%, 86% 100%, 0% 100%); + + &:hover{ + background-color: $one__primary-dark; + transition: $transition-normal; + } +} + +.c_sidebar_passive{ + height: 46px; + width: 60px; + display: flex !important; + justify-content: center; + align-items: center; + background-color: $one__light; + color: $one__primary !important; + clip-path: polygon(0 0, 100% 0%, 86% 100%, 0% 100%); +} + +//END OF NAVBAR +.dropdown-menu{ + border-radius: 0px; + a, .dropdown-item{ + color: $one__light-font-primary; + &:hover{ + color: $one__primary !important; + background-color: $one__primary-light; + transition: $transition-normal; + } + } +} +//Buttons + +.btn{ + border-radius: 0px; + + &:hover{ + filter: brightness(90%) !important; + box-shadow: none; + transition: $transition-normal; + } + +} + +.btn-primary{ + background-color: $one__primary !important; + border-color: $one__primary !important; + color: $one__light !important; + + &:hover{ + background-color: $one__primary-dark !important; + } + + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(235,240,253, 0.8); + } +} +.btn-secondary{ + background-color: $one__hover-bkg-light; + border-color: $one__hover-bkg-light; + color: $one__light-font-primary; + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(245,245,245, 1); + } + + +} +.btn-fill-info, .btn-info { + background-color: $one__info; + border-color: $one__info; + color: $one__light; +} +.btn-group, .o_filter_menu{ + button, div.btn-group{ + margin-right: 3px; + &:last-child{ + margin-right: 0px !important; + } + } +} +.btn-link{ + color: $one__primary !important; + + &:hover{ + background-color: $one__hover-bkg-light !important; + } +} + +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.o_control_panel .o_cp_bottom_left > .o_cp_action_menus .o_dropdown_toggler_btn, +.o_control_panel .o_cp_bottom_left > .o_cp_action_menus .dropdown-toggle + { + margin-right: 0px !important; +} +.o_activity_view .o_record_selector, .o_stat_value { + color: $one__primary !important; +} + +.o_web_settings_invite{ + height: 26px !important; + margin-top: 6px !important; +} + +.o_NotificationList{ + div:hover { + background-color: $one__primary-light; + } +} +.o_MessagingMenu_tabButton, .o_MessagingMenu_newMessageButton{ + color: $one__primary; + opacity: 0.8; + .o-active{ + opacity: 1; + font-weight: bold; + } +} +.o_ThreadPreview_date, .o_activity_filter_button, .o_mail_activity_action{ + color: $one__primary !important; + + &:before{ + color: $one__light-font-primary; + } + &:hover{ + color: $one__primary-dark !important; + } +} +//Controls +.custom-control.custom-checkbox .custom-control-input:not(:checked):not(:indeterminate) ~ .custom-control-label::before { + background: none; + outline: 1px solid $one__hover-bkg-light; +} +.custom-checkbox .custom-control-label::before { + border-radius: 0px; +} +.custom-control-input:checked ~ .custom-control-label::before { + color: $one__light; + border-color: $one__primary; + background-color: $one__primary; +} +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23FFFFFF' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); +} + +.o_input{ + border-radius: 0px !important; + border-color: $one__border-light; +} +.o_required_modifier.o_input, .o_required_modifier .o_input, .o_searchview .o_searchview_autocomplete li.o_selection_focus { + background-color: $one__primary-light !important; +} +.ui-menu-item > a{ + background-color: $one__light !important; + color: $one__primary !important; + &:hover, &:active, &:focus, &:focus-within, &:focus-visible, &:visited{ + color: $one__primary !important; + background-color: $one__primary-light !important; + } +} +.nav-tabs .nav-link { + border-radius: 0px !important; + border-top: 3px solid transparent !important; +} +.nav-tabs .nav-link.active { + border-top: 3px solid $one__primary !important; +} +.nav-tabs .nav-link:hover{ + border-top: 3px solid $one__primary !important; + color: $one__primary-dark; + transition: transition-normal !important; +} +.o_form_view .o_horizontal_separator { + color: $one__primary; +} +.panel-heading.note-toolbar { + background-color: $one__light !important; +} +div.o_boolean_toggle.custom-control.custom-checkbox > input.custom-control-input:checked + label.custom-control-label::before { + background-color: $one__primary !important; +} +//Misc. +.badge-primary{ + background-color: $one__primary; + border-radius: 0px; + padding: 5px; +} +//Links +a { + color: $one__primary; + text-decoration: none; + background-color: transparent; + + &hover{ + color: $one__primary-dark; + text-decoration: none; + transition: $transition-normal; + } +} +a.o_menu_brand{ + color: $one__light-font-primary; + font-weight: bold; +} +.o_form_uri{ + color: $one__primary !important; +} +.o_Message_prettyBody > div > p > a { + background-color: $one__primary !important; +} + +.o_onboarding_step_title > a { + color: $one__light; +} +.oe_kanban_action_a{ + color: $one__light-font-primary; +} +.o_kanban_view .oe_kanban_card.oe_kanban_global_click:focus, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click:focus-within, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click_edit:focus, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click_edit:focus-within, +.o_kanban_view .o_kanban_record.oe_kanban_global_click:focus, +.o_kanban_view .o_kanban_record.oe_kanban_global_click:focus-within, +.o_kanban_view .o_kanban_record.oe_kanban_global_click_edit:focus, +.o_kanban_view .o_kanban_record.oe_kanban_global_click_edit:focus-within{ + outline: thin solid $one__primary-light !important; +} +//Tables +.o_list_view thead { + background-color: $one__hover-bkg-light; +} + +.o_list_view .o_list_table thead { + color: $one__light-font-secondary; + border-bottom: 1px solid $one__border-light; +} +.o_list_view .o_list_table thead > tr > th:not(.o_list_record_selector) { + border-left: none; +} +table thead th { + vertical-align: bottom; + border-top: none !important; + border-bottom: none !important; + padding: 1rem !important; +} +table-sm th, .table-sm td { + padding: 1rem !important; + border-top: none !important; +} +tr:nth-child(even){ + background-color: $one__hover-bkg-light; +} +.o_list_view .o_list_table tfoot { + background-color: $one__light; + filter: brightness(95.5%) !important; +} + +//Search +.o_searchview .o_searchview_facet, .o_setting_search { + background: $one__light; + border-radius: 0px !important; + border: 1px solid $one__border-light; + color: $one__light-font-secondary; +} +.o_searchview .o_searchview_facet .o_searchview_facet_label { + background-color: $one__light; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_searchview_facet_label { + color: $one__light-font-secondary; + margin: 0px -3px 3px 3px; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_facet_remove{ + bottom: 3px !important; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_facet_values { + padding: 2px 18px 0 5px !important; +} +.o_searchview{ + padding: 0.5rem !important; + border-radius: 0px; +} +.searchInput{ + border: none !important; +} +.searchIcon{ + margin: 5px 10px 0 0; +} +.o_setting_search { + padding: 5px; + border-radius: $one__border !important; +} + +//Kanban +.oe_kanban_card{ + border-color: $one__border-light; + padding: 1rem !important; +} + +//Calendar +@include c_fadeBackgroundOut('fadeCalendarRow', 1, 0.6, 212, 212, 212 ); + +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-current-day.ui-datepicker-today a, +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-current-day a, +.o_calendar_view .o_calendar_widget .fc-dayGridMonth-view .fc-content-skeleton .fc-today .fc-day-number +{ + color: $one__light !important; + background-color: $one__primary !important; +} + +.o_calendar_sidebar_container .ui-datepicker td a{ + color: $one__light-font-secondary; +} +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-today a{ + background-color: $one__border-light; +} + +.o_calendar_sidebar_container .ui-datepicker .o_selected_range.o_color:not(.ui-datepicker-unselectable) { + animation: fadeCalendarRow 2s forwards; +} + +.fc-now-indicator { + border-color: $one__primary !important; +} +.fc-ltr .fc-time-grid .fc-now-indicator-arrow { + left: 0; + border-width: 5px 0 5px 6px; + border-top-color: transparent !important; + border-bottom-color: transparent !important; +} + +.o_calendar_view .fc-view .fc-event.o_calendar_color_1.o_cw_custom_highlight { + box-shadow: 0 12px 12px -5px rgba(156, 181, 245, 0.8); + color: $one__primary; + font-weight: bold; +} +.o_calendar_view .fc-view .fc-event.o_calendar_color_1 .fc-bg { + background-color: $one__primary-light; +} +.o_calendar_view .fc-view .fc-event.o_calendar_color_1 { + border-color: $one__primary; + color: #274aa5; + opacity: 0.8; + + &:hover{ + background: $one__primary-light; + box-shadow: 0 12px 12px -5px rgba(156, 181, 245, 0.8); + } +} + +.bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover { + background-color: $one__primary !important; +} + +//Dashboard Sidebar +.o_Discuss, .o_setting_container{ + width: 98%; + margin-right: auto; + margin-left: auto; + border-top: none; +} +.o_widget_Discuss .o_Discuss_content { + border-top: none !important; +} +.o_DiscussSidebar, .settings_tab{ + color: $one__light-font-primary; + background-color: transparent !important; + border-right: 2px solid $one__border-light; + height: 95%; + margin-top: auto; + margin-bottom: auto; +} +.o_DiscussSidebarItem{ + padding: 0.4rem 0 !important; +} +.o_DiscussSidebarItem_activeIndicator.o-item-active{ + width: 0; + height: 0; + background: transparent; + margin-top: 0.375rem; + margin-right: 8px !important; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid $one__primary; +} +.o_DiscussSidebarItem:hover{ + background-color: transparent !important; + color: $one__primary; +} +.o_DiscussSidebar_separator{ + width: 95% !important; + margin-left: auto; + margin-right: auto; + background-color: transparent !important; +} +.o_MessageList{ + padding: 10px !important; +} + +.o_Message.o-not-discussion{ + background-color: $one__hover-bkg-light; + border-color: $one__border-light; +} + +//Settings + +.o_setting_container .settings_tab { + .app_name{ + color: $one__light-font-primary !important; + } +} + +.o_base_settings .o_control_panel .o_panel .o_setting_search .searchInput { + max-width: none !important; + margin: 4px 0 0 10px !important; +} + +.o_setting_container .settings_tab .tab{ + height: 30px !important; +} + +.o_setting_container .settings{ + padding: 10px !important; +} +.o_setting_container .settings_tab .app_name { + color: $one__light-font-primary; + + &:hover{ + color :$one__primary !important; + } +} +.o_setting_container .settings_tab .selected{ + background: transparent !important; + box-shadow: none !important; + position: relative; + + &:before{ + content: ""; + position: absolute; + width: 0; + height: 0; + top: 24%; + left: 0; + background: transparent; + margin-top: 0.375rem; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid $one__primary; + } + + .app_name{ + color: $one__light-font-primary; + + &:hover{ + color :$one__primary !important; + } + } +} + +.o_form_image_controls > .o_select_file_button{ + background: $one__primary !important; + color: $one__light; +} + +.o_search_panel .o_search_panel_category .o_search_panel_section_icon { + color: $one__primary; +} +.o_search_panel .list-group-item header.active { + background-color: $one__primary-light; + color: $one__primary; +} + +//Chat +.o_ChatWindowHeader{ + background-color: $one__primary !important; + color: $one__light !important; + border-radius: 0px !important; +} +//Tables +.o_purchase_dashboard .table > thead > tr > td.o_main, .o_purchase_dashboard .table tbody > tr > td.o_main { + background-color: $one__primary; + + &:hover{ + background-color: $one__primary-dark; + } + + a{ + color: $one__light; + } +} + +//Tags +.o_field_widget.o_field_many2manytags .o_tag_color_5, +.o_kanban_view .o_kanban_record .o_field_many2manytags .o_tag.o_tag_color_5 span, +.o_kanban_view .o_kanban_record .o_kanban_tags .o_tag.o_tag_color_5 span { + background-color: $one__primary; +} + +.badge-pill{ + a{ + color: $one__light; + } +} + + +.o_enterprise_label +{ + border-radius: $one__border; + padding: 5px 10px 4px !important; +} + +.oe_kanban_card .o_kanban_tags .o_tag, .o_kanban_view .o_kanban_record .o_field_many2manytags .o_tag, .o_kanban_view .o_kanban_record .o_kanban_tags .o_tag { + background-color: transparent !important; +} + +.o-menu-toggle{ + display: none !important; +} +.c_dots_menu{ + background-image: url('/vista_backend_theme/static/src/img/icons/dots-menu.png'); + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} +.c_dots_menu_toggled{ + background-image: $dots_menu_toggled; + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} + +//Responsive Layout +@media (max-width: 767.98px) { + //Settings + .o_base_settings .o_setting_container { + flex-flow: column nowrap; + + .settings_tab{ + flex-direction: row; + height: 40px; + margin-top: -5px; + justify-content: center; + } + } + //App Bar + .o_control_panel > div { + flex-direction: column; + margin-bottom: 0.5rem; + } + .o_control_panel .breadcrumb > li, .breadcrumb-item > a { + font-size: 1.8rem !important; + margin-bottom: 0.5rem; + } + .o_control_panel .o_cp_top_right { + width: 100%; + margin-bottom: 0.5rem; + } + .o_search_panel .o_search_panel_section_header { + display: none; + } + .o_search_panel { + flex: 0 0 120px !important; + padding: 8px 8px 32px 0px !important; + } + //Discuss + .o_Discuss.o-mobile{ + width: 100% !important; + border-top: 1px solid $one__border-light; + } + .o_MobileMessagingNavbar_tab.o-active > span{ + color: $one__primary !important; + } +} + +//Border Radius +.o_form_button, +.custom-checkbox .custom-control-label::before, +.o_searchview, +.o_searchview .o_searchview_facet, +.o-dropdown--menu > div > button, +.oe_title > div > a +{ + border-radius: $one__border !important; +} +.o_arrow_button{ + border-radius: 0px !important; +} +.dropdown-menu{ + border-radius: 5px !important; +} +input[type='text'], select{ + border-radius: $one__border !important; +} +//Rounded Buttons +.o_form_button_edit, +.o_form_button_create, +.o-kanban-button-new, +.o_button_upload_bill, +.o_DiscussSidebar_startAMeetingButton, +.oe_kanban_action_button, +.o_web_settings_invite, +.oe_module_action > a, +.o_list_buttons > button, +footer > button, +.o_statusbar_buttons > button +{ + border-radius: $one__border !important; + padding: 5px $one__button-padding 3px !important; + margin-right: 5px !important; +} + +#sidebar_panel { + height: 100%; + position: fixed; + top: 0px; + background-color: $one__sidebar-color; + display: none; + width: 80px; + overflow-y: scroll; + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + z-index: 999; +} +.sidebar_app_name{ + display: none; +} +#sidebar_panel::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari and Opera */ +} +.sidebar_menu{ + margin-top: 20px !important; +} +.sidebar > h6{ + color: $one__light; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 2px; + font-size: 0.9rem; + margin-left: auto; + margin-right: auto; + width: 38px; + display: block; + margin-top: 18px !important; +} +.sidebar_panel .sidebar { + padding: 0; + white-space: nowrap; + padding-bottom: 20px; + padding-top: 5px; +} +.sidebar_panel .sidebar_close { + text-align: end; + display: none; + position: sticky; + height: 35px; + padding-top: 5px; + top: 0; + background: #2a3042; + z-index: 1; +} +.sidebar_panel .sidebar_close a#closeSidebar { + font-size: 18px; + margin-right: 10px; + color: #ffffff; + opacity: .3; +} +.sidebar_panel .sidebar_close a#closeSidebar img { + width: 15px; +} +.sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 20px; +} +.sidebar_panel .sidebar .sidebar_logo img { + max-width: 150px; +} + +.sidebar_panel .sidebar .sidebar_head { + padding-top: 20px; + padding-left: none; + color: $one__light; +} + +.sidebar_panel .sidebar .sidebar_menu { + list-style: none; + margin: 0; + padding: 0; +} + +.sidebar_panel .sidebar .sidebar_menu li { + margin: 0; + padding: 0; + border: 0px; + display: block; +} + +.sidebar_panel .sidebar .sidebar_menu li a { + margin: 0; + border: 0px; + display: block; + cursor: pointer; + overflow: hidden; + padding: 8px 10px 8px 25px; + color: #ffffff; + font-size: 13px; + transition:.3s all; +} +.sidebar_panel .sidebar .sidebar_menu li:hover a { + background: $one__sidebar-color-hover; + color: $one__light; +} + +.sidebar_panel .nav-link { + opacity: 1 !important; + transition:.3s all; +} +.sidebar_panel .sidebar a.nav-link.active { + color: $one__light !important; + border-left: 4px solid $one__light; + + img{ + margin-left: -0.5rem !important; + } +} + +.sidebar_panel .sidebar .sidebar_menu li a .sidebar_img { + width: 32px; + height: 32px; + margin: 8px 8px 8px 0; +} +.sidebar_menu > li a.nav-link{ + &:hover{ + transform: scale(1.05) !important; + transition: all 0.3s linear !important; + } +} + +.datepicker{ + z-index: 9999 !important; +} +div.dropdown-menu.bootstrap-datetimepicker-widget { + width: 28rem !important; +} +// .datepicker .table-sm > thead, +// .datepicker > div > table > tbody > tr > td.active{ +// background-color: $one__primary; +// } +// .datepicker .table-sm > thead > tr:first-child th:hover { +// background-color: $one__primary-dark; +// } +// .datepicker .table-sm > tbody > tr > td.today::before{ +// border-bottom-color: $one__primary; +// } diff --git a/vista_backend_theme/static/src/scss/theme_green.scss b/vista_backend_theme/static/src/scss/theme_green.scss new file mode 100644 index 00000000..fec60388 --- /dev/null +++ b/vista_backend_theme/static/src/scss/theme_green.scss @@ -0,0 +1,1070 @@ +//Font CSS +/* devanagari */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2'); + unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; +} +/* latin-ext */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 400; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* devanagari */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2) format('woff2'); + unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; +} +/* latin-ext */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Poppins'; + font-style: normal; + font-weight: 600; + src: url(https://fonts.gstatic.com/s/poppins/v15/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +//Variables +$one__font: 'Poppins', Helvetica, Verdana, Arial, sans-serif !important; + +//Colors +$one__light: #fff !default; +$one__primary: #00A97F !default; +$one__sidebar-color: #fff !important; +$one__sidebar-color-hover: #e6f6f2 !default; +$one__sidebar-border: #E9E9E9 !important; +$one__sidebar_text: #00A97F !default; +$one__primary-light: #e6f6f2 !default; +$one__primary-dark: #009872 !important; +$one__light-font-primary: #575757 !important; +$one__light-font-secondary: #575757 !important; +$one__hover-bkg-light: #f5f5f5 !important; +$one__border-light: #d4d4d4 !important; +$one__info: #454555 !important; +//Border Style +$one__border: 3px; +$one__button-padding: auto; +//Misc +$transition-normal: all 0.4s linear !default; +$transition-fast: all 0.2s linear !default; + + +//Paths +$dots_menu_toggled: url('/vista_backend_theme/static/src/img/icons/dots-menu-green.png'); + + + +//Misc +$transition-normal: all 0.4s linear !default; + +//Animations +@mixin c_fadeBackgroundOut($name, $s_opacity, $e_opacity, $r, $g, $b){ + @keyframes #{$name}{ + 0%{ + background-color: rgba($r, $g, $b, $s_opacity); + } + + 100%{ + background-color: rgba($r, $g, $b, $e_opacity); + } + } +} + + + +body{ + background-color: $one__light !important; + font-family: $one__font; +} +//NAVBAR +.o_main_navbar { + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + background-color: $one__light; + border-bottom: none; + -moz-box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + -webkit-box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + box-shadow: rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.5) 0px 6px 6px; + color: $one__light-font-primary; + //height: 60px !important; +} + +.top_heading a.o_menu_brand{ + font-weight: bolder !important; +} + +.o_menu_systray > li{ + font-size: 1.5rem !important; + } + +.o_menu_systray > *{ + margin-right: 15px; + &:last-child{ + margin-right: 0px; + } + + @media (max-width: 767.98px) { + margin-right: 0px !important; + &:last-child{ + margin-right: 0px; + } + } +} +@media (max-width: 767.98px) { + .o_user_menu .o_user_avatar { + margin-right: 0px !important; + } +} + +li.o_MessagingMenu.o-is-open { + background-color: $one__hover-bkg-light; + border-bottom: none !important; +} +.o_mail_systray_item .o_notification_counter{ + background-color: $one__primary !important; + color: $one__light !important; +} +.o_MessagingMenu_counter { + margin-left: -12px !important; +} +.o_notification_counter{ + margin-left: -18px !important; +} +.o_NotificationGroup_date{ + color: $one__primary !important +} +.o_menu_sections > li > a, .o_main_navbar > li > label{ + color: $one__light-font-primary; + display: block !important; + &:hover{ + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; + } +} +.o_switch_company_menu > a{ + color: $one__light-font-primary; + font-size: 1.8rem !important +} +.oe_topbar_name{ + color: $one__light-font-primary; + + @media (max-width: 576px) { + display: none; + } +} +.o_main_navbar > a:hover, .o_main_navbar > a:focus, .o_main_navbar > button:hover, .o_main_navbar > button:focus { + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; +} + +.o_MessagingMenu, .o_mail_systray_item{ + a{ + color: $one__light-font-primary; + } +} +.o_MessagingMenu_counter, .o_notification_counter { + background-color: $one__primary; + color: $one__light; +} +.o_main_navbar .show .dropdowdropdown-toggle, .o_main_navbar .show .dropdown-toggle { + background-color: $one__hover-bkg-light; + //border-bottom: 1px solid $one__border-light; +} +.o_main_navbar .o_user_menu .oe_topbar_avatar { + height: 32px !important; + width: 32px !important; +} +.oe_topbar_name{ + color: $one__light-font-primary !important; +} +.o_dashboards .o_website_dashboard div.o_box h2, .o_dashboards .o_website_dashboard div.o_box h4 { + color: $one__primary !important; +} +.o_control_panel { + padding: 2.5rem 1rem !important; + margin-bottom: 1.5rem !important; + border-bottom: 1px solid $one__border-light; + width: 98%; + margin-left: auto; + margin-right: auto; +} +.o_form_view .oe_button_box .oe_stat_button .o_button_icon { + color: $one__primary; +} +.o_control_panel .breadcrumb{ + background-color: none !important; + padding: auto !important +} +.o_control_panel .breadcrumb > li, .breadcrumb-item > a{ + font-size: 2rem !important; + color: $one__light-font-secondary; + max-width: 100% !important; +} +.o_control_panel > div{ + display: flex; + justify-content: space-between; +} + +.breadcrumb-item.active{ + $color: $one__light-font-primary; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after, +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::before { + border-left-color: $one__primary !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after, +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before { + border-left-color: none !important; +} +.o_statusbar_status > .o_arrow_button.btn-secondary{ + background-color: $one__light !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled { + border-left: none !important; +} +// .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::before, +// .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child)::after { +// background-color: $one__light !important; +// } + + + +.o_content{ + width: 98%; + margin-left: auto; + margin-right: auto; +} +.top_heading{ + display: flex; + align-items: center; + ul.o_menu_apps{ + list-style: none; + margin: 0 0.8rem 0 0; + padding: 0px; + } + li.dropdown{ + list-style: none; + } + a.o_menu_brand{ + color: $one__light-font-primary; + font-size: 1.5rem !important; + } +} +.o_menu_sections, .o_menu_systray{ + display: flex; + align-items: center; + list-style: none !important; + //height: 60px !important; + + li{ + margin-right: 1rem; + + &:last-child{ + margin-right: 0 !important; + } + } + .o-dropdown.dropdown > .o-dropdown--menu{ + border-color: transparent; + } +} +.o_main_navbar .dropdown .dropdown-toggle, +.o_main_navbar .o_menu_sections .dropdown .dropdown-toggle, +.o_nav_entry +{ + color: $one__light-font-primary; +} +.o_menu_systray, .o_menu_sections{ + li{ + position: relative !important; + a.o_MessagingMenu_toggler, a.dropdown-toggle{ + display: flex !important; + align-items: center !important; + height: 60px !important; + padding: 0px 7.5px; + + img{ + margin-right: 0.8rem; + transform: none !important; + } + } + } +} +.o_main_navbar .dropdown-menu.show { + min-width: auto !important; +} +.o_form_view .o_form_uri > span:first-child { + color: $one__primary; +} +.o_onboarding_container{ + margin-top: -1.575rem !important; +} +.o_loading_indicator.o_loading > span { + background: $one__primary !important; +} +.o_menu_systray > li > a > span.fa{ + color: $one__light-font-primary; + font-size: 1.9rem !important; + margin: auto 11px !important; +} + +//`Custom` +.c_navbar_container{ + display: flex; + justify-content: center; + width: 100%; + margin-left: auto; + margin-right: auto; + padding: 0 1rem 0 0 !important; +} + +.c_sidebar_active{ + height: 46px; + width: 60px; + display: flex !important; + justify-content: center; + align-items: center; + background-color: $one__primary; + color: $one__light !important; + margin-right: 1.5rem !important; + clip-path: polygon(0 0, 100% 0%, 86% 100%, 0% 100%); + + &:hover{ + background-color: $one__primary-dark; + transition: $transition-normal; + } +} + +.c_sidebar_passive{ + height: 46px; + width: 60px; + display: flex !important; + justify-content: center; + align-items: center; + background-color: $one__light; + color: $one__primary !important; + clip-path: polygon(0 0, 100% 0%, 86% 100%, 0% 100%); +} + +//END OF NAVBAR +.dropdown-menu{ + border-radius: 0px; + a, .dropdown-item{ + color: $one__light-font-primary; + &:hover{ + color: $one__primary !important; + background-color: $one__primary-light; + transition: $transition-normal; + } + } +} +//Buttons + +.btn{ + border-radius: 0px; + + &:hover{ + filter: brightness(90%) !important; + box-shadow: none; + transition: $transition-normal; + } + +} + +.btn-primary{ + background-color: $one__primary !important; + border-color: $one__primary !important; + color: $one__light !important; + + &:hover{ + background-color: $one__primary-dark !important; + } + + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(235,240,253, 0.8); + } +} +.btn-secondary{ + background-color: $one__hover-bkg-light; + border-color: $one__hover-bkg-light; + color: $one__light-font-primary; + &:focus{ + box-shadow: 0 0 0 0.2rem rgba(245,245,245, 1); + } + + +} +.btn-fill-info, .btn-info { + background-color: $one__info; + border-color: $one__info; + color: $one__light; +} +.btn-group, .o_filter_menu{ + button, div.btn-group{ + margin-right: 3px; + &:last-child{ + margin-right: 0px !important; + } + } +} +.btn-link{ + color: $one__primary !important; + + &:hover{ + background-color: $one__hover-bkg-light !important; + } +} + +.o_control_panel .o_cp_bottom_left > .o_cp_action_menus .o_dropdown_toggler_btn, +.o_control_panel .o_cp_bottom_left > .o_cp_action_menus .dropdown-toggle + { + margin-right: 0px !important; +} +.o_activity_view .o_record_selector, .o_stat_value { + color: $one__primary !important; +} + +.o_web_settings_invite{ + height: 26px !important; + margin-top: 6px !important; +} + +.o_NotificationList{ + div:hover { + background-color: $one__primary-light; + } +} +.o_MessagingMenu_tabButton, .o_MessagingMenu_newMessageButton{ + color: $one__primary; + opacity: 0.8; + .o-active{ + opacity: 1; + font-weight: bold; + } +} +.o_ThreadPreview_date, .o_activity_filter_button, .o_mail_activity_action{ + color: $one__primary !important; + + &:before{ + color: $one__light-font-primary; + } + &:hover{ + color: $one__primary-dark !important; + } +} +//Controls +.custom-control.custom-checkbox .custom-control-input:not(:checked):not(:indeterminate) ~ .custom-control-label::before { + background: none; + outline: 1px solid $one__hover-bkg-light; +} +.custom-checkbox .custom-control-label::before { + border-radius: 0px; +} +.custom-control-input:checked ~ .custom-control-label::before { + color: $one__light; + border-color: $one__primary; + background-color: $one__primary; +} +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23FFFFFF' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); +} + +.o_input{ + border-radius: 0px !important; + border-color: $one__border-light; +} +.o_required_modifier.o_input, .o_required_modifier .o_input, .o_searchview .o_searchview_autocomplete li.o_selection_focus { + background-color: $one__primary-light !important; +} +.ui-menu-item > a{ + background-color: $one__light !important; + color: $one__primary !important; + &:hover, &:active, &:focus, &:focus-within, &:focus-visible, &:visited{ + color: $one__primary !important; + background-color: $one__primary-light !important; + } +} +.nav-tabs .nav-link { + border-radius: 0px !important; + border-top: 3px solid transparent !important; +} +.nav-tabs .nav-link.active { + border-top: 3px solid $one__primary !important; +} +.nav-tabs .nav-link:hover{ + border-top: 3px solid $one__primary !important; + color: $one__primary-dark; + transition: transition-normal !important; +} +.o_form_view .o_horizontal_separator { + color: $one__primary; +} +.panel-heading.note-toolbar { + background-color: $one__light !important; +} +div.o_boolean_toggle.custom-control.custom-checkbox > input.custom-control-input:checked + label.custom-control-label::before { + background-color: $one__primary !important; +} +//Misc. +.badge-primary{ + background-color: $one__primary; + border-radius: 0px; + padding: 5px; +} +//Links +a { + color: $one__primary; + text-decoration: none; + background-color: transparent; + + &hover{ + color: $one__primary-dark; + text-decoration: none; + transition: $transition-normal; + } +} +a.o_menu_brand{ + color: $one__light-font-primary; + font-weight: bold; +} +.o_form_uri{ + color: $one__primary !important; +} +.o_Message_prettyBody > div > p > a { + background-color: $one__primary !important; +} + +.o_onboarding_step_title > a { + color: $one__light; +} +.oe_kanban_action_a{ + color: $one__light-font-primary; +} + +.o_kanban_view .oe_kanban_card.oe_kanban_global_click:focus, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click:focus-within, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click_edit:focus, +.o_kanban_view .oe_kanban_card.oe_kanban_global_click_edit:focus-within, +.o_kanban_view .o_kanban_record.oe_kanban_global_click:focus, +.o_kanban_view .o_kanban_record.oe_kanban_global_click:focus-within, +.o_kanban_view .o_kanban_record.oe_kanban_global_click_edit:focus, +.o_kanban_view .o_kanban_record.oe_kanban_global_click_edit:focus-within{ + outline: thin solid $one__primary-light !important; +} + +//Tables +.o_list_view thead { + background-color: $one__hover-bkg-light; +} + +.o_list_view .o_list_table thead { + color: $one__light-font-secondary; + border-bottom: 1px solid $one__border-light; +} +.o_list_view .o_list_table thead > tr > th:not(.o_list_record_selector) { + border-left: none; +} +table thead th { + vertical-align: bottom; + border-top: none !important; + border-bottom: none !important; + padding: 1rem !important; +} +table-sm th, .table-sm td { + padding: 1rem !important; + border-top: none !important; +} +tr:nth-child(even){ + background-color: $one__hover-bkg-light; +} +.o_list_view .o_list_table tfoot { + background-color: $one__light; + filter: brightness(95.5%) !important; +} + +//Search +.o_searchview .o_searchview_facet, .o_setting_search { + background: $one__light; + border-radius: 0px !important; + border: 1px solid $one__border-light; + color: $one__light-font-secondary; +} +.o_searchview .o_searchview_facet .o_searchview_facet_label { + background-color: $one__light; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_searchview_facet_label { + color: $one__light-font-secondary; + margin: 0px -3px 3px 3px; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_facet_remove{ + bottom: 3px !important; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_facet_values { + padding: 2px 18px 0 5px !important; +} +.o_searchview{ + padding: 0.5rem !important; + border-radius: 0px; +} +.searchInput{ + border: none !important; +} +.searchIcon{ + margin: 5px 10px 0 0; +} +.o_setting_search { + padding: 5px; +} + +//Kanban +.oe_kanban_card{ + border-color: $one__border-light; + padding: 1rem !important; +} + +//Calendar +@include c_fadeBackgroundOut('fadeCalendarRow', 1, 0.6, 212, 212, 212 ); + +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-current-day.ui-datepicker-today a, +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-current-day a, +.o_calendar_view .o_calendar_widget .fc-dayGridMonth-view .fc-content-skeleton .fc-today .fc-day-number +{ + color: $one__light !important; + background-color: $one__primary !important; +} + +.o_calendar_sidebar_container .ui-datepicker td a{ + color: $one__light-font-secondary; +} +.o_calendar_sidebar_container .ui-datepicker td.ui-datepicker-today a{ + background-color: $one__border-light; +} + +.o_calendar_sidebar_container .ui-datepicker .o_selected_range.o_color:not(.ui-datepicker-unselectable) { + animation: fadeCalendarRow 2s forwards; +} + +.fc-now-indicator { + border-color: $one__primary !important; +} +.fc-ltr .fc-time-grid .fc-now-indicator-arrow { + left: 0; + border-width: 5px 0 5px 6px; + border-top-color: transparent !important; + border-bottom-color: transparent !important; +} + +.o_calendar_view .fc-view .fc-event.o_calendar_color_1.o_cw_custom_highlight { + box-shadow: 0 12px 12px -5px rgba(156, 181, 245, 0.8); + color: $one__primary; + font-weight: bold; +} +.o_calendar_view .fc-view .fc-event.o_calendar_color_1 .fc-bg { + background-color: $one__primary-light; +} +.o_calendar_view .fc-view .fc-event.o_calendar_color_1 { + border-color: $one__primary; + color: #274aa5; + opacity: 0.8; + + &:hover{ + background: $one__primary-light; + box-shadow: 0 12px 12px -5px rgba(156, 181, 245, 0.8); + } +} + +.bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover { + background-color: $one__primary !important; +} + +//Dashboard Sidebar +.o_Discuss, .o_setting_container{ + width: 98%; + margin-right: auto; + margin-left: auto; + border-top: none; +} +.o_widget_Discuss .o_Discuss_content { + border-top: none !important; +} +.o_DiscussSidebar, .settings_tab{ + color: $one__light-font-primary; + background-color: transparent !important; + border-right: 2px solid $one__border-light; + height: 95%; + margin-top: auto; + margin-bottom: auto; +} +.o_DiscussSidebarItem{ + padding: 0.4rem 0 !important; +} +.o_DiscussSidebarItem_activeIndicator.o-item-active{ + width: 0; + height: 0; + background: transparent; + margin-top: 0.375rem; + margin-right: 8px !important; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid $one__primary; +} +.o_DiscussSidebarItem:hover{ + background-color: transparent !important; + color: $one__primary; +} +.o_DiscussSidebar_separator{ + width: 95% !important; + margin-left: auto; + margin-right: auto; + background-color: transparent !important; +} +.o_MessageList{ + padding: 10px !important; +} + +.o_Message.o-not-discussion{ + background-color: $one__hover-bkg-light; + border-color: $one__border-light; +} + +//Settings + +.o_setting_container .settings_tab { + .app_name{ + color: $one__light-font-primary !important; + } +} + +.o_base_settings .o_control_panel .o_panel .o_setting_search .searchInput { + max-width: none !important; + margin: 4px 0 0 10px !important; +} + +.o_setting_container .settings_tab .tab{ + height: 30px !important; +} + +.o_setting_container .settings{ + padding: 10px !important; +} +.o_setting_container .settings_tab .app_name { + color: $one__light-font-primary; + + &:hover{ + color :$one__primary !important; + } +} +.o_setting_container .settings_tab .selected{ + background: transparent !important; + box-shadow: none !important; + position: relative; + + &:before{ + content: ""; + position: absolute; + width: 0; + height: 0; + top: 24%; + left: 0; + background: transparent; + margin-top: 0.375rem; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid $one__primary; + } + + .app_name{ + color: $one__light-font-primary; + + &:hover{ + color :$one__primary !important; + } + } +} + +.o_form_image_controls > .o_select_file_button{ + background: $one__primary !important; + color: $one__light; +} + +.o_search_panel .o_search_panel_category .o_search_panel_section_icon { + color: $one__primary; +} +.o_search_panel .list-group-item header.active { + background-color: $one__primary-light; + color: $one__primary; +} + +//Chat +.o_ChatWindowHeader{ + background-color: $one__primary !important; + color: $one__light !important; + border-radius: 0px !important; +} +//Tables +.o_purchase_dashboard .table > thead > tr > td.o_main, .o_purchase_dashboard .table tbody > tr > td.o_main { + background-color: $one__primary; + + &:hover{ + background-color: $one__primary-dark; + } + + a{ + color: $one__light; + } +} + +//Tags +.o_field_widget.o_field_many2manytags .o_tag_color_5, +.o_kanban_view .o_kanban_record .o_field_many2manytags .o_tag.o_tag_color_5 span, +.o_kanban_view .o_kanban_record .o_kanban_tags .o_tag.o_tag_color_5 span { + background-color: $one__primary; +} + +.badge-pill{ + a{ + color: $one__light; + } +} +.oe_kanban_card .o_kanban_tags .o_tag, .o_kanban_view .o_kanban_record .o_field_many2manytags .o_tag, .o_kanban_view .o_kanban_record .o_kanban_tags .o_tag { + background-color: transparent !important; +} + +.o-menu-toggle{ + display: none !important; +} +.c_dots_menu{ + background-image: url('/vista_backend_theme/static/src/img/icons/dots-menu.png'); + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} +.c_dots_menu_toggled{ + background-image: $dots_menu_toggled; + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} + +//Responsive Layout +@media (max-width: 767.98px) { + //Settings + .o_base_settings .o_setting_container { + flex-flow: column nowrap; + + .settings_tab{ + flex-direction: row; + height: 40px; + margin-top: -5px; + justify-content: center; + } + } + //App Bar + .o_control_panel > div { + flex-direction: column; + margin-bottom: 0.5rem; + } + .o_control_panel .breadcrumb > li, .breadcrumb-item > a { + font-size: 1.8rem !important; + margin-bottom: 0.5rem; + } + .o_control_panel .o_cp_top_right { + width: 100%; + margin-bottom: 0.5rem; + } + .o_search_panel .o_search_panel_section_header { + display: none; + } + .o_search_panel { + flex: 0 0 120px !important; + padding: 8px 8px 32px 0px !important; + } + //Discuss + .o_Discuss.o-mobile{ + width: 100% !important; + border-top: 1px solid $one__border-light; + } + .o_MobileMessagingNavbar_tab.o-active > span{ + color: $one__primary !important; + } +} + +//Border Radius +.btn, +.custom-checkbox .custom-control-label::before, +.o_searchview, +.dropdown-menu, +.o_searchview .o_searchview_facet +{ + border-radius: $one__border !important; +} + +#sidebar_panel { + height: 100%; + position: fixed; + top: 0px; + background-color: $one__sidebar-color; + border-right: 1px solid $one__sidebar-border; + display: none; + width: 80px; + overflow-y: scroll; + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + z-index: 999; +} +.sidebar_app_name{ + display: none; +} +#sidebar_panel::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari and Opera */ +} +.sidebar_menu{ + margin-top: 20px !important; +} +.sidebar > h6{ + color: $one__light; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 2px; + font-size: 0.9rem; + margin-left: auto; + margin-right: auto; + width: 38px; + display: block; + margin-top: 18px !important; +} +.sidebar_panel .sidebar { + padding: 0; + white-space: nowrap; + padding-bottom: 20px; + padding-top: 5px; +} +.sidebar_panel .sidebar_close { + text-align: end; + display: none; + position: sticky; + height: 35px; + padding-top: 5px; + top: 0; + background: #2a3042; + z-index: 1; +} +.sidebar_panel .sidebar_close a#closeSidebar { + font-size: 18px; + margin-right: 10px; + color: #ffffff; + opacity: .3; +} +.sidebar_panel .sidebar_close a#closeSidebar img { + width: 15px; +} +.sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 20px; +} +.sidebar_panel .sidebar .sidebar_logo img { + max-width: 150px; +} + +.sidebar_panel .sidebar .sidebar_head { + padding-top: 20px; + padding-left: none; + color: $one__sidebar_text; +} + +.sidebar_panel .sidebar .sidebar_menu { + list-style: none; + margin: 0; + padding: 0; +} + +.sidebar_panel .sidebar .sidebar_menu li { + margin: 0; + padding: 0; + border: 0px; + display: block; +} + +.sidebar_panel .sidebar .sidebar_menu li a { + margin: 0; + border: 0px; + display: block; + cursor: pointer; + overflow: hidden; + padding: 8px 10px 8px 25px; + color: #ffffff; + font-size: 13px; + transition:.3s all; +} +.sidebar_panel .sidebar .sidebar_menu li:hover a { + background: $one__sidebar-color-hover; + color: $one__light; +} + +.sidebar_panel .nav-link { + opacity: 1 !important; + transition:.3s all; +} +.sidebar_panel .sidebar a.nav-link.active { + color: $one__light !important; + border-left: 4px solid $one__light; + + img{ + margin-left: -0.5rem !important; + } +} + +.sidebar_panel .sidebar .sidebar_menu li a .sidebar_img { + width: 32px; + height: 32px; + margin: 8px 8px 8px 0; +} +.sidebar_menu > li a.nav-link{ + &:hover{ + transform: scale(1.05) !important; + transition: all 0.3s linear !important; + } +} + +.datepicker{ + z-index: 9999 !important; +} +div.dropdown-menu.bootstrap-datetimepicker-widget { + width: 28rem !important; +} +// .datepicker .table-sm > thead, +// .datepicker > div > table > tbody > tr > td.active{ +// background-color: $one__primary; +// } +// .datepicker .table-sm > thead > tr:first-child th:hover { +// background-color: $one__primary-dark; +// } +// .datepicker .table-sm > tbody > tr > td.today::before{ +// border-bottom-color: $one__primary; +// } diff --git a/vista_backend_theme/static/src/xml/systray.xml b/vista_backend_theme/static/src/xml/systray.xml new file mode 100644 index 00000000..7f3865b2 --- /dev/null +++ b/vista_backend_theme/static/src/xml/systray.xml @@ -0,0 +1,16 @@ + + + +
  • + +
  • +
    +
    \ No newline at end of file diff --git a/vista_backend_theme/static/src/xml/top_bar.xml b/vista_backend_theme/static/src/xml/top_bar.xml new file mode 100644 index 00000000..ba29b398 --- /dev/null +++ b/vista_backend_theme/static/src/xml/top_bar.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vista_backend_theme/views/assets.xml b/vista_backend_theme/views/assets.xml new file mode 100644 index 00000000..29675fee --- /dev/null +++ b/vista_backend_theme/views/assets.xml @@ -0,0 +1,34 @@ + + + Theme Vista Backend Green + web.assets_backend + replace + /vista_backend_theme/static/src/scss/theme.scss + /vista_backend_theme/static/src/scss/theme_green.scss + False + + + Theme Vista Backend Black + web.assets_backend + replace + /vista_backend_theme/static/src/scss/theme.scss + /vista_backend_theme/static/src/scss/theme_black.scss + False + + + Theme Vista frond + web.assets_frontend + replace + /vista_backend_theme/static/src/scss/login.scss + /vista_backend_theme/static/src/scss/login_black.scss + False + + + Theme Vista + web.assets_frontend + replace + /vista_backend_theme/static/src/scss/login.scss + /vista_backend_theme/static/src/scss/login_green.scss + False + + diff --git a/vista_backend_theme/views/icons.xml b/vista_backend_theme/views/icons.xml new file mode 100644 index 00000000..fd49b7c2 --- /dev/null +++ b/vista_backend_theme/views/icons.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/vista_backend_theme/views/layout.xml b/vista_backend_theme/views/layout.xml new file mode 100644 index 00000000..5b9b55e1 --- /dev/null +++ b/vista_backend_theme/views/layout.xml @@ -0,0 +1,131 @@ + + + + + + + + + \ No newline at end of file diff --git a/vista_backend_theme/views/res_config.xml b/vista_backend_theme/views/res_config.xml new file mode 100644 index 00000000..86514a18 --- /dev/null +++ b/vista_backend_theme/views/res_config.xml @@ -0,0 +1,33 @@ + + + + + + res.config.settings.web.window.title + res.config.settings + + +
    +

    视窗

    +
    +
    +
    + 标题 +
    + 自定义网站窗口标题 +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/vista_backend_theme/views/theme.xml b/vista_backend_theme/views/theme.xml new file mode 100644 index 00000000..3dbba597 --- /dev/null +++ b/vista_backend_theme/views/theme.xml @@ -0,0 +1,42 @@ + + + + + them.data.form + theme.data + +
    +
    +
    + + + + + + + +
    +
    +
    + + + theme data + theme.data + form + + new + + + + + + + + + +
    \ No newline at end of file diff --git a/vista_backend_theme/wizard/__init__.py b/vista_backend_theme/wizard/__init__.py new file mode 100644 index 00000000..0848c922 --- /dev/null +++ b/vista_backend_theme/wizard/__init__.py @@ -0,0 +1 @@ +from . import theme diff --git a/vista_backend_theme/wizard/theme.py b/vista_backend_theme/wizard/theme.py new file mode 100644 index 00000000..d9040183 --- /dev/null +++ b/vista_backend_theme/wizard/theme.py @@ -0,0 +1,527 @@ + +import base64 + +from odoo import models, fields, api +from odoo.modules import get_module_resource + + +class Theme(models.TransientModel): + _name = "theme.data" + + def _get_current_theme(self): + return self.env['theme.data.stored'].sudo().search([], limit=1).name + + name = fields.Selection([ + ('default', 'Default'), + ('two', 'Green'), + ('three', 'Black'), + ], 'Theme', required=True, default=_get_current_theme) + + @api.onchange('name') + def onchange_name(self): + theme = self.sudo().env.ref('vista_backend_theme.theme_data_stored') + if theme: + theme.name = self.name + else: + theme.create({ + 'name': self.name + }) + + def action_apply(self): + name = self.env['theme.data.stored'].sudo().search([], limit=1).name + if name == 'two': + self.env.ref('vista_backend_theme.vista_theme_css_black').active = False + self.env.ref('vista_backend_theme.vista_theme_css_login_black').active = False + self.env.ref('vista_backend_theme.vista_theme_css_green').active = True + self.env.ref('vista_backend_theme.vista_theme_css_login_green').active = True + self.icon_change_theme_green() + elif name == 'three': + self.env.ref('vista_backend_theme.vista_theme_css_green').active = False + self.env.ref('vista_backend_theme.vista_theme_css_login_green').active = False + self.env.ref('vista_backend_theme.vista_theme_css_black').active = True + self.env.ref('vista_backend_theme.vista_theme_css_login_black').active = True + self.icon_change_theme_default() + else: + self.env.ref('vista_backend_theme.vista_theme_css_green').active = False + self.env.ref('vista_backend_theme.vista_theme_css_black').active = False + self.env.ref('vista_backend_theme.vista_theme_css_login_green').active = False + self.env.ref('vista_backend_theme.vista_theme_css_login_black').active = False + self.icon_change_theme_default() + + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } + + def icon_change_theme_default(self): + menu_item = self.env['ir.ui.menu'].sudo().search([('parent_id', '=', False)]) + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'contacts.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'link-tracker.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'dashboards.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'sales.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Invoicing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'accounting.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Accounting': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'accounting.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'inventory.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'purchase.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'calendar.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'crm.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Note': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'note.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'website.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'pos.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'manufacturing.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'repairs.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'email-marketing.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'sms-marketing.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'project.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'surveys.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'employee.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'recruitment.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'attendances.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'timeoff.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'expenses.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'maintenance.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'live-chat.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'lunch.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'fleet.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'timesheets.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'events.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'elearning.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'members.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Apps': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'apps.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Discuss': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'discuss.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Settings': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', 'icons', + 'settinga.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + + def icon_change_theme_green(self): + menu_item = self.env['ir.ui.menu'].sudo().search([('parent_id', '=', False)]) + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'contacts.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'link-tracker.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'dashboards.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'sales.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Invoicing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'accounting.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'inventory.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'purchase.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'calendar.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'crm.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Note': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'note.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'website.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'pos.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'manufacturing.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'repairs.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'email-marketing.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'sms-marketing.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'project.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'surveys.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'employee.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'recruitment.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'attendances.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'timeoff.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'expenses.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'maintenance.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'live-chat.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'lunch.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'fleet.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'timesheets.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'events.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'elearning.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'members.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Apps': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'apps.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Discuss': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'discuss.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Settings': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'settinga.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + if menu.name == 'Accounting': + img_path = get_module_resource( + 'vista_backend_theme', 'static', 'src', 'img', + 'icons_green', + 'accounting.png') + menu.write({'web_icon_data': base64.b64encode( + open(img_path, "rb").read())}) + + +class ThemeStored(models.Model): + _name = "theme.data.stored" + + name = fields.Selection([ + ('default', 'Default'), + ('two', 'Green'), + ('three', 'Black'), + ], 'Theme', default='default')