Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions backend/datastore/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ class Meta:
app_label = 'dropZoneHQ'


# Employees the work at the drop zone
# Employees working at the drop zone
class Employees(models.Model):
first_name = models.CharField(max_length=45)
last_name = models.CharField(max_length=45)
Expand All @@ -238,6 +238,10 @@ class Employees(models.Model):
pin = models.CharField(max_length=45, blank=True, unique=True)
employment_date = models.DateTimeField(auto_now_add=True)

class Meta:
managed = True
db_table = 'employees'
app_label = 'dropZoneHQ'

# check is the pin of an employee matches the pin given
@staticmethod
Expand Down Expand Up @@ -299,11 +303,6 @@ def employee_email_in_use(email):
emp = Employees.objects.filter(email=email)
return emp

class Meta:
managed = True
db_table = 'employees'
app_label = 'dropZoneHQ'


# Bridge between Employees and Roles. Many employees can perform many roles.
class EmployeesEmployeeRoles(models.Model):
Expand Down Expand Up @@ -337,7 +336,7 @@ class EmployeesSignouts(models.Model):
(PACKED, 'packed'),
(SIGNOUT, 'signout')
)
employee = models.ForeignKey('Employees', models.DO_NOTHING)
employee = models.ForeignKey('Employees', models.DO_NOTHING, primary_key=True)
signout = models.ForeignKey('Signouts', models.DO_NOTHING)
# What type of sign off occurred
packed_signout = models.CharField(db_column='packed_or_signout',
Expand Down Expand Up @@ -378,7 +377,6 @@ class Items(models.Model):
brand = models.CharField(max_length=45, blank=True, null=True)
description = models.CharField(max_length=45, blank=True, null=True)
# Whether or not this item is rentable
# is_rentable = models.CharField(max_length=4)
is_rentable = models.BooleanField(max_length=4)
is_on_rig = models.BooleanField(max_length=4)
is_available = models.BooleanField(max_length=4)
Expand Down Expand Up @@ -450,7 +448,7 @@ class Rigs(models.Model):
container = models.OneToOneField(Containers, models.DO_NOTHING)
aad = models.OneToOneField(AutomaticActivationDevices, models.DO_NOTHING)
# Whether or not this ris is built for a tandem jump
istandem = models.CharField(db_column='isTandem', max_length=4)
istandem = models.BooleanField(db_column='isTandem', max_length=4)
# isrentable = models.BooleanField('Items')

class Meta:
Expand Down
5 changes: 3 additions & 2 deletions backend/datastore/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,16 @@ class Meta:


class EmployeeSerializer(serializers.HyperlinkedModelSerializer):
#dropzones = DropZoneSerializer()
#dropzone = serializers.IntegerField(read_only=True)

roles = EmployeeEmployeeRoleSerializer(many=True, read_only=True)

class Meta:
model = Employees
fields = ('employee_id', 'first_name', 'last_name', 'email', 'dropzone_id', 'is_active', 'roles')


class EmployeeVsSignoutSerializer(serializers.HyperlinkedModelSerializer):

class Meta:
model = EmployeesVsSignouts
fields = ('signout_id', 'jumpmaster', 'jumpmaster_id', 'load_number',
Expand Down
109 changes: 93 additions & 16 deletions backend/datastore/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import datetime



class AADList(LoginRequiredMixin, mixin.RoleArrayCookieRequiredMixin, generics.ListCreateAPIView):
queryset = AutomaticActivationDevices.objects.all()
serializer_class = AADSerializer
Expand Down Expand Up @@ -162,7 +161,7 @@ def patch(self, request, *args, **kwargs):
serializer.is_valid(raise_exception=True)
new_instance = serializer.save()
return JsonResponse(data=serializer.data, status=status.HTTP_202_ACCEPTED)


class DropzoneList(LoginRequiredMixin, generics.ListCreateAPIView):
queryset = Dropzones.objects.all()
Expand Down Expand Up @@ -266,6 +265,7 @@ def post(self, request, *args, **kwargs):
item = Items.objects.get(item_id=request.data.get('item_id'))
item_id = item.item_id


# employee = Employees.objects.get(employee_id=request.data.get('employee')[0])
# employee_id = employee.employee_id

Expand Down Expand Up @@ -327,7 +327,7 @@ class ReserveCanopyDetail(LoginRequiredMixin, mixin.RoleArrayCookieRequiredMixin
queryset = ReserveCanopies.objects.all()
serializer_class = ReserveCanopySerializer
role = ['admin', 'loft_head', 'loft']

def patch(self, request, *args, **kwargs):
item_id = self.kwargs.get('pk')
item = Items.objects.get(item_id=item_id)
Expand Down Expand Up @@ -611,19 +611,96 @@ def patch_emp_signout(employee_id, signout_id):
timestamp=datetime.datetime.now())
return

'''
data = {'employee_id': employee_id, 'signout_id': signout_id, 'packed_signout': EmployeesSignouts.PACKED,
'timestamp': datetime.datetime.now()}
print(data)

serializer = EmployeeSignoutSerializer(data=data)
print(serializer.get_fields())
if serializer.is_valid():
print(serializer.validated_data)
# serializer.save()
return
print(serializer.is_valid())
'''

class EmpTandemCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
employee_id = self.kwargs.get('pk')
tjump_count = EmployeesVsSignoutsTandem.objects.filter(jumpmaster_id=employee_id).count()
return JsonResponse(data=tjump_count, status=status.HTTP_200_OK, safe=False)


class EmpStudentCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
sjump_count = EmployeesVsSignoutsStudent.objects.filter(jumpmaster_id=self.kwargs.get('pk')).count()
return JsonResponse(data=sjump_count, status=status.HTTP_200_OK, safe=False)


class EmpYearlyJumpCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
employee_id = self.kwargs.get('pk')
start_date = datetime.datetime.now()
end_date = start_date - datetime.timedelta(days=365)
jump_count = get_jump_count(employee_id=employee_id, start_date=start_date, end_date=end_date)
return JsonResponse(data=jump_count, status=status.HTTP_200_OK, safe=False)


class EmpMonthlyJumpCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
employee_id = self.kwargs.get('pk')
start_date = datetime.datetime.now()
end_date = start_date - datetime.timedelta(days=30)
jump_count = get_jump_count(employee_id, start_date, end_date)
return JsonResponse(data=jump_count, status=status.HTTP_200_OK, safe=False)


class EmpWeeklyJumpCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
employee_id = self.kwargs.get('pk')
start_date = datetime.datetime.now()
end_date = start_date - datetime.timedelta(days=7)
jump_count = get_jump_count(employee_id=employee_id, start_date=start_date, end_date=end_date)
return JsonResponse(data=jump_count, status=status.HTTP_200_OK, safe=False)


class EmpWeeklyPackCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
# TODO start_date needs to be gathered from request -- format?
start_date = datetime.datetime.now()
end_date = start_date - datetime.timedelta(days=7)
pack_count = get_pack_count(self.kwargs.get('pk'), start_date, end_date)
return JsonResponse(data=pack_count, status=status.HTTP_200_OK, safe=False)


class EmpMonthlyPackCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
# TODO start_date needs to be gathered from request -- format?
start_date = datetime.datetime.now()
end_date = start_date - datetime.timedelta(days=30)
pack_count = get_pack_count(self.kwargs.get('pk'), start_date, end_date)
return JsonResponse(data=pack_count, status=status.HTTP_200_OK, safe=False)


class EmpYearlyPackCount(generics.RetrieveAPIView):

def get(self, request, *args, **kwargs):
start_date = datetime.datetime.now()
end_date = start_date - datetime.timedelta(days=365)
pack_count = get_pack_count(self.kwargs.get('pk'), start_date, end_date)
return JsonResponse(data=pack_count, status=status.HTTP_200_OK, safe=False)


def get_jump_count(employee_id, start_date, end_date):

jump_count = EmployeesSignouts.objects.filter(employee_id=employee_id,
timestamp__lte=start_date,
timestamp__gte=end_date,
packed_signout=EmployeesSignouts.SIGNOUT).count()
return jump_count


def get_pack_count(employee_id, start_date, end_date):
pack_count = EmployeesSignouts.objects.filter(employee_id=employee_id,
timestamp__lte=start_date,
timestamp__gte=end_date,
packed_signout=EmployeesSignouts.PACKED).count()
return pack_count


def get_emp_full_name(employee_id):
Expand Down
18 changes: 18 additions & 0 deletions backend/dropZoneHQ/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,24 @@
url(r'^(?i)reset_employee/$', PasswordResetEmployee.as_view(), name='pin reset'),
url(r'^(?i)auth_employee/$', AuthenticateEmployeePin.as_view(), name='authenticate_user_pin'),
url(r'^(?i)auth_dropzone/$', CheckSession.as_view(), name='authenticate_user'),
url(r'^(?i)dropzones-detail/$', DropzoneDetail.as_view()),
url(r'^(?i)login/$', loginDropzone, name='login'),
url(r'^(?i)logout/$', logoutDropzone, name='logout'),
url(r'^(?i)temp_reset/(?P<hash>\w+)/$', reset_url_dropzone, name="password_reset_temp"),
url(r'^(?i)reset/$', password_reset_dropzone, name='password_reset'),
url(r'^(?i)reset_employee/$', password_reset_employee, name='pin reset'),
url(r'^(?i)create_dropzone/$', createDropzone, name='create_dropzone'),
url(r'^(?i)dropzone/(?P<pk>[0-9]+)/create_employee/$', EmployeeView, name='create_employee'),
url(r'^(?i)auth_employee/', authenticateUserPin, name='authenticate_user_pin'),
url(r'^(?i)auth_name_dropzone/', authenticateNameDropzone, name='authenticate_name_dropzone'),
url(r'^(?i)stat[s]?/total_tandem_count/(?P<pk>[0-9]+)[/]?S', EmpTandemCount.as_view()),
url(r'^(?i)stat[s]?/total_student_count/(?P<pk>[0-9]+)[/]?S', EmpStudentCount.as_view()),
url(r'^(?i)stat[s]?/yearly_jump_count/(?P<pk>[0-9]+)[/]?$', EmpYearlyJumpCount.as_view()),
url(r'^(?i)stat[s]?/monthly_jump_count/(?P<pk>[0-9]+)[/]?$', EmpMonthlyJumpCount.as_view()),
url(r'^(?i)stat[s]?/weekly_jump_count/(?P<pk>[0-9]+)[/]?$', EmpWeeklyJumpCount.as_view()),
url(r'^(?i)stat[s]?/yearly_pack_count/(?P<pk>[0-9]+[/]?$)', EmpYearlyPackCount.as_view()),
url(r'^(?i)stat[s]?/monthly_pack_count/(?P<pk>[0-9]+[/]?$)', EmpMonthlyPackCount.as_view()),
url(r'^(?i)stat[s]?/weekly_pack_count/(?P<pk>[0-9]+[/]?$)', EmpWeeklyPackCount.as_view())
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += [
url(r'^.*/', TemplateView.as_view(template_name="index.html"), name='base')
Expand Down