diff --git a/base/announcement.py b/base/announcement.py
index c83914289..5dd5948de 100644
--- a/base/announcement.py
+++ b/base/announcement.py
@@ -1,4 +1,4 @@
-from django.http import HttpResponse, JsonResponse
+from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import redirect, render
from base.forms import AnnouncementForm, AnnouncementcommentForm
from base.models import Announcement, AnnouncementComment
@@ -123,7 +123,7 @@ def delete_announcement(request, anoun_id):
announcement = Announcement.objects.filter(id=anoun_id)
announcement.delete()
messages.success(request, _("Announcement deleted successfully."))
- return redirect(announcement_view)
+ return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
@login_required
@@ -249,3 +249,13 @@ def comment_view(request, anoun_id):
{"comments": comments, "no_comments": no_comments},
)
+
+@login_required
+def announcement_single_view(request, anoun_id):
+
+ """
+ This method is used to render single announcemnts.
+ """
+
+ announcement = Announcement.objects.filter(id=anoun_id)
+ return render(request, "announcement/announcement_one.html", {'announcements': announcement})
diff --git a/base/forms.py b/base/forms.py
index b9404fe21..58a432eb3 100644
--- a/base/forms.py
+++ b/base/forms.py
@@ -22,6 +22,7 @@ from employee.models import Employee, EmployeeTag
from base.models import (
Announcement,
AnnouncementComment,
+ AnnouncementExpire,
Attachment,
Company,
Department,
@@ -1656,6 +1657,7 @@ class AnnouncementForm(ModelForm):
excluded_fields = ['created_on']
widgets = {
"description": forms.Textarea(attrs={"data-summernote": ""}),
+ "expire_date": DateInput(attrs={"type": "date"}),
}
@@ -1696,3 +1698,15 @@ class AnnouncementcommentForm(ModelForm):
model = AnnouncementComment
fields = ('comment',)
+class AnnouncementExpireForm(ModelForm):
+ """
+ Announcement Expire form
+ """
+
+ class Meta:
+ """
+ Meta class for additional options
+ """
+
+ model = AnnouncementExpire
+ fields = ('days',)
\ No newline at end of file
diff --git a/base/models.py b/base/models.py
index cb2b67c5f..65b7f856a 100644
--- a/base/models.py
+++ b/base/models.py
@@ -1170,6 +1170,15 @@ class Attachment(models.Model):
def __str__(self):
return self.file.name
+
+class AnnouncementExpire(models.Model):
+ """
+ This model for setting a expire days for announcement if no expire date for announcement
+ """
+ days = models.IntegerField(null=True, blank = True, default = 30)
+
+
+
class Announcement(models.Model):
"""
@@ -1179,6 +1188,7 @@ class Announcement(models.Model):
description = models.TextField(null=True)
attachments = models.ManyToManyField(Attachment, related_name='announcement_attachments', blank=True)
created_on = models.DateTimeField(auto_now_add=True)
+ expire_date = models.DateField(null=True, blank=True)
department = models.ManyToManyField(Department, blank=True)
job_position = models.ManyToManyField(JobPosition, blank=True)
diff --git a/base/templates/announcement/announcement.html b/base/templates/announcement/announcement.html
index ca43ab082..bd5bdfea3 100644
--- a/base/templates/announcement/announcement.html
+++ b/base/templates/announcement/announcement.html
@@ -1,4 +1,4 @@
-{% extends "index.html" %}
+{% comment %} {% extends "index.html" %} {% endcomment %}
{% load i18n %}
{% load static %}
{% load basefilters %}
@@ -8,32 +8,34 @@
-
-
-
-
-
-
+ {% if perms.announcemnt.add_announcemnt or request.user|is_reportingmanager %}
+
+
+
+
+
+
+
+
-
+ {% endif %}
+
-
-
{% if perms.announcemnt.add_announcemnt or request.user|is_reportingmanager %}
-
-
-
+
+
+
{% endif %}
@@ -128,7 +130,7 @@
{% endif %}
{% if attachment.file.url|slice:"-4:" == '.png' or attachment.file.url|slice:"-4:" == '.jpg' or attachment.file.url|slice:"-5:" == '.jpeg' or attachment.file.url|slice:"-4:" == '.gif' or attachment.file.url|slice:"-4:" == '.bmp' or attachment.file.url|slice:"-5:" == '.webp' or attachment.file.url|slice:"-5:" == '.tiff' or attachment.file.url|slice:"-4:" == '.tif' or attachment.file.url|slice:"-4:" == '.svg' %}
- 
+

{% else %}
@@ -158,21 +160,9 @@
{% endfor %} {% endcomment %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
{% endfor %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/base/templates/announcement/announcement_one.html b/base/templates/announcement/announcement_one.html
new file mode 100644
index 000000000..6dd40114d
--- /dev/null
+++ b/base/templates/announcement/announcement_one.html
@@ -0,0 +1,131 @@
+{% load i18n %}
+{% load static %}
+{% load basefilters %}
+
+
+
+
+ {% trans "Announcement." %}
+
+
+
+
+{% for anoun in announcements %}
+
+
+ {% if perms.base.change_announcement or perms.base.delete_announcement %}
+
+
+
+
+ {% endif %}
+
+
+
+
+
{{ anoun.description|safe }}
+
+
+ {% if anoun.department.all %}
+
+ {% endif %}
+
+ {% if anoun.job_position.all %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% endfor %}
\ No newline at end of file
diff --git a/base/templates/announcement/expiry_day.html b/base/templates/announcement/expiry_day.html
new file mode 100644
index 000000000..1b37e0de7
--- /dev/null
+++ b/base/templates/announcement/expiry_day.html
@@ -0,0 +1,19 @@
+{% load i18n %}
+
+
+
diff --git a/base/templates/base/general_settings.html b/base/templates/base/general_settings.html
new file mode 100644
index 000000000..cba2dbae0
--- /dev/null
+++ b/base/templates/base/general_settings.html
@@ -0,0 +1,6 @@
+{% extends 'settings.html' %} {% block settings %}{% load i18n %}
+
+
+{% include "announcement/expiry_day.html" %}
+
+{% endblock settings %}
\ No newline at end of file
diff --git a/base/urls.py b/base/urls.py
index f0c5bd259..3fff200ce 100644
--- a/base/urls.py
+++ b/base/urls.py
@@ -524,6 +524,7 @@ urlpatterns = [
name="delete-notifications",
),
path("settings/currency/", views.settings, name="currency-settings"),
+ path("settings/general-settings/", views.general_settings, name="general-settings"),
path("settings/date-settings/", views.date_settings, name="date-settings"),
path("settings/save-date/", views.save_date_format, name="save_date_format"),
path("settings/get-date-format/", views.get_date_format, name="get-date-format"),
@@ -725,7 +726,7 @@ urlpatterns = [
path('pagination-settings-view',views.pagination_settings_view,name="pagination-settings-view"),
- path(
+ path(
"announcement/",
announcement.announcement_view, name="announcement"
),
@@ -751,5 +752,9 @@ urlpatterns = [
announcement.comment_view,
name="announcement-view-comment",
),
+ path(
+ "announcement-single-view/",
+ announcement.announcement_single_view, name="announcement-single-view"
+ ),
]
diff --git a/base/views.py b/base/views.py
index 0aac51df3..f285296b0 100644
--- a/base/views.py
+++ b/base/views.py
@@ -39,6 +39,7 @@ from base.decorators import (
)
from base.methods import closest_numbers, export_data, get_pagination
from base.forms import (
+ AnnouncementExpireForm,
AuditTagForm,
CompanyForm,
DepartmentForm,
@@ -76,6 +77,8 @@ from base.forms import (
WorktyperequestcommentForm,
)
from base.models import (
+ Announcement,
+ AnnouncementExpire,
Company,
DynamicEmailConfiguration,
DynamicPagination,
@@ -388,10 +391,22 @@ def home(request):
},
)
+ announcement_list = Announcement.objects.all().order_by('-created_on')
+ general_expire = AnnouncementExpire.objects.all().first()
+ general_expire_date = 30 if not general_expire else general_expire.days
+
+ for announcement in announcement_list:
+ if announcement.expire_date is None:
+ calculated_expire_date = announcement.created_on + timedelta(days=general_expire_date)
+ announcement.expire_date = calculated_expire_date
+
context = {
"first_day_of_week": first_day_of_week.strftime("%Y-%m-%d"),
"last_day_of_week": last_day_of_week.strftime("%Y-%m-%d"),
"employees_with_pending": employees_with_pending,
+ "announcement" : announcement_list,
+ "general_expire_date":general_expire_date,
+
}
return render(request, "index.html", context)
@@ -3220,6 +3235,23 @@ def settings(request):
return render(request, "payroll/settings/payroll_settings.html", {"form": form})
+
+@login_required
+def general_settings(request):
+ """
+ This method is used to render settings template
+ """
+ instance = AnnouncementExpire.objects.first()
+ form = AnnouncementExpireForm(instance=instance)
+ if request.method == "POST":
+ form = AnnouncementExpireForm(request.POST, instance=instance)
+ if form.is_valid():
+ form.save()
+ messages.success(request, _("Settings updated."))
+ return render(request, "base/general_settings.html", {'form':form})
+
+
+
@login_required
@permission_required("base.view_company")
def date_settings(request):