You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

492 lines
18 KiB

  1. ###################################################################################
  2. #
  3. # Copyright (c) 2017-2019 MuK IT GmbH.
  4. #
  5. # This file is part of MuK Web Branding
  6. # (see https://mukit.at).
  7. #
  8. # This program is free software: you can redistribute it and/or modify
  9. # it under the terms of the GNU Lesser General Public License as published by
  10. # the Free Software Foundation, either version 3 of the License, or
  11. # (at your option) any later version.
  12. #
  13. # This program is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. # GNU Lesser General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU Lesser General Public License
  19. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. #
  21. ###################################################################################
  22. from odoo import api, fields, models
  23. PRIMARY_XML_ID = "muk_web_branding._assets_primary_variables"
  24. PRIMARY_SCSS_URL = "/muk_web_branding/static/src/scss/primary_colors.scss"
  25. SECONDARY_XML_ID = "muk_web_branding._assets_secondary_variables"
  26. SECONDARY_SCSS_URL = "/muk_web_branding/static/src/scss/secondary_colors.scss"
  27. BOOTSTRAP_XML_ID = "muk_web_branding._assets_backend_helpers"
  28. BOOTSTRAP_SCSS_URL = "/muk_web_branding/static/src/scss/bootstrap_colors.scss"
  29. class ResConfigSettings(models.TransientModel):
  30. _inherit = 'res.config.settings'
  31. #----------------------------------------------------------
  32. # Database
  33. #----------------------------------------------------------
  34. branding_color_brand = fields.Char(
  35. string="Brand Color")
  36. branding_color_primary = fields.Char(
  37. string="Primary Color")
  38. branding_color_secondary = fields.Char(
  39. string="Secondary Color")
  40. branding_color_lightsecondary = fields.Char(
  41. string="Light Secondary Color")
  42. branding_color_text = fields.Char(
  43. string="Text Color")
  44. branding_color_muted = fields.Char(
  45. string="Muted Color")
  46. branding_color_view = fields.Char(
  47. string="View Color")
  48. branding_color_background = fields.Char(
  49. string="Form Color")
  50. branding_color_notification_error = fields.Char(
  51. string="Notification Error Color")
  52. branding_color_notification_info = fields.Char(
  53. string="Notification Info Color")
  54. branding_color_01 = fields.Char(
  55. string="Color 01")
  56. branding_color_02 = fields.Char(
  57. string="Color 02")
  58. branding_color_03 = fields.Char(
  59. string="Color 03")
  60. branding_color_04 = fields.Char(
  61. string="Color 04")
  62. branding_color_05 = fields.Char(
  63. string="Color 05")
  64. branding_color_06 = fields.Char(
  65. string="Color 06")
  66. branding_color_07 = fields.Char(
  67. string="Color 07")
  68. branding_color_08 = fields.Char(
  69. string="Color 08")
  70. branding_color_09 = fields.Char(
  71. string="Color 09")
  72. branding_color_10 = fields.Char(
  73. string="Color 10")
  74. branding_color_11 = fields.Char(
  75. string="Color 11")
  76. branding_color_12 = fields.Char(
  77. string="Color 12")
  78. branding_color_success = fields.Char(
  79. string="Success Color")
  80. branding_color_info = fields.Char(
  81. string="Info Color")
  82. branding_color_warning = fields.Char(
  83. string="Warning Color")
  84. branding_color_danger = fields.Char(
  85. string="Danger Color")
  86. branding_color_light = fields.Char(
  87. string="Light Color")
  88. branding_color_dark = fields.Char(
  89. string="Dark Color")
  90. branding_color_white = fields.Char(
  91. string="White Color")
  92. branding_color_black = fields.Char(
  93. string="Black Color")
  94. branding_color_gray_100 = fields.Char(
  95. string="Gray 100 Color")
  96. branding_color_gray_200 = fields.Char(
  97. string="Gray 200 Color")
  98. branding_color_gray_300 = fields.Char(
  99. string="Gray 300 Color")
  100. branding_color_gray_400 = fields.Char(
  101. string="Gray 400 Color")
  102. branding_color_gray_500 = fields.Char(
  103. string="Gray 500 Color")
  104. branding_color_gray_600 = fields.Char(
  105. string="Gray 600 Color")
  106. branding_color_gray_700 = fields.Char(
  107. string="Gray 700 Color")
  108. branding_color_gray_800 = fields.Char(
  109. string="Gray 800 Color")
  110. branding_color_gray_900 = fields.Char(
  111. string="Gray 900 Color")
  112. #----------------------------------------------------------
  113. # Helper
  114. #----------------------------------------------------------
  115. def _get_branding_primary_colors(self):
  116. variables = [
  117. 'o-community-color',
  118. 'o-enterprise-color',
  119. 'o-enterprise-primary-color',
  120. 'o-brand-odoo',
  121. 'o-brand-primary',
  122. 'o-gray',
  123. 'o-brand-secondary',
  124. 'o-brand-lightsecondary',
  125. 'o-main-text-color',
  126. 'o-main-color-muted',
  127. 'o-view-background-color',
  128. 'o-notification-error-bg-color',
  129. 'o-notification-info-bg-color',
  130. ]
  131. colors = self.env['muk_utils.scss_editor'].get_values(
  132. PRIMARY_SCSS_URL, PRIMARY_XML_ID, variables
  133. )
  134. if colors['o-brand-odoo'] == '$o-community-color':
  135. colors['o-brand-odoo'] = colors['o-community-color']
  136. if colors['o-brand-odoo'] == '$o-enterprise-color':
  137. colors['o-brand-odoo'] = colors['o-enterprise-color']
  138. if colors['o-brand-primary'] == '$o-community-color':
  139. colors['o-brand-primary'] = colors['o-community-color']
  140. if colors['o-brand-primary'] == '$o-enterprise-primary-color':
  141. colors['o-brand-primary'] = colors['o-enterprise-primary-color']
  142. if colors['o-brand-secondary'] == '$o-gray-100':
  143. colors['o-brand-secondary'] = colors['o-gray-100']
  144. if colors['o-brand-lightsecondary'] == '$o-gray-100':
  145. colors['o-brand-lightsecondary'] = colors['o-gray-100']
  146. if colors['o-brand-lightsecondary'] == '$o-gray-100':
  147. colors['o-brand-lightsecondary'] = colors['o-gray-100']
  148. return {
  149. 'branding_color_brand': colors['o-brand-odoo'],
  150. 'branding_color_primary': colors['o-brand-primary'],
  151. 'branding_color_secondary': colors['o-brand-secondary'],
  152. 'branding_color_lightsecondary': colors['o-brand-lightsecondary'],
  153. 'branding_color_text': colors['o-main-text-color'],
  154. 'branding_color_muted': colors['o-main-color-muted'],
  155. 'branding_color_view': colors['o-view-background-color'],
  156. 'branding_color_notification_error': colors['o-notification-error-bg-color'],
  157. 'branding_color_notification_info': colors['o-notification-info-bg-color'],
  158. }
  159. def _get_branding_secondary_colors(self):
  160. variables = [
  161. 'o-webclient-background-color',
  162. 'mk-color-01',
  163. 'mk-color-02',
  164. 'mk-color-03',
  165. 'mk-color-04',
  166. 'mk-color-05',
  167. 'mk-color-06',
  168. 'mk-color-07',
  169. 'mk-color-08',
  170. 'mk-color-09',
  171. 'mk-color-10',
  172. 'mk-color-11',
  173. 'mk-color-12',
  174. ]
  175. colors = self.env['muk_utils.scss_editor'].get_values(
  176. SECONDARY_SCSS_URL, SECONDARY_XML_ID, variables
  177. )
  178. return {
  179. 'branding_color_background': colors['o-webclient-background-color'],
  180. 'branding_color_01': colors['mk-color-01'],
  181. 'branding_color_02': colors['mk-color-02'],
  182. 'branding_color_03': colors['mk-color-03'],
  183. 'branding_color_04': colors['mk-color-04'],
  184. 'branding_color_05': colors['mk-color-05'],
  185. 'branding_color_06': colors['mk-color-06'],
  186. 'branding_color_07': colors['mk-color-07'],
  187. 'branding_color_08': colors['mk-color-08'],
  188. 'branding_color_09': colors['mk-color-09'],
  189. 'branding_color_10': colors['mk-color-10'],
  190. 'branding_color_11': colors['mk-color-11'],
  191. 'branding_color_12': colors['mk-color-12'],
  192. }
  193. def _get_branding_bootstrap_colors(self):
  194. variables = [
  195. 'success',
  196. 'info',
  197. 'warning',
  198. 'danger',
  199. 'light',
  200. 'dark',
  201. 'white',
  202. 'black',
  203. 'gray-100',
  204. 'gray-200',
  205. 'gray-300',
  206. 'gray-400',
  207. 'gray-500',
  208. 'gray-600',
  209. 'gray-700',
  210. 'gray-800',
  211. 'gray-900',
  212. ]
  213. colors = self.env['muk_utils.scss_editor'].get_values(
  214. BOOTSTRAP_SCSS_URL, BOOTSTRAP_XML_ID, variables
  215. )
  216. return {
  217. 'branding_color_success': colors['success'],
  218. 'branding_color_info': colors['info'],
  219. 'branding_color_warning': colors['warning'],
  220. 'branding_color_danger': colors['danger'],
  221. 'branding_color_light': colors['light'],
  222. 'branding_color_dark': colors['dark'],
  223. 'branding_color_white': colors['white'],
  224. 'branding_color_black': colors['black'],
  225. 'branding_color_gray_100': colors['gray-100'],
  226. 'branding_color_gray_200': colors['gray-200'],
  227. 'branding_color_gray_300': colors['gray-300'],
  228. 'branding_color_gray_400': colors['gray-400'],
  229. 'branding_color_gray_500': colors['gray-500'],
  230. 'branding_color_gray_600': colors['gray-600'],
  231. 'branding_color_gray_700': colors['gray-700'],
  232. 'branding_color_gray_800': colors['gray-800'],
  233. 'branding_color_gray_900': colors['gray-900'],
  234. }
  235. def _check_branding_colors(self, colors, variables):
  236. for values in variables:
  237. if colors[values['field']] != values['value']:
  238. return True
  239. return False
  240. def _set_branding_primary_colors(self):
  241. variables = [{
  242. 'name': 'o-brand-odoo',
  243. 'field': 'branding_color_brand',
  244. 'value': self.branding_color_brand or "#7C7BAD"
  245. }, {
  246. 'name': 'o-brand-primary',
  247. 'field': 'branding_color_primary',
  248. 'value': self.branding_color_primary or "#7C7BAD"
  249. }, {
  250. 'name': 'o-brand-secondary',
  251. 'field': 'branding_color_secondary',
  252. 'value': self.branding_color_secondary or "#f0eeee"
  253. }, {
  254. 'name': 'o-brand-lightsecondary',
  255. 'field': 'branding_color_lightsecondary',
  256. 'value': self.branding_color_lightsecondary or "#e2e2e0"
  257. }, {
  258. 'name': 'o-main-text-color',
  259. 'field': 'branding_color_text',
  260. 'value': self.branding_color_text or "#4c4c4c"
  261. }, {
  262. 'name': 'o-main-color-muted',
  263. 'field': 'branding_color_muted',
  264. 'value': self.branding_color_muted or "#a8a8a8"
  265. }, {
  266. 'name': 'o-view-background-color',
  267. 'field': 'branding_color_view',
  268. 'value': self.branding_color_view or "#ffffff"
  269. }, {
  270. 'name': 'o-notification-error-bg-color',
  271. 'field': 'branding_color_notification_error',
  272. 'value': self.branding_color_notification_error or "#F16567"
  273. }, {
  274. 'name': 'o-notification-info-bg-color',
  275. 'field': 'branding_color_notification_info',
  276. 'value': self.branding_color_notification_info or "#FCFBEA"
  277. }]
  278. colors = self._get_branding_primary_colors()
  279. if self._check_branding_colors(colors, variables):
  280. self.env['muk_utils.scss_editor'].replace_values(
  281. PRIMARY_SCSS_URL, PRIMARY_XML_ID, variables
  282. )
  283. def _set_branding_secondary_colors(self):
  284. variables = [{
  285. 'name': 'o-webclient-background-color',
  286. 'field': 'branding_color_background',
  287. 'value': self.branding_color_background or "#f9f9f9"
  288. }, {
  289. 'name': 'mk-color-01',
  290. 'field': 'branding_color_01',
  291. 'value': self.branding_color_01 or "#757575"
  292. }, {
  293. 'name': 'mk-color-02',
  294. 'field': 'branding_color_02',
  295. 'value': self.branding_color_02 or "#F06050"
  296. }, {
  297. 'name': 'mk-color-03',
  298. 'field': 'branding_color_03',
  299. 'value': self.branding_color_03 or "#F4A460"
  300. }, {
  301. 'name': 'mk-color-04',
  302. 'field': 'branding_color_04',
  303. 'value': self.branding_color_04 or "#F7CD1F"
  304. }, {
  305. 'name': 'mk-color-05',
  306. 'field': 'branding_color_05',
  307. 'value': self.branding_color_05 or "#6CC1ED"
  308. }, {
  309. 'name': 'mk-color-06',
  310. 'field': 'branding_color_06',
  311. 'value': self.branding_color_06 or "#814968"
  312. }, {
  313. 'name': 'mk-color-07',
  314. 'field': 'branding_color_07',
  315. 'value': self.branding_color_07 or "#EB7E7F"
  316. }, {
  317. 'name': 'mk-color-08',
  318. 'field': 'branding_color_08',
  319. 'value': self.branding_color_08 or "#2C8397"
  320. }, {
  321. 'name': 'mk-color-09',
  322. 'field': 'branding_color_09',
  323. 'value': self.branding_color_09 or "#475577"
  324. }, {
  325. 'name': 'mk-color-10',
  326. 'field': 'branding_color_10',
  327. 'value': self.branding_color_10 or "#D6145F"
  328. }, {
  329. 'name': 'mk-color-11',
  330. 'field': 'branding_color_11',
  331. 'value': self.branding_color_11 or "#30C381"
  332. }, {
  333. 'name': 'mk-color-12',
  334. 'field': 'branding_color_12',
  335. 'value': self.branding_color_12 or "#9365B8"
  336. }]
  337. colors = self._get_branding_secondary_colors()
  338. if self._check_branding_colors(colors, variables):
  339. self.env['muk_utils.scss_editor'].replace_values(
  340. SECONDARY_SCSS_URL, SECONDARY_XML_ID, variables
  341. )
  342. def _set_branding_bootstrap_colors(self):
  343. variables = [{
  344. 'name': 'success',
  345. 'field': 'branding_color_success',
  346. 'value': self.branding_color_success or "#28a745"
  347. }, {
  348. 'name': 'info',
  349. 'field': 'branding_color_info',
  350. 'value': self.branding_color_info or "#17a2b8"
  351. }, {
  352. 'name': 'warning',
  353. 'field': 'branding_color_warning',
  354. 'value': self.branding_color_warning or "#ffc107"
  355. }, {
  356. 'name': 'danger',
  357. 'field': 'branding_color_danger',
  358. 'value': self.branding_color_danger or "#dc3545"
  359. }, {
  360. 'name': 'light',
  361. 'field': 'branding_color_light',
  362. 'value': self.branding_color_light or "#f8f9fa"
  363. }, {
  364. 'name': 'dark',
  365. 'field': 'branding_color_dark',
  366. 'value': self.branding_color_dark or "#343a40"
  367. }, {
  368. 'name': 'white',
  369. 'field': 'branding_color_white',
  370. 'value': self.branding_color_white or "#ffffff"
  371. }, {
  372. 'name': 'black',
  373. 'field': 'branding_color_black',
  374. 'value': self.branding_color_black or "#000000"
  375. }, {
  376. 'name': 'gray-100',
  377. 'field': 'branding_color_gray_100',
  378. 'value': self.branding_color_gray_100 or "#f8f9fa"
  379. }, {
  380. 'name': 'gray-200',
  381. 'field': 'branding_color_gray_200',
  382. 'value': self.branding_color_gray_200 or "#e9ecef"
  383. }, {
  384. 'name': 'gray-300',
  385. 'field': 'branding_color_gray_300',
  386. 'value': self.branding_color_gray_300 or "#dee2e6"
  387. }, {
  388. 'name': 'gray-400',
  389. 'field': 'branding_color_gray_400',
  390. 'value': self.branding_color_gray_400 or "#ced4da"
  391. }, {
  392. 'name': 'gray-500',
  393. 'field': 'branding_color_gray_500',
  394. 'value': self.branding_color_gray_500 or "#adb5bd"
  395. }, {
  396. 'name': 'gray-600',
  397. 'field': 'branding_color_gray_600',
  398. 'value': self.branding_color_gray_600 or "#6c757d"
  399. }, {
  400. 'name': 'gray-700',
  401. 'field': 'branding_color_gray_700',
  402. 'value': self.branding_color_gray_700 or "#495057"
  403. }, {
  404. 'name': 'gray-800',
  405. 'field': 'branding_color_gray_800',
  406. 'value': self.branding_color_gray_800 or "#343a40"
  407. }, {
  408. 'name': 'gray-900',
  409. 'field': 'branding_color_gray_900',
  410. 'value': self.branding_color_gray_900 or "#212529"
  411. }]
  412. colors = self._get_branding_bootstrap_colors()
  413. if self._check_branding_colors(colors, variables):
  414. self.env['muk_utils.scss_editor'].replace_values(
  415. BOOTSTRAP_SCSS_URL, BOOTSTRAP_XML_ID, variables
  416. )
  417. #----------------------------------------------------------
  418. # Functions
  419. #----------------------------------------------------------
  420. @api.model
  421. def get_values(self):
  422. res = super(ResConfigSettings, self).get_values()
  423. res.update(self._get_branding_primary_colors())
  424. res.update(self._get_branding_secondary_colors())
  425. res.update(self._get_branding_bootstrap_colors())
  426. return res
  427. @api.multi
  428. def set_values(self):
  429. res = super(ResConfigSettings, self).set_values()
  430. self._set_branding_primary_colors()
  431. self._set_branding_secondary_colors()
  432. self._set_branding_bootstrap_colors()
  433. return res