diff --git a/helpdesk/admin.py b/helpdesk/admin.py index 5530aa51..9d18007e 100644 --- a/helpdesk/admin.py +++ b/helpdesk/admin.py @@ -70,7 +70,7 @@ class FollowUpAdmin(admin.ModelAdmin): @admin.register(KBItem) class KBItemAdmin(admin.ModelAdmin): - list_display = ('category', 'title', 'last_updated', 'team', ) + list_display = ('category', 'title', 'last_updated', 'team', 'order', 'enabled') inlines = [KBIAttachmentInline] readonly_fields = ('voted_by', 'downvoted_by') @@ -93,6 +93,10 @@ class IgnoreEmailAdmin(admin.ModelAdmin): list_display = ('name', 'queue_list', 'email_address', 'keep_in_mailbox') +@admin.register(KBCategory) +class KBCategoryAdmin(admin.ModelAdmin): + list_display = ('name', 'title', 'slug', 'public') + + admin.site.register(PreSetReply) admin.site.register(EscalationExclusion) -admin.site.register(KBCategory) diff --git a/helpdesk/forms.py b/helpdesk/forms.py index 74002389..09c3e5bf 100644 --- a/helpdesk/forms.py +++ b/helpdesk/forms.py @@ -183,8 +183,8 @@ class AbstractTicketForm(CustomFieldMixin, forms.Form): self.fields['kbitem'] = forms.ChoiceField( widget=forms.Select(attrs={'class': 'form-control'}), required=False, - label=_('Knowedge Base Item'), - choices=[(kbi.pk, kbi.title) for kbi in KBItem.objects.filter(category=kbcategory.pk)], + label=_('Knowledge Base Item'), + choices=[(kbi.pk, kbi.title) for kbi in KBItem.objects.filter(category=kbcategory.pk, enabled=True)], ) def _add_form_custom_fields(self, staff_only_filter=None): diff --git a/helpdesk/migrations/0030_add_kbcategory_name.py b/helpdesk/migrations/0030_add_kbcategory_name.py new file mode 100644 index 00000000..908fdf17 --- /dev/null +++ b/helpdesk/migrations/0030_add_kbcategory_name.py @@ -0,0 +1,33 @@ +# Generated by Django 2.2.10 on 2020-02-25 11:21 + +from django.db import migrations, models + +def copy_title(apps, schema_editor): + KBCategory = apps.get_model("helpdesk", "KBCategory") + KBCategory.objects.update(name=models.F('title')) + + +class Migration(migrations.Migration): + + dependencies = [ + ('helpdesk', '0029_kbcategory_public'), + ] + + operations = [ + migrations.AddField( + model_name='kbcategory', + name='name', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Name of the category'), + ), + migrations.AlterField( + model_name='kbcategory', + name='title', + field=models.CharField(max_length=100, verbose_name='Title on knowledgebase page'), + ), + migrations.RunPython(copy_title, migrations.RunPython.noop), + migrations.AlterField( + model_name='kbcategory', + name='name', + field=models.CharField(blank=False, max_length=100, null=False, verbose_name='Name of the category'), + ), + ] diff --git a/helpdesk/migrations/0031_auto_20200225_1440.py b/helpdesk/migrations/0031_auto_20200225_1440.py new file mode 100644 index 00000000..c287f06f --- /dev/null +++ b/helpdesk/migrations/0031_auto_20200225_1440.py @@ -0,0 +1,22 @@ +# Generated by Django 2.2.10 on 2020-02-25 13:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('helpdesk', '0030_add_kbcategory_name'), + ] + + operations = [ + migrations.AlterModelOptions( + name='kbitem', + options={'ordering': ('order', 'title'), 'verbose_name': 'Knowledge base item', 'verbose_name_plural': 'Knowledge base items'}, + ), + migrations.AddField( + model_name='kbitem', + name='order', + field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Order'), + ), + ] diff --git a/helpdesk/migrations/0032_kbitem_enabled.py b/helpdesk/migrations/0032_kbitem_enabled.py new file mode 100644 index 00000000..7868bfe1 --- /dev/null +++ b/helpdesk/migrations/0032_kbitem_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.10 on 2020-02-25 13:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('helpdesk', '0031_auto_20200225_1440'), + ] + + operations = [ + migrations.AddField( + model_name='kbitem', + name='enabled', + field=models.BooleanField(default=True, verbose_name='Enabled to display to users'), + ), + ] diff --git a/helpdesk/models.py b/helpdesk/models.py index a36c5a78..7e4b61c5 100644 --- a/helpdesk/models.py +++ b/helpdesk/models.py @@ -1215,8 +1215,13 @@ class KBCategory(models.Model): listing of questions & answers. """ + name = models.CharField( + _('Name of the category'), + max_length=100, + ) + title = models.CharField( - _('Title'), + _('Title on knowledgebase page'), max_length=100, ) @@ -1242,7 +1247,7 @@ class KBCategory(models.Model): ) def __str__(self): - return '%s' % self.title + return '%s' % self.name class Meta: ordering = ('title',) @@ -1312,6 +1317,17 @@ class KBItem(models.Model): null=True, ) + order = models.PositiveIntegerField( + _('Order'), + blank=True, + null=True, + ) + + enabled = models.BooleanField( + _('Enabled to display to users'), + default=True, + ) + def save(self, *args, **kwargs): if not self.last_updated: self.last_updated = timezone.now() @@ -1328,7 +1344,7 @@ class KBItem(models.Model): return '%s: %s' % (self.category.title, self.title) class Meta: - ordering = ('title',) + ordering = ('order', 'title',) verbose_name = _('Knowledge base item') verbose_name_plural = _('Knowledge base items') diff --git a/helpdesk/static/helpdesk/css/sb-admin.css b/helpdesk/static/helpdesk/css/sb-admin.css index f015c714..cad0a66e 100644 --- a/helpdesk/static/helpdesk/css/sb-admin.css +++ b/helpdesk/static/helpdesk/css/sb-admin.css @@ -242,6 +242,10 @@ body.fixed-nav.sidebar-toggled #content-wrapper { overflow-y: auto; } +.card-text { + font-weight: bold; +} + .card-body-icon { position: absolute; z-index: 0; diff --git a/helpdesk/templates/helpdesk/base_js.html b/helpdesk/templates/helpdesk/base_js.html index b337fd36..d7bcdecc 100644 --- a/helpdesk/templates/helpdesk/base_js.html +++ b/helpdesk/templates/helpdesk/base_js.html @@ -27,3 +27,6 @@ + +{% block js_bottom %} +{% endblock %} diff --git a/helpdesk/templates/helpdesk/kb_category_base.html b/helpdesk/templates/helpdesk/kb_category_base.html index 5b449b7f..8eb8dd20 100644 --- a/helpdesk/templates/helpdesk/kb_category_base.html +++ b/helpdesk/templates/helpdesk/kb_category_base.html @@ -1,35 +1,42 @@ {% load i18n %} -
{{ category.description }}
+{% block header %} +{% trans "Unless otherwise stated, all fields are required." %} {% trans "Please provide as descriptive a title and description as possible." %}
+{% endblock %}