def test_sales_return_for_non_bundled_items(self):
		set_perpetual_inventory()

		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, basic_rate=100)

		actual_qty_0 = get_qty_after_transaction()

		dn = create_delivery_note(qty=5, rate=500)

		actual_qty_1 = get_qty_after_transaction()
		self.assertEquals(actual_qty_0 - 5, actual_qty_1)

		# outgoing_rate
		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn.name}, "stock_value_difference") / 5

		# return entry
		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-2, rate=500)

		actual_qty_2 = get_qty_after_transaction()

		self.assertEquals(actual_qty_1 + 2, actual_qty_2)

		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn1.name},
			["incoming_rate", "stock_value_difference"])

		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))

		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn1.name, "account": "_Test Warehouse - _TC"}, "debit")

		self.assertEquals(gle_warehouse_amount, stock_value_difference)

		set_perpetual_inventory(0)
    def test_update_stock_and_purchase_return(self):
        actual_qty_0 = get_qty_after_transaction()

        pi = make_purchase_invoice(update_stock=1,
                                   posting_date=frappe.utils.nowdate(),
                                   posting_time=frappe.utils.nowtime())

        actual_qty_1 = get_qty_after_transaction()
        self.assertEqual(actual_qty_0 + 5, actual_qty_1)

        # return entry
        pi1 = make_purchase_invoice(is_return=1,
                                    return_against=pi.name,
                                    qty=-2,
                                    rate=50,
                                    update_stock=1)

        actual_qty_2 = get_qty_after_transaction()
        self.assertEqual(actual_qty_1 - 2, actual_qty_2)

        pi1.cancel()
        self.assertEqual(actual_qty_1, get_qty_after_transaction())

        pi.reload()
        pi.cancel()
        self.assertEqual(actual_qty_0, get_qty_after_transaction())
	def test_sales_return_for_non_bundled_items(self):
		set_perpetual_inventory()

		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, basic_rate=100)

		actual_qty_0 = get_qty_after_transaction()

		dn = create_delivery_note(qty=5, rate=500)

		actual_qty_1 = get_qty_after_transaction()
		self.assertEquals(actual_qty_0 - 5, actual_qty_1)

		# outgoing_rate
		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn.name}, "stock_value_difference") / 5

		# return entry
		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-2, rate=500)

		actual_qty_2 = get_qty_after_transaction()

		self.assertEquals(actual_qty_1 + 2, actual_qty_2)

		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn1.name},
			["incoming_rate", "stock_value_difference"])

		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))

		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn1.name, "account": "_Test Warehouse - _TC"}, "debit")

		self.assertEquals(gle_warehouse_amount, stock_value_difference)

		set_perpetual_inventory(0)
Exemplo n.º 4
0
    def test_return_single_item_from_bundled_items(self):
        set_perpetual_inventory()

        create_stock_reconciliation(item_code="_Test Item",
                                    target="_Test Warehouse - _TC",
                                    qty=50,
                                    rate=100)
        create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
                                    target="_Test Warehouse - _TC",
                                    qty=50,
                                    rate=100)

        dn = create_delivery_note(item_code="_Test Product Bundle Item",
                                  qty=5,
                                  rate=500)

        # Qty after delivery
        actual_qty_1 = get_qty_after_transaction()
        self.assertEquals(actual_qty_1, 25)

        # outgoing_rate
        outgoing_rate = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item"
            }, "stock_value_difference") / 25

        # return 'test item' from packed items
        dn1 = create_delivery_note(is_return=1,
                                   return_against=dn.name,
                                   qty=-10,
                                   rate=500)

        # qty after return
        actual_qty_2 = get_qty_after_transaction()
        self.assertEquals(actual_qty_2, 35)

        # Check incoming rate for return entry
        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))

        # Check gl entry for warehouse
        gle_warehouse_amount = frappe.db.get_value(
            "GL Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name,
                "account": "_Test Warehouse - _TC"
            }, "debit")

        self.assertEquals(gle_warehouse_amount, stock_value_difference)

        set_perpetual_inventory(0)
