mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-23 21:22:42 +01:00
test: added tests for rescheduled depreciation after asset repair cancellation
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
|
||||
import frappe
|
||||
from frappe.tests import IntegrationTestCase, UnitTestCase
|
||||
from frappe.utils import cstr, flt
|
||||
from frappe.utils import cstr, date_diff, flt
|
||||
|
||||
from erpnext.assets.doctype.asset.depreciation import (
|
||||
post_depreciation_entries,
|
||||
@@ -13,6 +13,7 @@ from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_sched
|
||||
get_asset_depr_schedule_doc,
|
||||
get_depr_schedule,
|
||||
)
|
||||
from erpnext.assets.doctype.asset_repair.test_asset_repair import create_asset_repair
|
||||
|
||||
|
||||
class UnitTestAssetDepreciationSchedule(UnitTestCase):
|
||||
@@ -377,3 +378,368 @@ class TestAssetDepreciationSchedule(IntegrationTestCase):
|
||||
asset.reload()
|
||||
|
||||
self.assertEqual(asset.finance_books[0].total_number_of_booked_depreciations, 14)
|
||||
|
||||
def test_depreciation_schedule_after_cancelling_asset_repair(self):
|
||||
asset = create_asset(
|
||||
item_code="Macbook Pro",
|
||||
gross_purchase_amount=500,
|
||||
calculate_depreciation=1,
|
||||
depreciation_method="Straight Line",
|
||||
available_for_use_date="2023-01-01",
|
||||
depreciation_start_date="2023-01-31",
|
||||
frequency_of_depreciation=1,
|
||||
total_number_of_depreciations=12,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
expected_depreciation_before_repair = [
|
||||
["2023-01-31", 41.67, 41.67],
|
||||
["2023-02-28", 41.67, 83.34],
|
||||
["2023-03-31", 41.67, 125.01],
|
||||
["2023-04-30", 41.67, 166.68],
|
||||
["2023-05-31", 41.67, 208.35],
|
||||
["2023-06-30", 41.67, 250.02],
|
||||
["2023-07-31", 41.67, 291.69],
|
||||
["2023-08-31", 41.67, 333.36],
|
||||
["2023-09-30", 41.67, 375.03],
|
||||
["2023-10-31", 41.67, 416.7],
|
||||
["2023-11-30", 41.67, 458.37],
|
||||
["2023-12-31", 41.63, 500.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 500)
|
||||
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
failure_date="2023-04-01",
|
||||
pi_repair_cost1=60,
|
||||
pi_repair_cost2=40,
|
||||
increase_in_asset_life=0,
|
||||
submit=1,
|
||||
)
|
||||
self.assertEqual(asset_repair.total_repair_cost, 100)
|
||||
|
||||
expected_depreciation_after_repair = [
|
||||
["2023-01-31", 50.0, 50.0],
|
||||
["2023-02-28", 50.0, 100.0],
|
||||
["2023-03-31", 50.0, 150.0],
|
||||
["2023-04-30", 50.0, 200.0],
|
||||
["2023-05-31", 50.0, 250.0],
|
||||
["2023-06-30", 50.0, 300.0],
|
||||
["2023-07-31", 50.0, 350.0],
|
||||
["2023-08-31", 50.0, 400.0],
|
||||
["2023-09-30", 50.0, 450.0],
|
||||
["2023-10-31", 50.0, 500.0],
|
||||
["2023-11-30", 50.0, 550.0],
|
||||
["2023-12-31", 50.0, 600.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_after_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 600)
|
||||
|
||||
asset_repair.cancel()
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 500)
|
||||
|
||||
def test_depreciation_schedule_after_cancelling_asset_repair_for_6_months_frequency(self):
|
||||
asset = create_asset(
|
||||
item_code="Macbook Pro",
|
||||
gross_purchase_amount=500,
|
||||
calculate_depreciation=1,
|
||||
depreciation_method="Straight Line",
|
||||
available_for_use_date="2023-01-01",
|
||||
depreciation_start_date="2023-06-30",
|
||||
frequency_of_depreciation=6,
|
||||
total_number_of_depreciations=4,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
expected_depreciation_before_repair = [
|
||||
["2023-06-30", 125.0, 125.0],
|
||||
["2023-12-31", 125.0, 250.0],
|
||||
["2024-06-30", 125.0, 375.0],
|
||||
["2024-12-31", 125.0, 500.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
failure_date="2023-04-01",
|
||||
pi_repair_cost1=60,
|
||||
pi_repair_cost2=40,
|
||||
increase_in_asset_life=0,
|
||||
submit=1,
|
||||
)
|
||||
self.assertEqual(asset_repair.total_repair_cost, 100)
|
||||
|
||||
expected_depreciation_after_repair = [
|
||||
["2023-06-30", 150.0, 150.0],
|
||||
["2023-12-31", 150.0, 300.0],
|
||||
["2024-06-30", 150.0, 450.0],
|
||||
["2024-12-31", 150.0, 600.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
|
||||
self.assertEqual(schedules, expected_depreciation_after_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 600)
|
||||
|
||||
asset_repair.cancel()
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 500)
|
||||
|
||||
def test_depreciation_schedule_after_cancelling_asset_repair_for_existing_asset(self):
|
||||
asset = create_asset(
|
||||
item_code="Macbook Pro",
|
||||
gross_purchase_amount=500,
|
||||
calculate_depreciation=1,
|
||||
depreciation_method="Straight Line",
|
||||
available_for_use_date="2023-01-15",
|
||||
depreciation_start_date="2023-03-31",
|
||||
frequency_of_depreciation=1,
|
||||
total_number_of_depreciations=12,
|
||||
is_existing_asset=1,
|
||||
opening_accumulated_depreciation=64.52,
|
||||
opening_number_of_booked_depreciations=2,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
expected_depreciation_before_repair = [
|
||||
["2023-03-31", 41.26, 105.78],
|
||||
["2023-04-30", 41.26, 147.04],
|
||||
["2023-05-31", 41.26, 188.3],
|
||||
["2023-06-30", 41.26, 229.56],
|
||||
["2023-07-31", 41.26, 270.82],
|
||||
["2023-08-31", 41.26, 312.08],
|
||||
["2023-09-30", 41.26, 353.34],
|
||||
["2023-10-31", 41.26, 394.6],
|
||||
["2023-11-30", 41.26, 435.86],
|
||||
["2023-12-31", 41.26, 477.12],
|
||||
["2024-01-15", 22.88, 500.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
failure_date="2023-04-01",
|
||||
pi_repair_cost1=60,
|
||||
pi_repair_cost2=40,
|
||||
increase_in_asset_life=0,
|
||||
submit=1,
|
||||
)
|
||||
self.assertEqual(asset_repair.total_repair_cost, 100)
|
||||
|
||||
expected_depreciation_after_repair = [
|
||||
["2023-03-31", 50.74, 115.26],
|
||||
["2023-04-30", 50.74, 166.0],
|
||||
["2023-05-31", 50.74, 216.74],
|
||||
["2023-06-30", 50.74, 267.48],
|
||||
["2023-07-31", 50.74, 318.22],
|
||||
["2023-08-31", 50.74, 368.96],
|
||||
["2023-09-30", 50.74, 419.7],
|
||||
["2023-10-31", 50.74, 470.44],
|
||||
["2023-11-30", 50.74, 521.18],
|
||||
["2023-12-31", 50.74, 571.92],
|
||||
["2024-01-15", 28.08, 600.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_after_repair)
|
||||
|
||||
asset_repair.cancel()
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 435.48)
|
||||
|
||||
def test_wdv_depreciation_schedule_after_cancelling_asset_repair(self):
|
||||
asset = create_asset(
|
||||
item_code="Macbook Pro",
|
||||
gross_purchase_amount=500,
|
||||
calculate_depreciation=1,
|
||||
depreciation_method="Written Down Value",
|
||||
available_for_use_date="2023-04-01",
|
||||
depreciation_start_date="2023-12-31",
|
||||
frequency_of_depreciation=12,
|
||||
total_number_of_depreciations=4,
|
||||
rate_of_depreciation=40,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
expected_depreciation_before_repair = [
|
||||
["2023-12-31", 150.68, 150.68],
|
||||
["2024-12-31", 139.73, 290.41],
|
||||
["2025-12-31", 83.84, 374.25],
|
||||
["2026-12-31", 50.3, 424.55],
|
||||
["2027-04-01", 75.45, 500.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
failure_date="2024-01-01",
|
||||
pi_repair_cost1=60,
|
||||
pi_repair_cost2=40,
|
||||
increase_in_asset_life=0,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
expected_depreciation_after_repair = [
|
||||
["2023-12-31", 180.82, 180.82],
|
||||
["2024-12-31", 167.67, 348.49],
|
||||
["2025-12-31", 100.6, 449.09],
|
||||
["2026-12-31", 60.36, 509.45],
|
||||
["2027-04-01", 90.55, 600.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_after_repair)
|
||||
|
||||
asset_repair.cancel()
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
|
||||
def test_daily_prorata_based_depreciation_schedule_after_cancelling_asset_repair_for(self):
|
||||
asset = create_asset(
|
||||
item_code="Macbook Pro",
|
||||
gross_purchase_amount=500,
|
||||
calculate_depreciation=1,
|
||||
depreciation_method="Straight Line",
|
||||
available_for_use_date="2023-01-01",
|
||||
depreciation_start_date="2023-01-31",
|
||||
daily_prorata_based=1,
|
||||
frequency_of_depreciation=1,
|
||||
total_number_of_depreciations=12,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
expected_depreciation_before_repair = [
|
||||
["2023-01-31", 42.47, 42.47],
|
||||
["2023-02-28", 38.36, 80.83],
|
||||
["2023-03-31", 42.47, 123.3],
|
||||
["2023-04-30", 41.1, 164.4],
|
||||
["2023-05-31", 42.47, 206.87],
|
||||
["2023-06-30", 41.1, 247.97],
|
||||
["2023-07-31", 42.47, 290.44],
|
||||
["2023-08-31", 42.47, 332.91],
|
||||
["2023-09-30", 41.1, 374.01],
|
||||
["2023-10-31", 42.47, 416.48],
|
||||
["2023-11-30", 41.1, 457.58],
|
||||
["2023-12-31", 42.42, 500.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
failure_date="2023-04-01",
|
||||
pi_repair_cost1=60,
|
||||
pi_repair_cost2=40,
|
||||
increase_in_asset_life=0,
|
||||
submit=1,
|
||||
)
|
||||
self.assertEqual(asset_repair.total_repair_cost, 100)
|
||||
|
||||
expected_depreciation_after_repair = [
|
||||
["2023-01-31", 50.96, 50.96],
|
||||
["2023-02-28", 46.03, 96.99],
|
||||
["2023-03-31", 50.96, 147.95],
|
||||
["2023-04-30", 49.32, 197.27],
|
||||
["2023-05-31", 50.96, 248.23],
|
||||
["2023-06-30", 49.32, 297.55],
|
||||
["2023-07-31", 50.96, 348.51],
|
||||
["2023-08-31", 50.96, 399.47],
|
||||
["2023-09-30", 49.32, 448.79],
|
||||
["2023-10-31", 50.96, 499.75],
|
||||
["2023-11-30", 49.32, 549.07],
|
||||
["2023-12-31", 50.93, 600.0],
|
||||
]
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_after_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 600)
|
||||
|
||||
asset_repair.cancel()
|
||||
|
||||
schedules = [
|
||||
[cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount]
|
||||
for d in get_depr_schedule(asset.name, "Active")
|
||||
]
|
||||
self.assertEqual(schedules, expected_depreciation_before_repair)
|
||||
asset.reload()
|
||||
self.assertEqual(asset.finance_books[0].value_after_depreciation, 500)
|
||||
|
||||
@@ -128,7 +128,11 @@ class TestAssetRepair(IntegrationTestCase):
|
||||
asset = create_asset(calculate_depreciation=1, submit=1)
|
||||
initial_asset_value = get_asset_value_after_depreciation(asset.name)
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset, capitalize_repair_cost=1, item="_Test Non Stock Item", submit=1
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
submit=1,
|
||||
increase_in_asset_value=1,
|
||||
)
|
||||
asset.reload()
|
||||
|
||||
@@ -136,7 +140,9 @@ class TestAssetRepair(IntegrationTestCase):
|
||||
self.assertEqual(asset_repair.repair_cost, increase_in_asset_value)
|
||||
|
||||
def test_purchase_invoice(self):
|
||||
asset_repair = create_asset_repair(capitalize_repair_cost=1, item="_Test Non Stock Item", submit=1)
|
||||
asset_repair = create_asset_repair(
|
||||
capitalize_repair_cost=1, item="_Test Non Stock Item", submit=1, increase_in_asset_value=1
|
||||
)
|
||||
self.assertTrue(asset_repair.invoices)
|
||||
|
||||
def test_gl_entries_with_perpetual_inventory(self):
|
||||
@@ -163,6 +169,7 @@ class TestAssetRepair(IntegrationTestCase):
|
||||
pi_expense_account1="Administrative Expenses - TCP1",
|
||||
pi_expense_account2="Legal Expenses - TCP1",
|
||||
item="_Test Non Stock Item",
|
||||
increase_in_asset_life=1,
|
||||
submit=1,
|
||||
)
|
||||
|
||||
@@ -210,6 +217,7 @@ class TestAssetRepair(IntegrationTestCase):
|
||||
asset_repair = create_asset_repair(
|
||||
capitalize_repair_cost=1,
|
||||
stock_consumption=1,
|
||||
increase_in_asset_life=1,
|
||||
item="_Test Non Stock Item",
|
||||
submit=1,
|
||||
)
|
||||
@@ -259,7 +267,13 @@ class TestAssetRepair(IntegrationTestCase):
|
||||
self.assertEqual(first_asset_depr_schedule.status, "Active")
|
||||
|
||||
initial_num_of_depreciations = num_of_depreciations(asset)
|
||||
create_asset_repair(asset=asset, capitalize_repair_cost=1, item="_Test Non Stock Item", submit=1)
|
||||
create_asset_repair(
|
||||
asset=asset,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
submit=1,
|
||||
increase_in_asset_life=1,
|
||||
)
|
||||
|
||||
asset.reload()
|
||||
first_asset_depr_schedule.load_from_db()
|
||||
@@ -302,7 +316,7 @@ def create_asset_repair(**args):
|
||||
{
|
||||
"asset": asset.name,
|
||||
"asset_name": asset.asset_name,
|
||||
"failure_date": nowdate(),
|
||||
"failure_date": args.failure_date or nowdate(),
|
||||
"description": "Test Description",
|
||||
"company": asset.company,
|
||||
}
|
||||
@@ -366,7 +380,7 @@ def create_asset_repair(**args):
|
||||
|
||||
if args.capitalize_repair_cost:
|
||||
asset_repair.capitalize_repair_cost = 1
|
||||
if asset.calculate_depreciation:
|
||||
if asset.calculate_depreciation and args.increase_in_asset_life:
|
||||
asset_repair.increase_in_asset_life = 12
|
||||
pi1 = make_purchase_invoice(
|
||||
company=asset.company,
|
||||
|
||||
@@ -154,7 +154,11 @@ class TestAssetValueAdjustment(IntegrationTestCase):
|
||||
|
||||
# create asset repair
|
||||
asset_repair = create_asset_repair(
|
||||
asset=asset_doc, capitalize_repair_cost=1, item="_Test Non Stock Item", submit=1
|
||||
asset=asset_doc,
|
||||
capitalize_repair_cost=1,
|
||||
item="_Test Non Stock Item",
|
||||
submit=1,
|
||||
increase_in_asset_life=1,
|
||||
)
|
||||
|
||||
first_asset_depr_schedule = get_asset_depr_schedule_doc(asset_doc.name, "Active")
|
||||
|
||||
Reference in New Issue
Block a user