Merge branch 'master' of github.com:webnotes/erpnext

This commit is contained in:
Rushabh Mehta 2012-12-07 09:42:19 +01:00
commit 20eb244983
5 changed files with 190 additions and 191 deletions

View File

@ -52,13 +52,14 @@ cur_frm.cscript.refresh = function(doc,cdt,cdn){
if(doc.__islocal && !in_list(user_roles, "HR User")) { if(doc.__islocal && !in_list(user_roles, "HR User")) {
cur_frm.set_intro("Fill the form and save it") cur_frm.set_intro("Fill the form and save it")
} else { } else {
if(doc.approval_status=="Draft") { if(doc.docstatus==0 && doc.approval_status=="Draft") {
if(user==doc.exp_approver) { if(user==doc.exp_approver) {
cur_frm.set_intro("You are the Expense Approver for this record. Please Update the 'Status' and Save"); cur_frm.set_intro("You are the Expense Approver for this record. Please Update the 'Status' and Save");
cur_frm.toggle_enable("approval_status", true); cur_frm.toggle_enable("approval_status", true);
} else { } else {
cur_frm.set_intro("Expense Claim is pending approval. Only the Expense Approver can update status."); cur_frm.set_intro("Expense Claim is pending approval. Only the Expense Approver can update status.");
cur_frm.toggle_enable("approval_status", false); cur_frm.toggle_enable("approval_status", false);
if(!doc.__islocal) cur_frm.frm_head.appframe.buttons.Submit.toggle(false);
} }
} else { } else {
if(doc.approval_status=="Approved") { if(doc.approval_status=="Approved") {
@ -98,6 +99,9 @@ cur_frm.cscript.calculate_total_amount = function(doc,cdt,cdn){
} }
cur_frm.cscript.claim_amount = function(doc,cdt,cdn){ cur_frm.cscript.claim_amount = function(doc,cdt,cdn){
cur_frm.cscript.calculate_total(doc,cdt,cdn); cur_frm.cscript.calculate_total(doc,cdt,cdn);
var child = locals[cdt][cdn];
refresh_field("sanctioned_amount", child.name, child.parentfield);
} }
cur_frm.cscript.sanctioned_amount = function(doc,cdt,cdn){ cur_frm.cscript.sanctioned_amount = function(doc,cdt,cdn){
cur_frm.cscript.calculate_total(doc,cdt,cdn); cur_frm.cscript.calculate_total(doc,cdt,cdn);

View File

@ -4,7 +4,7 @@
"docstatus": 0, "docstatus": 0,
"creation": "2012-12-05 16:53:59", "creation": "2012-12-05 16:53:59",
"modified_by": "Administrator", "modified_by": "Administrator",
"modified": "2012-12-06 17:34:37" "modified": "2012-12-07 13:25:44"
}, },
{ {
"is_submittable": 1, "is_submittable": 1,
@ -34,14 +34,6 @@
"name": "Expense Claim", "name": "Expense Claim",
"doctype": "DocType" "doctype": "DocType"
}, },
{
"oldfieldtype": "Section Break",
"doctype": "DocField",
"label": "Details",
"fieldname": "details",
"fieldtype": "Section Break",
"permlevel": 0
},
{ {
"permlevel": 0, "permlevel": 0,
"no_copy": 1, "no_copy": 1,
@ -67,17 +59,6 @@
"fieldtype": "Select", "fieldtype": "Select",
"permlevel": 0 "permlevel": 0
}, },
{
"oldfieldtype": "Date",
"doctype": "DocField",
"label": "Posting Date",
"oldfieldname": "posting_date",
"fieldname": "posting_date",
"fieldtype": "Date",
"reqd": 1,
"permlevel": 0,
"in_filter": 1
},
{ {
"oldfieldtype": "Column Break", "oldfieldtype": "Column Break",
"doctype": "DocField", "doctype": "DocField",
@ -87,17 +68,70 @@
"permlevel": 0 "permlevel": 0
}, },
{ {
"reqd": 0,
"no_copy": 1,
"oldfieldtype": "Currency",
"colour": "White:FFF",
"doctype": "DocField",
"label": "Total Claimed Amount",
"oldfieldname": "total_claimed_amount",
"width": "160px",
"fieldname": "total_claimed_amount",
"fieldtype": "Currency",
"permlevel": 1,
"in_filter": 0
},
{
"no_copy": 1,
"oldfieldtype": "Currency",
"colour": "White:FFF",
"doctype": "DocField",
"label": "Total Sanctioned Amount",
"oldfieldname": "total_sanctioned_amount",
"width": "160px",
"fieldname": "total_sanctioned_amount",
"fieldtype": "Currency",
"permlevel": 1,
"in_filter": 0
},
{
"oldfieldtype": "Section Break",
"doctype": "DocField",
"label": "Expense Details",
"fieldname": "expense_details",
"fieldtype": "Section Break",
"permlevel": 0
},
{
"oldfieldtype": "Table",
"allow_on_submit": 0,
"doctype": "DocField",
"label": "Expense Claim Details",
"oldfieldname": "expense_voucher_details",
"options": "Expense Claim Detail",
"fieldname": "expense_voucher_details",
"fieldtype": "Table",
"permlevel": 0
},
{
"doctype": "DocField",
"options": "Simple",
"fieldname": "sb1",
"fieldtype": "Section Break",
"permlevel": 0
},
{
"permlevel": 0,
"oldfieldtype": "Link", "oldfieldtype": "Link",
"colour": "White:FFF", "colour": "White:FFF",
"doctype": "DocField", "doctype": "DocField",
"label": "From Employee", "label": "From Employee",
"oldfieldname": "employee", "oldfieldname": "employee",
"permlevel": 0, "reqd": 1,
"trigger": "Client", "trigger": "Client",
"fieldname": "employee", "fieldname": "employee",
"fieldtype": "Link", "fieldtype": "Link",
"search_index": 1, "search_index": 1,
"reqd": 1,
"options": "Employee", "options": "Employee",
"in_filter": 1 "in_filter": 1
}, },
@ -114,10 +148,51 @@
"in_filter": 1 "in_filter": 1
}, },
{ {
"oldfieldtype": "Select",
"doctype": "DocField",
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"options": "link:Fiscal Year",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"reqd": 1,
"permlevel": 0,
"in_filter": 1
},
{
"oldfieldtype": "Link",
"doctype": "DocField",
"label": "Company",
"oldfieldname": "company",
"options": "link:Company",
"fieldname": "company",
"fieldtype": "Select",
"reqd": 1,
"permlevel": 0,
"in_filter": 1
},
{
"doctype": "DocField",
"fieldname": "cb1",
"fieldtype": "Column Break",
"permlevel": 0
},
{
"oldfieldtype": "Date",
"doctype": "DocField",
"label": "Posting Date",
"oldfieldname": "posting_date",
"fieldname": "posting_date",
"fieldtype": "Date",
"reqd": 1,
"permlevel": 0,
"in_filter": 1
},
{
"allow_on_submit": 0,
"no_copy": 1, "no_copy": 1,
"oldfieldtype": "Small Text", "oldfieldtype": "Small Text",
"colour": "White:FFF", "colour": "White:FFF",
"allow_on_submit": 0,
"doctype": "DocField", "doctype": "DocField",
"label": "Remark", "label": "Remark",
"oldfieldname": "remark", "oldfieldname": "remark",
@ -125,6 +200,17 @@
"fieldtype": "Small Text", "fieldtype": "Small Text",
"permlevel": 0 "permlevel": 0
}, },
{
"print_hide": 1,
"oldfieldtype": "Data",
"doctype": "DocField",
"label": "Employees Email Id",
"oldfieldname": "email_id",
"fieldname": "email_id",
"fieldtype": "Data",
"hidden": 1,
"permlevel": 0
},
{ {
"print_hide": 1, "print_hide": 1,
"no_copy": 1, "no_copy": 1,
@ -153,87 +239,6 @@
"permlevel": 1, "permlevel": 1,
"report_hide": 1 "report_hide": 1
}, },
{
"oldfieldtype": "Section Break",
"doctype": "DocField",
"label": "Expense Details",
"fieldname": "expense_details",
"fieldtype": "Section Break",
"permlevel": 0
},
{
"oldfieldtype": "Table",
"allow_on_submit": 0,
"doctype": "DocField",
"label": "Expense Claim Details",
"oldfieldname": "expense_voucher_details",
"options": "Expense Claim Detail",
"fieldname": "expense_voucher_details",
"fieldtype": "Table",
"permlevel": 0
},
{
"no_copy": 1,
"oldfieldtype": "Currency",
"colour": "White:FFF",
"doctype": "DocField",
"label": "Total Claimed Amount",
"oldfieldname": "total_claimed_amount",
"width": "160px",
"fieldname": "total_claimed_amount",
"fieldtype": "Currency",
"reqd": 0,
"permlevel": 1,
"in_filter": 0
},
{
"no_copy": 1,
"oldfieldtype": "Currency",
"colour": "White:FFF",
"doctype": "DocField",
"label": "Total Sanctioned Amount",
"oldfieldname": "total_sanctioned_amount",
"width": "160px",
"fieldname": "total_sanctioned_amount",
"fieldtype": "Currency",
"permlevel": 1,
"in_filter": 0
},
{
"print_hide": 1,
"oldfieldtype": "Data",
"doctype": "DocField",
"label": "Employees Email Id",
"oldfieldname": "email_id",
"fieldname": "email_id",
"fieldtype": "Data",
"hidden": 1,
"permlevel": 0
},
{
"oldfieldtype": "Select",
"doctype": "DocField",
"label": "Fiscal Year",
"oldfieldname": "fiscal_year",
"options": "link:Fiscal Year",
"fieldname": "fiscal_year",
"fieldtype": "Select",
"reqd": 1,
"permlevel": 0,
"in_filter": 1
},
{
"oldfieldtype": "Link",
"doctype": "DocField",
"label": "Company",
"oldfieldname": "company",
"options": "link:Company",
"fieldname": "company",
"fieldtype": "Select",
"reqd": 1,
"permlevel": 0,
"in_filter": 1
},
{ {
"create": 1, "create": 1,
"doctype": "DocPerm", "doctype": "DocPerm",

View File

@ -26,7 +26,7 @@ cur_frm.cscript.onload = function(doc, dt, dn) {
method:"get_approver_list", method:"get_approver_list",
callback: function(r) { callback: function(r) {
cur_frm.set_df_property("leave_approver", "options", r.message); cur_frm.set_df_property("leave_approver", "options", r.message);
get_leave_balance(cur_frm.doc); cur_frm.cscript.get_leave_balance(cur_frm.doc);
} }
}); });
} }
@ -39,13 +39,14 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
if(doc.__islocal && !in_list(user_roles, "HR User")) { if(doc.__islocal && !in_list(user_roles, "HR User")) {
cur_frm.set_intro("Fill the form and save it") cur_frm.set_intro("Fill the form and save it")
} else { } else {
if(doc.status=="Open") { if(doc.docstatus==0 && doc.status=="Open") {
if(user==doc.leave_approver) { if(user==doc.leave_approver) {
cur_frm.set_intro("You are the Leave Approver for this record. Please Update the 'Status' and Save"); cur_frm.set_intro("You are the Leave Approver for this record. Please Update the 'Status' and Save");
cur_frm.toggle_enable("status", true); cur_frm.toggle_enable("status", true);
} else { } else {
cur_frm.set_intro("This Leave Application is pending approval. Only the Leave Apporver can update status.") cur_frm.set_intro("This Leave Application is pending approval. Only the Leave Apporver can update status.")
cur_frm.toggle_enable("status", false); cur_frm.toggle_enable("status", false);
if(!doc.__islocal) cur_frm.frm_head.appframe.buttons.Submit.toggle(false);
} }
} else { } else {
if(doc.status=="Approved") { if(doc.status=="Approved") {
@ -62,21 +63,21 @@ cur_frm.cscript.refresh = function(doc, dt, dn) {
} }
cur_frm.cscript.employee = function (doc, dt, dn){ cur_frm.cscript.employee = function (doc, dt, dn){
get_leave_balance(doc, dt, dn); cur_frm.cscript.get_leave_balance(doc, dt, dn);
} }
cur_frm.cscript.fiscal_year = function (doc, dt, dn){ cur_frm.cscript.fiscal_year = function (doc, dt, dn){
get_leave_balance(doc, dt, dn); cur_frm.cscript.get_leave_balance(doc, dt, dn);
} }
cur_frm.cscript.leave_type = function (doc, dt, dn){ cur_frm.cscript.leave_type = function (doc, dt, dn){
get_leave_balance(doc, dt, dn); cur_frm.cscript.get_leave_balance(doc, dt, dn);
} }
cur_frm.cscript.half_day = function(doc, dt, dn) { cur_frm.cscript.half_day = function(doc, dt, dn) {
if(doc.from_date) { if(doc.from_date) {
set_multiple(dt,dn,{to_date:doc.from_date}); set_multiple(dt,dn,{to_date:doc.from_date});
calculate_total_days(doc, dt, dn); cur_frm.cscript.calculate_total_days(doc, dt, dn);
} }
} }
@ -84,7 +85,7 @@ cur_frm.cscript.from_date = function(doc, dt, dn) {
if(cint(doc.half_day) == 1){ if(cint(doc.half_day) == 1){
set_multiple(dt,dn,{to_date:doc.from_date}); set_multiple(dt,dn,{to_date:doc.from_date});
} }
calculate_total_days(doc, dt, dn); cur_frm.cscript.calculate_total_days(doc, dt, dn);
} }
cur_frm.cscript.to_date = function(doc, dt, dn) { cur_frm.cscript.to_date = function(doc, dt, dn) {
@ -92,11 +93,11 @@ cur_frm.cscript.to_date = function(doc, dt, dn) {
msgprint("To Date should be same as From Date for Half Day leave"); msgprint("To Date should be same as From Date for Half Day leave");
set_multiple(dt,dn,{to_date:doc.from_date}); set_multiple(dt,dn,{to_date:doc.from_date});
} }
calculate_total_days(doc, dt, dn); cur_frm.cscript.calculate_total_days(doc, dt, dn);
} }
get_leave_balance = function(doc, dt, dn) { cur_frm.cscript.get_leave_balance = function(doc, dt, dn) {
if(doc.employee && doc.leave_type && doc.fiscal_year) { if(doc.docstatus==0 && doc.employee && doc.leave_type && doc.fiscal_year) {
cur_frm.call({ cur_frm.call({
method: "get_leave_balance", method: "get_leave_balance",
args: { args: {
@ -104,16 +105,15 @@ get_leave_balance = function(doc, dt, dn) {
fiscal_year: doc.fiscal_year, fiscal_year: doc.fiscal_year,
leave_type: doc.leave_type leave_type: doc.leave_type
} }
}) });
} }
} }
calculate_total_days = function(doc, dt, dn) { cur_frm.cscript.calculate_total_days = function(doc, dt, dn) {
if(doc.from_date && doc.to_date){ if(doc.from_date && doc.to_date){
if(cint(doc.half_day) == 1) set_multiple(dt,dn,{total_leave_days:0.5}); if(cint(doc.half_day) == 1) set_multiple(dt,dn,{total_leave_days:0.5});
else{ else{
//d = new DateFn(); // server call is done to include holidays in leave days calculations
//set_multiple(dt,dn,{total_leave_days:d.get_diff(d.str_to_obj(doc.to_date),d.str_to_obj(doc.from_date))+1});
get_server_fields('get_total_leave_days', '', '', doc, dt, dn, 1); get_server_fields('get_total_leave_days', '', '', doc, dt, dn, 1);
} }
} }

View File

@ -28,7 +28,21 @@ import datetime
class DocType: class DocType:
def __init__(self, doc, doclist): def __init__(self, doc, doclist):
self.doc = doc self.doc = doc
self.doclist = doclist self.doclist = doclist
def validate(self):
# if self.doc.leave_approver == self.doc.owner:
# webnotes.msgprint("""Self Approval is not allowed.""", raise_exception=1)
self.validate_to_date()
self.validate_balance_leaves()
self.validate_leave_overlap()
self.validate_max_days()
def on_submit(self):
if self.doc.status != "Approved":
webnotes.msgprint("""Only Approved Leave Applications can be Submitted.""",
raise_exception=True)
def get_holidays(self): def get_holidays(self):
""" """
@ -40,9 +54,7 @@ class DocType:
return tot_hol and flt(tot_hol[0][0]) or 0 return tot_hol and flt(tot_hol[0][0]) or 0
def get_total_leave_days(self): def get_total_leave_days(self):
""" """Calculates total leave days based on input and holidays"""
Calculates total leave days based on input and holidays
"""
ret = {'total_leave_days' : 0.5} ret = {'total_leave_days' : 0.5}
if not self.doc.half_day: if not self.doc.half_day:
tot_days = date_diff(self.doc.to_date, self.doc.from_date) + 1 tot_days = date_diff(self.doc.to_date, self.doc.from_date) + 1
@ -53,24 +65,20 @@ class DocType:
return ret return ret
def validate_to_date(self): def validate_to_date(self):
if self.doc.from_date and self.doc.to_date and (getdate(self.doc.to_date) < getdate(self.doc.from_date)): if self.doc.from_date and self.doc.to_date and \
(getdate(self.doc.to_date) < getdate(self.doc.from_date)):
msgprint("To date cannot be before from date") msgprint("To date cannot be before from date")
raise Exception raise Exception
def is_lwp(self):
lwp = sql("select is_lwp from `tabLeave Type` where name = %s", self.doc.leave_type)
return lwp and cint(lwp[0][0]) or 0
def validate_balance_leaves(self): def validate_balance_leaves(self):
if self.doc.from_date and self.doc.to_date and not self.is_lwp(): if self.doc.from_date and self.doc.to_date and not is_lwp(self.doc.leave_type):
bal = get_leave_balance(self.doc.leave_type, self.doc.employee, self.doc.leave_balance = get_leave_balance(self.doc.employee,
self.doc.fiscal_year) self.doc.leave_type, self.doc.fiscal_year)["leave_balance"]
tot_leaves = self.get_total_leave_days() self.doc.total_leave_days = self.get_total_leave_days()["total_leave_days"]
bal, tot_leaves = bal, tot_leaves
webnotes.conn.set(self.doc, 'leave_balance', flt(bal['leave_balance'])) if self.doc.leave_balance - self.doc.total_leave_days < 0:
webnotes.conn.set(self.doc, 'total_leave_days', flt(tot_leaves['total_leave_days'])) msgprint("There is not enough leave balance for Leave Type: %s" % \
if flt(bal['leave_balance']) < flt(tot_leaves['total_leave_days']): (self.doc.leave_type,), raise_exception=1)
msgprint("Warning : There is not enough leave balance")
def validate_leave_overlap(self): def validate_leave_overlap(self):
for d in sql("""select name, leave_type, posting_date, from_date, to_date for d in sql("""select name, leave_type, posting_date, from_date, to_date
@ -90,36 +98,23 @@ class DocType:
msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days)) msgprint("Sorry ! You cannot apply for %s for more than %s days" % (self.doc.leave_type, max_days))
raise Exception raise Exception
def validate(self):
# if self.doc.leave_approver == self.doc.owner:
# webnotes.msgprint("""Self Approval is not allowed.""", raise_exception=1)
self.validate_to_date()
self.validate_balance_leaves()
self.validate_leave_overlap()
self.validate_max_days()
def on_submit(self):
if self.doc.status != "Approved":
webnotes.msgprint("""Only Approved Leave Applications can be Submitted.""",
raise_exception=True)
@webnotes.whitelist() @webnotes.whitelist()
def get_leave_balance(employee, leave_type, fiscal_year): def get_leave_balance(employee, leave_type, fiscal_year):
leave_all = webnotes.conn.sql("""select total_leaves_allocated leave_all = webnotes.conn.sql("""select total_leaves_allocated
from `tabLeave Allocation` where employee = %s and leave_type = %s from `tabLeave Allocation` where employee = %s and leave_type = %s
and fiscal_year = %s and docstatus = 1""", (employee, and fiscal_year = %s and docstatus = 1""", (employee,
leave_type, fiscal_year)) leave_type, fiscal_year), debug=1)
leave_all = leave_all and flt(leave_all[0][0]) or 0 leave_all = leave_all and flt(leave_all[0][0]) or 0
leave_app = webnotes.conn.sql("""select SUM(total_leave_days) leave_app = webnotes.conn.sql("""select SUM(total_leave_days)
from `tabLeave Application` from `tabLeave Application`
where employee = %s and leave_type = %s and fiscal_year = %s where employee = %s and leave_type = %s and fiscal_year = %s
and docstatus = 1""", (employee, leave_type, fiscal_year)) and docstatus = 1""", (employee, leave_type, fiscal_year), debug=1)
leave_app = leave_app and flt(leave_app[0][0]) or 0 leave_app = leave_app and flt(leave_app[0][0]) or 0
ret = {'leave_balance':leave_all - leave_app} ret = {'leave_balance': leave_all - leave_app}
return ret return ret
@webnotes.whitelist() @webnotes.whitelist()
@ -130,3 +125,7 @@ def get_approver_list():
webnotes.msgprint("No Leave Approvers. Please assign 'Leave Approver' Role to atleast one user.") webnotes.msgprint("No Leave Approvers. Please assign 'Leave Approver' Role to atleast one user.")
return roles return roles
def is_lwp(leave_type):
lwp = sql("select is_lwp from `tabLeave Type` where name = %s", leave_type)
return lwp and cint(lwp[0][0]) or 0

View File

@ -2,9 +2,9 @@
{ {
"owner": "Administrator", "owner": "Administrator",
"docstatus": 0, "docstatus": 0,
"creation": "2012-12-06 15:56:41", "creation": "2012-12-07 11:51:20",
"modified_by": "Administrator", "modified_by": "Administrator",
"modified": "2012-12-07 10:23:53" "modified": "2012-12-07 13:31:40"
}, },
{ {
"is_submittable": 1, "is_submittable": 1,
@ -43,7 +43,7 @@
"options": "Open\nApproved\nRejected", "options": "Open\nApproved\nRejected",
"fieldname": "status", "fieldname": "status",
"fieldtype": "Select", "fieldtype": "Select",
"permlevel": 3 "permlevel": 2
}, },
{ {
"description": "Leave can be approved by users with Role, \"Leave Approver\"", "description": "Leave can be approved by users with Role, \"Leave Approver\"",
@ -58,7 +58,7 @@
"search_index": 1, "search_index": 1,
"doctype": "DocField", "doctype": "DocField",
"label": "Leave Type", "label": "Leave Type",
"options": "link:Leave Type", "options": "\nCasual Leave",
"fieldname": "leave_type", "fieldname": "leave_type",
"fieldtype": "Select", "fieldtype": "Select",
"reqd": 1, "reqd": 1,
@ -105,17 +105,10 @@
}, },
{ {
"doctype": "DocField", "doctype": "DocField",
"label": "Leave Balance", "label": "Reason",
"fieldname": "leave_balance", "fieldname": "description",
"fieldtype": "Currency", "fieldtype": "Small Text",
"permlevel": 1 "permlevel": 0
},
{
"doctype": "DocField",
"label": "Total Leave Days",
"fieldname": "total_leave_days",
"fieldtype": "Currency",
"permlevel": 1
}, },
{ {
"search_index": 1, "search_index": 1,
@ -138,26 +131,28 @@
"in_filter": 1 "in_filter": 1
}, },
{ {
"no_copy": 1,
"doctype": "DocField", "doctype": "DocField",
"label": "Leave Balance Before Application",
"fieldname": "leave_balance",
"fieldtype": "Currency",
"permlevel": 1
},
{
"no_copy": 1,
"doctype": "DocField",
"label": "Total Leave Days",
"fieldname": "total_leave_days",
"fieldtype": "Currency",
"permlevel": 1
},
{
"doctype": "DocField",
"label": "More Info",
"fieldname": "sb10", "fieldname": "sb10",
"fieldtype": "Section Break", "fieldtype": "Section Break",
"permlevel": 0 "permlevel": 0
}, },
{
"doctype": "DocField",
"label": "Reason",
"width": "300px",
"fieldname": "description",
"fieldtype": "Text Editor",
"permlevel": 0
},
{
"doctype": "DocField",
"label": "HR Details",
"fieldname": "sb12",
"fieldtype": "Section Break",
"permlevel": 2
},
{ {
"default": "Today", "default": "Today",
"colour": "White:FFF", "colour": "White:FFF",
@ -173,7 +168,7 @@
"search_index": 0, "search_index": 0,
"doctype": "DocField", "doctype": "DocField",
"label": "Fiscal Year", "label": "Fiscal Year",
"options": "link:Fiscal Year", "options": "\n2008-2009\n2009-2010\n2010-2011\n2011-2012\n2012-2013\n2013-2014",
"fieldname": "fiscal_year", "fieldname": "fiscal_year",
"fieldtype": "Select", "fieldtype": "Select",
"reqd": 1, "reqd": 1,
@ -181,6 +176,7 @@
"in_filter": 1 "in_filter": 1
}, },
{ {
"print_hide": 1,
"doctype": "DocField", "doctype": "DocField",
"label": "Letter Head", "label": "Letter Head",
"options": "Letter Head", "options": "Letter Head",
@ -251,10 +247,5 @@
"role": "Leave Approver", "role": "Leave Approver",
"cancel": 0, "cancel": 0,
"permlevel": 2 "permlevel": 2
},
{
"doctype": "DocPerm",
"role": "All",
"permlevel": 3
} }
] ]