Kaynağa Gözat

Fix null date and datetime values that got stored like 0000-00-00. Good riddance!

version-14
Anand Doshi 10 yıl önce
ebeveyn
işleme
1a06e5cd6c
4 değiştirilmiş dosya ile 33 ekleme ve 1 silme
  1. +4
    -0
      frappe/model/base_document.py
  2. +1
    -1
      frappe/patches.txt
  3. +20
    -0
      frappe/patches/v5_0/fix_null_date_datetime.py
  4. +8
    -0
      frappe/utils/data.py

+ 4
- 0
frappe/model/base_document.py Dosyayı Görüntüle

@@ -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):


+ 1
- 1
frappe/patches.txt Dosyayı Görüntüle

@@ -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

+ 20
- 0
frappe/patches/v5_0/fix_null_date_datetime.py Dosyayı Görüntüle

@@ -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()

+ 8
- 0
frappe/utils/data.py Dosyayı Görüntüle

@@ -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



Yükleniyor…
İptal
Kaydet