odoo-addon-dms 16.0.1.8.0.5__py3-none-any.whl → 17.0.1.0.0.2__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.
Files changed (113) hide show
  1. odoo/addons/dms/README.rst +132 -78
  2. odoo/addons/dms/__manifest__.py +34 -16
  3. odoo/addons/dms/actions/file.xml +1 -3
  4. odoo/addons/dms/controllers/main.py +0 -34
  5. odoo/addons/dms/controllers/portal.py +178 -92
  6. odoo/addons/dms/data/onboarding_data.xml +77 -0
  7. odoo/addons/dms/demo/access_group.xml +3 -9
  8. odoo/addons/dms/i18n/de.po +13 -117
  9. odoo/addons/dms/i18n/dms.pot +137 -174
  10. odoo/addons/dms/i18n/es.po +15 -58
  11. odoo/addons/dms/i18n/fr.po +296 -450
  12. odoo/addons/dms/i18n/he_IL.po +13 -117
  13. odoo/addons/dms/i18n/it.po +15 -131
  14. odoo/addons/dms/i18n/nl.po +13 -117
  15. odoo/addons/dms/i18n/pt.po +13 -121
  16. odoo/addons/dms/i18n/pt_BR.po +28 -147
  17. odoo/addons/dms/i18n/ru.po +13 -117
  18. odoo/addons/dms/models/__init__.py +7 -1
  19. odoo/addons/dms/models/abstract_dms_mixin.py +1 -1
  20. odoo/addons/dms/models/access_groups.py +18 -11
  21. odoo/addons/dms/models/base.py +10 -2
  22. odoo/addons/dms/models/directory.py +46 -75
  23. odoo/addons/dms/models/{category.py → dms_category.py} +10 -42
  24. odoo/addons/dms/models/dms_file.py +125 -147
  25. odoo/addons/dms/models/dms_security_mixin.py +26 -22
  26. odoo/addons/dms/models/ir_attachment.py +0 -1
  27. odoo/addons/dms/models/ir_binary.py +19 -0
  28. odoo/addons/dms/models/mail_thread.py +2 -4
  29. odoo/addons/dms/models/mixins_thumbnail.py +13 -8
  30. odoo/addons/dms/models/onboarding_onboarding.py +16 -0
  31. odoo/addons/dms/models/onboarding_onboarding_step.py +50 -0
  32. odoo/addons/dms/models/res_company.py +22 -47
  33. odoo/addons/dms/models/res_config_settings.py +0 -1
  34. odoo/addons/dms/models/storage.py +4 -24
  35. odoo/addons/dms/models/tag.py +1 -1
  36. odoo/addons/dms/readme/CONFIGURE.md +59 -0
  37. odoo/addons/dms/readme/CONTRIBUTORS.md +14 -0
  38. odoo/addons/dms/readme/CREDITS.md +6 -0
  39. odoo/addons/dms/readme/DESCRIPTION.md +9 -0
  40. odoo/addons/dms/readme/INSTALL.md +4 -0
  41. odoo/addons/dms/readme/ROADMAP.md +19 -0
  42. odoo/addons/dms/readme/USAGE.md +11 -0
  43. odoo/addons/dms/security/security.xml +1 -0
  44. odoo/addons/dms/static/description/icon.png +0 -0
  45. odoo/addons/dms/static/description/icon.svg +4 -1
  46. odoo/addons/dms/static/description/index.html +133 -88
  47. odoo/addons/dms/static/description/portal_icon.svg +12 -0
  48. odoo/addons/dms/static/src/js/fields/{path_owl.esm.js → path_json/path_owl.esm.js} +22 -4
  49. odoo/addons/dms/static/src/js/fields/{path_owl.xml → path_json/path_owl.xml} +7 -4
  50. odoo/addons/dms/static/src/js/fields/preview_binary/preview_record.esm.js +47 -0
  51. odoo/addons/dms/static/src/js/{views/fields/binary → fields/preview_binary}/preview_record.xml +5 -4
  52. odoo/addons/dms/static/src/js/views/dms_file_upload.esm.js +155 -148
  53. odoo/addons/dms/static/src/js/views/file_kanban_controller.xml +0 -1
  54. odoo/addons/dms/static/src/js/views/file_kanban_record.esm.js +26 -27
  55. odoo/addons/dms/static/src/js/views/file_kanban_renderer.esm.js +1 -2
  56. odoo/addons/dms/static/src/js/views/file_kanban_renderer.xml +12 -16
  57. odoo/addons/dms/static/src/js/views/file_kanban_view.esm.js +11 -9
  58. odoo/addons/dms/static/src/js/views/file_list_controller.esm.js +1 -1
  59. odoo/addons/dms/static/src/js/views/file_list_renderer.xml +1 -7
  60. odoo/addons/dms/static/src/js/views/file_list_view.esm.js +11 -9
  61. odoo/addons/dms/static/src/js/views/search_panel.esm.js +9 -10
  62. odoo/addons/dms/static/src/models/attachment.esm.js +83 -82
  63. odoo/addons/dms/static/src/models/attachment_image.esm.js +30 -28
  64. odoo/addons/dms/static/src/models/attachment_viewer_viewable.esm.js +27 -25
  65. odoo/addons/dms/static/src/scss/directory_kanban.scss +28 -73
  66. odoo/addons/dms/static/src/scss/dms_common.scss +69 -0
  67. odoo/addons/dms/static/src/scss/file_kanban.scss +22 -34
  68. odoo/addons/dms/static/src/scss/portal.scss +12 -0
  69. odoo/addons/dms/static/tests/tours/dms_portal_tour.esm.js +46 -0
  70. odoo/addons/dms/{views/dms_portal_templates.xml → template/portal.xml} +13 -3
  71. odoo/addons/dms/tests/common.py +20 -4
  72. odoo/addons/dms/tests/data/mail01.eml +2 -2
  73. odoo/addons/dms/tests/data/mail02.eml +2 -2
  74. odoo/addons/dms/tests/test_benchmark.py +16 -21
  75. odoo/addons/dms/tests/test_directory.py +128 -40
  76. odoo/addons/dms/tests/test_file.py +112 -30
  77. odoo/addons/dms/tests/test_file_database.py +50 -24
  78. odoo/addons/dms/tests/test_portal.py +50 -37
  79. odoo/addons/dms/tests/test_storage_attachment.py +85 -63
  80. odoo/addons/dms/tests/test_storage_database.py +89 -35
  81. odoo/addons/dms/tools/file.py +63 -11
  82. odoo/addons/dms/views/dms_access_groups_views.xml +2 -17
  83. odoo/addons/dms/views/{category.xml → dms_category.xml} +4 -9
  84. odoo/addons/dms/views/{directory.xml → dms_directory.xml} +168 -176
  85. odoo/addons/dms/views/dms_file.xml +170 -191
  86. odoo/addons/dms/views/{tag.xml → dms_tag.xml} +50 -53
  87. odoo/addons/dms/views/menu.xml +52 -21
  88. odoo/addons/dms/views/res_config_settings.xml +31 -82
  89. odoo/addons/dms/views/storage.xml +7 -13
  90. odoo_addon_dms-17.0.1.0.0.2.dist-info/METADATA +257 -0
  91. {odoo_addon_dms-16.0.1.8.0.5.dist-info → odoo_addon_dms-17.0.1.0.0.2.dist-info}/RECORD +93 -95
  92. {odoo_addon_dms-16.0.1.8.0.5.dist-info → odoo_addon_dms-17.0.1.0.0.2.dist-info}/WHEEL +1 -1
  93. odoo_addon_dms-17.0.1.0.0.2.dist-info/top_level.txt +1 -0
  94. odoo/addons/dms/i18n/fa.po +0 -2277
  95. odoo/addons/dms/i18n/fa_IR.po +0 -2277
  96. odoo/addons/dms/readme/CONFIGURE.rst +0 -40
  97. odoo/addons/dms/readme/CONTRIBUTORS.rst +0 -16
  98. odoo/addons/dms/readme/CREDITS.rst +0 -6
  99. odoo/addons/dms/readme/DESCRIPTION.rst +0 -6
  100. odoo/addons/dms/readme/INSTALL.rst +0 -9
  101. odoo/addons/dms/readme/ROADMAP.rst +0 -8
  102. odoo/addons/dms/readme/USAGE.rst +0 -8
  103. odoo/addons/dms/static/src/js/components/path/path.esm.js +0 -0
  104. odoo/addons/dms/static/src/js/dms_portal_tour.js +0 -57
  105. odoo/addons/dms/static/src/js/fields/path.js +0 -81
  106. odoo/addons/dms/static/src/js/views/fields/binary/preview_record.esm.js +0 -35
  107. odoo/addons/dms/static/src/js/views/many_drop_target.js +0 -98
  108. odoo/addons/dms/static/src/scss/variables.scss +0 -9
  109. odoo/addons/dms/static/src/xml/views.xml +0 -72
  110. odoo/addons/dms/template/assets.xml +0 -44
  111. odoo/addons/dms/template/onboarding.xml +0 -97
  112. odoo_addon_dms-16.0.1.8.0.5.dist-info/METADATA +0 -203
  113. odoo_addon_dms-16.0.1.8.0.5.dist-info/top_level.txt +0 -1
@@ -1,88 +1,89 @@
1
1
  /** @odoo-module **/
2
2
 
3
- import {registerPatch} from "@mail/model/model_core";
4
- import {attr} from "@mail/model/model_field";
3
+ // /** ********************************************************************************
4
+ // Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
5
+ // License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
6
+ // **********************************************************************************/
7
+ import {Attachment} from "@mail/core/common/attachment_model";
8
+ import {patch} from "@web/core/utils/patch";
5
9
 
6
- registerPatch({
7
- name: "Attachment",
8
- fields: {
9
- defaultSource: {
10
- compute() {
11
- if (this.isImage) {
12
- if (this.model_name && this.model_name === "dms.file") {
13
- return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name&download=false`;
14
- }
15
- return `/web/image/${this.id}?signature=${this.checksum}`;
16
- }
17
- if (this.isPdf) {
18
- if (this.model_name && this.model_name === "dms.file") {
19
- return (
20
- "/web/content?id=" +
21
- this.id +
22
- "&field=content&model=dms.file" +
23
- "&filename_field=name"
24
- );
25
- }
26
- const pdf_lib = `/web/static/lib/pdfjs/web/viewer.html?file=`;
27
- if (
28
- !this.accessToken &&
29
- this.originThread &&
30
- this.originThread.model === "mail.channel"
31
- ) {
32
- return `${pdf_lib}/mail/channel/${this.originThread.id}/attachment/${this.id}#pagemode=none`;
33
- }
34
- const accessToken = this.accessToken
35
- ? `?access_token%3D${this.accessToken}`
36
- : "";
37
- return `${pdf_lib}/web/content/${this.id}${accessToken}#pagemode=none`;
38
- }
39
- if (this.isUrlYoutube) {
40
- const urlArr = this.url.split("/");
41
- let token = urlArr[urlArr.length - 1];
42
- if (token.includes("watch")) {
43
- token = token.split("v=")[1];
44
- const amp = token.indexOf("&");
45
- if (amp !== -1) {
46
- token = token.substring(0, amp);
47
- }
48
- }
49
- return `https://www.youtube.com/embed/${token}`;
50
- }
51
- if (
52
- !this.accessToken &&
53
- this.originThread &&
54
- this.originThread.model === "mail.channel"
55
- ) {
56
- return `/mail/channel/${this.originThread.id}/attachment/${this.id}`;
57
- }
58
- const accessToken = this.accessToken
59
- ? `?access_token=${this.accessToken}`
60
- : "";
10
+ patch(Attachment.prototype, {
11
+ _handleImage() {
12
+ if (this.model_name && this.model_name === "dms.file") {
13
+ return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name&download=false`;
14
+ }
15
+ return `/web/image/${this.id}?signature=${this.checksum}`;
16
+ },
17
+ _handlePdf() {
18
+ if (this.model_name && this.model_name === "dms.file") {
19
+ return (
20
+ "/web/content?id=" +
21
+ this.id +
22
+ "&field=content&model=dms.file" +
23
+ "&filename_field=name"
24
+ );
25
+ }
26
+ const pdf_lib = `/web/static/lib/pdfjs/web/viewer.html?file=`;
27
+ if (
28
+ !this.accessToken &&
29
+ this.originThread &&
30
+ this.originThread.model === "mail.channel"
31
+ ) {
32
+ return `${pdf_lib}/mail/channel/${this.originThread.id}/attachment/${this.id}#pagemode=none`;
33
+ }
34
+ const accessToken = this.accessToken
35
+ ? `?access_token%3D${this.accessToken}`
36
+ : "";
37
+ return `${pdf_lib}/web/content/${this.id}${accessToken}#pagemode=none`;
38
+ },
39
+ _handleYoutube() {
40
+ const urlArr = this.url.split("/");
41
+ let token = urlArr[urlArr.length - 1];
42
+ if (token.includes("watch")) {
43
+ token = token.split("v=")[1];
44
+ const amp = token.indexOf("&");
45
+ if (amp !== -1) {
46
+ token = token.substring(0, amp);
47
+ }
48
+ }
49
+ return `https://www.youtube.com/embed/${token}`;
50
+ },
51
+ get defaultSource() {
52
+ if (this.isImage) {
53
+ return this._handleImage();
54
+ }
55
+ if (this.isPdf) {
56
+ return this._handlePdf();
57
+ }
58
+ if (this.isUrlYoutube) {
59
+ return this._handleYoutube();
60
+ }
61
+ if (
62
+ !this.accessToken &&
63
+ this.originThread &&
64
+ this.originThread.model === "mail.channel"
65
+ ) {
66
+ return `/mail/channel/${this.originThread.id}/attachment/${this.id}`;
67
+ }
68
+ const accessToken = this.accessToken ? `?access_token=${this.accessToken}` : "";
61
69
 
62
- if (this.model_name && this.model_name === "dms.file") {
63
- return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name`;
64
- }
65
- return `/web/content/${this.id}${accessToken}`;
66
- },
67
- },
68
- model_name: attr(),
69
- downloadUrl: {
70
- compute() {
71
- if (
72
- !this.accessToken &&
73
- this.originThread &&
74
- this.originThread.model === "mail.channel"
75
- ) {
76
- return `/mail/channel/${this.originThread.id}/attachment/${this.id}?download=true`;
77
- }
78
- if (this.model_name && this.model_name === "dms.file") {
79
- return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name&download=true`;
80
- }
81
- const accessToken = this.accessToken
82
- ? `access_token=${this.accessToken}&`
83
- : "";
84
- return `/web/content/ir.attachment/${this.id}/datas?${accessToken}download=true`;
85
- },
86
- },
70
+ if (this.model_name && this.model_name === "dms.file") {
71
+ return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name`;
72
+ }
73
+ return `/web/content/${this.id}${accessToken}`;
74
+ },
75
+ get downloadUrl() {
76
+ if (
77
+ !this.accessToken &&
78
+ this.originThread &&
79
+ this.originThread.model === "mail.channel"
80
+ ) {
81
+ return `/mail/channel/${this.originThread.id}/attachment/${this.id}?download=true`;
82
+ }
83
+ if (this.model_name && this.model_name === "dms.file") {
84
+ return `/web/content?id=${this.id}&field=content&model=dms.file&filename_field=name&download=true`;
85
+ }
86
+ const accessToken = this.accessToken ? `access_token=${this.accessToken}&` : "";
87
+ return `/web/content/ir.attachment/${this.id}/datas?${accessToken}download=true`;
87
88
  },
88
89
  });
@@ -1,33 +1,35 @@
1
1
  /** @odoo-module **/
2
2
 
3
- import {registerPatch} from "@mail/model/model_core";
3
+ // /** ********************************************************************************
4
+ // Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
5
+ // License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
6
+ // **********************************************************************************/
7
+ import {LinkPreview} from "@mail/core/common/link_preview";
8
+ import {patch} from "@web/core/utils/patch";
4
9
 
5
- registerPatch({
6
- name: "AttachmentImage",
7
- fields: {
8
- imageUrl: {
9
- compute() {
10
- if (!this.attachment) {
11
- return;
12
- }
13
- if (
14
- !this.attachment.accessToken &&
15
- this.attachment.originThread &&
16
- this.attachment.originThread.model === "mail.channel"
17
- ) {
18
- return `/mail/channel/${this.attachment.originThread.id}/image/${this.attachment.id}/${this.width}x${this.height}`;
19
- }
20
- const accessToken = this.attachment.accessToken
21
- ? `?access_token=${this.attachment.accessToken}`
22
- : "";
23
- if (
24
- this.attachment.model_name &&
25
- this.attachment.model_name === "dms.file"
26
- ) {
27
- return `/web/content?id=${this.attachment.id}&field=content&model=dms.file&filename_field=name&download=false`;
28
- }
29
- return `/web/image/${this.attachment.id}/${this.width}x${this.height}${accessToken}`;
30
- },
31
- },
10
+ patch(LinkPreview, {
11
+ get imageUrl() {
12
+ return function compute() {
13
+ if (!this.attachment) {
14
+ return;
15
+ }
16
+ if (
17
+ !this.attachment.accessToken &&
18
+ this.attachment.originThread &&
19
+ this.attachment.originThread.model === "mail.channel"
20
+ ) {
21
+ return `/mail/channel/${this.attachment.originThread.id}/image/${this.attachment.id}/${this.width}x${this.height}`;
22
+ }
23
+ const accessToken = this.attachment.accessToken
24
+ ? `?access_token=${this.attachment.accessToken}`
25
+ : "";
26
+ if (
27
+ this.attachment.model_name &&
28
+ this.attachment.model_name === "dms.file"
29
+ ) {
30
+ return `/web/content?id=${this.attachment.id}&field=content&model=dms.file&filename_field=name&download=false`;
31
+ }
32
+ return `/web/image/${this.attachment.id}/${this.width}x${this.height}${accessToken}`;
33
+ };
32
34
  },
33
35
  });
@@ -1,30 +1,32 @@
1
1
  /** @odoo-module **/
2
2
 
3
- import {registerPatch} from "@mail/model/model_core";
3
+ // /** ********************************************************************************
4
+ // Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
5
+ // License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
6
+ // **********************************************************************************/
7
+ import {LinkPreview} from "@mail/core/common/link_preview";
8
+ import {patch} from "@web/core/utils/patch";
4
9
 
5
- registerPatch({
6
- name: "AttachmentViewerViewable",
7
- fields: {
8
- imageUrl: {
9
- compute() {
10
- if (
11
- !this.attachmentOwner.accessToken &&
12
- this.attachmentOwner.originThread &&
13
- this.attachmentOwner.originThread.model === "mail.channel"
14
- ) {
15
- return `/mail/channel/${this.attachmentOwner.originThread.id}/image/${this.attachmentOwner.id}`;
16
- }
17
- const accessToken = this.attachmentOwner.accessToken
18
- ? `?access_token=${this.attachmentOwner.accessToken}`
19
- : "";
20
- if (
21
- this.attachmentOwner.model_name &&
22
- this.attachmentOwner.model_name === "dms.file"
23
- ) {
24
- return `/web/content?id=${this.attachmentOwner.id}&field=content&model=dms.file&filename_field=name&download=false`;
25
- }
26
- return `/web/image/${this.attachmentOwner.id}${accessToken}`;
27
- },
28
- },
10
+ patch(LinkPreview, {
11
+ get imageUrl() {
12
+ return function compute() {
13
+ if (
14
+ !this.attachmentOwner.accessToken &&
15
+ this.attachmentOwner.originThread &&
16
+ this.attachmentOwner.originThread.model === "mail.channel"
17
+ ) {
18
+ return `/mail/channel/${this.attachmentOwner.originThread.id}/image/${this.attachmentOwner.id}`;
19
+ }
20
+ const accessToken = this.attachmentOwner.accessToken
21
+ ? `?access_token=${this.attachmentOwner.accessToken}`
22
+ : "";
23
+ if (
24
+ this.attachmentOwner.model_name &&
25
+ this.attachmentOwner.model_name === "dms.file"
26
+ ) {
27
+ return `/web/content?id=${this.attachmentOwner.id}&field=content&model=dms.file&filename_field=name&download=false`;
28
+ }
29
+ return `/web/image/${this.attachmentOwner.id}${accessToken}`;
30
+ };
29
31
  },
30
32
  });
@@ -1,69 +1,47 @@
1
1
  /**********************************************************************************
2
2
  *
3
3
  * Copyright 2017-2019 MuK IT GmbH
4
+ * Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
4
5
  * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
5
6
  *
6
7
  **********************************************************************************/
7
8
 
9
+ $o-kanban-image-width: 80px;
10
+
8
11
  .mk_directory_kanban_view {
12
+ span.total_items {
13
+ margin-left: 3px;
14
+ margin-top: 3px;
15
+ }
16
+
9
17
  height: 100%;
10
- .o_kanban_record {
11
- > div:nth-child(1) {
12
- padding: 0;
13
- }
14
18
 
15
- padding: 0;
19
+ .o_kanban_wrapper {
16
20
  max-height: $o-kanban-image-width + 1;
17
- .mk_directory_kanban_actions {
18
- float: left;
19
- border-right: solid 1px $gray-400;
20
- .mk_directory_kanban_actions_wrapper {
21
- min-height: $o-kanban-image-width;
22
- .btn-outline-primary {
23
- display: flex;
24
- border-radius: 0;
25
- align-items: center;
26
- justify-content: center;
27
- border-color: transparent;
28
- min-width: $o-kanban-image-width / 2;
29
- min-height: $o-kanban-image-width / 2;
30
- &.mk_directory_kanban_directories {
31
- border-bottom: solid 1px $gray-400;
32
- }
33
- }
34
- span.total_items {
35
- margin-left: 3px;
36
- margin-top: 3px;
37
- }
38
- }
39
- }
40
- .o_kanban_image {
41
- width: $o-kanban-image-width - 1;
42
- border-right: solid 1px $gray-400;
43
- + div {
44
- padding-left: $o-kanban-image-width + $o-kanban-inside-hgutter +
45
- $o-kanban-image-width / 2;
46
- @include media-breakpoint-down(sm) {
47
- padding-left: $o-kanban-image-width +
48
- $o-kanban-inside-hgutter-mobile + $o-kanban-image-width / 2;
49
- }
50
- }
21
+ padding: 0 !important;
22
+
23
+ .o_dms_directory_btn {
24
+ border-style: solid solid none none;
25
+ border-color: $gray-400;
26
+ border-width: 1px;
27
+ width: 30px;
28
+ display: flex;
29
+ justify-content: center;
30
+ align-items: center;
31
+ height: 100%;
32
+ border-radius: 0;
51
33
  }
52
- .o_kanban_details .o_kanban_details_wrapper {
53
- padding: 4px 4px 4px 0;
54
- .o_kanban_record_title {
55
- font-weight: bold;
56
- padding-right: 16px;
57
- }
58
- .o_kanban_record_body {
59
- max-height: 12px;
60
- .o_kanban_tags {
61
- @include o-text-overflow;
62
- }
34
+
35
+ .o_kanban_details {
36
+ .o_kanban_record_body .o_kanban_tags {
37
+ @include o-text-overflow;
63
38
  }
39
+
64
40
  .oe_kanban_avatar {
65
41
  margin-left: 0px;
42
+ max-width: 20px;
66
43
  }
44
+
67
45
  .favorite_sign_button {
68
46
  margin-top: 1px;
69
47
  font-size: 1.5rem;
@@ -71,28 +49,5 @@
71
49
  margin-right: 6px;
72
50
  }
73
51
  }
74
- .o_dropdown_kanban {
75
- .dropdown-menu {
76
- min-width: 22rem;
77
- .mk_directory_kanban_views {
78
- padding-right: 8px;
79
- }
80
- .mk_directory_kanban_actions {
81
- padding-left: 8px;
82
- border-right: none;
83
- }
84
- .fa {
85
- min-width: 12px;
86
- padding-right: 2px;
87
- text-align: center;
88
- }
89
- .oe_kanban_colorpicker {
90
- max-width: none;
91
- margin: 5px 5px;
92
- padding: 10px 0 0 25px;
93
- border-top: 1px solid gray("300");
94
- }
95
- }
96
- }
97
52
  }
98
53
  }
@@ -0,0 +1,69 @@
1
+ /**********************************************************************************
2
+ *
3
+ * Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
4
+ * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
5
+ *
6
+ **********************************************************************************/
7
+
8
+ .mk_directory_kanban_view,
9
+ .mk_file_kanban_view {
10
+ .o_kanban_renderer {
11
+ .o_kanban_details {
12
+ position: relative;
13
+ height: 100%;
14
+ }
15
+ img:not(.oe_kanban_avatar) {
16
+ height: 79px;
17
+ }
18
+
19
+ .o_kanban_record_bottom {
20
+ position: absolute;
21
+ bottom: var(--KanbanRecord-gap-v);
22
+ left: var(--KanbanRecord-gap-v);
23
+ right: var(--KanbanRecord-gap-v);
24
+
25
+ .oe_kanban_bottom {
26
+ &_left,
27
+ &_right {
28
+ position: absolute;
29
+ bottom: 0;
30
+ }
31
+
32
+ &_left {
33
+ left: 0;
34
+ }
35
+
36
+ &_right {
37
+ right: 0;
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ .o_dropdown_kanban {
44
+ .dropdown-menu {
45
+ min-width: 22rem;
46
+
47
+ .mk_file_kanban_operations {
48
+ padding-right: 8px;
49
+ }
50
+
51
+ .mk_file_kanban_actions {
52
+ padding-left: 8px;
53
+ }
54
+
55
+ .fa {
56
+ min-width: 12px;
57
+ padding-right: 2px;
58
+ text-align: center;
59
+ }
60
+
61
+ .oe_kanban_colorpicker {
62
+ max-width: none;
63
+ margin: 5px 5px;
64
+ padding: 10px 0 0 25px;
65
+ border-top: 1px solid $gray-400;
66
+ }
67
+ }
68
+ }
69
+ }
@@ -1,65 +1,52 @@
1
1
  /**********************************************************************************
2
2
  *
3
3
  * Copyright (c) 2017-2019 MuK IT GmbH.
4
+ * Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
4
5
  * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
5
6
  *
6
7
  **********************************************************************************/
7
8
 
9
+ $o-kanban-image-width: 80px;
10
+
8
11
  .mk_file_kanban_view {
9
12
  height: 100%;
10
- .o_kanban_record {
11
- > div:nth-child(1) {
12
- padding: 0 5px !important;
13
- }
14
13
 
14
+ .o_kanban_record {
15
15
  padding: 0;
16
16
  max-height: $o-kanban-image-width + 1;
17
- .o_kanban_image {
18
- width: $o-kanban-image-width + 1;
19
- border-right: solid 1px $gray-400;
17
+
18
+ > div:nth-child(1) {
19
+ padding: 0 var(--KanbanRecord-gap-v) !important;
20
20
  }
21
- .o_kanban_details .o_kanban_details_wrapper {
22
- padding: 4px 4px 4px 0;
21
+
22
+ .o_kanban_details {
23
+ height: 100%;
24
+ padding: var(--KanbanRecord-gap-v) var(--KanbanRecord-gap-v)
25
+ var(--KanbanRecord-gap-v) 0;
26
+
23
27
  .o_kanban_record_title {
24
28
  font-weight: bold;
25
29
  padding-right: 16px;
26
30
  }
31
+
27
32
  .o_kanban_record_body {
28
33
  max-height: 12px;
34
+
29
35
  .o_kanban_tags {
30
36
  @include o-text-overflow;
31
37
  }
32
38
  }
39
+
33
40
  .oe_kanban_avatar {
34
- margin-left: 0px;
41
+ margin-left: 0;
42
+ max-width: 20px;
35
43
  }
36
- .mk_file_kanban_lock {
44
+
45
+ .o_dms_file_kanban_lock {
37
46
  margin-top: 2px;
38
47
  font-size: 1.2rem;
39
48
  line-height: 20px;
40
- margin-right: 6px;
41
- }
42
- }
43
- .o_dropdown_kanban {
44
- .dropdown-menu {
45
- min-width: 22rem;
46
- .mk_file_kanban_operations {
47
- padding-right: 8px;
48
- }
49
- .mk_file_kanban_actions {
50
- padding-left: 8px;
51
- }
52
- .fa {
53
- min-width: 12px;
54
- padding-right: 2px;
55
- text-align: center;
56
- }
57
- .oe_kanban_colorpicker {
58
- max-width: none;
59
- margin: 5px 5px;
60
- padding: 10px 0 0 25px;
61
- border-top: 1px solid gray("300");
62
- }
49
+ margin-right: var(--KanbanRecord-gap-v);
63
50
  }
64
51
  }
65
52
  }
@@ -73,6 +60,7 @@
73
60
  z-index: 2;
74
61
  left: 0;
75
62
  top: 0;
63
+
76
64
  i {
77
65
  justify-content: center;
78
66
  display: flex;
@@ -0,0 +1,12 @@
1
+ /**********************************************************************************
2
+ *
3
+ * Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
4
+ * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
5
+ *
6
+ **********************************************************************************/
7
+
8
+ .o_portal_contact_img {
9
+ width: 2.3em;
10
+ height: 2.3em;
11
+ object-fit: cover;
12
+ }
@@ -0,0 +1,46 @@
1
+ /** @odoo-module **/
2
+
3
+ // /** ********************************************************************************
4
+ // Copyright 2024 Subteno - Timothée Vannier (https://www.subteno.com).
5
+ // License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
6
+ // **********************************************************************************/
7
+ import {registry} from "@web/core/registry";
8
+
9
+ registry.category("web_tour.tours").add("dms_portal_mail_tour", {
10
+ url: "/my/dms",
11
+ test: true,
12
+ steps: () => [
13
+ {
14
+ content: "Go to Mails directory",
15
+ extra_trigger: "li.breadcrumb-item:contains('Documents')",
16
+ trigger: ".tr_dms_directory_link:contains('Mails')",
17
+ },
18
+ {
19
+ content: "Go to Mail_01.eml",
20
+ extra_trigger: "li.breadcrumb-item:contains('Mails')",
21
+ trigger: ".tr_dms_file_link:contains('Mail_01.eml')",
22
+ },
23
+ ],
24
+ });
25
+
26
+ registry.category("web_tour.tours").add("dms_portal_partners_tour", {
27
+ url: "/my/dms",
28
+ test: true,
29
+ steps: () => [
30
+ {
31
+ content: "Go to Partners directory",
32
+ extra_trigger: "li.breadcrumb-item:contains('Documents')",
33
+ trigger: ".tr_dms_directory_link:contains('Partners')",
34
+ },
35
+ {
36
+ content: "Go to Joel Willis",
37
+ extra_trigger: "li.breadcrumb-item:contains('Partners')",
38
+ trigger: ".tr_dms_directory_link:contains('Joel Willis')",
39
+ },
40
+ {
41
+ content: "Go to test.txt",
42
+ extra_trigger: "li.breadcrumb-item:contains('Joel Willis')",
43
+ trigger: ".tr_dms_file_link:contains('test.txt')",
44
+ },
45
+ ],
46
+ });