Skip to content

Commit d5dd962

Browse files
committed
Första iteration av redigering av tuple-värden
1 parent 44064c5 commit d5dd962

34 files changed

+416
-203
lines changed

src/components/edit/EditMain.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,16 @@ const currentMode: Ref<Mode> = ref("grunduppgifter");
189189
}
190190
191191
&.value-container {
192-
text-align: right;
193-
194192
input {
195193
min-width: 120px;
194+
}
195+
196+
&:not(.text-left) {
196197
text-align: right;
198+
199+
input {
200+
text-align: right;
201+
}
197202
}
198203
}
199204

src/components/edit/blocks/EditBelopprad.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import { TaxonomyManager } from "@/util/TaxonomyManager.ts";
1717
import EditBeloppradNonmonetaryComparable from "@/components/edit/blocks/belopprad/EditBeloppradNonmonetaryComparable.vue";
1818
import { isBeloppradComparable } from "@/model/arsredovisning/beloppradtyper/BaseBeloppradComparable.ts";
1919
import { computed } from "vue";
20+
import EditBeloppradTuple from "@/components/edit/blocks/belopprad/EditBeloppradTuple.vue";
21+
import { isBeloppradTuple } from "@/model/arsredovisning/beloppradtyper/BeloppradTuple.ts";
2022
2123
const props = defineProps<{
2224
/** TaxonomyManager för att hantera taxonomiobjekt för beloppraden. */
@@ -99,6 +101,11 @@ const taxonomyItem = computed(() => {
99101
:taxonomy-manager="taxonomyManager"
100102
@delete="emit('delete')"
101103
/>
104+
<EditBeloppradTuple
105+
v-else-if="isBeloppradTuple(belopprad)"
106+
:belopprad="belopprad"
107+
:taxonomy-manager="taxonomyManager"
108+
/>
102109
</template>
103110
</template>
104111

src/components/edit/blocks/EditItemSelector.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
66
import { computed, markRaw, ref } from "vue";
77
import VueSelect, { type Option } from "vue3-select-component";
8-
import { type TaxonomyItem } from "@/util/TaxonomyManager.ts";
8+
9+
import type { TaxonomyItem } from "@/model/taxonomy/TaxonomyItem.ts";
910
1011
const props = defineProps<{
1112
/** Lista över taxonomiobjekt som kan väljas. */

src/components/edit/blocks/belopprad/EditBeloppradString.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,12 @@ const trClasses = computed(() => [
9999
:taxonomy-manager="taxonomyManager"
100100
/>
101101
</td>
102-
<td v-if="!isAbstract" :colspan="comparableNumPreviousYears + 1">
103-
<input v-model="belopprad.text" type="text" />
102+
<td
103+
v-if="!isAbstract"
104+
:colspan="comparableNumPreviousYears + 1"
105+
class="value-container text-left"
106+
>
107+
<input v-model="belopprad.text" class="form-control" type="text" />
104108
</td>
105109
<td v-if="allowDelete">
106110
<BaseEditBeloppradDeleteButton
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<script lang="ts" setup>
2+
import { TaxonomyManager } from "@/util/TaxonomyManager.ts";
3+
import { type BeloppradTuple } from "@/model/arsredovisning/beloppradtyper/BeloppradTuple.ts";
4+
import { computed } from "vue";
5+
import EditBelopprad from "@/components/edit/blocks/EditBelopprad.vue";
6+
import {
7+
createBelopprad,
8+
getTaxonomyItemForBelopprad,
9+
} from "@/model/arsredovisning/Belopprad.ts";
10+
import BaseEditBeloppradDeleteButton from "@/components/edit/blocks/belopprad/BaseEditBeloppradDeleteButton.vue";
11+
12+
const props = defineProps<{
13+
/** TaxonomyManager för att hantera taxonomiobjekt för beloppraden. */
14+
taxonomyManager: TaxonomyManager;
15+
}>();
16+
17+
/** Beloppraden med tuple-värdet som ska redigeras. */
18+
const belopprad = defineModel<BeloppradTuple>("belopprad", {
19+
required: true,
20+
});
21+
22+
const tupleTaxonomyItem = computed(() =>
23+
getTaxonomyItemForBelopprad(props.taxonomyManager, belopprad.value),
24+
);
25+
26+
// Hjälpfunktioner
27+
function createInstance() {
28+
belopprad.value.instanser.push({
29+
uuid: self.crypto.randomUUID(),
30+
belopprader: tupleTaxonomyItem.value.childrenFlat.map((child) =>
31+
createBelopprad(child),
32+
),
33+
});
34+
}
35+
36+
function deleteInstance(index: number) {
37+
belopprad.value.instanser.splice(index, 1);
38+
}
39+
</script>
40+
41+
<template>
42+
<tr>
43+
<td>
44+
{{ tupleTaxonomyItem?.additionalData.displayLabel }}
45+
</td>
46+
<td colspan="3">
47+
<button class="btn btn-sm btn-primary" @click="createInstance()">
48+
Lägg till
49+
</button>
50+
</td>
51+
</tr>
52+
<tr
53+
v-for="(instans, instansIndex) in belopprad.instanser"
54+
:key="instans.uuid"
55+
>
56+
<td colspan="3">
57+
<table class="edit-tuple-instance">
58+
<tbody>
59+
<EditBelopprad
60+
v-for="(
61+
instansBelopprad, instansBeloppradIndex
62+
) in instans.belopprader"
63+
:key="instansBelopprad.taxonomyItemName"
64+
v-model:belopprad="instans.belopprader[instansBeloppradIndex]"
65+
v-model:belopprader="instans.belopprader"
66+
:comparable-num-previous-years="0"
67+
:taxonomy-manager="taxonomyManager"
68+
/>
69+
</tbody>
70+
</table>
71+
</td>
72+
<td>
73+
<BaseEditBeloppradDeleteButton @delete="deleteInstance(instansIndex)" />
74+
</td>
75+
</tr>
76+
</template>
77+
78+
<style lang="scss" scoped>
79+
table.edit-tuple-instance {
80+
margin-top: 0 !important;
81+
margin-left: 2rem;
82+
83+
:deep(td.value-container input) {
84+
min-width: 200px !important;
85+
}
86+
}
87+
</style>

src/components/edit/composables/usePrepopulateSection.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ import {
88
isBeloppradInTaxonomyItemList
99
} from "@/model/arsredovisning/Belopprad.ts";
1010
import { computed, reactive, type Ref, ref, watch } from "vue";
11-
import { type TaxonomyItem, TaxonomyManager } from "@/util/TaxonomyManager.ts";
11+
import { TaxonomyManager } from "@/util/TaxonomyManager.ts";
1212
import type { Arsredovisning, BeloppradSectionName } from "@/model/arsredovisning/Arsredovisning.ts";
13+
import {
14+
hasParentTaxonomyItemMatching,
15+
isTaxonomyItemTuple,
16+
type TaxonomyItem
17+
} from "@/model/taxonomy/TaxonomyItem.ts";
1318

1419
/**
1520
* Argument som krävs för att generera en iXBRL-årsredovisning.
@@ -63,6 +68,18 @@ function innerPrepopulateSection(args: Args, belopprader: Ref<Belopprad[]>) {
6368
const section: Belopprad[] = arsredovisning.value[sectionName];
6469

6570
for (const taxonomyItem of availableTaxonomyItems.childrenFlat) {
71+
if (
72+
!isTaxonomyItemTuple(availableTaxonomyItems) &&
73+
hasParentTaxonomyItemMatching(taxonomyItem, (parent) =>
74+
isTaxonomyItemTuple(parent),
75+
)
76+
) {
77+
// Belopprader i tuples hanteras separat - de ska inte förpopuleras
78+
// eftersom det kan finnas flera likadana belopprader (med samma
79+
// taxonomyItemName osv) i olika tuple-instanser
80+
continue;
81+
}
82+
6683
// Kontrollera om en belopprad redan finns för det aktuella taxonomiobjektet
6784
let belopprad = section.find((b) =>
6885
isBeloppradCorrespondsToTaxonomyItem(b, taxonomyItem),
@@ -73,7 +90,9 @@ function innerPrepopulateSection(args: Args, belopprader: Ref<Belopprad[]>) {
7390
belopprad = reactive(createBelopprad(taxonomyItem));
7491
}
7592

76-
// Skapa en watcher som triggas när man ändrar beloppraden
93+
// Skapa en watcher som triggas när man ändrar beloppraden, för att
94+
// automatiskt lägga till eller ta bort den från årsredovisningen när man
95+
// fyller i ett värde respektive tar bort det
7796
watch(belopprad, (newBelopprad: Belopprad) => {
7897
if (
7998
hasBeloppradValue(

src/components/edit/sections/EditBalansrakning.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
import { type Arsredovisning } from "@/model/arsredovisning/Arsredovisning.ts";
88
import EditBelopprad from "@/components/edit/blocks/EditBelopprad.vue";
99
import { createBelopprad } from "@/model/arsredovisning/Belopprad.ts";
10-
import {
11-
getTaxonomyManager,
12-
TaxonomyRootName,
13-
} from "@/util/TaxonomyManager.ts";
10+
import { getTaxonomyManager } from "@/util/TaxonomyManager.ts";
1411
import BaseEditBeloppradTitle from "@/components/edit/blocks/belopprad/BaseEditBeloppradTitle.vue";
1512
import { usePrepopulateSection } from "@/components/edit/composables/usePrepopulateSection.ts";
13+
import { TaxonomyRootName } from "@/model/taxonomy/TaxonomyItem.ts";
1614
1715
const maxNumPreviousYears = 1;
1816

src/components/edit/sections/EditForvaltningsberattelse.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@
77
import { type Arsredovisning } from "@/model/arsredovisning/Arsredovisning.ts";
88
import EditBelopprad from "@/components/edit/blocks/EditBelopprad.vue";
99
import { createBelopprad } from "@/model/arsredovisning/Belopprad.ts";
10-
import {
11-
getTaxonomyManager,
12-
TaxonomyRootName,
13-
} from "@/util/TaxonomyManager.ts";
10+
import { getTaxonomyManager } from "@/util/TaxonomyManager.ts";
1411
import EditForvaltningsberattelseFlerarsoversikt from "@/components/edit/sections/forvaltningsberattelse/EditForvaltningsberattelseFlerarsoversikt.vue";
1512
import EditForvaltningsberattelseForandringar from "@/components/edit/sections/forvaltningsberattelse/EditForvaltningsberattelseForandringar.vue";
1613
import BaseEditBeloppradTitle from "@/components/edit/blocks/belopprad/BaseEditBeloppradTitle.vue";
1714
import { usePrepopulateSection } from "@/components/edit/composables/usePrepopulateSection.ts";
15+
import { TaxonomyRootName } from "@/model/taxonomy/TaxonomyItem.ts";
1816
1917
// TaxonomyManager och rader
2018
const taxonomyManager = await getTaxonomyManager(

src/components/edit/sections/EditNoter.vue

Lines changed: 26 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@
66
77
import { type Arsredovisning } from "@/model/arsredovisning/Arsredovisning.ts";
88
import EditBelopprad from "@/components/edit/blocks/EditBelopprad.vue";
9+
import { createBeloppradInList } from "@/model/arsredovisning/Belopprad.ts";
10+
import { getTaxonomyManager } from "@/util/TaxonomyManager.ts";
11+
import { getValueColumnHeaderCell } from "@/util/noterUtils.ts";
12+
import { usePrepopulateSection } from "@/components/edit/composables/usePrepopulateSection.ts";
913
import {
10-
createBeloppradInList,
11-
deleteBelopprad,
12-
isBeloppradInTaxonomyItemList,
13-
} from "@/model/arsredovisning/Belopprad.ts";
14-
import {
15-
getTaxonomyManager,
1614
type TaxonomyItem,
1715
TaxonomyRootName,
18-
} from "@/util/TaxonomyManager.ts";
19-
import EditItemSelector from "@/components/edit/blocks/EditItemSelector.vue";
20-
import { getValueColumnHeaderCell } from "@/util/noterUtils.ts";
16+
} from "@/model/taxonomy/TaxonomyItem.ts";
2117
2218
// TaxonomyManager och rader
2319
const taxonomyManager = await getTaxonomyManager(TaxonomyRootName.NOTER);
@@ -37,17 +33,29 @@ function addBelopprad(taxonomyItem: TaxonomyItem) {
3733
taxonomyItem,
3834
);
3935
}
36+
37+
const { prepopulateSection, groupPrepopulatedSection } = usePrepopulateSection({
38+
taxonomyManager,
39+
availableTaxonomyItems,
40+
arsredovisning: arsredovisning,
41+
sectionName: "noter",
42+
maxNumPreviousYears: 1,
43+
});
44+
45+
const belopprader = prepopulateSection();
46+
const groups = [
47+
availableTaxonomyItems.children[0].children[0],
48+
...availableTaxonomyItems.children[0].children
49+
.slice(1)
50+
.flatMap((c) => c.children),
51+
];
52+
const groupedBelopprader = groupPrepopulatedSection(belopprader, groups);
4053
</script>
4154

4255
<template>
4356
<div class="accordion">
4457
<div
45-
v-for="(group, groupIndex) in [
46-
availableTaxonomyItems.children[0].children[0],
47-
...availableTaxonomyItems.children[0].children
48-
.slice(1)
49-
.flatMap((c) => c.children),
50-
]"
58+
v-for="(group, groupIndex) in groups"
5159
:key="groupIndex"
5260
class="accordion-item"
5361
>
@@ -89,45 +97,23 @@ function addBelopprad(taxonomyItem: TaxonomyItem) {
8997
"
9098
v-if="arsredovisning.verksamhetsarTidigare.length > 0"
9199
/>
92-
<th scope="col"><!-- Ta bort-knapp --></th>
93100
</tr>
94101
</thead>
95102
<tbody>
96103
<EditBelopprad
97-
v-for="[index, belopprad] in [
98-
...arsredovisning.noter.entries(),
99-
].filter(([, b]) =>
100-
isBeloppradInTaxonomyItemList(
101-
[group, ...group.childrenFlat],
102-
b,
103-
),
104-
)"
104+
v-for="(belopprad, index) in groupedBelopprader[groupIndex]"
105105
:key="belopprad.taxonomyItemName"
106-
v-model:belopprad="arsredovisning.noter[index]"
107-
v-model:belopprader="arsredovisning.noter"
106+
v-model:belopprad="groupedBelopprader[groupIndex][index]"
107+
v-model:belopprader="groupedBelopprader[groupIndex]"
108108
:comparable-num-previous-years="
109109
Math.min(arsredovisning.verksamhetsarTidigare.length, 1)
110110
"
111111
:string-minimum-level="1"
112112
:taxonomy-manager="taxonomyManager"
113-
allow-delete
114113
string-multiline
115-
@delete="
116-
() =>
117-
deleteBelopprad(
118-
taxonomyManager,
119-
belopprad,
120-
arsredovisning.noter,
121-
)
122-
"
123114
/>
124115
</tbody>
125116
</table>
126-
127-
<EditItemSelector
128-
:taxonomy-items="[group, ...group.childrenFlat]"
129-
@add-belopprad="addBelopprad"
130-
/>
131117
</div>
132118
</div>
133119
</div>

src/components/edit/sections/EditResultatrakning.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66
77
import { type Arsredovisning } from "@/model/arsredovisning/Arsredovisning.ts";
88
import EditBelopprad from "@/components/edit/blocks/EditBelopprad.vue";
9-
import {
10-
getTaxonomyManager,
11-
TaxonomyRootName,
12-
} from "@/util/TaxonomyManager.ts";
9+
import { getTaxonomyManager } from "@/util/TaxonomyManager.ts";
1310
import { usePrepopulateSection } from "@/components/edit/composables/usePrepopulateSection.ts";
11+
import { TaxonomyRootName } from "@/model/taxonomy/TaxonomyItem.ts";
1412
1513
const maxNumPreviousYears = 1;
1614

0 commit comments

Comments
 (0)