def test_purchase_return_valuation_reposting(self):
        pr = make_purchase_receipt(
            company="_Test Company",
            posting_date="2020-04-10",
            warehouse="Stores - _TC",
            item_code="_Test Item for Reposting",
            qty=5,
            rate=100,
        )

        return_pr = make_purchase_receipt(
            company="_Test Company",
            posting_date="2020-04-15",
            warehouse="Stores - _TC",
            item_code="_Test Item for Reposting",
            is_return=1,
            return_against=pr.name,
            qty=-2,
        )

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

        self.assertEqual(outgoing_rate, 100)
        self.assertEqual(stock_value_difference, -200)

        create_landed_cost_voucher("Purchase Receipt", pr.name, pr.company)

        outgoing_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry",
            {
                "voucher_type": "Purchase Receipt",
                "voucher_no": return_pr.name
            },
            ["outgoing_rate", "stock_value_difference"],
        )

        self.assertEqual(outgoing_rate, 110)
        self.assertEqual(stock_value_difference, -220)
Beispiel #2
0
    def test_sub_contracted_item_costing(self):
        from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom

        company = "_Test Company"
        rm_item_code = "_Test Item for Reposting"
        subcontracted_item = "_Test Subcontracted Item for Reposting"

        frappe.db.set_value("Buying Settings", None,
                            "backflush_raw_materials_of_subcontract_based_on",
                            "BOM")
        make_bom(item=subcontracted_item,
                 raw_materials=[rm_item_code],
                 currency="INR")

        # Purchase raw materials on supplier warehouse: Qty = 50, Rate = 100
        pr = make_purchase_receipt(company=company,
                                   posting_date='2020-04-10',
                                   warehouse="Stores - _TC",
                                   item_code=rm_item_code,
                                   qty=10,
                                   rate=100)

        # Purchase Receipt for subcontracted item
        pr1 = make_purchase_receipt(company=company,
                                    posting_date='2020-04-20',
                                    warehouse="Finished Goods - _TC",
                                    supplier_warehouse="Stores - _TC",
                                    item_code=subcontracted_item,
                                    qty=10,
                                    rate=20,
                                    is_subcontracted="Yes")

        self.assertEqual(pr1.items[0].valuation_rate, 120)

        # Update raw material's valuation via LCV, Additional cost = 50
        lcv = create_landed_cost_voucher("Purchase Receipt", pr.name,
                                         pr.company)

        pr1.reload()
        self.assertEqual(pr1.items[0].valuation_rate, 125)

        # check outgoing_rate for DN after reposting
        incoming_rate = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Purchase Receipt",
                "voucher_no": pr1.name,
                "item_code": subcontracted_item
            }, "incoming_rate")
        self.assertEqual(incoming_rate, 125)

        # cleanup data
        pr1.cancel()
        lcv.cancel()
        pr.cancel()
Beispiel #3
0
    def test_reposting_of_sales_return_for_packed_item(self):
        company = "_Test Company"
        packed_item_code = "_Test Item for Reposting"
        bundled_item = "_Test Bundled Item for Reposting"
        create_product_bundle_item(bundled_item, [[packed_item_code, 4]])

        # Purchase Return: Qty = 50, Rate = 100
        pr = make_purchase_receipt(company=company,
                                   posting_date='2020-04-10',
                                   warehouse="Stores - _TC",
                                   item_code=packed_item_code,
                                   qty=50,
                                   rate=100)

        #Delivery Note: Qty = 5, Rate = 150
        dn = create_delivery_note(item_code=bundled_item,
                                  qty=5,
                                  rate=150,
                                  warehouse="Stores - _TC",
                                  company=company,
                                  expense_account="Cost of Goods Sold - _TC",
                                  cost_center="Main - _TC")

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

        self.assertEqual(dn.packed_items[0].incoming_rate, 100)
        self.assertEqual(outgoing_rate, 100)

        # Return Entry: Qty = -2, Rate = 150
        return_dn = create_delivery_note(
            is_return=1,
            return_against=dn.name,
            item_code=bundled_item,
            qty=-2,
            rate=150,
            company=company,
            warehouse="Stores - _TC",
            expense_account="Cost of Goods Sold - _TC",
            cost_center="Main - _TC")

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

        self.assertEqual(return_dn.packed_items[0].incoming_rate, 100)
        self.assertEqual(incoming_rate, 100)
        self.assertEqual(stock_value_difference, 800)

        #-------------------------------

        # Landed Cost Voucher to update the rate of incoming Purchase Return: Additional cost = 50
        lcv = create_landed_cost_voucher("Purchase Receipt", pr.name,
                                         pr.company)

        # check outgoing_rate for DN after reposting
        outgoing_rate = abs(
            frappe.db.get_value("Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.name
            }, "stock_value_difference") / 20)
        self.assertEqual(outgoing_rate, 101)

        dn.reload()
        self.assertEqual(dn.packed_items[0].incoming_rate, 101)

        # check incoming rate for Return entry after reposting
        incoming_rate, stock_value_difference = frappe.db.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": return_dn.name
            }, ["incoming_rate", "stock_value_difference"])

        self.assertEqual(incoming_rate, 101)
        self.assertEqual(stock_value_difference, 808)

        return_dn.reload()
        self.assertEqual(return_dn.packed_items[0].incoming_rate, 101)

        # Cleanup data
        return_dn.cancel()
        dn.cancel()
        lcv.cancel()
        pr.cancel()