diff --git a/recruitment/forms.py b/recruitment/forms.py index 5702b1f..eda166f 100644 --- a/recruitment/forms.py +++ b/recruitment/forms.py @@ -2015,8 +2015,13 @@ class SettingsForm(forms.ModelForm): class Meta: model = Settings - fields = ['key', 'value'] + fields = ['name','key', 'value'] widgets = { + 'name': forms.TextInput(attrs={ + 'class': 'form-control mb-3', + 'placeholder': 'e.g., Zoom', + 'required': True + }), 'key': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Enter setting key', diff --git a/recruitment/migrations/0004_settings_name.py b/recruitment/migrations/0004_settings_name.py new file mode 100644 index 0000000..c5c7f1f --- /dev/null +++ b/recruitment/migrations/0004_settings_name.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.7 on 2025-12-15 14:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('recruitment', '0003_interview_interview_result_interview_result_comments'), + ] + + operations = [ + migrations.AddField( + model_name='settings', + name='name', + field=models.CharField(blank=True, help_text="A human-readable name (e.g., 'Zoom')", max_length=100, null=True, verbose_name='Friendly Name'), + ), + ] diff --git a/recruitment/models.py b/recruitment/models.py index 8564211..0598ef1 100644 --- a/recruitment/models.py +++ b/recruitment/models.py @@ -2593,6 +2593,12 @@ class Document(Base): class Settings(Base): """Model to store key-value pair settings""" + name = models.CharField( + max_length=100, + verbose_name=_("Friendly Name"), + help_text=_("A human-readable name (e.g., 'Zoom')"), + null=True, blank=True + ) key = models.CharField( max_length=100, @@ -2604,6 +2610,7 @@ class Settings(Base): verbose_name=_("Setting Value"), help_text=_("Value for the setting"), ) + class Meta: verbose_name = _("Setting") diff --git a/recruitment/utils.py b/recruitment/utils.py index 43933cc..8acff87 100644 --- a/recruitment/utils.py +++ b/recruitment/utils.py @@ -51,7 +51,7 @@ def get_setting(key, default=None): return default -def set_setting(key, value): +def set_setting(key, value,name): """ Set a setting value in the database @@ -62,8 +62,9 @@ def set_setting(key, value): Returns: Settings: The created or updated setting object """ + print(key,value) setting, created = Settings.objects.update_or_create( - key=key, defaults={"value": str(value)} + key=key, value=value,name=name ) return setting @@ -262,26 +263,35 @@ def initialize_default_settings(): """ # Zoom settings zoom_settings = { - "ZOOM_ACCOUNT_ID": getattr(settings, "ZOOM_ACCOUNT_ID", ""), - "ZOOM_CLIENT_ID": getattr(settings, "ZOOM_CLIENT_ID", ""), - "ZOOM_CLIENT_SECRET": getattr(settings, "ZOOM_CLIENT_SECRET", ""), - "ZOOM_WEBHOOK_API_KEY": getattr(settings, "ZOOM_WEBHOOK_API_KEY", ""), - "SECRET_TOKEN": getattr(settings, "SECRET_TOKEN", ""), + "ZOOM_ACCOUNT_ID": "", + "ZOOM_CLIENT_ID": "", + "ZOOM_CLIENT_SECRET": "", + "ZOOM_WEBHOOK_API_KEY": "", + "SECRET_TOKEN": "", } # LinkedIn settings linkedin_settings = { - "LINKEDIN_CLIENT_ID": getattr(settings, "LINKEDIN_CLIENT_ID", ""), - "LINKEDIN_CLIENT_SECRET": getattr(settings, "LINKEDIN_CLIENT_SECRET", ""), - "LINKEDIN_REDIRECT_URI": getattr(settings, "LINKEDIN_REDIRECT_URI", ""), + "LINKEDIN_CLIENT_ID": "", + "LINKEDIN_CLIENT_SECRET": "", + "LINKEDIN_REDIRECT_URI": "", } - # Create settings if they don't exist - all_settings = {**zoom_settings, **linkedin_settings} + openrouter_settings = { + "OPENROUTER_API_URL":"", + "OPENROUTER_API_KEY":"", + "OPENROUTER_MODEL":"" + } + + + # Create settings if they don't exist + all_settings = {**zoom_settings, **linkedin_settings,**openrouter_settings} + names=['ZOOM','ZOOM','ZOOM','ZOOM','ZOOM','LINKEDIN','LINKEDIN','LINKEDIN','OPENROUTER','OPENROUTER','OPENROUTER'] + i=0 for key, value in all_settings.items(): - if value: # Only set if value exists - set_setting(key, value) + set_setting(key, value,names[i]) + i=i+1 ##################################### diff --git a/templates/recruitment/settings_detail.html b/templates/recruitment/settings_detail.html index 78c59dd..5462e5f 100644 --- a/templates/recruitment/settings_detail.html +++ b/templates/recruitment/settings_detail.html @@ -1,82 +1,153 @@ {% extends "base.html" %} -{% load widget_tweaks %} -{% block title %}Setting Details{% endblock %} +{% load i18n %} + +{% block title %}{% trans "Setting Details" %} | {{ setting.key }}{% endblock %} {% block content %}
+ + +
+
+

{% trans "Setting Details" %}

+

{{ setting.name|default:setting.key }}

+
+ +
+
-
- - - - -
-

- - Setting Details -

-
- - Edit Setting - - - Back to List - +
+
+
+
{% trans "Configuration" %}
-
+
+
+ +
+ {{ setting.key }} + +
+
- -
-
- {% if messages %} - {% for message in messages %} - + +
+
+
+
{% trans "Metadata" %}
+ +
+ + {{ setting.get_category_display }} +
+ +
+ +
+
+ +
+
+ + {{ setting.created_at|date:"M d, Y H:i" }} +
+
+ +
+
+ +
+
+ + {{ setting.updated_at|date:"M d, Y H:i" }} +
+
+ +
+
+ +
+
+ + {{ setting.updated_by.get_full_name|default:"System" }} +
+
+
{% endblock %} + +{% block customJS %} + +{% endblock %} \ No newline at end of file diff --git a/templates/recruitment/settings_list.html b/templates/recruitment/settings_list.html index 527daf5..179199c 100644 --- a/templates/recruitment/settings_list.html +++ b/templates/recruitment/settings_list.html @@ -1,137 +1,175 @@ {% extends "base.html" %} -{% load widget_tweaks %} {% load i18n %} -{% block title %}Settings{% endblock %} + +{% block title %}{% trans "Integration Settings" %}{% endblock %} {% block content %} -
-