diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-04-19 11:44:30 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 08:41:54 +0200 |
commit | 07f25cfbccd59d8c6b57b3487b2083cfa03cceae (patch) | |
tree | 7e62f1a40e85bbbee3c8ec209dcb3a0dd4c898e5 | |
parent | 68f0b07848478b525898b73e0788f92bb6670210 (diff) | |
download | Ishtar-07f25cfbccd59d8c6b57b3487b2083cfa03cceae.tar.bz2 Ishtar-07f25cfbccd59d8c6b57b3487b2083cfa03cceae.zip |
Account wizard: edit areas (refs #4060)
-rw-r--r-- | ishtar_common/admin.py | 2 | ||||
-rw-r--r-- | ishtar_common/context_processors.py | 5 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 7 | ||||
-rw-r--r-- | ishtar_common/models.py | 10 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet_person.html | 18 | ||||
-rw-r--r-- | ishtar_common/wizards.py | 25 |
6 files changed, 49 insertions, 18 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 637669f13..db5d885e9 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -765,7 +765,7 @@ admin_site.register(models.AdministrationTask, AdministrationTaskAdmin) class UserProfileAdmin(admin.ModelAdmin): - list_display = ['person', 'profile_type'] + list_display = ['person', 'profile_type', 'area_labels'] list_filter = ['profile_type'] search_fields = ['person__raw_name'] model = models.UserProfile diff --git a/ishtar_common/context_processors.py b/ishtar_common/context_processors.py index 7619363dc..108fb7ec4 100644 --- a/ishtar_common/context_processors.py +++ b/ishtar_common/context_processors.py @@ -60,6 +60,11 @@ def get_base_context(request): menu = Menu(request.user, current_action=current_action, session=request.session) menu.init() + + if hasattr(request.user, 'ishtaruser') and request.user.ishtaruser and \ + request.user.ishtaruser.has_right('administrator', + session=request.session): + dct['ADMIN'] = True if menu.selected_idx is not None: dct['current_theme'] = "theme-%d" % (menu.selected_idx + 1) dct['MENU'] = menu diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index a7c464883..d4b1b5703 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -725,13 +725,18 @@ class AccountForm(forms.Form): class ProfileForm(ManageOldType): form_label = _("Profiles") base_model = 'profile' - associated_models = {'profile_type': models.ProfileType} + associated_models = { + 'profile_type': models.ProfileType, + 'area': models.Area + } profile_type = forms.ChoiceField(label=_(u"Type"), choices=[], required=False) + area = widgets.Select2MultipleField(label=_(u"Areas"), required=False) pk = forms.IntegerField(label=" ", widget=forms.HiddenInput, required=False) TYPES = [ FieldType('profile_type', models.ProfileType), + FieldType('area', models.Area, is_multiple=True), ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index ca4055fb2..67c4422f6 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2686,7 +2686,15 @@ class UserProfile(models.Model): verbose_name_plural = _(u"User profiles") def __unicode__(self): - return unicode(self.profile_type) + lbl = unicode(self.profile_type) + if not self.areas.count(): + return lbl + return u"{} ({})".format(lbl, u", ".join( + [unicode(area) for area in self.areas.all()])) + + @property + def area_labels(self): + return u", ".join([unicode(area) for area in self.areas.all()]) class IshtarUser(FullSearch): diff --git a/ishtar_common/templates/ishtar/sheet_person.html b/ishtar_common/templates/ishtar/sheet_person.html index 65c94d188..c1fe0504e 100644 --- a/ishtar_common/templates/ishtar/sheet_person.html +++ b/ishtar_common/templates/ishtar/sheet_person.html @@ -10,14 +10,16 @@ {% block content %} <div class="row"> -{% field_flex "Title" item.full_title %} -{% field_flex "Name" item.name %} -{% field_flex "Surname" item.surname %} -{% field_flex "Raw name" item.raw_name %} -{% field_flex_detail "Created by" item.history_creator.ishtaruser.person %} -{% field_flex "Email" item.email %} -{% field_flex "Type(s)" item.person_types_list %} -{% field_flex "Profile(s)" item.profiles_list %} + {% field_flex "Title" item.full_title %} + {% field_flex "Name" item.name %} + {% field_flex "Surname" item.surname %} + {% field_flex "Raw name" item.raw_name %} + {% field_flex_detail "Created by" item.history_creator.ishtaruser.person %} + {% field_flex "Email" item.email %} + {% field_flex "Type(s)" item.person_types_list %} + {% if ADMIN %} + {% field_flex "Profile(s)" item.profiles_list %} + {% endif %} </div> {% if item.phone or item.phone2 or item.phone3 or item.mobile_phone %} diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index dcad096cf..ca4937ec3 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -1482,6 +1482,7 @@ class AccountWizard(Wizard): profile_form = form_dict['profile-account_management'] for form in profile_form: data = form.cleaned_data + print(data) profile = None if data.get('pk', None): try: @@ -1503,14 +1504,24 @@ class AccountWizard(Wizard): except models.ProfileType.DoesNotExist: continue if profile: - if profile_type == profile.profile_type: - # no change + if profile_type != profile.profile_type: + profile.profile_type = profile_type + profile.save() + else: + profile = models.UserProfile.objects.create( + profile_type=profile_type, person=person) + area_pks = data.get('area', None) + areas = [] + if area_pks: + try: + areas = [models.Area.objects.get(pk=pk) for pk in area_pks] + except models.Area.DoesNotExist: + # something wrong is happening - doing nothing on areas continue - profile.profile_type = profile_type - profile.save() - continue - models.UserProfile.objects.create( - profile_type=profile_type, person=person) + profile.areas.clear() + for area in areas: + profile.areas.add(area) + final_form = form_dict['final-account_management'] if settings.ADMINS and type(final_form.cleaned_data) == dict and \ |