Exemplo n.º 5
0
    def test_sales_return_for_non_bundled_items(self):
        company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

        make_stock_entry(item_code="_Test Item",
                         target="Stores - TCP1",
                         qty=50,
                         basic_rate=100)

        actual_qty_0 = get_qty_after_transaction(warehouse="Stores - TCP1")

        dn = create_delivery_note(qty=5,
                                  rate=500,
                                  warehouse="Stores - TCP1",
                                  company=company,
                                  expense_account="Cost of Goods Sold - TCP1",
                                  cost_center="Main - TCP1")

        actual_qty_1 = get_qty_after_transaction(warehouse="Stores - TCP1")
        self.assertEqual(actual_qty_0 - 5, actual_qty_1)

        # outgoing_rate
        outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {
            "voucher_type": "Delivery Note",
            "voucher_no": dn.name
        }, "stock_value_difference") / 5

        # return entry
        dn1 = create_delivery_note(is_return=1,
                                   return_against=dn.name,
                                   qty=-2,
                                   rate=500,
                                   company=company,
                                   warehouse="Stores - TCP1",
                                   expense_account="Cost of Goods Sold - TCP1",
                                   cost_center="Main - TCP1")

        actual_qty_2 = get_qty_after_transaction(warehouse="Stores - TCP1")

        self.assertEqual(actual_qty_1 + 2, actual_qty_2)

        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEqual(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
        stock_in_hand_account = get_inventory_account(company,
                                                      dn1.items[0].warehouse)

        gle_warehouse_amount = frappe.db.get_value(
            "GL Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name,
                "account": stock_in_hand_account
            }, "debit")

        self.assertEqual(gle_warehouse_amount, stock_value_difference)
Exemplo n.º 6
0
    def test_return_entire_bundled_items(self):
        company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                      'company')
        set_perpetual_inventory(1, company)

        create_stock_reconciliation(item_code="_Test Item",
                                    target="_Test Warehouse - _TC",
                                    qty=50,
                                    rate=100)
        create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
                                    target="_Test Warehouse - _TC",
                                    qty=50,
                                    rate=100)

        actual_qty = get_qty_after_transaction()
        self.assertEquals(actual_qty, 50)

        dn = create_delivery_note(item_code="_Test Product Bundle Item",
                                  qty=5,
                                  rate=500)

        # qty after return
        actual_qty = get_qty_after_transaction()
        self.assertEquals(actual_qty, 25)

        #  return bundled item
        dn1 = create_delivery_note(item_code='_Test Product Bundle Item',
                                   is_return=1,
                                   return_against=dn.name,
                                   qty=-2,
                                   rate=500)

        # qty after return
        actual_qty = get_qty_after_transaction()
        self.assertEquals(actual_qty, 35)

        # Check incoming rate for return entry
        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEquals(incoming_rate, 100)
        stock_in_hand_account = get_inventory_account('_Test Company',
                                                      dn1.items[0].warehouse)

        # Check gl entry for warehouse
        gle_warehouse_amount = frappe.db.get_value(
            "GL Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name,
                "account": stock_in_hand_account
            }, "debit")

        self.assertEquals(gle_warehouse_amount, 1400)

        set_perpetual_inventory(0, company)
