mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-13 10:11:20 +00:00
perf: timeout issue while submitting purchase receipt (v14)
(cherry picked from commit 113351e850)
This commit is contained in:
committed by
Mergify
parent
2026c986ba
commit
c93840eb56
@@ -8,16 +8,7 @@ import frappe
|
|||||||
from frappe import ValidationError, _
|
from frappe import ValidationError, _
|
||||||
from frappe.model.naming import make_autoname
|
from frappe.model.naming import make_autoname
|
||||||
from frappe.query_builder.functions import Coalesce
|
from frappe.query_builder.functions import Coalesce
|
||||||
from frappe.utils import (
|
from frappe.utils import add_days, cint, cstr, flt, get_link_to_form, getdate, now, nowdate, safe_json_loads
|
||||||
add_days,
|
|
||||||
cint,
|
|
||||||
cstr,
|
|
||||||
flt,
|
|
||||||
get_link_to_form,
|
|
||||||
getdate,
|
|
||||||
nowdate,
|
|
||||||
safe_json_loads,
|
|
||||||
)
|
|
||||||
|
|
||||||
from erpnext.controllers.stock_controller import StockController
|
from erpnext.controllers.stock_controller import StockController
|
||||||
from erpnext.stock.get_item_details import get_reserved_qty_for_so
|
from erpnext.stock.get_item_details import get_reserved_qty_for_so
|
||||||
@@ -618,16 +609,14 @@ def auto_make_serial_nos(args):
|
|||||||
voucher_type = args.get("voucher_type")
|
voucher_type = args.get("voucher_type")
|
||||||
item_code = args.get("item_code")
|
item_code = args.get("item_code")
|
||||||
for serial_no in serial_nos:
|
for serial_no in serial_nos:
|
||||||
is_new = False
|
|
||||||
if frappe.db.exists("Serial No", serial_no):
|
if frappe.db.exists("Serial No", serial_no):
|
||||||
sr = frappe.get_cached_doc("Serial No", serial_no)
|
sr = frappe.get_cached_doc("Serial No", serial_no)
|
||||||
elif args.get("actual_qty", 0) > 0:
|
sr = update_args_for_serial_no(sr, serial_no, args)
|
||||||
sr = frappe.new_doc("Serial No")
|
elif args.get("actual_qty", 0) > 0 and serial_no:
|
||||||
is_new = True
|
created_numbers.append(serial_no)
|
||||||
|
|
||||||
sr = update_args_for_serial_no(sr, serial_no, args, is_new=is_new)
|
if created_numbers:
|
||||||
if is_new:
|
make_bulk_serial_nos(args, created_numbers)
|
||||||
created_numbers.append(sr.name)
|
|
||||||
|
|
||||||
form_links = list(map(lambda d: get_link_to_form("Serial No", d), created_numbers))
|
form_links = list(map(lambda d: get_link_to_form("Serial No", d), created_numbers))
|
||||||
|
|
||||||
@@ -647,6 +636,72 @@ def auto_make_serial_nos(args):
|
|||||||
frappe.msgprint(message, multiple_title)
|
frappe.msgprint(message, multiple_title)
|
||||||
|
|
||||||
|
|
||||||
|
def make_bulk_serial_nos(args, serial_nos):
|
||||||
|
# for field in ["item_code", "work_order", "company", "batch_no", "supplier", "location"]:
|
||||||
|
|
||||||
|
if isinstance(args, dict):
|
||||||
|
args = frappe._dict(args)
|
||||||
|
|
||||||
|
serial_nos_details = []
|
||||||
|
item_details = frappe.get_cached_value("Item", args.item_code, ["item_name", "description"], as_dict=1)
|
||||||
|
|
||||||
|
supplier = None
|
||||||
|
if args.voucher_type in ["Purchase Receipt", "Purchase Invoice"]:
|
||||||
|
supplier = frappe.get_cached_value(args.voucher_type, args.voucher_no, "supplier")
|
||||||
|
|
||||||
|
for serial_no in serial_nos:
|
||||||
|
serial_nos_details.append(
|
||||||
|
(
|
||||||
|
serial_no,
|
||||||
|
serial_no,
|
||||||
|
now(),
|
||||||
|
now(),
|
||||||
|
frappe.session.user,
|
||||||
|
frappe.session.user,
|
||||||
|
args.warehouse,
|
||||||
|
args.company,
|
||||||
|
args.item_code,
|
||||||
|
item_details.item_name,
|
||||||
|
item_details.description,
|
||||||
|
"Active",
|
||||||
|
args.batch_no,
|
||||||
|
args.get("work_order"),
|
||||||
|
supplier,
|
||||||
|
args.voucher_type,
|
||||||
|
args.voucher_no,
|
||||||
|
args.posting_date,
|
||||||
|
args.posting_time,
|
||||||
|
flt(args.incoming_rate),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if serial_nos_details:
|
||||||
|
fields = [
|
||||||
|
"name",
|
||||||
|
"serial_no",
|
||||||
|
"creation",
|
||||||
|
"modified",
|
||||||
|
"owner",
|
||||||
|
"modified_by",
|
||||||
|
"warehouse",
|
||||||
|
"company",
|
||||||
|
"item_code",
|
||||||
|
"item_name",
|
||||||
|
"description",
|
||||||
|
"status",
|
||||||
|
"batch_no",
|
||||||
|
"work_order",
|
||||||
|
"supplier",
|
||||||
|
"purchase_document_type",
|
||||||
|
"purchase_document_no",
|
||||||
|
"purchase_date",
|
||||||
|
"purchase_time",
|
||||||
|
"purchase_rate",
|
||||||
|
]
|
||||||
|
|
||||||
|
frappe.db.bulk_insert("Serial No", fields=fields, values=set(serial_nos_details))
|
||||||
|
|
||||||
|
|
||||||
def get_items_html(serial_nos, item_code):
|
def get_items_html(serial_nos, item_code):
|
||||||
body = ", ".join(serial_nos)
|
body = ", ".join(serial_nos)
|
||||||
return f"""<details><summary>
|
return f"""<details><summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user