mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-13 17:53:49 +00:00
* fix: validate asset movement transaction date (#52340)
* fix: validate asset transaction date
* fix: validate asset transaction date
* fix: add translation in validate_transaction_date
* test: test_movement_transaction_date
* fix: to ensure test reliability
(cherry picked from commit e98b68c38f)
# Conflicts:
# erpnext/assets/doctype/asset_movement/test_asset_movement.py
* chore: fix conflicts
Removed unused imports and cleaned up code.
---------
Co-authored-by: Poojashree T R <159940572+22-poojashree@users.noreply.github.com>
Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import cstr, get_link_to_form
|
from frappe.utils import cstr, get_datetime, get_link_to_form
|
||||||
|
|
||||||
from erpnext.assets.doctype.asset_activity.asset_activity import add_asset_activity
|
from erpnext.assets.doctype.asset_activity.asset_activity import add_asset_activity
|
||||||
|
|
||||||
@@ -34,6 +34,7 @@ class AssetMovement(Document):
|
|||||||
for d in self.assets:
|
for d in self.assets:
|
||||||
self.validate_asset(d)
|
self.validate_asset(d)
|
||||||
self.validate_movement(d)
|
self.validate_movement(d)
|
||||||
|
self.validate_transaction_date(d)
|
||||||
|
|
||||||
def validate_asset(self, d):
|
def validate_asset(self, d):
|
||||||
status, company = frappe.db.get_value("Asset", d.asset, ["status", "company"])
|
status, company = frappe.db.get_value("Asset", d.asset, ["status", "company"])
|
||||||
@@ -51,6 +52,18 @@ class AssetMovement(Document):
|
|||||||
else:
|
else:
|
||||||
self.validate_employee(d)
|
self.validate_employee(d)
|
||||||
|
|
||||||
|
def validate_transaction_date(self, d):
|
||||||
|
previous_movement_date = frappe.db.get_value(
|
||||||
|
"Asset Movement",
|
||||||
|
[["Asset Movement Item", "asset", "=", d.asset], ["docstatus", "=", 1]],
|
||||||
|
"transaction_date",
|
||||||
|
order_by="transaction_date desc",
|
||||||
|
)
|
||||||
|
if previous_movement_date and get_datetime(previous_movement_date) > get_datetime(
|
||||||
|
self.transaction_date
|
||||||
|
):
|
||||||
|
frappe.throw(_("Transaction date can't be earlier than previous movement date"))
|
||||||
|
|
||||||
def validate_location_and_employee(self, d):
|
def validate_location_and_employee(self, d):
|
||||||
self.validate_location(d)
|
self.validate_location(d)
|
||||||
self.validate_employee(d)
|
self.validate_employee(d)
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import now
|
from frappe.utils import add_days, now
|
||||||
|
|
||||||
from erpnext.assets.doctype.asset.test_asset import create_asset_data
|
from erpnext.assets.doctype.asset.test_asset import create_asset, create_asset_data
|
||||||
from erpnext.setup.doctype.employee.test_employee import make_employee
|
from erpnext.setup.doctype.employee.test_employee import make_employee
|
||||||
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
|
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
|
||||||
|
|
||||||
@@ -147,6 +147,33 @@ class TestAssetMovement(unittest.TestCase):
|
|||||||
movement1.cancel()
|
movement1.cancel()
|
||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location")
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location")
|
||||||
|
|
||||||
|
def test_movement_transaction_date(self):
|
||||||
|
asset = create_asset(item_code="Macbook Pro", do_not_save=1)
|
||||||
|
asset.save().submit()
|
||||||
|
|
||||||
|
if not frappe.db.exists("Location", "Test Location 2"):
|
||||||
|
frappe.get_doc({"doctype": "Location", "location_name": "Test Location 2"}).insert()
|
||||||
|
|
||||||
|
asset_creation_date = frappe.db.get_value(
|
||||||
|
"Asset Movement",
|
||||||
|
[["Asset Movement Item", "asset", "=", asset.name], ["docstatus", "=", 1]],
|
||||||
|
"transaction_date",
|
||||||
|
)
|
||||||
|
asset_movement = create_asset_movement(
|
||||||
|
purpose="Transfer",
|
||||||
|
company=asset.company,
|
||||||
|
assets=[
|
||||||
|
{
|
||||||
|
"asset": asset.name,
|
||||||
|
"source_location": "Test Location",
|
||||||
|
"target_location": "Test Location 2",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
transaction_date=add_days(asset_creation_date, -1),
|
||||||
|
do_not_save=True,
|
||||||
|
)
|
||||||
|
self.assertRaises(frappe.ValidationError, asset_movement.save)
|
||||||
|
|
||||||
|
|
||||||
def create_asset_movement(**args):
|
def create_asset_movement(**args):
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
@@ -165,9 +192,10 @@ def create_asset_movement(**args):
|
|||||||
"reference_name": args.reference_name,
|
"reference_name": args.reference_name,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
if not args.do_not_save:
|
||||||
movement.insert()
|
movement.insert(ignore_if_duplicate=True)
|
||||||
movement.submit()
|
if not args.do_not_submit:
|
||||||
|
movement.submit()
|
||||||
|
|
||||||
return movement
|
return movement
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user