Exemplo n.º 7
0
	def test_delivery_of_bundled_items_to_target_warehouse(self):
		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

		set_valuation_method("_Test Item", "FIFO")
		set_valuation_method("_Test Item Home Desktop 100", "FIFO")

		target_warehouse=get_warehouse(company=company, abbr="TCP1",
			warehouse_name="_Test Customer Warehouse").name

		for warehouse in ("Stores - TCP1", target_warehouse):
			create_stock_reconciliation(item_code="_Test Item", warehouse=warehouse, company = company,
				expense_account = "Stock Adjustment - TCP1", qty=500, rate=100)
			create_stock_reconciliation(item_code="_Test Item Home Desktop 100", company = company,
				expense_account = "Stock Adjustment - TCP1", warehouse=warehouse, qty=500, rate=100)

		dn = create_delivery_note(item_code="_Test Product Bundle Item",
			company='_Test Company with perpetual inventory', cost_center = 'Main - TCP1',
			expense_account = "Cost of Goods Sold - TCP1", do_not_submit=True, qty=5, rate=500,
			warehouse="Stores - TCP1", target_warehouse=target_warehouse)

		dn.submit()

		# qty after delivery
		actual_qty_at_source = get_qty_after_transaction(warehouse="Stores - TCP1")
		self.assertEqual(actual_qty_at_source, 475)

		actual_qty_at_target = get_qty_after_transaction(warehouse=target_warehouse)
		self.assertEqual(actual_qty_at_target, 525)

		# stock value diff for source warehouse for "_Test Item"
		stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn.name,
				"item_code": "_Test Item", "warehouse": "Stores - TCP1"},
			"stock_value_difference")

		# stock value diff for target warehouse
		stock_value_difference1 = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn.name,
				"item_code": "_Test Item", "warehouse": target_warehouse},
			"stock_value_difference")

		self.assertEqual(abs(stock_value_difference), stock_value_difference1)

		# Check gl entries
		gl_entries = get_gl_entries("Delivery Note", dn.name)
		self.assertTrue(gl_entries)

		stock_value_difference = abs(frappe.db.sql("""select sum(stock_value_difference)
			from `tabStock Ledger Entry` where voucher_type='Delivery Note' and voucher_no=%s
			and warehouse='Stores - TCP1'""", dn.name)[0][0])

		expected_values = {
			"Stock In Hand - TCP1": [0.0, stock_value_difference],
			target_warehouse: [stock_value_difference, 0.0]
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))
Exemplo n.º 8
0
	def test_delivery_of_bundled_items_to_target_warehouse(self):
		set_perpetual_inventory()
		frappe.db.set_value("Item", "_Test Item", "valuation_method", "FIFO")

		for warehouse in ("_Test Warehouse - _TC", "_Test Warehouse 1 - _TC"):
			create_stock_reconciliation(item_code="_Test Item", target=warehouse,
				qty=50, rate=100)
			create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
				target=warehouse, qty=50, rate=100)

		opening_qty_test_warehouse_1 = get_qty_after_transaction(warehouse="_Test Warehouse 1 - _TC")

		dn = create_delivery_note(item_code="_Test Product Bundle Item",
			qty=5, rate=500, target_warehouse="_Test Warehouse 1 - _TC", do_not_submit=True)

		dn.submit()

		# qty after delivery
		actual_qty = get_qty_after_transaction(warehouse="_Test Warehouse - _TC")
		self.assertEquals(actual_qty, 25)

		actual_qty = get_qty_after_transaction(warehouse="_Test Warehouse 1 - _TC")
		self.assertEquals(actual_qty, opening_qty_test_warehouse_1 + 25)

		# stock value diff for source warehouse
		stock_value_difference = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn.name, "item_code": "_Test Item Home Desktop 100", "warehouse": "_Test Warehouse - _TC"},
			"stock_value_difference")

		# stock value diff for target warehouse
		stock_value_difference1 = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn.name, "item_code": "_Test Item Home Desktop 100", "warehouse": "_Test Warehouse 1 - _TC"},
			"stock_value_difference")

		self.assertEquals(abs(stock_value_difference), stock_value_difference1)

		# Check gl entries
		gl_entries = get_gl_entries("Delivery Note", dn.name)
		self.assertTrue(gl_entries)

		stock_value_difference = abs(frappe.db.sql("""select sum(stock_value_difference)
			from `tabStock Ledger Entry` where voucher_type='Delivery Note' and voucher_no=%s
			and warehouse='_Test Warehouse - _TC'""", dn.name)[0][0])

		expected_values = {
			"_Test Warehouse - _TC": [0.0, stock_value_difference],
			"_Test Warehouse 1 - _TC": [stock_value_difference, 0.0]
		}
		for i, gle in enumerate(gl_entries):
			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))

		set_perpetual_inventory(0)
