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)
Beispiel #2
0
	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)
Beispiel #4
0
    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)
Beispiel #5
0
	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()