emile 1 year ago
parent d7d01e31b1
commit 098ce2b72c

Binary file not shown.

@ -0,0 +1,23 @@
# Generated by Django 4.2.5 on 2024-01-30 19:40
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('osinacore', '0052_note_project'),
]
operations = [
migrations.CreateModel(
name='PointActivity',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('start_time', models.DateTimeField()),
('end_time', models.DateTimeField()),
('point', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='osinacore.point')),
],
),
]

@ -259,6 +259,13 @@ class Point(models.Model):
time_completed = models.CharField(max_length=200, null=True, blank=True)
class PointActivity(models.Model):
point = models.ForeignKey(Point, on_delete=models.CASCADE, null=True)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
class Status(models.Model):
text = models.TextField(blank=True)

@ -332,9 +332,14 @@ def createtask_project(request, project_id):
@login_required
def create_user_story_task(request):
def create_user_story_task(request, requirement_id):
requirement = get_object_or_404(ProjectRequirement, id=requirement_id)
members_list = list(requirement.project.members.all())
context = {
'requirement' : requirement,
'members_list' : members_list,
}
return render(request, 'add_pages/create-user-story-task.html', context)
@ -829,6 +834,13 @@ def save_task(request):
description = request.POST.get('description')
start_date = request.POST.get('start_date')
end_date = request.POST.get('end_date')
requirement_id = request.POST.get('requirement')
if requirement_id:
requirement = get_object_or_404(ProjectRequirement, id =requirement_id)
else:
requirement = None
project_id = request.POST.get('project')
@ -850,7 +862,8 @@ def save_task(request):
description=description,
start_date=start_date,
end_date=end_date,
assigned_to = assigned_to
assigned_to = assigned_to,
requirement = requirement,
)
@ -860,7 +873,11 @@ def save_task(request):
# Redirect to the task detailed page
task_details_url = reverse('detailed-task', args=[task.task_id])
return HttpResponseRedirect(task_details_url)
if requirement:
return redirect('detailed-project', project_id=project.project_id)
else:
return HttpResponseRedirect(task_details_url)

