refactor: serial no normalization

This commit is contained in:
Rohit Waghchaure
2022-10-10 13:28:19 +05:30
parent f11d9b019d
commit bc75a7ef44
23 changed files with 980 additions and 133 deletions

View File

@@ -7,7 +7,7 @@ from typing import List, Tuple
import frappe
from frappe import _
from frappe.utils import cint, cstr, flt, get_link_to_form, getdate
from frappe.utils import cint, flt, get_link_to_form, getdate
import erpnext
from erpnext.accounts.general_ledger import (
@@ -328,26 +328,49 @@ class StockController(AccountsController):
def make_batches(self, warehouse_field):
"""Create batches if required. Called before submit"""
for d in self.items:
if d.get(warehouse_field) and not d.batch_no:
if d.get(warehouse_field) and not d.serial_and_batch_bundle:
has_batch_no, create_new_batch = frappe.get_cached_value(
"Item", d.item_code, ["has_batch_no", "create_new_batch"]
)
if has_batch_no and create_new_batch:
d.batch_no = (
batch_no = (
frappe.get_doc(
dict(
doctype="Batch",
item=d.item_code,
supplier=getattr(self, "supplier", None),
reference_doctype=self.doctype,
reference_name=self.name,
)
dict(doctype="Batch", item=d.item_code, supplier=getattr(self, "supplier", None))
)
.insert()
.name
)
d.serial_and_batch_bundle = (
frappe.get_doc(
{
"doctype": "Serial and Batch Bundle",
"item_code": d.item_code,
"voucher_type": self.doctype,
"voucher_no": self.name,
"ledgers": [
{
"batch_no": batch_no,
"qty": d.qty,
"warehouse": d.get(warehouse_field),
}
],
}
)
.submit()
.name
)
frappe.db.set_value(
"Batch",
batch_no,
{
"reference_doctype": "Serial and Batch Bundle",
"reference_name": d.serial_and_batch_bundle,
},
)
def check_expense_account(self, item):
if not item.get("expense_account"):
msg = _("Please set an Expense Account in the Items table")
@@ -387,27 +410,20 @@ class StockController(AccountsController):
)
def delete_auto_created_batches(self):
for d in self.items:
if not d.batch_no:
continue
for row in self.items:
if row.serial_and_batch_bundle:
frappe.db.set_value(
"Serial and Batch Bundle", row.serial_and_batch_bundle, {"is_cancelled": 1}
)
frappe.db.set_value(
"Serial No", {"batch_no": d.batch_no, "status": "Inactive"}, "batch_no", None
)
d.batch_no = None
d.db_set("batch_no", None)
for data in frappe.get_all(
"Batch", {"reference_name": self.name, "reference_doctype": self.doctype}
):
frappe.delete_doc("Batch", data.name)
row.db_set("serial_and_batch_bundle", None)
def get_sl_entries(self, d, args):
sl_dict = frappe._dict(
{
"item_code": d.get("item_code", None),
"warehouse": d.get("warehouse", None),
"serial_and_batch_bundle": d.get("serial_and_batch_bundle"),
"posting_date": self.posting_date,
"posting_time": self.posting_time,
"fiscal_year": get_fiscal_year(self.posting_date, company=self.company)[0],
@@ -420,7 +436,6 @@ class StockController(AccountsController):
),
"incoming_rate": 0,
"company": self.company,
"batch_no": cstr(d.get("batch_no")).strip(),
"serial_no": d.get("serial_no"),
"project": d.get("project") or self.get("project"),
"is_cancelled": 1 if self.docstatus == 2 else 0,