Skip to content
This repository has been archived by the owner on Feb 7, 2024. It is now read-only.

Commit

Permalink
Merge pull request #916 from solita/feature/AE-1858
Browse files Browse the repository at this point in the history
AE-1858: Implement new toimenpidetype Käskypäätös / Kuulemiskirje -toimenpide
  • Loading branch information
Juholei authored Jun 28, 2023
2 parents d8cc30f + 1b2f91f commit f09e53e
Show file tree
Hide file tree
Showing 21 changed files with 1,167 additions and 77 deletions.
7 changes: 4 additions & 3 deletions etp-backend/src/main/clj/solita/common/time.clj
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
(ns solita.common.time
(:import (java.time ZoneId LocalDate)
(:import (java.time Clock ZoneId LocalDate)
(java.time.format DateTimeFormatter)))

(def timezone (ZoneId/of "Europe/Helsinki"))
(def date-formatter (.withZone (DateTimeFormatter/ofPattern "dd.MM.yyyy") timezone))

(def ^:dynamic ^Clock clock (Clock/systemDefaultZone))

(defn format-date [date]
(when date
(.format date-formatter date)))
(.format ^DateTimeFormatter date-formatter date)))

(defn today []
(format-date (LocalDate/now)))
(format-date (LocalDate/now clock)))
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
["/toimenpidetyypit"
{:conflicting true
:get {:summary "Hae käytönvalvonnan toimenpidetyypit."
:responses {200 {:body [common-schema/Luokittelu]}}
:responses {200 {:body [valvonta-kaytto-schema/Toimenpidetyypit]}}
:access rooli-service/paakayttaja?
:handler (fn [{:keys [db]}]
(r/response (valvonta-service/find-toimenpidetyypit db)))}}]
Expand Down
18 changes: 13 additions & 5 deletions etp-backend/src/main/clj/solita/etp/schema/valvonta_kaytto.clj
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,12 @@
:description (schema/maybe schema/Str)}))

(def ToimenpideAdd
{:type-id common-schema/Key
:deadline-date (schema/maybe common-schema/Date)
:template-id (schema/maybe common-schema/Key)
:description (schema/maybe schema/Str)
(schema/optional-key :bypass-asha) schema/Bool})
{:type-id common-schema/Key
:deadline-date (schema/maybe common-schema/Date)
:template-id (schema/maybe common-schema/Key)
:description (schema/maybe schema/Str)
(schema/optional-key :bypass-asha) schema/Bool
(schema/optional-key :fine) common-schema/NonNegative})

