Implement sender LLM OCR and request remarks

This commit is contained in:
Keannu Christian Bernasol 2025-01-08 13:38:39 +08:00
parent d5477a1e1a
commit 674a7ec592
11 changed files with 174 additions and 62 deletions

View file

@ -0,0 +1,18 @@
# Generated by Django 5.1.3 on 2025-01-08 04:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("document_requests", "0002_documentrequest_questionnaire"),
]
operations = [
migrations.AddField(
model_name="documentrequest",
name="denied_remarks",
field=models.TextField(blank=True, max_length=512, null=True),
),
]

View file

@ -0,0 +1,18 @@
# Generated by Django 5.1.3 on 2025-01-08 04:51
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("document_requests", "0003_documentrequest_denied_remarks"),
]
operations = [
migrations.RenameField(
model_name="documentrequest",
old_name="denied_remarks",
new_name="remarks",
),
]

View file

@ -27,6 +27,8 @@ class DocumentRequest(models.Model):
("denied", "Denied"),
)
remarks = models.TextField(max_length=512, blank=True, null=True)
status = models.CharField(
max_length=32, choices=STATUS_CHOICES, default="pending")

View file

@ -101,6 +101,7 @@ class DocumentRequestSerializer(serializers.ModelSerializer):
"purpose",
"date_requested",
"documents",
"remarks",
"status",
]
read_only_fields = [
@ -112,6 +113,7 @@ class DocumentRequestSerializer(serializers.ModelSerializer):
"purpose",
"date_requested",
"documents",
"remarks,"
"status",
]
@ -146,6 +148,7 @@ class FullDocumentRequestSerializer(serializers.ModelSerializer):
"purpose",
"date_requested",
"documents",
"remarks",
"status",
]
read_only_fields = [
@ -167,27 +170,41 @@ class DocumentRequestUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = DocumentRequest
fields = ["id", "status"]
read_only_fields = ["id", "status"]
fields = ["id", "status", "remarks"]
read_only_fields = ["id"]
def update(self, instance, validated_data):
print(validated_data)
if instance.status == "denied" or instance.status == "approved":
raise serializers.ValidationError(
{
"error": "Already approved/denied requests cannot be updated. You should instead create a new request and approve it from there"
}
)
elif "status" not in validated_data:
raise serializers.ValidationError(
{
"error": "No status value update provided"
}
)
elif validated_data["status"] == instance.status:
raise serializers.ValidationError(
{"error": "Request form status provided is the same as current status"}
)
elif validated_data["status"] == "denied" and "remarks" not in validated_data:
raise serializers.ValidationError(
{"error": "Request denial requires remarks"}
)
representation = super().update(instance, validated_data)
# Send an email on request status update
try:
email = RequestUpdateEmail()
email.context = {"request_status": instance.status}
if instance.status == "denied":
email.context = {"remarks": instance.remarks}
else:
email.context = {"remarks": "N/A"}
email.send(to=[instance.requester.email])
except:
# Silence out errors if email sending fails