[minor] fixes to attendance tool and employee holiday attendance

This commit is contained in:
Anand Doshi 2016-01-29 16:57:10 +05:30
parent 07364f5ece
commit 6e33d91443
2 changed files with 140 additions and 125 deletions

View File

@ -1,25 +1,25 @@
frappe.ui.form.on("Employee Attendance Tool", { frappe.ui.form.on("Employee Attendance Tool", {
refresh:function(frm){ refresh: function(frm) {
frm.disable_save(); frm.disable_save();
}, },
onload:function(frm){ onload: function(frm) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
}, },
date:function(frm){ date: function(frm) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
}, },
department:function(frm){ department: function(frm) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
}, },
branch:function(frm){ branch: function(frm) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
}, },
company:function(frm){ company: function(frm) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
} }
@ -28,20 +28,20 @@ frappe.ui.form.on("Employee Attendance Tool", {
erpnext.employee_attendance_tool = { erpnext.employee_attendance_tool = {
load_employees: function(frm){ load_employees: function(frm) {
if(frm.doc.date){ if(frm.doc.date) {
frappe.call({ frappe.call({
method:"erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.get_employees", method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.get_employees",
args:{ args: {
date:frm.doc.date, date: frm.doc.date,
department:frm.doc.department, department: frm.doc.department,
branch:frm.doc.branch, branch: frm.doc.branch,
company:frm.doc.company company: frm.doc.company
}, },
callback:function(r){ callback: function(r) {
if(r.message['unmarked'].length > 0){ if(r.message['unmarked'].length > 0) {
unhide_field('unmarked_attendance_section') unhide_field('unmarked_attendance_section')
if(!frm.employee_area){ if(!frm.employee_area) {
frm.employee_area = $('<div>') frm.employee_area = $('<div>')
.appendTo(frm.fields_dict.employees_html.wrapper); .appendTo(frm.fields_dict.employees_html.wrapper);
} }
@ -51,14 +51,13 @@ erpnext.employee_attendance_tool = {
hide_field('unmarked_attendance_section') hide_field('unmarked_attendance_section')
} }
if(r.message['marked'].length > 0){ if(r.message['marked'].length > 0) {
unhide_field('marked_attendance_section') unhide_field('marked_attendance_section')
if(!frm.marked_employee_area){ if(!frm.marked_employee_area) {
frm.marked_employee_area = $('<div>') frm.marked_employee_area = $('<div>')
.appendTo(frm.fields_dict.marked_attendance_html.wrapper); .appendTo(frm.fields_dict.marked_attendance_html.wrapper);
} }
frm.MarkedEmployee = new erpnext.MarkedEmployee(frm, frm.marked_employee_area, r.message['marked']) frm.marked_employee = new erpnext.MarkedEmployee(frm, frm.marked_employee_area, r.message['marked'])
} }
else{ else{
hide_field('marked_attendance_section') hide_field('marked_attendance_section')
@ -79,18 +78,30 @@ erpnext.MarkedEmployee = Class.extend({
var me = this; var me = this;
$(this.wrapper).empty(); $(this.wrapper).empty();
var row;
$.each(employee, function(i, m) { $.each(employee, function(i, m) {
var attendance_icon = "'icon-check'" var attendance_icon = "icon-check";
var color_class = "";
if(m.status == "Absent") { if(m.status == "Absent") {
attendance_icon="'icon-check-empty'" attendance_icon = "icon-check-empty"
color_class = "text-muted";
} }
else if(m.status == "Half Day"){ else if(m.status == "Half Day") {
attendance_icon = "'icon-check-minus'" attendance_icon = "icon-check-minus"
} }
$(repl('<div class="col-sm-3">\
<label class="marked-employee-label"><span class=%(icon)s></span>\ if (i===0 || i % 4===0) {
row = $('<div class="row"></div>').appendTo(me.wrapper);
}
$(repl('<div class="col-sm-3 %(color_class)s">\
<label class="marked-employee-label"><span class="%(icon)s"></span>\
%(employee)s</label>\ %(employee)s</label>\
</div>', {employee: m.employee_name, icon: attendance_icon})).appendTo(me.wrapper); </div>', {
employee: m.employee_name,
icon: attendance_icon,
color_class: color_class
})).appendTo(row);
}); });
} }
}); });
@ -104,7 +115,7 @@ erpnext.EmployeeSelector = Class.extend({
}, },
make: function(frm, employee) { make: function(frm, employee) {
var me = this; var me = this;
$(this.wrapper).empty(); $(this.wrapper).empty();
var employee_toolbar = $('<div class="col-sm-12 top-toolbar">\ var employee_toolbar = $('<div class="col-sm-12 top-toolbar">\
<button class="btn btn-default btn-add btn-xs"></button>\ <button class="btn btn-default btn-add btn-xs"></button>\
@ -112,121 +123,121 @@ erpnext.EmployeeSelector = Class.extend({
</div>').appendTo($(this.wrapper)); </div>').appendTo($(this.wrapper));
var mark_employee_toolbar = $('<div class="col-sm-12 bottom-toolbar">\ var mark_employee_toolbar = $('<div class="col-sm-12 bottom-toolbar">\
<button class="btn btn-default btn-primary btn-mark-present btn-xs"></button>\ <button class="btn btn-primary btn-mark-present btn-xs"></button>\
<button class="btn btn-default btn-primary btn-mark-absent btn-xs"></button>\ <button class="btn btn-default btn-mark-absent btn-xs"></button>\
<button class="btn btn-default btn-primary btn-mark-half-day btn-xs"></button></div>') <button class="btn btn-default btn-mark-half-day btn-xs"></button></div>')
employee_toolbar.find(".btn-add") employee_toolbar.find(".btn-add")
.html(__('Check all')) .html(__('Check all'))
.on("click", function() { .on("click", function() {
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
if(!$(check).is(":checked")) { if(!$(check).is(":checked")) {
check.checked = true; check.checked = true;
} }
});
}); });
});
employee_toolbar.find(".btn-remove") employee_toolbar.find(".btn-remove")
.html(__('Uncheck all')) .html(__('Uncheck all'))
.on("click", function() { .on("click", function() {
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
if($(check).is(":checked")) { if($(check).is(":checked")) {
check.checked = false; check.checked = false;
} }
});
}); });
});
mark_employee_toolbar.find(".btn-mark-present") mark_employee_toolbar.find(".btn-mark-present")
.html(__('Mark Present')) .html(__('Mark Present'))
.on("click", function() { .on("click", function() {
var employee_present = []; var employee_present = [];
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
if($(check).is(":checked")) { if($(check).is(":checked")) {
employee_present.push(employee[i]); employee_present.push(employee[i]);
} }
}); });
frappe.call({ frappe.call({
method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
args:{ args:{
"employee_list":employee_present, "employee_list":employee_present,
"status":"Present", "status":"Present",
"date":frm.doc.date, "date":frm.doc.date,
"company":frm.doc.company "company":frm.doc.company
}, },
callback: function(r) { callback: function(r) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
} }
});
}); });
});
mark_employee_toolbar.find(".btn-mark-absent") mark_employee_toolbar.find(".btn-mark-absent")
.html(__('Mark Absent')) .html(__('Mark Absent'))
.on("click", function() { .on("click", function() {
var employee_absent = []; var employee_absent = [];
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
if($(check).is(":checked")) { if($(check).is(":checked")) {
employee_absent.push(employee[i]); employee_absent.push(employee[i]);
} }
}); });
frappe.call({ frappe.call({
method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance", method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
args:{ args:{
"employee_list":employee_absent, "employee_list":employee_absent,
"status":"Absent", "status":"Absent",
"date":frm.doc.date, "date":frm.doc.date,
"company":frm.doc.company "company":frm.doc.company
}, },
callback: function(r) { callback: function(r) {
erpnext.employee_attendance_tool.load_employees(frm); erpnext.employee_attendance_tool.load_employees(frm);
} }
});
}); });
});
mark_employee_toolbar.find(".btn-mark-half-day") mark_employee_toolbar.find(".btn-mark-half-day")
.html(__('Mark Half Day')) .html(__('Mark Half Day'))
.on("click", function() { .on("click", function() {
var employee_half_day = []; var employee_half_day = [];
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
if($(check).is(":checked")) { if($(check).is(":checked")) {
employee_half_day.push(employee[i]); employee_half_day.push(employee[i]);
} }
});
frappe.call({
method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
args:{
"employee_list":employee_half_day,
"status":"Half Day",
"date":frm.doc.date,
"company":frm.doc.company
},
callback: function(r) {
erpnext.employee_attendance_tool.load_employees(frm);
}
});
}); });
frappe.call({
method: "erpnext.hr.doctype.employee_attendance_tool.employee_attendance_tool.mark_employee_attendance",
args:{
"employee_list":employee_half_day,
"status":"Half Day",
"date":frm.doc.date,
"company":frm.doc.company
},
callback: function(r) {
erpnext.employee_attendance_tool.load_employees(frm);
} var row;
});
});
$.each(employee, function(i, m) { $.each(employee, function(i, m) {
if (i===0 || (i % 4) === 0) {
row = $('<div class="row"></div>').appendTo(me.wrapper);
}
$(repl('<div class="col-sm-3 unmarked-employee-checkbox">\ $(repl('<div class="col-sm-3 unmarked-employee-checkbox">\
<div class="checkbox">\ <div class="checkbox">\
<label><input type="checkbox" class="employee-check" employee="%(employee)s"/>\ <label><input type="checkbox" class="employee-check" employee="%(employee)s"/>\
%(employee)s</label>\ %(employee)s</label>\
</div></div>', {employee: m.employee_name})).appendTo(me.wrapper); </div></div>', {employee: m.employee_name})).appendTo(row);
}); });
mark_employee_toolbar.appendTo($(this.wrapper)); mark_employee_toolbar.appendTo($(this.wrapper));
} }
}); });

