Skip to content
Merged
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
2 changes: 1 addition & 1 deletion FusionIIIT/applications/eis/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,4 +277,4 @@ class Migration(migrations.Migration):
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
]
49 changes: 48 additions & 1 deletion FusionIIIT/applications/iwdModuleV2/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,51 @@ class Meta:
class LetterOfIntentDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = LetterOfIntentDetails
fields = '__all__'
fields = '__all__'

class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = '__all__'
class ProposalSerializer(serializers.ModelSerializer):
items = ItemSerializer(many=True)
class Meta:
model = Proposal
fields = '__all__'

def create(self, validated_data):
items_data = validated_data.pop('items')
proposal = Proposal.objects.create(**validated_data)
total_budget = 0
for item_data in items_data:
item = Item.objects.create(proposal=proposal, **item_data)
total_budget += item.total_price
proposal.proposal_budget = total_budget
proposal.save()
return proposal

def update(self, instance, validated_data):
items_data = validated_data.pop('items')
instance.supporting_documents = validated_data.get('supporting_documents', instance.supporting_documents)
instance.status = validated_data.get('status', instance.status)
instance.save()

total_budget = 0
for item_data in items_data:
item_id = item_data.get('id')
if item_id:
item = Item.objects.get(id=item_id, proposal=instance)
item.name = item_data.get('name', item.name)
item.description = item_data.get('description', item.description)
item.unit = item_data.get('unit', item.unit)
item.price_per_unit = item_data.get('price_per_unit', item.price_per_unit)
item.total_price = item_data.get('total_price', item.total_price)
item.docs = item_data.get('docs', item.docs)
item.save()
else:
item = Item.objects.create(proposal=instance, **item_data)
total_budget += item.total_price

instance.proposal_budget = total_budget
instance.save()
return instance
30 changes: 28 additions & 2 deletions FusionIIIT/applications/iwdModuleV2/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ def create_request(request):
to create a new request
'''
data = request.data
data['requestCreatedBy'] = request.user.username
data['requestCreatedBy'] = request.user.username
data['requestCreatedBy'] = request.user.username
serializer = CreateRequestsSerializer(data=data, context={'request': request})

if serializer.is_valid():
Expand Down Expand Up @@ -1172,5 +1171,32 @@ def handle_settle_bill_requests(request):

return Response({'error': 'Request ID not provided'}, status=status.HTTP_400_BAD_REQUEST)

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def create_proposal(request):
data = request.data
receiver_desg, receiver_user = data.get('designation').split('|')
serializer = ProposalSerializer(data=request.data)
if serializer.is_valid():
file_id = create_file(
uploader=request.user.username,
uploader_designation=data.get('role'),
receiver=receiver_user,
receiver_designation=receiver_desg,
src_module="IWD",
src_object_id=str(data.get("id")),
file_extra_JSON={"value": 2},
attached_file=None
)
file_instance = File.objects.get(id=file_id)
proposal = serializer.save(created_by=request.user, file=file_instance)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def get_proposals(request, request_id):
proposals = Proposal.objects.filter(request_id=request_id)
serializer = ProposalSerializer(proposals, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)

20 changes: 20 additions & 0 deletions FusionIIIT/applications/iwdModuleV2/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from django.db import models
from datetime import date
#from django.contrib.auth.models import User
from applications.filetracking.models import File

# Create your models here.

Expand Down Expand Up @@ -196,3 +198,21 @@ class Bills(models.Model):
class Budget(models.Model):
name = models.CharField(max_length=200)
budgetIssued = models.IntegerField(default=0)

class Proposal(models.Model):
request = models.ForeignKey(Requests, on_delete=models.CASCADE, related_name='proposals')
created_by = models.CharField(max_length=200) #models.ForeignKey(User, on_delete=models.CASCADE)
file = models.ForeignKey(File, on_delete=models.CASCADE, null=True, blank=True)
proposal_budget = models.DecimalField(max_digits=15, decimal_places=2, null=True, blank=True)
supporting_documents = models.FileField(upload_to='proposals/', null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=20, choices=[('Pending', 'Pending'), ('Approved', 'Approved'), ('Rejected', 'Rejected')], default='Pending')
class Item(models.Model):
proposal = models.ForeignKey('Proposal', on_delete=models.CASCADE, related_name='items')
name = models.CharField(max_length=255)
description = models.TextField()
unit = models.CharField(max_length=50)
price_per_unit = models.DecimalField(max_digits=10, decimal_places=2)
total_price = models.DecimalField(max_digits=10, decimal_places=2)
docs = models.FileField(upload_to='items/', null=True, blank=True)