diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kehotus_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kehotus_test.clj new file mode 100644 index 000000000..a98cdc878 --- /dev/null +++ b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/kehotus_test.clj @@ -0,0 +1,126 @@ +(ns solita.etp.valvonta-kaytto.kehotus-test + (:require + [clojure.test :as t] + [jsonista.core :as j] + [ring.mock.request :as mock] + [solita.common.time :as time] + [solita.etp.document-assertion :as doc] + [solita.etp.service.pdf :as pdf] + [solita.etp.service.valvonta-kaytto :as valvonta-service] + [solita.etp.test-data.kayttaja :as test-kayttajat] + [solita.etp.test-system :as ts]) + (:import (java.time Clock LocalDate))) + +(t/use-fixtures :each ts/fixture) + +(t/deftest kehotus-test + ;; Add the main user for the following tests + (test-kayttajat/insert-virtu-paakayttaja! + {:etunimi "Asian" + :sukunimi "Tuntija" + :email "testi@ara.fi" + :puhelin "0504363675457" + :titteli-fi "energia-asiantuntija" + :titteli-sv "energiexpert"}) + (t/testing "Kehotus toimenpide is created successfully for yksityishenkilö and document is generated with correct information" + ;; Add the valvonta and previous toimenpides + ;; so that käskypäätös / kuulemiskirje toimenpide can be created + (let [valvonta-id (valvonta-service/add-valvonta! ts/*db* {:katuosoite "Testitie 5" + :postinumero "90100" + :havaintopaiva (LocalDate/of 2023 7 22) + :ilmoituspaikka-id 0 + :ilmoitustunnus "ASF5"}) + html->pdf-called? (atom false) + ;; Add osapuoli to the valvonta + osapuoli-id (valvonta-service/add-henkilo! ts/*db* + valvonta-id + {:toimitustapa-description nil + :toimitustapa-id 2 + :email nil + :rooli-id 0 + :jakeluosoite "Testikatu 12" + :postitoimipaikka "Helsinki" + :puhelin nil + :sukunimi "Talonomistaja" + :postinumero "00100" + :henkilotunnus "000000-0000" + :rooli-description "Omistaja" + :etunimi "Testi" + :vastaanottajan-tarkenne nil + :maa "FI"})] + + ;; Mock the current time to ensure that the document has a fixed date + (with-bindings {#'time/clock (Clock/fixed (-> (LocalDate/of 2023 6 26) + (.atStartOfDay time/timezone) + .toInstant) + time/timezone) + #'pdf/html->pdf (partial doc/html->pdf-with-assertion + "documents/kehotus.html" + html->pdf-called?) + } + (let [new-toimenpide {:type-id 2 + :deadline-date (str (LocalDate/of 2023 7 22)) + :template-id 3 + :description "Lähetetään kehotus"} + response (ts/handler (-> (mock/request :post (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (mock/json-body new-toimenpide) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/json")))] + (t/is (true? @html->pdf-called?)) + (t/is (= (:status response) 201)) + + (t/testing "Toimenpide is returned through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/json"))) + response-body (j/read-value (:body response) j/keyword-keys-object-mapper)] + (t/is (= (:status response) 200)) + (t/is (= (count response-body) 1)) + (t/is (= (-> response-body + last + (dissoc :publish-time :create-time)) + {:author {:etunimi "Asian" + :id 1 + :rooli-id 2 + :sukunimi "Tuntija"} + :deadline-date "2023-07-22" + :description "Lähetetään kehotus" + :diaarinumero nil + :filename "kehotus.pdf" + :henkilot [{:email nil + :etunimi "Testi" + :henkilotunnus "000000-0000" + :id 1 + :jakeluosoite "Testikatu 12" + :maa "FI" + :postinumero "00100" + :postitoimipaikka "Helsinki" + :puhelin nil + :rooli-description "Omistaja" + :rooli-id 0 + :sukunimi "Talonomistaja" + :toimitustapa-description nil + :toimitustapa-id 2 + :valvonta-id 1 + :vastaanottajan-tarkenne nil}] + :id 1 + :template-id 3 + :type-id 2 + :type-specific-data nil + :valvonta-id 1 + :yritykset []})))) + + (t/testing "Created document can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/document/kehotus.pdf" valvonta-id 1 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf"))) + pdf-document (doc/read-pdf (:body response))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)) + + (t/testing "and document has two pages" + (t/is (= (.getNumberOfPages pdf-document) + 2))) + + (t/testing "and document looks as it should" + (doc/assert-pdf-matches-visually pdf-document "documents/kehotus.pdf"))))))))) \ No newline at end of file diff --git a/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/varoitus_test.clj b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/varoitus_test.clj new file mode 100644 index 000000000..d508f1f14 --- /dev/null +++ b/etp-core/etp-backend/src/test/clj/solita/etp/valvonta_kaytto/varoitus_test.clj @@ -0,0 +1,137 @@ +(ns solita.etp.valvonta-kaytto.varoitus-test + (:require + [clojure.java.jdbc :as jdbc] + [clojure.test :as t] + [jsonista.core :as j] + [ring.mock.request :as mock] + [solita.common.time :as time] + [solita.etp.document-assertion :as doc] + [solita.etp.service.pdf :as pdf] + [solita.etp.service.valvonta-kaytto :as valvonta-service] + [solita.etp.test-data.kayttaja :as test-kayttajat] + [solita.etp.test-system :as ts]) + (:import (java.time Clock LocalDate ZoneId))) + +(t/use-fixtures :each ts/fixture) + +(t/deftest varoitus-test + ;; Add the main user for the following tests + (test-kayttajat/insert-virtu-paakayttaja! + {:etunimi "Asian" + :sukunimi "Tuntija" + :email "testi@ara.fi" + :puhelin "0504363675457" + :titteli-fi "energia-asiantuntija" + :titteli-sv "energiexpert"}) + (t/testing "Kehotus toimenpide is created successfully for yksityishenkilö and document is generated with correct information" + ;; Add the valvonta and previous toimenpides + ;; so that käskypäätös / kuulemiskirje toimenpide can be created + (let [valvonta-id (valvonta-service/add-valvonta! ts/*db* {:katuosoite "Testitie 5" + :postinumero "90100" + :havaintopaiva (LocalDate/of 2023 7 22) + :ilmoituspaikka-id 0 + :ilmoitustunnus "ASF5"}) + kehotus-timestamp (-> (LocalDate/of 2023 6 12) + (.atStartOfDay (ZoneId/systemDefault)) + .toInstant) + html->pdf-called? (atom false) + ;; Add osapuoli to the valvonta + osapuoli-id (valvonta-service/add-henkilo! ts/*db* + valvonta-id + {:toimitustapa-description nil + :toimitustapa-id 2 + :email nil + :rooli-id 0 + :jakeluosoite "Testikatu 12" + :postitoimipaikka "Helsinki" + :puhelin nil + :sukunimi "Talonomistaja" + :postinumero "00100" + :henkilotunnus "000000-0000" + :rooli-description "Omistaja" + :etunimi "Testi" + :vastaanottajan-tarkenne nil + :maa "FI"})] + + ;; Add kehotus-toimenpide to the valvonta + (jdbc/insert! ts/*db* :vk_toimenpide {:valvonta_id valvonta-id + :type_id 2 + :create_time kehotus-timestamp + :publish_time kehotus-timestamp + :deadline_date (LocalDate/of 2023 7 12)}) + + ;; Mock the current time to ensure that the document has a fixed date + (with-bindings {#'time/clock (Clock/fixed (-> (LocalDate/of 2023 6 26) + (.atStartOfDay time/timezone) + .toInstant) + time/timezone) + #'pdf/html->pdf (partial doc/html->pdf-with-assertion + "documents/varoitus.html" + html->pdf-called?) + } + (let [new-toimenpide {:type-id 3 + :deadline-date (str (LocalDate/of 2023 7 22)) + :template-id 4 + :description "Lähetetään varoitus"} + response (ts/handler (-> (mock/request :post (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (mock/json-body new-toimenpide) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/json")))] + (t/is (true? @html->pdf-called?)) + (t/is (= (:status response) 201)) + + (t/testing "Toimenpide is returned through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet" valvonta-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/json"))) + response-body (j/read-value (:body response) j/keyword-keys-object-mapper)] + (t/is (= (:status response) 200)) + (t/is (= (count response-body) 2)) + (t/is (= (-> response-body + last + (dissoc :publish-time :create-time)) + {:author {:etunimi "Asian" + :id 1 + :rooli-id 2 + :sukunimi "Tuntija"} + :deadline-date "2023-07-22" + :description "Lähetetään varoitus" + :diaarinumero nil + :filename "varoitus.pdf" + :henkilot [{:email nil + :etunimi "Testi" + :henkilotunnus "000000-0000" + :id 1 + :jakeluosoite "Testikatu 12" + :maa "FI" + :postinumero "00100" + :postitoimipaikka "Helsinki" + :puhelin nil + :rooli-description "Omistaja" + :rooli-id 0 + :sukunimi "Talonomistaja" + :toimitustapa-description nil + :toimitustapa-id 2 + :valvonta-id 1 + :vastaanottajan-tarkenne nil}] + :id 2 + :template-id 4 + :type-id 3 + :type-specific-data nil + :valvonta-id 1 + :yritykset []})))) + + (t/testing "Created document can be downloaded through the api" + (let [response (ts/handler (-> (mock/request :get (format "/api/private/valvonta/kaytto/%s/toimenpiteet/%s/henkilot/%s/document/varoitus.pdf" valvonta-id 2 osapuoli-id)) + (test-kayttajat/with-virtu-user) + (mock/header "Accept" "application/pdf"))) + pdf-document (doc/read-pdf (:body response))] + (t/is (= (-> response :headers (get "Content-Type")) "application/pdf")) + (t/is (= (:status response) 200)) + + (t/testing "and document has two pages" + (t/is (= (.getNumberOfPages pdf-document) + 2))) + + (t/testing "and document looks as it should" + (doc/assert-pdf-matches-visually pdf-document "documents/varoitus.pdf"))))))))) \ No newline at end of file diff --git a/etp-core/etp-backend/src/test/resources/documents/kehotus.html b/etp-core/etp-backend/src/test/resources/documents/kehotus.html new file mode 100644 index 000000000..2faa67d5b --- /dev/null +++ b/etp-core/etp-backend/src/test/resources/documents/kehotus.html @@ -0,0 +1,105 @@ +
+ KEHOTUS/UPPMANING
+ 26.06.2023
+ +
+ +
+ Testi Talonomistaja +
+
+ + + + + +
Kohde/Objekt: +
Testitie 5
+
90100 OULU
+
+ Ilmoituspaikka/Meddelandeplats: Etuovi
+ Ilmoitustunnus/Meddelandekod: ASF5
+ Havaintopäivä/Observationsdatum: 22.07.2023
+
+ +

Energiatodistusvalvonnan kehotus

+ +

+ Valvontamme perusteella myynnissä tai vuokrattavana olevaa rakennustanne/asuntoanne markkinoidaan julkisesti + ilman energiatodistusta. Mikäli kohteen julkista markkinointia jatketaan tai se myydään, ARA kehottaa + esittämään energiatodistuksen 22.07.2023 mennessä sähköpostitse energiatodistus@ara.fi tai postitse. +

+ +

+ Energiatodistus on hankittava ennen kuin kohdetta aletaan markkinoida julkisesti, sillä myynti- tai + vuokrausilmoituksessa on mainittava kohteen energiatehokkuusluokka. Rakennusta, huoneistoa tai niiden + hallintaoikeutta myytäessä tai vuokrattaessa täytyy olla energiatodistus. Energiatodistus on annettava joko + alkuperäisenä tai jäljennöksenä ostajalle tai vuokralaiselle. Rakennuksen omistaja tai haltija vastaa siitä, + että rakennuksen energiatodistus hankitaan ja sitä käytetään laissa säädetyissä tilanteissa. +

+ +

+ Asumisen rahoitus- ja kehittämiskeskuksen (ARA) tehtävänä on valvoa energiatodistusten käyttämistä myynti- + ja vuokraustilanteissa. Jos rakennuksen omistaja ei täytä laissa säädettyjä velvollisuuksiaan, ARA kehottaa + korjaamaan asian ja antaa määräajan korjaukselle. Jos asiaa ei korjata määräajassa, ARA antaa rakennuksen + omistajalle varoituksen ja uuden määräajan. Jos asiaa ei edelleenkään korjata, ARA antaa omistajaa + velvoittavan käskypäätöksen, jota voidaan tehostaa uhkasakolla. +

+ +
+ +

Uppmaning till tillsyn över energicertifikat

+ +

+ På basis av vår tillsyn marknadsförs den byggnad/bostad som ni ska sälja eller hyra ut offentligt utan + energicertifikat. Om den offentliga marknadsföringen av objektet fortsätter eller om det säljs uppmanar + ARA er att skicka in ett energicertifikat senast den 22.07.2023 per e-post till energiatodistus@ara.fi + eller per post. +

+ +

+ Ett energicertifikat ska skaffas innan objektet börjar marknadsföras offentligt, eftersom objektets + energieffektivitetsklass ska nämnas i försäljnings- eller hyresannonsen. Vid försäljning eller uthyrning av + en byggnad eller lägenhet eller besittningsrätten till dem måste det finnas ett + energicertifikat. Energicertifikatet ska överlämnas till köparen eller hyrestagaren antingen i original + eller som kopia. Byggnadens ägare eller innehavare ansvarar för att byggnadens energicertifikat skaffas och + används i de situationer som regleras i lagen. +

+ +

+ Finansierings- och utvecklingscentralen för boendet (ARA) har till uppgift att övervaka användningen av + energicertifikat vid försäljning och uthyrning. Om byggnadens ägare inte uppfyller sin lagstadgade + skyldigheter uppmanar ARA ägaren att korrigera saken och ställer upp en tidsfrist för korrigeringen. Om + saken inte korrigeras inom tidsfristen ger ARA byggnadens ägare en varning och en ny tidsfrist. Om saken + alltjämt inte korrigeras ger ARA ägaren ett förpliktande beslut om order, som kan förenas med ett vite. +

+ +

+ Asian Tuntija +
+ energia-asiantuntija/energiexpert, ARA +

+ + + + + + + + + + + + + + + + +
Sovelletut säännökset:Laki rakennuksen energiatodistuksesta (50/2013)
Tillämpade förordningar: Lagen om energicertifikat för byggnader (50/2013)
Tiedoksi/För kännedom:
+
    +
+
+ + + + \ No newline at end of file diff --git a/etp-core/etp-backend/src/test/resources/documents/kehotus.pdf b/etp-core/etp-backend/src/test/resources/documents/kehotus.pdf new file mode 100644 index 000000000..b0db31ef9 Binary files /dev/null and b/etp-core/etp-backend/src/test/resources/documents/kehotus.pdf differ diff --git a/etp-core/etp-backend/src/test/resources/documents/varoitus.html b/etp-core/etp-backend/src/test/resources/documents/varoitus.html new file mode 100644 index 000000000..2f9cf3085 --- /dev/null +++ b/etp-core/etp-backend/src/test/resources/documents/varoitus.html @@ -0,0 +1,99 @@ +
+ VAROITUS/VARNING
+ 26.06.2023
+ +
+ +
+ Testi Talonomistaja +
+
+ + + + + +
Kohde/Objekt: +
Testitie 5
+
90100 OULU
+
+ Ilmoituspaikka/Meddelandeplats: Etuovi
+ Ilmoitustunnus/Meddelandekod: ASF5
+ Havaintopäivä/Observationsdatum: 22.07.2023
+ Kehotuksen päivämäärä/Uppmaningsdatum: 12.06.2023 +
+ +

Energiatodistusvalvonnan varoitus

+ +

+ Asumisen rahoitus- ja kehittämiskeskuksen (ARA) tehtävänä on valvoa energiatodistusten käyttämistä myynti- + ja vuokraustilanteissa. ARA on lähettänyt teille kehotuksen liittyen rakennuksen/asunnon markkinointiin + ilman energiatodistusta. ARA antaa Teille varoituksen. Mikäli kohteen julkista markkinointia + jatketaan tai se myydään, ARA pyytää esittämään energiatodistuksen 22.07.2023 mennessä sähköpostitse + energiatodistus@ara.fi tai postitse. +

+ +

+ Rakennusta, huoneistoa tai niiden hallintaoikeutta myytäessä tai vuokrattaessa täytyy olla + energiatodistus. Energiatodistus on annettava joko alkuperäisenä tai jäljennöksenä ostajalle tai + vuokralaiselle. Myynti- tai vuokrausilmoituksessa on oltava myytävän kohteen + energiatehokkuusluokka. Rakennuksen omistaja tai haltija vastaa siitä, että rakennuksen energiatodistus + hankitaan ja sitä käytetään laissa säädetyissä tilanteissa. +

+ +

+ Jos energiatodistusta ei hankita ja esitetä ARAlle tässä varoituksessa asetetussa määräajassa, ARA antaa + tilanteen mukaisen käskypäätöksen. Käskypäätöstä tehostetaan uhkasakolla. +

+ +
+ +

Varning från tillsyn av energicertifikat

+ +

+ Finansierings- och utvecklingscentralen för boendet (ARA) har till uppgift att övervaka användningen av + energicertifikat vid försäljning och uthyrning. ARA har skickat er uppmaning angående marknadsföring av en + byggnad/bostad utan energicertifikat. ARA tilldelar er en varning. Om den offentliga marknadsföringen + av objektet fortsätter eller om det säljs ber ARA er att skicka in ett energicertifikat senast + 22.07.2023 per e-post till energiatodistus@ara.fi eller per post. +

+ +

+ Vid försäljning eller uthyrning av en byggnad eller lägenhet eller besittningsrätten till dem måste det + finnas ett energicertifikat. Energicertifikatet ska överlämnas till köparen eller hyrestagaren antingen i + original eller som kopia. Meddelandet om försäljning eller uthyrning ska innehålla objektets + energieffektivitetsklass. Byggnadens ägare eller innehavare ansvarar för att byggnadens energicertifikat + skaffas och används i de situationer som regleras i lagen. +

+ +

+ Om energicertifikat inte skaffas och framvisas till ARA inom tidsfristen i denna varning tilldelar ARA ett + lämpligt beslut om föreläggande. Beslutet om föreläggande kan förenas med ett vite. +

+ +

+ Asian Tuntija +
+ energia-asiantuntija/energiexpert, ARA +

+ + + + + + + + + + + + + + +
Sovelletut säännökset:Laki rakennuksen energiatodistuksesta (50/2013)
Tillämpade förordningar: Lagen om energicertifikat för byggnader (50/2013)
Tiedoksi/För kännedom: +
+
+ + + + \ No newline at end of file diff --git a/etp-core/etp-backend/src/test/resources/documents/varoitus.pdf b/etp-core/etp-backend/src/test/resources/documents/varoitus.pdf new file mode 100644 index 000000000..bb8e05f06 Binary files /dev/null and b/etp-core/etp-backend/src/test/resources/documents/varoitus.pdf differ diff --git a/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-kehotus.sql b/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-kehotus.sql index d989491ad..5c1ed6460 100644 --- a/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-kehotus.sql +++ b/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-kehotus.sql @@ -97,8 +97,8 @@ $$

{{#valvoja}} {{etunimi}} {{sukunimi}} - {{/valvoja}}
- energia-asiantuntija/energiexpert, ARA +
+ {{titteli-fi}}/{{titteli-sv}}{{/valvoja}}, ARA

diff --git a/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-varoitus.sql b/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-varoitus.sql index 49d97af96..e3b31ef66 100644 --- a/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-varoitus.sql +++ b/etp-core/etp-db/src/main/sql/migration/repeatable/vk_template/r-vk-template-tietopyynto-varoitus.sql @@ -94,8 +94,8 @@ $$

{{#valvoja}} {{etunimi}} {{sukunimi}} - {{/valvoja}}
- energia-asiantuntija/energiexpert, ARA +
+ {{titteli-fi}}/{{titteli-sv}}{{/valvoja}}, ARA

diff --git a/etp-front/src/pages/kayttaja/kayttaja-form.svelte b/etp-front/src/pages/kayttaja/kayttaja-form.svelte index 8e3c25c04..a15885884 100644 --- a/etp-front/src/pages/kayttaja/kayttaja-form.svelte +++ b/etp-front/src/pages/kayttaja/kayttaja-form.svelte @@ -38,12 +38,18 @@ $: isValidForm = Validation.isValidForm(schema); - $: isPaakayttaja = Kayttajat.isPaakayttaja(whoami); + $: isCurrentUserPaakayttaja = Kayttajat.isPaakayttaja(whoami); $: isOwnSettings = R.eqProps('id', kayttaja, whoami); + $: isEditedUserPaakayttaja = Maybe.fold( + false, + Kayttajat.isPaakayttajaRole, + kayttaja.rooli + ); + $: isSystem = Maybe.exists(Kayttajat.isSystemRole, kayttaja.rooli); - $: disabled = isSystem || (!isPaakayttaja && !isOwnSettings); - $: disabledAdmin = isSystem || !isPaakayttaja; + $: disabled = isSystem || (!isCurrentUserPaakayttaja && !isOwnSettings); + $: disabledAdmin = isSystem || !isCurrentUserPaakayttaja; $: formatRooli = Locales.labelForId($locale, roolit); @@ -180,7 +186,7 @@ - {#if isPaakayttaja && isOwnSettings} + {#if isCurrentUserPaakayttaja && isEditedUserPaakayttaja}