emile 11 months ago
parent ad7df1b4bb
commit cbc38b466e

Binary file not shown.

@ -29,7 +29,7 @@ urlpatterns = [
path('dailyreport/', views.add_daily_report, name='adddailyreport'), path('dailyreport/', views.add_daily_report, name='adddailyreport'),
path('department/', views.add_department_modal, name='adddepartmentmodal'), path('department/', views.add_department_modal, name='adddepartmentmodal'),
path('projecttype/', views.add_projecttype_modal, name='addprojecttypemodal'), path('projecttype/', views.add_projecttype_modal, name='addprojecttypemodal'),
path('staffposition/', views.add_staffposition_modal, name='addstaffpositionmodal'), path('jobposition/', views.add_jobposition_modal, name='addjobpositionmodal'),
path('businesstype/', views.add_businesstype_modal, name='addbusinesstypemodal'), path('businesstype/', views.add_businesstype_modal, name='addbusinesstypemodal'),
path('reference/', views.add_reference_modal, name='addreferencemodal'), path('reference/', views.add_reference_modal, name='addreferencemodal'),
path('tag/', views.add_tag_modal, name='addtagmodal'), path('tag/', views.add_tag_modal, name='addtagmodal'),

@ -550,25 +550,25 @@ def add_projecttype_modal(request, *args, **kwargs):
@staff_login_required @staff_login_required
def add_staffposition_modal(request): def add_jobposition_modal(request):
departments = Department.objects.all().order_by('name') departments = Department.objects.all().order_by('name')
if request.method == 'POST': if request.method == 'POST':
name = request.POST.get('name') name = request.POST.get('name')
staffposition = StaffPosition( jobposition = JobPosition(
name=name, name=name,
department=get_object_or_404( department=get_object_or_404(
Department, id=request.POST.get('department')) Department, id=request.POST.get('department'))
) )
staffposition.save() jobposition.save()
# Reload the parent page # Reload the parent page
return HttpResponse('<script>window.top.location.reload();</script>') return HttpResponse('<script>window.top.location.reload();</script>')
context = { context = {
'departments': departments, 'departments': departments,
} }
return render(request, 'add_templates/add-staffposition-modal.html', context) return render(request, 'add_templates/add-jobposition-modal.html', context)
@staff_login_required @staff_login_required

@ -49,5 +49,6 @@ admin.site.register(BusinessType)
admin.site.register(PointActivity) admin.site.register(PointActivity)
admin.site.register(Connection) admin.site.register(Connection)
admin.site.register(Reaction) admin.site.register(Reaction)
admin.site.register(JobPosition)
admin.site.register(StaffPosition) admin.site.register(StaffPosition)

@ -16,7 +16,7 @@ urlpatterns = [
path('epic/', views.edit_epic, name='editepic'), path('epic/', views.edit_epic, name='editepic'),
path('department/<int:department_id>/', views.edit_department, name='editdepartment'), path('department/<int:department_id>/', views.edit_department, name='editdepartment'),
path('projecttype/<int:projecttype_id>/', views.edit_project_type, name='editprojecttype'), path('projecttype/<int:projecttype_id>/', views.edit_project_type, name='editprojecttype'),
path('staffposition/<int:staffposition_id>/', views.edit_staff_position, name='editstaffposition'), path('jobposition/<int:jobposition_id>/', views.edit_job_position, name='editjobposition'),
path('businesstype/<int:businesstype_id>/', views.edit_business_type, name='editbusinesstype'), path('businesstype/<int:businesstype_id>/', views.edit_business_type, name='editbusinesstype'),
path('reference/<int:reference_id>/', views.edit_reference, name='editreference'), path('reference/<int:reference_id>/', views.edit_reference, name='editreference'),
path('tag/<int:tag_id>/', views.edit_tag, name='edittag'), path('tag/<int:tag_id>/', views.edit_tag, name='edittag'),

@ -363,19 +363,19 @@ def edit_project_type(request, projecttype_id):
@staff_login_required @staff_login_required
def edit_staff_position(request, staffposition_id): def edit_job_position(request, jobposition_id):
staffposition = get_object_or_404(StaffPosition, id=staffposition_id) jobposition = get_object_or_404(JobPosition, id=jobposition_id)
departments = Department.objects.all().order_by('name') departments = Department.objects.all().order_by('name')
if request.method == 'POST': if request.method == 'POST':
staffposition.name = request.POST.get('name') jobposition.name = request.POST.get('name')
staffposition.department = get_object_or_404(Department, id=request.POST.get('department')) jobposition.department = get_object_or_404(Department, id=request.POST.get('department'))
staffposition.save() jobposition.save()
return redirect('staffpositions') return redirect('jobpositions')
return render(request, 'edit_templates/edit-staff-position.html', {'staffposition': staffposition,'departments': departments}) return render(request, 'edit_templates/edit-job-position.html', {'jobposition': jobposition,'departments': departments})

@ -0,0 +1,21 @@
# Generated by Django 4.2.5 on 2024-06-20 12:26
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('osinacore', '0082_pinnedproject'),
]
operations = [
migrations.RenameModel(
old_name='StaffPosition',
new_name='JobPosition',
),
migrations.RemoveField(
model_name='staffprofile',
name='staff_position',
),
]

@ -0,0 +1,23 @@
# Generated by Django 4.2.5 on 2024-06-20 12:30
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('osinacore', '0083_rename_staffposition_jobposition_and_more'),
]
operations = [
migrations.CreateModel(
name='StaffPosition',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateField()),
('position', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='osinacore.jobposition')),
('staff', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.staffprofile')),
],
),
]

