daily reports v1

main
emile 2 years ago
parent e9160d278d
commit 3eba807e5d

BIN
.DS_Store vendored

Binary file not shown.

BIN
osinaweb/.DS_Store vendored

Binary file not shown.

Binary file not shown.

@ -33,5 +33,5 @@ admin.site.register(Task)
admin.site.register(Status)
admin.site.register(Tag)
admin.site.register(Point)
admin.site.register(DailyReport)

@ -0,0 +1,24 @@
# Generated by Django 4.2.5 on 2023-09-26 08:39
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('osinacore', '0040_staffprofile_staff_id'),
]
operations = [
migrations.CreateModel(
name='DailyReport',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('text', models.TextField(blank=True)),
('date', models.CharField(max_length=40)),
('time', models.CharField(max_length=40)),
('staff', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dailyreport_staff', to='osinacore.staffprofile')),
],
),
]

@ -265,3 +265,12 @@ class Status(models.Model):
date = models.CharField(max_length=40)
time = models.CharField(max_length=40)
staff = models.ForeignKey(StaffProfile, on_delete=models.CASCADE, null=True,blank=True, related_name='staff')
class DailyReport(models.Model):
text = models.TextField(blank=True)
date = models.CharField(max_length=40)
time = models.CharField(max_length=40)
staff = models.ForeignKey(StaffProfile, on_delete=models.CASCADE, null=True,blank=True, related_name='dailyreport_staff')

@ -10,7 +10,7 @@ from django.http import HttpResponse
from django.db.models import Q
from django.http import JsonResponse
from .models import Task, Epic
from datetime import date
# Pages views
@ -348,9 +348,29 @@ def tags(request):
return render(request, 'tags.html', context)
def daily_reports(request):
dailyreports = DailyReport.objects.all().order_by('-id')
context = {
'dailyreports' : dailyreports,
}
return render(request, 'daily-reports.html', context)
def add_daily_report(request):
user = request.user
today = date.today()
statuses = Status.objects.filter(staff=user.staffprofile, date=today)
context = {
'statuses': statuses,
}
return render(request, 'add-daily-report.html', context)
@ -459,22 +479,8 @@ def staff_position_modal(request):
}
return render(request, 'add-staffposition-modal.html', context)
def daily_reports(request):
context = {
}
return render(request, 'daily-reports.html', context)
def add_daily_report(request):
context = {
}
return render(request, 'add-daily-report.html', context)
@ -961,11 +967,12 @@ def save_point(request):
return render(request, 'addpoint-modal.html')
@login_required
def mark_point_working_on(request, point_id):
point = get_object_or_404(Point, id=point_id)
point.status = 'Working On'
current_datetime = timezone.now()
current_datetime = datetime.now()
point.date_workingon = current_datetime.date()
point.time_workingon = current_datetime.strftime("%I:%M %p")
@ -985,9 +992,9 @@ def mark_point_working_on(request, point_id):
def mark_point_completed(request, point_id):
point = get_object_or_404(Point, id=point_id)
point.status = 'Completed'
current_datetime = timezone.now()
point.date_completed = current_datetime.date()
point.time_completed = current_datetime.strftime("%I:%M %p")
current_datetime = datetime.now()
point.date_workingon = current_datetime.date()
point.time_workingon = current_datetime.strftime("%I:%M %p")
point.save()
@ -1001,6 +1008,34 @@ def mark_point_completed(request, point_id):
return redirect(request, 'showpoints-modal.html')
@login_required
def save_dailyreport(request):
if request.method == 'POST':
text = request.POST.get('text')
current_datetime = datetime.now()
date = datetime.now().date()
time = current_datetime.strftime("%I:%M %p")
try:
staff_profile = StaffProfile.objects.get(user=request.user)
except StaffProfile.DoesNotExist:
# Handle the case where a StaffProfile does not exist for the user
staff_profile = None
dailyreport = DailyReport(
text = text,
date = date,
time = time,
staff = staff_profile
)
dailyreport.save()
return redirect('dailyreports')
# EDIT TEMPLATES
@login_required

