Create task from project done

main
emile 2 years ago
parent 7cfc68a208
commit d1a2929b73

Binary file not shown.

@ -29,5 +29,5 @@ admin.site.register(Project, ProjectAdmin)
admin.site.register(Milestone)
admin.site.register(Epic)
admin.site.register(Note)
admin.site.register(Task)

@ -0,0 +1,28 @@
# Generated by Django 4.2.5 on 2023-09-14 14:59
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('osinacore', '0019_alter_epic_end_date_alter_epic_start_date'),
]
operations = [
migrations.CreateModel(
name='Task',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=250)),
('status', models.CharField(choices=[('Open', 'Open'), ('Working On', 'Working On'), ('Closed', 'Closed')], max_length=200, null=True)),
('extra', models.BooleanField(default=False)),
('description', models.TextField()),
('start_date', models.CharField(max_length=200)),
('end_date', models.CharField(max_length=200)),
('epic', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='osinacore.epic')),
('project', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='osinacore.project')),
],
),
]

@ -158,3 +158,21 @@ class Note(models.Model):
date = models.DateTimeField(null=True,blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True,blank=True)
color = ColorField(default='#FF0000',blank=True)
class Task(models.Model):
name = models.CharField(max_length=250)
project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)
epic = models.ForeignKey(Epic, on_delete=models.CASCADE, null=True)
STATUS_CHOICES = (
('Open', 'Open'),
('Working On', 'Working On'),
('Closed', 'Closed')
)
status = models.CharField(max_length=200, choices=STATUS_CHOICES, null=True)
extra = models.BooleanField(default=False)
description = models.TextField()
start_date = models.CharField(max_length=200)
end_date = models.CharField(max_length=200)

@ -101,9 +101,11 @@ def detailed_project(request, project_id):
@login_required
def createtask_project(request, project_id):
project = get_object_or_404(Project, project_id=project_id)
epics_of_my_project = Epic.objects.filter(project=project)
context = {
'project' : project,
'epics_of_my_project' : epics_of_my_project,
}
return render(request, 'createtask-project.html', context)
@ -127,8 +129,10 @@ def create_project(request):
@login_required
def create_epic(request, project_id):
project = get_object_or_404(Project, project_id=project_id)
context = {
'project' : project,
}
return render(request, 'create-epic.html', context)
@ -328,3 +332,49 @@ def save_epic(request):
# Redirect to the detailed project page
redirect_url = reverse('detailed-project', args=[project.project_id])
return redirect(redirect_url)
@login_required
def save_task(request):
if request.method == 'POST':
name = request.POST.get('name')
status = request.POST.get('status')
project_id = request.POST.get('project')
epic_id = request.POST.get('epic')
extra = request.POST.get('extra')
description = request.POST.get('description')
start_date = request.POST.get('start_date')
end_date = request.POST.get('end_date')
try:
project = Project.objects.get(id=project_id)
except Project.DoesNotExist:
# Handle the case where the project with the provided ID doesn't exist
# You might want to display an error message or redirect to an appropriate page.
pass
try:
epic = Epic.objects.get(id=epic_id)
except Epic.DoesNotExist:
# Handle the case where the epic with the provided ID doesn't exist
# You might want to display an error message or redirect to an appropriate page.
pass
# Create the Task object with the Project and Epic instances
task = Task(
name=name,
status=status,
project=project,
epic=epic,
extra=extra,
description=description,
start_date=start_date,
end_date=end_date
)
# Save the Task object to the database
task.save()
# Redirect to the detailed project page
redirect_url = reverse('detailed-project', args=[project.project_id])
return redirect(redirect_url)

