Merge pull request #42026 from ljain112/fix-bank-import

fix:  Multiple fixes in Bank Statement Import
This commit is contained in:
ruthra kumar
2024-07-09 10:09:32 +05:30
committed by GitHub
3 changed files with 217 additions and 108 deletions

View File

@@ -130,30 +130,41 @@ frappe.ui.form.on("Bank Statement Import", {
}, },
show_import_status(frm) { show_import_status(frm) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]"); if (frm.doc.status == "Pending") return;
let successful_records = import_log.filter((log) => log.success);
let failed_records = import_log.filter((log) => !log.success); frappe.call({
if (successful_records.length === 0) return; method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.get_import_status",
args: {
docname: frm.doc.name,
},
callback: function (r) {
let successful_records = cint(r.message.success);
let failed_records = cint(r.message.failed);
let total_records = cint(r.message.total_records);
if (!total_records) {
return;
}
let message; let message;
if (failed_records.length === 0) { if (failed_records === 0) {
let message_args = [successful_records.length]; let message_args = [successful_records];
if (frm.doc.import_type === "Insert New Records") { if (frm.doc.import_type === "Insert New Records") {
message = message =
successful_records.length > 1 successful_records > 1
? __("Successfully imported {0} records.", message_args) ? __("Successfully imported {0} records.", message_args)
: __("Successfully imported {0} record.", message_args); : __("Successfully imported {0} record.", message_args);
} else { } else {
message = message =
successful_records.length > 1 successful_records > 1
? __("Successfully updated {0} records.", message_args) ? __("Successfully updated {0} records.", message_args)
: __("Successfully updated {0} record.", message_args); : __("Successfully updated {0} record.", message_args);
} }
} else { } else {
let message_args = [successful_records.length, import_log.length]; let message_args = [successful_records, total_records];
if (frm.doc.import_type === "Insert New Records") { if (frm.doc.import_type === "Insert New Records") {
message = message =
successful_records.length > 1 successful_records > 1
? __( ? __(
"Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.", "Successfully imported {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args message_args
@@ -164,7 +175,7 @@ frappe.ui.form.on("Bank Statement Import", {
); );
} else { } else {
message = message =
successful_records.length > 1 successful_records > 1
? __( ? __(
"Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.", "Successfully updated {0} records out of {1}. Click on Export Errored Rows, fix the errors and import again.",
message_args message_args
@@ -175,8 +186,11 @@ frappe.ui.form.on("Bank Statement Import", {
); );
} }
} }
frm.dashboard.set_headline(message); frm.dashboard.set_headline(message);
}, },
});
},
show_report_error_button(frm) { show_report_error_button(frm) {
if (frm.doc.status === "Error") { if (frm.doc.status === "Error") {
@@ -297,7 +311,7 @@ frappe.ui.form.on("Bank Statement Import", {
// method: 'frappe.core.doctype.data_import.data_import.get_preview_from_template', // method: 'frappe.core.doctype.data_import.data_import.get_preview_from_template',
show_import_preview(frm, preview_data) { show_import_preview(frm, preview_data) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]"); let import_log = preview_data.import_log;
if (frm.import_preview && frm.import_preview.doctype === frm.doc.reference_doctype) { if (frm.import_preview && frm.import_preview.doctype === frm.doc.reference_doctype) {
frm.import_preview.preview_data = preview_data; frm.import_preview.preview_data = preview_data;
@@ -336,6 +350,15 @@ frappe.ui.form.on("Bank Statement Import", {
); );
}, },
export_import_log(frm) {
open_url_post(
"/api/method/erpnext.accounts.doctype.bank_statement_import.bank_statement_import.download_import_log",
{
data_import_name: frm.doc.name,
}
);
},
show_import_warnings(frm, preview_data) { show_import_warnings(frm, preview_data) {
let columns = preview_data.columns; let columns = preview_data.columns;
let warnings = JSON.parse(frm.doc.template_warnings || "[]"); let warnings = JSON.parse(frm.doc.template_warnings || "[]");
@@ -411,16 +434,18 @@ frappe.ui.form.on("Bank Statement Import", {
frm.trigger("show_import_log"); frm.trigger("show_import_log");
}, },
show_import_log(frm) { render_import_log(frm) {
let import_log = JSON.parse(frm.doc.statement_import_log || "[]"); frappe.call({
let logs = import_log; method: "erpnext.accounts.doctype.bank_statement_import.bank_statement_import.get_import_logs",
frm.toggle_display("import_log", false); args: {
frm.toggle_display("import_log_section", logs.length > 0); docname: frm.doc.name,
},
callback: function (r) {
let logs = r.message;
if (logs.length === 0) { if (logs.length === 0) return;
frm.get_field("import_log_preview").$wrapper.empty();
return; frm.toggle_display("import_log_section", true);
}
let rows = logs let rows = logs
.map((log) => { .map((log) => {
@@ -444,8 +469,7 @@ frappe.ui.form.on("Bank Statement Import", {
]); ]);
} }
} else { } else {
let messages = log.messages let messages = JSON.parse(log.messages || "[]")
.map(JSON.parse)
.map((m) => { .map((m) => {
let title = m.title ? `<strong>${m.title}</strong>` : ""; let title = m.title ? `<strong>${m.title}</strong>` : "";
let message = m.message ? `<div>${m.message}</div>` : ""; let message = m.message ? `<div>${m.message}</div>` : "";
@@ -471,7 +495,7 @@ frappe.ui.form.on("Bank Statement Import", {
} }
return `<tr> return `<tr>
<td>${log.row_indexes.join(", ")}</td> <td>${JSON.parse(log.row_indexes).join(", ")}</td>
<td> <td>
<div class="indicator ${indicator_color}">${title}</div> <div class="indicator ${indicator_color}">${title}</div>
</td> </td>
@@ -499,4 +523,33 @@ frappe.ui.form.on("Bank Statement Import", {
</table> </table>
`); `);
}, },
});
},
show_import_log(frm) {
frm.toggle_display("import_log_section", false);
if (frm.is_new() || frm.import_in_progress) {
return;
}
frappe.call({
method: "frappe.client.get_count",
args: {
doctype: "Data Import Log",
filters: {
data_import: frm.doc.name,
},
},
callback: function (r) {
let count = r.message;
if (count < 5000) {
frm.trigger("render_import_log");
} else {
frm.toggle_display("import_log_section", false);
frm.add_custom_button(__("Export Import Log"), () => frm.trigger("export_import_log"));
}
},
});
},
}); });

View File

@@ -11,6 +11,8 @@
"bank_account", "bank_account",
"bank", "bank",
"column_break_4", "column_break_4",
"custom_delimiters",
"delimiter_options",
"google_sheets_url", "google_sheets_url",
"refresh_google_sheet", "refresh_google_sheet",
"html_5", "html_5",
@@ -24,7 +26,6 @@
"section_import_preview", "section_import_preview",
"import_preview", "import_preview",
"import_log_section", "import_log_section",
"statement_import_log",
"show_failed_logs", "show_failed_logs",
"import_log_preview", "import_log_preview",
"reference_doctype", "reference_doctype",
@@ -194,15 +195,23 @@
"fieldtype": "Column Break" "fieldtype": "Column Break"
}, },
{ {
"fieldname": "statement_import_log", "default": "0",
"fieldtype": "Code", "fieldname": "custom_delimiters",
"label": "Statement Import Log", "fieldtype": "Check",
"options": "JSON" "label": "Custom delimiters"
},
{
"default": ",;\\t|",
"depends_on": "custom_delimiters",
"description": "If your CSV uses a different delimiter, add that character here, ensuring no spaces or additional characters are included.",
"fieldname": "delimiter_options",
"fieldtype": "Data",
"label": "Delimiter options"
} }
], ],
"hide_toolbar": 1, "hide_toolbar": 1,
"links": [], "links": [],
"modified": "2024-03-27 13:06:38.098765", "modified": "2024-06-25 17:32:07.658250",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Bank Statement Import", "name": "Bank Statement Import",

View File

@@ -31,13 +31,14 @@ class BankStatementImport(DataImport):
bank: DF.Link | None bank: DF.Link | None
bank_account: DF.Link bank_account: DF.Link
company: DF.Link company: DF.Link
custom_delimiters: DF.Check
delimiter_options: DF.Data | None
google_sheets_url: DF.Data | None google_sheets_url: DF.Data | None
import_file: DF.Attach | None import_file: DF.Attach | None
import_type: DF.Literal["", "Insert New Records", "Update Existing Records"] import_type: DF.Literal["", "Insert New Records", "Update Existing Records"]
mute_emails: DF.Check mute_emails: DF.Check
reference_doctype: DF.Link reference_doctype: DF.Link
show_failed_logs: DF.Check show_failed_logs: DF.Check
statement_import_log: DF.Code | None
status: DF.Literal["Pending", "Success", "Partial Success", "Error"] status: DF.Literal["Pending", "Success", "Partial Success", "Error"]
submit_after_import: DF.Check submit_after_import: DF.Check
template_options: DF.Code | None template_options: DF.Code | None
@@ -121,6 +122,11 @@ def download_errored_template(data_import_name):
data_import.export_errored_rows() data_import.export_errored_rows()
@frappe.whitelist()
def download_import_log(data_import_name):
return frappe.get_doc("Bank Statement Import", data_import_name).download_import_log()
def parse_data_from_template(raw_data): def parse_data_from_template(raw_data):
data = [] data = []
@@ -242,6 +248,47 @@ def write_xlsx(data, sheet_name, wb=None, column_widths=None, file_path=None):
return True return True
@frappe.whitelist()
def get_import_status(docname):
import_status = {}
data_import = frappe.get_doc("Bank Statement Import", docname)
import_status["status"] = data_import.status
logs = frappe.get_all(
"Data Import Log",
fields=["count(*) as count", "success"],
filters={"data_import": docname},
group_by="success",
)
total_payload_count = 0
for log in logs:
total_payload_count += log.get("count", 0)
if log.get("success"):
import_status["success"] = log.get("count")
else:
import_status["failed"] = log.get("count")
import_status["total_records"] = total_payload_count
return import_status
@frappe.whitelist()
def get_import_logs(docname: str):
frappe.has_permission("Bank Statement Import")
return frappe.get_all(
"Data Import Log",
fields=["success", "docname", "messages", "exception", "row_indexes"],
filters={"data_import": docname},
limit_page_length=5000,
order_by="log_index",
)
@frappe.whitelist() @frappe.whitelist()
def upload_bank_statement(**args): def upload_bank_statement(**args):
args = frappe._dict(args) args = frappe._dict(args)