odoo-addon-partner-tz 15.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.
@@ -0,0 +1,102 @@
1
+ .. image:: https://odoo-community.org/readme-banner-image
2
+ :target: https://odoo-community.org/get-involved?utm_source=readme
3
+ :alt: Odoo Community Association
4
+
5
+ ================
6
+ Partner timezone
7
+ ================
8
+
9
+ ..
10
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
11
+ !! This file is generated by oca-gen-addon-readme !!
12
+ !! changes will be overwritten. !!
13
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
+ !! source digest: sha256:e9f24f0954ede8c8a311275600048f7110ce81069bf6bd80207f4119991bd3cb
15
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
+
17
+ .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
18
+ :target: https://odoo-community.org/page/development-status
19
+ :alt: Beta
20
+ .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
21
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
22
+ :alt: License: AGPL-3
23
+ .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpartner--contact-lightgray.png?logo=github
24
+ :target: https://github.com/OCA/partner-contact/tree/15.0/partner_tz
25
+ :alt: OCA/partner-contact
26
+ .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
27
+ :target: https://translation.odoo-community.org/projects/partner-contact-15-0/partner-contact-15-0-partner_tz
28
+ :alt: Translate me on Weblate
29
+ .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
30
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/partner-contact&target_branch=15.0
31
+ :alt: Try me on Runboat
32
+
33
+ |badge1| |badge2| |badge3| |badge4| |badge5|
34
+
35
+ This module displays the timezone field on partner form view.
36
+ Moreover it provides a few tools function in `tools/tz_utils.py`.
37
+
38
+ **Table of contents**
39
+
40
+ .. contents::
41
+ :local:
42
+
43
+ Known issues / Roadmap
44
+ ======================
45
+
46
+ * Odoo default value for timezone field uses the tz set on the connected user.
47
+ So if a user creates a partner located in a different timezone than his own,
48
+ the created partner will be set in the user's timezone instead of having the
49
+ timezone from its own location.
50
+ Ideally, we should change this behaviour to get the timezone from the country
51
+ and city of the partner when they are defined.
52
+ http://www.geonames.org/export/web-services.html#timezone might be a good
53
+ starting point.
54
+
55
+ Bug Tracker
56
+ ===========
57
+
58
+ Bugs are tracked on `GitHub Issues <https://github.com/OCA/partner-contact/issues>`_.
59
+ In case of trouble, please check there if your issue has already been reported.
60
+ If you spotted it first, help us to smash it by providing a detailed and welcomed
61
+ `feedback <https://github.com/OCA/partner-contact/issues/new?body=module:%20partner_tz%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
62
+
63
+ Do not contact contributors directly about support or help with technical issues.
64
+
65
+ Credits
66
+ =======
67
+
68
+ Authors
69
+ ~~~~~~~
70
+
71
+ * Camptocamp
72
+
73
+ Contributors
74
+ ~~~~~~~~~~~~
75
+
76
+ * Akim Juillerat <akim.juillerat@camptocamp.com>
77
+ * Hiep (Nguyen Hoang) <hiepnh@trobz.com>
78
+ * Phuc (Tran Thanh) <phuc@trobz.com>
79
+
80
+ Other credits
81
+ ~~~~~~~~~~~~~
82
+
83
+ The development of this module has been financially supported by:
84
+
85
+ * Camptocamp
86
+
87
+ Maintainers
88
+ ~~~~~~~~~~~
89
+
90
+ This module is maintained by the OCA.
91
+
92
+ .. image:: https://odoo-community.org/logo.png
93
+ :alt: Odoo Community Association
94
+ :target: https://odoo-community.org
95
+
96
+ OCA, or the Odoo Community Association, is a nonprofit organization whose
97
+ mission is to support the collaborative development of Odoo features and
98
+ promote its widespread use.
99
+
100
+ This module is part of the `OCA/partner-contact <https://github.com/OCA/partner-contact/tree/15.0/partner_tz>`_ project on GitHub.
101
+
102
+ You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -0,0 +1 @@
1
+ from . import tools
@@ -0,0 +1,16 @@
1
+ # Copyright 2020 Camptocamp SA
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
3
+ {
4
+ "name": "Partner timezone",
5
+ "summary": "Remove partner timezone default value and display on form",
6
+ "version": "15.0.1.0.0",
7
+ "development_status": "Beta",
8
+ "category": "Uncategorized",
9
+ "website": "https://github.com/OCA/partner-contact",
10
+ "author": "Camptocamp, Odoo Community Association (OCA)",
11
+ "license": "AGPL-3",
12
+ "application": False,
13
+ "installable": True,
14
+ "depends": ["base"],
15
+ "data": ["views/res_partner.xml"],
16
+ }
@@ -0,0 +1,14 @@
1
+ # Translation of Odoo Server.
2
+ # This file contains the translation of the following modules:
3
+ #
4
+ msgid ""
5
+ msgstr ""
6
+ "Project-Id-Version: Odoo Server 14.0\n"
7
+ "Report-Msgid-Bugs-To: \n"
8
+ "Last-Translator: Automatically generated\n"
9
+ "Language-Team: none\n"
10
+ "Language: it\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: \n"
14
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
@@ -0,0 +1,13 @@
1
+ # Translation of Odoo Server.
2
+ # This file contains the translation of the following modules:
3
+ #
4
+ msgid ""
5
+ msgstr ""
6
+ "Project-Id-Version: Odoo Server 15.0\n"
7
+ "Report-Msgid-Bugs-To: \n"
8
+ "Last-Translator: \n"
9
+ "Language-Team: \n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: \n"
13
+ "Plural-Forms: \n"
@@ -0,0 +1,3 @@
1
+ * Akim Juillerat <akim.juillerat@camptocamp.com>
2
+ * Hiep (Nguyen Hoang) <hiepnh@trobz.com>
3
+ * Phuc (Tran Thanh) <phuc@trobz.com>
@@ -0,0 +1,3 @@
1
+ The development of this module has been financially supported by:
2
+
3
+ * Camptocamp
@@ -0,0 +1,2 @@
1
+ This module displays the timezone field on partner form view.
2
+ Moreover it provides a few tools function in `tools/tz_utils.py`.
@@ -0,0 +1,8 @@
1
+ * Odoo default value for timezone field uses the tz set on the connected user.
2
+ So if a user creates a partner located in a different timezone than his own,
3
+ the created partner will be set in the user's timezone instead of having the
4
+ timezone from its own location.
5
+ Ideally, we should change this behaviour to get the timezone from the country
6
+ and city of the partner when they are defined.
7
+ http://www.geonames.org/export/web-services.html#timezone might be a good
8
+ starting point.
@@ -0,0 +1,454 @@
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="partner-timezone">
370
+ <h1>Partner timezone</h1>
371
+ <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
372
+ !! This file is generated by oca-gen-addon-readme !!
373
+ !! changes will be overwritten. !!
374
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375
+ !! source digest: sha256:e9f24f0954ede8c8a311275600048f7110ce81069bf6bd80207f4119991bd3cb
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/partner-contact/tree/15.0/partner_tz"><img alt="OCA/partner-contact" src="https://img.shields.io/badge/github-OCA%2Fpartner--contact-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/partner-contact-15-0/partner-contact-15-0-partner_tz"><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/partner-contact&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
378
+ <p>This module displays the timezone field on partner form view.
379
+ Moreover it provides a few tools function in <cite>tools/tz_utils.py</cite>.</p>
380
+ <p><strong>Table of contents</strong></p>
381
+ <div class="contents local topic" id="contents">
382
+ <ul class="simple">
383
+ <li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-1">Known issues / Roadmap</a></li>
384
+ <li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
385
+ <li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
386
+ <li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
387
+ <li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
388
+ <li><a class="reference internal" href="#other-credits" id="toc-entry-6">Other credits</a></li>
389
+ <li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
390
+ </ul>
391
+ </li>
392
+ </ul>
393
+ </div>
394
+ <div class="section" id="known-issues-roadmap">
395
+ <h2><a class="toc-backref" href="#toc-entry-1">Known issues / Roadmap</a></h2>
396
+ <ul class="simple">
397
+ <li>Odoo default value for timezone field uses the tz set on the connected user.
398
+ So if a user creates a partner located in a different timezone than his own,
399
+ the created partner will be set in the user’s timezone instead of having the
400
+ timezone from its own location.
401
+ Ideally, we should change this behaviour to get the timezone from the country
402
+ and city of the partner when they are defined.
403
+ <a class="reference external" href="http://www.geonames.org/export/web-services.html#timezone">http://www.geonames.org/export/web-services.html#timezone</a> might be a good
404
+ starting point.</li>
405
+ </ul>
406
+ </div>
407
+ <div class="section" id="bug-tracker">
408
+ <h2><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h2>
409
+ <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/partner-contact/issues">GitHub Issues</a>.
410
+ In case of trouble, please check there if your issue has already been reported.
411
+ If you spotted it first, help us to smash it by providing a detailed and welcomed
412
+ <a class="reference external" href="https://github.com/OCA/partner-contact/issues/new?body=module:%20partner_tz%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
413
+ <p>Do not contact contributors directly about support or help with technical issues.</p>
414
+ </div>
415
+ <div class="section" id="credits">
416
+ <h2><a class="toc-backref" href="#toc-entry-3">Credits</a></h2>
417
+ <div class="section" id="authors">
418
+ <h3><a class="toc-backref" href="#toc-entry-4">Authors</a></h3>
419
+ <ul class="simple">
420
+ <li>Camptocamp</li>
421
+ </ul>
422
+ </div>
423
+ <div class="section" id="contributors">
424
+ <h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
425
+ <ul class="simple">
426
+ <li>Akim Juillerat &lt;<a class="reference external" href="mailto:akim.juillerat&#64;camptocamp.com">akim.juillerat&#64;camptocamp.com</a>&gt;</li>
427
+ <li>Hiep (Nguyen Hoang) &lt;<a class="reference external" href="mailto:hiepnh&#64;trobz.com">hiepnh&#64;trobz.com</a>&gt;</li>
428
+ <li>Phuc (Tran Thanh) &lt;<a class="reference external" href="mailto:phuc&#64;trobz.com">phuc&#64;trobz.com</a>&gt;</li>
429
+ </ul>
430
+ </div>
431
+ <div class="section" id="other-credits">
432
+ <h3><a class="toc-backref" href="#toc-entry-6">Other credits</a></h3>
433
+ <p>The development of this module has been financially supported by:</p>
434
+ <ul class="simple">
435
+ <li>Camptocamp</li>
436
+ </ul>
437
+ </div>
438
+ <div class="section" id="maintainers">
439
+ <h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
440
+ <p>This module is maintained by the OCA.</p>
441
+ <a class="reference external image-reference" href="https://odoo-community.org">
442
+ <img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
443
+ </a>
444
+ <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
445
+ mission is to support the collaborative development of Odoo features and
446
+ promote its widespread use.</p>
447
+ <p>This module is part of the <a class="reference external" href="https://github.com/OCA/partner-contact/tree/15.0/partner_tz">OCA/partner-contact</a> project on GitHub.</p>
448
+ <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>
449
+ </div>
450
+ </div>
451
+ </div>
452
+ </div>
453
+ </body>
454
+ </html>
@@ -0,0 +1 @@
1
+ from . import test_tz
@@ -0,0 +1,28 @@
1
+ # Copyright 2023 ACSONE SA/NV
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+
4
+
5
+ class CommonPartnerTz:
6
+ @classmethod
7
+ def setUpClass(cls):
8
+ super().setUpClass()
9
+ cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
10
+ cls.partner_obj = cls.env["res.partner"]
11
+ cls.partner_utc = cls.partner_obj.create(
12
+ {
13
+ "name": "Partner UTC",
14
+ "tz": "UTC",
15
+ }
16
+ )
17
+ cls.partner_brussels = cls.partner_obj.create(
18
+ {
19
+ "name": "Partner Brussels",
20
+ "tz": "Europe/Brussels",
21
+ }
22
+ )
23
+ cls.partner_new_york = cls.partner_obj.create(
24
+ {
25
+ "name": "Partner New York",
26
+ "tz": "America/New_York",
27
+ }
28
+ )
@@ -0,0 +1,97 @@
1
+ # Copyright 2023 ACSONE SA/NV
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from datetime import time
4
+
5
+ from freezegun import freeze_time
6
+
7
+ from odoo.fields import Datetime
8
+ from odoo.tests.common import TransactionCase
9
+
10
+ from ..tools import (
11
+ tz_to_tz_naive_datetime,
12
+ tz_to_tz_time,
13
+ tz_to_utc_naive_datetime,
14
+ tz_to_utc_time,
15
+ utc_to_tz_naive_datetime,
16
+ utc_to_tz_time,
17
+ )
18
+ from .common import CommonPartnerTz
19
+
20
+
21
+ class TestPartnerTz(CommonPartnerTz, TransactionCase):
22
+ @freeze_time("2023-02-07 13:00:00")
23
+ def test_naive_from_utc(self):
24
+ # Winter now in Brussels (UTC +1)
25
+ now = Datetime.now()
26
+
27
+ tz_now = tz_to_tz_naive_datetime("UTC", self.partner_brussels.tz, now)
28
+ self.assertEqual(Datetime.to_datetime("2023-02-07 14:00:00"), tz_now)
29
+
30
+ @freeze_time("2023-02-07 13:00:00")
31
+ def test_naive_from_new_york(self):
32
+ # Winter now in Brussels (UTC +1
33
+ # 13:00:00 + 6 = 19:00:00
34
+ now = Datetime.now()
35
+
36
+ tz_now = tz_to_tz_naive_datetime(
37
+ self.partner_new_york.tz, self.partner_brussels.tz, now
38
+ )
39
+ self.assertEqual(Datetime.to_datetime("2023-02-07 19:00:00"), tz_now)
40
+
41
+ @freeze_time("2023-02-07 13:00:00")
42
+ def test_naive_to_utc(self):
43
+ # 13:00:00 - 1 = 12:00:00
44
+ now = Datetime.now()
45
+ tz_now = tz_to_utc_naive_datetime(self.partner_brussels.tz, now)
46
+ self.assertEqual(Datetime.to_datetime("2023-02-07 12:00:00"), tz_now)
47
+
48
+ @freeze_time("2023-02-07 13:00:00")
49
+ def test_utc_to_naive(self):
50
+ # 13:00:00 + 1 = 14:00:00
51
+ now = Datetime.now()
52
+ tz_now = utc_to_tz_naive_datetime(self.partner_brussels.tz, now)
53
+ self.assertEqual(Datetime.to_datetime("2023-02-07 14:00:00"), tz_now)
54
+
55
+ @freeze_time("2023-02-07")
56
+ def test_time_from_new_york(self):
57
+ # Time : 13:00
58
+ # 13:00 + 6 = 19:00
59
+ the_time = time(13, 0)
60
+
61
+ tz_time = tz_to_tz_time(
62
+ self.partner_new_york.tz, self.partner_brussels.tz, the_time
63
+ )
64
+
65
+ self.assertEqual(time(19, 0), tz_time)
66
+
67
+ @freeze_time("2023-02-07")
68
+ def test_time_from_brussels(self):
69
+ # Time : 13:00
70
+ # 13:00 - 6 = 7:00
71
+ the_time = time(13, 0)
72
+
73
+ tz_time = tz_to_tz_time(
74
+ self.partner_brussels.tz, self.partner_new_york.tz, the_time
75
+ )
76
+
77
+ self.assertEqual(time(7, 0), tz_time)
78
+
79
+ @freeze_time("2023-02-07")
80
+ def test_time_to_utc(self):
81
+ # Time : 13:00
82
+ # 13:00 - 6 = 7:00
83
+ the_time = time(13, 0)
84
+
85
+ tz_time = tz_to_utc_time(self.partner_brussels.tz, the_time)
86
+
87
+ self.assertEqual(time(12, 0), tz_time)
88
+
89
+ @freeze_time("2023-02-07")
90
+ def test_utc_to_time(self):
91
+ # Time : 13:00
92
+ # 13:00 + 1 = 14:00
93
+ the_time = time(13, 0)
94
+
95
+ tz_time = utc_to_tz_time(self.partner_brussels.tz, the_time)
96
+
97
+ self.assertEqual(time(14, 0), tz_time)
@@ -0,0 +1,6 @@
1
+ from .tz_utils import tz_to_tz_naive_datetime
2
+ from .tz_utils import tz_to_utc_naive_datetime
3
+ from .tz_utils import utc_to_tz_naive_datetime
4
+ from .tz_utils import tz_to_tz_time
5
+ from .tz_utils import tz_to_utc_time
6
+ from .tz_utils import utc_to_tz_time
@@ -0,0 +1,58 @@
1
+ # Copyright 2020 Camptocamp SA
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
3
+ from datetime import date, datetime
4
+
5
+ import pytz
6
+
7
+ UTC_TZ = pytz.timezone("UTC")
8
+
9
+
10
+ def tz_to_tz_naive_datetime(from_tz, to_tz, date_time):
11
+ """
12
+ Convert tz-naive datetime from a specifc tz to a tz-naive datetime of a specific tz
13
+
14
+ :param from_tz: pytz.timezone object or tz selection value
15
+ :param to_tz: pytz.timezone object or tz selection value
16
+ :param date_time: tz-naive datetime.datetime object
17
+ :return: tz-naive datetime.datetime object
18
+ """
19
+ if isinstance(from_tz, str):
20
+ from_tz = pytz.timezone(from_tz)
21
+ if isinstance(to_tz, str):
22
+ to_tz = pytz.timezone(to_tz)
23
+ return from_tz.localize(date_time).astimezone(to_tz).replace(tzinfo=None)
24
+
25
+
26
+ def tz_to_utc_naive_datetime(from_tz, date_time):
27
+ return tz_to_tz_naive_datetime(from_tz, UTC_TZ, date_time)
28
+
29
+
30
+ def utc_to_tz_naive_datetime(to_tz, date_time):
31
+ return tz_to_tz_naive_datetime(UTC_TZ, to_tz, date_time)
32
+
33
+
34
+ def tz_to_tz_time(from_tz, to_tz, time, base_date=None):
35
+ """
36
+ Convert datetime.time from a specific tz to a datetime.time of a specific tz
37
+
38
+ :param from_tz: pytz.timezone object or tz selection value
39
+ :param to_tz: pytz.timezone object or tz selection value
40
+ :param time: datetime.time object
41
+ :param base_date: OPTIONAL datetime.date or datetime.datetime object to use
42
+ for the conversion
43
+ :return: datetime.time object
44
+ """
45
+ # Combine time with a date
46
+ if base_date is None:
47
+ base_date = date.today()
48
+ date_time = datetime.combine(base_date, time)
49
+ new_date_time = tz_to_tz_naive_datetime(from_tz, to_tz, date_time)
50
+ return new_date_time.time()
51
+
52
+
53
+ def tz_to_utc_time(from_tz, time, base_date=None):
54
+ return tz_to_tz_time(from_tz, UTC_TZ, time, base_date=base_date)
55
+
56
+
57
+ def utc_to_tz_time(to_tz, time, base_date=None):
58
+ return tz_to_tz_time(UTC_TZ, to_tz, time, base_date=base_date)
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <odoo>
3
+ <record id="view_partner_form_inherit" model="ir.ui.view">
4
+ <field name="name">res.partner.form.inherit</field>
5
+ <field name="model">res.partner</field>
6
+ <field name="inherit_id" ref="base.view_partner_form" />
7
+ <field name="arch" type="xml">
8
+ <field name="vat" position="before">
9
+ <field name="tz" />
10
+ </field>
11
+ </field>
12
+ </record>
13
+ </odoo>
@@ -0,0 +1,118 @@
1
+ Metadata-Version: 2.1
2
+ Name: odoo-addon-partner_tz
3
+ Version: 15.0.1.0.0.2
4
+ Summary: Remove partner timezone default value and display on form
5
+ Home-page: https://github.com/OCA/partner-contact
6
+ Author: Camptocamp, Odoo Community Association (OCA)
7
+ Author-email: support@odoo-community.org
8
+ License: AGPL-3
9
+ Classifier: Programming Language :: Python
10
+ Classifier: Framework :: Odoo
11
+ Classifier: Framework :: Odoo :: 15.0
12
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
13
+ Classifier: Development Status :: 4 - Beta
14
+ Requires-Python: >=3.8
15
+ Requires-Dist: odoo<15.1dev,>=15.0a
16
+
17
+ .. image:: https://odoo-community.org/readme-banner-image
18
+ :target: https://odoo-community.org/get-involved?utm_source=readme
19
+ :alt: Odoo Community Association
20
+
21
+ ================
22
+ Partner timezone
23
+ ================
24
+
25
+ ..
26
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
+ !! This file is generated by oca-gen-addon-readme !!
28
+ !! changes will be overwritten. !!
29
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
30
+ !! source digest: sha256:e9f24f0954ede8c8a311275600048f7110ce81069bf6bd80207f4119991bd3cb
31
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
32
+
33
+ .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
34
+ :target: https://odoo-community.org/page/development-status
35
+ :alt: Beta
36
+ .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
37
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
38
+ :alt: License: AGPL-3
39
+ .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpartner--contact-lightgray.png?logo=github
40
+ :target: https://github.com/OCA/partner-contact/tree/15.0/partner_tz
41
+ :alt: OCA/partner-contact
42
+ .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
43
+ :target: https://translation.odoo-community.org/projects/partner-contact-15-0/partner-contact-15-0-partner_tz
44
+ :alt: Translate me on Weblate
45
+ .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
46
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/partner-contact&target_branch=15.0
47
+ :alt: Try me on Runboat
48
+
49
+ |badge1| |badge2| |badge3| |badge4| |badge5|
50
+
51
+ This module displays the timezone field on partner form view.
52
+ Moreover it provides a few tools function in `tools/tz_utils.py`.
53
+
54
+ **Table of contents**
55
+
56
+ .. contents::
57
+ :local:
58
+
59
+ Known issues / Roadmap
60
+ ======================
61
+
62
+ * Odoo default value for timezone field uses the tz set on the connected user.
63
+ So if a user creates a partner located in a different timezone than his own,
64
+ the created partner will be set in the user's timezone instead of having the
65
+ timezone from its own location.
66
+ Ideally, we should change this behaviour to get the timezone from the country
67
+ and city of the partner when they are defined.
68
+ http://www.geonames.org/export/web-services.html#timezone might be a good
69
+ starting point.
70
+
71
+ Bug Tracker
72
+ ===========
73
+
74
+ Bugs are tracked on `GitHub Issues <https://github.com/OCA/partner-contact/issues>`_.
75
+ In case of trouble, please check there if your issue has already been reported.
76
+ If you spotted it first, help us to smash it by providing a detailed and welcomed
77
+ `feedback <https://github.com/OCA/partner-contact/issues/new?body=module:%20partner_tz%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
78
+
79
+ Do not contact contributors directly about support or help with technical issues.
80
+
81
+ Credits
82
+ =======
83
+
84
+ Authors
85
+ ~~~~~~~
86
+
87
+ * Camptocamp
88
+
89
+ Contributors
90
+ ~~~~~~~~~~~~
91
+
92
+ * Akim Juillerat <akim.juillerat@camptocamp.com>
93
+ * Hiep (Nguyen Hoang) <hiepnh@trobz.com>
94
+ * Phuc (Tran Thanh) <phuc@trobz.com>
95
+
96
+ Other credits
97
+ ~~~~~~~~~~~~~
98
+
99
+ The development of this module has been financially supported by:
100
+
101
+ * Camptocamp
102
+
103
+ Maintainers
104
+ ~~~~~~~~~~~
105
+
106
+ This module is maintained by the OCA.
107
+
108
+ .. image:: https://odoo-community.org/logo.png
109
+ :alt: Odoo Community Association
110
+ :target: https://odoo-community.org
111
+
112
+ OCA, or the Odoo Community Association, is a nonprofit organization whose
113
+ mission is to support the collaborative development of Odoo features and
114
+ promote its widespread use.
115
+
116
+ This module is part of the `OCA/partner-contact <https://github.com/OCA/partner-contact/tree/15.0/partner_tz>`_ project on GitHub.
117
+
118
+ You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -0,0 +1,21 @@
1
+ odoo/addons/partner_tz/README.rst,sha256=tL4N3WAaLww-Cdg00PRNRp3W3FWeNjk1fYr5BOB6lR8,3798
2
+ odoo/addons/partner_tz/__init__.py,sha256=ve4KKRiLaHG_6_5VlZud4WWu2BR_-TlCy0iGfyM6NZo,20
3
+ odoo/addons/partner_tz/__manifest__.py,sha256=9ikaLoyDf9vvU7O-7_SgzLhI2r7H-ylGrrsDjztJ9J4,562
4
+ odoo/addons/partner_tz/i18n/it.po,sha256=Hr35SLJ_Yhn-bYwUTxsbyp3jQvjD7wKU-nI8r4ROxd0,411
5
+ odoo/addons/partner_tz/i18n/partner_tz.pot,sha256=BIyTShSvBhiJMqh2td4QGlxB8SDDzDZd0Pqu6WZgBR8,341
6
+ odoo/addons/partner_tz/readme/CONTRIBUTORS.rst,sha256=3jCiU_4p-KbytOIDDJGT_i1OBRPyaK-cC4tg2LvKWns,127
7
+ odoo/addons/partner_tz/readme/CREDITS.rst,sha256=qJic0c2qWDTloupuq6j69JdIEo70Xpy6-b4MZho00Og,80
8
+ odoo/addons/partner_tz/readme/DESCRIPTION.rst,sha256=AMOqHs8QvI0_21Rhp7QwH6LFRkASlDRuBSDgvWs1ogA,128
9
+ odoo/addons/partner_tz/readme/ROADMAP.rst,sha256=UwlU7b4qx6f8CKiQ9cxTpFyCCUigY3kodYkGudxW6JA,494
10
+ odoo/addons/partner_tz/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
11
+ odoo/addons/partner_tz/static/description/index.html,sha256=_xSptdE5WmDUb10RxUsbtR0Pqg25mk111tX0PZ-La0Q,13895
12
+ odoo/addons/partner_tz/tests/__init__.py,sha256=Py-67yMAWchjAzJIPBz3ggJLhUsgF05WA8Gqs9AYiT0,22
13
+ odoo/addons/partner_tz/tests/common.py,sha256=23Afg9uufwnrpThFl27M3ZJ854pku-gLTdbe4Nao6qA,833
14
+ odoo/addons/partner_tz/tests/test_tz.py,sha256=bBKLilcyIF7CB_wnw2xCx-J9xjxE8gO-Z-tQ-yFxncI,2927
15
+ odoo/addons/partner_tz/tools/__init__.py,sha256=MInInfYms95bA-cHQRMdShmSPjdGh6GPuloyGMmnqZo,250
16
+ odoo/addons/partner_tz/tools/tz_utils.py,sha256=8txkUMlnnsgZzle56Z5V0HLvOr6WmbXRcifZi-AGvfw,1957
17
+ odoo/addons/partner_tz/views/res_partner.xml,sha256=vEEYxrcHA1GmR5v2aFuhSPu23FyX_9jybSQTVrO9oQU,467
18
+ odoo_addon_partner_tz-15.0.1.0.0.2.dist-info/METADATA,sha256=hDR2GBxN4CeKl-ziFY1dwbbjg9TB7C0lKtNWzh-zTvA,4387
19
+ odoo_addon_partner_tz-15.0.1.0.0.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
20
+ odoo_addon_partner_tz-15.0.1.0.0.2.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
21
+ odoo_addon_partner_tz-15.0.1.0.0.2.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.45.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+