@ -90,6 +90,7 @@ urlpatterns = [
path('save_tag/', views.save_tag, name='save_tag'),
path('save_point/', views.save_point, name='save_point'),
path('save_staffposition/', views.save_staffposition, name='save_staffposition'),
path('save_dailyreport/', views.save_dailyreport, name='save_dailyreport'),

@ -7,10 +7,14 @@
<h1 class="text-3xl text-slate-800 text-center font-semibold">
Add Daily Report
</h1>
<form class="mx-auto w-full flex flex-col gap-3 justify-center items-center mt-5" method="POST">
<textarea required name="" type="text" placeholder="Write Your Report Here" rows="10" cols="5"
class="w-full py-3 px-3 border border-gray-300 outline-none rounded-md resize-none"></textarea>
<form class="mx-auto w-full flex flex-col gap-3 justify-center items-center mt-5" method="POST" action="{% url 'save_dailyreport' %}">
{% csrf_token %}
<textarea name="text" required type="text" placeholder="Write Your Report Here" rows="10" cols="5"
class="w-full py-3 px-3 border border-gray-300 outline-none rounded-md resize-none">
{% for status in statuses %}
{{ status.time }} - {{ status.text }}
{% endfor %}
</textarea>
<div class="w-full flex justify-center items-center mt-3">
<button type="submit"

@ -81,6 +81,7 @@
</div>
<!-- DAILY REPORTS -->
{% for report in dailyreports %}
<div class="mt-5 w-full h-fit">
<div class="w-full border-x border-t border-gray-300 rounded-t-md ">
<!-- TABLE HEADER -->
@ -88,8 +89,8 @@
class="w-full flex justify-between items-center h-[60px] border-b border-gray-300 rounded-t-md">
<div class="w-full h-full flex justify-start items-center px-4">
<p class="text-slate-800 text-xl">Report By <span
class="text-blue-500 font-semibold">Nataly.aw</span> On <span
class="text-blue-500 font-semibold">22-9-2023</span></p>
class="text-blue-500 font-semibold">{{report.staff.first_name}} {{report.staff.last_name}}</span> On <span
class="text-blue-500 font-semibold">{{report.date}}</span></p>
</div>
</div>
@ -100,51 +101,17 @@
<div
class="w-full h-full flex justify-start items-center p-4">
<p class="text-gray-600 font-light">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Magni possimus esse ipsa
repellat quia velit ducimus temporibus omnis quibusdam inventore ea, consequuntur
exercitationem molestias. Repellat architecto a laboriosam debitis natus?
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Autem amet dicta
repudiandae possimus? Natus, possimus quae numquam nostrum corporis quidem vitae
necessitatibus perferendis tempore. Praesentium, omnis? Animi non enim sint!
{{report.text}}
</p>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
<div class="mt-5 w-full h-fit">
<div class="w-full border-x border-t border-gray-300 rounded-t-md ">
<!-- TABLE HEADER -->
<div
class="w-full flex justify-between items-center h-[60px] border-b border-gray-300 rounded-t-md">
<div class="w-full h-full flex justify-start items-center px-4">
<p class="text-slate-800 text-xl">Report By <span
class="text-blue-500 font-semibold">Aya.rf</span> On <span
class="text-blue-500 font-semibold">25-9-2023</span></p>
</div>
</div>
<!-- TABLE BODY -->
<div class="w-full">
<!-- 1st row -->
<div class="w-full h-fit flex justify-between items-center border-b border-gray-300">
<div
class="w-full h-full flex justify-start items-center p-4">
<p class="text-gray-600 font-light">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Magni possimus esse ipsa
repellat quia velit ducimus temporibus omnis quibusdam inventore ea, consequuntur
exercitationem molestias. Repellat architecto a laboriosam debitis natus?
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Autem amet dicta
repudiandae possimus? Natus, possimus quae numquam nostrum corporis quidem vitae
necessitatibus perferendis tempore. Praesentium, omnis? Animi non enim sint!
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

Loading…
Cancel
Save