@ -7,9 +7,6 @@ from django.utils import timezone
from django.db.models import Sum, F from django.db.models import Sum, F
from datetime import timedelta from datetime import timedelta
# Create your models here. # Create your models here.
class Reference(models.Model): class Reference(models.Model):
@ -19,8 +16,6 @@ class Reference(models.Model):
return self.name return self.name
class Tag(models.Model): class Tag(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
def __str__(self): def __str__(self):
@ -33,8 +28,6 @@ class BusinessType(models.Model):
return self.name return self.name
class CustomerProfile(models.Model): class CustomerProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True) user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True)
mobile_number = models.CharField(max_length=50, blank=True) mobile_number = models.CharField(max_length=50, blank=True)
@ -96,9 +89,14 @@ class Department(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
def __str__(self): def __str__(self):
return self.name return self.name
def get_staff(self):
# Retrieve all staff profiles associated with positions in this department
staff_profiles = StaffProfile.objects.filter(staffposition__position__department=self)
return staff_profiles
class StaffPosition(models.Model):
class JobPosition(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True) department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True)
def __str__(self): def __str__(self):
@ -111,7 +109,6 @@ class StaffProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE) user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to='uploaded_images', null=True, blank=True) image = models.ImageField(upload_to='uploaded_images', null=True, blank=True)
mobile_number = models.CharField(max_length=50) mobile_number = models.CharField(max_length=50)
staff_position = models.ForeignKey(StaffPosition, on_delete=models.SET_NULL, null=True, blank=True)
intern = models.BooleanField(default=False) intern = models.BooleanField(default=False)
active = models.BooleanField(default=True) active = models.BooleanField(default=True)
staff_id = models.CharField(max_length=20, null=True, blank=True) # Allow null and blank for initial creation staff_id = models.CharField(max_length=20, null=True, blank=True) # Allow null and blank for initial creation
@ -129,6 +126,12 @@ class StaffProfile(models.Model):
class StaffPosition(models.Model):
staff = models.ForeignKey(StaffProfile, on_delete=models.CASCADE)
position = models.ForeignKey(JobPosition, null=True, on_delete=models.SET_NULL)
date = models.DateField()
class ProjectType(models.Model): class ProjectType(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True) department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True)
@ -372,7 +375,6 @@ class Reaction(models.Model):
class DailyReport(models.Model): class DailyReport(models.Model):
text = models.TextField(blank=True) text = models.TextField(blank=True)
date = models.CharField(max_length=40) date = models.CharField(max_length=40)

@ -373,10 +373,10 @@
</a> </a>
<a href="{% url 'staffpositions' %}"> <a href="{% url 'jobpositions' %}">
<div <div
class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer"> class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer">
<p class="text-white">Staff Positions</p> <p class="text-white">Job Positions</p>
</div> </div>
</a> </a>
@ -683,10 +683,10 @@
</a> </a>
<a href="{% url 'staffpositions' %}"> <a href="{% url 'jobpositions' %}">
<div <div
class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer"> class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer">
<p class="text-white">Staff Positions</p> <p class="text-white">Job Positions</p>
</div> </div>
</a> </a>

@ -13,9 +13,9 @@
</head> </head>
<body class="font-poppinsLight"> <body class="font-poppinsLight">
<form id="hiddenContent" method="POST" action="{% url 'addstaffpositionmodal' %}"> <form id="hiddenContent" method="POST" action="{% url 'addjobpositionmodal' %}">
{% csrf_token %} {% csrf_token %}
<h1 class="text-secondosiblue text-2xl font-semibold text-center">Add Staff Position</h1> <h1 class="text-secondosiblue text-2xl font-semibold text-center">Add Job Position</h1>
<div class="w-full flex justify-center items-center"> <div class="w-full flex justify-center items-center">
<input name="name" type="text" placeholder="Position Name" <input name="name" type="text" placeholder="Position Name"