View File

@ -16,11 +16,12 @@ def execute(filters=None):
def get_columns(): def get_columns():
return [ return [
_("Employee") + ":Link/Employee:120", _("Name") + ":Data:200", _("Date")+ ":Date:100", _("Employee") + ":Link/Employee:120",
_("Status") + ":Data:70",_("Holiday") + ":Data:200" _("Name") + ":Data:200",
_("Date")+ ":Date:100",
_("Status") + ":Data:70",
_("Holiday") + ":Data:200"
] ]
@ -30,14 +31,17 @@ def get_employees():
holidays_list = [] holidays_list = []
for holiday in holidays: for holiday in holidays:
holidays_list.append("'" + holiday.holiday_date.strftime('%Y-%m-%d') + "'") holidays_list.append(holiday.holiday_date)
holiday_names[holiday.holiday_date] = holiday.description holiday_names[holiday.holiday_date] = holiday.description
employee_list = frappe.db.sql( employee_list = frappe.db.sql("""select
"select employee, employee_name, att_date, status from tabAttendance where att_date in (" employee, employee_name, att_date, status
+ ', '.join(holidays_list) + ")", from tabAttendance
as_list=True) where
att_date in ({0})""".format(', '.join(["%s"]*len(holidays_list))),
holidays_list, as_list=True)
for employee_data in employee_list: for employee_data in employee_list:
employee_data.append(holiday_names[employee_data[2]]) employee_data.append(holiday_names[employee_data[2]])
return employee_list return employee_list