Exemplo n.º 1
0
	def test_delivery_note_with_cost_center(self):
		from erpnext.accounts.doctype.cost_center.test_cost_center import create_cost_center
		cost_center = "_Test Cost Center for BS Account - TCP1"
		create_cost_center(cost_center_name="_Test Cost Center for BS Account", company="_Test Company with perpetual inventory")

		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

		set_valuation_method("_Test Item", "FIFO")

		make_stock_entry(target="Stores - TCP1", qty=5, basic_rate=100)

		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory')
		dn = create_delivery_note(company='_Test Company with perpetual inventory', warehouse='Stores - TCP1',  expense_account = "Cost of Goods Sold - TCP1", cost_center=cost_center)

		gl_entries = get_gl_entries("Delivery Note", dn.name)
		self.assertTrue(gl_entries)

		expected_values = {
			"Cost of Goods Sold - TCP1": {
				"cost_center": cost_center
			},
			stock_in_hand_account: {
				"cost_center": cost_center
			}
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)
Exemplo n.º 2
0
	def test_delivery_note_cost_center_with_balance_sheet_account(self):
		cost_center = "Main - TCP1"

		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')

		set_valuation_method("_Test Item", "FIFO")

		make_stock_entry(target="Stores - TCP1", qty=5, basic_rate=100)

		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory')
		dn = create_delivery_note(company='_Test Company with perpetual inventory', warehouse='Stores - TCP1', cost_center = 'Main - TCP1', expense_account = "Cost of Goods Sold - TCP1",
			do_not_submit=1)

		dn.get('items')[0].cost_center = None
		dn.submit()

		gl_entries = get_gl_entries("Delivery Note", dn.name)

		self.assertTrue(gl_entries)
		expected_values = {
			"Cost of Goods Sold - TCP1": {
				"cost_center": cost_center
			},
			stock_in_hand_account: {
				"cost_center": cost_center
			}
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)
	def test_delivery_note_for_disable_allow_cost_center_in_entry_of_bs_account(self):
		accounts_settings = frappe.get_doc('Accounts Settings', 'Accounts Settings')
		accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
		accounts_settings.save()
		cost_center = "_Test Cost Center - _TC"

		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
		set_perpetual_inventory(1, company)

		set_valuation_method("_Test Item", "FIFO")

		make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)

		stock_in_hand_account = get_inventory_account('_Test Company')
		dn = create_delivery_note()

		gl_entries = get_gl_entries("Delivery Note", dn.name)

		self.assertTrue(gl_entries)
		expected_values = {
			"Cost of Goods Sold - _TC": {
				"cost_center": cost_center
			},
			stock_in_hand_account: {
				"cost_center": None
			}
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)

		set_perpetual_inventory(0, company)
Exemplo n.º 4
0
	def test_delivery_note_for_disable_allow_cost_center_in_entry_of_bs_account(self):
		accounts_settings = frappe.get_doc('Accounts Settings', 'Accounts Settings')
		accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
		accounts_settings.save()
		cost_center = "_Test Cost Center - _TC"

		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
		set_perpetual_inventory(1, company)

		set_valuation_method("_Test Item", "FIFO")

		make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)

		stock_in_hand_account = get_inventory_account('_Test Company')
		dn = create_delivery_note()

		gl_entries = get_gl_entries("Delivery Note", dn.name)

		self.assertTrue(gl_entries)
		expected_values = {
			"Cost of Goods Sold - _TC": {
				"cost_center": cost_center
			},
			stock_in_hand_account: {
				"cost_center": None
			}
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)

		set_perpetual_inventory(0, company)
Exemplo n.º 5
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.º 6
0
    def test_delivery_note_gl_entry(self):
        set_perpetual_inventory()
        self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
        set_valuation_method("_Test Item", "FIFO")

        make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)

        stock_in_hand_account = frappe.db.get_value("Account", {"warehouse": "_Test Warehouse - _TC"})
        prev_bal = get_balance_on(stock_in_hand_account)

        dn = create_delivery_note()

        gl_entries = get_gl_entries("Delivery Note", dn.name)
        self.assertTrue(gl_entries)

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

        expected_values = {
            stock_in_hand_account: [0.0, stock_value_difference],
            "Cost of Goods Sold - _TC": [stock_value_difference, 0.0],
        }
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))

            # check stock in hand balance
        bal = get_balance_on(stock_in_hand_account)
        self.assertEquals(bal, prev_bal - stock_value_difference)

        # back dated incoming entry
        make_stock_entry(posting_date=add_days(nowdate(), -2), target="_Test Warehouse - _TC", qty=5, basic_rate=100)

        gl_entries = get_gl_entries("Delivery Note", dn.name)
        self.assertTrue(gl_entries)

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

        expected_values = {
            stock_in_hand_account: [0.0, stock_value_difference],
            "Cost of Goods Sold - _TC": [stock_value_difference, 0.0],
        }
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))

        dn.cancel()
        self.assertFalse(get_gl_entries("Delivery Note", dn.name))
        set_perpetual_inventory(0)
	def test_delivery_note_gl_entry(self):
		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
		set_perpetual_inventory(1, company)

		set_valuation_method("_Test Item", "FIFO")

		make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)

		stock_in_hand_account = get_inventory_account('_Test Company')
		prev_bal = get_balance_on(stock_in_hand_account)

		dn = create_delivery_note()

		gl_entries = get_gl_entries("Delivery Note", dn.name)
		self.assertTrue(gl_entries)

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

		expected_values = {
			stock_in_hand_account: [0.0, stock_value_difference],
			"Cost of Goods Sold - _TC": [stock_value_difference, 0.0]
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))

		# check stock in hand balance
		bal = get_balance_on(stock_in_hand_account)
		self.assertEqual(bal, prev_bal - stock_value_difference)

		# back dated incoming entry
		make_stock_entry(posting_date=add_days(nowdate(), -2), target="_Test Warehouse - _TC",
			qty=5, basic_rate=100)

		gl_entries = get_gl_entries("Delivery Note", dn.name)
		self.assertTrue(gl_entries)

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

		expected_values = {
			stock_in_hand_account: [0.0, stock_value_difference],
			"Cost of Goods Sold - _TC": [stock_value_difference, 0.0]
		}
		for i, gle in enumerate(gl_entries):
			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))

		dn.cancel()
		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
		set_perpetual_inventory(0, company)
Exemplo n.º 8
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.º 9
0
    def test_delivery_of_bundled_items_to_target_warehouse(self):
        set_perpetual_inventory()

        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 = {
            "_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.º 10
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()