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 %}
+
+ {% trans "Primary mail is not configured" %}
+
+{% 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