Calculate instructor name correctly

master
Tanner Collin 4 years ago
parent 200df3fdc8
commit 8a8161c976
  1. 3
      apiserver/apiserver/api/models.py
  2. 19
      apiserver/apiserver/api/serializers.py
  3. 11
      apiserver/apiserver/api/views.py
  4. 16
      webclient/src/Classes.js

@ -6,7 +6,7 @@ from django.utils.timezone import now
from . import old_models from . import old_models
class Member(models.Model): class Member(models.Model):
user = models.OneToOneField(User, blank=True, null=True, on_delete=models.SET_NULL) user = models.OneToOneField(User, related_name='member', blank=True, null=True, on_delete=models.SET_NULL)
old_email = models.CharField(max_length=254, blank=True, null=True) old_email = models.CharField(max_length=254, blank=True, null=True)
photo_large = models.CharField(max_length=64, blank=True, null=True) photo_large = models.CharField(max_length=64, blank=True, null=True)
photo_medium = models.CharField(max_length=64, blank=True, null=True) photo_medium = models.CharField(max_length=64, blank=True, null=True)
@ -69,6 +69,7 @@ class Session(models.Model):
instructor = models.ForeignKey(User, related_name='teaching', blank=True, null=True, on_delete=models.SET_NULL) instructor = models.ForeignKey(User, related_name='teaching', blank=True, null=True, on_delete=models.SET_NULL)
course = models.ForeignKey(Course, related_name='sessions', blank=True, null=True, on_delete=models.SET_NULL) course = models.ForeignKey(Course, related_name='sessions', blank=True, null=True, on_delete=models.SET_NULL)
is_cancelled = models.BooleanField(default=False)
old_instructor = models.TextField(blank=True, null=True) old_instructor = models.TextField(blank=True, null=True)
datetime = models.DateTimeField(blank=True, null=True) datetime = models.DateTimeField(blank=True, null=True)
cost = models.DecimalField(max_digits=5, decimal_places=2) cost = models.DecimalField(max_digits=5, decimal_places=2)

@ -225,19 +225,27 @@ class TransactionSerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
class SessionDetailSerializer(serializers.ModelSerializer):
class Meta:
model = models.Training
exclude = ['user']
class SessionSerializer(serializers.ModelSerializer): class SessionSerializer(serializers.ModelSerializer):
student_count = serializers.SerializerMethodField() student_count = serializers.SerializerMethodField()
course_name = serializers.SerializerMethodField()
instructor_name = serializers.SerializerMethodField()
datetime = serializers.DateTimeField()
instructor = serializers.PrimaryKeyRelatedField(queryset=models.User.objects.all())
course = serializers.PrimaryKeyRelatedField(queryset=models.Course.objects.all())
class Meta: class Meta:
model = models.Session model = models.Session
fields = '__all__' fields = '__all__'
depth = 1
def get_student_count(self, obj): def get_student_count(self, obj):
return len(obj.students.all()) return len(obj.students.all())
def get_course_name(self, obj):
return obj.course.name
def get_instructor_name(self, obj):
if obj.instructor and hasattr(obj.instructor, 'member'):
name = '{} {}'.format(obj.instructor.member.preferred_name, obj.instructor.member.last_name[0])
else:
name = 'Unknown'
return obj.old_instructor or name
class SessionListSerializer(SessionSerializer): class SessionListSerializer(SessionSerializer):
class Meta: class Meta:
@ -245,6 +253,7 @@ class SessionListSerializer(SessionSerializer):
fields = '__all__' fields = '__all__'
class CourseSerializer(serializers.ModelSerializer): class CourseSerializer(serializers.ModelSerializer):
name = serializers.CharField() name = serializers.CharField()
class Meta: class Meta:

