refactor!: Subcontracted Item To Be Received

This commit is contained in:
Sagar Sharma 2022-05-13 14:43:07 +05:30
parent 8486bbf31a
commit 3be663b121
2 changed files with 46 additions and 31 deletions

View File

@ -19,10 +19,10 @@ def execute(filters=None):
def get_columns(): def get_columns():
return [ return [
{ {
"label": _("Purchase Order"), "label": _("Subcontracting Order"),
"fieldtype": "Link", "fieldtype": "Link",
"fieldname": "purchase_order", "fieldname": "subcontracting_order",
"options": "Purchase Order", "options": "Subcontracting Order",
"width": 150, "width": 150,
}, },
{"label": _("Date"), "fieldtype": "Date", "fieldname": "date", "hidden": 1, "width": 150}, {"label": _("Date"), "fieldtype": "Date", "fieldname": "date", "hidden": 1, "width": 150},
@ -57,14 +57,14 @@ def get_columns():
def get_data(data, filters): def get_data(data, filters):
po = get_po(filters) sco = get_sco(filters)
po_name = [v.name for v in po] sco_name = [v.name for v in sco]
sub_items = get_purchase_order_item_supplied(po_name) sub_items = get_subcontracting_order_item_supplied(sco_name)
for item in sub_items: for item in sub_items:
for order in po: for order in sco:
if order.name == item.parent and item.received_qty < item.qty: if order.name == item.parent and item.received_qty < item.qty:
row = { row = {
"purchase_order": item.parent, "subcontracting_order": item.parent,
"date": order.transaction_date, "date": order.transaction_date,
"supplier": order.supplier, "supplier": order.supplier,
"fg_item_code": item.item_code, "fg_item_code": item.item_code,
@ -76,22 +76,21 @@ def get_data(data, filters):
data.append(row) data.append(row)
def get_po(filters): def get_sco(filters):
record_filters = [ record_filters = [
["is_subcontracted", "=", 1],
["supplier", "=", filters.supplier], ["supplier", "=", filters.supplier],
["transaction_date", "<=", filters.to_date], ["transaction_date", "<=", filters.to_date],
["transaction_date", ">=", filters.from_date], ["transaction_date", ">=", filters.from_date],
["docstatus", "=", 1], ["docstatus", "=", 1],
] ]
return frappe.get_all( return frappe.get_all(
"Purchase Order", filters=record_filters, fields=["name", "transaction_date", "supplier"] "Subcontracting Order", filters=record_filters, fields=["name", "transaction_date", "supplier"]
) )
def get_purchase_order_item_supplied(po): def get_subcontracting_order_item_supplied(sco):
return frappe.get_all( return frappe.get_all(
"Purchase Order Item", "Subcontracting Order Item",
filters=[("parent", "IN", po)], filters=[("parent", "IN", sco)],
fields=["parent", "item_code", "item_name", "qty", "received_qty"], fields=["parent", "item_code", "item_name", "qty", "received_qty"],
) )

View File

@ -7,18 +7,35 @@
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_purchase_receipt
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
from erpnext.buying.report.subcontracted_item_to_be_received.subcontracted_item_to_be_received import ( from erpnext.buying.report.subcontracted_item_to_be_received.subcontracted_item_to_be_received 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_subcontracting_receipt,
)
class TestSubcontractedItemToBeReceived(FrappeTestCase): class TestSubcontractedItemToBeReceived(FrappeTestCase):
def test_pending_and_received_qty(self): def test_pending_and_received_qty(self):
po = create_purchase_order(item_code="_Test FG Item", is_subcontracted=1) make_service_item("Subcontracted Service Item 1")
transfer_param = [] 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, supplier_warehouse="_Test Warehouse 1 - _TC"
)
make_stock_entry( make_stock_entry(
item_code="_Test Item", target="_Test Warehouse 1 - _TC", qty=100, basic_rate=100 item_code="_Test Item", target="_Test Warehouse 1 - _TC", qty=100, basic_rate=100
) )
@ -28,28 +45,27 @@ class TestSubcontractedItemToBeReceived(FrappeTestCase):
qty=100, qty=100,
basic_rate=100, basic_rate=100,
) )
make_purchase_receipt_against_po(po.name) make_subcontracting_receipt_against_sco(sco.name)
po.reload() sco.reload()
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)),
} }
) )
) )
self.assertEqual(data[0]["pending_qty"], 5) self.assertEqual(data[0]["pending_qty"], 5)
self.assertEqual(data[0]["received_qty"], 5) self.assertEqual(data[0]["received_qty"], 5)
self.assertEqual(data[0]["purchase_order"], po.name) self.assertEqual(data[0]["subcontracting_order"], sco.name)
self.assertEqual(data[0]["supplier"], po.supplier) self.assertEqual(data[0]["supplier"], sco.supplier)
def make_purchase_receipt_against_po(po, quantity=5): def make_subcontracting_receipt_against_sco(sco, quantity=5):
pr = make_purchase_receipt(po) scr = make_subcontracting_receipt(sco)
pr.items[0].qty = quantity scr.items[0].qty = quantity
pr.supplier_warehouse = "_Test Warehouse 1 - _TC" scr.insert()
pr.insert() scr.submit()
pr.submit()