def selco_purchase_receipt_cancel_updates(): from erpnext.buying.doctype.purchase_order.purchase_order import update_status mrn_list = frappe.db.sql("""SELECT name FROM `tabPurchase Receipt` where posting_date < '2016-06-11' """,as_list=True) for mrn in mrn_list: local_mrn = frappe.get_doc("Purchase Receipt",mrn[0]) closed_po = [] if local_mrn.status == "To Bill": for item in local_mrn.items: local_po1 = frappe.get_doc("Purchase Order",item.purchase_order) if local_po1.status == "Closed": closed_po.append(local_po1.name) update_status('To Receive and Bill',local_po1.name) #local_po1.status = "To Receive and Bill" #local_po1.save() local_mrn.cancel() for po in closed_po: update_status('Closed',po)
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 test_drop_shipping(self): from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order_for_drop_shipment from erpnext.stock.doctype.item.test_item import make_item 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, 'default_supplier': '_Test Supplier', "expense_account": "_Test Account Cost for Goods Sold - _TC", "cost_center": "_Test Cost Center - _TC" }) dn_item = make_item("_Test Regular Item", {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC", "cost_center": "_Test Cost Center - _TC"}) 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_for_drop_shipment(so.name, '_Test Supplier') po.submit() dn = create_dn_against_so(so.name, delivered_qty=1) self.assertEquals(so.customer, po.customer) self.assertEquals(po.items[0].sales_order, so.name) self.assertEquals(po.items[0].item_code, po_item.item_code) self.assertEquals(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.assertEquals(abs(flt(ordered_qty)), existing_ordered_qty) self.assertEquals(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.assertEquals(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item + 1) #test po_item length self.assertEquals(len(po.items), 1) #test per_delivered status update_status("Delivered", po.name) self.assertEquals(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.assertEquals(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.assertEquals(abs(flt(ordered_qty)), existing_ordered_qty) self.assertEquals(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.assertEquals(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item)
def test_drop_shipping(self): from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order_for_drop_shipment from erpnext.stock.doctype.item.test_item import make_item from erpnext.buying.doctype.purchase_order.purchase_order import update_status po_item = make_item( "_Test Item for Drop Shipping", { "is_stock_item": 1, "delivered_by_supplier": 1, 'default_supplier': '_Test Supplier', "expense_account": "_Test Account Cost for Goods Sold - _TC", "cost_center": "_Test Cost Center - _TC" }) dn_item = make_item( "_Test Regular Item", { "is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC", "cost_center": "_Test Cost Center - _TC" }) 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 }] #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_for_drop_shipment(so.name, '_Test Supplier') po.submit() dn = create_dn_against_so(so.name, delivered_qty=1) self.assertEquals(so.customer, po.customer) self.assertEquals(po.items[0].prevdoc_doctype, "Sales Order") self.assertEquals(po.items[0].prevdoc_docname, so.name) self.assertEquals(po.items[0].item_code, po_item.item_code) self.assertEquals(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.assertEquals(abs(flt(ordered_qty)), existing_ordered_qty) self.assertEquals(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.assertEquals(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item + 1) #test po_item length self.assertEquals(len(po.items), 1) #test per_delivered status update_status("Delivered", po.name) self.assertEquals( 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.assertEquals(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.assertEquals(abs(flt(ordered_qty)), existing_ordered_qty) self.assertEquals(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.assertEquals(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item)
def test_drop_shipping(self): from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order_for_default_supplier, \ update_status as so_update_status from erpnext.buying.doctype.purchase_order.purchase_order import update_status # make items 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=2, rate=100) #create so, po and dn so = make_sales_order(item_list=so_items, do_not_submit=True) so.submit() po = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]]) po.submit() dn = create_dn_against_so(so.name, delivered_qty=2) 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 po_item length self.assertEqual(len(po.items), 1) # test ordered_qty and reserved_qty for drop ship item bin_po_item = frappe.get_all("Bin", filters={"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, fields=["ordered_qty", "reserved_qty"]) ordered_qty = bin_po_item[0].ordered_qty if bin_po_item else 0.0 reserved_qty = bin_po_item[0].reserved_qty if bin_po_item else 0.0 # drop ship PO should not impact bin, test the same self.assertEqual(abs(flt(ordered_qty)), 0) self.assertEqual(abs(flt(reserved_qty)), 0) # test per_delivered status update_status("Delivered", po.name) self.assertEqual(flt(frappe.db.get_value("Sales Order", so.name, "per_delivered"), 2), 100.00) po.load_from_db() # test after closing so so.db_set('status', "Closed") so.update_reserved_qty() # test ordered_qty and reserved_qty for drop ship item after closing so bin_po_item = frappe.get_all("Bin", filters={"item_code": po_item.item_code, "warehouse": "_Test Warehouse - _TC"}, fields=["ordered_qty", "reserved_qty"]) ordered_qty = bin_po_item[0].ordered_qty if bin_po_item else 0.0 reserved_qty = bin_po_item[0].reserved_qty if bin_po_item else 0.0 self.assertEqual(abs(flt(ordered_qty)), 0) self.assertEqual(abs(flt(reserved_qty)), 0) # teardown so_update_status("Draft", so.name) dn.load_from_db() dn.cancel() po.cancel() so.load_from_db() so.cancel()