Merge pull request #3693 from rmehta/close-task
[minor] close button for task and item not found error fix
diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js
index d9a611e..4e870fa 100644
--- a/erpnext/projects/doctype/task/task.js
+++ b/erpnext/projects/doctype/task/task.js
@@ -5,42 +5,59 @@
cur_frm.add_fetch("project", "company", "company");
-erpnext.projects.Task = frappe.ui.form.Controller.extend({
- setup: function() {
- this.frm.fields_dict.project.get_query = function() {
+frappe.ui.form.on("Task", {
+ refresh: function(frm) {
+ var doc = frm.doc;
+ if(!doc.__islocal) {
+ if(frappe.model.can_read("Time Log")) {
+ frm.add_custom_button(__("Time Logs"), function() {
+ frappe.route_options = {"project": doc.project, "task": doc.name}
+ frappe.set_route("List", "Time Log");
+ }, "icon-list", true);
+ }
+ if(frappe.model.can_read("Expense Claim")) {
+ frm.add_custom_button(__("Expense Claims"), function() {
+ frappe.route_options = {"project": doc.project, "task": doc.name}
+ frappe.set_route("List", "Expense Claim");
+ }, "icon-list", true);
+ }
+
+ if(frm.perm[0].write) {
+ if(frm.doc.status==="Open") {
+ frm.add_custom_button("Close", function() {
+ frm.set_value("status", "Closed");
+ frm.save();
+ });
+ } else {
+ frm.add_custom_button("Reopen", function() {
+ frm.set_value("status", "Open");
+ frm.save();
+ });
+ }
+ }
+ }
+ },
+
+ setup: function(frm) {
+ frm.fields_dict.project.get_query = function() {
return {
query: "erpnext.projects.doctype.task.task.get_project"
}
};
},
- project: function() {
- if(this.frm.doc.project) {
- return get_server_fields('get_project_details', '','', this.frm.doc, this.frm.doc.doctype,
- this.frm.doc.name, 1);
+ project: function(frm) {
+ if(frm.doc.project) {
+ return get_server_fields('get_project_details', '','', frm.doc, frm.doc.doctype,
+ frm.doc.name, 1);
}
},
- validate: function() {
- this.frm.doc.project && frappe.model.remove_from_locals("Project",
- this.frm.doc.project);
+ validate: function(frm) {
+ frm.doc.project && frappe.model.remove_from_locals("Project",
+ frm.doc.project);
},
-
- refresh: function(doc) {
- if(!doc.__islocal) {
- cur_frm.add_custom_button(__("Time Logs"), function() {
- frappe.route_options = {"project": doc.project, "task": doc.name}
- frappe.set_route("List", "Time Log");
- }, "icon-list", true);
- cur_frm.add_custom_button(__("Expense Claims"), function() {
- frappe.route_options = {"project": doc.project, "task": doc.name}
- frappe.set_route("List", "Expense Claim");
- }, "icon-list", true);
- }
- }
+
});
cur_frm.add_fetch('task', 'subject', 'subject');
-
-cur_frm.cscript = new erpnext.projects.Task({frm: cur_frm});
-
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index ff027d7..010f5ea 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -57,7 +57,12 @@
def validate_item(self):
item_det = frappe.db.sql("""select name, has_batch_no, docstatus,
is_stock_item, has_variants, stock_uom
- from tabItem where name=%s""", self.item_code, as_dict=True)[0]
+ from tabItem where name=%s""", self.item_code, as_dict=True)
+
+ if not item_det:
+ frappe.throw(_("Item {0} not found").format(self.item_code))
+
+ item_det = item_det[0]
if item_det.is_stock_item != 'Yes':
frappe.throw(_("Item {0} must be a stock Item").format(self.item_code))
@@ -97,7 +102,7 @@
def scrub_posting_time(self):
if not self.posting_time or self.posting_time == '00:0':
self.posting_time = '00:00'
-
+
def validate_batch(self):
if self.batch_no and self.voucher_type != "Stock Entry":
expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")