@ -5,15 +5,15 @@
<div class="w-full px-5 s:px-9 mb-5"> <div class="w-full px-5 s:px-9 mb-5">
<div class="w-full h-full shadow-md rounded-md py-5 px-3 bg-white"> <div class="w-full h-full shadow-md rounded-md py-5 px-3 bg-white">
<h1 class="text-3xl text-secondosiblue text-center font-semibold"> <h1 class="text-3xl text-secondosiblue text-center font-semibold">
Edit Staff Position Edit Job Position
</h1> </h1>
<form id="hiddenContent" method="POST" action="{% url 'editstaffposition' staffposition.id %}"> <form id="hiddenContent" method="POST" action="{% url 'editjobposition' jobposition.id %}">
{% csrf_token %} {% csrf_token %}
<div class="w-full flex flex-col gap-5 justify-center items-center"> <div class="w-full flex flex-col gap-5 justify-center items-center">
<div class="w-full"> <div class="w-full">
<label class="text-gray-500">Staff Position:</label> <label class="text-gray-500">Job Position:</label>
<input name="name" type="text" value="{{staffposition.name}}" <input name="name" type="text" value="{{jobposition.name}}"
class="w-full p-3 border border-gray-300 rounded-md bg-transparent outline-none mt-1" required> class="w-full p-3 border border-gray-300 rounded-md bg-transparent outline-none mt-1" required>
<div class="w-full mt-5"> <div class="w-full mt-5">
@ -21,7 +21,7 @@
<select name="department" <select name="department"
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">
{% for department in departments %} {% for department in departments %}
<option value="{{ department.id }}" {% if department.id == staffposition.department.id %} selected {% endif %}>{{ department.name }}</option> <option value="{{ department.id }}" {% if department.id == jobposition.department.id %} selected {% endif %}>{{ department.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
</div> </div>

@ -24,8 +24,8 @@
<div class="w-full s:w-fit"> <div class="w-full s:w-fit">
<button <button
class="w-full s:w-fit text-base px-3 py-2 bg-osiblue text-white outline-none border border-osiblue rounded-md cursor-pointer hover:bg-white hover:text-osiblue duration-300 addStaffPositionButton" class="w-full s:w-fit text-base px-3 py-2 bg-osiblue text-white outline-none border border-osiblue rounded-md cursor-pointer hover:bg-white hover:text-osiblue duration-300 addStaffPositionButton"
data-modal-url="{% url 'addstaffpositionmodal' %}">Add data-modal-url="{% url 'addjobpositionmodal' %}">Add
Staff Position</button> Job Position</button>
</div> </div>
</div> </div>
@ -51,7 +51,7 @@
<!-- TABLE BODY --> <!-- TABLE BODY -->
<tbody class="bg-white divide-y divide-gray-200"> <tbody class="bg-white divide-y divide-gray-200">
<!-- 1st row --> <!-- 1st row -->
{% for position in staffpositions %} {% for position in jobpositions %}
<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-secondosiblue">{{position.name}}</p> <p class="text-secondosiblue">{{position.name}}</p>
@ -61,7 +61,7 @@
</td> </td>
<td class="px-6 py-4 text-center text-sm"> <td class="px-6 py-4 text-center text-sm">
<div class="flex justify-center items-center gap-3"> <div class="flex justify-center items-center gap-3">
<a href="{% url 'editstaffposition' position.id %}"> <a href="{% url 'editjobposition' position.id %}">
<div class="cursor-pointer"> <div class="cursor-pointer">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-[18px] text-fifthosiblue hover:scale-110 duration-500 transition-transform"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-[18px] text-fifthosiblue hover:scale-110 duration-500 transition-transform">
<path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10" /> <path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10" />

@ -421,10 +421,10 @@
</a> </a>
<a href="{% url 'staffpositions' %}"> <a href="{% url 'jobpositions' %}">
<div <div
class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer"> class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer">
<p class="text-white">Staff Positions</p> <p class="text-white">Job Positions</p>
</div> </div>
</a> </a>
@ -746,10 +746,10 @@
</a> </a>
<a href="{% url 'staffpositions' %}"> <a href="{% url 'jobpositions' %}">
<div <div
class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer"> class="w-full flex justify-start items-center gap-3 text-white border-b border-slate-600 py-2 cursor-pointer">
<p class="text-white">Staff Positions</p> <p class="text-white">Job Positions</p>
</div> </div>
</a> </a>

@ -48,7 +48,7 @@ urlpatterns = [
path('dailyreports/', views.daily_reports, name='dailyreports'), path('dailyreports/', views.daily_reports, name='dailyreports'),
path('departments/', views.departments, name='departments'), path('departments/', views.departments, name='departments'),
path('projecttypes/', views.project_types, name='projecttypes'), path('projecttypes/', views.project_types, name='projecttypes'),
path('staffpositions/', views.staff_positions, name='staffpositions'), path('jobpositions/', views.job_positions, name='jobpositions'),
path('businesstypes/', views.business_types, name='businesstypes'), path('businesstypes/', views.business_types, name='businesstypes'),
path('references/', views.references, name='references'), path('references/', views.references, name='references'),
path('tags/', views.tags, name='tags'), path('tags/', views.tags, name='tags'),

@ -495,17 +495,17 @@ def project_types(request):
@staff_login_required @staff_login_required
def staff_positions(request): def job_positions(request):
staffpositions = StaffPosition.objects.all().order_by('-id') jobpositions = JobPosition.objects.all().order_by('-id')
context = { context = {
'staffpositions' : staffpositions, 'jobpositions' : jobpositions,
} }
return render(request, 'listing_pages/staff-positions.html', context) return render(request, 'listing_pages/job-positions.html', context)
@staff_login_required @staff_login_required

Loading…
Cancel
Save