(def Template
(assoc valvonta-schema/Template
Expand Down Expand Up @@ -102,3 +103,10 @@
(def ExistingValvonta
{:id common-schema/Key
:end-time (schema/maybe common-schema/Instant)})

(def Toimenpidetyypit
(assoc common-schema/Luokittelu
:manually-deliverable
schema/Bool
:allow-comments
schema/Bool))
1 change: 0 additions & 1 deletion etp-backend/src/main/clj/solita/etp/service/luokittelu.clj
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
(def find-vk-ilmoituspaikat #(select-luokittelu % "vk_ilmoituspaikka"))
(def find-vk-roolit #(select-luokittelu % "vk_rooli"))
(def find-vk-toimitustavat #(select-luokittelu % "vk_toimitustapa"))
(def find-vk-toimenpidetypes #(select-luokittelu % "vk_toimenpidetype"))

(defn- path= [value path object]
(= value (get-in object path)))
Expand Down
11 changes: 6 additions & 5 deletions etp-backend/src/main/clj/solita/etp/service/pdf.clj
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@
(clostache/render-resource layout {:content content})
(clostache/render-resource layout data)))

(defn html->pdf
[template data layout output-stream]
(let [html-doc (render-template-with-content template data layout)
builder (PdfRendererBuilder.)]
(defn ^:dynamic html->pdf
[html-doc output-stream]
(let [builder (PdfRendererBuilder.)]
(.useFastMode builder)
(.withHtmlContent builder html-doc nil)

Expand All @@ -44,7 +43,9 @@
(defn generate-pdf->bytes [{:keys [layout template data]
:or {layout "pdf/template.html"}}]
(with-open [baos (ByteArrayOutputStream.)]
(html->pdf template data layout baos)
(-> template
(render-template-with-content data layout)
(html->pdf baos))
(.toByteArray baos)))


Expand Down
12 changes: 7 additions & 5 deletions etp-backend/src/main/clj/solita/etp/service/valvonta_kaytto.clj
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@
(file-service/find-file aws-s3-client (file-path valvonta-id liite-id)))))

(defn find-toimenpidetyypit [db]
(luokittelu/find-vk-toimenpidetypes db))
(valvonta-kaytto-db/find-vk-toimenpidetypes db))

(defn find-templates [db]
(valvonta-kaytto-db/select-templates db))
Expand Down Expand Up @@ -202,7 +202,7 @@
(first (db/with-db-exception-translation
jdbc/insert! db :vk-toimenpide
(-> toimenpide-add
(dissoc :bypass-asha)
(dissoc :bypass-asha :fine)
(assoc
:diaarinumero diaarinumero
:valvonta-id valvonta-id
Expand Down Expand Up @@ -259,6 +259,7 @@
(find-osapuolet tx valvonta-id)
ilmoituspaikat)
(find-diaarinumero tx valvonta-id toimenpide-add))
sakko (:fine toimenpide-add)
toimenpide (insert-toimenpide! tx valvonta-id diaarinumero toimenpide-add)
toimenpide-id (:id toimenpide)]
(insert-toimenpide-osapuolet! tx valvonta-id toimenpide-id)
Expand All @@ -269,10 +270,11 @@
(let [find-toimenpide-osapuolet (comp flatten (juxt find-toimenpide-henkilot find-toimenpide-yritykset))
osapuolet (find-toimenpide-osapuolet tx (:id toimenpide))]
(asha/log-toimenpide!
tx aws-s3-client whoami valvonta toimenpide
tx aws-s3-client whoami valvonta (assoc toimenpide :fine sakko)
osapuolet ilmoituspaikat roolit)
(send-suomifi-viestit! aws-s3-client valvonta toimenpide osapuolet)
(send-toimenpide-email! db aws-s3-client valvonta toimenpide osapuolet))))
(when-not (toimenpide/manually-deliverable? db (:type-id toimenpide))
(send-suomifi-viestit! aws-s3-client valvonta toimenpide osapuolet)
(send-toimenpide-email! db aws-s3-client valvonta toimenpide osapuolet)))))
{:id toimenpide-id})))

(defn update-toimenpide! [db toimenpide-id toimenpide]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
[solita.etp.service.valvonta-kaytto.osapuoli :as osapuoli]
[solita.etp.service.pdf :as pdf]
[solita.etp.db :as db]
[solita.common.formats :as formats]))
[solita.common.formats :as formats])
(:import (java.time Instant)))

(db/require-queries 'valvonta-kaytto)
(db/require-queries 'geo)
Expand All @@ -16,7 +17,9 @@
(let [type-key (toimenpide/type-key type-id )
documents {:rfi-request {:type "Pyyntö" :filename "tietopyynto.pdf"}
:rfi-order {:type "Kirje" :filename "kehotus.pdf"}
:rfi-warning {:type "Kirje" :filename "varoitus.pdf"}}]
:rfi-warning {:type "Kirje" :filename "varoitus.pdf"}
:decision-order-hearing-letter {:type "Kirje"
:filename "kuulemiskirje.pdf"}}]
(get documents type-key)))

(defn find-kaytto-valvonta-documents [db valvonta-id]
Expand Down Expand Up @@ -45,14 +48,27 @@
(when (some? rooli) (str (:label-fi rooli) "/" (:label-sv rooli)))))
:email (template-optional (:email osapuoli))}))

(defn past-dates-for-kaskypaatos-kuulemiskirje
"Retrieves the dates of kehotus and varoitus toimenpiteet with
the given valvonta-id and formats them for displaying in a document"
[db valvonta-id]
;; TODO: Kun päivitetään Clojure 1.11:een, voidaan käyttää vain update-vals-funktiota
(let [data (->> {:valvonta-id valvonta-id}
(valvonta-kaytto-db/past-dates-for-kaskypaatos-kuulemiskirje db)
first)]
(zipmap (keys data) (map time/format-date (vals data)))))

