mirror of
https://github.com/lemeow125/Borrowing-TrackerBackend.git
synced 2024-11-17 06:19:26 +08:00
Improve breakages
This commit is contained in:
parent
c1a7e21e95
commit
5d5ff22ee4
6 changed files with 100 additions and 152 deletions
|
@ -3,5 +3,6 @@ from django.urls import path, include
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('accounts/', include('accounts.urls')),
|
path('accounts/', include('accounts.urls')),
|
||||||
path('equipments/', include('equipments.urls')),
|
path('equipments/', include('equipments.urls')),
|
||||||
path('transactions/', include('transactions.urls'))
|
path('transactions/', include('transactions.urls')),
|
||||||
|
path('breakages/', include('breakages.urls')),
|
||||||
]
|
]
|
||||||
|
|
|
@ -17,51 +17,12 @@ class BreakageReportSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = BreakageReport
|
model = BreakageReport
|
||||||
fields = ['id', 'transaction', 'equipments', 'status', 'timestamp']
|
fields = ['id', 'transaction', 'equipments', 'resolved', 'timestamp']
|
||||||
read_only_fields = ['id', 'timestamp']
|
read_only_fields = ['id', 'transaction',
|
||||||
|
'equipments', 'resolved', 'timestamp']
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def to_representation(self, instance):
|
||||||
transaction = validated_data.get('transaction')
|
representation = super().to_representation(instance)
|
||||||
equipments = validated_data.get('equipments')
|
representation['equipments'] = [
|
||||||
user = self.context['request'].user
|
eq.__str__() for eq in instance.equipments.all()]
|
||||||
|
return representation
|
||||||
if 'transaction' in validated_data:
|
|
||||||
raise serializers.ValidationError({
|
|
||||||
'equipments': 'You cannot change the associated transaction for a breakage report after it has been created'
|
|
||||||
})
|
|
||||||
|
|
||||||
if 'equipments' in validated_data:
|
|
||||||
raise serializers.ValidationError({
|
|
||||||
'equipments': 'You cannot change the equipments in a breakage report after it has been created'
|
|
||||||
})
|
|
||||||
|
|
||||||
if not DEBUG:
|
|
||||||
if not user.is_teacher and 'status' in validated_data and validated_data['status'] != instance.status:
|
|
||||||
raise serializers.ValidationError(
|
|
||||||
"You do not have permission to change the status of a breakage report"
|
|
||||||
)
|
|
||||||
return super().update(instance, validated_data)
|
|
||||||
|
|
||||||
def create(self, instance, validated_data):
|
|
||||||
transaction = validated_data.get('transaction')
|
|
||||||
equipments = validated_data.get('equipments')
|
|
||||||
user = self.context['request'].user
|
|
||||||
if transaction is None:
|
|
||||||
raise serializers.ValidationError({
|
|
||||||
'equipments': 'Please selected a transaction'
|
|
||||||
})
|
|
||||||
if equipments is None:
|
|
||||||
raise serializers.ValidationError({
|
|
||||||
'equipments': 'Please select equipments covered by the breakage report'
|
|
||||||
})
|
|
||||||
for equipment in equipments:
|
|
||||||
if equipment not in transaction.equipments.all():
|
|
||||||
raise serializers.ValidationError({
|
|
||||||
'equipments': 'All equipments must be associated with the specified transaction'
|
|
||||||
})
|
|
||||||
if not DEBUG:
|
|
||||||
if not user.is_teacher and 'status' in validated_data and validated_data['status'] != instance.status:
|
|
||||||
raise serializers.ValidationError(
|
|
||||||
"You do not have permission to create a breakage report"
|
|
||||||
)
|
|
||||||
return super().create(validated_data)
|
|
||||||
|
|
10
equipment_tracker/breakages/urls.py
Normal file
10
equipment_tracker/breakages/urls.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from django.urls import include, path
|
||||||
|
from rest_framework import routers
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
router = routers.DefaultRouter()
|
||||||
|
router.register(r'', views.BreakageReportViewSet)
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', include(router.urls)),
|
||||||
|
]
|
|
@ -1,3 +1,14 @@
|
||||||
from django.shortcuts import render
|
from .serializers import BreakageReportSerializer
|
||||||
|
from .models import BreakageReport
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
from rest_framework import viewsets
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
|
class BreakageReportViewSet(viewsets.ModelViewSet):
|
||||||
|
# Only allow GET
|
||||||
|
# Breakage Reports cannot be updated directly
|
||||||
|
# Changes to the associated Equipment Instances will resolve the Breakage Report itself
|
||||||
|
http_method_names = ['get']
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
serializer_class = BreakageReportSerializer
|
||||||
|
queryset = BreakageReport.objects.all()
|
||||||
|
|
|
@ -175,6 +175,11 @@ class EquipmentInstanceSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
"Non-technician users cannot delete equipment instances")
|
"Non-technician users cannot delete equipment instances")
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
|
||||||
|
def to_representation(self, instance):
|
||||||
|
representation = super().to_representation(instance)
|
||||||
|
representation['equipment'] = instance.equipment.__str__()
|
||||||
|
return representation
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EquipmentInstance
|
model = EquipmentInstance
|
||||||
fields = ('id', 'equipment', 'equipment_name', 'category', 'status', 'remarks',
|
fields = ('id', 'equipment', 'equipment_name', 'category', 'status', 'remarks',
|
||||||
|
|
|
@ -513,6 +513,43 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/SetUsername'
|
$ref: '#/components/schemas/SetUsername'
|
||||||
description: ''
|
description: ''
|
||||||
|
/api/v1/breakages/:
|
||||||
|
get:
|
||||||
|
operationId: api_v1_breakages_list
|
||||||
|
tags:
|
||||||
|
- api
|
||||||
|
security:
|
||||||
|
- jwtAuth: []
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/BreakageReport'
|
||||||
|
description: ''
|
||||||
|
/api/v1/breakages/{id}/:
|
||||||
|
get:
|
||||||
|
operationId: api_v1_breakages_retrieve
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: id
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
description: A unique integer value identifying this breakage report.
|
||||||
|
required: true
|
||||||
|
tags:
|
||||||
|
- api
|
||||||
|
security:
|
||||||
|
- jwtAuth: []
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/BreakageReport'
|
||||||
|
description: ''
|
||||||
/api/v1/equipments/equipment_instances/:
|
/api/v1/equipments/equipment_instances/:
|
||||||
get:
|
get:
|
||||||
operationId: api_v1_equipments_equipment_instances_list
|
operationId: api_v1_equipments_equipment_instances_list
|
||||||
|
@ -983,85 +1020,6 @@ paths:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/Transaction'
|
$ref: '#/components/schemas/Transaction'
|
||||||
description: ''
|
description: ''
|
||||||
put:
|
|
||||||
operationId: api_v1_transactions_update
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
name: id
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
description: A unique integer value identifying this transaction.
|
|
||||||
required: true
|
|
||||||
tags:
|
|
||||||
- api
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/Transaction'
|
|
||||||
application/x-www-form-urlencoded:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/Transaction'
|
|
||||||
multipart/form-data:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/Transaction'
|
|
||||||
required: true
|
|
||||||
security:
|
|
||||||
- jwtAuth: []
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/Transaction'
|
|
||||||
description: ''
|
|
||||||
patch:
|
|
||||||
operationId: api_v1_transactions_partial_update
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
name: id
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
description: A unique integer value identifying this transaction.
|
|
||||||
required: true
|
|
||||||
tags:
|
|
||||||
- api
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/PatchedTransaction'
|
|
||||||
application/x-www-form-urlencoded:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/PatchedTransaction'
|
|
||||||
multipart/form-data:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/PatchedTransaction'
|
|
||||||
security:
|
|
||||||
- jwtAuth: []
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/Transaction'
|
|
||||||
description: ''
|
|
||||||
delete:
|
|
||||||
operationId: api_v1_transactions_destroy
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
name: id
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
description: A unique integer value identifying this transaction.
|
|
||||||
required: true
|
|
||||||
tags:
|
|
||||||
- api
|
|
||||||
security:
|
|
||||||
- jwtAuth: []
|
|
||||||
responses:
|
|
||||||
'204':
|
|
||||||
description: No response body
|
|
||||||
components:
|
components:
|
||||||
schemas:
|
schemas:
|
||||||
Activation:
|
Activation:
|
||||||
|
@ -1074,6 +1032,31 @@ components:
|
||||||
required:
|
required:
|
||||||
- token
|
- token
|
||||||
- uid
|
- uid
|
||||||
|
BreakageReport:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
readOnly: true
|
||||||
|
transaction:
|
||||||
|
type: integer
|
||||||
|
equipments:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: integer
|
||||||
|
resolved:
|
||||||
|
type: boolean
|
||||||
|
readOnly: true
|
||||||
|
timestamp:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
readOnly: true
|
||||||
|
required:
|
||||||
|
- equipments
|
||||||
|
- id
|
||||||
|
- resolved
|
||||||
|
- timestamp
|
||||||
|
- transaction
|
||||||
CategoryEnum:
|
CategoryEnum:
|
||||||
enum:
|
enum:
|
||||||
- Glassware
|
- Glassware
|
||||||
|
@ -1426,29 +1409,6 @@ components:
|
||||||
type: string
|
type: string
|
||||||
format: date-time
|
format: date-time
|
||||||
readOnly: true
|
readOnly: true
|
||||||
PatchedTransaction:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
readOnly: true
|
|
||||||
borrower:
|
|
||||||
type: integer
|
|
||||||
nullable: true
|
|
||||||
teacher:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
nullable: true
|
|
||||||
equipments:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
type: integer
|
|
||||||
transaction_status:
|
|
||||||
$ref: '#/components/schemas/TransactionStatusEnum'
|
|
||||||
timestamp:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
readOnly: true
|
|
||||||
SendEmailReset:
|
SendEmailReset:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|
Loading…
Reference in a new issue