From 31ef78cec0cd2ba3ccc91c4bafd89831e73abe20 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 20 Jan 2022 17:10:43 +0100 Subject: External sources - limit access in admin, limit by profile --- ishtar_common/forms_common.py | 66 +++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 15 deletions(-) (limited to 'ishtar_common/forms_common.py') diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 70727b243..0cdb70a36 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -44,7 +44,7 @@ from django.utils.text import slugify from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _, pgettext -from . import models +from . import models, models_rest from . import widgets from bootstrap_datepicker.widgets import DatePicker from ishtar_common.templatetags.link_to_window import simple_link_to_window @@ -705,7 +705,7 @@ class QAPersonFormMulti(QAForm): associated_models = { "qa_title": models.TitleType, "qa_attached_to": models.Organization, - "qa_person_types": models.PersonType + "qa_person_types": models.PersonType, } MULTI = True @@ -726,7 +726,7 @@ class QAPersonFormMulti(QAForm): TYPES = [ FieldType("qa_title", models.TitleType), - FieldType('qa_person_types', models.PersonType, is_multiple=True), + FieldType("qa_person_types", models.PersonType, is_multiple=True), ] def _get_qa_attached_to(self, value): @@ -1159,7 +1159,7 @@ class ProfilePersonForm(forms.Form): auto_pin = forms.BooleanField( label=_("Pin automatically items on creation and modification"), required=False ) - display_pin_menu = forms.BooleanField(label=_("Show pin menu"), required=False) + # display_pin_menu = forms.BooleanField(label=_("Show pin menu"), required=False) duplicate_profile = forms.BooleanField( label=_("Duplicate this profile"), required=False @@ -1184,11 +1184,46 @@ class ProfilePersonForm(forms.Form): initial["name"] = current_profile.name or current_profile.profile_type initial["profile_type"] = current_profile.profile_type.pk initial["auto_pin"] = current_profile.auto_pin - initial["display_pin_menu"] = current_profile.display_pin_menu + # initial["display_pin_menu"] = current_profile.display_pin_menu kwargs["initial"] = initial super(ProfilePersonForm, self).__init__(*args, **kwargs) self.fields["current_profile"].choices = choices + current_external_sources = ( + [src.pk for src in current_profile.external_sources.all()] + if current_profile + else [] + ) + extra_fields = [] + q = models_rest.ApiExternalSource.objects.filter(users=self.user.ishtaruser) + for src in q.all(): + initial = True if src.pk in current_external_sources else False + extra_fields.append( + ( + f"external_source_{src.pk}", + forms.BooleanField( + label=_(f"External source - {src.name}"), + required=False, + initial=initial, + ), + ) + ) + + self.fields[f"external_source_{src.pk}"] = forms.BooleanField( + label=_(f"External source - {src.name}"), + required=False, + initial=initial, + ) + if extra_fields: + # reorder fields + fields = OrderedDict() + for key in self.fields.keys(): + if key == "duplicate_profile": + for extra_key, extra_field in extra_fields: + fields[extra_key] = extra_fields + fields[key] = self.fields[key] + self.fields = fields + if ( not current_profile or not self.user.ishtaruser.person.profiles.filter( @@ -1264,9 +1299,16 @@ class ProfilePersonForm(forms.Form): profile.current = True profile.name = name profile.auto_pin = self.cleaned_data["auto_pin"] - profile.display_pin_menu = self.cleaned_data["display_pin_menu"] + # profile.display_pin_menu = self.cleaned_data["display_pin_menu"] profile.save() + profile.external_sources.clear() + q = models_rest.ApiExternalSource.objects.filter(users=self.user.ishtaruser) + for src in q.all(): + if self.cleaned_data.get(f"external_source_{src.pk}", False): + profile.external_sources.add(src) clean_session_cache(session) + if "EXTERNAL_SOURCES" in session: + session.pop("EXTERNAL_SOURCES") class TownForm(forms.Form): @@ -2096,15 +2138,9 @@ class QADocumentFormMulti(QAForm): qa_creation_date = forms.DateField( label=_("Creation date"), widget=DatePicker, required=False ) - qa_format_type = forms.ChoiceField( - label=_("Format"), choices=[], required=False - ) - qa_support_type = forms.ChoiceField( - label=_("Medium"), choices=[], required=False - ) - qa_scale = forms.CharField( - label=_("Scale"), max_length=30, required=False - ) + qa_format_type = forms.ChoiceField(label=_("Format"), choices=[], required=False) + qa_support_type = forms.ChoiceField(label=_("Medium"), choices=[], required=False) + qa_scale = forms.CharField(label=_("Scale"), max_length=30, required=False) TYPES = [ FieldType("qa_source_type", models.SourceType), -- cgit v1.2.3