Skip to content

Commit

Permalink
[#2098] Display/hide older questions
Browse files Browse the repository at this point in the history
  • Loading branch information
pi-sigma committed Mar 6, 2024
1 parent 8f120d5 commit 5835a93
Show file tree
Hide file tree
Showing 10 changed files with 195 additions and 52 deletions.
4 changes: 2 additions & 2 deletions src/open_inwoner/cms/cases/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
CaseDocumentUploadFormView,
InnerCaseDetailView,
InnerCaseListView,
KCM_RedirectView,
KCMRedirectView,
OuterCaseDetailView,
OuterCaseListView,
)
Expand All @@ -31,7 +31,7 @@
),
path(
"contactmoment/<str:uuid>/",
KCM_RedirectView.as_view(),
KCMRedirectView.as_view(),
name="kcm_redirect",
),
path(
Expand Down
4 changes: 2 additions & 2 deletions src/open_inwoner/cms/cases/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
CaseDocumentDownloadView,
CaseDocumentUploadFormView,
InnerCaseDetailView,
KCM_RedirectView,
KCMRedirectView,
OuterCaseDetailView,
)

Expand All @@ -16,5 +16,5 @@
"CaseDocumentUploadFormView",
"InnerCaseDetailView",
"OuterCaseDetailView",
"KCM_RedirectView",
"KCMRedirectView",
]
6 changes: 4 additions & 2 deletions src/open_inwoner/cms/cases/views/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ def get_anchors(self, statuses, documents):
return anchors


