change in algo of event generation plus now multi week events enabled
This commit is contained in:
		
							parent
							
								
									d2fea92969
								
							
						
					
					
						commit
						022d28e5e7
					
				| 
						 | 
					@ -82,12 +82,12 @@ var calendarAPI = function(){
 | 
				
			||||||
			month = dt.getMonth()+1;
 | 
								month = dt.getMonth()+1;
 | 
				
			||||||
			year = dt.getFullYear();
 | 
								year = dt.getFullYear();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// month = 2;
 | 
							// month = 10;
 | 
				
			||||||
		// year = 2008;
 | 
							// year = 2008;
 | 
				
			||||||
		c.cur_month = month;
 | 
							c.cur_month = month;
 | 
				
			||||||
		c.cur_year = year;
 | 
							c.cur_year = year;
 | 
				
			||||||
		$('#view_holder').load("cals/month_view?month="+month+"&year="+year, function() {
 | 
							$('#view_holder').load("cals/month_view?month="+month+"&year="+year, function() {
 | 
				
			||||||
			getEvents(month,year);
 | 
								c.getEvents(month,year);
 | 
				
			||||||
			$('.current_day_title').text(c.monthlist[c.cur_month]+" "+c.cur_year);
 | 
								$('.current_day_title').text(c.monthlist[c.cur_month]+" "+c.cur_year);
 | 
				
			||||||
			if($('#calendar_month').length > 0){
 | 
								if($('#calendar_month').length > 0){
 | 
				
			||||||
				var $c_table = $('#calendar_month');
 | 
									var $c_table = $('#calendar_month');
 | 
				
			||||||
| 
						 | 
					@ -111,71 +111,109 @@ var calendarAPI = function(){
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		var getEvents = function(month,year){
 | 
							
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						this.getEvents = function(month,year){
 | 
				
			||||||
		$.getJSON("cals/getEvents",{"type":"monthview","month":month,"year":year},function(events){
 | 
							$.getJSON("cals/getEvents",{"type":"monthview","month":month,"year":year},function(events){
 | 
				
			||||||
				var $eventrow = $("<tr></tr>");
 | 
								makerow(events);
 | 
				
			||||||
				var nos = new Array();
 | 
							})
 | 
				
			||||||
 | 
							var doneEventArray = new Array();		
 | 
				
			||||||
 | 
							var makerow = function(events){
 | 
				
			||||||
 | 
								var $eventrow =null;
 | 
				
			||||||
			var currow = 0;
 | 
								var currow = 0;
 | 
				
			||||||
 | 
								var curdate = 0;
 | 
				
			||||||
 | 
								var allow = false;
 | 
				
			||||||
 | 
								var curparent = null;
 | 
				
			||||||
			var lastno = 0;
 | 
								var lastno = 0;
 | 
				
			||||||
				nos.push(0);
 | 
								var indexcount = events.length;
 | 
				
			||||||
			$.each(events,function(i,evnt){
 | 
								$.each(events,function(i,evnt){
 | 
				
			||||||
 | 
									indexcount++;
 | 
				
			||||||
 | 
									if($.inArray(evnt.index,doneEventArray) == -1){
 | 
				
			||||||
 | 
										
 | 
				
			||||||
					var daydom = $("#calendar_month td[date="+evnt.start_date+"]");
 | 
										var daydom = $("#calendar_month td[date="+evnt.start_date+"]");
 | 
				
			||||||
					var curparent = daydom.parent().parent().parent();
 | 
										var thisparent = daydom.parent().parent().parent(); 
 | 
				
			||||||
					var thisrow = curparent.attr("row");
 | 
										var thisrow = thisparent.attr("row");
 | 
				
			||||||
					var pos = daydom.attr("position");
 | 
										var pos = parseInt(daydom.attr("position"));
 | 
				
			||||||
					var thisno = daydom.attr("no"); 
 | 
										var thisno = daydom.attr("no"); 
 | 
				
			||||||
				
 | 
					 | 
				
			||||||
					var index = "new";
 | 
					 | 
				
			||||||
					var smallcount = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					for(x in nos){
 | 
					 | 
				
			||||||
						if(thisno > nos[x]){
 | 
					 | 
				
			||||||
							smallcount++;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						if(smallcount > 0){
 | 
					 | 
				
			||||||
							index = x;
 | 
					 | 
				
			||||||
							break;
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					if(index == "new"){
 | 
					 | 
				
			||||||
						nos=[]
 | 
					 | 
				
			||||||
						$eventrow = null;
 | 
					 | 
				
			||||||
						$eventrow = $("<tr></tr>");
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					if(thisrow != currow){
 | 
										if(thisrow != currow){
 | 
				
			||||||
 | 
											if(curparent){
 | 
				
			||||||
 | 
												curparent.append($eventrow);	
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
						$eventrow = null;
 | 
											$eventrow = null;
 | 
				
			||||||
						$eventrow = $("<tr></tr>");
 | 
											$eventrow = $("<tr class='event_row'></tr>");
 | 
				
			||||||
 | 
											allow = true;
 | 
				
			||||||
 | 
										}else if(evnt.start_date > curdate){
 | 
				
			||||||
 | 
											allow = true;
 | 
				
			||||||
						
 | 
											
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
										var recordcurdate = true;
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
					if(index!="new"){
 | 
										if(allow){
 | 
				
			||||||
						nos[index] = (parseInt(thisno) + parseInt(evnt.total_days)) - 1;
 | 
					 | 
				
			||||||
					}else{
 | 
					 | 
				
			||||||
						nos.push((parseInt(thisno) + parseInt(evnt.total_days)) - 1);
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
						if(pos == 1){
 | 
											if(pos == 1){
 | 
				
			||||||
						$eventrow.html('<td colspan="'+evnt.total_days+'" class="main_td" pos="'+pos+'"><div class="event" link="'+evnt.show_link+'" style="background-color: '+evnt.color+';">'+evnt.title+'</div></td>');
 | 
												var colspan = 0;
 | 
				
			||||||
 | 
												if(evnt.total_days>7){
 | 
				
			||||||
 | 
													colspan = 7;
 | 
				
			||||||
 | 
													var totaldays = parseInt(evnt.total_days) - colspan;
 | 
				
			||||||
 | 
													var stardate = parseInt(evnt.start_date) + colspan;
 | 
				
			||||||
 | 
													var index = i + 1;
 | 
				
			||||||
 | 
													var tempArray = {"index":indexcount,"id":evnt.id,"start_date":stardate,"total_days":totaldays,"title":evnt.title,"color":evnt.color,"show_link":evnt.show_link};
 | 
				
			||||||
 | 
													events.splice(index,0,tempArray);
 | 
				
			||||||
 | 
													//recordcurdate = false;
 | 
				
			||||||
 | 
												}else{
 | 
				
			||||||
 | 
													colspan = evnt.total_days;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												$eventrow.html('<td colspan="'+colspan+'" class="main_td" pos="'+pos+'"><div class="event" link="'+evnt.show_link+'" style="background-color: '+evnt.color+';">'+evnt.title+'</div></td>');
 | 
				
			||||||
						}else{
 | 
											}else{
 | 
				
			||||||
							if($eventrow.html()==""){
 | 
												if($eventrow.html()==""){
 | 
				
			||||||
								$eventrow.append('<td colspan="'+(pos-1)+'">');
 | 
													$eventrow.append('<td colspan="'+(pos-1)+'">');
 | 
				
			||||||
							}else{
 | 
												}else{
 | 
				
			||||||
								if((lastno+1)!=thisno){
 | 
													if((lastno+1)!=thisno){
 | 
				
			||||||
								var inposition = $eventrow.find("td.main_td").attr("pos");
 | 
														var inposition = parseInt($eventrow.find("td.main_td:last").attr("pos"));
 | 
				
			||||||
								var colspan = parseInt(pos) - parseInt(inposition);
 | 
														var curcolspan = $eventrow.find("td.main_td:last").attr("colspan");
 | 
				
			||||||
								colspan--; 
 | 
														var colspan = pos - (inposition+parseInt(curcolspan));
 | 
				
			||||||
									$eventrow.append('<td colspan="'+colspan+'">');
 | 
														$eventrow.append('<td colspan="'+colspan+'">');
 | 
				
			||||||
								}
 | 
													}
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
						$eventrow.append('<td colspan="'+evnt.total_days+'" class="main_td" pos="'+pos+'"><div link="'+evnt.show_link+'" class="event" style="background-color: '+evnt.color+';">'+evnt.title+'</div></td>');
 | 
												var colspan = 0;
 | 
				
			||||||
 | 
												if((pos + parseInt(evnt.total_days))-1 > 7){
 | 
				
			||||||
 | 
													colspan = 7-(pos-1);
 | 
				
			||||||
 | 
													var totaldays = parseInt(evnt.total_days) - colspan;
 | 
				
			||||||
 | 
													var stardate = parseInt(evnt.start_date) + colspan;
 | 
				
			||||||
 | 
												
 | 
				
			||||||
 | 
													var index = i + 1;
 | 
				
			||||||
 | 
													var tempArray = {"index":indexcount,"id":evnt.id,"start_date":stardate,"total_days":totaldays,"title":evnt.title,"color":evnt.color,"show_link":evnt.show_link};
 | 
				
			||||||
 | 
													events.splice(index,0,tempArray);								
 | 
				
			||||||
 | 
												//	recordcurdate = false;
 | 
				
			||||||
 | 
													
 | 
				
			||||||
 | 
												}else{
 | 
				
			||||||
 | 
													colspan = evnt.total_days;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												// if(evnt.title == "Again")
 | 
				
			||||||
 | 
												// 	console.log(colspan);
 | 
				
			||||||
 | 
												$eventrow.append('<td colspan="'+colspan+'" class="main_td" pos="'+pos+'"><div link="'+evnt.show_link+'" class="event" style="background-color: '+evnt.color+';">'+evnt.title+'</div></td>');
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						lastno = (parseInt(thisno) + parseInt(evnt.total_days)) - 1;
 | 
											lastno = (parseInt(thisno) + parseInt(evnt.total_days)) - 1;
 | 
				
			||||||
						currow = thisrow;
 | 
											currow = thisrow;
 | 
				
			||||||
 | 
											curdate =(evnt.start_date + evnt.total_days) - 1;
 | 
				
			||||||
 | 
											allow = false;
 | 
				
			||||||
 | 
											curparent = thisparent;
 | 
				
			||||||
 | 
											if(recordcurdate)
 | 
				
			||||||
 | 
												doneEventArray.push(evnt.index);
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								if(curparent){
 | 
				
			||||||
				curparent.append($eventrow);
 | 
									curparent.append($eventrow);
 | 
				
			||||||
				})
 | 
								}
 | 
				
			||||||
			})
 | 
								if(events.length != doneEventArray.length){
 | 
				
			||||||
 | 
									makerow(events);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.loadWeekView = function(){
 | 
						this.loadWeekView = function(){
 | 
				
			||||||
		$('#view_holder').load("cals/week_view", function() { 
 | 
							$('#view_holder').load("cals/week_view", function() { 
 | 
				
			||||||
			$('.current_day_title').text('September 2 - 8, 2012');
 | 
								$('.current_day_title').text('September 2 - 8, 2012');
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,17 +58,19 @@ class Panel::Calendar::BackEnd::CalsController < OrbitBackendController
 | 
				
			||||||
	def get_events
 | 
						def get_events
 | 
				
			||||||
		month = params[:month]
 | 
							month = params[:month]
 | 
				
			||||||
		year = params[:year]
 | 
							year = params[:year]
 | 
				
			||||||
		events = Event.where(:start_month => month).and(:start_year => year).asc(:start_date)
 | 
							month = month.to_i
 | 
				
			||||||
 | 
							year = year.to_i
 | 
				
			||||||
 | 
							events = Event.where(:start_month => month).and(:start_year => year).asc(:start_date).desc(:total_days)
 | 
				
			||||||
		@events = Array.new
 | 
							@events = Array.new
 | 
				
			||||||
		events.each do |event|
 | 
							events.each_with_index do |event,i|
 | 
				
			||||||
			# @temp = Array.new
 | 
								# @temp = Array.new
 | 
				
			||||||
			no_of_days = Date.new(event.end_year,event.end_month,event.end_date) - Date.new(event.start_year,event.start_month,event.start_date)
 | 
								no_of_days = event.total_days
 | 
				
			||||||
			no_of_days = no_of_days.to_i
 | 
								no_of_days = no_of_days.to_i
 | 
				
			||||||
			no_of_days += 1
 | 
								no_of_days += 1
 | 
				
			||||||
			color = Cal.find(event.cal_id).color
 | 
								color = Cal.find(event.cal_id).color
 | 
				
			||||||
			@events << {"start_date"=>event.start_date, "total_days" => no_of_days, "title" => event.title,"color"=>color,"show_link"=>panel_calendar_back_end_event_path(event)}
 | 
								@events << {"id"=>event.id,"index"=>i,"start_date"=>event.start_date, "total_days" => no_of_days, "title" => event.title,"color"=>color,"show_link"=>panel_calendar_back_end_event_path(event)}
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		@events = @events.sort{|k,v| v[:total_days] <=> k[:total_days]}
 | 
							
 | 
				
			||||||
		render :json => @events.to_json
 | 
							render :json => @events.to_json
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,8 +23,9 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
 | 
				
			||||||
		temp = $start.split("/")
 | 
							temp = $start.split("/")
 | 
				
			||||||
		start_date = temp[0]
 | 
							start_date = temp[0]
 | 
				
			||||||
		start_month = temp[1]
 | 
							start_month = temp[1]
 | 
				
			||||||
		star_year = temp[2]
 | 
							start_year = temp[2]
 | 
				
			||||||
		
 | 
							@m = start_month
 | 
				
			||||||
 | 
							@y = start_year
 | 
				
			||||||
		temp = $end.split("/")
 | 
							temp = $end.split("/")
 | 
				
			||||||
		end_date = temp[0]
 | 
							end_date = temp[0]
 | 
				
			||||||
		end_month = temp[1]
 | 
							end_month = temp[1]
 | 
				
			||||||
| 
						 | 
					@ -35,10 +36,20 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		cal_id = params[:event][:cal_id]
 | 
							cal_id = params[:event][:cal_id]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							# if start_am_pm == "PM"
 | 
				
			||||||
 | 
							# 	temp_start_time = $starttime + 12
 | 
				
			||||||
 | 
							# end
 | 
				
			||||||
 | 
							# if end_am_pm == "PM"
 | 
				
			||||||
 | 
							# 	temp_end_time = $endtime + 12
 | 
				
			||||||
 | 
							# end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							final_start_time = Date.new(start_year.to_i,start_month.to_i,start_date.to_i)
 | 
				
			||||||
 | 
							final_end_time = Date.new(end_year.to_i,end_month.to_i,end_date.to_i)
 | 
				
			||||||
 | 
							total_days = final_end_time - final_start_time
 | 
				
			||||||
		@event = Event.new
 | 
							@event = Event.new
 | 
				
			||||||
		@event.title = title
 | 
							@event.title = title
 | 
				
			||||||
		@event.note = note
 | 
							@event.note = note
 | 
				
			||||||
		@event.start_year = star_year
 | 
							@event.start_year = start_year
 | 
				
			||||||
		@event.end_year = end_year
 | 
							@event.end_year = end_year
 | 
				
			||||||
		@event.start_month = start_month
 | 
							@event.start_month = start_month
 | 
				
			||||||
		@event.end_month = end_month
 | 
							@event.end_month = end_month
 | 
				
			||||||
| 
						 | 
					@ -49,6 +60,9 @@ class Panel::Calendar::BackEnd::EventsController < OrbitBackendController
 | 
				
			||||||
		@event.end_time = $endtime
 | 
							@event.end_time = $endtime
 | 
				
			||||||
		@event.end_am_pm = end_am_pm
 | 
							@event.end_am_pm = end_am_pm
 | 
				
			||||||
		@event.cal_id = cal_id
 | 
							@event.cal_id = cal_id
 | 
				
			||||||
 | 
							@event.final_start_time = final_start_time
 | 
				
			||||||
 | 
							@event.final_end_time = final_end_time
 | 
				
			||||||
 | 
							@event.total_days = total_days
 | 
				
			||||||
		@event.save!
 | 
							@event.save!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		respond_to do |h|
 | 
							respond_to do |h|
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,9 @@ class Event
 | 
				
			||||||
	field :start_am_pm
 | 
						field :start_am_pm
 | 
				
			||||||
	field :end_time, type: Float
 | 
						field :end_time, type: Float
 | 
				
			||||||
	field :end_am_pm
 | 
						field :end_am_pm
 | 
				
			||||||
 | 
						field :final_start_time, type: Date
 | 
				
			||||||
 | 
						field :final_end_time, type: Date
 | 
				
			||||||
 | 
						field :total_days, type: Integer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	belongs_to :cal
 | 
						belongs_to :cal
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,2 +1,4 @@
 | 
				
			||||||
$("#event_create").empty().hide();
 | 
					$("#event_create").empty().hide();
 | 
				
			||||||
$("#create_event_btn").removeClass("active");
 | 
					$("#create_event_btn").removeClass("active");
 | 
				
			||||||
 | 
					$("#calendar_month tr.event_row").remove();
 | 
				
			||||||
 | 
					calendar.getEvents(<%= @m %>,<%= @y %>);
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
zh_tw:
 | 
					zh_tw:
 | 
				
			||||||
  calendar:
 | 
					  calendar:
 | 
				
			||||||
      calendars: Calendars
 | 
					      calendars: Calendars
 | 
				
			||||||
 | 
					      create: Create
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,20 @@ class Panel::Gprs::BackEnd::LocationsController < OrbitBackendController
 | 
				
			||||||
	def create
 | 
						def create
 | 
				
			||||||
		debugger 
 | 
							debugger 
 | 
				
			||||||
		@newlocation = Location.new(params[:location])
 | 
							@newlocation = Location.new(params[:location])
 | 
				
			||||||
		render :json => {"success"=>"true"}.to_json
 | 
							@newlocation.save!
 | 
				
			||||||
 | 
							render :action => "index"
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def get_locations 
 | 
				
			||||||
 | 
							locations = Location.all
 | 
				
			||||||
 | 
							@data = Array.new
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							locations.each do |location|
 | 
				
			||||||
 | 
								picurl = "http://"+request.host + location.file.url
 | 
				
			||||||
 | 
								thumburl = "http://"+request.host + location.file.thumb.url
 | 
				
			||||||
 | 
								@data << {"name"=>location.name,"pic_url"=>picurl,"thumb_url"=>thumburl,"description"=>location.description}
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							render :json => @data.to_json
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,8 @@ Rails.application.routes.draw do
 | 
				
			||||||
	  namespace :gprs do
 | 
						  namespace :gprs do
 | 
				
			||||||
	      namespace :back_end do 
 | 
						      namespace :back_end do 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						      	match "locations/get_locations" => "locations#get_locations"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  			resources :locations 
 | 
					  			resources :locations 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	      end
 | 
						      end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in New Issue