@ -19,7 +19,6 @@ from osinacore import views
from django.contrib.auth.decorators import login_required
urlpatterns = [
# Pages urls
path('admin/', admin.site.urls),
path('login', views.signin, name='signin'),
@ -51,4 +50,5 @@ urlpatterns = [
path('save_note/', views.save_note, name='save_note'),
path('save_project/', views.save_project, name='save_project'),
path('save_epic/', views.save_epic, name='save_epic'),
path('save_task/', views.save_task, name='save_task'),
]

@ -5,7 +5,7 @@
<div class="w-full px-10 mb-4">
<div class="w-full bg-white h-fit shadow-md rounded-md p-5">
<h1 class="text-3xl text-slate-800 text-center font-semibold">
Create Epic for {{project.name}}
Create Epic For {{project.name}}
</h1>
<form class="mx-auto w-full flex flex-col gap-3 justify-center items-center mt-5" method="POST" action="{% url 'save_epic' %}">
{% csrf_token %}

@ -41,7 +41,7 @@
<option value="">No</option>
</select>
<textarea type="text" placeholder="Task Description" rows="5" cols="5"
<textarea type="text" placeholder="Task Description" rows="5" cols="5"
class="w-full py-3 px-3 border border-gray-300 outline-none rounded-md resize-none"></textarea>
<div class="w-full">

@ -7,59 +7,62 @@
<div class="w-full px-10 mb-4">
<div class="w-full h-full shadow-md rounded-md mt-5 py-5 px-3 bg-white">
<h1 class="text-3xl text-slate-800 text-center font-semibold">
Create Task
Create Task For {{project.name}}
</h1>
<div class="w-full flex flex-col gap-3 justify-center items-center mt-5">
<input type="text" placeholder="Task Name"
<form class="w-full flex flex-col gap-3 justify-center items-center mt-5" method="POST" action="{% url 'save_task' %}">
{% csrf_token %}
<input required name="name" type="text" placeholder="Task Name"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md">
<select id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 cursor-not-allowed" disabled>
<option value="" selected disabled>{{project.name}}</option>
<select required name="project" id=""
class="hidden w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500">
<option value="{{project.id}}">{{project.name}}</option>
</select>
<select id=""
<select required name="epic" id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500">
<option value="" selected disabled>Select Epic</option>
<option value="">Epic 1</option>
<option value="">Epic 2</option>
<option value="">Epic 3</option>
{% for epic in epics_of_my_project %}
<option value="{{epic.id}}">{{epic.title}}</option>
{% endfor %}
</select>
<select id=""
<select required name="status" id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500">
<option value="" selected disabled>Status</option>
<option value="">Open</option>
<option value="">Working On</option>
<option value="">Closed</option>
<option value="Open">Open</option>
<option value="Working On">Working On</option>
<option value="Closed">Closed</option>
</select>
<select id=""
<select required name="extra" id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500">
<option value="" selected disabled>Extra</option>
<option value="">Yes</option>
<option value="">No</option>
<option value="True">Yes</option>
<option value="False">No</option>
</select>
<textarea type="text" placeholder="Task Description" rows="5" cols="5"
<textarea required name="description" type="text" placeholder="Task Description" rows="5" cols="5"
class="w-full py-3 px-3 border border-gray-300 outline-none rounded-md resize-none"></textarea>
<div class="w-full">
<label class="text-gray-500">Start Date:</label>
<input type="date" id="date" name="date"
<input required name="start_date" type="date" id="date" name="date"
class="w-full p-3 border border-gray-300 rounded-md bg-transparent outline-none mt-1">
</div>
<div class="w-full">
<label class="text-gray-500">End Date:</label>
<input type="date" id="date" name="date"
<input required name="end_date" type="date" id="date" name="date"
class="w-full p-3 border border-gray-300 rounded-md bg-transparent outline-none mt-1">
</div>
<div class="inbox-box border border-gray-300 py-1 px-3 w-full rounded-md">
<div class="flex items-center justify-between">
<input required name="cv" type="file" id="actual-btn" accept=".pdf,.docx" hidden multiple />
<input name="cv" type="file" id="actual-btn" accept=".pdf,.docx" hidden multiple />
<span id="file-name" class="text-gray-500 text-base focus:outline-none outline-none">Upload
Document(s)</span>
<label for="actual-btn"
@ -86,11 +89,11 @@
</script>
<div class="w-full flex justify-center items-center mt-3">
<button
<button type="submit"
class="w-fit py-1 px-3 bg-blue-500 rounded-md outline-none text-white border border-blue-500 text-xl cursor-pointer hover:bg-white hover:text-blue-500">Add
Task</button>
</div>
</div>
</form>
</div>
</div>

@ -463,99 +463,6 @@
</div>
</div>
<!-- TASK 2 -->
<div class="w-full bg-white h-fit rounded-md border border-gray-300 mt-3">
<!-- TABLE HEADER -->
<div class="w-full flex h-[70px] rounded-t-md">
<div
class="w-[55%] flex justify-center items-center border-r border-b border-gray-300 bg-green-700 rounded-tl-md">
<p class="text-xl text-white">Task Name</p>
</div>
<div class="w-[15%] flex justify-center items-center border-r border-b border-gray-300">
<p class="text-xl text-slate-700">Open</p>
</div>
<div class="w-[15%] flex justify-center items-center border-r border-b border-gray-300">
<p class="text-xl text-slate-700">1/2/2021</p>
</div>
<div class="w-[15%] flex justify-center items-center border-b border-gray-300">
<p class="text-xl text-slate-700">1/2/2022</p>
</div>
</div>
<!-- TABLE BODY -->
<div class="w-full h-fit flex">
<!-- LEFT SIDE OF TABLE BODY -->
<div class="w-[55%] h-fit bg-white p-3 rounded-bl-md">
<!-- 1st row -->
<div class="w-full flex flex-col gap-2">
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Project:</p>
<p class="text-slate-700 text-base">Osina Project</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Epic:</p>
<p class="text-slate-700 text-base">epic</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Assigned To:</p>
<p class="text-slate-700 text-base">Nataly</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Files:</p>
<p class="text-slate-700 text-base">Documentation.pdf, Project.doc
</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Tags:</p>
<p class="text-slate-700 text-base">Live Streaming, Media Streaming
</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Extra:</p>
<p class="text-slate-700 text-base">Yes</p>
</div>
</div>
</div>
<!-- RIGHT SIDE OF TABLE BODY -->
<div class="w-[45%] h-fit bg-white flex flex-wrap justify-start rounded-br-md">
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Close</button>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500"
id="updateStatusButton">Update
Status</button>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500"
id="addTimeButton">Add
Time</button>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-red-500 text-white"
id="deleteTaskButton">Delete</button>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-blue-500 text-white">Update</button>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500"
id="showPointsButton">Show
Points</button>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500"
id="addPointButton">Add
Point</button>
<a href="./task-details.html" class="w-[33.33%]">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Details</button>
</a>
<button
class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500 rounded-br-md"
id="timelineButton">Timline</button>
</div>
</div>
</div>
</div>
</div>

Loading…
Cancel
Save