// ERPNext - web based ERP (http://erpnext.com) // Copyright (C) 2012 Web Notes Technologies Pvt Ltd // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . wn.provide('erpnext.todo'); erpnext.todo.refresh = function() { wn.call({ method: 'utilities.page.todo.todo.get', callback: function(r,rt) { $('#todo-list').empty(); if(r.message) { for(var i in r.message) { new erpnext.todo.ToDoItem(r.message[i]); } } else { $('#todo-list').html('
Nothing to do :)
'); } } }); $('#add-todo').click(function() { erpnext.todo.make_dialog({ date:get_today(), priority:'Medium', checked:0, description:''}); }) } erpnext.todo.ToDoItem = Class.extend({ init: function(todo) { label_map = { 'High': 'label-important', 'Medium': 'label-info', 'Low':'' } todo.labelclass = label_map[todo.priority]; todo.userdate = dateutil.str_to_user(todo.date); if(todo.reference_name && todo.reference_type) { todo.link = repl('\ %(reference_name)s', todo); } else if(todo.reference_type) { todo.link = repl('\ %(reference_type)s', todo); } else { todo.link = ''; } $('#todo-list').append(repl('
\ \ %(priority)s\ %(userdate)s\ %(description)s\ →\ %(link)s\ ×\
', todo)); $todo = $('div.todoitem:last'); if(todo.checked) { $todo.find('.description').css('text-decoration', 'line-through'); } if(!todo.reference_type) $todo.find('.ref_link').toggle(false); $todo.find('.description') .data('todo', todo) .click(function() { erpnext.todo.make_dialog($(this).data('todo')); return false; }); $todo.find('.close') .data('name', todo.name) .click(function() { $(this).parent().css('opacity', 0.5); wn.call({ method:'utilities.page.todo.todo.delete', args: {name: $(this).data('name')}, callback: function() { erpnext.todo.refresh(); } }); return false; }) } }); erpnext.todo.make_dialog = function(det) { if(!erpnext.todo.dialog) { var dialog = new wn.widgets.Dialog(); dialog.make({ width: 480, title: 'To Do', fields: [ {fieldtype:'Date', fieldname:'date', label:'Event Date', reqd:1}, {fieldtype:'Text', fieldname:'description', label:'Description', reqd:1}, {fieldtype:'Check', fieldname:'checked', label:'Completed'}, {fieldtype:'Select', fieldname:'priority', label:'Priority', reqd:1, 'options':['Medium','High','Low'].join('\n')}, {fieldtype:'Button', fieldname:'save', label:'Save'} ] }); dialog.fields_dict.save.input.onclick = function() { erpnext.todo.save(this); } erpnext.todo.dialog = dialog; } if(det) { erpnext.todo.dialog.set_values({ date: det.date, priority: det.priority, description: det.description, checked: det.checked }); erpnext.todo.dialog.det = det; } erpnext.todo.dialog.show(); } erpnext.todo.save = function(btn) { var d = erpnext.todo.dialog; var det = d.get_values(); if(!det) { return; } det.name = d.det.name || ''; wn.call({ method:'utilities.page.todo.todo.edit', args: det, btn: btn, callback: function() { erpnext.todo.dialog.hide(); erpnext.todo.refresh(); } }); } wn.pages.todo.onload = function() { // load todos erpnext.todo.refresh(); }