From 011ac131cfdbb7ae75dcebc92412c43a3de8cd92 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 12 Jun 2023 18:42:49 +0530 Subject: [PATCH] fix: Add column values --- erpnext/controllers/stock_controller.py | 133 +++++++++++++----- .../public/js/controllers/stock_controller.js | 1 - 2 files changed, 95 insertions(+), 39 deletions(-) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index a81c03615e..3277721126 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -826,60 +826,118 @@ class StockController(AccountsController): @frappe.whitelist() def show_ledger_preview(company, doctype, docname): - from erpnext.accounts.report.general_ledger.general_ledger import get_columns as get_gl_columns - from erpnext.stock.report.stock_ledger.stock_ledger import get_columns as get_sl_columns - frappe.db.savepoint("show_ledger_preview") filters = {"company": company} doc = frappe.get_doc(doctype, docname) - datatable_sl_columns = [] - datatable_sl_data = [] - - if doc.update_stock or doc.doctype in ("Purchase Receipt", "Delivery Note"): - sl_columns = get_sl_columns(filters) - doc.docstatus = 1 - doc.update_stock_ledger() - sl_entries = get_sl_entries_for_preview(doc.doctype, doc.name) - datatable_sl_columns = get_columns(sl_columns) - datatable_sl_data = get_data(sl_columns, sl_entries) - - doc.docstatus = 1 - gl_columns = get_gl_columns(filters) - doc.make_gl_entries() - gl_data = get_gl_entries_for_preview(doc.doctype, doc.name) - - datatable_gl_columns = get_columns(gl_columns) - datatable_gl_data = get_data(gl_columns, gl_data) + sl_columns, sl_data = get_stock_ledger_preview(doc, filters) + gl_columns, gl_data = get_accounting_ledger_preview(doc, filters) frappe.db.rollback(save_point="show_ledger_preview") return { - "gl_columns": datatable_gl_columns, - "gl_data": datatable_gl_data, - "sl_columns": datatable_sl_columns, - "sl_data": datatable_sl_data, + "gl_columns": gl_columns, + "gl_data": gl_data, + "sl_columns": sl_columns, + "sl_data": sl_data, } -def get_sl_entries_for_preview(doctype, docname): +def get_accounting_ledger_preview(doc, filters): + from erpnext.accounts.report.general_ledger.general_ledger import get_columns as get_gl_columns + + gl_columns, gl_data = [], [] + fields = [ + "posting_date", + "account", + "debit", + "credit", + "against", + "party", + "party_type", + "against_voucher_type", + "against_voucher", + ] + + doc.docstatus = 1 + doc.make_gl_entries() + columns = get_gl_columns(filters) + gl_entries = get_gl_entries_for_preview(doc.doctype, doc.name, fields) + + gl_columns = get_columns(columns, fields) + gl_data = get_data(fields, gl_entries) + + return gl_columns, gl_data + + +def get_stock_ledger_preview(doc, filters): + from erpnext.stock.report.stock_ledger.stock_ledger import get_columns as get_sl_columns + + sl_columns, sl_data = [], [] + fields = [ + "item_code", + "stock_uom", + "actual_qty", + "qty_after_transaction", + "warehouse", + "incoming_rate", + "valuation_rate", + "stock_value", + "stock_value_difference", + ] + columns_fields = [ + "item_code", + "stock_uom", + "in_qty", + "out_qty", + "qty_after_transaction", + "warehouse", + "incoming_rate", + "valuation_rate", + "stock_value", + "stock_value_difference", + ] + + if doc.update_stock or doc.doctype in ("Purchase Receipt", "Delivery Note"): + doc.docstatus = 1 + doc.update_stock_ledger() + columns = get_sl_columns(filters) + sl_entries = get_sl_entries_for_preview(doc.doctype, doc.name, fields) + + sl_columns = get_columns(columns, columns_fields) + sl_data = get_data(columns_fields, sl_entries) + + return sl_columns, sl_data + + +def get_sl_entries_for_preview(doctype, docname, fields): + sl_entries = frappe.get_all( + "Stock Ledger Entry", filters={"voucher_type": doctype, "voucher_no": docname}, fields=fields + ) + + for entry in sl_entries: + if entry.actual_qty > 0: + entry["in_qty"] = entry.actual_qty + entry["out_qty"] = 0 + else: + entry["out_qty"] = abs(entry.actual_qty) + entry["in_qty"] = 0 + + return sl_entries + + +def get_gl_entries_for_preview(doctype, docname, fields): return frappe.get_all( - "Stock Ledger Entry", filters={"voucher_type": doctype, "voucher_no": docname}, fields=["*"] + "GL Entry", filters={"voucher_type": doctype, "voucher_no": docname}, fields=fields ) -def get_gl_entries_for_preview(doctype, docname): - return frappe.get_all( - "GL Entry", filters={"voucher_type": doctype, "voucher_no": docname}, fields=["*"] - ) - - -def get_columns(raw_columns): +def get_columns(raw_columns, fields): return [ - {"name": d.get("label"), "editable": False, "width": 100} + {"name": d.get("label"), "editable": False, "width": 110} for d in raw_columns - if not d.get("hidden") + if not d.get("hidden") and d.get("fieldname") in fields ] @@ -888,8 +946,7 @@ def get_data(raw_columns, raw_data): for row in raw_data: data_row = [] for column in raw_columns: - if not column.get("hidden"): - data_row.append(row.get(column.get("fieldname"))) + data_row.append(row.get(column) or "") datatable_data.append(data_row) diff --git a/erpnext/public/js/controllers/stock_controller.js b/erpnext/public/js/controllers/stock_controller.js index 0ef2e6eb69..0a14ed7935 100644 --- a/erpnext/public/js/controllers/stock_controller.js +++ b/erpnext/public/js/controllers/stock_controller.js @@ -94,7 +94,6 @@ erpnext.stock.StockController = class StockController extends frappe.ui.form.Con "docname": me.frm.doc.name }, "callback": function(response) { - console.log(response.message); me.get_datatable(response.message.gl_columns, response.message.gl_data, me.frm.get_field("accounting_ledger_preview_html").wrapper); me.get_datatable(response.message.sl_columns, response.message.sl_data, me.frm.get_field("stock_ledger_preview_html").wrapper); me.frm.scroll_to_field("accounting_ledger_preview_html");