diff --git a/base/forms.py b/base/forms.py index a17a289b8..6da217cbf 100644 --- a/base/forms.py +++ b/base/forms.py @@ -1691,7 +1691,9 @@ class DynamicMailConfForm(ModelForm): model = DynamicEmailConfiguration fields = "__all__" exclude = ["is_active"] - + # def clean(self): + # from_mail = self.from_email + # return super().clean() def as_p(self): """ Render the form fields as HTML table rows with Bootstrap styling. diff --git a/base/models.py b/base/models.py index df9c761c6..ab32e7481 100644 --- a/base/models.py +++ b/base/models.py @@ -982,31 +982,31 @@ class DynamicEmailConfiguration(HorillaModel): ) host = models.CharField( - blank=True, null=True, max_length=256, verbose_name=_("Email Host") + null=True, max_length=256, verbose_name=_("Email Host") ) - port = models.SmallIntegerField(blank=True, null=True, verbose_name=_("Email Port")) + port = models.SmallIntegerField( null=True, verbose_name=_("Email Port")) - from_email = models.CharField( - blank=True, null=True, max_length=256, verbose_name=_("Default From Email") + from_email = models.EmailField( + null=True, max_length=256, verbose_name=_("Default From Email") ) username = models.CharField( - blank=True, + null=True, max_length=256, verbose_name=_("Email Host Username"), ) display_name = models.CharField( - blank=True, + null=True, max_length=256, verbose_name=_("Display Name"), ) password = models.CharField( - blank=True, + null=True, max_length=256, verbose_name=_("Email Authentication Password"), @@ -1019,7 +1019,7 @@ class DynamicEmailConfiguration(HorillaModel): fail_silently = models.BooleanField(default=False, verbose_name=_("Fail Silently")) timeout = models.SmallIntegerField( - blank=True, null=True, verbose_name=_("Email Send Timeout (seconds)") + null=True, verbose_name=_("Email Send Timeout (seconds)") ) company_id = models.OneToOneField( Company, on_delete=models.CASCADE, null=True, blank=True @@ -1033,8 +1033,8 @@ class DynamicEmailConfiguration(HorillaModel): "so only set one of those settings to True." ) ) - if not self.company_id: - raise ValidationError({"company_id": _("This field is required")}) + if not self.company_id and not self.is_primary: + raise ValidationError({"company_id": _("This field is required")}) def __str__(self): return self.username @@ -1044,6 +1044,9 @@ class DynamicEmailConfiguration(HorillaModel): DynamicEmailConfiguration.objects.filter(is_primary=True).update( is_primary=False ) + if not DynamicEmailConfiguration.objects.exists(): + self.is_primary = True + super().save(*args, **kwargs) servers_same_company = DynamicEmailConfiguration.objects.filter( company_id=self.company_id diff --git a/base/templates/base/mail_server/mail_server_view.html b/base/templates/base/mail_server/mail_server_view.html index 9d5cc54f6..57f7b6dba 100644 --- a/base/templates/base/mail_server/mail_server_view.html +++ b/base/templates/base/mail_server/mail_server_view.html @@ -1,4 +1,25 @@ {% load i18n %} + + +{% if primary_mail_not_exist %} + +{% endif %}
@@ -17,14 +38,14 @@
{% for server in mail_servers %} -
+
{{ server.username }}
{{ server.host }}
{{ server.company_id }}
- +
diff --git a/base/templates/base/mail_server/replace_mail.html b/base/templates/base/mail_server/replace_mail.html new file mode 100644 index 000000000..78334587c --- /dev/null +++ b/base/templates/base/mail_server/replace_mail.html @@ -0,0 +1,142 @@ + +{% load i18n %} + +{% comment %} {% endcomment %} diff --git a/base/urls.py b/base/urls.py index 5d6111af1..2f4cf1e74 100644 --- a/base/urls.py +++ b/base/urls.py @@ -102,6 +102,7 @@ urlpatterns = [ name="mail-server-create-update", ), path("mail-server-delete", views.mail_server_delete, name="mail-server-delete"), + path("replace-primary-mail", views.replace_primary_mail, name="replace-primary-mail"), path("settings/company-create/", views.company_create, name="company-create"), path("settings/company-view/", views.company_view, name="company-view"), path( diff --git a/base/views.py b/base/views.py index 6813438d5..e5cf40d5d 100644 --- a/base/views.py +++ b/base/views.py @@ -856,18 +856,59 @@ def object_duplicate(request, obj_id, **kwargs): @permission_required("base.view_dynamicemailconfiguration") def mail_server_conf(request): mail_servers = DynamicEmailConfiguration.objects.all() + primary_mail_not_exist = True + if DynamicEmailConfiguration.objects.filter(is_primary=True).exists(): + primary_mail_not_exist = False return render( - request, "base/mail_server/mail_server.html", {"mail_servers": mail_servers} + request, "base/mail_server/mail_server.html", {"mail_servers": mail_servers,"primary_mail_not_exist":primary_mail_not_exist} ) @login_required @permission_required("base.delete_dynamicemailconfiguration") def mail_server_delete(request): + """ + This method is used to delete mail server + """ ids = request.GET.getlist("ids") - DynamicEmailConfiguration.objects.filter(id__in=ids).delete() - messages.success(request, "Mail server configuration deleted") - return redirect(mail_server_conf) + # primary_mail_check + delete = True + for id in ids: + emailconfig = DynamicEmailConfiguration.objects.filter(id=id).first() + if emailconfig.is_primary: + delete = False + if delete: + DynamicEmailConfiguration.objects.filter(id__in=ids).delete() + messages.success(request, "Mail server configuration deleted") + return HttpResponse("") + else: + if DynamicEmailConfiguration.objects.all().count() == 1: + messages.warning(request, "You have only 1 Mail server configuration that can't be deleted") + return HttpResponse("") + else : + mails=DynamicEmailConfiguration.objects.all().exclude(is_primary=True) + return render( + request, + "base/mail_server/replace_mail.html", + { + "mails": mails, + 'title':_("Can't Delete"), + }, + ) + +def replace_primary_mail(request): + """ + This method is used to replace primary mail server + """ + emailconfig_id=request.POST.get('replace_mail') + email_config = DynamicEmailConfiguration.objects.get(id=emailconfig_id) + email_config.is_primary = True + email_config.save() + DynamicEmailConfiguration.objects.filter(is_primary=True).first().delete() + + messages.success(request, "Primary Mail server configuration replaced") + return redirect("mail-server-conf") + # return HttpResponse("") @login_required