diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/migrations/0257_sheet_filters.py | 65 | ||||
-rw-r--r-- | ishtar_common/models.py | 6 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 43 | ||||
-rw-r--r-- | ishtar_common/models_rest.py | 4 |
4 files changed, 114 insertions, 4 deletions
diff --git a/ishtar_common/migrations/0257_sheet_filters.py b/ishtar_common/migrations/0257_sheet_filters.py new file mode 100644 index 000000000..32ad007b0 --- /dev/null +++ b/ishtar_common/migrations/0257_sheet_filters.py @@ -0,0 +1,65 @@ +# Generated by Django 2.2.24 on 2024-11-13 17:59 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('ishtar_common', '0256_clean_add_own_permissions'), + ] + + operations = [ + migrations.AlterModelOptions( + name='import', + options={'permissions': (('view_own_import', 'Can view own Import'), ('add_own_import', 'Can add own Import'), ('change_own_import', 'Can change own Import'), ('delete_own_import', 'Can delete own Import')), 'verbose_name': 'Import - Import', 'verbose_name_plural': 'Import - Imports'}, + ), + migrations.AlterField( + model_name='permissionrequest', + name='include_upstream_items', + field=models.BooleanField(default=False, help_text='All items associated by upstream link math the request. For instance, match is done for all finds associated with own context records', verbose_name='Include upstream items'), + ), + migrations.CreateModel( + name='SheetFilter', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.CharField(max_length=200, verbose_name='Key')), + ('exclude_or_include', models.CharField(choices=[('E', 'exclude'), ('I', 'Include')], default='E', max_length=1, verbose_name='Exclude or include')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='content_type_sheetfilter', to='contenttypes.ContentType')), + ], + options={ + 'verbose_name': 'Sheet filter', + 'verbose_name_plural': 'Sheet filters', + }, + ), + migrations.CreateModel( + name='FilteredSheet', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='content_type_filteredsheet', to='contenttypes.ContentType')), + ('filters', models.ManyToManyField(blank=True, related_name='filtered_sheet', to='ishtar_common.SheetFilter', verbose_name='Filters')), + ], + options={ + 'verbose_name': 'Filtered sheet', + 'verbose_name_plural': 'Filtered sheets', + }, + ), + migrations.AddField( + model_name='profiletype', + name='filtered_sheets', + field=models.ManyToManyField(blank=True, related_name='profile_types', to='ishtar_common.FilteredSheet', verbose_name='Filtered sheets'), + ), + migrations.AlterField( + model_name='apisheetfilter', + name='key', + field=models.TextField(default='-', verbose_name='Key'), + ), + migrations.AlterField( + model_name='sheetfilter', + name='key', + field=models.TextField(default='-', verbose_name='Key'), + ), + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index ab79f4baa..9579cdbd1 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -156,6 +156,7 @@ from ishtar_common.models_common import ( DocumentItem, DynamicRequest, document_attached_changed, + FilteredSheet, FullSearch, GeneralType, GeoBufferType, @@ -199,6 +200,7 @@ __all__ = [ "ImporterColumn", "ImporterDuplicateField", "Imported", + "FilteredSheet", "PermissionRequest", "Regexp", "ImportTarget", @@ -3443,6 +3445,10 @@ class ProfileType(GeneralType): PermissionRequest, verbose_name=_("Permissions requests"), blank=True, related_name="profile_types" ) + filtered_sheets = models.ManyToManyField( + FilteredSheet, verbose_name=_("Filtered sheets"), blank=True, + related_name="profile_types" + ) class Meta: verbose_name = _("Profile type") diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 9ad73f314..613c54fac 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -844,8 +844,8 @@ class TemplateItem: return templates -class SheetFilter(models.Model): - key = models.CharField(_("Key"), max_length=200) +class BaseSheetFilter(models.Model): + key = models.TextField(_("Key"), default="-") class Meta: abstract = True @@ -873,6 +873,45 @@ class SheetFilter(models.Model): return sorted(set(keys)) +class SheetFilter(BaseSheetFilter): + content_type = models.ForeignKey( + ContentType, related_name="content_type_sheetfilter", on_delete=models.CASCADE + ) + exclude_or_include = models.CharField( + _("Exclude or include"), + default="E", + max_length=1, + choices=(("E", _("exclude")), ("I", _("Include"))) + ) + + class Meta: + verbose_name = _("Sheet filter") + verbose_name_plural = _("Sheet filters") + ADMIN_SECTION = _("Account") + + def get_template(self): + ct = self.content_type + model = apps.get_model(ct.app_label, ct.model) + tpl = loader.get_template(f"ishtar/sheet_{model.SLUG}.html") + return tpl.template.origin.name + + +class FilteredSheet(models.Model): + name = models.CharField(_("Name"), max_length=200) + content_type = models.ForeignKey( + ContentType, related_name="content_type_filteredsheet", on_delete=models.CASCADE + ) + filters = models.ManyToManyField( + SheetFilter, blank=True, verbose_name=_("Filters"), + related_name="filtered_sheet" + ) + + class Meta: + verbose_name = _("Filtered sheet") + verbose_name_plural = _("Filtered sheets") + ADMIN_SECTION = _("Account") + + class FullSearch(models.Model): search_vector = SearchVectorField( _("Search vector"), blank=True, null=True, help_text=_("Auto filled at save") diff --git a/ishtar_common/models_rest.py b/ishtar_common/models_rest.py index c47b04168..8f6f8d40c 100644 --- a/ishtar_common/models_rest.py +++ b/ishtar_common/models_rest.py @@ -13,7 +13,7 @@ from django.utils.text import slugify from django.apps import apps from django.template import loader -from ishtar_common.models_common import SheetFilter +from ishtar_common.models_common import BaseSheetFilter from ishtar_common.utils import ugettext_lazy as _ UnoCalc = None @@ -68,7 +68,7 @@ class ApiSearchModel(models.Model): return f"{self.user} - {self.content_type}" -class ApiSheetFilter(SheetFilter): +class ApiSheetFilter(BaseSheetFilter): api_search_model = models.ForeignKey(ApiSearchModel, on_delete=models.CASCADE, related_name="sheet_filters") |