refactor!: Subcontracted Item To Be Transferred
This commit is contained in:
parent
3be663b121
commit
05f05ab75b
@ -46,10 +46,10 @@ def get_columns():
|
|||||||
|
|
||||||
|
|
||||||
def get_data(filters):
|
def get_data(filters):
|
||||||
po_rm_item_details = get_po_items_to_supply(filters)
|
sco_rm_item_details = get_sco_items_to_supply(filters)
|
||||||
|
|
||||||
data = []
|
data = []
|
||||||
for row in po_rm_item_details:
|
for row in sco_rm_item_details:
|
||||||
transferred_qty = row.get("transferred_qty") or 0
|
transferred_qty = row.get("transferred_qty") or 0
|
||||||
if transferred_qty < row.get("reqd_qty", 0):
|
if transferred_qty < row.get("reqd_qty", 0):
|
||||||
pending_qty = frappe.utils.flt(row.get("reqd_qty", 0) - transferred_qty)
|
pending_qty = frappe.utils.flt(row.get("reqd_qty", 0) - transferred_qty)
|
||||||
@ -59,23 +59,22 @@ def get_data(filters):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def get_po_items_to_supply(filters):
|
def get_sco_items_to_supply(filters):
|
||||||
return frappe.db.get_all(
|
return frappe.db.get_all(
|
||||||
"Purchase Order",
|
"Subcontracting Order",
|
||||||
fields=[
|
fields=[
|
||||||
"name as purchase_order",
|
"name as subcontracting_order",
|
||||||
"transaction_date as date",
|
"transaction_date as date",
|
||||||
"supplier as supplier",
|
"supplier as supplier",
|
||||||
"`tabPurchase Order Item Supplied`.rm_item_code as rm_item_code",
|
"`tabSubcontracting Order Supplied Item`.rm_item_code as rm_item_code",
|
||||||
"`tabPurchase Order Item Supplied`.required_qty as reqd_qty",
|
"`tabSubcontracting Order Supplied Item`.required_qty as reqd_qty",
|
||||||
"`tabPurchase Order Item Supplied`.supplied_qty as transferred_qty",
|
"`tabSubcontracting Order Supplied Item`.supplied_qty as transferred_qty",
|
||||||
],
|
],
|
||||||
filters=[
|
filters=[
|
||||||
["Purchase Order", "per_received", "<", "100"],
|
["Subcontracting Order", "per_received", "<", "100"],
|
||||||
["Purchase Order", "is_subcontracted", "=", 1],
|
["Subcontracting Order", "supplier", "=", filters.supplier],
|
||||||
["Purchase Order", "supplier", "=", filters.supplier],
|
["Subcontracting Order", "transaction_date", "<=", filters.to_date],
|
||||||
["Purchase Order", "transaction_date", "<=", filters.to_date],
|
["Subcontracting Order", "transaction_date", ">=", filters.from_date],
|
||||||
["Purchase Order", "transaction_date", ">=", filters.from_date],
|
["Subcontracting Order", "docstatus", "=", 1],
|
||||||
["Purchase Order", "docstatus", "=", 1],
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -3,24 +3,36 @@
|
|||||||
# Compiled at: 2019-05-06 10:24:35
|
# Compiled at: 2019-05-06 10:24:35
|
||||||
# Decompiled by https://python-decompiler.com
|
# Decompiled by https://python-decompiler.com
|
||||||
|
|
||||||
import json
|
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase
|
||||||
|
|
||||||
from erpnext.buying.doctype.purchase_order.purchase_order import make_rm_stock_entry
|
|
||||||
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
|
|
||||||
from erpnext.buying.report.subcontracted_raw_materials_to_be_transferred.subcontracted_raw_materials_to_be_transferred import (
|
from erpnext.buying.report.subcontracted_raw_materials_to_be_transferred.subcontracted_raw_materials_to_be_transferred import (
|
||||||
execute,
|
execute,
|
||||||
)
|
)
|
||||||
|
from erpnext.controllers.tests.test_subcontracting_controller import (
|
||||||
|
get_subcontracting_order,
|
||||||
|
make_service_item,
|
||||||
|
)
|
||||||
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
|
from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
|
||||||
|
from erpnext.subcontracting.doctype.subcontracting_order.subcontracting_order import (
|
||||||
|
make_rm_stock_entry,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestSubcontractedItemToBeTransferred(FrappeTestCase):
|
class TestSubcontractedItemToBeTransferred(FrappeTestCase):
|
||||||
def test_pending_and_transferred_qty(self):
|
def test_pending_and_transferred_qty(self):
|
||||||
po = create_purchase_order(
|
make_service_item("Subcontracted Service Item 1")
|
||||||
item_code="_Test FG Item", is_subcontracted=1, supplier_warehouse="_Test Warehouse 1 - _TC"
|
service_items = [
|
||||||
)
|
{
|
||||||
|
"warehouse": "_Test Warehouse - _TC",
|
||||||
|
"item_code": "Subcontracted Service Item 1",
|
||||||
|
"qty": 10,
|
||||||
|
"rate": 500,
|
||||||
|
"fg_item": "_Test FG Item",
|
||||||
|
"fg_item_qty": 10,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
sco = get_subcontracting_order(service_items=service_items)
|
||||||
|
|
||||||
# Material Receipt of RMs
|
# Material Receipt of RMs
|
||||||
make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=100, basic_rate=100)
|
make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=100, basic_rate=100)
|
||||||
@ -28,50 +40,47 @@ class TestSubcontractedItemToBeTransferred(FrappeTestCase):
|
|||||||
item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", qty=100, basic_rate=100
|
item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", qty=100, basic_rate=100
|
||||||
)
|
)
|
||||||
|
|
||||||
se = transfer_subcontracted_raw_materials(po)
|
transfer_subcontracted_raw_materials(sco)
|
||||||
|
|
||||||
col, data = execute(
|
col, data = execute(
|
||||||
filters=frappe._dict(
|
filters=frappe._dict(
|
||||||
{
|
{
|
||||||
"supplier": po.supplier,
|
"supplier": sco.supplier,
|
||||||
"from_date": frappe.utils.get_datetime(
|
"from_date": frappe.utils.get_datetime(
|
||||||
frappe.utils.add_to_date(po.transaction_date, days=-10)
|
frappe.utils.add_to_date(sco.transaction_date, days=-10)
|
||||||
),
|
),
|
||||||
"to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(po.transaction_date, days=10)),
|
"to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(sco.transaction_date, days=10)),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
po.reload()
|
sco.reload()
|
||||||
|
|
||||||
po_data = [row for row in data if row.get("purchase_order") == po.name]
|
sco_data = [row for row in data if row.get("subcontracting_order") == sco.name]
|
||||||
# Alphabetically sort to be certain of order
|
# Alphabetically sort to be certain of order
|
||||||
po_data = sorted(po_data, key=lambda i: i["rm_item_code"])
|
sco_data = sorted(sco_data, key=lambda i: i["rm_item_code"])
|
||||||
|
|
||||||
self.assertEqual(len(po_data), 2)
|
self.assertEqual(len(sco_data), 2)
|
||||||
self.assertEqual(po_data[0]["purchase_order"], po.name)
|
self.assertEqual(sco_data[0]["subcontracting_order"], sco.name)
|
||||||
|
|
||||||
self.assertEqual(po_data[0]["rm_item_code"], "_Test Item")
|
self.assertEqual(sco_data[0]["rm_item_code"], "_Test Item")
|
||||||
self.assertEqual(po_data[0]["p_qty"], 8)
|
self.assertEqual(sco_data[0]["p_qty"], 8)
|
||||||
self.assertEqual(po_data[0]["transferred_qty"], 2)
|
self.assertEqual(sco_data[0]["transferred_qty"], 2)
|
||||||
|
|
||||||
self.assertEqual(po_data[1]["rm_item_code"], "_Test Item Home Desktop 100")
|
self.assertEqual(sco_data[1]["rm_item_code"], "_Test Item Home Desktop 100")
|
||||||
self.assertEqual(po_data[1]["p_qty"], 19)
|
self.assertEqual(sco_data[1]["p_qty"], 19)
|
||||||
self.assertEqual(po_data[1]["transferred_qty"], 1)
|
self.assertEqual(sco_data[1]["transferred_qty"], 1)
|
||||||
|
|
||||||
se.cancel()
|
|
||||||
po.cancel()
|
|
||||||
|
|
||||||
|
|
||||||
def transfer_subcontracted_raw_materials(po):
|
def transfer_subcontracted_raw_materials(sco):
|
||||||
# Order of supplied items fetched in PO is flaky
|
# Order of supplied items fetched in SCO is flaky
|
||||||
transfer_qty_map = {"_Test Item": 2, "_Test Item Home Desktop 100": 1}
|
transfer_qty_map = {"_Test Item": 2, "_Test Item Home Desktop 100": 1}
|
||||||
|
|
||||||
item_1 = po.supplied_items[0].rm_item_code
|
item_1 = sco.supplied_items[0].rm_item_code
|
||||||
item_2 = po.supplied_items[1].rm_item_code
|
item_2 = sco.supplied_items[1].rm_item_code
|
||||||
|
|
||||||
rm_item = [
|
rm_items = [
|
||||||
{
|
{
|
||||||
"name": po.supplied_items[0].name,
|
"name": sco.supplied_items[0].name,
|
||||||
"item_code": item_1,
|
"item_code": item_1,
|
||||||
"rm_item_code": item_1,
|
"rm_item_code": item_1,
|
||||||
"item_name": item_1,
|
"item_name": item_1,
|
||||||
@ -82,7 +91,7 @@ def transfer_subcontracted_raw_materials(po):
|
|||||||
"stock_uom": "Nos",
|
"stock_uom": "Nos",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": po.supplied_items[1].name,
|
"name": sco.supplied_items[1].name,
|
||||||
"item_code": item_2,
|
"item_code": item_2,
|
||||||
"rm_item_code": item_2,
|
"rm_item_code": item_2,
|
||||||
"item_name": item_2,
|
"item_name": item_2,
|
||||||
@ -93,8 +102,7 @@ def transfer_subcontracted_raw_materials(po):
|
|||||||
"stock_uom": "Nos",
|
"stock_uom": "Nos",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
rm_item_string = json.dumps(rm_item)
|
se = frappe.get_doc(make_rm_stock_entry(sco.name, rm_items))
|
||||||
se = frappe.get_doc(make_rm_stock_entry(po.name, rm_item_string))
|
|
||||||
se.from_warehouse = "_Test Warehouse - _TC"
|
se.from_warehouse = "_Test Warehouse - _TC"
|
||||||
se.to_warehouse = "_Test Warehouse - _TC"
|
se.to_warehouse = "_Test Warehouse - _TC"
|
||||||
se.stock_entry_type = "Send to Subcontractor"
|
se.stock_entry_type = "Send to Subcontractor"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user