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)
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()
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()