def get_template(): args = webnotes.form_dict global doclist doclist = webnotes.model.doctype.get("Attendance") w = UnicodeWriter() w = add_header(w) w = add_data(w, args) # write out response as a type csv webnotes.response['result'] = cstr(w.getvalue()) webnotes.response['type'] = 'csv' webnotes.response['doctype'] = "Attendance"
def get_template(): if not webnotes.has_permission("Attendance", "create"): raise webnotes.PermissionError args = webnotes.local.form_dict webnotes.local.uploadattendance_doclist = webnotes.model.doctype.get( "Attendance") w = UnicodeWriter() w = add_header(w) w = add_data(w, args) # write out response as a type csv webnotes.response['result'] = cstr(w.getvalue()) webnotes.response['type'] = 'csv' webnotes.response['doctype'] = "Attendance"
def get_template(doctype=None, parent_doctype=None, all_doctypes="No", with_data="No"): webnotes.check_admin_or_system_manager() all_doctypes = all_doctypes == "Yes" if not parent_doctype: parent_doctype = doctype column_start_end = {} if all_doctypes: doctype_parentfield = {} child_doctypes = [] for d in get_table_fields(doctype): child_doctypes.append(d[0]) doctype_parentfield[d[0]] = d[1] def add_main_header(): w.writerow(['Data Import Template']) w.writerow([data_keys.main_table, doctype]) if parent_doctype != doctype: w.writerow([data_keys.parent_table, parent_doctype]) else: w.writerow(['']) w.writerow(['']) w.writerow(['Notes:']) w.writerow(['Please do not change the template headings.']) w.writerow(['First data column must be blank.']) w.writerow([ 'If you are uploading new records, leave the "name" (ID) column blank.' ]) w.writerow([ 'If you are uploading new records, "Naming Series" becomes mandatory, if present.' ]) w.writerow([ 'Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.' ]) w.writerow(['For updating, you can update only selective columns.']) w.writerow([ 'You can only upload upto 5000 records in one go. (may be less in some cases)' ]) if key == "parent": w.writerow([ '"Parent" signifies the parent table in which this row must be added' ]) w.writerow([ 'If you are updating, please select "Overwrite" else existing rows will not be deleted.' ]) def build_field_columns(dt): doctype_dl = webnotes.model.doctype.get(dt) tablecolumns = filter(None, [ doctype_dl.get_field(f[0]) for f in webnotes.conn.sql('desc `tab%s`' % dt) ]) tablecolumns.sort(lambda a, b: a.idx - b.idx) if dt == doctype: column_start_end[dt] = webnotes._dict({"start": 0}) else: column_start_end[dt] = webnotes._dict({"start": len(columns)}) append_field_column( webnotes._dict({ "fieldname": "name", "label": "ID", "fieldtype": "Data", "reqd": 1, "idx": 0, "info": "Leave blank for new records" }), True) for docfield in tablecolumns: append_field_column(docfield, True) # all non mandatory fields for docfield in tablecolumns: append_field_column(docfield, False) # append DocType name tablerow[column_start_end[dt].start + 1] = dt if dt != doctype: tablerow[column_start_end[dt].start + 2] = doctype_parentfield[dt] column_start_end[dt].end = len(columns) + 1 def append_field_column(docfield, mandatory): if docfield and ((mandatory and docfield.reqd) or not (mandatory or docfield.reqd)) \ and (docfield.fieldname not in ('parenttype', 'trash_reason')) and not docfield.hidden: tablerow.append("") fieldrow.append(docfield.fieldname) labelrow.append(docfield.label) mandatoryrow.append(docfield.reqd and 'Yes' or 'No') typerow.append(docfield.fieldtype) inforow.append(getinforow(docfield)) columns.append(docfield.fieldname) def append_empty_field_column(): tablerow.append("~") fieldrow.append("~") labelrow.append("") mandatoryrow.append("") typerow.append("") inforow.append("") columns.append("") def getinforow(docfield): """make info comment for options, links etc.""" if docfield.fieldtype == 'Select': if not docfield.options: return '' elif docfield.options.startswith('link:'): return 'Valid %s' % docfield.options[5:] else: return 'One of: %s' % ', '.join( filter(None, docfield.options.split('\n'))) elif docfield.fieldtype == 'Link': return 'Valid %s' % docfield.options elif docfield.fieldtype in ('Int'): return 'Integer' elif docfield.fieldtype == "Check": return "0 or 1" elif docfield.info: return docfield.info else: return '' def add_field_headings(): w.writerow(tablerow) w.writerow(labelrow) w.writerow(fieldrow) w.writerow(mandatoryrow) w.writerow(typerow) w.writerow(inforow) w.writerow([data_keys.data_separator]) def add_data(): 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] for i, c in enumerate(columns[column_start_end[dt]. start:column_start_end[dt].end]): row[column_start_end[dt].start + i + 1] = d.get(c, "") if with_data == 'Yes': data = webnotes.conn.sql("""select * from `tab%s` where docstatus<2""" \ % doctype, as_dict=1) for doc in data: # add main table row_group = [] add_data_row(row_group, doctype, doc, 0) if all_doctypes: # add child tables for child_doctype in child_doctypes: for ci, child in enumerate( webnotes.conn.sql("""select * from `tab%s` where parent=%s order by idx""" % (child_doctype, "%s"), doc.name, as_dict=1)): add_data_row(row_group, child_doctype, child, ci) for row in row_group: w.writerow(row) w = UnicodeWriter() key = 'parent' if parent_doctype != doctype else 'name' add_main_header() w.writerow(['']) tablerow = [data_keys.doctype, ""] labelrow = ["Column Labels:", "ID"] fieldrow = [data_keys.columns, key] mandatoryrow = ['Mandatory:', 'Yes'] typerow = ['Type:', 'Data (text)'] inforow = ['Info:', ''] columns = [key] build_field_columns(doctype) if all_doctypes: for d in child_doctypes: append_empty_field_column() build_field_columns(d) add_field_headings() add_data() # write out response as a type csv webnotes.response['result'] = cstr(w.getvalue()) webnotes.response['type'] = 'csv' webnotes.response['doctype'] = doctype
def get_template(): doctype = webnotes.form_dict['doctype'] parenttype = webnotes.form_dict.get('parent_doctype') doctype_dl = webnotes.model.doctype.get(doctype) tablecolumns = [f[0] for f in webnotes.conn.sql('desc `tab%s`' % doctype)] def getinforow(docfield): """make info comment""" if docfield.fieldtype == 'Select': if not docfield.options: return '' elif docfield.options.startswith('link:'): return 'Valid %s' % docfield.options[5:] else: return 'One of: %s' % ', '.join( filter(None, docfield.options.split('\n'))) if docfield.fieldtype == 'Link': return 'Valid %s' % docfield.options if docfield.fieldtype in ('Int'): return 'Integer' if docfield.fieldtype == "Check": return "0 or 1" else: return '' w = UnicodeWriter() key = 'name' w.writerow(['Data Import Template']) w.writerow([data_keys.main_table, doctype]) if parenttype != doctype: w.writerow([data_keys.parent_table, parenttype]) key = 'parent' else: w.writerow(['']) w.writerow(['']) w.writerow(['Notes:']) w.writerow(['Please do not change the template headings.']) w.writerow(['First data column must be blank.']) w.writerow([ 'Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.' ]) w.writerow(['For updating, you can update only selective columns.']) w.writerow([ 'If you are uploading new records, leave the "name" (ID) column blank.' ]) w.writerow([ 'If you are uploading new records, "Naming Series" becomes mandatory, if present.' ]) w.writerow([ 'You can only upload upto 5000 records in one go. (may be less in some cases)' ]) if key == "parent": w.writerow([ '"Parent" signifies the parent table in which this row must be added' ]) w.writerow([ 'If you are updating, please select "Overwrite" else existing rows will not be deleted.' ]) w.writerow(['']) labelrow = ["Column Labels", "ID"] fieldrow = [data_keys.columns, key] mandatoryrow = ['Mandatory:', 'Yes'] typerow = ['Type:', 'Data (text)'] inforow = ['Info:', ''] columns = [key] def append_row(t, mandatory): docfield = doctype_dl.get_field(t) if docfield and ((mandatory and docfield.reqd) or not (mandatory or docfield.reqd)) \ and (t not in ('parenttype', 'trash_reason')) and not docfield.hidden: fieldrow.append(t) labelrow.append(docfield.label) mandatoryrow.append(docfield.reqd and 'Yes' or 'No') typerow.append(docfield.fieldtype) inforow.append(getinforow(docfield)) columns.append(t) # get all mandatory fields for t in tablecolumns: append_row(t, True) # all non mandatory fields for t in tablecolumns: append_row(t, False) w.writerow(labelrow) w.writerow(fieldrow) w.writerow(mandatoryrow) w.writerow(typerow) w.writerow(inforow) w.writerow([data_keys.data_separator]) if webnotes.form_dict.get('with_data') == 'Yes': data = webnotes.conn.sql( """select * from `tab%s` where docstatus<2""" % doctype, as_dict=1) for d in data: row = [""] for c in columns: row.append(d.get(c, "")) w.writerow(row) # write out response as a type csv webnotes.response['result'] = cstr(w.getvalue()) webnotes.response['type'] = 'csv' webnotes.response['doctype'] = doctype