(defn- template-data [db whoami valvonta toimenpide osapuoli dokumentit ilmoituspaikat tiedoksi roolit]
{:päivä (time/today)
:määräpäivä (time/format-date (:deadline-date toimenpide))
:diaarinumero (:diaarinumero toimenpide)
:valvoja (select-keys whoami [:etunimi :sukunimi :email])
:omistaja-henkilo (when (osapuoli/henkilo? osapuoli)
{:etunimi (:etunimi osapuoli)
:sukunimi (:sukunimi osapuoli)})
:sukunimi (:sukunimi osapuoli)
:jakeluosoite (:jakeluosoite osapuoli)
:postinumero (:postinumero osapuoli)
:postitoimipaikka (:postitoimipaikka osapuoli)})
:omistaja-yritys (when (osapuoli/yritys? osapuoli)
{:nimi (:nimi osapuoli)})
:kohde {:katuosoite (:katuosoite valvonta)
Expand All @@ -63,7 +79,10 @@
:havaintopäivä (-> valvonta :havaintopaiva time/format-date)}
:tietopyynto {:tietopyynto-pvm (time/format-date (:rfi-request dokumentit))
:tietopyynto-kehotus-pvm (time/format-date (:rfi-order dokumentit))}
:tiedoksi (map (partial tiedoksi-saaja roolit) tiedoksi)})
:tiedoksi (map (partial tiedoksi-saaja roolit) tiedoksi)
:sakko (:fine toimenpide)
:aiemmat-toimenpiteet (when (toimenpide/kaskypaatos-kuulemiskirje? toimenpide)
(past-dates-for-kaskypaatos-kuulemiskirje db (:id valvonta)))})

(defn- request-id [valvonta-id toimenpide-id]
(str valvonta-id "/" toimenpide-id))
Expand All @@ -86,24 +105,31 @@
{:rfi-request {:identity {:case {:number (:diaarinumero toimenpide)}
:processing-action {:name-identity "Vireillepano"}}
:processing-action {:name "Tietopyyntö"
:reception-date (java.time.Instant/now)
:reception-date (Instant/now)
:contacting-direction "SENT"
:contact (map osapuoli->contact osapuolet)}
:document (toimenpide-type->document (:type-id toimenpide))}
:rfi-order {:identity {:case {:number (:diaarinumero toimenpide)}
:processing-action {:name-identity "Käsittely"}}
:processing-action {:name "Kehotuksen antaminen"
:reception-date (java.time.Instant/now)
:reception-date (Instant/now)
:contacting-direction "SENT"
:contact (map osapuoli->contact osapuolet)}
:document (toimenpide-type->document (:type-id toimenpide))}
:rfi-warning {:identity {:case {:number (:diaarinumero toimenpide)}
:processing-action {:name-identity "Käsittely"}}
:processing-action {:name "Varoituksen antaminen"
:reception-date (java.time.Instant/now)
:reception-date (Instant/now)
:contacting-direction "SENT"
:contact (map osapuoli->contact osapuolet)}
:document (toimenpide-type->document (:type-id toimenpide))}})
:contact (map osapuoli->contact osapuolet)}
:document (toimenpide-type->document (:type-id toimenpide))}
:decision-order-hearing-letter {:identity {:case {:number (:diaarinumero toimenpide)}
:processing-action {:name-identity "Päätöksenteko"}}
:document (toimenpide-type->document (:type-id toimenpide))
:processing-action {:name "Kuulemiskirje käskypäätöksestä"
:reception-date (Instant/now)
:contacting-direction "SENT"
:contact (map osapuoli->contact osapuolet)}}})

