From 059d05edafdfdca1889124de7f76b60e6c0777d7 Mon Sep 17 00:00:00 2001 From: Juho Leinonen Date: Thu, 2 Nov 2023 12:37:57 +0200 Subject: [PATCH] AE-1961: Refactor emptyToimenpide to take a list of osapuolet instead of osaPuoliIds as optional default value parameter and use fill the name of the osapuoli to Swedish statement default value --- src/language/fi.json | 20 ++++++++++- src/language/sv.json | 20 ++++++++++- src/pages/valvonta-kaytto/manager.svelte | 36 ++++++++++++++----- src/pages/valvonta-kaytto/toimenpiteet.js | 27 +++++++++----- .../valvonta-kaytto/toimenpiteet_test.js | 18 ++++++---- .../valvonta-kaytto/valvonta-api_test.js | 2 +- 6 files changed, 97 insertions(+), 26 deletions(-) diff --git a/src/language/fi.json b/src/language/fi.json index a25928b3..fc295e0b 100644 --- a/src/language/fi.json +++ b/src/language/fi.json @@ -1991,7 +1991,25 @@ "info": "Rakennuksen omistaja ei ole vastannut kuulemiskirjeeseen tai perustellut riittävästi energiatodistuksen puuttumista, joten tehdään uhkasakkopäätös. Sakkopäätöksen allekirjoitus tapahtuu tämän järjestelmän ulkopuolella.", "description": "Kommentti", "fine": "Sakon suuruus €", - "publish-button": "Luo toimenpide" + "publish-button": "Luo toimenpide", + "osapuoli-specific-data": "Osapuolikohtaiset tiedot", + "document": "Osapuolelle toimitetaan dokumentti", + "preview-button": "Esikatsele osapuolen dokumentti", + "hearing-letter-answered": { + "label": "Omistaja vastasi kuulemiskirjeeseen", + "true": "Asianosainen antoi vastineen kuulemiskirjeeseen", + "false": "Asianosainen ei vastannut kuulemiskirjeeseen" + }, + "answer-commentary-fi": "Vastineen kommentit, suomi", + "answer-commentary-sv": "Vastineen kommentit, ruotsi", + "statement-fi": "Kannanotto vastineeseen, suomi", + "statement-sv": "Kannanotto vastineeseen, ruotsi", + "court": "Hallinto-oikeus", + "department-head-title-fi": "Yksikön päällikön titteli, suomi", + "department-head-title-sv": "Yksikön päällikön titteli, ruotsi", + "department-head-name": "Yksikön päällikön nimi", + "default-statement-fi": "ARAn päätökseen ei ole haettu muutosta, eli päätös on lainvoimainen. Maksuun tuomittavan uhkasakon määrä on sama kuin mitä se on ollut ARAn päätöksessä. ARAn näkemyksen mukaan uhkasakko tuomitaan maksuun täysimääräisenä, koska Asianosainen ei ole noudattanut päävelvoitetta lainkaan, eikä ole myöskään esittänyt noudattamatta jättämiselle pätevää syytä.", + "default-statement-sv": "Ändring i ARAs beslut har inte sökts, dvs. beslutet har vunnit laga kraft. Vitesbeloppet som döms ut är detsamma som det var i ARAs beslut. Enligt ARAs uppfattning döms vitet ut till fullt belopp, eftersom %s inte alls har iakttagit huvudförpliktelsen och inte heller har angett någon giltig orsak till försummelsen." }, "penalty-decision-notice-first-mailing": { "title": "Sakkopäätös tiedoksianto / (ensimmäinen postitus)", diff --git a/src/language/sv.json b/src/language/sv.json index ad8fd96e..e69882e6 100644 --- a/src/language/sv.json +++ b/src/language/sv.json @@ -1975,7 +1975,25 @@ "info": "Rakennuksen omistaja ei ole vastannut kuulemiskirjeeseen tai perustellut riittävästi energiatodistuksen puuttumista, joten tehdään uhkasakkopäätös. Sakkopäätöksen allekirjoitus tapahtuu tämän järjestelmän ulkopuolella. (sv)", "description": "Kommentti (sv)", "fine": "Sakon suuruus € (sv)", - "publish-button": "Luo toimenpide (sv)" + "publish-button": "Luo toimenpide (sv)", + "osapuoli-specific-data": "Osapuolikohtaiset tiedot (sv)", + "document": "Osapuolelle toimitetaan dokumentti (sv)", + "preview-button": "Esikatsele osapuolen dokumentti (sv)", + "hearing-letter-answered": { + "label": "Omistaja vastasi kuulemiskirjeeseen (sv)", + "true": "Kyllä (sv)", + "false": "Ei (sv)" + }, + "answer-commentary-fi": "Vastineen kommentit, suomi (sv)", + "answer-commentary-sv": "Vastineen kommentit, ruotsi (sv)", + "statement-fi": "Kannanotto vastineeseen, suomi (sv)", + "statement-sv": "Kannanotto vastineeseen, ruotsi (sv)", + "court": "Hallinto-oikeus (sv)", + "department-head-title-fi": "Yksikön päällikön titteli, suomi (sv)", + "department-head-title-sv": "Yksikön päällikön titteli, ruotsi (sv)", + "department-head-name": "Yksikön päällikön nimi (sv)", + "default-statement-fi": "ARAn päätökseen ei ole haettu muutosta, eli päätös on lainvoimainen. Maksuun tuomittavan uhkasakon määrä on sama kuin mitä se on ollut ARAn päätöksessä. ARAn näkemyksen mukaan uhkasakko tuomitaan maksuun täysimääräisenä, koska Asianosainen ei ole noudattanut päävelvoitetta lainkaan, eikä ole myöskään esittänyt noudattamatta jättämiselle pätevää syytä.", + "default-statement-sv": "Ändring i ARAs beslut har inte sökts, dvs. beslutet har vunnit laga kraft. Vitesbeloppet som döms ut är detsamma som det var i ARAs beslut. Enligt ARAs uppfattning döms vitet ut till fullt belopp, eftersom %s inte alls har iakttagit huvudförpliktelsen och inte heller har angett någon giltig orsak till försummelsen." }, "penalty-decision-notice-first-mailing": { "title": "Sakkopäätös tiedoksianto / (ensimmäinen postitus) (sv)", diff --git a/src/pages/valvonta-kaytto/manager.svelte b/src/pages/valvonta-kaytto/manager.svelte index 7e763aa8..a990f80d 100644 --- a/src/pages/valvonta-kaytto/manager.svelte +++ b/src/pages/valvonta-kaytto/manager.svelte @@ -57,10 +57,7 @@ departmentHeadName: johtaja['department-head-name'], departmentHeadTitleFi: johtaja['department-head-title-fi'], departmentHeadTitleSv: johtaja['department-head-title-sv'], - osapuoliIds: R.map( - R.prop('id'), - R.filter(Osapuolet.isOmistaja, R.concat(henkilot, yritykset)) - ) + osapuolis: R.filter(Osapuolet.isOmistaja, R.concat(henkilot, yritykset)) }; } else if ( Toimenpiteet.isNoticeBailiff({ @@ -68,10 +65,7 @@ }) ) { return { - osapuoliIds: R.map( - R.prop('id'), - R.filter(Osapuolet.isOmistaja, R.concat(henkilot, yritykset)) - ) + osapuolis: R.filter(Osapuolet.isOmistaja, R.concat(henkilot, yritykset)) }; } else if ( Toimenpiteet.isPenaltyDecisionHearingLetter({ @@ -84,6 +78,32 @@ toimenpiteet ) }; + } else if ( + Toimenpiteet.isPenaltyDecisionActualDecision({ + 'type-id': toimenpideTypeId + }) + ) { + { + return { + fine: Toimenpiteet.findFineFromToimenpiteet( + Toimenpiteet.isPenaltyDecisionHearingLetter, + toimenpiteet + ), + departmentHeadName: johtaja['department-head-name'], + departmentHeadTitleFi: johtaja['department-head-title-fi'], + departmentHeadTitleSv: johtaja['department-head-title-sv'], + osapuolis: R.filter( + Osapuolet.isOmistaja, + R.concat(henkilot, yritykset) + ), + defaultStatementFi: i18n( + 'valvonta.kaytto.toimenpide.penalty-decision-actual-decision.default-statement-fi' + ), + defaultStatementSv: i18n( + 'valvonta.kaytto.toimenpide.penalty-decision-actual-decision.default-statement-sv' + ) + }; + } } else { return undefined; } diff --git a/src/pages/valvonta-kaytto/toimenpiteet.js b/src/pages/valvonta-kaytto/toimenpiteet.js index 0afb290c..7011755f 100644 --- a/src/pages/valvonta-kaytto/toimenpiteet.js +++ b/src/pages/valvonta-kaytto/toimenpiteet.js @@ -100,7 +100,7 @@ export const emptyToimenpide = ( departmentHeadTitleFi = null, departmentHeadTitleSv = null, departmentHeadName = null, - osapuoliIds = [], + osapuolis = [], defaultStatementFi = null, defaultStatementSv = null } = {} @@ -113,6 +113,8 @@ export const emptyToimenpide = ( description: Maybe.None() }; + const osapuoliIds = R.map(R.prop('id'), osapuolis); + switch (typeId) { case R.path(['decision-order', 'hearing-letter'], type): case R.path(['penalty-decision', 'hearing-letter'], type): @@ -168,19 +170,24 @@ export const emptyToimenpide = ( 'type-specific-data', { fine: Maybe.Some(fine), - 'osapuoli-specific-data': R.map( - osapuoliId => ({ - 'osapuoli-id': osapuoliId, + 'osapuoli-specific-data': R.map(osapuoli => { + const nameForSwedishStatement = + R.prop('sukunimi', osapuoli) || R.prop('nimi', osapuoli); + + return { + 'osapuoli-id': R.prop('id', osapuoli), 'recipient-answered': false, 'answer-commentary-fi': Maybe.None(), 'answer-commentary-sv': Maybe.None(), 'statement-fi': Maybe.fromNull(defaultStatementFi), - 'statement-sv': Maybe.fromNull(defaultStatementSv), + 'statement-sv': R.map( + R.replace('%s', nameForSwedishStatement), + Maybe.fromNull(defaultStatementSv) + ), 'hallinto-oikeus-id': Maybe.None(), document: true - }), - osapuoliIds - ), + }; + }, osapuolis), 'department-head-title-fi': Maybe.fromNull(departmentHeadTitleFi), 'department-head-title-sv': Maybe.fromNull(departmentHeadTitleSv), 'department-head-name': Maybe.fromNull(departmentHeadName) @@ -275,6 +282,10 @@ export const isPenaltyDecisionHearingLetter = isType( R.path(['penalty-decision', 'hearing-letter'], type) ); +export const isPenaltyDecisionActualDecision = isType( + R.path(['penalty-decision', 'actual-decision'], type) +); + /** * Given an array of toimenpide objects, returns the fine found using the toimenpidetype predicate function parameter * @param {Function} toimenpidetypePredicate diff --git a/src/pages/valvonta-kaytto/toimenpiteet_test.js b/src/pages/valvonta-kaytto/toimenpiteet_test.js index 32bd95c2..684ef687 100644 --- a/src/pages/valvonta-kaytto/toimenpiteet_test.js +++ b/src/pages/valvonta-kaytto/toimenpiteet_test.js @@ -232,7 +232,7 @@ describe('Empty toimenpide', () => { it('Contains correct keys for toimenpidetype 8', () => { const emptyToimenpide = Toimenpiteet.emptyToimenpide(8, [{}], { - osapuoliIds: [1, 7] + osapuolis: [{ id: 1 }, { id: 7 }] }); assert.deepEqual(Object.keys(emptyToimenpide), [ 'type-id', @@ -411,9 +411,13 @@ describe('Empty toimenpide', () => { it('Contains correct keys and default values for toimenpidetype 15', () => { const emptyToimenpide = Toimenpiteet.emptyToimenpide(15, [{}], { - osapuoliIds: [1, 7], + osapuolis: [ + { id: 1, sukunimi: 'Mallinen' }, + { id: 7, nimi: 'Yritys' } + ], defaultStatementFi: 'Statementin default-arvo voidaan antaa parametrina', - defaultStatementSv: 'Standardvärdet för satsen kan anges som en parameter' + defaultStatementSv: + 'Ruotsinkieliselle statementille voi antaa %s käyttäen kohdan mihin täydennetään osapuolen sukunimi tai yrityksen nimi' }); assert.deepEqual(Object.keys(emptyToimenpide), [ 'type-id', @@ -449,7 +453,7 @@ describe('Empty toimenpide', () => { 'Statementin default-arvo voidaan antaa parametrina' ), 'statement-sv': Maybe.Some( - 'Standardvärdet för satsen kan anges som en parameter' + 'Ruotsinkieliselle statementille voi antaa Mallinen käyttäen kohdan mihin täydennetään osapuolen sukunimi tai yrityksen nimi' ) }, { @@ -463,7 +467,7 @@ describe('Empty toimenpide', () => { 'Statementin default-arvo voidaan antaa parametrina' ), 'statement-sv': Maybe.Some( - 'Standardvärdet för satsen kan anges som en parameter' + 'Ruotsinkieliselle statementille voi antaa Yritys käyttäen kohdan mihin täydennetään osapuolen sukunimi tai yrityksen nimi' ) } ] @@ -582,7 +586,7 @@ describe('documentExistsForOsapuoli', () => { } ], Toimenpiteet.emptyToimenpide(8, [], { - osapuoliIds: [1, 3, 7] + osapuolis: [{ id: 1 }, { id: 3 }, { id: 7 }] }) ); @@ -596,7 +600,7 @@ describe('documentExistsForOsapuoli', () => { describe('toimenpideForOsapuoli', () => { it('returns the original toimenpide object but with the osapuoli-specific-data for other osapuolis removed', () => { const toimenpide = Toimenpiteet.emptyToimenpide(8, [], { - osapuoliIds: [1, 3, 7] + osapuolis: [{ id: 1 }, { id: 3 }, { id: 7 }] }); const result = Toimenpiteet.toimenpideForOsapuoli(toimenpide, 3); diff --git a/src/pages/valvonta-kaytto/valvonta-api_test.js b/src/pages/valvonta-kaytto/valvonta-api_test.js index d1a0bc75..6f3e85a6 100644 --- a/src/pages/valvonta-kaytto/valvonta-api_test.js +++ b/src/pages/valvonta-kaytto/valvonta-api_test.js @@ -99,7 +99,7 @@ describe('Valvonta API test', () => { it('for käskypäätös / varsinainen päätös', () => { const toimenpide = Toimenpiteet.emptyToimenpide(8, [], { - osapuoliIds: [1] + osapuolis: [{ id: 1 }] }); assert.deepEqual(