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) 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): class Status(models.Model):
text = models.TextField(blank=True) text = models.TextField(blank=True)

@ -332,9 +332,14 @@ def createtask_project(request, project_id):
@login_required @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 = { context = {
'requirement' : requirement,
'members_list' : members_list,
} }
return render(request, 'add_pages/create-user-story-task.html', context) return render(request, 'add_pages/create-user-story-task.html', context)
@ -829,6 +834,13 @@ def save_task(request):
description = request.POST.get('description') description = request.POST.get('description')
start_date = request.POST.get('start_date') start_date = request.POST.get('start_date')
end_date = request.POST.get('end_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') project_id = request.POST.get('project')
@ -850,7 +862,8 @@ def save_task(request):
description=description, description=description,
start_date=start_date, start_date=start_date,
end_date=end_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 # Redirect to the task detailed page
task_details_url = reverse('detailed-task', args=[task.task_id]) 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('createepic/<str:project_id>/', views.create_epic, name='createepic'),
path('createtask/', views.create_task, name='createtask'), path('createtask/', views.create_task, name='createtask'),
path('createtask/<str:project_id>/', views.createtask_project, name='createtaskproject'), 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('createtaskepic/', views.createtask_epic, name='createtaskepic'),
path('projecttypes/', views.project_types, name='projecttypes'), path('projecttypes/', views.project_types, name='projecttypes'),
path('businesstypes/', views.business_types, name='businesstypes'), path('businesstypes/', views.business_types, name='businesstypes'),
@ -107,7 +107,6 @@ urlpatterns = [
#Save Urls #Save Urls
path('save_note/', views.save_note, name='save_note'), path('save_note/', views.save_note, name='save_note'),
path('save_project_note/', views.save_project_note, name='save_project_note'), path('save_project_note/', views.save_project_note, name='save_project_note'),
path('save_project/', views.save_project, name='save_project'), path('save_project/', views.save_project, name='save_project'),
path('save_epic/', views.save_epic, name='save_epic'), path('save_epic/', views.save_epic, name='save_epic'),
path('save_task/', views.save_task, name='save_task'), 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 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"> <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"> <h1 class="text-3xl text-slate-800 text-center font-semibold">
Create Task Create Task for {{requirement.content}}
</h1> </h1>
<div class="w-full flex flex-col gap-5 justify-center items-center mt-5"> <form method="POST" action="{% url 'save_task' %}">
<div class="w-full"> {% csrf_token %}
<label class="text-gray-500 text-base">Name:</label> <div class="w-full flex flex-col gap-5 justify-center items-center mt-5">
<input type="text" placeholder="Name" <div class="w-full">
class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md mt-1"> <label class="text-gray-500">Task Name:</label>
</div> <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 class="w-full"> </div>
<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>
<div class="w-full"> <div class="w-full">
<label class="text-gray-500">Extra:</label> <label class="text-gray-500 text-base">User Story:</label>
<select id="" <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"> 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="{{requirement.id}}" selected >{{requirement.content}}</option>
<option value="">Yes</option> </select>
</select> </div>
</div>
<div class="w-full"> <div class="w-full">
<label class="text-gray-500">Start Date:</label> <label class="text-gray-500 text-base">Epic:</label>
<input type="date" id="date" name="date" <select id="" name="epic"
class="w-full p-3 border border-gray-300 rounded-md bg-transparent outline-none mt-1"> class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
</div> <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"> <div class="w-full">
<label class="text-gray-500">End Date:</label> <label class="text-gray-500 text-base">Project:</label>
<input type="date" id="date" name="date" <select id="" name="project"
class="w-full p-3 border border-gray-300 rounded-md bg-transparent outline-none mt-1"> class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
</div> <option value="{{requirement.project.id}}" selected>{{requirement.project.name}}</option>
</select>
</div>
<div class="w-full"> <div class="w-full">
<label class="text-gray-500">Documents:</label> <label class="text-gray-500">Status:</label>
<div class="inbox-box border border-gray-300 w-full rounded-md px-3 mt-1"> <select required name="status"
<div class="flex items-center justify-between"> class="w-full h-[50px] py-1 px-3 border border-gray-300 outline-none rounded-md text-gray-500 mt-1">
<input name="" required type="file" class="file-input" accept=".pdf,.docx" hidden multiple /> <option value="Open">Open</option>
<span class="file-name text-gray-500 text-base focus:outline-none outline-none">Upload <option value="Working On">Working On</option>
Document(s)</span> <option value="Closed">Closed</option>
<label </select>
class="file-label bg-transparent text-gray-500 border border-white h-14 cursor-pointer flex items-center"> </div>
<i class="fa fa-upload" style="font-size: 25px;"></i>
</label> <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>
</div> <div class="w-full flex justify-center items-center mt-3">
<button type="submit"
<div class="w-full flex justify-center items-center mt-3"> 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
<button Task</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 </div>
Task</button> </form>
</div>
</div> </div>
</div> </div>
</div> </div>

@ -297,36 +297,43 @@
<!-- 1st row --> <!-- 1st row -->
{% if project.projectrequirement_set.all %} {% if project.projectrequirement_set.all %}
{% for requirement in project.projectrequirement_set.all %} {% for requirement in project.projectrequirement_set.all %}
<tr> <tr>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300"> <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">{{requirement.content}}</p> <p class="text-slate-800">{{requirement.content}}</p>
</td> </td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300"> <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">-</p> {% if requirement.task_set.all %}
</td> {% 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 %}
<td class="px-6 py-4 text-center text-sm"> {%else%}
<div class="w-full flex justify-center items-center gap-3"> <p class="text-slate-800">None</p>
<a href="{% url 'createuserstorytask' %}"> {% endif %}
<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 </td>
Task</button>
</a>
<td class="px-6 py-4 text-center text-sm">
<a href=""> <div class="w-full flex justify-center items-center gap-3">
<div class="text-[15px] text-blue-500 cursor-pointer"> <a href="{% url 'createuserstorytask' requirement.id %}">
<i class="fa fa-edit"></i> <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> </div>
</a>
<div class="text-[15px] text-red-500 cursor-pointer">
<i class="fa fa-trash"></i>
</div> </div>
</div> </td>
</td> </tr>
</tr>
{% endfor %} {% endfor %}
{% else %} {% else %}
<tr> <tr>

Loading…
Cancel
Save