Skip to content

Commit

Permalink
initial delete functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
maxgrove42 committed Dec 4, 2024
1 parent bbaea71 commit 18ed6d6
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 1 deletion.
12 changes: 12 additions & 0 deletions src/community_drives/templates/community_drives/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ <h2 class="subtitle">Community Drives</h2>
<div class="columns is-multiline is-variable">
{% if drives %}
{% for drive in drives %}
{% if drive.active %}
<div class="column is-full">
<div class="card mb-5">
<div class="card-content">
Expand Down Expand Up @@ -139,6 +140,7 @@ <h2 class="subtitle">Community Drives</h2>
</div>
</div>
</div>
{% endif %}
{% endfor %}
{% else %}
<p class="box">No active community drives to display.</p>
Expand All @@ -149,6 +151,7 @@ <h2 class="subtitle">Community Drives</h2>
<div class="columns is-multiline is-variable">
{% if my_drives %}
{% for drive in my_drives %}
{% if drive.active %}
<div class="column is-full">
<div class="card mb-5">
<div class="card-content">
Expand Down Expand Up @@ -192,11 +195,20 @@ <h2 class="subtitle">Community Drives</h2>
<p class="is-size-4 has-text-weight-semibold">{{ drive.meal_progress }} / {{ drive.meal_target }}</p>
<p>meals contributed</p>
<a href="#" class="button is-primary mt-2">View Drive</a>
<form
id="delete-drive-{{ drive.drive_id }}"
method="post"
action="{% url 'community_drives:delete_drive' drive.drive_id %}"
>
{% csrf_token %}
<button href="#" class="button is-danger mt-2" onclick="confirmDeleteDrive('{{ drive.drive_id }}')">Delete Drive</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endif %}
{% endfor %}
{% else %}
<p class="box">You have no active community drives.</p>
Expand Down
24 changes: 24 additions & 0 deletions src/community_drives/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,3 +221,27 @@ def test_delete_participation_invalid_method(self):
self.assertEqual(response.status_code, 405)
self.assertEqual(response.json()["success"], False)
self.assertEqual(response.json()["error"], "Invalid request method")

def test_delete_drive_success(self):
url = reverse("community_drives:delete_drive", kwargs={"drive_id": self.drive.drive_id})

response = self.client.post(url)

self.assertEqual(response.status_code, 302) # Expect redirect after success
self.drive.refresh_from_db()
self.assertFalse(self.drive.active) # Ensure the drive is deactivated
drive_orgs = DriveOrganization.objects.filter(drive=self.drive)
for drive_org in drive_orgs:
self.assertEqual(drive_org.meal_pledge, 0)
self.assertEqual(drive_org.volunteer_pledge, 0)

def test_delete_drive_nonexistent(self):
invalid_drive_id = uuid4()
url = reverse("community_drives:delete_drive", kwargs={"drive_id": invalid_drive_id})

response = self.client.post(url)

self.assertEqual(response.status_code, 302) # Expect redirect even if deletion fails
messages = list(response.wsgi_request._messages)
self.assertEqual(len(messages), 1)
self.assertEqual(str(messages[0]), "Failed to delete community drive.")
5 changes: 5 additions & 0 deletions src/community_drives/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,9 @@
views.delete_participation,
name="delete-participation",
),
path(
"delete-drive/<uuid:drive_id>/",
views.delete_drive,
name="delete_drive",
)
]
19 changes: 19 additions & 0 deletions src/community_drives/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from datetime import timezone
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib import messages
Expand Down Expand Up @@ -254,3 +255,21 @@ def delete_participation(request, organization_id, drive_id):
return JsonResponse(
{"success": False, "error": "Invalid request method"}, status=405
)

def delete_drive(request, drive_id):
if request.method == "POST":
try:
drive = CommunityDrive.objects.get(drive_id=drive_id)
drive.active = False
drive.save()
for drive_org in DriveOrganization.objects.filter(drive=drive):
drive_org.meal_pledge = 0
drive_org.volunteer_pledge = 0
drive_org.modified_at = timezone.now()
drive_org.save()

messages.success(request, f"Community drive '{drive}' successfully deleted.")
return redirect("/community_drives")
except:
messages.error(request, "Failed to delete community drive.")
return redirect("/community_drives")
8 changes: 7 additions & 1 deletion src/static/js/drive_list.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('.short-text').forEach(element => {
const maxChars = 300;
if (element.textContent.length > maxChars) {
element.textContent = element.textContent.slice(0, maxChars-3) + ' ...';
element.textContent = element.textContent.slice(0, maxChars - 3) + ' ...';
}
});
});
Expand All @@ -110,6 +110,12 @@ document.addEventListener('DOMContentLoaded', () => {
// document.getElementById(`file-upload-${donationId}`).click();
// }

function confirmDeleteDrive(driveId) {
if (confirm('Are you sure you want to delete this drive?')) {
document.getElementById('delete-form-' + driveId).submit();
}
}

// Handle file upload and send to the server
function uploadDriveImage(inputElement) {
const driveId = inputElement.dataset.id;
Expand Down

0 comments on commit 18ed6d6

Please sign in to comment.