added new calendar and renamed holiday block list
diff --git a/utilities/page/calendar/calendar.css b/utilities/page/calendar/calendar.css
deleted file mode 100644
index dd1b6de..0000000
--- a/utilities/page/calendar/calendar.css
+++ /dev/null
@@ -1,165 +0,0 @@
-/**** CALENDAR ****/
-
-.cal_event {
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
- margin-bottom: 3px;
-}
-
-div.cal_body {
- margin: 16px;
- background-color: #DDD;
- position: relative;
- border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- padding: 16px;
- -moz-box-shadow: 1px 1px 8px #555;
- -webkit-box-shadow: 1px 1px 8px #555;
- box-shadow: 1px 1px 8px #555;
-}
-
-div.cal_body h4 {
- text-align: center;
-}
-
-div.cal_head {
- margin: 16px;
- margin-bottom: 0px;
-}
-div.cal_head div {
- font-size: 18px;
- color: #666;
- padding-top: 8px;
-}
-
-div.cal_toolbar {
- width: 80%;
-}
-
-div.cal_toolbar .btn {
- text-align: center;
- margin: 0px;
- margin-left: -1px;
-}
-
-div.cal_view_body {
-}
-
-div.cal_view_body_plain {
- margin: 16px;
-}
-
-div.cal_month_head {
- margin: 8px 0px 8px 0px;
- height: 30px;
-}
-
-div.cal_month_head .btn {
- float: right;
-}
-
-span.cal_view_title {
- display: inline-block;
- font-size: 20px;
-}
-
-div.cal_month_body {
-}
-
-.cal_month_headtable {
- table-layout:fixed;
- width: 100%;
-}
-
-.cal_month_name {
- width: 100%;
- color: #888;
- font-size: 14px;
- font-weight: bold;
- text-align: center;
-}
-
-.cal_month_headtable tr td{
- font-size: 12px;
- font-weight: bold;
- text-align: center;
- padding: 4px;
-}
-
-table.cal_month_table {
- border-collapse: collapse;
- table-layout:fixed;
- width: 100%;
-}
-
-table.cal_month_table td {
- width: 14.29%;
- height: 20%;
- /*overflow:hidden;*/
- padding:0px;
-}
-
-div.cal_month_date {
- width:100%;
- font-size: 10px;
- /*background-color: #EEF;*/
-}
-
-div.cal_month_date_holiday {
- /*background-color: #FFF;*/
-}
-
-div.cal_month_unit {
- width:100%;
- min-height: 100px;
- overflow:hidden;
- cursor:pointer;
- /*background-color:#FFF;*/
-}
-
-div.cal_vu_disabled {
- background-color:#FFF;
- cursor:default;
-}
-
-table.cal_day_table {
- border-collapse: collapse;
- width: 100%;
-}
-
-table.cal_day_table td {
-}
-
-div.cal_day_body {
- width: 100%;
- overflow-x: hidden;
- border-top: 1px solid #AAA;
-}
-
-div.cal_day_unit{
- width:100%;
- cursor:pointer;
-}
-
-table.cal_week_table {
- border-collapse: collapse;
- table-layout: fixed;
- width: 100%;
-}
-
-table.cal_week_table td {
- width: 12.5%;
-}
-
-div.cal_week_body {
- width: 100%;
- overflow-x: hidden;
- border-top: 1px solid #888;
-}
-
-div.cal_week_unit{
- width: 100%;
- cursor:pointer;
-}
diff --git a/utilities/page/calendar/calendar.html b/utilities/page/calendar/calendar.html
deleted file mode 100644
index 0f8cc0e..0000000
--- a/utilities/page/calendar/calendar.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<div class="cal_body">
- <a class="close" onclick="window.history.back();">×</a>
- <div class="cal_toolbar btn-group">
- <button class="btn btn-small" onclick="erpnext.calendar.add_event()">
- <i class="icon-plus"></i> Add Event
- </button>
- <button class="btn btn-small" onclick="erpnext.calendar.refresh('Day')">
- Day View
- </button>
- <button class="btn btn-small" onclick="erpnext.calendar.refresh('Week')">
- Week View
- </button>
- <button class="btn btn-small" onclick="erpnext.calendar.refresh('Month')">
- Month View
- </button>
- <button class="btn btn-small" onclick="erpnext.calendar.refresh(null, true)">
- <i class="icon-refresh"></i> Refresh
- </button>
- </div>
- <div class="cal_month_head">
- <span class="cal_view_title"></span>
- <button class="btn btn-small" onclick="erpnext.calendar.cur_view.next()">
- <i class="icon-arrow-right"></i>
- </button>
- <button class="btn btn-small" onclick="erpnext.calendar.cur_view.prev()">
- <i class="icon-arrow-left"></i>
- </button>
- </div>
-</div>
\ No newline at end of file
diff --git a/utilities/page/calendar/calendar.js b/utilities/page/calendar/calendar.js
index 5e59f1f..cac5ec8 100644
--- a/utilities/page/calendar/calendar.js
+++ b/utilities/page/calendar/calendar.js
@@ -21,690 +21,86 @@
//
pscript.onload_calendar = function(wrapper) {
- if(!erpnext.calendar) {
- erpnext.calendar = new Calendar();
- erpnext.calendar.init(wrapper);
-
- var me = this;
- $(document).bind('rename', function(event, dt, old_name, new_name) {
- erpnext.calendar.rename_notify(dt, old_name, new_name)
- });
- }
-}
-
-///// CALENDAR
-
-Calendar=function() {
- this.views=[];
- this.events = {};
- this.events_by_name = {};
- this.weekdays = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
-}
-
-Calendar.prototype.init=function (parent) {
-
- this.wrapper = parent;
- this.body = $('.cal_body').get(0);
-
- //this.make_head_buttons();
- //this.make_header();
- this.view_title = $('.cal_view_title').get(0);
-
- this.todays_date = new Date();
- this.selected_date = this.todays_date;
- this.selected_hour = 8;
-
- // Create views
- this.views['Month'] = new Calendar.MonthView(this);
- this.views['Week'] = new Calendar.WeekView(this);
- this.views['Day'] = new Calendar.DayView(this);
-
- // Month view as initial
- this.cur_view = this.views['Month'];
- this.views['Month'].show();
+ wn.ui.make_app_page({
+ parent: wrapper,
+ single_column: true,
+ title: 'Calendar'
+ });
+ wn.require('lib/js/lib/fullcalendar/fullcalendar.css');
+ wn.require('lib/js/lib/fullcalendar/fullcalendar.js');
}
-Calendar.prototype.rename_notify = function(dt, old_name, new_name) {
- // calendar
- if(dt = 'Event'){
- if(this.events_by_name[old_name]) {
- delete this.events_by_name[old_name];
- }
- }
-}
-
-//------------------------------------------------------
-
-Calendar.prototype.show_event = function(ev, cal_ev) {
- var me = this;
- if(!this.event_dialog) {
- var d = new Dialog(400, 400, 'Calendar Event');
- d.make_body([
- ['HTML','Heading']
- ,['Text','Description']
- ,['HTML', 'Ref Link']
- ,['Check', 'Public Event']
- ,['Check', 'Cancelled Event']
- ,['HTML', 'Event Link']
- ,['Button', 'Save']
- ])
-
- // show the event when the dialog opens
- d.onshow = function() {
- // heading
- var c = me.selected_date;
-
- this.widgets['Heading'].innerHTML =
- '<div style="text-align: center; padding:4px; font-size: 14px">'
- + erpnext.calendar.weekdays[c.getDay()] + ', ' + c.getDate() + ' ' + month_list_full[c.getMonth()] + ' ' + c.getFullYear()
- + ' - <b>'+this.ev.event_hour+'</b></div>';
-
- // set
- this.widgets['Description'].value = cstr(this.ev.description);
-
- this.widgets['Public Event'].checked = false;
- this.widgets['Cancelled Event'].checked = false;
-
- if(this.ev.event_type=='Public')
- this.widgets['Public Event'].checked = true;
-
- this.widgets['Event Link'].innerHTML = '';
- this.widgets['Ref Link'].innerHTML = '';
-
- if(this.ev.ref_type) {
- $(repl('<table style="width: 100%;"><tr>\
- <td style="width: 30%"><b>Reference:</b></td>\
- <td><a href="#Form/%(ref_type)s/%(ref_name)s" \
- onclick="cur_dialog.hide()">%(ref_type)s: %(ref_name)s</a></td>\
- </tr></table>', this.ev))
- .appendTo(this.widgets['Ref Link'])
- }
-
- $(repl('<a href="#Form/Event/%(name)s" \
- onclick="cur_dialog.hide()">More Options</a>', this.ev))
- .appendTo(this.widgets['Event Link'])
- }
-
- // event save
- d.widgets['Save'].onclick = function() {
- var d = me.event_dialog;
-
- // save values
- d.ev.description = d.widgets['Description'].value;
- if(d.widgets['Cancelled Event'].checked)
- d.ev.event_type='Cancel';
- else if(d.widgets['Public Event'].checked)
- d.ev.event_type='Public';
-
- me.event_dialog.hide();
-
- // if new event
- me.save_event(d.ev);
- }
- this.event_dialog = d;
- }
- this.event_dialog.ev = ev;
- this.event_dialog.cal_ev = cal_ev ? cal_ev : null;
- this.event_dialog.show();
-
-}
-
-Calendar.prototype.save_event = function(doc) {
- var me = this;
- var doclist = new wn.model.DocList("Event", doc.name);
- doclist.save("Save", function(r) {
- var doc = locals['Event'][r.docname];
- var cal = erpnext.calendar;
- cal.cur_view.refresh();
-
- // if cancelled, hide
- if(doc.event_type=='Cancel') {
- $(cal.events_by_name[doc.name].body).toggle(false);
- }
- })
-}
-
-//------------------------------------------------------
-
-Calendar.prototype.add_event = function() {
-
- var ev = wn.model.make_new_doc_and_get_name('Event');
- ev = locals['Event'][ev];
-
- ev.event_date = dateutil.obj_to_str(this.selected_date);
- ev.event_hour = this.selected_hour+':00:00';
- ev.event_type = 'Private';
-
- this.show_event(ev);
-}
-//------------------------------------------------------
-
-Calendar.prototype.get_month_events = function(call_back) {
- // ret fn
- var me = this;
- var f = function(r, rt) {
- if(me.cur_view) me.cur_view.refresh();
- if(call_back)call_back();
- }
-
- //load
- var y=this.selected_date.getFullYear(); var m = this.selected_date.getMonth();
- if(!this.events[y] || !this.events[y][m]) {
- $c('webnotes.widgets.event.load_month_events', args = {
- 'month': m + 1,
- 'year' : y},
- f);
- }
-}
-//------------------------------------------------------
-
-Calendar.prototype.get_daily_event_list=function(day) {
- var el = [];
- var d = day.getDate(); var m = day.getMonth(); var y = day.getFullYear()
- if(this.events[y] && this.events[y][m] &&
- this.events[y][m][d]) {
- var l = this.events[y][m][d]
- for(var i in l) {
- for(var j in l[i]) el[el.length] = l[i][j];
- }
- return el;
- }
- else return [];
-}
-//------------------------------------------------------
-
-Calendar.prototype.set_event = function(ev) {
- // don't duplicate
- if(this.events_by_name[ev.name]) {
- return this.events_by_name[ev.name];
- }
-
- var dt = dateutil.str_to_obj(ev.event_date);
- var m = dt.getMonth();
- var d = dt.getDate();
- var y = dt.getFullYear();
-
- if(!this.events[y]) this.events[y] = [];
- if(!this.events[y][m]) this.events[y][m] = [];
- if(!this.events[y][m][d]) this.events[y][m][d] = [];
- if(!this.events[y][m][d][cint(ev.event_hour)])
- this.events[y][m][d][cint(ev.event_hour)] = [];
-
- var cal_ev = new Calendar.CalEvent(ev, this);
- this.events[y][m][d][cint(ev.event_hour)].push(cal_ev);
- this.events_by_name[ev.name] = cal_ev;
-
- return cal_ev;
-}
-
-//------------------------------------------------------
-
-Calendar.prototype.clear = function() {
- this.events = {};
- this.events_by_name = {};
- locals.Event = {};
-}
-
-Calendar.prototype.refresh = function(viewtype, clear_events){//Sets the viewtype of the Calendar and Calls the View class based on the viewtype
- if(viewtype)
- this.viewtype = viewtype;
-
- if(clear_events)
- this.clear();
-
- // switch view if reqd
- if(this.cur_view.viewtype!=this.viewtype) {
- this.cur_view.hide();
- this.cur_view = this.views[this.viewtype];
- this.cur_view.in_home = false; // for home page
- this.cur_view.show();
- }
- else{
- this.cur_view.get_events();
- this.cur_view.refresh(this);
- }
-}
-
-//------------------------------------------------------
-
-Calendar.CalEvent= function(doc, cal) {
- var me = this;
- me.doc = doc;
-
- this.body = $("<div class='label cal_event'></div>")
- .html(doc.description)
- .attr("title", doc.description)
- .css({"cursor":"pointer"})
- .attr("data-event", doc.name)
- .click(function() {
- var doc = locals["Event"][$(this).attr("data-event")];
- cal.show_event(doc, me);
- })
-
- this.show = function(vu) {
- me.body
- .html(me.doc.description)
- .css({"width": ($(vu.body).width()-10)})
- .appendTo(vu.body)
- .removeClass("label-success").removeClass("label-info")
- .addClass(me.doc.event_type=="Public" ? "label-success" : "label-info")
- }
-}
-
-
-// ----------
-
-Calendar.View =function() { this.daystep = 0; this.monthstep = 0; }
-Calendar.View.prototype.init=function(cal) {
- this.cal = cal;
- this.body = $a(cal.body, 'div', 'cal_view_body');
- this.body.style.display = 'none';
- this.create_table();
-}
-
-
-Calendar.View.prototype.show=function() {
- this.body.style.display = 'block';
- this.get_events(); this.refresh();
-}
-
-Calendar.View.prototype.hide=function() {
- this.body.style.display = 'none';
-}
-
-Calendar.View.prototype.next = function() {
- var s = this.cal.selected_date;
- this.cal.selected_date = new Date(s.getFullYear(), s.getMonth() + this.monthstep, s.getDate() + this.daystep);
- this.get_events(); this.refresh();
-}
-
-Calendar.View.prototype.prev = function() {
- var s = this.cal.selected_date;
- this.cal.selected_date = new Date(s.getFullYear(), s.getMonth() - this.monthstep, s.getDate() - this.daystep);
- this.get_events(); this.refresh();
-}
-
-Calendar.View.prototype.get_events = function() {
- this.cal.get_month_events();
-}
-Calendar.View.prototype.add_unit = function(vu) {
- this.viewunits[this.viewunits.length] = vu;
-}
-Calendar.View.prototype.refresh_units = function() {
- // load the events
- if(locals['Event']) {
- for(var name in locals['Event']) {
- this.cal.set_event(locals['Event'][name]);
- }
- }
-
-
- for(var r in this.table.rows) {
- for(var c in this.table.rows[r].cells) {
- if(this.table.rows[r].cells[c].viewunit) {
- this.table.rows[r].cells[c].viewunit.refresh();
+pscript.update_event = function(event) {
+ wn.model.remove_from_locals("Event", event.id);
+ wn.call({
+ module: "utilities",
+ page: "calendar",
+ method: "update_event",
+ args: {
+ "start": wn.datetime.get_datetime_as_string(event.start),
+ "end": wn.datetime.get_datetime_as_string(event.end),
+ "name": event.id
+ },
+ callback: function(r) {
+ if(r.exc) {
+ show_alert("Unable to update event.")
}
}
- }
+ });
}
-// ................. Month View..........................
-Calendar.MonthView = function(cal) { this.init(cal); this.monthstep = 1; this.rows = 5; this.cells = 7; }
-Calendar.MonthView.prototype=new Calendar.View();
-Calendar.MonthView.prototype.create_table = function() {
- // create head
- this.head_wrapper = $a(this.body, 'div', 'cal_month_head');
-
- // create headers
- this.headtable = $a(this.head_wrapper, 'table', 'cal_month_headtable');
- var r = this.headtable.insertRow(0);
- for(var j=0;j<7;j++) {
- var cell = r.insertCell(j);
- cell.innerHTML = erpnext.calendar.weekdays[j];
- $w(cell, (100 / 7) + '%');
- }
-
- this.main = $a(this.body, 'div', 'cal_month_body');
- this.table = $a(this.main, 'table', 'cal_month_table');
- var me = this;
-
- // create body
- for(var i=0;i<5;i++) {
- var r = this.table.insertRow(i);
- for(var j=0;j<7;j++) {
- var cell = r.insertCell(j);
- cell.viewunit = new Calendar.MonthViewUnit(cell);
- }
- }
-}
-
-Calendar.MonthView.prototype.refresh = function() {
- var c =this.cal.selected_date;
- var me=this;
- // fill other days
-
- var cur_row = 0;
-
- var cur_month = c.getMonth();
- var cur_year = c.getFullYear();
-
- var d = new Date(cur_year, cur_month, 1);
- var day = 1 - d.getDay();
-
-
- // set day headers
- var d = new Date(cur_year, cur_month, day);
-
- this.cal.view_title.innerHTML = month_list_full[cur_month] + ' ' + cur_year;
-
- for(var i=0;i<6;i++) {
- if((i<5) || cur_month==d.getMonth()) { // if this month
- for(var j=0;j<7;j++) {
- var cell = this.table.rows[cur_row].cells[j];
-
- if((i<5) || cur_month==d.getMonth()) { // if this month
- cell.viewunit.day = d;
- cell.viewunit.hour = 8;
- if(cur_month == d.getMonth()) {
- cell.viewunit.is_disabled = false;
-
- if(same_day(this.cal.todays_date, d))
- cell.viewunit.is_today = true;
- else
- cell.viewunit.is_today = false;
-
- } else {
- cell.viewunit.is_disabled = true;
+pscript.onshow_calendar = function(wrapper) {
+ if(!wrapper.setup_complete) {
+ $('<div id="fullcalendar">').appendTo($(wrapper).find('.layout-main')).fullCalendar({
+ header: {
+ left: 'prev,next today',
+ center: 'title',
+ right: 'month,agendaWeek,agendaDay'
+ },
+ editable: true,
+ events: function(start, end, callback) {
+ wn.call({
+ method: 'utilities.page.calendar.calendar.get_events',
+ type: "GET",
+ args: {
+ start: dateutil.obj_to_str(start),
+ end: dateutil.obj_to_str(end)
+ },
+ callback: function(r) {
+ var events = r.message;
+ $.each(events, function(i, d) {
+ d.editable = d.owner==user;
+ d.allDay = false;
+ });
+ callback(events);
}
- }
- // new date
- day++;
- d = new Date(cur_year, cur_month, day);
- }
- }
- cur_row++;
- if(cur_row == 5) {cur_row = 0;} // back to top
- }
- this.refresh_units();
-
-}
- // ................. Daily View..........................
-Calendar.DayView=function(cal){ this.init(cal); this.daystep = 1; }
-Calendar.DayView.prototype=new Calendar.View();
-Calendar.DayView.prototype.create_table = function() {
+ })
+ },
+ dayClick: function(date, allDay, jsEvent, view) {
+ // if current date, show popup to create a new event
+ var ev = wn.model.create('Event')
+ ev.doc.set('start', date);
+ ev.doc.set('end', new Date(date));
+ ev.doc.set('all_day', 1);
- // create body
- this.main = $a(this.body, 'div', 'cal_day_body');
- this.table = $a(this.main, 'table', 'cal_day_table');
- var me = this;
-
- for(var i=0;i<24;i++) {
- var r = this.table.insertRow(i);
- for(var j=0;j<2;j++) {
- var cell = r.insertCell(j);
- if(j==0) {
- cell.innerHTML = i+':00:00';
- $w(cell, '10%');
- } else {
- cell.viewunit = new Calendar.DayViewUnit(cell);
- cell.viewunit.hour = i;
- $w(cell, '90%');
- if((i>=7)&&(i<=20)) {
- cell.viewunit.is_daytime = true;
- }
+ },
+ eventClick: function(calEvent, jsEvent, view) {
+ // edit event description or delete
+ wn.set_route("Form", "Event", calEvent.id);
+ },
+ eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
+ pscript.update_event(event);
+ },
+ eventResize: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
+ pscript.update_event(event);
}
- }
- }
- }
+ });
-Calendar.DayView.prototype.refresh = function() {
- var c =this.cal.selected_date;
-
- // fill other days
- var me=this;
-
- this.cal.view_title.innerHTML = erpnext.calendar.weekdays[c.getDay()] + ', '
- + c.getDate() + ' ' + month_list_full[c.getMonth()] + ' ' + c.getFullYear();
-
- // headers
- var d = c;
-
- for(var i=0;i<24;i++) {
- var cell = this.table.rows[i].cells[1];
- if(same_day(this.cal.todays_date, d)) cell.viewunit.is_today = true;
- else cell.viewunit.is_today = false;
- cell.viewunit.day = d;
- }
- this.refresh_units();
-}
-
-// ................. Weekly View..........................
-Calendar.WeekView=function(cal) { this.init(cal); this.daystep = 7; }
-Calendar.WeekView.prototype=new Calendar.View();
-Calendar.WeekView.prototype.create_table = function() {
-
- // create head
- this.head_wrapper = $a(this.body, 'div', 'cal_month_head');
-
- // day headers
- this.headtable = $a(this.head_wrapper, 'table', 'cal_month_headtable');
- var r = this.headtable.insertRow(0);
- for(var j=0;j<8;j++) {
- var cell = r.insertCell(j);
- }
-
- // hour header
-
- // create body
- this.main = $a(this.body, 'div', 'cal_week_body');
- this.table = $a(this.main, 'table', 'cal_week_table');
- var me = this;
-
- for(var i=0;i<24;i++) {
- var r = this.table.insertRow(i);
- for(var j=0;j<8;j++) {
- var cell = r.insertCell(j);
- if(j==0) {
- cell.innerHTML = i+':00:00';
- $w(cell, '10%');
- } else {
- cell.viewunit = new Calendar.WeekViewUnit(cell);
- cell.viewunit.hour = i;
- if((i>=7)&&(i<=20)) {
- cell.viewunit.is_daytime = true;
- }
- }
- }
- }
-}
-
-Calendar.WeekView.prototype.refresh = function() {
- var c =this.cal.selected_date;
- // fill other days
- var me=this;
-
- this.cal.view_title.innerHTML = month_list_full[c.getMonth()] + ' ' + c.getFullYear();
-
- // headers
- var d = new Date(c.getFullYear(), c.getMonth(), c.getDate() - c.getDay());
-
- for (var k=1;k<8;k++) {
- this.headtable.rows[0].cells[k].innerHTML = erpnext.calendar.weekdays[d.getDay()] + ' ' + d.getDate();
-
- for(var i=0;i<24;i++) {
- var cell = this.table.rows[i].cells[k];
- if(same_day(this.cal.todays_date, d))
- cell.viewunit.is_today = true;
- else cell.viewunit.is_today = false;
-
- cell.viewunit.day = d;
- //cell.viewunit.refresh();
- }
- d=new Date(d.getFullYear(),d.getMonth(),d.getDate() + 1);
-
- }
-
- this.refresh_units();
-}
-
-//------------------------------------------------------.
-
-Calendar.ViewUnit = function() {}
-Calendar.ViewUnit.prototype.init = function(parent) {
- parent.style.border = "1px solid #CCC" ;
- this.body = $a(parent, 'div', this.default_class);
- this.parent = parent;
-
- var me = this;
- this.body.onclick = function() {
- erpnext.calendar.selected_date = me.day;
- erpnext.calendar.selected_hour = me.hour;
-
- if(erpnext.calendar.cur_vu && erpnext.calendar.cur_vu!=me){
- erpnext.calendar.cur_vu.deselect();
- me.select();
- erpnext.calendar.cur_vu = me;
- }
- }
- this.body.ondblclick = function() {
- erpnext.calendar.add_event();
+ wrapper.setup_complete = true;
+ } else {
+ $("#fullcalendar").fullCalendar("refetchEvents");
}
}
-Calendar.ViewUnit.prototype.set_header=function(v) {
- this.header.innerHTML = v;
-}
-
-Calendar.ViewUnit.prototype.set_today = function() {
- this.is_today = true;
- this.set_display();
-}
-
-Calendar.ViewUnit.prototype.clear = function() {
- if(this.header)this.header.innerHTML = '';
-
- // clear body
- while(this.body.childNodes.length)
- this.body.removeChild(this.body.childNodes[0]);
-}
-
-Calendar.ViewUnit.prototype.set_display = function() {
- var cn = '#FFF';
-
- // colors
- var col_tod_sel = '#EEE';
- var col_tod = '#FFF';
- var col_sel = '#EEF';
-
- if(this.is_today) {
- if(this.selected) cn = col_tod_sel;
- else cn = col_tod;
- } else
- if(this.selected) cn = col_sel;
-
- if(this.header) {
- if(this.is_disabled) {
- this.body.className = this.default_class + ' cal_vu_disabled';
- this.header.style.color = '#BBB';
- } else {
- this.body.className = this.default_class;
- this.header.style.color = '#000';
- }
-
- if(this.day&&this.day.getDay()==0)
- this.header.style.backgroundColor = '#FEE';
- else
- this.header.style.backgroundColor = '';
- }
- this.parent.style.backgroundColor = cn;
-}
-
-Calendar.ViewUnit.prototype.is_selected = function() {
- return (same_day(this.day, erpnext.calendar.selected_date)
- && this.hour==erpnext.calendar.selected_hour)
-}
-
-Calendar.ViewUnit.prototype.get_event_list = function() {
- var y = this.day.getFullYear();
- var m = this.day.getMonth();
- var d = this.day.getDate();
- if(erpnext.calendar.events[y] && erpnext.calendar.events[y][m] &&
- erpnext.calendar.events[y][m][d] &&
- erpnext.calendar.events[y][m][d][this.hour]) {
- return erpnext.calendar.events[y][m][d][this.hour];
- } else
- return [];
-}
-
-Calendar.ViewUnit.prototype.refresh = function() {
- this.clear();
-
- if(this.is_selected()) {
- if(erpnext.calendar.cur_vu)erpnext.calendar.cur_vu.deselect();
- this.selected = true;
- erpnext.calendar.cur_vu = this;
- }
- this.set_display();
- this.el = this.get_event_list();
- if(this.onrefresh)this.onrefresh();
-
- for(var i in this.el) {
- this.el[i].show(this);
- }
-
- var me = this;
-}
-
-Calendar.ViewUnit.prototype.select=function() { this.selected = true; this.set_display(); }
-Calendar.ViewUnit.prototype.deselect=function() { this.selected = false; this.set_display(); }
-Calendar.ViewUnit.prototype.setevent=function() { }
-
-Calendar.MonthViewUnit=function(parent) {
- var me = this;
- this.header = $("<div class='cal_month_date'></div>")
- .appendTo(parent)
- .css({"cursor":"pointer"})
- .click(function() {
- me.body.onclick();
- })
- .bind("dblclick", function() {
- me.body.ondblclick();
- })
- .get(0);
-
- this.default_class = "cal_month_unit";
- this.init(parent);
-
- this.onrefresh = function() {
- this.header.innerHTML = this.day.getDate();
- }
-}
-Calendar.MonthViewUnit.prototype = new Calendar.ViewUnit();
-Calendar.MonthViewUnit.prototype.is_selected = function() {
- return same_day(this.day, erpnext.calendar.selected_date)
-}
-
-Calendar.MonthViewUnit.prototype.get_event_list = function() {
- return erpnext.calendar.get_daily_event_list(this.day);
-}
-
-Calendar.DayViewUnit= function(parent) {
- this.default_class = "cal_day_unit"; this.init(parent);
-}
-Calendar.DayViewUnit.prototype = new Calendar.ViewUnit();
-Calendar.DayViewUnit.prototype.onrefresh = function() {
- if(this.el.length<3)
- this.body.style.height = '30px';
- else this.body.style.height = '';
-}
-
-Calendar.WeekViewUnit=function(parent) {
- this.default_class = "cal_week_unit"; this.init(parent);
-}
-Calendar.WeekViewUnit.prototype = new Calendar.ViewUnit();
-Calendar.WeekViewUnit.prototype.onrefresh = function() {
- if(this.el.length<3) this.body.style.height = '30px';
- else this.body.style.height = '';
-}
diff --git a/utilities/page/calendar/calendar.py b/utilities/page/calendar/calendar.py
index baffc48..09b3297 100644
--- a/utilities/page/calendar/calendar.py
+++ b/utilities/page/calendar/calendar.py
@@ -1 +1,31 @@
from __future__ import unicode_literals
+
+import webnotes
+
+@webnotes.whitelist()
+def get_events(start, end):
+ roles = webnotes.get_roles()
+ events = webnotes.conn.sql("""select name as `id`, subject as title,
+ starts_on as `start`, ends_on as `end`, "Event" as doctype, owner
+ from tabEvent where event_date between %s and %s
+ and (event_type='Public' or owner=%s
+ or exists(select * from `tabEvent User` where
+ `tabEvent User`.parent=tabEvent.name and person=%s)
+ or exists(select * from `tabEvent Role` where
+ `tabEvent Role`.parent=tabEvent.name
+ and `tabEvent Role`.role in ('%s')))""" % ('%s', '%s', '%s', '%s',
+ "', '".join(roles)), (start, end,
+ webnotes.session.user, webnotes.session.user), as_dict=1, debug=1)
+
+ return events
+
+ block_days = webnotes.conn.sql("""select block_date as `start`,
+ name as `id`, reason as `title`, "Holiday List Block Date" as doctype,
+ where block_date between %s and %s
+ and """)
+
+@webnotes.whitelist()
+def update_event(name, start, end):
+ webnotes.conn.sql("""update tabEvent set starts_on=%s, ends_on=%s where
+ name=%s""", (start, end, name))
+
\ No newline at end of file