Bläddra i källkod

[fix] [minor] import parent + child data

version-14
Nabin Hait 12 år sedan
förälder
incheckning
ca54d30099
2 ändrade filer med 49 tillägg och 29 borttagningar
  1. +29
    -29
      core/page/data_import_tool/data_import_tool.py
  2. +20
    -0
      webnotes/model/doclist.py

+ 29
- 29
core/page/data_import_tool/data_import_tool.py Visa fil

@@ -80,17 +80,6 @@ def get_template():


if dt==doctype: if dt==doctype:
column_start_end[dt] = webnotes._dict({"start": 0}) column_start_end[dt] = webnotes._dict({"start": 0})
if all_doctypes and with_data:
append_field_column(webnotes._dict({
"fieldname": "modified",
"label": "Last Updated On",
"fieldtype": "Data",
"reqd": 1,
"idx": 0,
"info": "Don't change!"
}), True)
else: else:
column_start_end[dt] = webnotes._dict({"start": len(columns)}) column_start_end[dt] = webnotes._dict({"start": len(columns)})
@@ -167,7 +156,11 @@ def get_template():
w.writerow([data_keys.data_separator]) w.writerow([data_keys.data_separator])


def add_data(): def add_data():
def add_data_row(row_group, dt, d, rowidx):
def add_data_row(row_group, dt, doc, rowidx):
d = doc.copy()
if all_doctypes:
d.name = '"'+ d.name+'"'

if len(row_group) < rowidx + 1: if len(row_group) < rowidx + 1:
row_group.append([""] * (len(columns) + 1)) row_group.append([""] * (len(columns) + 1))
row = row_group[rowidx] row = row_group[rowidx]
@@ -180,8 +173,6 @@ def get_template():
for doc in data: for doc in data:
# add main table # add main table
row_group = [] row_group = []
if all_doctypes:
doc.modified = '"'+ doc.modified+'"'
add_data_row(row_group, doctype, doc, 0) add_data_row(row_group, doctype, doc, 0)
@@ -224,10 +215,18 @@ def get_template():
webnotes.response['doctype'] = doctype webnotes.response['doctype'] = doctype


@webnotes.whitelist() @webnotes.whitelist()
def upload():
def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False):
"""upload data""" """upload data"""
webnotes.mute_emails = True webnotes.mute_emails = True
webnotes.check_admin_or_system_manager() webnotes.check_admin_or_system_manager()
# extra input params
import json
params = json.loads(webnotes.form_dict.get("params") or '{}')
if params.get("_submit"):
submit_after_import = True
if params.get("ignore_encoding_errors"):
ignore_encoding_errors = True


from webnotes.utils.datautils import read_csv_content_from_uploaded_file from webnotes.utils.datautils import read_csv_content_from_uploaded_file


@@ -311,6 +310,10 @@ def upload():
d[fieldname] = flt(d[fieldname]) d[fieldname] = flt(d[fieldname])
except IndexError, e: except IndexError, e:
pass pass
# scrub quotes from name and modified
if d.get("name") and d["name"].startswith('"'):
d[fieldname] = d[fieldname][1:-1]


if sum([0 if not val else 1 for val in d.values()]): if sum([0 if not val else 1 for val in d.values()]):
d['doctype'] = dt d['doctype'] = dt
@@ -330,14 +333,11 @@ def upload():
return [d] return [d]


def main_doc_empty(row): def main_doc_empty(row):
return not (row and len(row) > 2 and (row[1] or row[2]))
return not (row and ((len(row) > 1 and row[1]) or (len(row) > 2 and row[2])))
# extra input params
import json
params = json.loads(webnotes.form_dict.get("params") or '{}')

# header # header
rows = read_csv_content_from_uploaded_file(params.get("ignore_encoding_errors"))
if not rows:
rows = read_csv_content_from_uploaded_file(ignore_encoding_errors)
start_row = get_start_row() start_row = get_start_row()
header = rows[:start_row] header = rows[:start_row]
data = rows[start_row:] data = rows[start_row:]
@@ -381,17 +381,17 @@ def upload():
doclist = get_doclist(row_idx) doclist = get_doclist(row_idx)
try: try:
webnotes.message_log = [] webnotes.message_log = []
if len(doclist) > 1:
bean = webnotes.bean(doclist)
if overwrite and bean.doc.modified:
# remove the extra quotes added to preserve date formatting
bean.doc.modified = bean.doc.modified[1:-1]
if len(doclist) > 1:
if overwrite:
bean = webnotes.bean(doctype, doclist[0]["name"])
bean.doclist.update(doclist)
bean.save() bean.save()
ret.append('Updated row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name))) ret.append('Updated row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name)))
else: else:
bean = webnotes.bean(doclist)
bean.insert() bean.insert()
ret.append('Inserted row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name))) ret.append('Inserted row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name)))
if params.get("_submit"):
if submit_after_import:
bean.submit() bean.submit()
ret.append('Submitted row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name))) ret.append('Submitted row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name)))
else: else:
@@ -409,7 +409,7 @@ def upload():
doc.parent), unicode(doc.idx))) doc.parent), unicode(doc.idx)))
parent_list.append(doc.parent) parent_list.append(doc.parent)
else: else:
ret.append(import_doc(doclist[0], doctype, overwrite, row_idx, params.get("_submit")))
ret.append(import_doc(doclist[0], doctype, overwrite, row_idx, submit_after_import))


except Exception, e: except Exception, e:
error = True error = True
@@ -466,4 +466,4 @@ def get_parent_field(doctype, parenttype):
def delete_child_rows(rows, doctype): def delete_child_rows(rows, doctype):
"""delete child rows for all parents""" """delete child rows for all parents"""
for p in list(set([r[1] for r in rows])): for p in list(set([r[1] for r in rows])):
webnotes.conn.sql("""delete from `tab%s` where parent=%s""" % (doctype, '%s'), p)
webnotes.conn.sql("""delete from `tab%s` where parent=%s""" % (doctype, '%s'), p)

+ 20
- 0
webnotes/model/doclist.py Visa fil

@@ -110,6 +110,26 @@ class DocList(list):
if not doc.idx: if not doc.idx:
siblings = [int(self.get_item_value(d, "idx") or 0) for d in self.get({"parentfield": doc.parentfield})] siblings = [int(self.get_item_value(d, "idx") or 0) for d in self.get({"parentfield": doc.parentfield})]
doc.idx = (max(siblings) + 1) if siblings else 1 doc.idx = (max(siblings) + 1) if siblings else 1
def update(self, doclist):
for d in doclist:
matched = False
for ref in self:
if isinstance(ref, dict):
fielddata = ref
else:
fielddata = ref.fields
if d["name"] and ref.name and ref.name == d["name"]:
ref.fields.update(d)
matched = True
break
if not matched:
d["__islocal"] = 1
self.append(d)
return self
def objectify(doclist): def objectify(doclist):
from webnotes.model.doc import Document from webnotes.model.doc import Document


Laddar…
Avbryt
Spara