feat: translations in Data Import
This commit is contained in:
parent
5389e7eebd
commit
5df970013e
5 changed files with 95 additions and 58 deletions
|
|
@ -369,7 +369,7 @@ class DataExporter:
|
|||
self.append_field_column(frappe._dict({
|
||||
"fieldname": "name" if dt else self.name_field,
|
||||
"parent": dt or "",
|
||||
"label": "ID",
|
||||
"label": _("ID"),
|
||||
"fieldtype": "Data",
|
||||
"reqd": 1,
|
||||
}), True)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
import typing
|
||||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model import (
|
||||
display_fieldtypes,
|
||||
no_value_fields,
|
||||
|
|
@ -215,9 +216,9 @@ class Exporter:
|
|||
for df in self.fields:
|
||||
is_parent = not df.is_child_table_field
|
||||
if is_parent:
|
||||
label = df.label
|
||||
label = _(df.label)
|
||||
else:
|
||||
label = "{0} ({1})".format(df.label, df.child_table_df.label)
|
||||
label = "{0} ({1})".format(_(df.label), _(df.child_table_df.label))
|
||||
|
||||
if label in header:
|
||||
# this label is already in the header,
|
||||
|
|
@ -227,6 +228,7 @@ class Exporter:
|
|||
label = "{0}".format(df.fieldname)
|
||||
else:
|
||||
label = "{0}.{1}".format(df.child_table_df.fieldname, df.fieldname)
|
||||
|
||||
header.append(label)
|
||||
|
||||
self.csv_array.append(header)
|
||||
|
|
@ -253,10 +255,10 @@ class Exporter:
|
|||
self.build_xlsx_response()
|
||||
|
||||
def build_csv_response(self):
|
||||
build_csv_response(self.get_csv_array_for_export(), self.doctype)
|
||||
build_csv_response(self.get_csv_array_for_export(), _(self.doctype))
|
||||
|
||||
def build_xlsx_response(self):
|
||||
build_xlsx_response(self.get_csv_array_for_export(), self.doctype)
|
||||
build_xlsx_response(self.get_csv_array_for_export(), _(self.doctype))
|
||||
|
||||
def group_children_data_by_parent(self, children_data: typing.Dict[str, list]):
|
||||
return groupby_metric(children_data, key='parent')
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ class Importer:
|
|||
rows = [header_row]
|
||||
rows += [row.data for row in self.import_file.data if row.row_number in row_indexes]
|
||||
|
||||
build_csv_response(rows, self.doctype)
|
||||
build_csv_response(rows, _(self.doctype))
|
||||
|
||||
def print_import_log(self, import_log):
|
||||
failed_records = [log for log in import_log if not log.success]
|
||||
|
|
@ -1009,18 +1009,12 @@ def build_fields_dict_for_column_matching(parent_doctype):
|
|||
out = {}
|
||||
|
||||
# doctypes and fieldname if it is a child doctype
|
||||
doctypes = [[parent_doctype, None]] + [
|
||||
[df.options, df] for df in parent_meta.get_table_fields()
|
||||
doctypes = [(parent_doctype, None)] + [
|
||||
(df.options, df) for df in parent_meta.get_table_fields()
|
||||
]
|
||||
|
||||
for doctype, table_df in doctypes:
|
||||
# name field
|
||||
name_by_label = (
|
||||
"ID" if doctype == parent_doctype else "ID ({0})".format(table_df.label)
|
||||
)
|
||||
name_by_fieldname = (
|
||||
"name" if doctype == parent_doctype else "{0}.name".format(table_df.fieldname)
|
||||
)
|
||||
name_df = frappe._dict(
|
||||
{
|
||||
"fieldtype": "Data",
|
||||
|
|
@ -1031,63 +1025,104 @@ def build_fields_dict_for_column_matching(parent_doctype):
|
|||
}
|
||||
)
|
||||
|
||||
if doctype != parent_doctype:
|
||||
if doctype == parent_doctype:
|
||||
name_headers = (
|
||||
"name", # fieldname
|
||||
"ID", # label
|
||||
_("ID"), # translated label
|
||||
)
|
||||
else:
|
||||
name_headers = (
|
||||
"{0}.name".format(table_df.fieldname), # fieldname
|
||||
"ID ({0})".format(table_df.label), # label
|
||||
"{0} ({1})".format(_("ID"), _(table_df.label)), # translated label
|
||||
)
|
||||
|
||||
name_df.is_child_table_field = True
|
||||
name_df.child_table_df = table_df
|
||||
|
||||
out[name_by_label] = name_df
|
||||
out[name_by_fieldname] = name_df
|
||||
for header in name_headers:
|
||||
out[header] = name_df
|
||||
|
||||
# other fields
|
||||
table_fields = parent_meta.get(
|
||||
"fields", {"fieldtype": ["in", table_fieldtypes]}
|
||||
)
|
||||
|
||||
for table_field in table_fields:
|
||||
table_field.translated_label = _(table_field.label)
|
||||
|
||||
fields = get_standard_fields(doctype) + frappe.get_meta(doctype).fields
|
||||
for df in fields:
|
||||
label = (df.label or "").strip()
|
||||
fieldtype = df.fieldtype or "Data"
|
||||
if fieldtype in no_value_fields:
|
||||
continue
|
||||
|
||||
label = (df.label or "").strip()
|
||||
translated_label = _(label)
|
||||
parent = df.parent or parent_doctype
|
||||
if fieldtype not in no_value_fields:
|
||||
if parent_doctype == doctype:
|
||||
# for parent doctypes keys will be
|
||||
# Label
|
||||
# label
|
||||
# Label (label)
|
||||
if not out.get(label):
|
||||
# if Label is already set, don't set it again
|
||||
# in case of duplicate column headers
|
||||
out[label] = df
|
||||
out[df.fieldname] = df
|
||||
label_with_fieldname = "{0} ({1})".format(label, df.fieldname)
|
||||
out[label_with_fieldname] = df
|
||||
else:
|
||||
# in case there are multiple table fields with the same doctype
|
||||
# for child doctypes keys will be
|
||||
# Label (Table Field Label)
|
||||
# table_field.fieldname
|
||||
table_fields = parent_meta.get(
|
||||
"fields", {"fieldtype": ["in", table_fieldtypes], "options": parent}
|
||||
)
|
||||
for table_field in table_fields:
|
||||
by_label = "{0} ({1})".format(label, table_field.label)
|
||||
by_fieldname = "{0}.{1}".format(table_field.fieldname, df.fieldname)
|
||||
|
||||
# create a new df object to avoid mutation problems
|
||||
if isinstance(df, dict):
|
||||
new_df = frappe._dict(df.copy())
|
||||
else:
|
||||
new_df = df.as_dict()
|
||||
if parent_doctype == doctype:
|
||||
# for parent doctypes keys will be
|
||||
# Label, fielname, Label (fieldname)
|
||||
|
||||
new_df.is_child_table_field = True
|
||||
new_df.child_table_df = table_field
|
||||
out[by_label] = new_df
|
||||
out[by_fieldname] = new_df
|
||||
for header in (label, translated_label):
|
||||
# if Label is already set, don't set it again
|
||||
# in case of duplicate column headers
|
||||
if header not in out:
|
||||
out[header] = df
|
||||
|
||||
for header in (
|
||||
df.fieldname,
|
||||
f"{label} ({df.fieldname})",
|
||||
f"{translated_label} ({df.fieldname})"
|
||||
):
|
||||
out[header] = df
|
||||
|
||||
else:
|
||||
# in case there are multiple table fields with the same doctype
|
||||
# for child doctypes keys will be
|
||||
# Label (Table Field Label)
|
||||
# table_field.fieldname
|
||||
|
||||
|
||||
for table_field in table_fields:
|
||||
if table_field.options != parent:
|
||||
continue
|
||||
|
||||
# create a new df object to avoid mutation problems
|
||||
if isinstance(df, dict):
|
||||
new_df = frappe._dict(df.copy())
|
||||
else:
|
||||
new_df = df.as_dict()
|
||||
|
||||
new_df.is_child_table_field = True
|
||||
new_df.child_table_df = table_field
|
||||
|
||||
for header in (
|
||||
# fieldname
|
||||
"{0}.{1}".format(table_field.fieldname, df.fieldname),
|
||||
# label
|
||||
"{0} ({1})".format(label, table_field.label),
|
||||
# translated label
|
||||
"{0} ({1})".format(translated_label, table_field.translated_label),
|
||||
):
|
||||
out[header] = new_df
|
||||
|
||||
# if autoname is based on field
|
||||
# add an entry for "ID (Autoname Field)"
|
||||
autoname_field = get_autoname_field(parent_doctype)
|
||||
if autoname_field:
|
||||
out["ID ({})".format(autoname_field.label)] = autoname_field
|
||||
# ID field should also map to the autoname field
|
||||
out["ID"] = autoname_field
|
||||
out["name"] = autoname_field
|
||||
for header in (
|
||||
"ID ({})".format(autoname_field.label), # label
|
||||
"{0} ({1})".format(_("ID"), _(autoname_field.label)), # translated label
|
||||
|
||||
# ID field should also map to the autoname field
|
||||
"ID",
|
||||
_("ID"),
|
||||
"name",
|
||||
):
|
||||
out[header] = autoname_field
|
||||
|
||||
return out
|
||||
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ def run_doc_method(method, docs=None, dt=None, dn=None, arg=None, args=None):
|
|||
|
||||
# build output as csv
|
||||
if cint(frappe.form_dict.get('as_csv')):
|
||||
build_csv_response(response, doc.doctype.replace(' ', ''))
|
||||
build_csv_response(response, _(doc.doctype).replace(' ', ''))
|
||||
return
|
||||
|
||||
frappe.response['message'] = response
|
||||
|
|
|
|||
|
|
@ -343,11 +343,11 @@ function get_fields_as_options(doctype, column_map) {
|
|||
return [].concat(
|
||||
...keys.map(key => {
|
||||
return column_map[key].map(df => {
|
||||
let label = df.label;
|
||||
let label = __(df.label);
|
||||
let value = df.fieldname;
|
||||
if (doctype !== key) {
|
||||
let table_field = frappe.meta.get_docfield(doctype, key);
|
||||
label = `${df.label} (${table_field.label})`;
|
||||
label = `${__(df.label)} (${__(table_field.label)})`;
|
||||
value = `${table_field.fieldname}.${df.fieldname}`;
|
||||
}
|
||||
return {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue