From 60843f670447b8359c633e05f0ebff3018db17bf Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 25 Mar 2024 17:17:34 +0100 Subject: ✨ Biographical notes edit form MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/forms_common.py | 12 ++++++++ ishtar_common/models.py | 36 +++++++++++++++++++++- ishtar_common/templates/ishtar/forms/success.html | 2 +- .../templates/ishtar/sheet_biographicalnote.html | 2 +- ishtar_common/urls.py | 7 +++++ ishtar_common/views.py | 16 ++++++++++ 6 files changed, 72 insertions(+), 3 deletions(-) diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index e6e62288e..6e0c23188 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -1466,6 +1466,18 @@ class BiographicalNoteForm(ManageOldType, NewItemForm): return item +class BiographicalNoteEditForm(BiographicalNoteForm, IshtarForm): + def __init__(self, *args, **kwargs): + self.items = kwargs.pop("items") if "items" in kwargs else None + initial = {} + if self.items: + self.item = self.items[0] + for k in self.base_fields: + initial[k] = getattr(self.item, k) + kwargs["initial"] = initial + super().__init__(*args, **kwargs) + + class AccountForm(IshtarForm): form_label = _("Account") associated_models = {"pk": models.Person} diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 4d9225a3a..110ac9a50 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3194,7 +3194,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem): fle.save() # force update of raw_general_contractor def get_extra_actions(self, request): - actions = super(Person, self).get_extra_actions(request) + actions = super().get_extra_actions(request) # for admin only if not request.user.is_staff: @@ -3270,9 +3270,22 @@ class BiographicalNote(BaseHistorizedItem, ValueGetter, MainItem): related_name="biographical_notes" ) + QA_EDIT = QuickAction( + url="biographicalnote-qa-edit", + icon_class="fa fa-pencil", + text=_("Edit biographical note"), + rights=["change_biographicalnote", "change_own_biographicalnote"], + ) + class Meta: verbose_name = _("Biographical note") verbose_name_plural = _("Biographical notes") + permissions = ( + ("view_own_biographicalnote", "Can view own Biographical note"), + ("add_own_biographicalnote", "Can add own Biographical note"), + ("change_own_biographicalnote", "Can change own Biographical note"), + ("delete_own_biographicalnote", "Can delete own Biographical note"), + ) ADMIN_SECTION = _("Directory") @property @@ -3300,6 +3313,27 @@ class BiographicalNote(BaseHistorizedItem, ValueGetter, MainItem): def set_slug(self): self.slug = create_slug(self.__class__, self.denomination, max_length=250, pk=self.pk) + def get_extra_actions(self, request): + """ + For sheet template + """ + # url, base_text, icon, extra_text, extra css class, is a quick action, + actions = super().get_extra_actions(request) + can_edit = self.can_do(request, "change_biographicalnote") + if not can_edit: + return actions + actions += [ + ( + reverse("biographicalnote-qa-edit", args=[self.pk]), + _("Edit"), + "fa fa-pencil", + "", + "", + True, + ), + ] + return actions + def save(self, *args, **kwargs): if not self.slug: self.set_slug() diff --git a/ishtar_common/templates/ishtar/forms/success.html b/ishtar_common/templates/ishtar/forms/success.html index 9a86e893e..e18efd605 100644 --- a/ishtar_common/templates/ishtar/forms/success.html +++ b/ishtar_common/templates/ishtar/forms/success.html @@ -24,7 +24,7 @@ $(document).ready(function(){ diff --git a/ishtar_common/templates/ishtar/sheet_biographicalnote.html b/ishtar_common/templates/ishtar/sheet_biographicalnote.html index 64a6b4d9c..47104066b 100644 --- a/ishtar_common/templates/ishtar/sheet_biographicalnote.html +++ b/ishtar_common/templates/ishtar/sheet_biographicalnote.html @@ -4,7 +4,7 @@ {% block head_title %}{% trans "Biographical note"%} - {{item}}{% endblock %} {% block toolbar %} -{% window_nav item window_id 'show-person' 'person_modify' %} +{% window_nav item window_id 'show-biographicalnote' %} {% endblock %} {% block content %} diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 955563875..b7a43f82a 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -414,6 +414,13 @@ urlpatterns += [ views.new_biographical_note, name="new-biographicalnote", ), + url( + r"^biographicalnote-qa-edit/(?P[0-9-]+)?/$", + check_rights(["change_biographicalnote", "change_own_biographicalnote"])( + views.QABiographicalNoteForm.as_view() + ), + name="biographicalnote-qa-edit", + ), url( r"department-by-state/(?P.+)?$", views.department_by_state, diff --git a/ishtar_common/views.py b/ishtar_common/views.py index ea5a3c4d2..6a25fd904 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -3092,6 +3092,22 @@ class QAPersonForm(QAItemEditForm): return HttpResponseRedirect(reverse("success")) +class QABiographicalNoteForm(QAItemForm): + model = models.BiographicalNote + form_class = forms.BiographicalNoteEditForm + page_name = _("Modify") + + def get_quick_action(self): + return self.model.QA_EDIT + + def form_valid(self, form): + return self.form_save(form) + + def form_save(self, form): + form.save(self.request.user, self.items[0]) + return HttpResponseRedirect(reverse("success")) + + class QADocumentForm(QAItemEditForm): model = models.Document form_class = forms.QADocumentFormMulti -- cgit v1.2.3