From 5199d2bf9e67c271aae8d07dc0cc1477afad0a8b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 22 Aug 2011 14:35:16 +0200 Subject: [PATCH] [imp] made parse function and began tests bzr revid: nicolas.vanhoren@openerp.com-20110822123516-7qf7700v0irc70nd --- addons/base/static/src/js/formats.js | 62 ++++++++++++++++++++++++++-- addons/base/static/test/formats.js | 16 +++++++ addons/base/static/test/test.html | 5 +++ 3 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 addons/base/static/test/formats.js diff --git a/addons/base/static/src/js/formats.js b/addons/base/static/src/js/formats.js index 3db6138106c..a2c7956df8b 100644 --- a/addons/base/static/src/js/formats.js +++ b/addons/base/static/src/js/formats.js @@ -48,7 +48,7 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) { return value.strftime(_.sprintf("%s %s", openerp.base._t.database.parameters.date_format, openerp.base._t.database.parameters.time_format)); } catch (e) { - return openerp.base.datetime_to_str(value); + return value.strftime("%m/%d/%Y %H:%M:%S"); } return value; case 'date': @@ -57,21 +57,75 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) { try { return value.strftime(openerp.base._t.database.parameters.date_format); } catch (e) { - return openerp.base.date_to_str(value); + return value.strftime("%m/%d/%Y"); } - case 'datetime': + case 'time': if (typeof(value) == "string") value = openerp.base.str_to_time(value); try { return value.strftime(openerp.base._t.database.parameters.time_format); } catch (e) { - return openerp.base.time_to_str(value); + return value.strftime("%H:%M:%S"); } default: return value; } }; +openerp.base.parse_value = function (value, descriptor, value_if_empty) { + switch (value) { + case false: + case "": + return value_if_empty === undefined ? false : value_if_empty; + } + switch (descriptor.widget || descriptor.type) { + case 'integer': + var tmp = Number(value); + if (isNaN(tmp)) + throw value + " is not a correct integer"; + return tmp; + case 'float': + var tmp = Number(value); + if (!isNaN(tmp)) + return tmp; + tmp = tmp.replace(openerp.base._t.database.parameters.decimal_point, "."); + var tmp2 = tmp; + do { + tmp = tmp2; + tmp2 = tmp.replace(openerp.base._t.database.parameters.thousands_sep, ""); + } while(tmp !== tmp2); + tmp = Number(value); + if (isNaN(tmp)) + throw value + " is not a correct float"; + return tmp; + case 'float_time': + var tmp = value.split(":"); + if (tmp.length != 2) + throw value + " is not a correct float_time"; + var tmp1 = openerp.base.parse_value(tmp[0], {type: "integer"}); + var tmp2 = openerp.base.parse_value(tmp[1], {type: "integer"}); + return tmp1 + (tmp2 / 60); + case 'progressbar': + return openerp.base.parse_value(value, {type: "float"}); + case 'datetime': + var tmp = Date.parse(value); + if (tmp !== null) + return tmp; + throw value + " is not a valid datetime"; + case 'date': + var tmp = Date.parse(value); + if (tmp !== null) + return tmp; + throw value + " is not a valid date"; + case 'time': + var tmp = Date.parse(value); + if (tmp !== null) + return tmp; + throw value + " is not a valid time"; + } + return value; +}; + /** * Formats a provided cell based on its field type * diff --git a/addons/base/static/test/formats.js b/addons/base/static/test/formats.js new file mode 100644 index 00000000000..4843a33be60 --- /dev/null +++ b/addons/base/static/test/formats.js @@ -0,0 +1,16 @@ +$(document).ready(function () { + var openerp; + module('base-formats', { + setup: function () { + openerp = window.openerp.init(); + window.openerp.base.core(openerp); + window.openerp.base.dates(openerp); + window.openerp.base.formats(openerp); + } + }); + test("format_datetime", function () { + var date = openerp.base.str_to_datetime("2009-05-04 12:34:23"); + var str = openerp.base.format_value(date, {type:"datetime"}); + console.log(str); + }); +}); \ No newline at end of file diff --git a/addons/base/static/test/test.html b/addons/base/static/test/test.html index 14df778cd02..2b8e0510a21 100644 --- a/addons/base/static/test/test.html +++ b/addons/base/static/test/test.html @@ -9,15 +9,19 @@ + + + + @@ -40,4 +44,5 @@ +