Merge pull request #35923 from frappe/mergify/bp/develop/pr-35918
fix: asset movement (backport #35918)
This commit is contained in:
commit
50cbdc778f
@ -70,19 +70,21 @@ frappe.ui.form.on('Asset Movement', {
|
|||||||
else if (frm.doc.purpose === 'Issue') {
|
else if (frm.doc.purpose === 'Issue') {
|
||||||
fieldnames_to_be_altered = {
|
fieldnames_to_be_altered = {
|
||||||
target_location: { read_only: 1, reqd: 0 },
|
target_location: { read_only: 1, reqd: 0 },
|
||||||
source_location: { read_only: 1, reqd: 1 },
|
source_location: { read_only: 1, reqd: 0 },
|
||||||
from_employee: { read_only: 1, reqd: 0 },
|
from_employee: { read_only: 1, reqd: 0 },
|
||||||
to_employee: { read_only: 0, reqd: 1 }
|
to_employee: { read_only: 0, reqd: 1 }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Object.keys(fieldnames_to_be_altered).forEach(fieldname => {
|
if (fieldnames_to_be_altered) {
|
||||||
let property_to_be_altered = fieldnames_to_be_altered[fieldname];
|
Object.keys(fieldnames_to_be_altered).forEach(fieldname => {
|
||||||
Object.keys(property_to_be_altered).forEach(property => {
|
let property_to_be_altered = fieldnames_to_be_altered[fieldname];
|
||||||
let value = property_to_be_altered[property];
|
Object.keys(property_to_be_altered).forEach(property => {
|
||||||
frm.set_df_property(fieldname, property, value, cdn, 'assets');
|
let value = property_to_be_altered[property];
|
||||||
|
frm.fields_dict['assets'].grid.update_docfield_property(fieldname, property, value);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
frm.refresh_field('assets');
|
||||||
frm.refresh_field('assets');
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"default": "Now",
|
||||||
"fieldname": "transaction_date",
|
"fieldname": "transaction_date",
|
||||||
"fieldtype": "Datetime",
|
"fieldtype": "Datetime",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
@ -95,10 +96,11 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-01-22 12:30:55.295670",
|
"modified": "2023-06-28 16:54:26.571083",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Movement",
|
"name": "Asset Movement",
|
||||||
|
"naming_rule": "Expression",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
@ -148,5 +150,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC"
|
"sort_order": "DESC",
|
||||||
|
"states": []
|
||||||
}
|
}
|
@ -28,25 +28,20 @@ class AssetMovement(Document):
|
|||||||
def validate_location(self):
|
def validate_location(self):
|
||||||
for d in self.assets:
|
for d in self.assets:
|
||||||
if self.purpose in ["Transfer", "Issue"]:
|
if self.purpose in ["Transfer", "Issue"]:
|
||||||
if not d.source_location:
|
current_location = frappe.db.get_value("Asset", d.asset, "location")
|
||||||
d.source_location = frappe.db.get_value("Asset", d.asset, "location")
|
|
||||||
|
|
||||||
if not d.source_location:
|
|
||||||
frappe.throw(_("Source Location is required for the Asset {0}").format(d.asset))
|
|
||||||
|
|
||||||
if d.source_location:
|
if d.source_location:
|
||||||
current_location = frappe.db.get_value("Asset", d.asset, "location")
|
|
||||||
|
|
||||||
if current_location != d.source_location:
|
if current_location != d.source_location:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Asset {0} does not belongs to the location {1}").format(d.asset, d.source_location)
|
_("Asset {0} does not belongs to the location {1}").format(d.asset, d.source_location)
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
d.source_location = current_location
|
||||||
|
|
||||||
if self.purpose == "Issue":
|
if self.purpose == "Issue":
|
||||||
if d.target_location:
|
if d.target_location:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_(
|
_(
|
||||||
"Issuing cannot be done to a location. Please enter employee who has issued Asset {0}"
|
"Issuing cannot be done to a location. Please enter employee to issue the Asset {0} to"
|
||||||
).format(d.asset),
|
).format(d.asset),
|
||||||
title=_("Incorrect Movement Purpose"),
|
title=_("Incorrect Movement Purpose"),
|
||||||
)
|
)
|
||||||
@ -107,12 +102,12 @@ class AssetMovement(Document):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
self.set_latest_location_in_asset()
|
self.set_latest_location_and_custodian_in_asset()
|
||||||
|
|
||||||
def on_cancel(self):
|
def on_cancel(self):
|
||||||
self.set_latest_location_in_asset()
|
self.set_latest_location_and_custodian_in_asset()
|
||||||
|
|
||||||
def set_latest_location_in_asset(self):
|
def set_latest_location_and_custodian_in_asset(self):
|
||||||
current_location, current_employee = "", ""
|
current_location, current_employee = "", ""
|
||||||
cond = "1=1"
|
cond = "1=1"
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class TestAssetMovement(unittest.TestCase):
|
|||||||
if not frappe.db.exists("Location", "Test Location 2"):
|
if not frappe.db.exists("Location", "Test Location 2"):
|
||||||
frappe.get_doc({"doctype": "Location", "location_name": "Test Location 2"}).insert()
|
frappe.get_doc({"doctype": "Location", "location_name": "Test Location 2"}).insert()
|
||||||
|
|
||||||
movement1 = create_asset_movement(
|
create_asset_movement(
|
||||||
purpose="Transfer",
|
purpose="Transfer",
|
||||||
company=asset.company,
|
company=asset.company,
|
||||||
assets=[
|
assets=[
|
||||||
@ -58,7 +58,7 @@ class TestAssetMovement(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location 2")
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location 2")
|
||||||
|
|
||||||
create_asset_movement(
|
movement1 = create_asset_movement(
|
||||||
purpose="Transfer",
|
purpose="Transfer",
|
||||||
company=asset.company,
|
company=asset.company,
|
||||||
assets=[
|
assets=[
|
||||||
@ -70,21 +70,32 @@ class TestAssetMovement(unittest.TestCase):
|
|||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location")
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location")
|
||||||
|
|
||||||
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 2")
|
||||||
|
|
||||||
employee = make_employee("testassetmovemp@example.com", company="_Test Company")
|
employee = make_employee("testassetmovemp@example.com", company="_Test Company")
|
||||||
create_asset_movement(
|
create_asset_movement(
|
||||||
purpose="Issue",
|
purpose="Issue",
|
||||||
company=asset.company,
|
company=asset.company,
|
||||||
assets=[{"asset": asset.name, "source_location": "Test Location", "to_employee": employee}],
|
assets=[{"asset": asset.name, "source_location": "Test Location 2", "to_employee": employee}],
|
||||||
reference_doctype="Purchase Receipt",
|
reference_doctype="Purchase Receipt",
|
||||||
reference_name=pr.name,
|
reference_name=pr.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
# after issuing asset should belong to an employee not at a location
|
# after issuing, asset should belong to an employee not at a location
|
||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), None)
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), None)
|
||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "custodian"), employee)
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "custodian"), employee)
|
||||||
|
|
||||||
|
create_asset_movement(
|
||||||
|
purpose="Receipt",
|
||||||
|
company=asset.company,
|
||||||
|
assets=[{"asset": asset.name, "from_employee": employee, "target_location": "Test Location"}],
|
||||||
|
reference_doctype="Purchase Receipt",
|
||||||
|
reference_name=pr.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
# after receiving, asset should belong to a location not at an employee
|
||||||
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location")
|
||||||
|
|
||||||
def test_last_movement_cancellation(self):
|
def test_last_movement_cancellation(self):
|
||||||
pr = make_purchase_receipt(
|
pr = make_purchase_receipt(
|
||||||
item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location"
|
item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user