mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 00:14:50 +00:00
feat: SCR return
This commit is contained in:
@@ -76,7 +76,7 @@ frappe.ui.form.on('Subcontracting Receipt', {
|
||||
}, __("View"));
|
||||
}
|
||||
|
||||
if (!frm.doc.is_return && frm.doc.docstatus == 1) {
|
||||
if (!frm.doc.is_return && frm.doc.docstatus == 1 && frm.doc.per_returned < 100) {
|
||||
frm.add_custom_button('Subcontract Return', function () {
|
||||
frappe.model.open_mapped_doc({
|
||||
method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_subcontract_return',
|
||||
|
||||
@@ -21,6 +21,7 @@ from erpnext.controllers.tests.test_subcontracting_controller import (
|
||||
set_backflush_based_on,
|
||||
)
|
||||
from erpnext.stock.doctype.item.test_item import make_item
|
||||
from erpnext.controllers.sales_and_purchase_return import make_return_doc
|
||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
|
||||
from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import make_subcontracting_receipt
|
||||
|
||||
@@ -272,6 +273,64 @@ class TestSubcontractingReceipt(FrappeTestCase):
|
||||
for row in scr.supplied_items:
|
||||
self.assertEqual(transferred_batch.get(row.batch_no), row.consumed_qty)
|
||||
|
||||
def test_subcontracting_order_partial_return(self):
|
||||
sco = get_subcontracting_order()
|
||||
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),
|
||||
)
|
||||
scr1 = make_subcontracting_receipt(sco.name)
|
||||
scr1.save()
|
||||
scr1.submit()
|
||||
|
||||
scr1_return = make_return_subcontracting_receipt(scr_name=scr1.name, qty=-3)
|
||||
scr1.load_from_db()
|
||||
self.assertEqual(scr1_return.status, "Return")
|
||||
self.assertEqual(scr1.items[0].returned_qty, 3)
|
||||
|
||||
scr2_return = make_return_subcontracting_receipt(scr_name=scr1.name, qty=-7)
|
||||
scr1.load_from_db()
|
||||
self.assertEqual(scr2_return.status, "Return")
|
||||
self.assertEqual(scr1.status, "Return Issued")
|
||||
self.assertEqual(scr1.items[0].returned_qty, 10)
|
||||
|
||||
def test_subcontracting_order_over_return(self):
|
||||
sco = get_subcontracting_order()
|
||||
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),
|
||||
)
|
||||
scr1 = make_subcontracting_receipt(sco.name)
|
||||
scr1.save()
|
||||
scr1.submit()
|
||||
|
||||
from erpnext.controllers.status_updater import OverAllowanceError
|
||||
args = frappe._dict(scr_name=scr1.name, qty=-15)
|
||||
self.assertRaises(OverAllowanceError, make_return_subcontracting_receipt, **args)
|
||||
|
||||
|
||||
def make_return_subcontracting_receipt(**args):
|
||||
args = frappe._dict(args)
|
||||
return_doc = make_return_doc("Subcontracting Receipt", args.scr_name)
|
||||
return_doc.supplier_warehouse = args.supplier_warehouse or args.warehouse or "_Test Warehouse 1 - _TC"
|
||||
|
||||
if args.qty:
|
||||
for item in return_doc.items:
|
||||
item.qty = args.qty
|
||||
|
||||
if not args.do_not_save:
|
||||
return_doc.save()
|
||||
if not args.do_not_submit:
|
||||
return_doc.submit()
|
||||
|
||||
return_doc.load_from_db()
|
||||
return return_doc
|
||||
|
||||
def get_items(**args):
|
||||
args = frappe._dict(args)
|
||||
|
||||
Reference in New Issue
Block a user