Пример #1
0
    def test_purchase_receipt_no_gl_entry(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                       'company')
        set_perpetual_inventory(0, company)

        existing_bin_stock_value = dataent.db.get_value(
            "Bin", {
                "item_code": "_Test Item",
                "warehouse": "_Test Warehouse - _TC"
            }, "stock_value")

        pr = make_purchase_receipt()

        stock_value_difference = dataent.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Purchase Receipt",
                "voucher_no": pr.name,
                "item_code": "_Test Item",
                "warehouse": "_Test Warehouse - _TC"
            }, "stock_value_difference")

        self.assertEqual(stock_value_difference, 250)

        current_bin_stock_value = dataent.db.get_value(
            "Bin", {
                "item_code": "_Test Item",
                "warehouse": "_Test Warehouse - _TC"
            }, "stock_value")
        self.assertEqual(current_bin_stock_value,
                         existing_bin_stock_value + 250)

        self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
Пример #2
0
    def test_purchase_return(self):
        set_perpetual_inventory()

        pr = make_purchase_receipt()

        return_pr = make_purchase_receipt(is_return=1,
                                          return_against=pr.name,
                                          qty=-2)

        # check sle
        outgoing_rate = dataent.db.get_value("Stock Ledger Entry", {
            "voucher_type": "Purchase Receipt",
            "voucher_no": return_pr.name
        }, "outgoing_rate")

        self.assertEqual(outgoing_rate, 50)

        # check gl entries for return
        gl_entries = get_gl_entries("Purchase Receipt", return_pr.name)

        self.assertTrue(gl_entries)
        stock_in_hand_account = get_inventory_account(return_pr.company)

        expected_values = {
            stock_in_hand_account: [0.0, 100.0],
            "Stock Received But Not Billed - _TC": [100.0, 0.0],
        }

        for gle in gl_entries:
            self.assertEqual(expected_values[gle.account][0], gle.debit)
            self.assertEqual(expected_values[gle.account][1], gle.credit)

        set_perpetual_inventory(0)
