Add Calebasse user event management for work and holidays

* agenda/models.py: cleaning
 * cale_base/models/user.py: add work_events and holidays
 * cale_base/tests.py: add a basic test for add_work_event
 * exceptions.py: basic exception for Calebasse
This commit is contained in:
Jérôme Schneider 2012-09-26 19:44:25 +02:00
parent 79ab3a936c
commit a95f286bd4
4 changed files with 73 additions and 13 deletions

View File

@ -5,11 +5,8 @@ from django.utils.translation import ugettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.db import models
#from django.contrib.auth.models import User
from django.conf import settings
#from calebasse.cale_base.models import Patient, Service
from dateutil import rrule
from conf import default
@ -73,7 +70,8 @@ class Event(models.Model):
null=True, blank=True, default=None)
services = models.ManyToManyField('cale_base.Service', verbose_name=('services'),
null=True, blank=True, default=None)
participants = models.ManyToManyField('cale_base.CalebasseUser')
participants = models.ManyToManyField('cale_base.CalebasseUser',
null=True, blank=True, default=None)
class Meta:
app_label = 'agenda'
@ -202,7 +200,7 @@ class Occurrence(models.Model):
def create_event(
title,
event_type,
participants,
participants=[],
description='',
patient=None,
services=[],
@ -249,8 +247,8 @@ def create_event(
event_type=event_type
)
for owner in owners:
event.owners.add(owner)
for participant in participants:
event.participants.add(participant)
for service in services:
event.services.add(service)

View File

@ -2,9 +2,58 @@
from django.db import models
from django.contrib.auth.models import User
from calebasse.agenda.models import create_event
from calebasse.exceptions import CalebasseException
from dateutil import rrule
class CalebasseUser(User):
class Meta:
app_label = 'cale_base'
services = models.ManyToManyField('ActType')
work_event = models.ManyToManyField('agenda.Event', related_name='work_events')
holidays = models.ManyToManyField('agenda.Event', related_name='holidays')
def add_work_event(self, weekday, start_time, end_time, until, services=None):
''' `add_work_event` allows you to add quickly a work event for a user
Args:
weekday (str): weekday constants (MO, TU, etc)
start_date (datetime): start time
end_date (datetime): end time
services (list): list of cale_base.models.Service objects
Returns:
Nothing
Raise:
CalebasseException
'''
if weekday == 'MO':
weekday = rrule.MO
elif weekday == 'TU':
weekday = rrule.TU
elif weekday == 'WE':
weekday = rrule.WE
elif weekday == 'TH':
weekday = rrule.TH
elif weekday == 'FR':
weekday = rrule.FR
elif weekday == 'SA':
weekday = rrule.SA
elif weekday == 'SU':
weekday = rrule.SU
else:
raise CalebasseException("%s is not a valid weekday constants" % day)
self.event = create_event("work %s" % weekday,
('work_event', 'Work event'),
freq = rrule.WEEKLY,
byweekday = weekday,
start_time = start_time,
end_time = end_time,
until = until)

View File

@ -6,11 +6,18 @@ Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
from datetime import datetime, timedelta
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
class UserTest(TestCase):
def test_create_work_event(self):
"""docstring for test_create_event"""
from calebasse.cale_base.models import CalebasseUser
user = CalebasseUser()
user.add_work_event('MO', datetime(2016,10,2,10), datetime(2016,10,2,12),
datetime(2018,1,1))
self.assertEqual(str(user.event), 'work MO')
event = user.event.occurrence_set.all()[0]
self.assertEqual(event.end_time - event.start_time, timedelta(0, 7200))

6
calebasse/exceptions.py Normal file
View File

@ -0,0 +1,6 @@
class CalebasseException(Exception):
"Calebasse generic exception"
pass