class KCM_RedirectView(KlantContactMomentAccessMixin, View):
class KCMRedirectView(KlantContactMomentAccessMixin, View):
"""
Redirect to `KlantContactMomentDetailView` on the basis of contactmoment uuid
Expand All @@ -663,7 +663,9 @@ def get(self, request, *args, **kwargs):
raise Http404

contactmoment_uuid = kwargs["uuid"]
kcm = next((kcm for kcm in kcms if kcm.uuid == contactmoment_uuid))
kcm = next(
(kcm for kcm in kcms if str(kcm.contactmoment.uuid) == contactmoment_uuid)
)

if not kcm:
raise Http404
Expand Down
43 changes: 43 additions & 0 deletions src/open_inwoner/js/components/card/ToggleHideSelection.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
export class ToggleHideSelection {
static selector = '.card'

constructor(node) {
this.node = node
this.button = document.querySelector('#toggle-hide-elements')
this.button?.addEventListener('click', this.toggleHide.bind(this))

// save default button text for toggling
this.node.buttonText = this.button.textContent

// hide all but the first 3 cards by default
var allCards = document.querySelectorAll('.card')
var cardsTail = Array.from(allCards).slice(3)
cardsTail.forEach((element) => {
element.classList.add('hide-me')
})
}

toggleHide() {
var allCards = document.querySelectorAll('.card')
var cardsTail = Array.from(allCards).slice(3)

cardsTail.forEach((e) => {
this.node.classList.toggle('hide-me')
})

// toggle button text
for (var i = 0; i < cardsTail.length; i++) {
if (cardsTail[i].classList.contains('hide-me')) {
this.button.textContent = this.node.buttonText
break
} else {
this.button.textContent = 'Minder toon'
break
}
}
}
}

document
.querySelectorAll(ToggleHideSelection.selector)
.forEach((toggleHide) => new ToggleHideSelection(toggleHide))
2 changes: 2 additions & 0 deletions src/open_inwoner/js/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import { StatusAccordion } from './cases/status_accordion'
import './session'
import './twofactor-sms'
import { FileInput } from './form/FileInput'
import { ToggleHideSelection } from './card/ToggleHideSelection'

const htmx = (window.htmx = require('htmx.org'))

Expand All @@ -55,6 +56,7 @@ const elementWrappers = [
[AnchorMobile.selector, (elt) => new AnchorMobile(elt)],
[StatusAccordion.selector, (elt) => new StatusAccordion(elt)],
[FileInput.selector, (elt) => new FileInput(elt)],
[ToggleHideSelection.selector, (elt) => new ToggleHideSelection(elt)],
]

// harden against multiple events
Expand Down
96 changes: 94 additions & 2 deletions src/open_inwoner/openzaak/tests/test_case_detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@


CONTACTMOMENTEN_ROOT = "https://contactmomenten.nl/api/v1/"
KLANTEN_ROOT = "https://klanten.nl/api/v1/"


@requests_mock.Mocker()
Expand Down Expand Up @@ -461,7 +462,7 @@ def setUp(self):
bestandsomvang=123,
)
#
# (object-) contactmomenten
# contactmomenten
#
self.contactmoment = generate_oas_component_cached(
"cmc",
Expand All @@ -472,7 +473,8 @@ def setUp(self):
type="SomeType",
kanaal="Contactformulier",
status=ContactMomentStatus.afgehandeld,
antwoord="yes",
tekst="Garage verbouwen?",
antwoord="Nee",
onderwerp="e_suite_subject_code",
)
self.contactmoment2 = generate_oas_component_cached(
Expand Down Expand Up @@ -576,8 +578,10 @@ def _setUpMocks(self, m, use_eindstatus=True):
self.status_type_new,
self.status_type_in_behandeling,
self.status_type_finish,
# self.klant,
self.contactmoment,
self.contactmoment2,
# self.klant_contactmoment,
self.objectcontactmoment,
self.objectcontactmoment2,
]:
Expand Down Expand Up @@ -676,6 +680,24 @@ def _setUpMocks(self, m, use_eindstatus=True):
),
)

# klanten, contactmomenten, etc.
# m.get(
# f"{KLANTEN_ROOT}klanten?subjectNatuurlijkPersoon__inpBsn={self.user.bsn}",
# json=paginated_response([self.klant]),
# )
# m.get(
# f"{KLANTEN_ROOT}klanten?subjectNietNatuurlijkPersoon__innNnpId={self.eherkenning_user.rsin}",
# json=paginated_response([self.klant]),
# )
# m.get(
# f"{CONTACTMOMENTEN_ROOT}klantcontactmomenten?klant={self.klant['url']}",
# json=paginated_response([self.klant_contactmoment]),
# )
# m.get(
# f"{CONTACTMOMENTEN_ROOT}objectcontactmomenten?contactmoment={self.contactmoment['url']}",
# json=paginated_response([self.objectcontactmoment]),
# )

@patch("open_inwoner.userfeed.hooks.case_status_seen")
@patch("open_inwoner.userfeed.hooks.case_documents_seen")
def test_status_is_retrieved_when_user_logged_in_via_digid(
Expand Down Expand Up @@ -1265,10 +1287,14 @@ def test_page_displays_expected_data(self, m):
@patch(
"open_inwoner.cms.cases.views.status.InnerCaseDetailView.get_objectcontactmomenten"
)
# @patch(
# "open_inwoner.openklant.clients.KlantenClient"
# )
def test_page_displays_expected_data_for_eherkenning_user(self, m, ocm_mock):
self._setUpMocks(m)

ocm_mock.return_value = []
# klant_mock.return_value.retrieve_client.return_value = None

for fetch_eherkenning_zaken_with_rsin in [True, False]:
with self.subTest(
Expand Down Expand Up @@ -2213,3 +2239,69 @@ def test_request_error_in_connecting_doc_with_zaak_shows_proper_message(
f"Een fout is opgetreden bij het uploaden van {self.uploaded_informatie_object['bestandsnaam']}"
),
)

def test_kcm_redirect(self, m):
"""Check redirect from question embedded in case detail to klant_contactmoment detail"""

self._setUpMocks(m)

#
# extra configs + mocks
#
self.klanten_service = ServiceFactory(
api_root=KLANTEN_ROOT, api_type=APITypes.kc
)
self.openklant_config.klanten_service = self.klanten_service
self.openklant_config.save()

klant = generate_oas_component_cached(
"kc",
"schemas/Klant",
uuid="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
url=f"{KLANTEN_ROOT}klant/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
emailadres="new@example.com",
telefoonnummer="0612345678",
)

klant_contactmoment = generate_oas_component_cached(
"cmc",
"schemas/KlantContactMoment",
uuid="aaaaaaaa-aaaa-aaaa-aaaa-cccccccccccc",
url=f"{CONTACTMOMENTEN_ROOT}klantcontactmomenten/aaaaaaaa-aaaa-aaaa-aaaa-cccccccccccc",
klant=klant["url"],
contactmoment=self.contactmoment["url"],
)

m.get(
f"{KLANTEN_ROOT}klanten?subjectNatuurlijkPersoon__inpBsn={self.user.bsn}",
json=paginated_response([klant]),
)
m.get(
f"{KLANTEN_ROOT}klanten?subjectNietNatuurlijkPersoon__innNnpId={self.eherkenning_user.rsin}",
json=paginated_response([klant]),
)
m.get(
f"{CONTACTMOMENTEN_ROOT}klantcontactmomenten?klant={klant['url']}",
json=paginated_response([klant_contactmoment]),
)
m.get(
f"{CONTACTMOMENTEN_ROOT}objectcontactmomenten?contactmoment={self.contactmoment['url']}",
json=paginated_response([self.objectcontactmoment]),
)

#
# asserts
#
response = self.app.get(
reverse("cases:kcm_redirect", kwargs={"uuid": self.contactmoment["uuid"]}),
user=self.user,
)
self.assertRedirects(
response,
reverse(
"cases:contactmoment_detail",
kwargs={"kcm_uuid": klant_contactmoment["uuid"]},
),
status_code=302,
target_status_code=200,
)
6 changes: 5 additions & 1 deletion src/open_inwoner/scss/components/Card/Card.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
.hide-me {
display: none;
}

.card {
--card-color-background: white;
--card-color-border: var(--color-gray);
Expand All @@ -11,7 +15,7 @@
border: var(--card-size-border) solid var(--card-color-border);
border-radius: var(--border-radius);
box-sizing: border-box;
display: flex;
// display: flex;
flex-direction: column;
min-height: 70px;
min-width: var(--header-height);
Expand Down
47 changes: 5 additions & 42 deletions src/open_inwoner/templates/pages/cases/status_inner.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
{% if case %}
{% render_grid %}
{% render_column span=12 %}
{# Title/dashboard. #}
{# Title/dashboard #}
<h1 class="utrecht-heading-1" id="title">{{ case.description }}</h1>
{% include "components/Dashboard/Dashboard.html" with metrics=metrics only %}
{% endrender_column %}

{% render_column start=4 span=6 %}
{# Status history. #}
{# Status history #}
<section id="statuses_component" class="statuses__section">
{% include 'pages/cases/statuses.html' %}
</section>
Expand All @@ -41,7 +41,7 @@ <h3 class="h3 documents-upload__h3">{% trans "Voeg documenten toe" %}</h3>
</div>
{% endif %}

{# Upload document form. #}
{# Upload document form #}
<section id="form_upload" class="form__open-upload">
{% include 'pages/cases/document_form.html' %}
</section>
Expand Down Expand Up @@ -75,45 +75,8 @@ <h2 class="h2 {% if case.new_docs %}indicator{% endif %}" id="documents">{% tran

{# Questions/contactmomenten #}
{% if case.questions %}
<div class="contactmomenten">
<h2 class="h3 contactmomenten__title">{% trans "Vragen" %}</h2>
{% for contactmoment in case.questions %}
<div class="card card--compact card--stretch">
<div class="card__body">
{# redirect to fetch klantcontactmoment from contactmoment #}
<a href="{% url 'cases:kcm_redirect' contactmoment.uuid %}" class="contactmomenten__link">
{% render_list %}
<span class="contactmomenten-list">
{% list_item contactmoment.tekst compact=True strong=False %}
<li class="list-item list-item--compact">
{% with register_date=contactmoment.registratiedatum|default:"" %}
<p class="card__caption card__text--small"><span>{% trans "Vraag ingediend op:" %}</span><span class="card__text--dark">{{ register_date|date }}</span></p>
{% endwith %}
</li>
{% if contactmoment.identificatie %}
{% list_item contactmoment.identificatie caption=_("Vraag nummer") compact=True strong=False %}
{% endif %}
<li class="list-item list-item--compact">
{% with channel=contactmoment.kanaal|default:"" %}
<p class="card__caption card__text--small"><span>{% trans "Ingediend via" %}:</span><span class="card__text--dark">{{ channel }}</span></p>
{% endwith %}
</li>
</span>
{% endrender_list %}

<span class="link link--icon link--secondary" aria-label="{% trans "Bekijk vraag" %}" title="{% trans "Bekijk vraag" %}">
<span class="link__text">{% trans "Bekijk vraag" %}</span>
{% icon icon="arrow_forward" icon_position="after" primary=True outlined=True %}
</span>
</a>
</div>
</div>
{% endfor %}
</div>
{% endif %}

{% if case.questions.paginator %}
{% pagination page_obj=case.questions paginator=case.questions.paginator request=request %}
{% include "pages/questions/questions.html" with questions=case.questions only %}
<button id="toggle-hide-elements">{% trans "Toon alle vragen" %}</button>
{% endif %}

{% endrender_column %}
Expand Down
2 changes: 1 addition & 1 deletion src/open_inwoner/templates/pages/cases/status_outer.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<div class="cases__detail" id="cases-detail-content"><div>

<div class="loader-container" id="spinner-container">
<div class="spinner" id="spinner-id" hx-get="{{ hxget }}" hx-trigger="load" hx-target="#cases-detail-content" hx-include="[name='page']">
<div class="spinner" id="spinner-id" hx-get="{{ hxget }}" hx-trigger="load" hx-target="#cases-detail-content">
{% icon icon="rotate_right" extra_classes="spinner-icon rotate" %}
<div class="spinner__content">{% trans "Gegevens laden..." %}</div>
</div>
Expand Down
37 changes: 37 additions & 0 deletions src/open_inwoner/templates/pages/questions/questions.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{% load i18n icon_tags list_tags %}

<div class="contactmomenten">
<h2 class="h3 contactmomenten__title">{% trans "Vragen" %}</h2>
{% for contactmoment in questions %}
<div class="card card--compact card--stretch">
<div class="card__body ">
{# redirect to fetch klantcontactmoment from contactmoment #}
<a href="{% url 'cases:kcm_redirect' contactmoment.uuid %}" class="contactmomenten__link">
{% render_list %}
<span class="contactmomenten-list">
{% list_item contactmoment.tekst compact=True strong=False %}
<li class="list-item list-item--compact">
{% with register_date=contactmoment.registratiedatum|default:"" %}
<p class="card__caption card__text--small"><span>{% trans "Vraag ingediend op:" %}</span><span class="card__text--dark">{{ register_date|date }}</span></p>
{% endwith %}
</li>
{% if contactmoment.identificatie %}
{% list_item contactmoment.identificatie caption=_("Vraag nummer") compact=True strong=False %}
{% endif %}
<li class="list-item list-item--compact">
{% with channel=contactmoment.kanaal|default:"" %}
<p class="card__caption card__text--small"><span>{% trans "Ingediend via" %}:</span><span class="card__text--dark">{{ channel }}</span></p>
{% endwith %}
</li>
</span>
{% endrender_list %}

<span class="link link--icon link--secondary" aria-label="{% trans "Bekijk vraag" %}" title="{% trans "Bekijk vraag" %}">
<span class="link__text">{% trans "Bekijk vraag" %}</span>
{% icon icon="arrow_forward" icon_position="after" primary=True outlined=True %}
</span>
</a>
</div>
</div>
{% endfor %}
</div>

0 comments on commit 5835a93

Please sign in to comment.