(defn- resolve-processing-action [toimenpide osapuolet]
(let [processing-actions (available-processing-actions toimenpide osapuolet)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
[solita.common.logic :as logic]
[solita.etp.email :as email]
[solita.etp.service.valvonta-kaytto.osapuoli :as osapuoli]
[solita.etp.service.geo :as geo-service]
[solita.etp.service.luokittelu :as luokittelu-service]
[solita.common.maybe :as maybe]
[solita.etp.service.valvonta-kaytto.store :as store]
[solita.etp.db :as db]
[solita.common.smtp :as smtp])
Expand Down Expand Up @@ -195,6 +198,13 @@
(let [tiedoksi (-> (valvonta-kaytto-db/select-template db {:id (:template-id toimenpide)})
first
:tiedoksi)
postinumero (maybe/map* #(luokittelu-service/find-luokka
(Integer/parseInt %)
(geo-service/find-all-postinumerot db))
(:postinumero valvonta))
valvonta (assoc valvonta
:postitoimipaikka-fi (:label-fi postinumero)
:postitoimipaikka-sv (:label-sv postinumero))
email-osapuolet (filter osapuoli/email? osapuolet)
documents (mapv (partial find-document aws-s3-client valvonta toimenpide)
(filter osapuoli/omistaja? osapuolet))]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@
(doseq [osapuoli (->> osapuolet
(filter osapuoli/omistaja?)
(filter osapuoli/suomi-fi?))]

(send-message-to-osapuoli!
valvonta
toimenpide
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
(ns solita.etp.service.valvonta-kaytto.toimenpide)
(ns solita.etp.service.valvonta-kaytto.toimenpide
(:require [solita.etp.db :as db]))

(def ^:private type-keys
[;; käytönvalvonnan asia avataan ashaan (case open)
:case
(db/require-queries 'valvonta-kaytto)

(def ^:private type-id->type-key
{;; käytönvalvonnan asia avataan ashaan (case open)
0 :case
;; tietopyynnön toimenpidetyypit
:rfi-request :rfi-order :rfi-warning
1 :rfi-request
2 :rfi-order
3 :rfi-warning
;; päätös
:decision-order
4 :decision-order
;; valvonnan sulkeminen (case closed)
:closed])
5 :closed
;; Uhkasakkoprosessi
7 :decision-order-hearing-letter})

(defn type-key [type-id] (nth type-keys type-id))
(defn type-key [type-id]
(if-let [type-key (type-id->type-key type-id)]
type-key
(throw (Exception.))))

(defn type? [type toimenpide]
(= (-> toimenpide :type-id type-key) type))
Expand All @@ -21,8 +31,17 @@
(def case-open? (partial type? :case))
(def case-close? (partial type? :closed))
(def send-tiedoksi? (partial type? :rfi-request))
(def kaskypaatos-kuulemiskirje? (partial type? :decision-order-hearing-letter))

(def asha-toimenpide?
(partial some-type? #{:rfi-request :rfi-order :rfi-warning}))
(partial some-type? #{:rfi-request :rfi-order :rfi-warning :decision-order-hearing-letter}))

(def with-diaarinumero? (comp not (partial type? :case)))

(defn manually-deliverable? [db type-id]
(let [manually-deliverable-toimenpidetypes
(->> db
valvonta-kaytto-db/select-manually-deliverable-toimenpidetypes
(map :id)
set)]
(contains? manually-deliverable-toimenpidetypes type-id)))
18 changes: 17 additions & 1 deletion etp-backend/src/main/resources/pdf/template.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
}

.otsikko {
margin-left: 7.8cm;
margin-left: 9.30cm;
text-transform: uppercase;
}

Expand Down Expand Up @@ -160,6 +160,22 @@
.mb-0 {
margin-bottom: 0;
}

.vastaanottaja {
height: 3cm;
width: 7.2cm;
}

.viittaus {
font-size: 10pt;
}

hr {
border: none;
height: 1px;
margin-top: 1.2cm;
background-color: black;
}
</style>

</head>
Expand Down
30 changes: 30 additions & 0 deletions etp-backend/src/main/sql/solita/etp/db/valvonta-kaytto.sql
Original file line number Diff line number Diff line change
Expand Up @@ -320,3 +320,33 @@ left join lateral (
limit 1) last_toimenpide on true
where rakennustunnus = :rakennustunnus
and deleted is false;

-- name: find-vk-toimenpidetypes
SELECT id, label_fi, label_sv, valid, manually_deliverable, allow_comments
FROM vk_toimenpidetype
ORDER BY ordinal ASC;

-- name: select-manually-deliverable-toimenpidetypes
SELECT id
FROM vk_toimenpidetype
WHERE manually_deliverable is true;

-- name: past-dates-for-kaskypaatos-kuulemiskirje
with kehotus as (select create_time, deadline_date
from vk_toimenpide
where valvonta_id = :valvonta-id
and type_id = 2
order by create_time desc
LIMIT 1),
varoitus as (select create_time, deadline_date
from vk_toimenpide
where valvonta_id = :valvonta-id
and type_id = 3
order by create_time desc
LIMIT 1)
select kehotus.create_time::date as kehotus_pvm,
kehotus.deadline_date as kehotus_maarapaiva,
varoitus.create_time::date as varoitus_pvm,
varoitus.deadline_date as varoitus_maarapaiva
from kehotus,
varoitus;
Loading

0 comments on commit f09e53e

Please sign in to comment.