Merge pull request #41099 from rohitwaghchaure/fixed-report-13659
fix: not able to update default supplier from Supplier Quotation Comparison report
diff --git a/erpnext/assets/doctype/asset_repair/test_asset_repair.py b/erpnext/assets/doctype/asset_repair/test_asset_repair.py
index 3a5acbe..278da1b 100644
--- a/erpnext/assets/doctype/asset_repair/test_asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/test_asset_repair.py
@@ -305,6 +305,7 @@
"serial_nos": args.serial_no,
"posting_date": today(),
"posting_time": nowtime(),
+ "do_not_submit": 1,
}
)
).name
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index 0813961..b5c6cd9 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -948,6 +948,21 @@
if self.qty <= 0:
frappe.throw(_("Quantity to Manufacture must be greater than 0."))
+ if (
+ self.stock_uom
+ and frappe.get_cached_value("UOM", self.stock_uom, "must_be_whole_number")
+ and abs(cint(self.qty) - flt(self.qty, self.precision("qty"))) > 0.0000001
+ ):
+ frappe.throw(
+ _(
+ "Qty To Manufacture ({0}) cannot be a fraction for the UOM {2}. To allow this, disable '{1}' in the UOM {2}."
+ ).format(
+ flt(self.qty, self.precision("qty")),
+ frappe.bold(_("Must be Whole Number")),
+ frappe.bold(self.stock_uom),
+ ),
+ )
+
if self.production_plan and self.production_plan_item and not self.production_plan_sub_assembly_item:
qty_dict = frappe.db.get_value(
"Production Plan Item", self.production_plan_item, ["planned_qty", "ordered_qty"], as_dict=1
diff --git a/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.json b/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.json
index 981a51c..4086e4c 100644
--- a/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.json
+++ b/erpnext/regional/doctype/lower_deduction_certificate/lower_deduction_certificate.json
@@ -135,13 +135,50 @@
],
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2024-03-27 13:10:02.865812",
+ "modified": "2024-04-18 15:25:25.808355",
"modified_by": "Administrator",
"module": "Regional",
"name": "Lower Deduction Certificate",
"naming_rule": "By fieldname",
"owner": "Administrator",
- "permissions": [],
+ "permissions": [
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "share": 1,
+ "write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts Manager",
+ "share": 1,
+ "write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Accounts User",
+ "share": 1,
+ "write": 1
+ }
+ ],
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
diff --git a/erpnext/stock/doctype/batch/test_batch.py b/erpnext/stock/doctype/batch/test_batch.py
index 3f37b7b..3ef0e57 100644
--- a/erpnext/stock/doctype/batch/test_batch.py
+++ b/erpnext/stock/doctype/batch/test_batch.py
@@ -86,6 +86,7 @@
"batches": frappe._dict({batch_no: 20}),
"type_of_transaction": "Inward",
"company": receipt.company,
+ "do_not_submit": 1,
}
)
.make_serial_and_batch_bundle()
@@ -176,6 +177,7 @@
"batches": frappe._dict({batch_no: batch_qty}),
"type_of_transaction": "Outward",
"company": receipt.company,
+ "do_not_submit": 1,
}
)
.make_serial_and_batch_bundle()
@@ -249,6 +251,7 @@
"batches": frappe._dict({batch_no: batch_qty}),
"type_of_transaction": "Outward",
"company": receipt.company,
+ "do_not_submit": 1,
}
)
.make_serial_and_batch_bundle()
@@ -341,6 +344,7 @@
"batches": frappe._dict({batch_name: 90}),
"type_of_transaction": "Inward",
"company": "_Test Company",
+ "do_not_submit": 1,
}
).make_serial_and_batch_bundle()
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 705b0f9..6b4002f 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -3009,6 +3009,7 @@
"serial_nos": serial_nos,
"posting_date": args.posting_date or today(),
"posting_time": args.posting_time,
+ "do_not_submit": 1,
}
)
).name
diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
index 286a220..9195183 100644
--- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
+++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py
@@ -596,6 +596,13 @@
serial_batches = {}
for row in self.entries:
+ if not row.qty and row.batch_no and not row.serial_no:
+ frappe.throw(
+ _("At row {0}: Qty is mandatory for the batch {1}").format(
+ bold(row.idx), bold(row.batch_no)
+ )
+ )
+
if self.has_serial_no and not row.serial_no:
frappe.throw(
_("At row {0}: Serial No is mandatory for Item {1}").format(
@@ -831,7 +838,12 @@
for batch in batches:
frappe.db.set_value("Batch", batch.name, {"reference_name": None, "reference_doctype": None})
+ def validate_serial_and_batch_data(self):
+ if not self.voucher_no:
+ frappe.throw(_("Voucher No is mandatory"))
+
def before_submit(self):
+ self.validate_serial_and_batch_data()
self.validate_serial_and_batch_no_for_returned()
self.set_purchase_document_no()
diff --git a/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py
index ce50155..069192f 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/test_stock_ledger_entry.py
@@ -1483,7 +1483,7 @@
"posting_date": dn.posting_date,
"posting_time": dn.posting_time,
"voucher_type": "Delivery Note",
- "do_not_submit": dn.name,
+ "do_not_submit": 1,
}
)
).name
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index 0ffcdd5..b31ca30 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -1085,7 +1085,7 @@
)
bundle_id = None
- if not args.use_serial_batch_fields and (args.batch_no or args.serial_no):
+ if not args.use_serial_batch_fields and (args.batch_no or args.serial_no) and args.qty:
batches = frappe._dict({})
if args.batch_no:
batches[args.batch_no] = args.qty
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py
index 97e2f55..04cd1b8 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.py
@@ -61,6 +61,8 @@
actual_qty += flt(sle.actual_qty, precision)
stock_value += sle.stock_value_difference
batch_balance_dict[sle.batch_no] += sle.actual_qty
+ if filters.get("segregate_serial_batch_bundle"):
+ actual_qty = batch_balance_dict[sle.batch_no]
if sle.voucher_type == "Stock Reconciliation" and not sle.actual_qty:
actual_qty = sle.qty_after_transaction