Merge pull request #36441 from frappe/version-13-hotfix

chore: release v13
This commit is contained in:
Deepesh Garg
2023-08-01 23:33:11 +05:30
committed by GitHub
5 changed files with 46 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors and contributors
# For license information, please see license.txt # For license information, please see license.txt
import collections
import frappe import frappe
from frappe import _ from frappe import _
@@ -44,6 +44,7 @@ class POSInvoice(SalesInvoice):
self.validate_debit_to_acc() self.validate_debit_to_acc()
self.validate_write_off_account() self.validate_write_off_account()
self.validate_change_amount() self.validate_change_amount()
self.validate_duplicate_serial_and_batch_no()
self.validate_change_account() self.validate_change_account()
self.validate_item_cost_centers() self.validate_item_cost_centers()
self.validate_warehouse() self.validate_warehouse()
@@ -154,6 +155,27 @@ class POSInvoice(SalesInvoice):
title=_("Item Unavailable"), title=_("Item Unavailable"),
) )
def validate_duplicate_serial_and_batch_no(self):
serial_nos = []
batch_nos = []
for row in self.get("items"):
if row.serial_no:
serial_nos = row.serial_no.split("\n")
if row.batch_no and not row.serial_no:
batch_nos.append(row.batch_no)
if serial_nos:
for key, value in collections.Counter(serial_nos).items():
if value > 1:
frappe.throw(_("Duplicate Serial No {0} found").format("key"))
if batch_nos:
for key, value in collections.Counter(batch_nos).items():
if value > 1:
frappe.throw(_("Duplicate Batch No {0} found").format("key"))
def validate_pos_reserved_batch_qty(self, item): def validate_pos_reserved_batch_qty(self, item):
filters = {"item_code": item.item_code, "warehouse": item.warehouse, "batch_no": item.batch_no} filters = {"item_code": item.item_code, "warehouse": item.warehouse, "batch_no": item.batch_no}

View File

@@ -79,6 +79,7 @@ class BOMUpdateLog(Document):
else: else:
frappe.enqueue( frappe.enqueue(
method="erpnext.manufacturing.doctype.bom_update_log.bom_update_log.process_boms_cost_level_wise", method="erpnext.manufacturing.doctype.bom_update_log.bom_update_log.process_boms_cost_level_wise",
queue="long",
update_doc=self, update_doc=self,
now=frappe.flags.in_test, now=frappe.flags.in_test,
) )

View File

@@ -157,12 +157,21 @@ def get_next_higher_level_boms(
def get_leaf_boms() -> List[str]: def get_leaf_boms() -> List[str]:
"Get BOMs that have no dependencies." "Get BOMs that have no dependencies."
return frappe.db.sql_list( bom = frappe.qb.DocType("BOM")
"""select name from `tabBOM` bom bom_item = frappe.qb.DocType("BOM Item")
where docstatus=1 and is_active=1
and not exists(select bom_no from `tabBOM Item` boms = (
where parent=bom.name and ifnull(bom_no, '')!='')""" frappe.qb.from_(bom)
) .left_join(bom_item)
.on((bom.name == bom_item.parent) & (bom_item.bom_no != ""))
.select(bom.name)
.where((bom.docstatus == 1) & (bom.is_active == 1) & (bom_item.bom_no.isnull()))
.distinct()
).run(as_list=True)
boms = [bom[0] for bom in boms]
return boms
def _generate_dependence_map() -> defaultdict: def _generate_dependence_map() -> defaultdict:

View File

@@ -1,4 +1,5 @@
{ {
"actions": [],
"autoname": "format:{####}", "autoname": "format:{####}",
"creation": "2019-05-26 15:03:43.996455", "creation": "2019-05-26 15:03:43.996455",
"doctype": "DocType", "doctype": "DocType",
@@ -12,7 +13,6 @@
], ],
"fields": [ "fields": [
{ {
"fetch_from": "goal.objective",
"fieldname": "objective", "fieldname": "objective",
"fieldtype": "Text", "fieldtype": "Text",
"in_list_view": 1, "in_list_view": 1,
@@ -38,14 +38,17 @@
} }
], ],
"istable": 1, "istable": 1,
"modified": "2019-05-26 16:12:54.832058", "links": [],
"modified": "2023-07-28 18:10:23.351246",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Quality Management", "module": "Quality Management",
"name": "Quality Goal Objective", "name": "Quality Goal Objective",
"naming_rule": "Expression",
"owner": "Administrator", "owner": "Administrator",
"permissions": [], "permissions": [],
"quick_entry": 1, "quick_entry": 1,
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [],
"track_changes": 1 "track_changes": 1
} }

View File

@@ -278,6 +278,8 @@ def update_args_in_repost_item_valuation(
frappe.publish_realtime( frappe.publish_realtime(
"item_reposting_progress", "item_reposting_progress",
{"name": doc.name, "items_to_be_repost": json.dumps(args, default=str), "current_index": index}, {"name": doc.name, "items_to_be_repost": json.dumps(args, default=str), "current_index": index},
doctype=doc.doctype,
docname=doc.name,
) )