Пример #3
0
    def test_repack_no_change_in_valuation(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                       'company')
        set_perpetual_inventory(0, company)

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

        repack = dataent.copy_doc(test_records[3])
        repack.posting_date = nowdate()
        repack.posting_time = nowtime()
        repack.insert()
        repack.submit()

        self.check_stock_ledger_entries(
            "Stock Entry", repack.name,
            [["_Test Item", "_Test Warehouse - _TC", -50.0],
             ["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1]])

        gl_entries = dataent.db.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
			order by account desc""",
                                    repack.name,
                                    as_dict=1)
        self.assertFalse(gl_entries)

        set_perpetual_inventory(0, repack.company)
Пример #4
0
    def test_material_receipt_gl_entry(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                       'company')
        set_perpetual_inventory(1, company)

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

        stock_in_hand_account = get_inventory_account(
            mr.company,
            mr.get("items")[0].t_warehouse)
        self.check_stock_ledger_entries(
            "Stock Entry", mr.name,
            [["_Test Item", "_Test Warehouse - _TC", 50.0]])

        self.check_gl_entries(
            "Stock Entry", mr.name,
            sorted([[stock_in_hand_account, 5000.0, 0.0],
                    ["Stock Adjustment - _TC", 0.0, 5000.0]]))

        mr.cancel()

        self.assertFalse(
            dataent.db.sql(
                """select * from `tabStock Ledger Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mr.name))

        self.assertFalse(
            dataent.db.sql(
                """select * from `tabGL Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mr.name))
Пример #5
0
    def test_material_transfer_gl_entry(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                       'company')
        set_perpetual_inventory(1, company)

        create_stock_reconciliation(qty=100, rate=100)

        mtn = make_stock_entry(item_code="_Test Item",
                               source="_Test Warehouse - _TC",
                               target="_Test Warehouse 1 - _TC",
                               qty=45)

        self.check_stock_ledger_entries(
            "Stock Entry", mtn.name,
            [["_Test Item", "_Test Warehouse - _TC", -45.0],
             ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]])

        stock_in_hand_account = get_inventory_account(
            mtn.company,
            mtn.get("items")[0].s_warehouse)

        fixed_asset_account = get_inventory_account(
            mtn.company,
            mtn.get("items")[0].t_warehouse)

        if stock_in_hand_account == fixed_asset_account:
            # no gl entry as both source and target warehouse has linked to same account.
            self.assertFalse(
                dataent.db.sql(
                    """select * from `tabGL Entry`
				where voucher_type='Stock Entry' and voucher_no=%s""", mtn.name))

        else:
            stock_value_diff = abs(
                dataent.db.get_value(
                    "Stock Ledger Entry", {
                        "voucher_type": "Stock Entry",
                        "voucher_no": mtn.name,
                        "warehouse": "_Test Warehouse - _TC"
                    }, "stock_value_difference"))

            self.check_gl_entries(
                "Stock Entry", mtn.name,
                sorted([
                    [stock_in_hand_account, 0.0, stock_value_diff],
                    [fixed_asset_account, stock_value_diff, 0.0],
                ]))

        mtn.cancel()
        self.assertFalse(
            dataent.db.sql(
                """select * from `tabStock Ledger Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.name))

        self.assertFalse(
            dataent.db.sql(
                """select * from `tabGL Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.name))
Пример #6
0
    def test_repack_with_additional_costs(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                       'company')
        set_perpetual_inventory(1, company)

        make_stock_entry(item_code="_Test Item",
                         target="_Test Warehouse - _TC",
                         qty=50,
                         basic_rate=100)
        repack = dataent.copy_doc(test_records[3])
        repack.posting_date = nowdate()
        repack.posting_time = nowtime()

        repack.set("additional_costs", [
            {
                "description": "Actual Oerating Cost",
                "amount": 1000
            },
            {
                "description": "additional operating costs",
                "amount": 200
            },
        ])
        repack.insert()
        repack.submit()

        stock_in_hand_account = get_inventory_account(
            repack.company,
            repack.get("items")[1].t_warehouse)
        rm_stock_value_diff = abs(
            dataent.db.get_value(
                "Stock Ledger Entry", {
                    "voucher_type": "Stock Entry",
                    "voucher_no": repack.name,
                    "item_code": "_Test Item"
                }, "stock_value_difference"))

        fg_stock_value_diff = abs(
            dataent.db.get_value(
                "Stock Ledger Entry", {
                    "voucher_type": "Stock Entry",
                    "voucher_no": repack.name,
                    "item_code": "_Test Item Home Desktop 100"
                }, "stock_value_difference"))

        stock_value_diff = flt(fg_stock_value_diff - rm_stock_value_diff, 2)

        self.assertEqual(stock_value_diff, 1200)

        self.check_gl_entries(
            "Stock Entry", repack.name,
            sorted([[stock_in_hand_account, 1200, 0.0],
                    ["Expenses Included In Valuation - _TC", 0.0, 1200.0]]))
        set_perpetual_inventory(0, repack.company)
Пример #7
0
    def test_warehouse_company_validation(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse 2 - _TC1',
                                       'company')
        set_perpetual_inventory(0, company)
        dataent.get_doc("User", "*****@*****.**")\
         .add_roles("Sales User", "Sales Manager", "Stock User", "Stock Manager")
        dataent.set_user("*****@*****.**")

        from epaas.stock.utils import InvalidWarehouseCompany
        st1 = dataent.copy_doc(test_records[0])
        st1.get("items")[0].t_warehouse = "_Test Warehouse 2 - _TC1"
        st1.insert()
        self.assertRaises(InvalidWarehouseCompany, st1.submit)
Пример #8
0
    def test_warehouse_merging(self):
        set_perpetual_inventory(1)

        create_warehouse("Test Warehouse for Merging 1")
        create_warehouse("Test Warehouse for Merging 2")

        make_stock_entry(item_code="_Test Item",
                         target="Test Warehouse for Merging 1 - _TC",
                         qty=1,
                         rate=100)
        make_stock_entry(item_code="_Test Item",
                         target="Test Warehouse for Merging 2 - _TC",
                         qty=1,
                         rate=100)

        existing_bin_qty = (cint(
            dataent.db.get_value(
                "Bin", {
                    "item_code": "_Test Item",
                    "warehouse": "Test Warehouse for Merging 1 - _TC"
                }, "actual_qty")) + cint(
                    dataent.db.get_value(
                        "Bin", {
                            "item_code": "_Test Item",
                            "warehouse": "Test Warehouse for Merging 2 - _TC"
                        }, "actual_qty")))

        rename_doc("Warehouse",
                   "Test Warehouse for Merging 1 - _TC",
                   "Test Warehouse for Merging 2 - _TC",
                   merge=True)

        self.assertFalse(
            dataent.db.exists("Warehouse",
                              "Test Warehouse for Merging 1 - _TC"))

        bin_qty = dataent.db.get_value(
            "Bin", {
                "item_code": "_Test Item",
                "warehouse": "Test Warehouse for Merging 2 - _TC"
            }, "actual_qty")

        self.assertEqual(bin_qty, existing_bin_qty)

        self.assertTrue(
            dataent.db.get_value(
                "Warehouse",
                filters={"account": "Test Warehouse for Merging 2 - _TC"}))
Пример #9
0
    def test_material_issue_gl_entry(self):
        company = dataent.db.get_value('Warehouse', '_Test Warehouse - _TC',
                                       'company')
        set_perpetual_inventory(1, company)

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

        mi = make_stock_entry(item_code="_Test Item",
                              source="_Test Warehouse - _TC",
                              qty=40,
                              expense_account="Stock Adjustment - _TC")

        self.check_stock_ledger_entries(
            "Stock Entry", mi.name,
            [["_Test Item", "_Test Warehouse - _TC", -40.0]])

        stock_in_hand_account = get_inventory_account(mi.company,
                                                      "_Test Warehouse - _TC")
        stock_value_diff = abs(
            dataent.db.get_value("Stock Ledger Entry", {
                "voucher_type": "Stock Entry",
                "voucher_no": mi.name
            }, "stock_value_difference"))

        self.check_gl_entries(
            "Stock Entry", mi.name,
            sorted([[stock_in_hand_account, 0.0, stock_value_diff],
                    ["Stock Adjustment - _TC", stock_value_diff, 0.0]]))

        mi.cancel()

        self.assertFalse(
            dataent.db.sql(
                """select name from `tabStock Ledger Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mi.name))

        self.assertFalse(
            dataent.db.sql(
                """select name from `tabGL Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mi.name))
Пример #10
0
    def test_purchase_receipt_for_enable_allow_cost_center_in_entry_of_bs_account(
            self):
        from epaas.accounts.doctype.cost_center.test_cost_center import create_cost_center
        accounts_settings = dataent.get_doc('Accounts Settings',
                                            'Accounts Settings')
        accounts_settings.allow_cost_center_in_entry_of_bs_account = 1
        accounts_settings.save()
        cost_center = "_Test Cost Center for BS Account - _TC"
        create_cost_center(cost_center_name="_Test Cost Center for BS Account",
                           company="_Test Company")

        if not dataent.db.exists('Location', 'Test Location'):
            dataent.get_doc({
                'doctype': 'Location',
                'location_name': 'Test Location'
            }).insert()

        set_perpetual_inventory(1, "_Test Company")
        pr = make_purchase_receipt(cost_center=cost_center)

        stock_in_hand_account = get_inventory_account(
            pr.company,
            pr.get("items")[0].warehouse)
        gl_entries = get_gl_entries("Purchase Receipt", pr.name)

        self.assertTrue(gl_entries)

        expected_values = {
            "Stock Received But Not Billed - _TC": {
                "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)

        set_perpetual_inventory(0, pr.company)
        accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
        accounts_settings.save()
Пример #11
0
    def test_purchase_return_for_rejected_qty(self):
        set_perpetual_inventory()

        pr = make_purchase_receipt(received_qty=4, qty=2)

        return_pr = make_purchase_receipt(is_return=1,
                                          return_against=pr.name,
                                          received_qty=-4,
                                          qty=-2)

        actual_qty = dataent.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Purchase Receipt",
                "voucher_no": return_pr.name,
                'warehouse': return_pr.items[0].rejected_warehouse
            }, "actual_qty")

        self.assertEqual(actual_qty, -2)

        set_perpetual_inventory(0)
Пример #12
0
    def test_purchase_receipt_gl_entry(self):
        pr = dataent.copy_doc(test_records[0])
        set_perpetual_inventory(1, pr.company)
        self.assertEqual(
            cint(epaas.is_perpetual_inventory_enabled(pr.company)), 1)
        pr.insert()
        pr.submit()

        gl_entries = get_gl_entries("Purchase Receipt", pr.name)

        self.assertTrue(gl_entries)

        stock_in_hand_account = get_inventory_account(
            pr.company,
            pr.get("items")[0].warehouse)
        fixed_asset_account = get_inventory_account(
            pr.company,
            pr.get("items")[1].warehouse)

        if stock_in_hand_account == fixed_asset_account:
            expected_values = {
                stock_in_hand_account: [750.0, 0.0],
                "Stock Received But Not Billed - _TC": [0.0, 500.0],
                "Expenses Included In Valuation - _TC": [0.0, 250.0]
            }
        else:
            expected_values = {
                stock_in_hand_account: [375.0, 0.0],
                fixed_asset_account: [375.0, 0.0],
                "Stock Received But Not Billed - _TC": [0.0, 500.0],
                "Expenses Included In Valuation - _TC": [0.0, 250.0]
            }

        for gle in gl_entries:
            self.assertEqual(expected_values[gle.account][0], gle.debit)
            self.assertEqual(expected_values[gle.account][1], gle.credit)

        pr.cancel()
        self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))

        set_perpetual_inventory(0, pr.company)
Пример #13
0
    def test_warehouse_renaming(self):
        set_perpetual_inventory(1)
        create_warehouse("Test Warehouse for Renaming 1")
        account = get_inventory_account("_Test Company",
                                        "Test Warehouse for Renaming 1 - _TC")
        self.assertTrue(
            dataent.db.get_value("Warehouse", filters={"account": account}))

        # Rename with abbr
        if dataent.db.exists("Warehouse",
                             "Test Warehouse for Renaming 2 - _TC"):
            dataent.delete_doc("Warehouse",
                               "Test Warehouse for Renaming 2 - _TC")
        rename_doc("Warehouse", "Test Warehouse for Renaming 1 - _TC",
                   "Test Warehouse for Renaming 2 - _TC")

        self.assertTrue(
            dataent.db.get_value(
                "Warehouse",
                filters={"account": "Test Warehouse for Renaming 1 - _TC"}))

        # Rename without abbr
        if dataent.db.exists("Warehouse",
                             "Test Warehouse for Renaming 3 - _TC"):
            dataent.delete_doc("Warehouse",
                               "Test Warehouse for Renaming 3 - _TC")

        rename_doc("Warehouse", "Test Warehouse for Renaming 2 - _TC",
                   "Test Warehouse for Renaming 3")

        self.assertTrue(
            dataent.db.get_value(
                "Warehouse",
                filters={"account": "Test Warehouse for Renaming 1 - _TC"}))

        # Another rename with multiple dashes
        if dataent.db.exists("Warehouse", "Test - Warehouse - Company - _TC"):
            dataent.delete_doc("Warehouse", "Test - Warehouse - Company - _TC")
        rename_doc("Warehouse", "Test Warehouse for Renaming 3 - _TC",
                   "Test - Warehouse - Company")
Пример #14
0
    def test_warehouse_user(self):
        add_user_permission("Warehouse", "_Test Warehouse 1 - _TC",
                            "*****@*****.**")
        add_user_permission("Warehouse", "_Test Warehouse 2 - _TC1",
                            "*****@*****.**")
        add_user_permission("Company", "_Test Company 1", "*****@*****.**")
        test_user = dataent.get_doc("User", "*****@*****.**")
        test_user.add_roles("Sales User", "Sales Manager", "Stock User")
        test_user.remove_roles("Stock Manager", "System Manager")

        dataent.get_doc("User", "*****@*****.**")\
         .add_roles("Sales User", "Sales Manager", "Stock User", "Stock Manager")

        st1 = dataent.copy_doc(test_records[0])
        st1.company = "_Test Company 1"
        set_perpetual_inventory(0, st1.company)
        dataent.set_user("*****@*****.**")
        st1.get("items")[0].t_warehouse = "_Test Warehouse 2 - _TC1"
        self.assertRaises(dataent.PermissionError, st1.insert)

        test_user.add_roles("System Manager")

        dataent.set_user("*****@*****.**")
        st1 = dataent.copy_doc(test_records[0])
        st1.company = "_Test Company 1"
        st1.get("items")[0].t_warehouse = "_Test Warehouse 2 - _TC1"
        st1.get("items")[0].expense_account = "Stock Adjustment - _TC1"
        st1.get("items")[0].cost_center = "Main - _TC1"
        st1.insert()
        st1.submit()

        dataent.set_user("Administrator")
        remove_user_permission("Warehouse", "_Test Warehouse 1 - _TC",
                               "*****@*****.**")
        remove_user_permission("Warehouse", "_Test Warehouse 2 - _TC1",
                               "*****@*****.**")
        remove_user_permission("Company", "_Test Company 1",
                               "*****@*****.**")
Пример #15
0
    def test_gle_for_opening_stock_entry(self):
        set_perpetual_inventory(1)

        mr = make_stock_entry(item_code="_Test Item",
                              target="_Test Warehouse - _TC",
                              qty=50,
                              basic_rate=100,
                              expense_account="Stock Adjustment - _TC",
                              is_opening="Yes",
                              do_not_save=True)

        self.assertRaises(OpeningEntryAccountError, mr.save)

        mr.items[0].expense_account = "Temporary Opening - _TC"
        mr.save()
        mr.submit()

        is_opening = dataent.db.get_value("GL Entry",
                                          filters={
                                              "voucher_type": "Stock Entry",
                                              "voucher_no": mr.name
                                          },
                                          fieldname="is_opening")
        self.assertEqual(is_opening, "Yes")
Пример #16
0
 def setUp(self):
     epaas.set_perpetual_inventory(0)
Пример #17
0
 def tearDown(self):
     dataent.set_user("Administrator")
     set_perpetual_inventory(0)