Added validation and fixes UX for asset (#14727)

This commit is contained in:
rohitwaghchaure 2018-06-28 23:04:25 +05:30 committed by Nabin Hait
parent 6ceed038e6
commit cae945e743
6 changed files with 89 additions and 11 deletions

View File

@ -337,7 +337,7 @@ class Asset(AccountsController):
if self.get('default_finance_book'):
for d in self.get('finance_books'):
if d.finance_books == self.default_finance_book:
if d.finance_book == self.default_finance_book:
return cint(d.idx) - 1
def update_stock_movement(self):

View File

@ -2,7 +2,27 @@
// For license information, please see license.txt
frappe.ui.form.on('Asset Movement', {
onload: function(frm) {
//
select_serial_no: function(frm) {
if (frm.doc.select_serial_no) {
let serial_no = frm.doc.serial_no
? frm.doc.serial_no + '\n' + frm.doc.select_serial_no : frm.doc.select_serial_no;
frm.set_value("serial_no", serial_no);
frm.set_value("quantity", serial_no.split('\n').length);
}
},
serial_no: function(frm) {
const qty = frm.doc.serial_no ? frm.doc.serial_no.split('\n').length : 0;
frm.set_value("quantity", qty);
},
setup: function(frm) {
frm.set_query("select_serial_no", function() {
return {
filters: {
"asset": frm.doc.asset
}
};
});
}
});

View File

@ -207,6 +207,39 @@
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "select_serial_no",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Select Serial No",
"length": 0,
"no_copy": 0,
"options": "Serial No",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_in_quick_entry": 0,
@ -575,7 +608,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-06-26 15:02:35.822022",
"modified": "2018-06-28 12:07:16.531921",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Movement",
@ -640,12 +673,13 @@
"write": 1
}
],
"quick_entry": 1,
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
"track_seen": 0,
"track_views": 0
}

View File

@ -36,7 +36,7 @@ class AssetMovement(Document):
if not self.serial_no and not (self.from_employee or self.to_employee):
self.source_location = frappe.db.get_value("Asset", self.asset, "location")
if self.purpose == 'Issue' and not self.source_location:
if self.purpose == 'Issue' and not (self.source_location or self.from_employee):
frappe.throw(_("Source Location is required for the asset {0}").format(self.asset))
if self.serial_no and self.source_location:
@ -51,7 +51,7 @@ class AssetMovement(Document):
if self.source_location and self.source_location == self.target_location and self.purpose == 'Transfer':
frappe.throw(_("Source and Target Location cannot be same"))
if self.purpose == 'Receipt' and not self.target_location:
if self.purpose == 'Receipt' and not (self.target_location or self.to_employee):
frappe.throw(_("Target Location is required for the asset {0}").format(self.asset))
def on_submit(self):
@ -93,10 +93,13 @@ class AssetMovement(Document):
if not self.serial_no:
frappe.db.set_value("Asset", self.asset, "location", location)
if not employee and self.purpose in ['Receipt', 'Transfer']:
employee = self.to_employee
if self.serial_no:
for d in get_serial_nos(self.serial_no):
if (location or self.purpose == 'Issue'):
if (location or (self.purpose == 'Issue' and self.source_location)):
frappe.db.set_value('Serial No', d, 'location', location)
if employee:
if employee or self.docstatus==2 or self.purpose == 'Issue':
frappe.db.set_value('Serial No', d, 'employee', employee)

View File

@ -45,7 +45,7 @@ class Item(WebsiteGenerator):
self.set_onload('stock_exists', self.stock_ledger_created())
self.set_asset_naming_series()
if self.is_fixed_asset:
asset = frappe.db.get_all("Asset", filters={"item_code": self.name, "docstatus": 1}, limit=1)
asset = self.asset_exists()
self.set_onload("asset_exists", True if asset else False)
def set_asset_naming_series(self):
@ -113,6 +113,7 @@ class Item(WebsiteGenerator):
self.validate_has_variants()
self.validate_stock_exists_for_template_item()
self.validate_asset_exists_for_serialized_asset()
self.validate_attributes()
self.validate_variant_attributes()
self.validate_website_image()
@ -693,6 +694,18 @@ class Item(WebsiteGenerator):
frappe.throw(
_('Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item'))
def validate_asset_exists_for_serialized_asset(self):
if (not self.get("__islocal") and self.asset_exists() and
cint(self.has_serial_no) != cint(frappe.db.get_value('Item', self.name, 'has_serial_no'))):
frappe.throw(_("Asset is already exists against the item {0}, you cannot change the has serial no value")
.format(self.name))
def asset_exists(self):
if not hasattr(self, '_asset_created'):
self._asset_created = frappe.db.get_all("Asset",
filters={"item_code": self.name, "docstatus": 1}, limit=1)
return self._asset_created
def validate_uom(self):
if not self.get("__islocal"):
check_stock_uom_with_bin(self.name, self.stock_uom)

View File

@ -11,6 +11,14 @@ frappe.ui.form.on("Purchase Receipt", {
'Stock Entry': 'Return',
'Purchase Invoice': 'Invoice'
}
frm.set_query("asset", "items", function() {
return {
filters: {
"purchase_receipt": frm.doc.name
}
}
})
},
onload: function(frm) {
$.each(["warehouse", "rejected_warehouse"], function(i, field) {