@ -41,7 +41,7 @@ urlpatterns = [
path('createepic/<str:project_id>/', views.create_epic, name='createepic'),
path('createtask/', views.create_task, name='createtask'),
path('createtask/<str:project_id>/', views.createtask_project, name='createtaskproject'),
path('createuserstorytask/', views.create_user_story_task, name='createuserstorytask'),
path('createuserstorytask/<int:requirement_id>/', views.create_user_story_task, name='createuserstorytask'),
path('createtaskepic/', views.createtask_epic, name='createtaskepic'),
path('projecttypes/', views.project_types, name='projecttypes'),
path('businesstypes/', views.business_types, name='businesstypes'),
@ -107,7 +107,6 @@ urlpatterns = [
#Save Urls
path('save_note/', views.save_note, name='save_note'),
path('save_project_note/', views.save_project_note, name='save_project_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'),

@ -7,108 +7,114 @@
<div class="w-full px-5 s:px-9 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 {{requirement.content}}
</h1>
<div class="w-full flex flex-col gap-5 justify-center items-center mt-5">
<div class="w-full">
<label class="text-gray-500 text-base">Name:</label>
<input type="text" placeholder="Name"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md mt-1">
</div>
<div class="w-full">
<label class="text-gray-500 text-base">User Story:</label>
<select id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="" selected>Predifined</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500 text-base">Epic:</label>
<select id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="" selected>Select Epic</option>
<option value="">Epic 1</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500 text-base">Project:</label>
<select id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="" selected>Predifined</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500 text-base">Status:</label>
<select id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="">Open</option>
<option value="">Working On</option>
<option value="">Closed</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500 text-base">Assigned To:</label>
<select required id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="">Nataly</option>
<option value="">Salim</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500 text-base">Task Description:</label>
<textarea type="text" placeholder="Description..." rows="5" cols="5"
class="w-full py-3 px-3 border border-gray-300 outline-none rounded-md resize-none mt-1"></textarea>
</div>
<form method="POST" action="{% url 'save_task' %}">
{% csrf_token %}
<div class="w-full flex flex-col gap-5 justify-center items-center mt-5">
<div class="w-full">
<label class="text-gray-500">Task Name:</label>
<input required name="name" type="text" placeholder="Name"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md mt-1">
</div>
<div class="w-full">
<label class="text-gray-500">Extra:</label>
<select id=""
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="" selected>No</option>
<option value="">Yes</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500 text-base">User Story:</label>
<select id="" name="requirement"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="{{requirement.id}}" selected >{{requirement.content}}</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500">Start Date:</label>
<input 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 text-base">Epic:</label>
<select id="" name="epic"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="" selected>Select Epic</option>
{% for epic in requirement.project.epic_set.all %}
<option value="{{epic.id}}"selected>{{epic.title}}</option>
{% endfor %}
</select>
</div>
<div class="w-full">
<label class="text-gray-500">End Date:</label>
<input 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 text-base">Project:</label>
<select id="" name="project"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="{{requirement.project.id}}" selected>{{requirement.project.name}}</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500">Documents:</label>
<div class="inbox-box border border-gray-300 w-full rounded-md px-3 mt-1">
<div class="flex items-center justify-between">
<input name="" required type="file" class="file-input" accept=".pdf,.docx" hidden multiple />
<span class="file-name text-gray-500 text-base focus:outline-none outline-none">Upload
Document(s)</span>
<label
class="file-label bg-transparent text-gray-500 border border-white h-14 cursor-pointer flex items-center">
<i class="fa fa-upload" style="font-size: 25px;"></i>
</label>
<div class="w-full">
<label class="text-gray-500">Status:</label>
<select required name="status"
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<option value="Open">Open</option>
<option value="Working On">Working On</option>
<option value="Closed">Closed</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500">Assigned To:</label>
<select name="assigned_to" required
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
{% for staff in members_list %}
<option value="" selected>Select Staff</option>
<option value="{{staff.id}}">{{staff.user.first_name}} {{staff.user.last_name}}</option>
{% endfor %}
</select>
</div>
<div class="w-full">
<label class="text-gray-500">Task Description:</label>
<textarea required name="description" type="text" placeholder="Description..." rows="5" cols="5"
class="w-full py-3 px-3 border border-gray-300 outline-none rounded-md resize-none mt-1"></textarea>
</div>
<div class="w-full">
<label class="text-gray-500">Extra:</label>
<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 mt-1">
<option value="True">Yes</option>
<option value="False" selected>No</option>
</select>
</div>
<div class="w-full">
<label class="text-gray-500">Start Date:</label>
<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 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="w-full">
<label class="text-gray-500">Documents:</label>
<div class="inbox-box border border-gray-300 w-full rounded-md px-3 mt-1">
<div class="flex items-center justify-between">
<input name="" type="file" class="file-input" accept=".pdf,.docx" hidden multiple />
<span class="file-name text-gray-500 text-base focus:outline-none outline-none">Upload
Document(s)</span>
<label
class="file-label bg-transparent text-gray-500 border border-white h-14 cursor-pointer flex items-center">
<i class="fa fa-upload" style="font-size: 25px;"></i>
</label>
</div>
</div>
</div>
</div>
</div>
<div class="w-full flex justify-center items-center mt-3">
<button
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 class="w-full flex justify-center items-center mt-3">
<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>
</form>
</div>
</div>
</div>

@ -297,36 +297,43 @@
<!-- 1st row -->
{% if project.projectrequirement_set.all %}
{% for requirement in project.projectrequirement_set.all %}
<tr>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">{{requirement.content}}</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">-</p>
</td>
<td class="px-6 py-4 text-center text-sm">
<div class="w-full flex justify-center items-center gap-3">
<a href="{% url 'createuserstorytask' %}">
<button
class="w-fit py-2 px-3 bg-green-700 border border-green-700 text-white rounded-md cursor-pointer hover:bg-white hover:text-green-700">Add
Task</button>
</a>
<a href="">
<div class="text-[15px] text-blue-500 cursor-pointer">
<i class="fa fa-edit"></i>
<tr>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">{{requirement.content}}</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
{% if requirement.task_set.all %}
{% for task in requirement.task_set.all %}
<a class="text-blue-500 underline" href="{% url 'detailed-task' task.task_id %}">{{task.name}} <i class="fas fa-angle-double-right"></i></a>
{% endfor %}
{%else%}
<p class="text-slate-800">None</p>
{% endif %}
</td>
<td class="px-6 py-4 text-center text-sm">
<div class="w-full flex justify-center items-center gap-3">
<a href="{% url 'createuserstorytask' requirement.id %}">
<button
class="w-fit py-2 px-3 bg-green-700 border border-green-700 text-white rounded-md cursor-pointer hover:bg-white hover:text-green-700">Add
Task</button>
</a>
<a href="">
<div class="text-[15px] text-blue-500 cursor-pointer">
<i class="fa fa-edit"></i>
</div>
</a>
<div class="text-[15px] text-red-500 cursor-pointer">
<i class="fa fa-trash"></i>
</div>
</a>
<div class="text-[15px] text-red-500 cursor-pointer">
<i class="fa fa-trash"></i>
</div>
</div>
</td>
</tr>
</td>
</tr>
{% endfor %}
{% else %}
<tr>

Loading…
Cancel
Save