Exemplo n.º 9
0
    def test_return_single_item_from_bundled_items(self):
        set_perpetual_inventory()

        create_stock_reconciliation(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, rate=100)
        create_stock_reconciliation(
            item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", qty=50, rate=100
        )

        dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500)

        # Qty after delivery
        actual_qty_1 = get_qty_after_transaction()
        self.assertEquals(actual_qty_1, 25)

        # outgoing_rate
        outgoing_rate = (
            frappe.db.get_value(
                "Stock Ledger Entry",
                {"voucher_type": "Delivery Note", "voucher_no": dn.name, "item_code": "_Test Item"},
                "stock_value_difference",
            )
            / 25
        )

        # return 'test item' from packed items
        dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-10, rate=500)

        # qty after return
        actual_qty_2 = get_qty_after_transaction()
        self.assertEquals(actual_qty_2, 35)

        # Check incoming rate for return entry
        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry",
            {"voucher_type": "Delivery Note", "voucher_no": dn1.name},
            ["incoming_rate", "stock_value_difference"],
        )

        self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))

        # Check gl entry for warehouse
        gle_warehouse_amount = frappe.db.get_value(
            "GL Entry",
            {"voucher_type": "Delivery Note", "voucher_no": dn1.name, "account": "_Test Warehouse - _TC"},
            "debit",
        )

        self.assertEquals(gle_warehouse_amount, stock_value_difference)

        set_perpetual_inventory(0)
	def test_return_entire_bundled_items(self):
		set_perpetual_inventory()

		create_stock_reconciliation(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, rate=100)
		create_stock_reconciliation(item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC",
			qty=50, rate=100)

		dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500)

		#  return bundled item
		dn1 = create_delivery_note(item_code='_Test Product Bundle Item', is_return=1,
			return_against=dn.name, qty=-2, rate=500)

		# qty after return
		actual_qty = get_qty_after_transaction()
		self.assertEquals(actual_qty, 35)

		# Check incoming rate for return entry
		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn1.name},
			["incoming_rate", "stock_value_difference"])

		self.assertEquals(incoming_rate, 100)

		# Check gl entry for warehouse
		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn1.name, "account": "_Test Warehouse - _TC"}, "debit")

		self.assertEquals(gle_warehouse_amount, 1400)

		set_perpetual_inventory(0)
	def test_return_sales_invoice(self):
		set_perpetual_inventory()
		
		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, incoming_rate=100)
		
		actual_qty_0 = get_qty_after_transaction()
		
		si = create_sales_invoice(qty=5, rate=500, update_stock=1)

		actual_qty_1 = get_qty_after_transaction()
		self.assertEquals(actual_qty_0 - 5, actual_qty_1)
		
		# outgoing_rate
		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Sales Invoice", 
			"voucher_no": si.name}, "stock_value_difference") / 5
		
		# return entry
		si1 = create_sales_invoice(is_return=1, return_against=si.name, qty=-2, rate=500, update_stock=1)

		actual_qty_2 = get_qty_after_transaction()
			
		self.assertEquals(actual_qty_1 + 2, actual_qty_2)
		
		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
			{"voucher_type": "Sales Invoice", "voucher_no": si1.name}, 
			["incoming_rate", "stock_value_difference"])
			
		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
		
		
		# Check gl entry
		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice", 
			"voucher_no": si1.name, "account": "_Test Warehouse - _TC"}, "debit")
			
		self.assertEquals(gle_warehouse_amount, stock_value_difference)
		
		party_credited = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice", 
			"voucher_no": si1.name, "account": "Debtors - _TC", "party": "_Test Customer"}, "credit")
			
		self.assertEqual(party_credited, 1000)
		
		# Check outstanding amount
		self.assertFalse(si1.outstanding_amount)
		self.assertEqual(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"), 1500)
		
		set_perpetual_inventory(0)
Exemplo n.º 12
0
	def test_return_sales_invoice(self):
		set_perpetual_inventory()
		
		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, incoming_rate=100)
		
		actual_qty_0 = get_qty_after_transaction()
		
		si = create_sales_invoice(qty=5, rate=500, update_stock=1)

		actual_qty_1 = get_qty_after_transaction()
		self.assertEquals(actual_qty_0 - 5, actual_qty_1)
		
		# outgoing_rate
		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Sales Invoice", 
			"voucher_no": si.name}, "stock_value_difference") / 5
		
		# return entry
		si1 = create_sales_invoice(is_return=1, return_against=si.name, qty=-2, rate=500, update_stock=1)

		actual_qty_2 = get_qty_after_transaction()
			
		self.assertEquals(actual_qty_1 + 2, actual_qty_2)
		
		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
			{"voucher_type": "Sales Invoice", "voucher_no": si1.name}, 
			["incoming_rate", "stock_value_difference"])
			
		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
		
		
		# Check gl entry
		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice", 
			"voucher_no": si1.name, "account": "_Test Warehouse - _TC"}, "debit")
			
		self.assertEquals(gle_warehouse_amount, stock_value_difference)
		
		party_credited = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice", 
			"voucher_no": si1.name, "account": "Debtors - _TC", "party": "_Test Customer"}, "credit")
			
		self.assertEqual(party_credited, 1000)
		
		# Check outstanding amount
		self.assertFalse(si1.outstanding_amount)
		self.assertEqual(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"), 1500)
		
		set_perpetual_inventory(0)
Exemplo n.º 13
0
	def test_return_single_item_from_bundled_items(self):
		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

		create_stock_reconciliation(item_code="_Test Item",
			warehouse="Stores - TCP1", qty=50, rate=100,
			company=company, expense_account = "Stock Adjustment - TCP1")
		create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
			warehouse="Stores - TCP1", qty=50, rate=100,
			company=company, expense_account = "Stock Adjustment - TCP1")

		dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500,
			company=company, warehouse="Stores - TCP1",
			expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")

		# Qty after delivery
		actual_qty_1 = get_qty_after_transaction(warehouse="Stores - TCP1")
		self.assertEqual(actual_qty_1,  25)

		# outgoing_rate
		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn.name, "item_code": "_Test Item"}, "stock_value_difference") / 25

		# return 'test item' from packed items
		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-10, rate=500,
			company=company, warehouse="Stores - TCP1",
			expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")

		# qty after return
		actual_qty_2 = get_qty_after_transaction(warehouse="Stores - TCP1")
		self.assertEqual(actual_qty_2, 35)

		# Check incoming rate for return entry
		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn1.name},
			["incoming_rate", "stock_value_difference"])

		self.assertEqual(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
		stock_in_hand_account = get_inventory_account(company, dn1.items[0].warehouse)

		# Check gl entry for warehouse
		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn1.name, "account": stock_in_hand_account}, "debit")

		self.assertEqual(gle_warehouse_amount, stock_value_difference)
