odoo-addon-account-dashboard-banner 16.0.1.0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/account_dashboard_banner/README.rst +151 -0
- odoo/addons/account_dashboard_banner/__init__.py +2 -0
- odoo/addons/account_dashboard_banner/__manifest__.py +29 -0
- odoo/addons/account_dashboard_banner/i18n/account_dashboard_banner.pot +259 -0
- odoo/addons/account_dashboard_banner/i18n/fr.po +287 -0
- odoo/addons/account_dashboard_banner/i18n/it.po +274 -0
- odoo/addons/account_dashboard_banner/models/__init__.py +1 -0
- odoo/addons/account_dashboard_banner/models/account_dashboard_banner_cell.py +331 -0
- odoo/addons/account_dashboard_banner/post_install.py +28 -0
- odoo/addons/account_dashboard_banner/readme/CONFIGURE.md +33 -0
- odoo/addons/account_dashboard_banner/readme/CONTRIBUTORS.md +1 -0
- odoo/addons/account_dashboard_banner/readme/DESCRIPTION.md +13 -0
- odoo/addons/account_dashboard_banner/readme/USAGE.md +3 -0
- odoo/addons/account_dashboard_banner/security/ir.model.access.csv +4 -0
- odoo/addons/account_dashboard_banner/static/description/account_dashboard_banner.png +0 -0
- odoo/addons/account_dashboard_banner/static/description/banner_cell_config.png +0 -0
- odoo/addons/account_dashboard_banner/static/description/cell_form_with_warning.png +0 -0
- odoo/addons/account_dashboard_banner/static/description/icon.png +0 -0
- odoo/addons/account_dashboard_banner/static/description/index.html +483 -0
- odoo/addons/account_dashboard_banner/static/src/views/account_dashboard_kanban_banner.esm.js +47 -0
- odoo/addons/account_dashboard_banner/static/src/views/account_dashboard_kanban_banner.xml +49 -0
- odoo/addons/account_dashboard_banner/tests/__init__.py +1 -0
- odoo/addons/account_dashboard_banner/tests/test_banner.py +56 -0
- odoo/addons/account_dashboard_banner/views/account_dashboard_banner_cell.xml +92 -0
- odoo/addons/account_dashboard_banner/views/account_journal_dashboard.xml +19 -0
- odoo_addon_account_dashboard_banner-16.0.1.0.1.1.dist-info/METADATA +168 -0
- odoo_addon_account_dashboard_banner-16.0.1.0.1.1.dist-info/RECORD +29 -0
- odoo_addon_account_dashboard_banner-16.0.1.0.1.1.dist-info/WHEEL +5 -0
- odoo_addon_account_dashboard_banner-16.0.1.0.1.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
5
|
+
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
|
6
|
+
<title>README.rst</title>
|
|
7
|
+
<style type="text/css">
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
:Author: David Goodger (goodger@python.org)
|
|
11
|
+
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
|
12
|
+
:Copyright: This stylesheet has been placed in the public domain.
|
|
13
|
+
|
|
14
|
+
Default cascading style sheet for the HTML output of Docutils.
|
|
15
|
+
Despite the name, some widely supported CSS2 features are used.
|
|
16
|
+
|
|
17
|
+
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
|
18
|
+
customize this style sheet.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/* used to remove borders from tables and images */
|
|
22
|
+
.borderless, table.borderless td, table.borderless th {
|
|
23
|
+
border: 0 }
|
|
24
|
+
|
|
25
|
+
table.borderless td, table.borderless th {
|
|
26
|
+
/* Override padding for "table.docutils td" with "! important".
|
|
27
|
+
The right padding separates the table cells. */
|
|
28
|
+
padding: 0 0.5em 0 0 ! important }
|
|
29
|
+
|
|
30
|
+
.first {
|
|
31
|
+
/* Override more specific margin styles with "! important". */
|
|
32
|
+
margin-top: 0 ! important }
|
|
33
|
+
|
|
34
|
+
.last, .with-subtitle {
|
|
35
|
+
margin-bottom: 0 ! important }
|
|
36
|
+
|
|
37
|
+
.hidden {
|
|
38
|
+
display: none }
|
|
39
|
+
|
|
40
|
+
.subscript {
|
|
41
|
+
vertical-align: sub;
|
|
42
|
+
font-size: smaller }
|
|
43
|
+
|
|
44
|
+
.superscript {
|
|
45
|
+
vertical-align: super;
|
|
46
|
+
font-size: smaller }
|
|
47
|
+
|
|
48
|
+
a.toc-backref {
|
|
49
|
+
text-decoration: none ;
|
|
50
|
+
color: black }
|
|
51
|
+
|
|
52
|
+
blockquote.epigraph {
|
|
53
|
+
margin: 2em 5em ; }
|
|
54
|
+
|
|
55
|
+
dl.docutils dd {
|
|
56
|
+
margin-bottom: 0.5em }
|
|
57
|
+
|
|
58
|
+
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
63
|
+
dl.docutils dt {
|
|
64
|
+
font-weight: bold }
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
div.abstract {
|
|
68
|
+
margin: 2em 5em }
|
|
69
|
+
|
|
70
|
+
div.abstract p.topic-title {
|
|
71
|
+
font-weight: bold ;
|
|
72
|
+
text-align: center }
|
|
73
|
+
|
|
74
|
+
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
75
|
+
div.hint, div.important, div.note, div.tip, div.warning {
|
|
76
|
+
margin: 2em ;
|
|
77
|
+
border: medium outset ;
|
|
78
|
+
padding: 1em }
|
|
79
|
+
|
|
80
|
+
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
81
|
+
div.important p.admonition-title, div.note p.admonition-title,
|
|
82
|
+
div.tip p.admonition-title {
|
|
83
|
+
font-weight: bold ;
|
|
84
|
+
font-family: sans-serif }
|
|
85
|
+
|
|
86
|
+
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
87
|
+
div.danger p.admonition-title, div.error p.admonition-title,
|
|
88
|
+
div.warning p.admonition-title, .code .error {
|
|
89
|
+
color: red ;
|
|
90
|
+
font-weight: bold ;
|
|
91
|
+
font-family: sans-serif }
|
|
92
|
+
|
|
93
|
+
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
94
|
+
compound paragraphs.
|
|
95
|
+
div.compound .compound-first, div.compound .compound-middle {
|
|
96
|
+
margin-bottom: 0.5em }
|
|
97
|
+
|
|
98
|
+
div.compound .compound-last, div.compound .compound-middle {
|
|
99
|
+
margin-top: 0.5em }
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
div.dedication {
|
|
103
|
+
margin: 2em 5em ;
|
|
104
|
+
text-align: center ;
|
|
105
|
+
font-style: italic }
|
|
106
|
+
|
|
107
|
+
div.dedication p.topic-title {
|
|
108
|
+
font-weight: bold ;
|
|
109
|
+
font-style: normal }
|
|
110
|
+
|
|
111
|
+
div.figure {
|
|
112
|
+
margin-left: 2em ;
|
|
113
|
+
margin-right: 2em }
|
|
114
|
+
|
|
115
|
+
div.footer, div.header {
|
|
116
|
+
clear: both;
|
|
117
|
+
font-size: smaller }
|
|
118
|
+
|
|
119
|
+
div.line-block {
|
|
120
|
+
display: block ;
|
|
121
|
+
margin-top: 1em ;
|
|
122
|
+
margin-bottom: 1em }
|
|
123
|
+
|
|
124
|
+
div.line-block div.line-block {
|
|
125
|
+
margin-top: 0 ;
|
|
126
|
+
margin-bottom: 0 ;
|
|
127
|
+
margin-left: 1.5em }
|
|
128
|
+
|
|
129
|
+
div.sidebar {
|
|
130
|
+
margin: 0 0 0.5em 1em ;
|
|
131
|
+
border: medium outset ;
|
|
132
|
+
padding: 1em ;
|
|
133
|
+
background-color: #ffffee ;
|
|
134
|
+
width: 40% ;
|
|
135
|
+
float: right ;
|
|
136
|
+
clear: right }
|
|
137
|
+
|
|
138
|
+
div.sidebar p.rubric {
|
|
139
|
+
font-family: sans-serif ;
|
|
140
|
+
font-size: medium }
|
|
141
|
+
|
|
142
|
+
div.system-messages {
|
|
143
|
+
margin: 5em }
|
|
144
|
+
|
|
145
|
+
div.system-messages h1 {
|
|
146
|
+
color: red }
|
|
147
|
+
|
|
148
|
+
div.system-message {
|
|
149
|
+
border: medium outset ;
|
|
150
|
+
padding: 1em }
|
|
151
|
+
|
|
152
|
+
div.system-message p.system-message-title {
|
|
153
|
+
color: red ;
|
|
154
|
+
font-weight: bold }
|
|
155
|
+
|
|
156
|
+
div.topic {
|
|
157
|
+
margin: 2em }
|
|
158
|
+
|
|
159
|
+
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
160
|
+
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
161
|
+
margin-top: 0.4em }
|
|
162
|
+
|
|
163
|
+
h1.title {
|
|
164
|
+
text-align: center }
|
|
165
|
+
|
|
166
|
+
h2.subtitle {
|
|
167
|
+
text-align: center }
|
|
168
|
+
|
|
169
|
+
hr.docutils {
|
|
170
|
+
width: 75% }
|
|
171
|
+
|
|
172
|
+
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
|
173
|
+
clear: left ;
|
|
174
|
+
float: left ;
|
|
175
|
+
margin-right: 1em }
|
|
176
|
+
|
|
177
|
+
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
|
178
|
+
clear: right ;
|
|
179
|
+
float: right ;
|
|
180
|
+
margin-left: 1em }
|
|
181
|
+
|
|
182
|
+
img.align-center, .figure.align-center, object.align-center {
|
|
183
|
+
display: block;
|
|
184
|
+
margin-left: auto;
|
|
185
|
+
margin-right: auto;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
table.align-center {
|
|
189
|
+
margin-left: auto;
|
|
190
|
+
margin-right: auto;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.align-left {
|
|
194
|
+
text-align: left }
|
|
195
|
+
|
|
196
|
+
.align-center {
|
|
197
|
+
clear: both ;
|
|
198
|
+
text-align: center }
|
|
199
|
+
|
|
200
|
+
.align-right {
|
|
201
|
+
text-align: right }
|
|
202
|
+
|
|
203
|
+
/* reset inner alignment in figures */
|
|
204
|
+
div.align-right {
|
|
205
|
+
text-align: inherit }
|
|
206
|
+
|
|
207
|
+
/* div.align-center * { */
|
|
208
|
+
/* text-align: left } */
|
|
209
|
+
|
|
210
|
+
.align-top {
|
|
211
|
+
vertical-align: top }
|
|
212
|
+
|
|
213
|
+
.align-middle {
|
|
214
|
+
vertical-align: middle }
|
|
215
|
+
|
|
216
|
+
.align-bottom {
|
|
217
|
+
vertical-align: bottom }
|
|
218
|
+
|
|
219
|
+
ol.simple, ul.simple {
|
|
220
|
+
margin-bottom: 1em }
|
|
221
|
+
|
|
222
|
+
ol.arabic {
|
|
223
|
+
list-style: decimal }
|
|
224
|
+
|
|
225
|
+
ol.loweralpha {
|
|
226
|
+
list-style: lower-alpha }
|
|
227
|
+
|
|
228
|
+
ol.upperalpha {
|
|
229
|
+
list-style: upper-alpha }
|
|
230
|
+
|
|
231
|
+
ol.lowerroman {
|
|
232
|
+
list-style: lower-roman }
|
|
233
|
+
|
|
234
|
+
ol.upperroman {
|
|
235
|
+
list-style: upper-roman }
|
|
236
|
+
|
|
237
|
+
p.attribution {
|
|
238
|
+
text-align: right ;
|
|
239
|
+
margin-left: 50% }
|
|
240
|
+
|
|
241
|
+
p.caption {
|
|
242
|
+
font-style: italic }
|
|
243
|
+
|
|
244
|
+
p.credits {
|
|
245
|
+
font-style: italic ;
|
|
246
|
+
font-size: smaller }
|
|
247
|
+
|
|
248
|
+
p.label {
|
|
249
|
+
white-space: nowrap }
|
|
250
|
+
|
|
251
|
+
p.rubric {
|
|
252
|
+
font-weight: bold ;
|
|
253
|
+
font-size: larger ;
|
|
254
|
+
color: maroon ;
|
|
255
|
+
text-align: center }
|
|
256
|
+
|
|
257
|
+
p.sidebar-title {
|
|
258
|
+
font-family: sans-serif ;
|
|
259
|
+
font-weight: bold ;
|
|
260
|
+
font-size: larger }
|
|
261
|
+
|
|
262
|
+
p.sidebar-subtitle {
|
|
263
|
+
font-family: sans-serif ;
|
|
264
|
+
font-weight: bold }
|
|
265
|
+
|
|
266
|
+
p.topic-title {
|
|
267
|
+
font-weight: bold }
|
|
268
|
+
|
|
269
|
+
pre.address {
|
|
270
|
+
margin-bottom: 0 ;
|
|
271
|
+
margin-top: 0 ;
|
|
272
|
+
font: inherit }
|
|
273
|
+
|
|
274
|
+
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
|
275
|
+
margin-left: 2em ;
|
|
276
|
+
margin-right: 2em }
|
|
277
|
+
|
|
278
|
+
pre.code .ln { color: gray; } /* line numbers */
|
|
279
|
+
pre.code, code { background-color: #eeeeee }
|
|
280
|
+
pre.code .comment, code .comment { color: #5C6576 }
|
|
281
|
+
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
|
282
|
+
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
|
283
|
+
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
|
284
|
+
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
|
285
|
+
pre.code .inserted, code .inserted { background-color: #A3D289}
|
|
286
|
+
|
|
287
|
+
span.classifier {
|
|
288
|
+
font-family: sans-serif ;
|
|
289
|
+
font-style: oblique }
|
|
290
|
+
|
|
291
|
+
span.classifier-delimiter {
|
|
292
|
+
font-family: sans-serif ;
|
|
293
|
+
font-weight: bold }
|
|
294
|
+
|
|
295
|
+
span.interpreted {
|
|
296
|
+
font-family: sans-serif }
|
|
297
|
+
|
|
298
|
+
span.option {
|
|
299
|
+
white-space: nowrap }
|
|
300
|
+
|
|
301
|
+
span.pre {
|
|
302
|
+
white-space: pre }
|
|
303
|
+
|
|
304
|
+
span.problematic, pre.problematic {
|
|
305
|
+
color: red }
|
|
306
|
+
|
|
307
|
+
span.section-subtitle {
|
|
308
|
+
/* font-size relative to parent (h1..h6 element) */
|
|
309
|
+
font-size: 80% }
|
|
310
|
+
|
|
311
|
+
table.citation {
|
|
312
|
+
border-left: solid 1px gray;
|
|
313
|
+
margin-left: 1px }
|
|
314
|
+
|
|
315
|
+
table.docinfo {
|
|
316
|
+
margin: 2em 4em }
|
|
317
|
+
|
|
318
|
+
table.docutils {
|
|
319
|
+
margin-top: 0.5em ;
|
|
320
|
+
margin-bottom: 0.5em }
|
|
321
|
+
|
|
322
|
+
table.footnote {
|
|
323
|
+
border-left: solid 1px black;
|
|
324
|
+
margin-left: 1px }
|
|
325
|
+
|
|
326
|
+
table.docutils td, table.docutils th,
|
|
327
|
+
table.docinfo td, table.docinfo th {
|
|
328
|
+
padding-left: 0.5em ;
|
|
329
|
+
padding-right: 0.5em ;
|
|
330
|
+
vertical-align: top }
|
|
331
|
+
|
|
332
|
+
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
333
|
+
font-weight: bold ;
|
|
334
|
+
text-align: left ;
|
|
335
|
+
white-space: nowrap ;
|
|
336
|
+
padding-left: 0 }
|
|
337
|
+
|
|
338
|
+
/* "booktabs" style (no vertical lines) */
|
|
339
|
+
table.docutils.booktabs {
|
|
340
|
+
border: 0px;
|
|
341
|
+
border-top: 2px solid;
|
|
342
|
+
border-bottom: 2px solid;
|
|
343
|
+
border-collapse: collapse;
|
|
344
|
+
}
|
|
345
|
+
table.docutils.booktabs * {
|
|
346
|
+
border: 0px;
|
|
347
|
+
}
|
|
348
|
+
table.docutils.booktabs th {
|
|
349
|
+
border-bottom: thin solid;
|
|
350
|
+
text-align: left;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
354
|
+
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
355
|
+
font-size: 100% }
|
|
356
|
+
|
|
357
|
+
ul.auto-toc {
|
|
358
|
+
list-style-type: none }
|
|
359
|
+
|
|
360
|
+
</style>
|
|
361
|
+
</head>
|
|
362
|
+
<body>
|
|
363
|
+
<div class="document">
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
|
|
367
|
+
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
|
|
368
|
+
</a>
|
|
369
|
+
<div class="section" id="account-dashboard-banner">
|
|
370
|
+
<h1>Account Dashboard Banner</h1>
|
|
371
|
+
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
372
|
+
!! This file is generated by oca-gen-addon-readme !!
|
|
373
|
+
!! changes will be overwritten. !!
|
|
374
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
375
|
+
!! source digest: sha256:e802752b049f891ea4c459b60097080416380c8c6115bdbd57801d7edbbc8a09
|
|
376
|
+
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
377
|
+
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/account-financial-tools/tree/16.0/account_dashboard_banner"><img alt="OCA/account-financial-tools" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/account-financial-tools-16-0/account-financial-tools-16-0-account_dashboard_banner"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/account-financial-tools&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
378
|
+
<p>The development of this module started with a simple analysis:
|
|
379
|
+
accountants tend to forget to update the lock dates. Part of the problem
|
|
380
|
+
lies in the fact that the lock dates can be seen in the wizard to update
|
|
381
|
+
the lock dates, but accountants have no incentive to start this wizard
|
|
382
|
+
regularly to check the lock dates. The idea was to display the lock
|
|
383
|
+
dates in a banner at the top of the accounting dashboard, so that
|
|
384
|
+
accountants have the value of the lock dates in front of their eyes.</p>
|
|
385
|
+
<p>With such a banner in the accounting dashboard to display the lock
|
|
386
|
+
dates, there was a great temptation to display other interesting
|
|
387
|
+
information in that banner, such as some key figures of the accounting:
|
|
388
|
+
liquidity, turnover, customer overdue, etc. It gave birth to the idea to
|
|
389
|
+
have a configurable banner in the accounting dashboard!</p>
|
|
390
|
+
<p><strong>Table of contents</strong></p>
|
|
391
|
+
<div class="contents local topic" id="contents">
|
|
392
|
+
<ul class="simple">
|
|
393
|
+
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
|
394
|
+
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
|
395
|
+
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
|
|
396
|
+
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
|
|
397
|
+
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
|
|
398
|
+
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
|
|
399
|
+
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
|
|
400
|
+
</ul>
|
|
401
|
+
</li>
|
|
402
|
+
</ul>
|
|
403
|
+
</div>
|
|
404
|
+
<div class="section" id="configuration">
|
|
405
|
+
<h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
|
|
406
|
+
<p>Go to the menu <strong>Invoicing > Configuration > Dashboard > Dashboard
|
|
407
|
+
Banner Cells</strong>: in this menu, you can add or remove cells from the
|
|
408
|
+
banner, change the cell type, modify the order via drag-and-drop,
|
|
409
|
+
customize the labels if necessary.</p>
|
|
410
|
+
<p><img alt="Cell configuration menu" src="https://raw.githubusercontent.com/OCA/account-financial-tools/16.0/account_dashboard_banner/static/description/banner_cell_config.png" /></p>
|
|
411
|
+
<p>Many cell types are available:</p>
|
|
412
|
+
<ul class="simple">
|
|
413
|
+
<li><strong>Income</strong> with 4 options: <em>Fiscal Year-to-date Income</em>, <em>Year-to-date
|
|
414
|
+
Income</em>, <em>Quarter-to-date Income</em> and <em>Month-to-date Income</em>. It
|
|
415
|
+
displays the period balance of the accounts with type <em>Income</em> and
|
|
416
|
+
<em>Other Income</em>.</li>
|
|
417
|
+
<li><strong>Liquidity</strong>: it display the ending balance of the accounts linked to
|
|
418
|
+
a bank or cash or credit journal.</li>
|
|
419
|
+
<li><strong>Customer Debt</strong>: it displays the ending balance of the default
|
|
420
|
+
<em>Account Receivable</em> and, if the point of sale is installed, the
|
|
421
|
+
intermediary account used for unidentified customers.</li>
|
|
422
|
+
<li><strong>Customer Overdue</strong>: same as the <em>Customer Debt</em>, but limited to
|
|
423
|
+
journal items with a due date in the past.</li>
|
|
424
|
+
<li><strong>Supplier Debt</strong>: it displays the ending balance of the default
|
|
425
|
+
<em>Account Payable</em>.</li>
|
|
426
|
+
<li><strong>Lock dates</strong>: all the lock dates are available: <em>Tax Return Lock
|
|
427
|
+
Date</em>, <em>Journals Entries Lock Date</em> and <em>All Users Lock Date</em>.</li>
|
|
428
|
+
</ul>
|
|
429
|
+
<p>The module is designed to allow the modification of the computation of
|
|
430
|
+
the different cell types by inheriting the method
|
|
431
|
+
<em>_prepare_cell_data_<cell_type>()</em> or <em>_prepare_cell_data()</em>. It is
|
|
432
|
+
also easy for a developper to add more cell types.</p>
|
|
433
|
+
<p>It is possible to display a cell as a warning cell (yellow background
|
|
434
|
+
color instead of light grey): click on the <em>Warning</em> option and
|
|
435
|
+
customize the conditions to trigger the warning.</p>
|
|
436
|
+
<p><img alt="Cell form with warning" src="https://raw.githubusercontent.com/OCA/account-financial-tools/16.0/account_dashboard_banner/static/description/cell_form_with_warning.png" /></p>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="section" id="usage">
|
|
439
|
+
<h2><a class="toc-backref" href="#toc-entry-2">Usage</a></h2>
|
|
440
|
+
<p>Enjoy the accounting dashboard with the banner at the top:</p>
|
|
441
|
+
<p><img alt="Accounting dashboard with banner" src="https://raw.githubusercontent.com/OCA/account-financial-tools/16.0/account_dashboard_banner/static/description/account_dashboard_banner.png" /></p>
|
|
442
|
+
</div>
|
|
443
|
+
<div class="section" id="bug-tracker">
|
|
444
|
+
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
|
|
445
|
+
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-financial-tools/issues">GitHub Issues</a>.
|
|
446
|
+
In case of trouble, please check there if your issue has already been reported.
|
|
447
|
+
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
448
|
+
<a class="reference external" href="https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_dashboard_banner%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
|
449
|
+
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
|
450
|
+
</div>
|
|
451
|
+
<div class="section" id="credits">
|
|
452
|
+
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
|
|
453
|
+
<div class="section" id="authors">
|
|
454
|
+
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
|
|
455
|
+
<ul class="simple">
|
|
456
|
+
<li>Akretion</li>
|
|
457
|
+
</ul>
|
|
458
|
+
</div>
|
|
459
|
+
<div class="section" id="contributors">
|
|
460
|
+
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
|
|
461
|
+
<ul class="simple">
|
|
462
|
+
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
|
463
|
+
</ul>
|
|
464
|
+
</div>
|
|
465
|
+
<div class="section" id="maintainers">
|
|
466
|
+
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
|
|
467
|
+
<p>This module is maintained by the OCA.</p>
|
|
468
|
+
<a class="reference external image-reference" href="https://odoo-community.org">
|
|
469
|
+
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
|
470
|
+
</a>
|
|
471
|
+
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
|
472
|
+
mission is to support the collaborative development of Odoo features and
|
|
473
|
+
promote its widespread use.</p>
|
|
474
|
+
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
|
475
|
+
<p><a class="reference external image-reference" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
|
|
476
|
+
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/16.0/account_dashboard_banner">OCA/account-financial-tools</a> project on GitHub.</p>
|
|
477
|
+
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
|
478
|
+
</div>
|
|
479
|
+
</div>
|
|
480
|
+
</div>
|
|
481
|
+
</div>
|
|
482
|
+
</body>
|
|
483
|
+
</html>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** @odoo-module **/
|
|
2
|
+
/*
|
|
3
|
+
Copyright 2025 Akretion France (https://www.akretion.com/)
|
|
4
|
+
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
|
5
|
+
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
AccountDropZone,
|
|
10
|
+
DashboardKanbanRecord,
|
|
11
|
+
DashboardKanbanRenderer,
|
|
12
|
+
} from "@account/components/bills_upload/bills_upload";
|
|
13
|
+
import {kanbanView} from "@web/views/kanban/kanban_view";
|
|
14
|
+
import {onWillStart} from "@odoo/owl";
|
|
15
|
+
import {registry} from "@web/core/registry";
|
|
16
|
+
import {useService} from "@web/core/utils/hooks";
|
|
17
|
+
|
|
18
|
+
export class DashboardKanbanRendererBanner extends DashboardKanbanRenderer {
|
|
19
|
+
setup() {
|
|
20
|
+
super.setup();
|
|
21
|
+
this.orm = useService("orm");
|
|
22
|
+
|
|
23
|
+
onWillStart(async () => {
|
|
24
|
+
this.state.banner = await this.orm.call(
|
|
25
|
+
"account.dashboard.banner.cell",
|
|
26
|
+
"get_banner_data"
|
|
27
|
+
);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
DashboardKanbanRendererBanner.components = {
|
|
33
|
+
...DashboardKanbanRenderer.components,
|
|
34
|
+
AccountDropZone,
|
|
35
|
+
KanbanRecord: DashboardKanbanRecord,
|
|
36
|
+
};
|
|
37
|
+
DashboardKanbanRendererBanner.template =
|
|
38
|
+
"account_dashboard_banner.AccountDashboardBannerRenderer";
|
|
39
|
+
|
|
40
|
+
export const accountDashboardKanbanBanner = {
|
|
41
|
+
...kanbanView,
|
|
42
|
+
Renderer: DashboardKanbanRendererBanner,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
registry
|
|
46
|
+
.category("views")
|
|
47
|
+
.add("account_dashboard_kanban_banner", accountDashboardKanbanBanner);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
|
2
|
+
<!--
|
|
3
|
+
Copyright 2025 Akretion France (https://www.akretion.com/)
|
|
4
|
+
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
|
5
|
+
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
6
|
+
-->
|
|
7
|
+
<templates xml:space="preserve">
|
|
8
|
+
|
|
9
|
+
<t
|
|
10
|
+
t-name="account_dashboard_banner.AccountDashboardBannerRenderer"
|
|
11
|
+
t-inherit="account.KanbanRenderer"
|
|
12
|
+
t-inherit-mode="primary"
|
|
13
|
+
owl="1"
|
|
14
|
+
>
|
|
15
|
+
<xpath expr="//div[hasclass('o_kanban_renderer')]" position="before">
|
|
16
|
+
<div
|
|
17
|
+
class="d-none d-md-flex position-sticky start-0 d-flex o_form_statusbar"
|
|
18
|
+
id="dashboard_banner"
|
|
19
|
+
>
|
|
20
|
+
<t
|
|
21
|
+
t-foreach="Object.entries(state.banner)"
|
|
22
|
+
t-as="cell_entry"
|
|
23
|
+
t-key="cell_entry[0]"
|
|
24
|
+
>
|
|
25
|
+
<t t-set="cell_data" t-value="cell_entry[1]" />
|
|
26
|
+
<div
|
|
27
|
+
id="cell_banner_ok"
|
|
28
|
+
t-if="!cell_data.warn"
|
|
29
|
+
t-attf-class="o_arrow_button flex-grow-1 d-flex flex-column p-1 text-center"
|
|
30
|
+
t-att-data-tooltip="cell_data['tooltip']"
|
|
31
|
+
>
|
|
32
|
+
<strong class="mx-2" t-out="cell_data['label']" />
|
|
33
|
+
<span t-out="cell_data['value']" class="h2 m-0 text-primary" />
|
|
34
|
+
</div>
|
|
35
|
+
<div
|
|
36
|
+
id="cell_banner_warn"
|
|
37
|
+
t-if="cell_data.warn"
|
|
38
|
+
t-attf-class="o_arrow_button flex-grow-1 d-flex flex-column p-1 text-center alert alert-warning"
|
|
39
|
+
t-att-data-tooltip="cell_data['tooltip']"
|
|
40
|
+
>
|
|
41
|
+
<strong class="mx-2" t-out="cell_data['label']" />
|
|
42
|
+
<span t-out="cell_data['value']" class="h2 m-0 text-primary" />
|
|
43
|
+
</div>
|
|
44
|
+
</t>
|
|
45
|
+
</div>
|
|
46
|
+
</xpath>
|
|
47
|
+
</t>
|
|
48
|
+
|
|
49
|
+
</templates>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from . import test_banner
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Copyright 2025 Akretion France (https://www.akretion.com/)
|
|
2
|
+
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
|
3
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
4
|
+
|
|
5
|
+
from odoo.tests import tagged
|
|
6
|
+
from odoo.tests.common import TransactionCase
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@tagged("post_install", "-at_install")
|
|
10
|
+
class TestAccountDashboardBanner(TransactionCase):
|
|
11
|
+
@classmethod
|
|
12
|
+
def setUpClass(cls):
|
|
13
|
+
super().setUpClass()
|
|
14
|
+
cls.cell_obj = cls.env["account.dashboard.banner.cell"]
|
|
15
|
+
cls.test_custom_label = "TEST Custom Label"
|
|
16
|
+
cls.test_custom_tooltip = "TEST customer tooltip"
|
|
17
|
+
# add cell_types that don't already exists
|
|
18
|
+
existing = cls.cell_obj.search_read([], ["cell_type"])
|
|
19
|
+
existing_cell_types = [x["cell_type"] for x in existing]
|
|
20
|
+
to_create_vals = []
|
|
21
|
+
for cell_type in [
|
|
22
|
+
"income_fiscalyear",
|
|
23
|
+
"income_year",
|
|
24
|
+
"income_quarter",
|
|
25
|
+
"income_month",
|
|
26
|
+
"liquidity",
|
|
27
|
+
"customer_debt",
|
|
28
|
+
"customer_overdue",
|
|
29
|
+
"supplier_debt",
|
|
30
|
+
"tax_lock_date",
|
|
31
|
+
"period_lock_date",
|
|
32
|
+
"fiscalyear_lock_date",
|
|
33
|
+
]:
|
|
34
|
+
if cell_type not in existing_cell_types:
|
|
35
|
+
to_create_vals.append({"cell_type": cell_type})
|
|
36
|
+
cls.cell_obj.create(to_create_vals)
|
|
37
|
+
fy_lock_cell = cls.cell_obj.search([("cell_type", "=", "fiscalyear_lock_date")])
|
|
38
|
+
fy_lock_cell.write(
|
|
39
|
+
{
|
|
40
|
+
"custom_label": cls.test_custom_label,
|
|
41
|
+
"custom_tooltip": cls.test_custom_tooltip,
|
|
42
|
+
"warn": True,
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
def test_banner(self):
|
|
47
|
+
res = self.cell_obj.get_banner_data()
|
|
48
|
+
self.assertIsInstance(res, dict)
|
|
49
|
+
self.assertEqual(len(res), self.cell_obj.search_count([]))
|
|
50
|
+
for cell_entry in res.items():
|
|
51
|
+
cell_data = cell_entry[1]
|
|
52
|
+
if cell_data["cell_type"] == "fiscalyear_lock_date":
|
|
53
|
+
self.assertEqual(cell_data["label"], self.test_custom_label)
|
|
54
|
+
self.assertEqual(cell_data["tooltip"], self.test_custom_tooltip)
|
|
55
|
+
if not self.env.company.fiscalyear_lock_date:
|
|
56
|
+
self.assertTrue(cell_data.get("warn"))
|