Skip to content

Instantly share code, notes, and snippets.

@gijs
Created April 2, 2009 13:24
Show Gist options
  • Save gijs/89188 to your computer and use it in GitHub Desktop.
Save gijs/89188 to your computer and use it in GitHub Desktop.
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', '&nbsp;')
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