Esempio n. 1
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

        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)
Esempio n. 2
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

		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)