diff --git a/src/pages/valvonta-kaytto/manager.svelte b/src/pages/valvonta-kaytto/manager.svelte index 9b5780fa4..861338b17 100644 --- a/src/pages/valvonta-kaytto/manager.svelte +++ b/src/pages/valvonta-kaytto/manager.svelte @@ -76,7 +76,8 @@ fine: Toimenpiteet.findFineFromToimenpiteet( Toimenpiteet.isDecisionOrderActualDecision, toimenpiteet - ) + ), + osapuolis: R.filter(Osapuolet.isOmistaja, R.concat(henkilot, yritykset)) }; } else if ( Toimenpiteet.isPenaltyDecisionActualDecision({ diff --git a/src/pages/valvonta-kaytto/new-toimenpide-dialog.svelte b/src/pages/valvonta-kaytto/new-toimenpide-dialog.svelte index 838cf12ad..8c6bd5dcb 100644 --- a/src/pages/valvonta-kaytto/new-toimenpide-dialog.svelte +++ b/src/pages/valvonta-kaytto/new-toimenpide-dialog.svelte @@ -23,7 +23,8 @@ import Input from '@Component/Input/Input'; import { flashMessageStore } from '@/stores'; import Select from '@Component/Select/Select'; - import OsapuoletTable from './toimenpide-osapuolet-table.svelte'; + import OsapuoletTable from './toimenpide-osapuolet-table'; + import OsapuoletTableWithDocumentSelection from './osapuolet-table-with-document-selection'; import NoticeBailiffOsapuoletTable from './notice-bailiff-osapuolet-table'; import * as Validation from '@Utility/validation'; @@ -272,9 +273,19 @@ {disabled} {roolit} {template} - {text} {schema} {karajaoikeudet} /> + {:else if Toimenpiteet.isPenaltyDecisionHearingLetter(toimenpide)} + {:else if Toimenpiteet.showNormalOsapuoliTable(toimenpide)} + import * as R from 'ramda'; + import * as Maybe from '@Utility/maybe-utils'; + import * as Locales from '@Language/locale-utils'; + import * as Osapuolet from './osapuolet'; + import * as Templates from './templates'; + + import * as ValvontaApi from './valvonta-api'; + + import { _, locale } from '@Language/i18n'; + import H2 from '@Component/H/H2.svelte'; + import Spinner from '@Component/Spinner/Spinner.svelte'; + + import * as Toimenpiteet from '@Pages/valvonta-kaytto/toimenpiteet'; + import Checkbox from '@Component/Checkbox/Checkbox'; + + export let id; + export let toimenpide; + export let henkilot; + export let yritykset; + export let preview; + export let roolit; + export let template; + export let previewPending; + export let disabled; + + const types = { + yritys: { + label: yritys => yritys.nimi, + preview: ValvontaApi.previewToimenpideForYritysOsapuoli + }, + henkilo: { + label: henkilo => `${henkilo.etunimi} ${henkilo.sukunimi}`, + preview: ValvontaApi.previewToimenpideForHenkiloOsapuoli + } + }; + + let osapuolet = R.sort(R.ascend(R.prop('toimitustapa-id')))( + R.concat( + R.map(R.assoc('type', types.henkilo), henkilot), + R.map(R.assoc('type', types.yritys), yritykset) + ) + ); + + const i18n = $_; + const i18nRoot = 'valvonta.kaytto.toimenpide'; + + $: rooliLabel = R.compose( + Maybe.fold('', Locales.labelForId($locale, roolit)), + R.prop('rooli-id') + ); + + const osapuoliSpecificDataIndexForOsapuoli = osapuoli => + Toimenpiteet.osapuoliSpecificDataIndexForOsapuoli( + toimenpide, + osapuoli.id, + Osapuolet.getOsapuoliType(osapuoli) + ); + + +
+

+ +
+ + + + + + + + + + + + + + + {#each osapuolet as osapuoli} + + + + + + + + {/each} + +
{i18n(i18nRoot + '.nimi')} {i18n(i18nRoot + '.rooli')} + {i18n(i18nRoot + '.toimitustapa')} + + {i18n(i18nRoot + '.esikatselu')} + {i18n(i18nRoot + '.create-document')}
+ {osapuoli.type.label(osapuoli)} + + {rooliLabel(osapuoli)} + {#if Osapuolet.otherRooli(osapuoli)} + - {Maybe.orSome('', osapuoli['rooli-description'])} + {/if} + + {i18n('valvonta.kaytto.toimenpide.manually-sent')} + + {#if Osapuolet.isOmistaja(osapuoli)} + {#if previewPending} +
+ +
+ {:else} +
+ visibility +
+ {/if} + {:else if Maybe.orSome(false, R.lift(Templates.sendTiedoksi)(template))} + info + {i18n(i18nRoot + '.fyi')} + {:else} + info + {i18n(i18nRoot + '.fyi-disabled')} + {/if} +
+
+ {#if Osapuolet.isOmistaja(osapuoli)} + + {/if} +
+
+
+

diff --git a/src/pages/valvonta-kaytto/toimenpiteet.js b/src/pages/valvonta-kaytto/toimenpiteet.js index 665bb2c43..cbcba09ea 100644 --- a/src/pages/valvonta-kaytto/toimenpiteet.js +++ b/src/pages/valvonta-kaytto/toimenpiteet.js @@ -119,7 +119,6 @@ export const emptyToimenpide = ( switch (typeId) { case R.path(['decision-order', 'hearing-letter'], type): - case R.path(['penalty-decision', 'hearing-letter'], type): return R.assocPath( ['type-specific-data', 'fine'], Maybe.Some(fine), @@ -173,6 +172,25 @@ export const emptyToimenpide = ( toimenpide ); + case R.path(['penalty-decision', 'hearing-letter'], type): + return R.assoc( + 'type-specific-data', + { + fine: Maybe.Some(fine), + 'osapuoli-specific-data': R.map( + osapuoli => ({ + osapuoli: { + id: R.prop('id', osapuoli), + type: Osapuolet.getOsapuoliType(osapuoli) + }, + document: true + }), + osapuolis + ) + }, + toimenpide + ); + case R.path(['penalty-decision', 'actual-decision'], type): return R.assoc( 'type-specific-data', @@ -320,12 +338,14 @@ export const hasCourtAttachment = R.anyPass([ export const hasOptionalDocument = R.anyPass([ isDecisionOrderActualDecision, isNoticeBailiff, + isPenaltyDecisionHearingLetter, isPenaltyDecisionActualDecision ]); export const showNormalOsapuoliTable = R.complement( R.anyPass([ isDecisionOrderActualDecision, + isPenaltyDecisionHearingLetter, isPenaltyDecisionActualDecision, isNoticeBailiff ]) diff --git a/src/pages/valvonta-kaytto/toimenpiteet_test.js b/src/pages/valvonta-kaytto/toimenpiteet_test.js index 5b74ecbdf..ffe5a932e 100644 --- a/src/pages/valvonta-kaytto/toimenpiteet_test.js +++ b/src/pages/valvonta-kaytto/toimenpiteet_test.js @@ -384,7 +384,15 @@ describe('Empty toimenpide', () => { }); it('Contains correct keys for toimenpidetype 14 which includes fine under type-specific-data', () => { - const emptyToimenpide = Toimenpiteet.emptyToimenpide(14, [{}]); + const emptyToimenpide = Toimenpiteet.emptyToimenpide(14, [{}], { + osapuolis: [ + { + id: 6, + etunimi: 'Janina', + sukunimi: 'Mäkiaho' + } + ] + }); assert.deepEqual(Object.keys(emptyToimenpide), [ 'type-id', 'publish-time', @@ -395,8 +403,22 @@ describe('Empty toimenpide', () => { ]); assert.deepEqual(Object.keys(emptyToimenpide['type-specific-data']), [ - 'fine' + 'fine', + 'osapuoli-specific-data' ]); + + assert.deepEqual( + R.path(['type-specific-data', 'osapuoli-specific-data'], emptyToimenpide), + [ + { + osapuoli: { + id: 6, + type: 'henkilo' + }, + document: true + } + ] + ); }); it('with a fine is recognized as having a fine', () => {