Merge pull request #40986 from rohitwaghchaure/fixed-validation-to-check-type-of-transaction
fix: type of transaction validation for the stock entry
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 4df3726..84bf6aa 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -1119,7 +1119,7 @@
message += _("Please adjust the qty or edit {0} to proceed.").format(rule_link)
return message
- def repost_future_sle_and_gle(self, force=False):
+ def repost_future_sle_and_gle(self, force=False, via_landed_cost_voucher=False):
args = frappe._dict(
{
"posting_date": self.posting_date,
@@ -1127,6 +1127,7 @@
"voucher_type": self.doctype,
"voucher_no": self.name,
"company": self.company,
+ "via_landed_cost_voucher": via_landed_cost_voucher,
}
)
@@ -1138,7 +1139,11 @@
frappe.db.get_single_value("Stock Reposting Settings", "item_based_reposting")
)
if item_based_reposting:
- create_item_wise_repost_entries(voucher_type=self.doctype, voucher_no=self.name)
+ create_item_wise_repost_entries(
+ voucher_type=self.doctype,
+ voucher_no=self.name,
+ via_landed_cost_voucher=via_landed_cost_voucher,
+ )
else:
create_repost_item_valuation_entry(args)
@@ -1510,11 +1515,14 @@
repost_entry.allow_zero_rate = args.allow_zero_rate
repost_entry.flags.ignore_links = True
repost_entry.flags.ignore_permissions = True
+ repost_entry.via_landed_cost_voucher = args.via_landed_cost_voucher
repost_entry.save()
repost_entry.submit()
-def create_item_wise_repost_entries(voucher_type, voucher_no, allow_zero_rate=False):
+def create_item_wise_repost_entries(
+ voucher_type, voucher_no, allow_zero_rate=False, via_landed_cost_voucher=False
+):
"""Using a voucher create repost item valuation records for all item-warehouse pairs."""
stock_ledger_entries = get_items_to_be_repost(voucher_type, voucher_no)
@@ -1538,6 +1546,7 @@
repost_entry.allow_zero_rate = allow_zero_rate
repost_entry.flags.ignore_links = True
repost_entry.flags.ignore_permissions = True
+ repost_entry.via_landed_cost_voucher = via_landed_cost_voucher
repost_entry.submit()
repost_entries.append(repost_entry)
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index a31f011..c2a028b 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -534,6 +534,7 @@
"Supplier Quotation Item",
"Payment Reconciliation",
"Payment Reconciliation Allocation",
+ "Payment Request",
]
get_matching_queries = (
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 7c2c439..263501f 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -357,6 +357,7 @@
erpnext.patches.v15_0.allow_on_submit_dimensions_for_repostable_doctypes
erpnext.patches.v14_0.create_accounting_dimensions_in_reconciliation_tool
erpnext.patches.v14_0.update_flag_for_return_invoices #2024-03-22
+erpnext.patches.v15_0.create_accounting_dimensions_in_payment_request
# below migration patch should always run last
erpnext.patches.v14_0.migrate_gl_to_payment_ledger
erpnext.stock.doctype.delivery_note.patches.drop_unused_return_against_index # 2023-12-20
diff --git a/erpnext/patches/v15_0/create_accounting_dimensions_in_payment_request.py b/erpnext/patches/v15_0/create_accounting_dimensions_in_payment_request.py
new file mode 100644
index 0000000..fc50b60
--- /dev/null
+++ b/erpnext/patches/v15_0/create_accounting_dimensions_in_payment_request.py
@@ -0,0 +1,7 @@
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
+ create_accounting_dimensions_for_doctype,
+)
+
+
+def execute():
+ create_accounting_dimensions_for_doctype(doctype="Payment Request")
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 69bbae3..99d9799 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -288,6 +288,7 @@
label: __("Items to Reserve"),
allow_bulk_edit: false,
cannot_add_rows: true,
+ cannot_delete_rows: true,
data: [],
fields: [
{
@@ -356,7 +357,7 @@
],
primary_action_label: __("Reserve Stock"),
primary_action: () => {
- var data = { items: dialog.fields_dict.items.grid.data };
+ var data = { items: dialog.fields_dict.items.grid.get_selected_children() };
if (data.items && data.items.length > 0) {
frappe.call({
@@ -373,9 +374,11 @@
frm.reload_doc();
},
});
- }
- dialog.hide();
+ dialog.hide();
+ } else {
+ frappe.msgprint(__("Please select items to reserve."));
+ }
},
});
@@ -390,6 +393,7 @@
if (unreserved_qty > 0) {
dialog.fields_dict.items.df.data.push({
+ __checked: 1,
sales_order_item: item.name,
item_code: item.item_code,
warehouse: item.warehouse,
@@ -414,6 +418,7 @@
label: __("Reserved Stock"),
allow_bulk_edit: false,
cannot_add_rows: true,
+ cannot_delete_rows: true,
in_place_edit: true,
data: [],
fields: [
@@ -457,7 +462,7 @@
],
primary_action_label: __("Unreserve Stock"),
primary_action: () => {
- var data = { sr_entries: dialog.fields_dict.sr_entries.grid.data };
+ var data = { sr_entries: dialog.fields_dict.sr_entries.grid.get_selected_children() };
if (data.sr_entries && data.sr_entries.length > 0) {
frappe.call({
@@ -473,9 +478,11 @@
frm.reload_doc();
},
});
- }
- dialog.hide();
+ dialog.hide();
+ } else {
+ frappe.msgprint(__("Please select items to unreserve."));
+ }
},
});
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
index 222ffb4..4325f26 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -253,7 +253,7 @@
doc.make_bundle_using_old_serial_batch_fields(via_landed_cost_voucher=True)
doc.update_stock_ledger(allow_negative_stock=True, via_landed_cost_voucher=True)
doc.make_gl_entries()
- doc.repost_future_sle_and_gle()
+ doc.repost_future_sle_and_gle(via_landed_cost_voucher=True)
def validate_asset_qty_and_status(self, receipt_document_type, receipt_document):
for item in self.get("items"):
diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
index 32b384d..13b7f97 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
@@ -745,6 +745,207 @@
frappe.db.get_value("Serial and Batch Bundle", row.serial_and_batch_bundle, "avg_rate"),
)
+ def test_do_not_validate_landed_cost_voucher_with_serial_batch_for_legacy_pr(self):
+ from erpnext.stock.doctype.item.test_item import make_item
+ from erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle import get_auto_batch_nos
+
+ frappe.flags.ignore_serial_batch_bundle_validation = True
+ frappe.flags.use_serial_and_batch_fields = True
+ sn_item = "Test Don't Validate Landed Cost Voucher Serial NO for Legacy PR"
+ batch_item = "Test Don't Validate Landed Cost Voucher Batch NO for Legacy PR"
+ sn_item_doc = make_item(
+ sn_item,
+ {
+ "has_serial_no": 1,
+ "serial_no_series": "SN-TDVLCVSNO-.####",
+ "is_stock_item": 1,
+ },
+ )
+
+ batch_item_doc = make_item(
+ batch_item,
+ {
+ "has_batch_no": 1,
+ "batch_number_series": "BATCH-TDVLCVSNO-.####",
+ "create_new_batch": 1,
+ "is_stock_item": 1,
+ },
+ )
+
+ serial_nos = [
+ "SN-TDVLCVSNO-0001",
+ "SN-TDVLCVSNO-0002",
+ "SN-TDVLCVSNO-0003",
+ "SN-TDVLCVSNO-0004",
+ "SN-TDVLCVSNO-0005",
+ ]
+
+ for sn in serial_nos:
+ if not frappe.db.exists("Serial No", sn):
+ sn_doc = frappe.get_doc(
+ {
+ "doctype": "Serial No",
+ "item_code": sn_item,
+ "serial_no": sn,
+ }
+ )
+ sn_doc.insert()
+
+ if not frappe.db.exists("Batch", "BATCH-TDVLCVSNO-0001"):
+ batch_doc = frappe.get_doc(
+ {
+ "doctype": "Batch",
+ "item": batch_item,
+ "batch_id": "BATCH-TDVLCVSNO-0001",
+ }
+ )
+ batch_doc.insert()
+
+ warehouse = "_Test Warehouse - _TC"
+ company = frappe.db.get_value("Warehouse", warehouse, "company")
+
+ pr = make_purchase_receipt(
+ company=company,
+ warehouse=warehouse,
+ item_code=sn_item,
+ qty=5,
+ rate=100,
+ uom=sn_item_doc.stock_uom,
+ stock_uom=sn_item_doc.stock_uom,
+ do_not_submit=True,
+ )
+
+ pr.append(
+ "items",
+ {
+ "item_code": batch_item,
+ "item_name": batch_item,
+ "description": "Test Batch Item",
+ "uom": batch_item_doc.stock_uom,
+ "stock_uom": batch_item_doc.stock_uom,
+ "qty": 5,
+ "rate": 100,
+ "warehouse": warehouse,
+ },
+ )
+
+ pr.submit()
+ pr.reload()
+
+ for sn in serial_nos:
+ sn_doc = frappe.get_doc("Serial No", sn)
+ sn_doc.db_set(
+ {
+ "warehouse": warehouse,
+ "status": "Active",
+ }
+ )
+
+ batch_doc.db_set(
+ {
+ "batch_qty": 5,
+ }
+ )
+
+ for row in pr.items:
+ if row.item_code == sn_item:
+ row.db_set("serial_no", ", ".join(serial_nos))
+ else:
+ row.db_set("batch_no", "BATCH-TDVLCVSNO-0001")
+
+ stock_ledger_entries = frappe.get_all("Stock Ledger Entry", filters={"voucher_no": pr.name})
+ for sle in stock_ledger_entries:
+ doc = frappe.get_doc("Stock Ledger Entry", sle.name)
+ if doc.item_code == sn_item:
+ doc.db_set("serial_no", ", ".join(serial_nos))
+ else:
+ doc.db_set("batch_no", "BATCH-TDVLCVSNO-0001")
+
+ dn = create_delivery_note(
+ company=company,
+ warehouse=warehouse,
+ item_code=sn_item,
+ qty=5,
+ rate=100,
+ uom=sn_item_doc.stock_uom,
+ stock_uom=sn_item_doc.stock_uom,
+ do_not_submit=True,
+ )
+
+ dn.append(
+ "items",
+ {
+ "item_code": batch_item,
+ "item_name": batch_item,
+ "description": "Test Batch Item",
+ "uom": batch_item_doc.stock_uom,
+ "stock_uom": batch_item_doc.stock_uom,
+ "qty": 5,
+ "rate": 100,
+ "warehouse": warehouse,
+ },
+ )
+
+ dn.submit()
+
+ stock_ledger_entries = frappe.get_all("Stock Ledger Entry", filters={"voucher_no": dn.name})
+ for sle in stock_ledger_entries:
+ doc = frappe.get_doc("Stock Ledger Entry", sle.name)
+ if doc.item_code == sn_item:
+ doc.db_set("serial_no", ", ".join(serial_nos))
+ else:
+ doc.db_set("batch_no", "BATCH-TDVLCVSNO-0001")
+
+ available_batches = get_auto_batch_nos(
+ frappe._dict(
+ {
+ "item_code": batch_item,
+ "warehouse": warehouse,
+ "batch_no": ["BATCH-TDVLCVSNO-0001"],
+ "consider_negative_batches": True,
+ }
+ )
+ )[0]
+
+ self.assertFalse(available_batches.get("qty"))
+
+ frappe.flags.ignore_serial_batch_bundle_validation = False
+ frappe.flags.use_serial_and_batch_fields = False
+
+ lcv = make_landed_cost_voucher(
+ company=pr.company,
+ receipt_document_type="Purchase Receipt",
+ receipt_document=pr.name,
+ charges=20,
+ distribute_charges_based_on="Qty",
+ do_not_save=True,
+ )
+
+ lcv.get_items_from_purchase_receipts()
+ lcv.save()
+ lcv.submit()
+
+ pr.reload()
+
+ for row in pr.items:
+ self.assertEqual(row.valuation_rate, 102)
+ self.assertTrue(row.serial_and_batch_bundle)
+ self.assertEqual(
+ row.valuation_rate,
+ frappe.db.get_value("Serial and Batch Bundle", row.serial_and_batch_bundle, "avg_rate"),
+ )
+
+ lcv.cancel()
+ pr.reload()
+
+ for row in pr.items:
+ self.assertEqual(row.valuation_rate, 100)
+ self.assertTrue(row.serial_and_batch_bundle)
+ self.assertEqual(
+ row.valuation_rate,
+ frappe.db.get_value("Serial and Batch Bundle", row.serial_and_batch_bundle, "avg_rate"),
+ )
+
def make_landed_cost_voucher(**args):
args = frappe._dict(args)
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 19aad3f..286a220 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
@@ -860,6 +860,12 @@
self.validate_batch_inventory()
def validate_batch_inventory(self):
+ if (
+ self.voucher_type in ["Purchase Invoice", "Purchase Receipt"]
+ and frappe.db.get_value(self.voucher_type, self.voucher_no, "docstatus") == 1
+ ):
+ return
+
if not self.has_batch_no:
return
diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
index 49b7b0f..e20eb27 100644
--- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
+++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py
@@ -498,8 +498,6 @@
return process_gl_map(gl_entries)
def make_item_gl_entries(self, gl_entries, warehouse_account=None):
- stock_rbnb = self.get_company_default("stock_received_but_not_billed")
-
warehouse_with_no_account = []
for item in self.items:
@@ -517,31 +515,41 @@
"stock_value_difference",
)
- warehouse_account_name = warehouse_account[item.warehouse]["account"]
- warehouse_account_currency = warehouse_account[item.warehouse]["account_currency"]
+ accepted_warehouse_account = warehouse_account[item.warehouse]["account"]
supplier_warehouse_account = warehouse_account.get(self.supplier_warehouse, {}).get(
"account"
)
- supplier_warehouse_account_currency = warehouse_account.get(
- self.supplier_warehouse, {}
- ).get("account_currency")
remarks = self.get("remarks") or _("Accounting Entry for Stock")
- # FG Warehouse Account (Debit)
+ # Accepted Warehouse Account (Debit)
self.add_gl_entry(
gl_entries=gl_entries,
- account=warehouse_account_name,
+ account=accepted_warehouse_account,
cost_center=item.cost_center,
debit=stock_value_diff,
credit=0.0,
remarks=remarks,
- against_account=stock_rbnb,
- account_currency=warehouse_account_currency,
+ against_account=item.expense_account,
+ account_currency=get_account_currency(accepted_warehouse_account),
+ project=item.project,
+ item=item,
+ )
+ # Expense Account (Credit)
+ self.add_gl_entry(
+ gl_entries=gl_entries,
+ account=item.expense_account,
+ cost_center=item.cost_center,
+ debit=0.0,
+ credit=stock_value_diff,
+ remarks=remarks,
+ against_account=accepted_warehouse_account,
+ account_currency=get_account_currency(item.expense_account),
+ project=item.project,
item=item,
)
- # Supplier Warehouse Account (Credit)
- if flt(item.rm_supp_cost) and warehouse_account.get(self.supplier_warehouse):
+ if flt(item.rm_supp_cost) and supplier_warehouse_account:
+ # Supplier Warehouse Account (Credit)
self.add_gl_entry(
gl_entries=gl_entries,
account=supplier_warehouse_account,
@@ -549,40 +557,66 @@
debit=0.0,
credit=flt(item.rm_supp_cost),
remarks=remarks,
- against_account=warehouse_account_name,
- account_currency=supplier_warehouse_account_currency,
+ against_account=item.expense_account,
+ account_currency=get_account_currency(supplier_warehouse_account),
+ project=item.project,
item=item,
)
-
- # Expense Account (Credit)
- if flt(item.service_cost_per_qty):
+ # Expense Account (Debit)
self.add_gl_entry(
gl_entries=gl_entries,
account=item.expense_account,
cost_center=item.cost_center,
- debit=0.0,
- credit=flt(item.service_cost_per_qty) * flt(item.qty),
+ debit=flt(item.rm_supp_cost),
+ credit=0.0,
remarks=remarks,
- against_account=warehouse_account_name,
+ against_account=supplier_warehouse_account,
account_currency=get_account_currency(item.expense_account),
+ project=item.project,
item=item,
)
- # Loss Account (Credit)
- divisional_loss = flt(item.amount - stock_value_diff, item.precision("amount"))
+ # Expense Account (Debit)
+ if item.additional_cost_per_qty:
+ self.add_gl_entry(
+ gl_entries=gl_entries,
+ account=item.expense_account,
+ cost_center=self.cost_center or self.get_company_default("cost_center"),
+ debit=item.qty * item.additional_cost_per_qty,
+ credit=0.0,
+ remarks=remarks,
+ against_account=None,
+ account_currency=get_account_currency(item.expense_account),
+ )
- if divisional_loss:
- loss_account = item.expense_account
+ if divisional_loss := flt(item.amount - stock_value_diff, item.precision("amount")):
+ loss_account = self.get_company_default(
+ "stock_adjustment_account", ignore_validation=True
+ )
+ # Loss Account (Credit)
self.add_gl_entry(
gl_entries=gl_entries,
account=loss_account,
cost_center=item.cost_center,
+ debit=0.0,
+ credit=divisional_loss,
+ remarks=remarks,
+ against_account=item.expense_account,
+ account_currency=get_account_currency(loss_account),
+ project=item.project,
+ item=item,
+ )
+ # Expense Account (Debit)
+ self.add_gl_entry(
+ gl_entries=gl_entries,
+ account=item.expense_account,
+ cost_center=item.cost_center,
debit=divisional_loss,
credit=0.0,
remarks=remarks,
- against_account=warehouse_account_name,
- account_currency=get_account_currency(loss_account),
+ against_account=loss_account,
+ account_currency=get_account_currency(item.expense_account),
project=item.project,
item=item,
)
@@ -592,7 +626,6 @@
):
warehouse_with_no_account.append(item.warehouse)
- # Additional Costs Expense Accounts (Credit)
for row in self.additional_costs:
credit_amount = (
flt(row.base_amount)
@@ -600,6 +633,7 @@
else flt(row.amount)
)
+ # Additional Cost Expense Account (Credit)
self.add_gl_entry(
gl_entries=gl_entries,
account=row.expense_account,
@@ -608,6 +642,7 @@
credit=credit_amount,
remarks=remarks,
against_account=None,
+ account_currency=get_account_currency(row.expense_account),
)
if warehouse_with_no_account:
diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py
index 564096f..996a990 100644
--- a/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py
+++ b/erpnext/subcontracting/doctype/subcontracting_receipt/test_subcontracting_receipt.py
@@ -10,6 +10,7 @@
import erpnext
from erpnext.accounts.doctype.account.test_account import get_inventory_account
+from erpnext.accounts.utils import get_company_default
from erpnext.controllers.sales_and_purchase_return import make_return_doc
from erpnext.controllers.tests.test_subcontracting_controller import (
get_rm_items,
@@ -351,26 +352,15 @@
self.assertEqual(cint(erpnext.is_perpetual_inventory_enabled(scr.company)), 1)
gl_entries = get_gl_entries("Subcontracting Receipt", scr.name)
-
self.assertTrue(gl_entries)
fg_warehouse_ac = get_inventory_account(scr.company, scr.items[0].warehouse)
- supplier_warehouse_ac = get_inventory_account(scr.company, scr.supplier_warehouse)
expense_account = scr.items[0].expense_account
-
- if fg_warehouse_ac == supplier_warehouse_ac:
- expected_values = {
- fg_warehouse_ac: [2100.0, 1000.0], # FG Amount (D), RM Cost (C)
- expense_account: [0.0, 1000.0], # Service Cost (C)
- additional_costs_expense_account: [0.0, 100.0], # Additional Cost (C)
- }
- else:
- expected_values = {
- fg_warehouse_ac: [2100.0, 0.0], # FG Amount (D)
- supplier_warehouse_ac: [0.0, 1000.0], # RM Cost (C)
- expense_account: [0.0, 1000.0], # Service Cost (C)
- additional_costs_expense_account: [0.0, 100.0], # Additional Cost (C)
- }
+ expected_values = {
+ fg_warehouse_ac: [2100.0, 1000],
+ expense_account: [1100, 2100],
+ additional_costs_expense_account: [0.0, 100.0],
+ }
for gle in gl_entries:
self.assertEqual(expected_values[gle.account][0], gle.debit)
@@ -381,6 +371,53 @@
self.assertTrue(get_gl_entries("Subcontracting Receipt", scr.name))
frappe.db.set_single_value("Stock Settings", "use_serial_batch_fields", 1)
+ @change_settings("Stock Settings", {"use_serial_batch_fields": 0})
+ def test_subcontracting_receipt_with_zero_service_cost(self):
+ warehouse = "Stores - TCP1"
+ service_items = [
+ {
+ "warehouse": warehouse,
+ "item_code": "Subcontracted Service Item 7",
+ "qty": 10,
+ "rate": 0,
+ "fg_item": "Subcontracted Item SA7",
+ "fg_item_qty": 10,
+ },
+ ]
+ sco = get_subcontracting_order(
+ company="_Test Company with perpetual inventory",
+ warehouse=warehouse,
+ supplier_warehouse="Work In Progress - TCP1",
+ service_items=service_items,
+ )
+ rm_items = get_rm_items(sco.supplied_items)
+ itemwise_details = make_stock_in_entry(rm_items=rm_items)
+ make_stock_transfer_entry(
+ sco_no=sco.name,
+ rm_items=rm_items,
+ itemwise_details=copy.deepcopy(itemwise_details),
+ )
+ scr = make_subcontracting_receipt(sco.name)
+ scr.save()
+ scr.submit()
+
+ gl_entries = get_gl_entries("Subcontracting Receipt", scr.name)
+ self.assertTrue(gl_entries)
+
+ fg_warehouse_ac = get_inventory_account(scr.company, scr.items[0].warehouse)
+ expense_account = scr.items[0].expense_account
+ expected_values = {
+ fg_warehouse_ac: [1000, 1000],
+ expense_account: [1000, 1000],
+ }
+
+ for gle in gl_entries:
+ self.assertEqual(expected_values[gle.account][0], gle.debit)
+ self.assertEqual(expected_values[gle.account][1], gle.credit)
+
+ scr.reload()
+ scr.cancel()
+
def test_supplied_items_consumed_qty(self):
# Set Backflush Based On as "Material Transferred for Subcontracting" to transfer RM's more than the required qty
set_backflush_based_on("Material Transferred for Subcontract")