diff --git a/frappe/custom/doctype/package/package.js b/frappe/custom/doctype/package/package.js index f6b908bcf1..aa6fdbe635 100644 --- a/frappe/custom/doctype/package/package.js +++ b/frappe/custom/doctype/package/package.js @@ -17,6 +17,9 @@ frappe.ui.form.on('Package', { }; }) }, + import: function(frm) { + frm.call("import_from_package"); + } }); frappe.ui.form.on('Package DocType', { diff --git a/frappe/custom/doctype/package/package.json b/frappe/custom/doctype/package/package.json index 1d71b744d1..7bfdf719cf 100644 --- a/frappe/custom/doctype/package/package.json +++ b/frappe/custom/doctype/package/package.json @@ -5,7 +5,10 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "export_package" + "export_package", + "import_section", + "attach", + "import" ], "fields": [ { @@ -14,11 +17,28 @@ "fieldtype": "Table", "label": "Package", "options": "Package DocType" + }, + { + "collapsible": 1, + "collapsible_depends_on": "attach", + "fieldname": "import_section", + "fieldtype": "Section Break", + "label": "Import Package" + }, + { + "fieldname": "import", + "fieldtype": "Button", + "label": "Import" + }, + { + "fieldname": "attach", + "fieldtype": "Attach", + "label": "Attach Package" } ], "issingle": 1, "links": [], - "modified": "2020-03-17 16:41:13.542896", + "modified": "2020-03-19 22:03:06.012473", "modified_by": "Administrator", "module": "Custom", "name": "Package", diff --git a/frappe/custom/doctype/package/package.py b/frappe/custom/doctype/package/package.py index 31f681486f..2bf5a5f7cc 100644 --- a/frappe/custom/doctype/package/package.py +++ b/frappe/custom/doctype/package/package.py @@ -11,9 +11,22 @@ from frappe.model.document import Document from frappe.core.doctype.version.version import get_diff from frappe.utils.file_manager import save_file, get_file from frappe import _ +from six import string_types class Package(Document): - pass + + def import_from_package(self): + filters = {"attached_to_doctype": "Package", "attached_to_name": "Package"} + files = frappe.get_list("File", filters=filters, limit=1, order_by="creation desc") + if not files: + frappe.msgprint(_("No file attach for Importing.")) + return + + for f in files: + fname, fcontents = get_file(f.name) + import_package(fcontents) + + frappe.msgprint(_("Package Imported.")) @frappe.whitelist() def export_package(): @@ -57,10 +70,10 @@ def export_package(): def import_package(package=None): """Import package from JSON""" - content = json.loads(package) - length = len(content) + if isinstance(package, string_types): + package = json.loads(package) - for doc in content: + for doc in package: modified = doc.pop("modified") overwrite = doc.pop("overwrite") attachments = doc.pop("attachments") diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 4c64624098..96bdb20841 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -216,7 +216,7 @@ def get_date_str(date_obj): def get_time_str(timedelta_obj): if isinstance(timedelta_obj, string_types): - timedelta_obj = to_timedelta(date_obj) + timedelta_obj = to_timedelta(timedelta_obj) hours, remainder = divmod(timedelta_obj.seconds, 3600) minutes, seconds = divmod(remainder, 60)