From 820a2d377ae07316f2eb9e50e1893fd8ef153764 Mon Sep 17 00:00:00 2001 From: Cybrosys Odoo Devs <50653951+CybroOdooDev@users.noreply.github.com> Date: Fri, 8 Mar 2024 23:49:22 +0530 Subject: [PATCH] [IMP] BASE: Added Horilla tour for first time users --- base/forms.py | 36 ++- base/models.py | 20 ++ base/urls.py | 1 + base/views.py | 12 + recruitment/templates/pipeline/nav.html | 22 +- recruitment/views.py | 6 +- static/build/css/driver.min.css | 288 +++++++++++++++++++++++ static/build/js/dashboardDriver.js | 73 ++++++ static/build/js/driver.js | 2 + static/build/js/pipelineDriver.js | 48 ++++ static/build/js/settingsDriver.js | 47 ++++ templates/dashboard.html | 13 +- templates/index.html | 14 +- templates/notification/notification.html | 1 + templates/settings.html | 6 +- 15 files changed, 562 insertions(+), 27 deletions(-) create mode 100644 static/build/css/driver.min.css create mode 100644 static/build/js/dashboardDriver.js create mode 100644 static/build/js/driver.js create mode 100644 static/build/js/pipelineDriver.js create mode 100644 static/build/js/settingsDriver.js diff --git a/base/forms.py b/base/forms.py index c7222d4d8..98fd1aaf2 100644 --- a/base/forms.py +++ b/base/forms.py @@ -3,6 +3,7 @@ forms.py This module is used to register forms for base module """ + import calendar import os from typing import Any @@ -28,6 +29,7 @@ from base.models import ( BaserequestFile, Company, Department, + DriverViewed, DynamicEmailConfiguration, DynamicPagination, JobPosition, @@ -171,7 +173,7 @@ class ModelForm(forms.ModelForm): widget = field.widget if isinstance(widget, (forms.DateInput)): field.initial = date.today() - + if isinstance( widget, (forms.NumberInput, forms.EmailInput, forms.TextInput, forms.FileInput), @@ -184,7 +186,7 @@ class ModelForm(forms.ModelForm): ) elif isinstance(widget, (forms.Select,)): field.empty_label = None - if not isinstance(field,forms.ModelMultipleChoiceField): + if not isinstance(field, forms.ModelMultipleChoiceField): label = "" if field.label is not None: label = _(field.label) @@ -210,16 +212,19 @@ class ModelForm(forms.ModelForm): ): field.widget.attrs.update({"class": "oh-switch__checkbox"}) - try: - self.fields["employee_id"].initial = request.user.employee_get + try: + self.fields["employee_id"].initial = request.user.employee_get except: pass - try: - self.fields["company_id"].initial = request.user.employee_get.get_company + try: + self.fields["company_id"].initial = ( + request.user.employee_get.get_company + ) except: pass + class Form(forms.Form): """ Overrides to add initial styling to the django Form instance @@ -377,9 +382,9 @@ class AssignPermission(Form): """ Save method to assign permission to employee """ - user_ids = Employee.objects.filter(id__in=self.data.getlist("employee")).values_list( - "employee_user_id", flat=True - ) + user_ids = Employee.objects.filter( + id__in=self.data.getlist("employee") + ).values_list("employee_user_id", flat=True) permissions = self.cleaned_data["permissions"] permissions = Permission.objects.filter(codename__in=permissions) users = User.objects.filter(id__in=user_ids) @@ -529,7 +534,7 @@ class RotatingWorkTypeAssignForm(ModelForm): exclude = ("next_change_date", "current_work_type", "next_work_type") widgets = { "start_date": DateInput(attrs={"type": "date"}), - "is_active":HiddenInput() + "is_active": HiddenInput(), } labels = { "is_active": _trans("Is Active"), @@ -1309,7 +1314,6 @@ class ShiftAllocationForm(ModelForm): return super().save(commit) - class WorkTypeRequestForm(ModelForm): """ WorkTypeRequest model's form @@ -1855,3 +1859,13 @@ class AnnouncementExpireForm(ModelForm): model = AnnouncementExpire fields = ("days",) + + +class DriverForm(forms.ModelForm): + """ + DriverForm + """ + + class Meta: + model = DriverViewed + fields = "__all__" diff --git a/base/models.py b/base/models.py index c642ecb74..f1b9ad60d 100644 --- a/base/models.py +++ b/base/models.py @@ -1351,3 +1351,23 @@ class EmailLog(models.Model): company_id = models.ForeignKey( Company, on_delete=models.CASCADE, null=True, editable=False ) + + +class DriverViewed(models.Model): + """ + Model to store driver viewed status + """ + + choices = [ + ("dashboard", "dashboard"), + ("pipeline", "pipeline"), + ("settings", "settings"), + ] + user = models.ForeignKey(User, on_delete=models.CASCADE) + viewed = models.CharField(max_length=10, choices=choices) + + def user_viewed(self): + """ + This method is used to access all the viewd driver + """ + return self.user.driverviewed_set.values_list("viewed", flat=True) diff --git a/base/urls.py b/base/urls.py index 75143a8c7..c9fc5fdc6 100644 --- a/base/urls.py +++ b/base/urls.py @@ -892,4 +892,5 @@ urlpatterns = [ path( "announcement-viewed-by", announcement.viewed_by, name="announcement-viewed-by" ), + path("driver-viewed", views.driver_viewed_status, name="driver-viewed"), ] diff --git a/base/views.py b/base/views.py index 1ff066358..790bf877e 100644 --- a/base/views.py +++ b/base/views.py @@ -51,6 +51,7 @@ from base.forms import ( AuditTagForm, CompanyForm, DepartmentForm, + DriverForm, DynamicMailConfForm, DynamicPaginationForm, EmployeeTagForm, @@ -5273,3 +5274,14 @@ def action_type_delete(request, act_id): Actiontype.objects.filter(id=act_id).delete() messages.success(request, _("Action has been deleted successfully!")) return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/")) + + +@login_required +def driver_viewed_status(request): + """ + This method is used to update driver viewed status + """ + form = DriverForm(request.GET) + if form.is_valid(): + form.save() + return HttpResponse("") diff --git a/recruitment/templates/pipeline/nav.html b/recruitment/templates/pipeline/nav.html index 5089116d8..81ca49264 100644 --- a/recruitment/templates/pipeline/nav.html +++ b/recruitment/templates/pipeline/nav.html @@ -1,4 +1,5 @@ {% load i18n %} +{% load static %}