Exemplo n.º 14
0
	def test_update_stock_and_purchase_return(self):
		actual_qty_0 = get_qty_after_transaction()
		
		pi = make_purchase_invoice(update_stock=1, posting_date=frappe.utils.nowdate(),
			posting_time=frappe.utils.nowtime())
		
		actual_qty_1 = get_qty_after_transaction()
		self.assertEquals(actual_qty_0 + 5, actual_qty_1)

		# return entry
		pi1 = make_purchase_invoice(is_return=1, return_against=pi.name, qty=-2, rate=50, update_stock=1)

		actual_qty_2 = get_qty_after_transaction()
		self.assertEquals(actual_qty_1 - 2, actual_qty_2)
		
		pi1.cancel()
		self.assertEquals(actual_qty_1, get_qty_after_transaction())
		
		pi.cancel()
		self.assertEquals(actual_qty_0, get_qty_after_transaction())
Exemplo n.º 15
0
	def test_return_entire_bundled_items(self):
		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

		create_stock_reconciliation(item_code="_Test Item",
			warehouse="Stores - TCP1", qty=50, rate=100,
			company=company, expense_account = "Stock Adjustment - TCP1")
		create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
			warehouse="Stores - TCP1", qty=50, rate=100,
			company=company, expense_account = "Stock Adjustment - TCP1")

		actual_qty = get_qty_after_transaction(warehouse="Stores - TCP1")
		self.assertEqual(actual_qty, 50)

		dn = create_delivery_note(item_code="_Test Product Bundle Item",
			qty=5, rate=500, company=company, warehouse="Stores - TCP1", expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")

		# qty after return
		actual_qty = get_qty_after_transaction(warehouse="Stores - TCP1")
		self.assertEqual(actual_qty, 25)

		#  return bundled item
		dn1 = create_delivery_note(item_code='_Test Product Bundle Item', is_return=1,
			return_against=dn.name, qty=-2, rate=500, company=company, warehouse="Stores - TCP1", expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")

		# qty after return
		actual_qty = get_qty_after_transaction(warehouse="Stores - TCP1")
		self.assertEqual(actual_qty, 35)

		# Check incoming rate for return entry
		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
			{"voucher_type": "Delivery Note", "voucher_no": dn1.name},
			["incoming_rate", "stock_value_difference"])

		self.assertEqual(incoming_rate, 100)
		stock_in_hand_account = get_inventory_account('_Test Company', dn1.items[0].warehouse)

		# Check gl entry for warehouse
		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
			"voucher_no": dn1.name, "account": stock_in_hand_account}, "debit")

		self.assertEqual(gle_warehouse_amount, 1400)
