def test_drop_shipping(self): from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order from erpnext.buying.doctype.purchase_order.purchase_order import update_status make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100) po_item = make_item("_Test Item for Drop Shipping", {"is_stock_item": 1, "delivered_by_supplier": 1}) dn_item = make_item("_Test Regular Item", {"is_stock_item": 1}) so_items = [ { "item_code": po_item.item_code, "warehouse": "", "qty": 2, "rate": 400, "delivered_by_supplier": 1, "supplier": '_Test Supplier' }, { "item_code": dn_item.item_code, "warehouse": "_Test Warehouse - _TC", "qty": 2, "rate": 300, "conversion_factor": 1.0 } ] if frappe.db.get_value("Item", "_Test Regular Item", "is_stock_item")==1: make_stock_entry(item="_Test Regular Item", target="_Test Warehouse - _TC", qty=10, rate=100) #setuo existing qty from bin bin = frappe.get_all("Bin", filters={"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, fields=["ordered_qty", "reserved_qty"]) existing_ordered_qty = bin[0].ordered_qty if bin else 0.0 existing_reserved_qty = bin[0].reserved_qty if bin else 0.0 bin = frappe.get_all("Bin", filters={"item_code": dn_item.item_code, "warehouse": "_Test Warehouse - _TC"}, fields=["reserved_qty"]) existing_reserved_qty_for_dn_item = bin[0].reserved_qty if bin else 0.0 #create so, po and partial dn so = make_sales_order(item_list=so_items, do_not_submit=True) so.submit() po = make_purchase_order(so.name, '_Test Supplier', selected_items=[so_items[0]['item_code']]) po.submit() dn = create_dn_against_so(so.name, delivered_qty=1) self.assertEqual(so.customer, po.customer) self.assertEqual(po.items[0].sales_order, so.name) self.assertEqual(po.items[0].item_code, po_item.item_code) self.assertEqual(dn.items[0].item_code, dn_item.item_code) #test ordered_qty and reserved_qty bin = frappe.get_all("Bin", filters={"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, fields=["ordered_qty", "reserved_qty"]) ordered_qty = bin[0].ordered_qty if bin else 0.0 reserved_qty = bin[0].reserved_qty if bin else 0.0 self.assertEqual(abs(flt(ordered_qty)), existing_ordered_qty) self.assertEqual(abs(flt(reserved_qty)), existing_reserved_qty) reserved_qty = frappe.db.get_value("Bin", {"item_code": dn_item.item_code, "warehouse": "_Test Warehouse - _TC"}, "reserved_qty") self.assertEqual(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item + 1) #test po_item length self.assertEqual(len(po.items), 1) #test per_delivered status update_status("Delivered", po.name) self.assertEqual(flt(frappe.db.get_value("Sales Order", so.name, "per_delivered"), 2), 75.00) #test reserved qty after complete delivery dn = create_dn_against_so(so.name, delivered_qty=1) reserved_qty = frappe.db.get_value("Bin", {"item_code": dn_item.item_code, "warehouse": "_Test Warehouse - _TC"}, "reserved_qty") self.assertEqual(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item) #test after closing so so.db_set('status', "Closed") so.update_reserved_qty() bin = frappe.get_all("Bin", filters={"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, fields=["ordered_qty", "reserved_qty"]) ordered_qty = bin[0].ordered_qty if bin else 0.0 reserved_qty = bin[0].reserved_qty if bin else 0.0 self.assertEqual(abs(flt(ordered_qty)), existing_ordered_qty) self.assertEqual(abs(flt(reserved_qty)), existing_reserved_qty) reserved_qty = frappe.db.get_value("Bin", {"item_code": dn_item.item_code, "warehouse": "_Test Warehouse - _TC"}, "reserved_qty") self.assertEqual(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item)
def make_aptronics_purchase_order(source_name, target_doc=None): po = make_purchase_order(source_name, for_supplier, selected_items, target_doc) if po: po.customer, po.customer_name, po.buyer = frappe.get_value('Sales Order', source_name, ['customer', 'customer_name', 'buyer']) return po