Parcourir la source

[fix] [minor] import parent + child data

version-14
Nabin Hait il y a 12 ans
Parent
révision
ca54d30099
2 fichiers modifiés avec 49 ajouts et 29 suppressions
  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 Voir le fichier

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

if dt==doctype:
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:
column_start_end[dt] = webnotes._dict({"start": len(columns)})
@@ -167,7 +156,11 @@ def get_template():
w.writerow([data_keys.data_separator])

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

@webnotes.whitelist()
def upload():
def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False):
"""upload data"""
webnotes.mute_emails = True
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

@@ -311,6 +310,10 @@ def upload():
d[fieldname] = flt(d[fieldname])
except IndexError, e:
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()]):
d['doctype'] = dt
@@ -330,14 +333,11 @@ def upload():
return [d]

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
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()
header = rows[:start_row]
data = rows[start_row:]
@@ -381,17 +381,17 @@ def upload():
doclist = get_doclist(row_idx)
try:
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()
ret.append('Updated row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name)))
else:
bean = webnotes.bean(doclist)
bean.insert()
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()
ret.append('Submitted row (#%d) %s' % (row_idx + 1, getlink(bean.doc.doctype, bean.doc.name)))
else:
@@ -409,7 +409,7 @@ def upload():
doc.parent), unicode(doc.idx)))
parent_list.append(doc.parent)
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:
error = True
@@ -466,4 +466,4 @@ def get_parent_field(doctype, parenttype):
def delete_child_rows(rows, doctype):
"""delete child rows for all parents"""
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 Voir le fichier

@@ -110,6 +110,26 @@ class DocList(list):
if not doc.idx:
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
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):
from webnotes.model.doc import Document


Chargement…
Annuler
Enregistrer