diff --git a/apiserver/apiserver/api/models.py b/apiserver/apiserver/api/models.py index b77a7e4..4a66f40 100644 --- a/apiserver/apiserver/api/models.py +++ b/apiserver/apiserver/api/models.py @@ -18,6 +18,7 @@ def today_alberta_tz(): class Member(models.Model): user = models.OneToOneField(User, related_name='member', blank=True, null=True, on_delete=models.SET_NULL) + signup_helper = models.ForeignKey(User, related_name='signed_up', blank=True, null=True, on_delete=models.SET_NULL) old_email = models.CharField(max_length=254, 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) diff --git a/apiserver/apiserver/api/serializers.py b/apiserver/apiserver/api/serializers.py index f9e480d..b37b768 100644 --- a/apiserver/apiserver/api/serializers.py +++ b/apiserver/apiserver/api/serializers.py @@ -285,6 +285,7 @@ class MemberSerializer(serializers.ModelSerializer): 'trotec_cert_date', 'is_allowed_entry', 'mediawiki_username', + 'signup_helper', ] def get_protocoin(self, obj): @@ -309,6 +310,11 @@ class MemberSerializer(serializers.ModelSerializer): instance.photo_medium = medium instance.photo_large = large + helper_id = self.initial_data.get('helper_id', None) + if helper_id: + signup_helper = get_object_or_404(models.Member, id=helper_id) + instance.signup_helper = signup_helper.user + if 'discourse_username' in validated_data: changed = validated_data['discourse_username'] != instance.discourse_username if changed and utils_auth.discourse_is_configured(): @@ -533,12 +539,13 @@ class StorageSpaceSerializer(serializers.ModelSerializer): 'id', 'shelf_id', 'location', + 'user', ] def update(self, instance, validated_data): member_id = self.initial_data.get('member_id', None) if member_id: - member = get_object_or_404(models.Member, id=self.initial_data['member_id']) + member = get_object_or_404(models.Member, id=member_id) validated_data['user'] = member.user else: validated_data['user'] = None diff --git a/webclient/src/Account.js b/webclient/src/Account.js index bd0246e..18c11fa 100644 --- a/webclient/src/Account.js +++ b/webclient/src/Account.js @@ -4,6 +4,7 @@ import * as loadImage from 'blueimp-load-image'; import ReactCrop from 'react-image-crop'; import 'react-image-crop/dist/ReactCrop.css'; import './light.css'; +import { MembersDropdown } from './Members.js'; import { Button, Container, Form, Grid, Header, Message, Segment } from 'semantic-ui-react'; import { requester, randomString } from './utils.js'; @@ -300,6 +301,17 @@ export function AccountForm(props) { } + {isSignup && + + + } + Submit