Exemplo n.º 16
0
    def test_delivery_of_bundled_items_to_target_warehouse(self):
        company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                      'company')
        set_perpetual_inventory(1, company)

        set_valuation_method("_Test Item", "FIFO")
        set_valuation_method("_Test Item Home Desktop 100", "FIFO")

        for warehouse in ("_Test Warehouse - _TC", "_Test Warehouse 1 - _TC"):
            create_stock_reconciliation(item_code="_Test Item",
                                        target=warehouse,
                                        qty=100,
                                        rate=100)
            create_stock_reconciliation(
                item_code="_Test Item Home Desktop 100",
                target=warehouse,
                qty=100,
                rate=100)

        opening_qty_test_warehouse_1 = get_qty_after_transaction(
            warehouse="_Test Warehouse 1 - _TC")
        dn = create_delivery_note(item_code="_Test Product Bundle Item",
                                  qty=5,
                                  rate=500,
                                  target_warehouse="_Test Warehouse 1 - _TC",
                                  do_not_submit=True)

        dn.submit()

        # qty after delivery
        actual_qty = get_qty_after_transaction(
            warehouse="_Test Warehouse - _TC")
        self.assertEquals(actual_qty, 75)

        actual_qty = get_qty_after_transaction(
            warehouse="_Test Warehouse 1 - _TC")
        self.assertEquals(actual_qty, opening_qty_test_warehouse_1 + 25)

        # stock value diff for source warehouse
        # for "_Test Item"
        stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item",
                "warehouse": "_Test Warehouse - _TC"
            }, "stock_value_difference")

        # stock value diff for target warehouse
        stock_value_difference1 = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item",
                "warehouse": "_Test Warehouse 1 - _TC"
            }, "stock_value_difference")

        self.assertEquals(abs(stock_value_difference), stock_value_difference1)

        # for "_Test Item Home Desktop 100"
        stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item Home Desktop 100",
                "warehouse": "_Test Warehouse - _TC"
            }, "stock_value_difference")

        # stock value diff for target warehouse
        stock_value_difference1 = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item Home Desktop 100",
                "warehouse": "_Test Warehouse 1 - _TC"
            }, "stock_value_difference")

        self.assertEquals(abs(stock_value_difference), stock_value_difference1)

        # Check gl entries
        gl_entries = get_gl_entries("Delivery Note", dn.name)
        self.assertTrue(gl_entries)

        stock_value_difference = abs(
            frappe.db.sql(
                """select sum(stock_value_difference)
			from `tabStock Ledger Entry` where voucher_type='Delivery Note' and voucher_no=%s
			and warehouse='_Test Warehouse - _TC'""", dn.name)[0][0])

        expected_values = {
            "Stock In Hand - _TC": [0.0, stock_value_difference],
            "_Test Warehouse 1 - _TC": [stock_value_difference, 0.0]
        }
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit],
                              expected_values.get(gle.account))

        set_perpetual_inventory(0, company)
Exemplo n.º 17
0
    def test_sales_return_for_non_bundled_items_partial(self):
        company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

        make_stock_entry(item_code="_Test Item",
                         target="Stores - TCP1",
                         qty=50,
                         basic_rate=100)

        actual_qty_0 = get_qty_after_transaction(warehouse="Stores - TCP1")

        dn = create_delivery_note(qty=5,
                                  rate=500,
                                  warehouse="Stores - TCP1",
                                  company=company,
                                  expense_account="Cost of Goods Sold - TCP1",
                                  cost_center="Main - TCP1")

        actual_qty_1 = get_qty_after_transaction(warehouse="Stores - TCP1")
        self.assertEqual(actual_qty_0 - 5, actual_qty_1)

        # outgoing_rate
        outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {
            "voucher_type": "Delivery Note",
            "voucher_no": dn.name
        }, "stock_value_difference") / 5

        # return entry
        dn1 = create_delivery_note(is_return=1,
                                   return_against=dn.name,
                                   qty=-2,
                                   rate=500,
                                   company=company,
                                   warehouse="Stores - TCP1",
                                   expense_account="Cost of Goods Sold - TCP1",
                                   cost_center="Main - TCP1",
                                   do_not_submit=1)
        dn1.items[0].dn_detail = dn.items[0].name
        dn1.submit()

        actual_qty_2 = get_qty_after_transaction(warehouse="Stores - TCP1")

        self.assertEqual(actual_qty_1 + 2, actual_qty_2)

        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEqual(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
        stock_in_hand_account = get_inventory_account(company,
                                                      dn1.items[0].warehouse)

        gle_warehouse_amount = frappe.db.get_value(
            "GL Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn1.name,
                "account": stock_in_hand_account
            }, "debit")

        self.assertEqual(gle_warehouse_amount, stock_value_difference)

        # hack because new_doc isn't considering is_return portion of status_updater
        returned = frappe.get_doc("Delivery Note", dn1.name)
        returned.update_prevdoc_status()
        dn.load_from_db()

        # Check if Original DN updated
        self.assertEqual(dn.items[0].returned_qty, 2)
        self.assertEqual(dn.per_returned, 40)

        from erpnext.controllers.sales_and_purchase_return import make_return_doc
        return_dn_2 = make_return_doc("Delivery Note", dn.name)

        # Check if unreturned amount is mapped in 2nd return
        self.assertEqual(return_dn_2.items[0].qty, -3)

        si = make_sales_invoice(dn.name)
        si.submit()

        self.assertEqual(si.items[0].qty, 3)

        dn.load_from_db()
        # DN should be completed on billing all unreturned amount
        self.assertEqual(dn.items[0].billed_amt, 1500)
        self.assertEqual(dn.per_billed, 100)
        self.assertEqual(dn.status, 'Completed')

        si.load_from_db()
        si.cancel()

        dn.load_from_db()
        self.assertEqual(dn.per_billed, 0)

        dn1.cancel()
        dn.cancel()
