def viewmeetings(request):

	"""
	" Generate the handlers for all of the data.
	"""

	if request.user.groups.filter(Q(name='Supervisor')).count() != 0:

		"""
		" Handle the deletion of a meeting.
		"""
		#Update the meeting information, this updates just this information:
		#		-The name.
		#		-The description.
		#		-The start time.
		if 'delete_meeting' in request.POST:
			#Update this publicid
			publicid = request.POST['delete_meeting']
			#Get the meeting to edit.
			meeting_to_delete = Meeting.objects.get(publicid=publicid)
			#Get the name of the meeting.
			name = meeting_to_delete.name
			#Get the topics associated with the meeting.
			meeting_topics =	meeting_to_delete.topics
			#Loop through all of the meeting topics
			for t in meeting_topics.all():
				#Set the meeting to None.
				t.meeting = None
				#Save the meeting.
				t.save()
			#Clear the meeting topics.
			meeting_topics.clear()
			
			redirect_url_string = meeting_url_string(meeting_to_delete.publicid,(('deleted',meeting_to_delete.name),))

			#Save the meeting.
			meeting_to_delete.delete()

			#Redirect to the meetings 
			return redirect(redirect_url_string)
			#return redirect('/viewmeetings/?deleted=%s'% name)

		"""
		" End the handle of updating meeting information.
		"""

		"""
		" Handle the update of the meeting information.
		"""
		#Update the meeting information, this updates just this information:
		#		-The name.
		#		-The description.
		#		-The start time.
		if 'update_meeting_information' in request.POST:
			#Update this publicid
			publicid = request.POST['update_meeting_information']
			#Get the meeting to edit.
			meeting_to_edit = Meeting.objects.get(publicid=publicid)
			#Update the meeting name.
			meeting_to_edit.name = request.POST['name']
			#Update the meeting description.
			meeting_to_edit.description = request.POST['description']
			#Update the meeting start time.
			meeting_to_edit.starttime =format_time(request.POST['starttime'])

			#Save the meeting.
			meeting_to_edit.save()

			#Redirect to the meetings 
			return redirect(meeting_url_string(meeting_to_edit.publicid,(('updated',meeting_to_edit.name),)))

			#return redirect('/viewmeetings/?updated=%s#%s'%(meeting_to_edit.name,publicid))

		"""
		" End the handle of updating meeting information.
		"""

		"""
		" Handle the update of the schedule for each meeting.
		"""

		#Update the meeting schedule order, the order is the right way.
		if 'update_meeting_schedule_publicid' in request.POST:
			
			#Update this publicid
			publicid = request.POST['update_meeting_schedule_publicid']

			#Get the meeting to edit.
			meeting_to_edit = Meeting.objects.get(publicid=publicid)

			#Get the schedule_items.
			schedule_items = request.POST['schedule_items'].split(',')
			#Update the meeting schedule.
			update_meeting_schedule(meeting_to_edit,schedule_items,new=False)
			#Update the items on the schedule.
			meeting_to_edit.maxscheduleitems = len(schedule_items)
			#Save the meeting information.
			meeting_to_edit.save()

			#Redirect to the meetings 
			return redirect(meeting_url_string(meeting_to_edit.publicid,(('updated',meeting_to_edit.name),)))

			#return redirect('/viewmeetings/?updated=%s#%s'%(meeting_to_edit.name,publicid))

		"""
		" End the handle of the update of the schedule for this meeting.
		"""

		"""
		" Handle the add meeting form data.
		"""
		#This handles the information for the add meeting form.
		if 'schedule_items' in request.POST and 'addmeetingform' in request.session:
			#Add the meeting form a session variable.
			form = request.session['addmeetingform']
			#Get the publicid for all of the topics.
			schedule_items = request.POST['schedule_items'].split(',')
			#Format the duedate.
			duedate = format_date(form['duedate'])
			#Format the startdate.
			startdate =  format_date(form['startdate'])
			#Get the starttime
			starttime = format_time(form['starttime'])
			#Create a new meeting.
			newmeeting = Meeting(
												name = form['name'],
												description=form['description'],
												duedate=duedate,
												startdate=startdate,
												maxscheduleitems=len(schedule_items),
												starttime=starttime,
												user=request.user,
												duration=0
			)
			#Save the new meeting.
			newmeeting.save()
			#Add Schedule
			update_meeting_schedule(newmeeting,schedule_items);

			#Redirect to the meetings 
			return redirect(meeting_url_string(newmeeting.publicid,(('added',newmeeting.name),)))

		"""
		" End the handle of the add meeting form.
		"""

	"""
	" End the handlers of the data.
	"""

	"""
	" Generate the dates needed for the calendar interface.
	"""
	#Get the date of this month.
	today = date.today() + relativedelta(day=1)
	#Get the year of the current month.
	year = int(request.GET['year']) if 'year' in request.GET else today.year
	#Get the month.
	month = int(request.GET['month']) if 'month' in request.GET else today.month
	#The date that will be displayed.
	displaydate = date(day=1,month=month,year=year)
	#Get the previous month.
	prev_month = displaydate+relativedelta(months=-1)
	#Get the next month.
	next_month = displaydate+relativedelta(months=+1)
	"""
	" End of calendar dates needed.
	"""


	"""
	" Get the meetings that will be on the calendar.
	"""
	#Load the meeting objects into a list
	meetings = Meeting.objects.filter(
										  deleted=False,
										  startdate__year=displaydate.year,
										  startdate__month=displaydate.month,
										  ).order_by('startdate','starttime')
	"""
	" End of the meetings that will be on the calendar.
	"""


	"""
	" For each meeting get the views asociated.
	"""
	#load the topics available, for making the schedule.
	topics = Topic.objects.filter(meeting=None,
																readyforreview=True,
																supervisor_released=False,
																deleted=False)

	#Create a list with meetings in it.
	meetings_list = []

	"""
	" Get the next meeting.
	"""
	nextm = get_next_meeting()


	if nextm and (nextm.startdate.month != month or nextm.startdate.year != year):

		print str(nextm.startdate.month)+":"+str(nextm.startdate.year)
		print str(month)+":"+str(year)

		nextmeeting = {
			'next_view_meeting':view_meeting(request,nextm),
			'next_edit_meeting_form1':edit_meeting_form1(request,nextm),
			'next_edit_meeting_form2':edit_meeting_form2(request,topics,nextm),
		}

	else:

		nextmeeting = None

	#Loop through each meeting on the calendar.
	for m in meetings:

		meeting_dict = {}

		"""
		" This loads the meeting view, when you click on a calendar
		"		item this is the modal that gets loaded.
		"""
		view_meeting_var = view_meeting(request,m)
		"""
		" Load the edit meeting information form.
		"""
		edit_meeting_form1_var = edit_meeting_form1(request, m)
		"""
		" Load the meeting schedule editor.
		"""
		edit_meeting_form2_var = edit_meeting_form2(request,topics,m)

		#Merge to the meeting context variable.
		meeting_dict['view_meeting'] = view_meeting_var
		#Merge to the meeting context variable.
		meeting_dict['edit_meeting_form1'] = edit_meeting_form1_var
		#Load the edit meeting dict.
		meeting_dict['edit_meeting_form2'] = edit_meeting_form2_var


		#Add the meetings to the list.
		meetings_list.append(meeting_dict)

	"""
	" End of getting the views for each meeting.
	"""


	"""
	" Get the form for adding a meeting to the form.
	"""

	#Load the addmeeting form.
	if 'loadprevious' not in request.GET and 'loadnext' in request.GET and (
			#Check for meeting information in a form
			('addmeetingform' in request.session) 
				or
			#Check for the meeting in the add form.
			('addmeetingform' in request.POST)
		):
		
		#Save the post data in to a session variable
		request.session['addmeetingform'] = request.POST

		#Add a meeting form.
		addmeetingform2 = mark_safe(render(request,
														'meeting_management/addmeetingform2.html',
														{'topics':topics}).content
											)
		#Check the meeting form.
		meetingform = mark_safe(
				#Load a modal template 
				modal(request,
						#This is the meetingform.
						addmeetingform2,
						#This is the modal title.
						modal_title='Create a Schedule',
						#This is the add meeting form.
						modal_id='addmeetingform',
						#Add a class to the modal.
						modal_class='addmeetingform'
				).content
			)
		#Load the form.
		loadform = True
	else:
		#Load the form.
		loadform = True if 'loadprevious' in request.GET else False

		#If the form is the meeting form.
		if not loadform and 'addmeetingform' in request.session:
			#Delete the meeting.
			del request.session['addmeetingform']

		#Get the first meeting form
		meetingform = form_modal(request,
										#Add the meeting form.
										'addmeetingform',
										#Get the actual form from the form model.
										AddMeetingForm(
												#If there is request POST information,
												#			populate the form with it.
												request.POST if 'addmeetingform' in request.POST else 
													#If there is session from the previous form populate the form with it.
													#		otherwise the form can be empty.
													request.session['addmeetingform'] if 'addmeetingform' in request.session else None
										 ).as_table(),
										#Name the modal_form.
										table_class='modal_form',
										#Add the topics.
										submit_text='Add Topics',
										#Add a get string
										get_string='loadnext=1',
										#Add a modal title.
										modal_title='Add a Meeting',
										#Add a modal_id.
										modal_id='addmeetingform1'
									)
	"""
	" End of getting the form for adding a meeting.
	"""



	"""
	" Create the calendar object.
	"""
	#Get the calendar.
	calendar = mark_safe(MeetingCalendar(meetings).formatmonth(year, month))
	"""
	" End of calendar object.
	"""

	context = {
		
		'title':'Meetings',
		'meetings_list':meetings_list,
		'meetingform':meetingform,
		'calendar': calendar,
		'nextmeeting':nextmeeting,
		
		###
		# These are the month variables.
		###
			
			#The previous month in the year.
			'prev_month':prev_month,
			#The next month in the year.
			'next_month':next_month,
			#This is a textual version of the previous month.
			'prev_month_textual':prev_month.strftime("%b, %Y"),
			#This is a textual version of the next month.
			'next_month_textual':next_month.strftime("%b, %Y"),
		
		###
		# End of the month variables.
		###

		#If the modal needs to be loaded
		'loadform':loadform

	}



	#Render the request information.
	return render(request,
 			'meeting_management/viewmeetings.html',
			context)
  def test_viewtopic(self):
    
    url = '/viewtopic/'
    redirect_url = '/login/?next=/viewtopic/'
    template = 'topic_management/viewtopic.html'

    #Check the redirect when a user is not logged in.
    resp = self.client.get(url)
    self.checkRedirects(resp, redirect_url)

    del resp

    #Check the redirect to viewing topics when there 
    #   we go to a topic that doesn't exist.
    C = Client()
    C.login(username='******',password='******')
    resp = C.get(url)
    self.checkRedirects(resp,'/viewtopics/')
    #self.checkTemplateUsed(resp, template)

    del resp

    #Logout the user.
    C.logout()

   #self.create_topics(extuser=ExtendedUser.objects.get(user__username='******'))

    #Get a topic to test with
    topic = Topic.objects.get(name='Topic1')
    topic_publicid = topic.publicid
    document = topic.documents.get(name__icontains='Document1')
    document_publicid = document.publicid
    document_text = 'A Document Name XCVF'

    #Check the mytopics variable is working.
    C = Client()

    comment_content = 'COMMENT TEXT'

    #Create postData for the url.
    postData = {
      'topicid':topic_publicid,
      'content':comment_content
    }
    #Get the url for the topic.
    topic_url = "%s?publicid=%s" % (url,topic_publicid)
    
    #We should not be able to edit the topic being
    #   logged in as a user that doesn't own it.
    #We should be able to see a comment that we add
    #   with a POST.
    #It should also contain at least on document.
    C.login(username='******',password='******')
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only show up if we own the topic
    #   and we are a supervisor.
    self.checkRespNotContains(resp, 'Presentation Length: ')
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespContains(resp, comment_content)
    #The string below will only exist if the documents 
    #   loaded right.
    self.checkRespContains(resp, document_text)

    del resp

    document_comment_content = 'COMMENT ON DOCUMENT TEXT'

    #Create postData for the url.
    postData = {
      'documentid':document_publicid,
      'content':document_comment_content
    }
    #A comment on the document should post to the page
    #   the page with the content listed above.
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespContains(resp, document_comment_content)

    del resp

    #Get the comment we just posted and test a comment reply.
    comment = document.comments.get(content=document_comment_content)
    comment_publicid = comment.publicid

    comment_reply_content = 'COMMENT REPLY TEXT'

    #Create postData for the url.
    postData = {
      'commentid':comment_publicid,
      'content':comment_reply_content,
    }
    #A reply to the comment should post to the page below.
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespContains(resp, comment_reply_content)

    del resp

    C.logout()

    C.login(username='******',password='******')

    topic_description = 'update DESCRIPTION TEST'

    #Create postData for the url.
    postData = {
      'update_topic_description':topic_publicid,
      'description':topic_description,

    }
    #A reply to the comment should post to the page below.
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespContains(resp, topic_description)

    del resp

    #A reply to the comment should post to the page below.
    resp = C.get(url,{'publicid':'nopublicid'})
    #Check the redirect
    self.checkRedirects(resp,urlstring='/viewtopics/')

    del resp

    presentation_length = '30'
    release_update_value = "%s minute presentation" % presentation_length

    #Create postData for the url.
    postData = {
      'topic_ready_for_review_id':topic_publicid,
      'topic_presentationlength':presentation_length,

    }
    #A test to release the topic to being able to be
    #   dragged into the meeting schedule.
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespContains(resp, release_update_value)

    del resp

    extuser = self.create_user('user.name')

    #Create a meeting to test the update of a topic release.
    meeting = Meeting(
                      name='Meeting Name',
                      description='Meeting Description',
                      duedate='2013-05-05',
                      startdate='2013-05-05',
                      starttime='13:00:00',
                      user=extuser.user,
                      maxscheduleitems=8,
                      duration=0
                      )
    meeting.save()
    topic.meeting = meeting
    meeting.topics.add(topic)
    topic.save()

    #Create postData for the url.
    postData = {
      'topic_ready_for_review_id':topic_publicid,

    }
    #A test to unrelease the topic.
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespNotContains(resp, release_update_value)

    del resp

    #Create postData for the url.
    postData = {
      'deleted_documentid':document_publicid,
    }
    #A test to unrelease the topic.
    resp = C.post(topic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    #The string below will only exist if the post to the 
    #   database was successful for the topic.
    self.checkRespNotContains(resp, 'Document1 %s' % document_text)

    del resp

    #Upload a new document.
    newtopic = self.add_topic_form(C)
    newtopic_publicid = newtopic.publicid
    newdocument = newtopic.documents.all()[0]
    newdocument_publicid = newdocument.publicid

    newtopic_url = "/viewtopic/?publicid=%s" % newtopic_publicid

    #Test the update of a document
    file = "%s/www/css/style.css" % settings.BASE_DIR
    with open(file) as fp:

      #Create postData for the url.
      postData = {
        'updated_documentid':newdocument_publicid,
        'file':fp,
      }
      resp = C.post(newtopic_url,postData)
      #self.checkRedirects(resp,'/viewtopics/')
      self.checkTemplateUsed(resp, template)
      #The string below will only exist if the post to the 
      #   database was successful for the topic.
      self.checkRespContains(resp, 'style.css')

      del resp


    ###
    # Test the download.
    ###

    downloaddocument = newtopic.documents.all()[0]

    document_filename = downloaddocument.fileName

    download_url = '/download/%s/%s' % (newtopic_publicid,document_filename)

    resp = C.get(download_url)

    self.assertIn(document_filename, resp['Content-Disposition'])

    del resp

    #Test the adding of a document.
    file = "%s/www/js/jquery.min.js" % settings.BASE_DIR
    with open(file) as fp:

      #Create postData for the url.
      postData = {
        'add_document':'1',
        'file':fp,
      }
      resp = C.post(newtopic_url,postData)
      #self.checkRedirects(resp,'/viewtopics/')
      self.checkTemplateUsed(resp, template)
      #The string below will only exist if the post to the 
      #   database was successful for the topic.
      self.checkRespContains(resp, 'jquery.min.js')

      del resp

    #Logout the user.
    C.logout()

    #Create a supervisor
    self.create_user(username='******',groups=('Supervisor','Program Manager',))

    #Login the supervisor
    C.login(username='******',password='******')

    #Create postData for the url.
    postData = {
      'released_topicid':newtopic_publicid,
    }
    #A test to aprove the topic.
    resp = C.post(newtopic_url,postData)
    #self.checkRedirects(resp,'/viewtopics/')
    self.checkTemplateUsed(resp, template)
    self.assertTrue(os.path.exists("%s/%s" % (settings.APPROVED_TOPIC_DIR,newtopic_publicid)))

    del resp


    #Upload a new document.
    newtopic2 = self.add_topic_form(C,description='Testing')
    newtopic2_publicid = newtopic2.publicid

    newtopic2_url = "/viewtopic/?publicid=%s" % newtopic2_publicid

    #Create postData for the url. 
    postData = {
      'deleted_topicid':newtopic2_publicid,
    }

    #A test to aprove the topic.
    resp = C.post(newtopic2_url,postData)

    #self.checkRedirects(resp,'/viewtopics/')
    self.assertIn('viewtopics/?deleted',resp['Location'])
    self.assertFalse(os.path.exists("%s/%s" % (settings.UPLOADED_TOPIC_DIR,newtopic2_publicid)))
    self.assertTrue(os.path.exists("%s/%s" % (settings.DELETED_TOPIC_DIR,newtopic2_publicid)))

    del resp

    #Logout the user.
    C.logout()