feat: allow manually entry for scrap items in SCR
This commit is contained in:
parent
d1e877b6f0
commit
a33b75f2cd
@ -436,24 +436,6 @@ class BuyingController(SubcontractingController):
|
|||||||
|
|
||||||
# validate rate with ref PR
|
# validate rate with ref PR
|
||||||
|
|
||||||
def validate_rejected_warehouse(self):
|
|
||||||
for item in self.get("items"):
|
|
||||||
if flt(item.rejected_qty) and not item.rejected_warehouse:
|
|
||||||
if self.rejected_warehouse:
|
|
||||||
item.rejected_warehouse = self.rejected_warehouse
|
|
||||||
|
|
||||||
if not item.rejected_warehouse:
|
|
||||||
frappe.throw(
|
|
||||||
_("Row #{0}: Rejected Warehouse is mandatory for the rejected Item {1}").format(
|
|
||||||
item.idx, item.item_code
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if item.get("rejected_warehouse") and (item.get("rejected_warehouse") == item.get("warehouse")):
|
|
||||||
frappe.throw(
|
|
||||||
_("Row #{0}: Accepted Warehouse and Rejected Warehouse cannot be same").format(item.idx)
|
|
||||||
)
|
|
||||||
|
|
||||||
# validate accepted and rejected qty
|
# validate accepted and rejected qty
|
||||||
def validate_accepted_rejected_qty(self):
|
def validate_accepted_rejected_qty(self):
|
||||||
for d in self.get("items"):
|
for d in self.get("items"):
|
||||||
|
@ -55,6 +55,23 @@ class SubcontractingController(StockController):
|
|||||||
else:
|
else:
|
||||||
super(SubcontractingController, self).validate()
|
super(SubcontractingController, self).validate()
|
||||||
|
|
||||||
|
def validate_rejected_warehouse(self):
|
||||||
|
for item in self.get("items"):
|
||||||
|
if flt(item.rejected_qty) and not item.rejected_warehouse:
|
||||||
|
if self.rejected_warehouse:
|
||||||
|
item.rejected_warehouse = self.rejected_warehouse
|
||||||
|
else:
|
||||||
|
frappe.throw(
|
||||||
|
_("Row #{0}: Rejected Warehouse is mandatory for the rejected Item {1}").format(
|
||||||
|
item.idx, item.item_code
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if item.get("rejected_warehouse") and (item.get("rejected_warehouse") == item.get("warehouse")):
|
||||||
|
frappe.throw(
|
||||||
|
_("Row #{0}: Accepted Warehouse and Rejected Warehouse cannot be same").format(item.idx)
|
||||||
|
)
|
||||||
|
|
||||||
def remove_empty_rows(self):
|
def remove_empty_rows(self):
|
||||||
for key in ["service_items", "items", "supplied_items"]:
|
for key in ["service_items", "items", "supplied_items"]:
|
||||||
if self.get(key):
|
if self.get(key):
|
||||||
@ -80,23 +97,27 @@ class SubcontractingController(StockController):
|
|||||||
if not is_stock_item:
|
if not is_stock_item:
|
||||||
frappe.throw(_("Row {0}: Item {1} must be a stock item.").format(item.idx, item.item_name))
|
frappe.throw(_("Row {0}: Item {1} must be a stock item.").format(item.idx, item.item_name))
|
||||||
|
|
||||||
if not is_sub_contracted_item:
|
if not item.is_scrap_item:
|
||||||
frappe.throw(
|
if not is_sub_contracted_item:
|
||||||
_("Row {0}: Item {1} must be a subcontracted item.").format(item.idx, item.item_name)
|
frappe.throw(
|
||||||
)
|
_("Row {0}: Item {1} must be a subcontracted item.").format(item.idx, item.item_name)
|
||||||
|
)
|
||||||
|
|
||||||
if item.bom:
|
if item.bom:
|
||||||
bom = frappe.get_doc("BOM", item.bom)
|
is_active, bom_item = frappe.get_value("BOM", item.bom, ["is_active", "item"])
|
||||||
if not bom.is_active:
|
|
||||||
frappe.throw(
|
if not is_active:
|
||||||
_("Row {0}: Please select an active BOM for Item {1}.").format(item.idx, item.item_name)
|
frappe.throw(
|
||||||
)
|
_("Row {0}: Please select an active BOM for Item {1}.").format(item.idx, item.item_name)
|
||||||
if bom.item != item.item_code:
|
)
|
||||||
frappe.throw(
|
if bom_item != item.item_code:
|
||||||
_("Row {0}: Please select an valid BOM for Item {1}.").format(item.idx, item.item_name)
|
frappe.throw(
|
||||||
)
|
_("Row {0}: Please select an valid BOM for Item {1}.").format(item.idx, item.item_name)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
frappe.throw(_("Row {0}: Please select a BOM for Item {1}.").format(item.idx, item.item_name))
|
||||||
else:
|
else:
|
||||||
frappe.throw(_("Row {0}: Please select a BOM for Item {1}.").format(item.idx, item.item_name))
|
item.bom = None
|
||||||
|
|
||||||
def __get_data_before_save(self):
|
def __get_data_before_save(self):
|
||||||
item_dict = {}
|
item_dict = {}
|
||||||
|
@ -79,6 +79,7 @@ class SubcontractingReceipt(SubcontractingController):
|
|||||||
super(SubcontractingReceipt, self).validate()
|
super(SubcontractingReceipt, self).validate()
|
||||||
self.set_missing_values()
|
self.set_missing_values()
|
||||||
self.validate_posting_time()
|
self.validate_posting_time()
|
||||||
|
self.validate_accepted_warehouse()
|
||||||
self.validate_rejected_warehouse()
|
self.validate_rejected_warehouse()
|
||||||
|
|
||||||
if getdate(self.posting_date) > getdate(nowdate()):
|
if getdate(self.posting_date) > getdate(nowdate()):
|
||||||
@ -127,6 +128,23 @@ class SubcontractingReceipt(SubcontractingController):
|
|||||||
self.calculate_supplied_items_qty_and_amount()
|
self.calculate_supplied_items_qty_and_amount()
|
||||||
self.calculate_items_qty_and_amount()
|
self.calculate_items_qty_and_amount()
|
||||||
|
|
||||||
|
def validate_accepted_warehouse(self):
|
||||||
|
for item in self.get("items"):
|
||||||
|
if flt(item.qty) and not item.warehouse:
|
||||||
|
if self.set_warehouse:
|
||||||
|
item.warehouse = self.set_warehouse
|
||||||
|
else:
|
||||||
|
frappe.throw(
|
||||||
|
_("Row #{0}: Accepted Warehouse is mandatory for the accepted Item {1}").format(
|
||||||
|
item.idx, item.item_code
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if item.get("warehouse") and (item.get("warehouse") == item.get("rejected_warehouse")):
|
||||||
|
frappe.throw(
|
||||||
|
_("Row #{0}: Accepted Warehouse and Rejected Warehouse cannot be same").format(item.idx)
|
||||||
|
)
|
||||||
|
|
||||||
def set_available_qty_for_consumption(self):
|
def set_available_qty_for_consumption(self):
|
||||||
supplied_items_details = {}
|
supplied_items_details = {}
|
||||||
|
|
||||||
@ -191,24 +209,6 @@ class SubcontractingReceipt(SubcontractingController):
|
|||||||
self.total_qty = total_qty
|
self.total_qty = total_qty
|
||||||
self.total = total_amount
|
self.total = total_amount
|
||||||
|
|
||||||
def validate_rejected_warehouse(self):
|
|
||||||
for item in self.items:
|
|
||||||
if flt(item.rejected_qty) and not item.rejected_warehouse:
|
|
||||||
if self.rejected_warehouse:
|
|
||||||
item.rejected_warehouse = self.rejected_warehouse
|
|
||||||
|
|
||||||
if not item.rejected_warehouse:
|
|
||||||
frappe.throw(
|
|
||||||
_("Row #{0}: Rejected Warehouse is mandatory for the rejected Item {1}").format(
|
|
||||||
item.idx, item.item_code
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if item.get("rejected_warehouse") and (item.get("rejected_warehouse") == item.get("warehouse")):
|
|
||||||
frappe.throw(
|
|
||||||
_("Row #{0}: Accepted Warehouse and Rejected Warehouse cannot be same").format(item.idx)
|
|
||||||
)
|
|
||||||
|
|
||||||
def validate_available_qty_for_consumption(self):
|
def validate_available_qty_for_consumption(self):
|
||||||
for item in self.get("supplied_items"):
|
for item in self.get("supplied_items"):
|
||||||
precision = item.precision("consumed_qty")
|
precision = item.precision("consumed_qty")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user