Exemplo n.º 18
0
    def test_delivery_of_bundled_items_to_target_warehouse(self):
        from erpnext.selling.doctype.customer.test_customer import create_internal_customer

        company = frappe.db.get_value("Warehouse", "Stores - TCP1", "company")
        customer_name = create_internal_customer(
            customer_name="_Test Internal Customer 2",
            represents_company="_Test Company with perpetual inventory",
            allowed_to_interact_with="_Test Company with perpetual inventory",
        )

        set_valuation_method("_Test Item", "FIFO")
        set_valuation_method("_Test Item Home Desktop 100", "FIFO")

        target_warehouse = get_warehouse(
            company=company,
            abbr="TCP1",
            warehouse_name="_Test Customer Warehouse").name

        for warehouse in ("Stores - TCP1", target_warehouse):
            create_stock_reconciliation(
                item_code="_Test Item",
                warehouse=warehouse,
                company=company,
                expense_account="Stock Adjustment - TCP1",
                qty=500,
                rate=100,
            )
            create_stock_reconciliation(
                item_code="_Test Item Home Desktop 100",
                company=company,
                expense_account="Stock Adjustment - TCP1",
                warehouse=warehouse,
                qty=500,
                rate=100,
            )

        dn = create_delivery_note(
            item_code="_Test Product Bundle Item",
            company="_Test Company with perpetual inventory",
            customer=customer_name,
            cost_center="Main - TCP1",
            expense_account="Cost of Goods Sold - TCP1",
            qty=5,
            rate=500,
            warehouse="Stores - TCP1",
            target_warehouse=target_warehouse,
        )

        # qty after delivery
        actual_qty_at_source = get_qty_after_transaction(
            warehouse="Stores - TCP1")
        self.assertEqual(actual_qty_at_source, 475)

        actual_qty_at_target = get_qty_after_transaction(
            warehouse=target_warehouse)
        self.assertEqual(actual_qty_at_target, 525)

        # stock value diff for source warehouse for "_Test Item"
        stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry",
            {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item",
                "warehouse": "Stores - TCP1",
            },
            "stock_value_difference",
        )

        # stock value diff for target warehouse
        stock_value_difference1 = frappe.db.get_value(
            "Stock Ledger Entry",
            {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name,
                "item_code": "_Test Item",
                "warehouse": target_warehouse,
            },
            "stock_value_difference",
        )

        self.assertEqual(abs(stock_value_difference), stock_value_difference1)

        # Check gl entries
        gl_entries = get_gl_entries("Delivery Note", dn.name)
        self.assertTrue(gl_entries)

        stock_value_difference = abs(
            frappe.db.sql(
                """select sum(stock_value_difference)
			from `tabStock Ledger Entry` where voucher_type='Delivery Note' and voucher_no=%s
			and warehouse='Stores - TCP1'""",
                dn.name,
            )[0][0])

        expected_values = {
            "Stock In Hand - TCP1": [0.0, stock_value_difference],
            target_warehouse: [stock_value_difference, 0.0],
        }
        for i, gle in enumerate(gl_entries):
            self.assertEqual([gle.debit, gle.credit],
                             expected_values.get(gle.account))

        # tear down
        frappe.db.rollback()