* refactor: stock closing balance * perf: batchwise balance history report * fix: stock ageing data for stock balance report
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
import frappe
|
|
from frappe import _
|
|
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|
|
|
from erpnext.stock.doctype.inventory_dimension.inventory_dimension import (
|
|
field_exists,
|
|
get_inventory_dimensions,
|
|
)
|
|
|
|
|
|
def execute():
|
|
add_inventory_dimensions_to_stock_closing_balance()
|
|
create_stock_closing_entries()
|
|
|
|
|
|
def add_inventory_dimensions_to_stock_closing_balance():
|
|
inventory_dimensions = get_inventory_dimensions()
|
|
|
|
dimension_fields_list = []
|
|
for inv_dim in inventory_dimensions:
|
|
if not frappe.db.get_value(
|
|
"Custom Field", {"dt": "Stock Closing Balance", "fieldname": inv_dim.fieldname}
|
|
) and not field_exists("Stock Closing Balance", inv_dim.fieldname):
|
|
dimension_field = frappe._dict()
|
|
dimension_field["mandatory_depends_on"] = ""
|
|
dimension_field["reqd"] = 0
|
|
dimension_field["fieldname"] = inv_dim.fieldname
|
|
dimension_field["label"] = inv_dim.dimension_name
|
|
dimension_field["fieldtype"] = "Link"
|
|
dimension_field["options"] = inv_dim.doctype
|
|
dimension_field["read_only"] = 1
|
|
dimension_field["insert_after"] = "inventory_dimension_section"
|
|
dimension_field["search_index"] = 1
|
|
dimension_fields_list.append(dimension_field)
|
|
|
|
if dimension_fields_list:
|
|
dimension_fields_list.insert(
|
|
0,
|
|
{
|
|
"label": _("Inventory Dimension"),
|
|
"fieldtype": "Section Break",
|
|
"fieldname": "inventory_dimension_section",
|
|
"insert_after": "stock_uom",
|
|
},
|
|
)
|
|
create_custom_fields({"Stock Closing Balance": dimension_fields_list})
|
|
|
|
|
|
def create_stock_closing_entries():
|
|
for row in frappe.get_all(
|
|
"Closing Stock Balance",
|
|
fields=["company", "status", "from_date", "to_date"],
|
|
filters={"docstatus": 1},
|
|
group_by="company",
|
|
order_by="creation desc",
|
|
):
|
|
new_entry = frappe.new_doc("Stock Closing Entry")
|
|
new_entry.update(row)
|
|
new_entry.save(ignore_permissions=True)
|
|
new_entry.submit()
|