Refer to Work Type, Price, Management, and Shift by uuid

This commit is contained in:
Tanner Collin 2017-06-19 00:50:55 +00:00
parent 3823c887b6
commit 9817a4ebba
3 changed files with 27 additions and 16 deletions

View File

@ -1,3 +1,4 @@
import uuid
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
@ -26,6 +27,7 @@ class Provider(models.Model):
return 'Provider: ' + self.user.username return 'Provider: ' + self.user.username
class WorkType(models.Model): class WorkType(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
client = models.ForeignKey(Client, related_name='work_types', on_delete=models.CASCADE) client = models.ForeignKey(Client, related_name='work_types', on_delete=models.CASCADE)
color = models.CharField(max_length=16) color = models.CharField(max_length=16)
label = models.CharField(max_length=100) label = models.CharField(max_length=100)
@ -35,6 +37,7 @@ class WorkType(models.Model):
return 'WorkType: ' + self.label + ' of ' + self.client.user.username return 'WorkType: ' + self.label + ' of ' + self.client.user.username
class Manage(models.Model): class Manage(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
client = models.ForeignKey(Client, related_name='employees', on_delete=models.CASCADE) client = models.ForeignKey(Client, related_name='employees', on_delete=models.CASCADE)
provider = models.ForeignKey(Provider, related_name='employers', on_delete=models.CASCADE) provider = models.ForeignKey(Provider, related_name='employers', on_delete=models.CASCADE)
note = models.CharField(max_length=500, blank=True) note = models.CharField(max_length=500, blank=True)
@ -45,12 +48,14 @@ class Manage(models.Model):
return self.client.user.username + ' manages ' + self.provider.user.username return self.client.user.username + ' manages ' + self.provider.user.username
class Price(models.Model): class Price(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
management = models.ForeignKey(Manage, related_name='prices', on_delete=models.CASCADE) management = models.ForeignKey(Manage, related_name='prices', on_delete=models.CASCADE)
work_type = models.ForeignKey(WorkType, on_delete=models.CASCADE) work_type = models.ForeignKey(WorkType, on_delete=models.CASCADE)
amount = models.DecimalField(max_digits=8, decimal_places=2) amount = models.DecimalField(max_digits=8, decimal_places=2)
deleted = models.BooleanField(default=False) deleted = models.BooleanField(default=False)
class Shift(models.Model): class Shift(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
price = models.ForeignKey(Price, on_delete=models.CASCADE) price = models.ForeignKey(Price, on_delete=models.CASCADE)
set_price = models.DecimalField(max_digits=8, decimal_places=2, null=True) set_price = models.DecimalField(max_digits=8, decimal_places=2, null=True)
set_date = models.DateField() set_date = models.DateField()

View File

@ -17,7 +17,7 @@ class UserInfoSerializer(serializers.ModelSerializer):
class WorkTypeSerializer(serializers.ModelSerializer): class WorkTypeSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = WorkType model = WorkType
fields = ('id', 'color', 'label', 'deleted') fields = ('uuid', 'color', 'label', 'deleted')
read_only_fields =('deleted',) read_only_fields =('deleted',)
def create(self, validated_data): def create(self, validated_data):
@ -25,13 +25,13 @@ class WorkTypeSerializer(serializers.ModelSerializer):
return serializers.ModelSerializer.create(self, validated_data) return serializers.ModelSerializer.create(self, validated_data)
class PriceSerializer(serializers.ModelSerializer): class PriceSerializer(serializers.ModelSerializer):
get_employee_id = serializers.IntegerField(write_only=True) get_employee_uuid = serializers.UUIDField(write_only=True)
get_work_type_id = serializers.IntegerField(write_only=True) get_work_type_uuid = serializers.UUIDField(write_only=True)
work_type = WorkTypeSerializer(read_only=True) work_type = WorkTypeSerializer(read_only=True)
class Meta: class Meta:
model = Price model = Price
fields = ('id', 'get_employee_id', 'get_work_type_id', 'work_type', 'amount', 'deleted') fields = ('uuid', 'get_employee_uuid', 'get_work_type_uuid', 'work_type', 'amount', 'deleted')
read_only_fields =('deleted',) read_only_fields =('deleted',)
depth = 1 depth = 1
@ -43,11 +43,11 @@ class PriceSerializer(serializers.ModelSerializer):
client = user.client client = user.client
manage_objs = Manage.objects.filter(client=client).filter(deleted=False) manage_objs = Manage.objects.filter(client=client).filter(deleted=False)
employee_id = validated_data.pop('get_employee_id') employee_uuid = validated_data.pop('get_employee_uuid')
employee = get_object_or_404(manage_objs, id=employee_id) employee = get_object_or_404(manage_objs, uuid=employee_uuid)
worktype_objs = WorkType.objects.filter(client=client).filter(deleted=False) worktype_objs = WorkType.objects.filter(client=client).filter(deleted=False)
work_type_id = validated_data.pop('get_work_type_id') work_type_uuid = validated_data.pop('get_work_type_uuid')
work_type = get_object_or_404(worktype_objs, id=work_type_id) work_type = get_object_or_404(worktype_objs, uuid=work_type_uuid)
if not employee.approved: if not employee.approved:
raise serializers.ValidationError("Employee hasn't approved employment yet.") raise serializers.ValidationError("Employee hasn't approved employment yet.")
@ -76,7 +76,7 @@ class EmployeeSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Manage model = Manage
fields = ('id', 'provider', 'provider_email', 'note', 'approved', 'prices', 'deleted') fields = ('uuid', 'provider', 'provider_email', 'note', 'approved', 'prices', 'deleted')
read_only_fields = ('approved', 'deleted') read_only_fields = ('approved', 'deleted')
def get_provider(self, obj): def get_provider(self, obj):
@ -136,7 +136,7 @@ class EmployerSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Manage model = Manage
fields = ('id', 'client', 'note', 'approved', 'prices') fields = ('uuid', 'client', 'note', 'approved', 'prices')
read_only_fields = ('note',) read_only_fields = ('note',)
def get_client(self, obj): def get_client(self, obj):
@ -173,11 +173,11 @@ class UserSerializer(serializers.ModelSerializer):
depth = 1 depth = 1
class CShiftSerializer(serializers.ModelSerializer): class CShiftSerializer(serializers.ModelSerializer):
get_price_id = serializers.IntegerField(write_only=True) get_price_uuid = serializers.UUIDField(write_only=True)
class Meta: class Meta:
model = Shift model = Shift
fields = ('id', 'chart', 'get_price_id', 'price', 'set_price', 'set_date', 'set_start', 'set_end', 'actual_start', 'actual_end', 'amount', 'description', 'deleted') fields = ('uuid', 'chart', 'get_price_uuid', 'price', 'set_price', 'set_date', 'set_start', 'set_end', 'actual_start', 'actual_end', 'amount', 'description', 'deleted')
read_only_fields = ('chart', 'price', 'set_price', 'set_date', 'actual_start', 'actual_end', 'amount', 'deleted') read_only_fields = ('chart', 'price', 'set_price', 'set_date', 'actual_start', 'actual_end', 'amount', 'deleted')
def create(self, validated_data): def create(self, validated_data):
@ -188,8 +188,8 @@ class CShiftSerializer(serializers.ModelSerializer):
client = user.client client = user.client
price_objs = Price.objects.filter(management__client=client).filter(deleted=False) price_objs = Price.objects.filter(management__client=client).filter(deleted=False)
price_id = validated_data.pop('get_price_id') price_uuid = validated_data.pop('get_price_uuid')
price = get_object_or_404(price_objs, id=price_id) price = get_object_or_404(price_objs, uuid=price_uuid)
if price.management.deleted: if price.management.deleted:
raise serializers.ValidationError("Employment relationship was deleted.") raise serializers.ValidationError("Employment relationship was deleted.")
@ -220,8 +220,8 @@ class PShiftSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Shift model = Shift
fields = ('id', 'action', 'chart', 'price', 'set_price', 'set_date', 'set_start', 'set_end', 'actual_start', 'actual_end', 'amount', 'description', 'deleted') fields = ('uuid', 'action', 'chart', 'price', 'set_price', 'set_date', 'set_start', 'set_end', 'actual_start', 'actual_end', 'amount', 'description', 'deleted')
read_only_fields = ('id', 'price', 'set_price', 'set_date', 'set_start', 'set_end', 'actual_start', 'actual_end', 'amount', 'description', 'deleted') read_only_fields = ('uuid', 'price', 'set_price', 'set_date', 'set_start', 'set_end', 'actual_start', 'actual_end', 'amount', 'description', 'deleted')
def update(self, instance, validated_data): def update(self, instance, validated_data):
action = validated_data['action'] action = validated_data['action']

View File

@ -48,6 +48,7 @@ class ProviderViewSet(viewsets.ModelViewSet):
return Provider.objects.filter(user__username=self.request.user) return Provider.objects.filter(user__username=self.request.user)
class WorkTypeViewSet(viewsets.ModelViewSet): class WorkTypeViewSet(viewsets.ModelViewSet):
lookup_field = "uuid"
serializer_class = WorkTypeSerializer serializer_class = WorkTypeSerializer
def get_queryset(self): def get_queryset(self):
@ -60,6 +61,7 @@ class WorkTypeViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
class EmployeeViewSet(viewsets.ModelViewSet): class EmployeeViewSet(viewsets.ModelViewSet):
lookup_field = "uuid"
serializer_class = EmployeeSerializer serializer_class = EmployeeSerializer
def get_queryset(self): def get_queryset(self):
@ -72,6 +74,7 @@ class EmployeeViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
class EmployerViewSet(viewsets.ModelViewSet): class EmployerViewSet(viewsets.ModelViewSet):
lookup_field = "uuid"
serializer_class = EmployerSerializer serializer_class = EmployerSerializer
# Disallow creation and deletions of relationships # Disallow creation and deletions of relationships
@ -81,6 +84,7 @@ class EmployerViewSet(viewsets.ModelViewSet):
return Manage.objects.filter(provider__user__username=self.request.user) return Manage.objects.filter(provider__user__username=self.request.user)
class PriceViewSet(viewsets.ModelViewSet): class PriceViewSet(viewsets.ModelViewSet):
lookup_field = "uuid"
serializer_class = PriceSerializer serializer_class = PriceSerializer
def get_queryset(self): def get_queryset(self):
@ -93,6 +97,7 @@ class PriceViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
class CShiftViewSet(viewsets.ModelViewSet): class CShiftViewSet(viewsets.ModelViewSet):
lookup_field = "uuid"
serializer_class = CShiftSerializer serializer_class = CShiftSerializer
def get_queryset(self): def get_queryset(self):
@ -111,6 +116,7 @@ class CShiftViewSet(viewsets.ModelViewSet):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
class PShiftViewSet(viewsets.ModelViewSet): class PShiftViewSet(viewsets.ModelViewSet):
lookup_field = "uuid"
serializer_class = PShiftSerializer serializer_class = PShiftSerializer
# Disallow creation and deletions of relationships # Disallow creation and deletions of relationships