@ -140,8 +140,9 @@ class CourseViewSet(Base, List, Retrieve, Create, Update):
return serializers.CourseDetailSerializer return serializers.CourseDetailSerializer
class SessionViewSet(viewsets.ModelViewSet): class SessionViewSet(Base, List, Retrieve, Create, Update):
permission_classes = [AllowMetadata | IsAuthenticated] permission_classes = [AllowMetadata | IsAuthenticated, IsAdminOrReadOnly | IsInstructorOrReadOnly]
serializer_class = serializers.SessionSerializer
def get_queryset(self): def get_queryset(self):
if self.action == 'list': if self.action == 'list':
@ -149,12 +150,6 @@ class SessionViewSet(viewsets.ModelViewSet):
else: else:
return models.Session.objects.all() return models.Session.objects.all()
def get_serializer_class(self):
#if self.action == 'retrieve':
# return serializers.CourseDetailSerializer
#else:
return serializers.SessionSerializer
class UserView(views.APIView): class UserView(views.APIView):
permission_classes = [AllowMetadata | IsAuthenticated] permission_classes = [AllowMetadata | IsAuthenticated]

@ -9,9 +9,6 @@ import { NotFound, PleaseLogin } from './Misc.js';
function ClassTable(props) { function ClassTable(props) {
const { classes } = props; const { classes } = props;
const getInstructor = (session) =>
session.instructor ? session.instructor.first_name : session.old_instructor;
return ( return (
<Table basic='very'> <Table basic='very'>
<Table.Header> <Table.Header>
@ -29,14 +26,14 @@ function ClassTable(props) {
{classes.length ? {classes.length ?
classes.map((x, i) => classes.map((x, i) =>
<Table.Row key={i}> <Table.Row key={i}>
<Table.Cell>{x.course.name}</Table.Cell> <Table.Cell>{x.course_name}</Table.Cell>
<Table.Cell> <Table.Cell>
<Link to={'/classes/'+x.id}> <Link to={'/classes/'+x.id}>
{moment.utc(x.datetime).format('ll')} {moment.utc(x.datetime).format('ll')}
</Link> </Link>
</Table.Cell> </Table.Cell>
<Table.Cell>{moment.utc(x.datetime).format('LT')}</Table.Cell> <Table.Cell>{moment.utc(x.datetime).format('LT')}</Table.Cell>
<Table.Cell>{getInstructor(x)}</Table.Cell> <Table.Cell>{x.instructor_name}</Table.Cell>
<Table.Cell>{x.cost === '0.00' ? 'Free' : '$'+x.cost}</Table.Cell> <Table.Cell>{x.cost === '0.00' ? 'Free' : '$'+x.cost}</Table.Cell>
<Table.Cell>{x.student_count}</Table.Cell> <Table.Cell>{x.student_count}</Table.Cell>
</Table.Row> </Table.Row>
@ -103,9 +100,6 @@ export function ClassDetail(props) {
}); });
}, []); }, []);
const getInstructor = (session) =>
session.instructor ? session.instructor.first_name : session.old_instructor;
return ( return (
<Container> <Container>
{!error ? {!error ?
@ -118,8 +112,8 @@ export function ClassDetail(props) {
<Table.Row> <Table.Row>
<Table.Cell>Name:</Table.Cell> <Table.Cell>Name:</Table.Cell>
<Table.Cell> <Table.Cell>
<Link to={'/courses/'+clazz.course.id}> <Link to={'/courses/'+clazz.course}>
{clazz.course.name} {clazz.course_name}
</Link> </Link>
</Table.Cell> </Table.Cell>
</Table.Row> </Table.Row>
@ -137,7 +131,7 @@ export function ClassDetail(props) {
</Table.Row> </Table.Row>
<Table.Row> <Table.Row>
<Table.Cell>Instructor:</Table.Cell> <Table.Cell>Instructor:</Table.Cell>
<Table.Cell>{getInstructor(clazz)}</Table.Cell> <Table.Cell>{clazz.instructor_name}</Table.Cell>
</Table.Row> </Table.Row>
<Table.Row> <Table.Row>
<Table.Cell>Cost:</Table.Cell> <Table.Cell>Cost:</Table.Cell>

Loading…
Cancel
Save