diff --git a/base_jsonify/models/models.py b/base_jsonify/models/models.py index 6fa32f90d..195eb9e17 100644 --- a/base_jsonify/models/models.py +++ b/base_jsonify/models/models.py @@ -70,9 +70,15 @@ class Base(models.AbstractModel): if value is False and field_type != "boolean": value = None elif field_type == "date": - value = fields.Date.to_string(value) + value = fields.Date.to_date(value).isoformat() elif field_type == "datetime": - value = fields.Datetime.to_string(value) + # Ensures value is a datetime + value = fields.Datetime.to_datetime(value) + # Get the timestamp converted to the client's timezone. + # This call also add the tzinfo into the datetime + # object + value = fields.Datetime.context_timestamp(rec, value) + value = value.isoformat() res[json_key] = value result.append(res) return result diff --git a/base_jsonify/tests/test_get_parser.py b/base_jsonify/tests/test_get_parser.py index 582d02aff..9c9b79a32 100644 --- a/base_jsonify/tests/test_get_parser.py +++ b/base_jsonify/tests/test_get_parser.py @@ -41,6 +41,8 @@ class TestParser(TransactionCase): self.assertEqual(parser, expected_parser) def test_json_export(self): + # Enforces TZ to validate the serialization result of a Datetime + self.env.user.tz = "Europe/Brussels" parser = [ "lang", "comment", @@ -79,9 +81,14 @@ class TestParser(TransactionCase): }, ) ], - "date": fields.Date.today(), + "date": fields.Date.from_string("2019-10-31"), } ) + # put our own create date to ease tests + self.env.cr.execute( + "update res_partner set create_date=%s where id=%s", + ("2019-10-31 14:39:49", partner.id), + ) expected_json = { "lang": "en_US", "comment": None, @@ -100,8 +107,8 @@ class TestParser(TransactionCase): "email": None, } ], - "create_date": fields.Datetime.to_string(partner.create_date), - "date": fields.Date.to_string(partner.date), + "create_date": "2019-10-31T15:39:49+01:00", + "date": "2019-10-31", } json_partner = partner.jsonify(parser)