Created
April 2, 2009 13:24
-
-
Save gijs/89188 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
views.py: | |
---------- | |
def index(request): | |
plannings = Planning.objects.order_by('time_start').filter(user=request.user) | |
cal_source = PlanningCalendar(plannings) | |
cal = cal_source.formatmonth(datetime.now().year, datetime.now().month) | |
return render_to_response("planning/index.html", locals(), context_instance=RequestContext(request)) | |
---------- | |
index.html | |
---------- | |
{% autoescape off %} | |
{{ cal }} | |
{% endautoescape %} | |
---------- | |
calendars.py | |
---------- | |
class PlanningCalendar(HTMLCalendar): | |
def __init__(self, plannings): | |
super(PlanningCalendar, self).__init__() | |
self.plannings = self.group_by_day(plannings) | |
def formatday(self, day, weekday): | |
# print "day is %s and weekday is %s" % (day, weekday) | |
print self.plannings | |
if day != 0: | |
cssclass = self.cssclasses[weekday] | |
if date.today() == date(self.year, self.month, day): | |
cssclass += ' today' | |
if day in self.plannings: | |
cssclass += ' filled' | |
body = ['<ul>'] | |
for planning in self.plannings[day]: | |
body.append('<li>') | |
body.append('(%s) <a href="%s">%s' % (planning.time_start.strftime("%H:%M"), planning.get_absolute_url(), planning.name)) | |
body.append('</a></li>') | |
body.append('</ul>') | |
return self.day_cell(cssclass, '%d %s' % (day, ''.join(body))) | |
return self.day_cell(cssclass, day) | |
return self.day_cell('noday', ' ') | |
def formatmonth(self, year, month): | |
self.year, self.month = year, month | |
return super(PlanningCalendar, self).formatmonth(year, month) | |
def group_by_day(self, plannings): | |
field = lambda planning: planning.time_start.day | |
return dict( | |
[(day, list(items)) for day, items in groupby(plannings, field)] | |
) | |
def day_cell(self, cssclass, body): | |
return '<td class="%s">%s</td>' % (cssclass, body) | |
---------- | |
models.py | |
---------- | |
class Planning(models.Model): | |
""" | |
Planning | |
""" | |
user = models.ForeignKey(User) | |
name = models.CharField(blank=False, max_length=255) | |
project = models.ForeignKey(Project) | |
date_added = models.DateField(default=datetime.today) | |
time_start = models.DateTimeField(blank=False, default=datetime.now) | |
time_end = models.DateTimeField(blank=True, default=datetime.now) | |
description = models.TextField(blank=True) | |
class Meta: | |
verbose_name_plural = u"Planningen" | |
def clientname(self): | |
return self.project.client.name | |
def get_absolute_url(self): | |
return reverse('planning-detail', args=[self.time_start.strftime("%Y").lower(), self.time_start.strftime("%b").lower(), self.time_start.strftime("%d").lower(), self.id]) | |
def __unicode__(self): | |
return str(self.name) + " (" + self.project.client.name + ")" | |
---------- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment