From 1a06e5cd6c6fc67d8cc0ab23dbcf224462ef6af0 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Sun, 5 Apr 2015 17:19:55 +0530 Subject: [PATCH] Fix null date and datetime values that got stored like 0000-00-00. Good riddance! --- frappe/model/base_document.py | 4 ++++ frappe/patches.txt | 2 +- frappe/patches/v5_0/fix_null_date_datetime.py | 20 +++++++++++++++++++ frappe/utils/data.py | 8 ++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 frappe/patches/v5_0/fix_null_date_datetime.py diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index d6173aff9a..04d0ef9e89 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -173,6 +173,10 @@ class BaseDocument(object): d = {} for fieldname in self.meta.get_valid_columns(): d[fieldname] = self.get(fieldname) + + if d[fieldname]=="" and self.meta.get_field(fieldname).fieldtype in ("Datetime", "Date"): + d[fieldname] = None + return d def init_valid_columns(self): diff --git a/frappe/patches.txt b/frappe/patches.txt index 99603f23b3..ec96ccd865 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -70,4 +70,4 @@ frappe.patches.v5_0.bookmarks_to_stars frappe.patches.v5_0.style_settings_to_website_theme frappe.patches.v5_0.rename_ref_type_fieldnames frappe.patches.v5_0.fix_email_alert - +frappe.patches.v5_0.fix_null_date_datetime diff --git a/frappe/patches/v5_0/fix_null_date_datetime.py b/frappe/patches/v5_0/fix_null_date_datetime.py new file mode 100644 index 0000000000..e4f4e9e8b9 --- /dev/null +++ b/frappe/patches/v5_0/fix_null_date_datetime.py @@ -0,0 +1,20 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + for table in frappe.db.get_tables(): + changed = False + desc = frappe.db.sql("desc `{table}`".format(table=table), as_dict=True) + for field in desc: + if field["Type"] == "date": + frappe.db.sql("""update `{table}` set `{fieldname}`=null where `{fieldname}`='0000-00-00'""".format( + table=table, fieldname=field["Field"])) + changed = True + + elif field["Type"] == "datetime(6)": + frappe.db.sql("""update `{table}` set `{fieldname}`=null where `{fieldname}`='0000-00-00 00:00:00.000000'""".format( + table=table, fieldname=field["Field"])) + changed = True + + if changed: + frappe.db.commit() diff --git a/frappe/utils/data.py b/frappe/utils/data.py index cc006630be..afc452a4af 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -19,6 +19,10 @@ def getdate(string_date): """ Coverts string date (yyyy-mm-dd) to datetime.date object """ + # dateutil parser does not agree with dates like 0000-00-00 + if not string_date or string_date=="0000-00-00": + return None + if isinstance(string_date, datetime.datetime): return string_date.date() @@ -28,6 +32,10 @@ def getdate(string_date): return parser.parse(string_date).date() def get_datetime(datetime_str): + # dateutil parser does not agree with dates like 0000-00-00 + if not datetime_str or (datetime_str or "").startswith("0000-00-00"): + return None + if isinstance(datetime_str, (datetime.datetime, datetime.timedelta)): return datetime_str