diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/dataProviders/index.ts b/libs/application/templates/inao/financial-statement-cemetery/src/dataProviders/index.ts
index dd52c79ad7f2..b0b604d16ca3 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/dataProviders/index.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/dataProviders/index.ts
@@ -1,10 +1,7 @@
import { defineTemplateApi } from '@island.is/application/types'
import { UserProfileApi } from '@island.is/application/types'
-
-export {
- NationalRegistryUserApi,
- IdentityApi as IdentityApiProvider,
-} from '@island.is/application/types'
+import { IdentityApi } from '@island.is/application/types'
+export { NationalRegistryUserApi } from '@island.is/application/types'
export const CurrentUserTypeProvider = defineTemplateApi({
action: 'getUserType',
@@ -16,3 +13,9 @@ export const UserInfoApi = UserProfileApi.configure({
catchMock: true,
},
})
+
+export const IdentityApiProvider = IdentityApi.configure({
+ params: {
+ includeActorInfo: true,
+ },
+})
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryIncomeLimit/index.tsx b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryIncomeLimit/index.tsx
deleted file mode 100644
index 3e78d43e4af1..000000000000
--- a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryIncomeLimit/index.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { useEffect } from 'react'
-import { AlertMessage, ContentBlock } from '@island.is/island-ui/core'
-import { useLocale } from '@island.is/localization'
-import { useQuery } from '@apollo/client'
-import { useFormContext } from 'react-hook-form'
-import { m } from '../../lib/messages'
-import { financialLimitQuery } from '../../graphql'
-import { CEMETERYOPERATIONIDS } from '../../utils/constants'
-import { FSIUSERTYPE } from '../../types/types'
-
-export const CemeteryIncomeLimit = () => {
- const { getValues, setValue } = useFormContext()
- const { formatMessage } = useLocale()
-
- const values = getValues()
- const year: string = values?.conditionalAbout?.operatingYear
-
- const { data, error } = useQuery(financialLimitQuery, {
- variables: { input: { year, clientType: `${FSIUSERTYPE.CEMETRY}` } },
- })
-
- useEffect(() => {
- const limit = data?.financialStatementsInaoClientFinancialLimit?.toString()
-
- if (limit) {
- setValue(CEMETERYOPERATIONIDS.incomeLimit, limit)
- }
- }, [data, setValue])
-
- if (error) {
- return (
-
-
-
- )
- }
-
- return null
-}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/AboutOverview.tsx b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/AboutOverview.tsx
index 926d2038faba..f0d0177b8a94 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/AboutOverview.tsx
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/AboutOverview.tsx
@@ -1,61 +1,61 @@
import { GridColumn, GridRow } from '@island.is/island-ui/core'
-import { formatPhoneNumber } from '@island.is/application/ui-components'
-
import { format as formatNationalId } from 'kennitala'
-import { m } from '../../lib/messages'
import { sectionColumn } from './overviewStyles.css'
-import { FinancialStatementCemetery } from '../../lib/dataSchema'
import { ValueLine } from './ValueLine'
+import { FormValue } from '@island.is/application/types'
+import { getAboutOverviewNumbers } from '../../utils/overviewUtils'
+import { m } from '../../lib/messages'
-export const AboutOverview = ({
- answers,
-}: {
- answers: FinancialStatementCemetery
-}) => {
+type Props = {
+ answers: FormValue
+}
+
+export const AboutOverview = ({ answers }: Props) => {
+ const {
+ fullName,
+ nationalId,
+ powerOfAttorneyName,
+ powerOfAttorneyNationalId,
+ email,
+ phoneNumber,
+ } = getAboutOverviewNumbers(answers)
return (
<>
-
+
- {answers.about.powerOfAttorneyName ? (
+ {powerOfAttorneyName ? (
) : null}
- {answers.about.powerOfAttorneyNationalId ? (
+ {powerOfAttorneyNationalId ? (
) : null}
-
+
-
+
>
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/CapitalNumbersOverview.tsx b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/CapitalNumbersOverview.tsx
index f3e18079a7cf..8814e7cb42b8 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/CapitalNumbersOverview.tsx
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/CapitalNumbersOverview.tsx
@@ -1,18 +1,19 @@
import { Box, GridColumn, GridRow, Text } from '@island.is/island-ui/core'
-
-import { m } from '../../lib/messages'
import { ValueLine } from './ValueLine'
import { sectionColumn, starterColumnStyle } from './overviewStyles.css'
import { useLocale } from '@island.is/localization'
-import { FinancialStatementCemetery } from '../../lib/dataSchema'
-import { formatCurrency } from '../../utils/helpers'
+import { FormValue } from '@island.is/application/types'
+import { getCapitalNumbersOverviewNumbers } from '../../utils/overviewUtils'
+import { m } from '../../lib/messages'
+
+type Props = {
+ answers: FormValue
+}
-export const CapitalNumberOverview = ({
- answers,
-}: {
- answers: FinancialStatementCemetery
-}) => {
+export const CapitalNumberOverview = ({ answers }: Props) => {
const { formatMessage } = useLocale()
+ const { capitalIncome, capitalCost, totalCapital } =
+ getCapitalNumbersOverviewNumbers(answers)
return (
<>
@@ -22,27 +23,17 @@ export const CapitalNumberOverview = ({
-
+
- {answers.capitalNumbers?.capitalCost ? (
+ {capitalCost ? (
-
+
) : null}
-
+
>
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/index.tsx b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/index.tsx
index 0f8c89f2c9f0..b5e45641c1fd 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/index.tsx
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/fields/CemeteryOverview/index.tsx
@@ -1,6 +1,5 @@
import { Fragment } from 'react'
import { FieldBaseProps } from '@island.is/application/types'
-import { getValueViaPath } from '@island.is/application/core'
import {
AlertBanner,
Box,
@@ -11,9 +10,6 @@ import {
} from '@island.is/island-ui/core'
import { useLocale } from '@island.is/localization'
import { format as formatNationalId } from 'kennitala'
-import { m } from '../../lib/messages'
-import { FinancialStatementCemetery } from '../../lib/dataSchema'
-import { formatCurrency } from '../../utils/helpers'
import { AboutOverview } from './AboutOverview'
import { ValueLine } from './ValueLine'
import { CapitalNumberOverview } from './CapitalNumbersOverview'
@@ -24,117 +20,53 @@ import {
sectionColumn,
starterColumnStyle,
} from './overviewStyles.css'
+import { formatCurrency } from '../../utils/currency'
+import { isCemetryUnderFinancialLimit } from '../../utils/helpers'
+import { getOverviewNumbers } from '../../utils/overviewUtils'
+import { m } from '../../lib/messages'
export const CemeteryOverview = ({ application }: FieldBaseProps) => {
const { formatMessage } = useLocale()
-
- const answers = application.answers as FinancialStatementCemetery
- const file = getValueViaPath>(answers, 'attachments.file')
- const fileName = file?.[0]?.name
- const incomeLimit =
- getValueViaPath(answers, 'cemeteryOperations.incomeLimit') ?? '0'
- const email = getValueViaPath(answers, 'about.email')
- const cemeteryCaretakers = answers.cemeteryCaretaker
-
- const careIncome = getValueViaPath(
- answers,
- 'cemeteryIncome.careIncome',
- )
- const burialRevenue = getValueViaPath(
- answers,
- 'cemeteryIncome.burialRevenue',
- )
- const grantFromTheCemeteryFund = getValueViaPath(
- answers,
- 'cemeteryIncome.grantFromTheCemeteryFund',
- )
- const otherIncome = getValueViaPath(
- answers,
- 'cemeteryIncome.otherIncome',
- )
- const totalIncome = getValueViaPath(answers, 'cemeteryIncome.total')
-
- const payroll = getValueViaPath(answers, 'cemeteryExpense.payroll')
- const funeralCost = getValueViaPath(
- answers,
- 'cemeteryExpense.funeralCost',
- )
- const chapelExpense = getValueViaPath(
- answers,
- 'cemeteryExpense.chapelExpense',
- )
- const donationsToCemeteryFund = getValueViaPath(
- answers,
- 'cemeteryExpense.cemeteryFundExpense',
- )
- const donationsToOther = getValueViaPath(
- answers,
- 'cemeteryExpense.donationsToOther',
- )
- const otherOperationCost = getValueViaPath(
- answers,
- 'cemeteryExpense.otherOperationCost',
- )
- const depreciation = getValueViaPath(
- answers,
- 'cemeteryExpense.depreciation',
- )
- const totalExpenses = getValueViaPath(
- answers,
- 'cemeteryExpense.total',
- )
-
- const fixedAssetsTotal = getValueViaPath(
- answers,
- 'cemeteryAsset.fixedAssetsTotal',
- )
- const currentAssets = getValueViaPath(
- answers,
- 'cemeteryAsset.currentAssets',
- )
- const totalAssets = getValueViaPath(answers, 'assetsTotal')
-
- const longTerm = getValueViaPath(
- answers,
- 'cemeteryLiability.longTerm',
- )
- const shortTerm = getValueViaPath(
- answers,
- 'cemeteryLiability.shortTerm',
- )
- const totalLiabilities = getValueViaPath(
- answers,
- 'equityAndLiabilitiesTotals.liabilitiesTotal',
- )
-
- const equityAtTheBeginningOfTheYear = getValueViaPath(
- answers,
- 'cemeteryEquity.equityAtTheBeginningOfTheYear',
- )
- const revaluationDueToPriceChanges = getValueViaPath(
- answers,
- 'cemeteryEquity.revaluationDueToPriceChanges',
- )
- const reevaluateOther = getValueViaPath(
- answers,
- 'cemeteryEquity.reevaluateOther',
- )
- const operationResult = getValueViaPath(
- answers,
- 'cemeteryEquity.operationResult',
- )
- const totalEquity = getValueViaPath(answers, 'cemeteryEquity.total')
-
- const debtsAndCash = getValueViaPath(
- answers,
- 'equityAndLiabilitiesTotals.equityAndLiabilitiesTotal',
+ const cemeteryUnderFinancialLimit = isCemetryUnderFinancialLimit(
+ application.answers,
)
+ const {
+ careIncome,
+ burialRevenue,
+ grantFromTheCemeteryFund,
+ otherIncome,
+ totalIncome,
+ payroll,
+ funeralCost,
+ chapelExpense,
+ donationsToCemeteryFund,
+ donationsToOther,
+ otherOperationCost,
+ depreciation,
+ totalExpenses,
+ fixedAssetsTotal,
+ currentAssets,
+ totalAssets,
+ longTerm,
+ shortTerm,
+ totalLiabilities,
+ equityAtTheBeginningOfTheYear,
+ revaluationDueToPriceChanges,
+ reevaluateOther,
+ operationResult,
+ totalEquity,
+ debtsAndCash,
+ email,
+ fileName,
+ incomeLimit,
+ cemeteryCaretakers,
+ } = getOverviewNumbers(application.answers)
return (
-
+
@@ -214,7 +146,7 @@ export const CemeteryOverview = ({ application }: FieldBaseProps) => {
-
+
@@ -294,8 +226,9 @@ export const CemeteryOverview = ({ application }: FieldBaseProps) => {
- {Number(totalIncome) < Number(incomeLimit) &&
- cemeteryCaretakers?.length > 0 ? (
+ {cemeteryUnderFinancialLimit &&
+ cemeteryCaretakers &&
+ cemeteryCaretakers.length > 0 ? (
<>
@@ -338,7 +271,7 @@ export const CemeteryOverview = ({ application }: FieldBaseProps) => {
) : null}
{fileName ? (
<>
-
+
>
) : null}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/FetchDataBasedOnSelectedYear/index.tsx b/libs/application/templates/inao/financial-statement-cemetery/src/fields/FetchDataBasedOnSelectedYear/index.tsx
new file mode 100644
index 000000000000..1fbb78acc661
--- /dev/null
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/fields/FetchDataBasedOnSelectedYear/index.tsx
@@ -0,0 +1,123 @@
+import { useEffect } from 'react'
+import {
+ AlertMessage,
+ ContentBlock,
+ LoadingDots,
+} from '@island.is/island-ui/core'
+import { useLocale } from '@island.is/localization'
+import { useQuery } from '@apollo/client'
+import { useFormContext } from 'react-hook-form'
+import { financialLimitQuery, taxInfoQuery } from '../../graphql'
+import { CEMETERYOPERATIONIDS } from '../../utils/constants'
+import { FSIUSERTYPE, TaxInfoData } from '../../types/types'
+import {
+ getCareIncomeAndBurialRevenueAndGrant,
+ getTaxInfoFromAnswers,
+} from '../../utils/helpers'
+import { m } from '../../lib/messages'
+
+export const FetchDataBasedOnSelectedYear = () => {
+ const { getValues, setValue } = useFormContext()
+ const { formatMessage } = useLocale()
+
+ const values = getValues()
+ const year: string = values?.conditionalAbout?.operatingYear
+
+ const { data, error, loading } = useQuery(financialLimitQuery, {
+ variables: { input: { year, clientType: `${FSIUSERTYPE.CEMETRY}` } },
+ })
+
+ const { data: taxInfoData, loading: taxInfoLoading } = useQuery(
+ taxInfoQuery,
+ {
+ variables: { year },
+ },
+ )
+
+ const {
+ careIncomeFromAnswers,
+ burialRevenueFromAnswers,
+ grantFromTheCemeteryFundFromAnswers,
+ donationsToCemeteryFundFromAnswers,
+ } = getTaxInfoFromAnswers(values)
+
+ useEffect(() => {
+ const limit = data?.financialStatementsInaoClientFinancialLimit?.toString()
+
+ if (limit) {
+ setValue(CEMETERYOPERATIONIDS.incomeLimit, limit)
+ }
+ }, [data, setValue])
+
+ useEffect(() => {
+ if (!taxInfoData) return
+
+ const {
+ careIncome,
+ burialRevenue,
+ grantFromTheCemeteryFund,
+ donationsToCemeteryFund,
+ } = getCareIncomeAndBurialRevenueAndGrant(
+ taxInfoData.financialStatementsInaoTaxInfo,
+ )
+
+ const updates = [
+ {
+ id: CEMETERYOPERATIONIDS.careIncome,
+ value: careIncome,
+ exists: careIncomeFromAnswers,
+ },
+ {
+ id: CEMETERYOPERATIONIDS.burialRevenue,
+ value: burialRevenue,
+ exists: burialRevenueFromAnswers,
+ },
+ {
+ id: CEMETERYOPERATIONIDS.grantFromTheCemeteryFund,
+ value: grantFromTheCemeteryFund,
+ exists: grantFromTheCemeteryFundFromAnswers,
+ },
+ {
+ id: CEMETERYOPERATIONIDS.donationsToCemeteryFund,
+ value: donationsToCemeteryFund,
+ exists: donationsToCemeteryFundFromAnswers,
+ },
+ ]
+
+ updates.forEach((update) => {
+ if (!update.exists) {
+ setValue(update.id, update.value)
+ }
+ })
+ }, [
+ taxInfoData,
+ setValue,
+ careIncomeFromAnswers,
+ burialRevenueFromAnswers,
+ grantFromTheCemeteryFundFromAnswers,
+ donationsToCemeteryFundFromAnswers,
+ CEMETERYOPERATIONIDS,
+ ])
+
+ if (loading || taxInfoLoading) {
+ return (
+
+
+
+ )
+ }
+
+ if (error) {
+ return (
+
+
+
+ )
+ }
+
+ return null
+}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/PowerOfAttorney/index.tsx b/libs/application/templates/inao/financial-statement-cemetery/src/fields/PowerOfAttorney/index.tsx
deleted file mode 100644
index f4dcf6f77248..000000000000
--- a/libs/application/templates/inao/financial-statement-cemetery/src/fields/PowerOfAttorney/index.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-import { useEffect } from 'react'
-import { useFormContext } from 'react-hook-form'
-import { useLazyQuery } from '@apollo/client'
-import {
- Box,
- GridColumn,
- GridContainer,
- GridRow,
- InputError,
-} from '@island.is/island-ui/core'
-import { InputController } from '@island.is/shared/form-fields'
-import { useLocale } from '@island.is/localization'
-import { IdentityInput, Query } from '@island.is/api/schema'
-import { m } from '../../lib/messages'
-import { FieldBaseProps } from '@island.is/application/types'
-import { getErrorViaPath } from '@island.is/application/core'
-import { IdentityQuery } from '../../graphql'
-import { ABOUTIDS } from '../../utils/constants'
-
-export const PowerOfAttorneyFields = ({ application }: FieldBaseProps) => {
- const { formatMessage } = useLocale()
- const {
- formState: { errors },
- setValue,
- } = useFormContext()
-
- const currentActor =
- application.applicantActors[application.applicantActors.length - 1]
-
- const [getIdentity, { loading, error: queryError }] = useLazyQuery<
- Query,
- { input: IdentityInput }
- >(IdentityQuery, {
- onCompleted: (data) => {
- setValue(ABOUTIDS.powerOfAttorneyName, data.identity?.name ?? '')
- },
- })
-
- useEffect(() => {
- if (currentActor) {
- getIdentity({
- variables: {
- input: {
- nationalId: currentActor,
- },
- },
- })
- }
- }, [])
-
- if (application.applicantActors.length === 0) {
- return null
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
- {queryError ? (
-
- ) : null}
-
-
-
-
- )
-}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/fields/index.ts b/libs/application/templates/inao/financial-statement-cemetery/src/fields/index.ts
index 9903bafb3734..5c8739dcdcab 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/fields/index.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/fields/index.ts
@@ -1,4 +1,3 @@
export { CemeteryCaretaker } from './CemeteryCareteker'
-export { PowerOfAttorneyFields } from './PowerOfAttorney'
export { CemeteryOverview } from './CemeteryOverview'
-export { CemeteryIncomeLimit } from './CemeteryIncomeLimit'
+export { FetchDataBasedOnSelectedYear } from './FetchDataBasedOnSelectedYear'
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/caretakerMultiField.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/caretakerMultiField.ts
deleted file mode 100644
index 21b59e7439fe..000000000000
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/caretakerMultiField.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { buildCustomField, buildMultiField } from '@island.is/application/core'
-import { m } from '../../../lib/messages'
-import { CEMETERYCARETAKER } from '../../../utils/constants'
-
-export const caretakerMultiField = buildMultiField({
- id: 'caretakers',
- title: m.cemeteryBoardmembers,
- description: m.cemeteryRegisterCaretakers,
- children: [
- buildCustomField({
- id: 'cemeteryCaretaker',
- title: m.cemeteryBoardmembers,
- component: 'CemeteryCaretaker',
- childInputIds: Object.values(CEMETERYCARETAKER),
- }),
- ],
-})
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/index.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/index.ts
index a5805af6e458..384036b026d1 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/index.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryCaretakerSection/index.ts
@@ -1,9 +1,32 @@
-import { buildSection } from '@island.is/application/core'
+import {
+ buildCustomField,
+ buildMultiField,
+ buildSection,
+} from '@island.is/application/core'
import { m } from '../../../lib/messages'
-import { caretakerMultiField } from './caretakerMultiField'
+import { CEMETERYCARETAKER } from '../../../utils/constants'
+import { isCemetryUnderFinancialLimit } from '../../../utils/helpers'
+// This section should appear if the cemetries total income is under the income limit
export const cemeteryCaretekerSection = buildSection({
+ condition: (answers) => {
+ return isCemetryUnderFinancialLimit(answers)
+ },
id: 'cemeteryCaretekerSection',
title: m.cemeteryCaretakers,
- children: [caretakerMultiField],
+ children: [
+ buildMultiField({
+ id: 'caretakers',
+ title: m.cemeteryBoardmembers,
+ description: m.cemeteryRegisterCaretakers,
+ children: [
+ buildCustomField({
+ id: 'cemeteryCaretaker',
+ title: m.cemeteryBoardmembers,
+ component: 'CemeteryCaretaker',
+ childInputIds: Object.values(CEMETERYCARETAKER),
+ }),
+ ],
+ }),
+ ],
})
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryFinancialStatementSection/index.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryFinancialStatementSection/index.ts
index 8df2c99ea9cd..b46b820b5714 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryFinancialStatementSection/index.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryFinancialStatementSection/index.ts
@@ -1,30 +1,18 @@
import { buildFileUploadField, buildSection } from '@island.is/application/core'
import { m } from '../../../lib/messages'
-import { currencyStringToNumber } from '../../../utils/helpers'
-import { FinancialStatementCemetery } from '../../../lib/dataSchema'
+import { isCemetryUnderFinancialLimit } from '../../../utils/helpers'
+// This section should appear if the cemetries total income is over the income limit
export const cemeteryFinancialStatementSection = buildSection({
+ condition: (answers) => {
+ return !isCemetryUnderFinancialLimit(answers)
+ },
id: 'documents',
title: m.financialStatement,
children: [
buildFileUploadField({
id: 'attachments.file',
title: m.upload,
- condition: (answers) => {
- const applicationAnswers = answers as FinancialStatementCemetery
- const careTakerLimit =
- applicationAnswers.cemeteryOperation?.incomeLimit ?? '0'
- const fixedAssetsTotal =
- applicationAnswers.cemeteryAsset?.fixedAssetsTotal
- const totalIncome = applicationAnswers.cemeteryIncome?.total
- const longTermDebt = applicationAnswers.cemeteryLiability?.longTerm
- const isUnderLimit =
- currencyStringToNumber(totalIncome) < careTakerLimit
- if (isUnderLimit && fixedAssetsTotal === '0' && longTermDebt === '0') {
- return false
- }
- return true
- },
introduction: m.uploadIntro,
description: m.uploadDescription,
uploadHeader: m.uploadHeader,
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/capitalNumberSubSection.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/capitalNumberSubSection.ts
index 86bc4ae3eaa0..c8f3ff8e67a3 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/capitalNumberSubSection.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/capitalNumberSubSection.ts
@@ -6,7 +6,7 @@ import {
} from '@island.is/application/core'
import { m } from '../../../lib/messages'
import { CAPITALNUMBERS } from '../../../utils/constants'
-import { sumCapitalNumbers } from '../../../utils/helpers'
+import { sumCapitalNumbers } from '../../../utils/sums'
export const capitalNumberSubSection = buildSubSection({
id: 'keynumbers.capitalNumbers',
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/equityAndLiabilitySubSection.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/equityAndLiabilitySubSection.ts
index 1e0f6a2987f2..5a1b3b970132 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/equityAndLiabilitySubSection.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/equityAndLiabilitySubSection.ts
@@ -13,12 +13,12 @@ import {
} from '../../../utils/constants'
import {
operationResult,
- showEquitiesAndLiabilitiesAlert,
- sumAssets,
sumLiabilities,
- sumTotalEquity,
sumTotalEquityAndLiabilities,
-} from '../../../utils/helpers'
+ sumTotalEquity,
+ showEquitiesAndLiabilitiesAlert,
+ sumAssets,
+} from '../../../utils/sums'
export const equityAndLiabilitiesSubSection = buildSubSection({
id: 'keyNumbers.cemetryEquitiesAndLiabilities',
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/opperatingCostSubSection.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/opperatingCostSubSection.ts
index 34329fa8ee15..d15128bfd667 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/opperatingCostSubSection.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/cemeteryKeyNumbersSection/opperatingCostSubSection.ts
@@ -12,7 +12,7 @@ import {
sumExpenses,
sumIncome,
sumOperatingResults,
-} from '../../../utils/helpers'
+} from '../../../utils/sums'
export const opperatingCostSubSection = buildSubSection({
id: 'operatingCost',
@@ -24,9 +24,9 @@ export const opperatingCostSubSection = buildSubSection({
description: m.fillOutAppopriate,
children: [
buildCustomField({
- id: 'cemetryIncomeLimit',
+ id: 'fetchDataBasedOnYear',
title: '',
- component: 'CemeteryIncomeLimit',
+ component: 'FetchDataBasedOnSelectedYear',
}),
// Income
buildDescriptionField({
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/clientInfoSection/index.ts b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/clientInfoSection/index.ts
index 9916366fd934..0a16dcebfd02 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/clientInfoSection/index.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/forms/applicationForm/clientInfoSection/index.ts
@@ -1,12 +1,13 @@
import {
buildAsyncSelectField,
- buildCustomField,
buildDescriptionField,
buildMultiField,
+ buildPhoneField,
buildSection,
buildTextField,
+ getValueViaPath,
} from '@island.is/application/core'
-import { Application, UserProfile } from '@island.is/application/types'
+import { Application } from '@island.is/application/types'
import { m } from '../../../lib/messages'
import { ABOUTIDS } from '../../../utils/constants'
import { Identity } from '@island.is/api/schema'
@@ -15,6 +16,10 @@ import { AuditConfig } from '../../../types/types'
import { getYearOptions } from '../../../utils/helpers'
export const clientInfoSection = buildSection({
+ condition: (_answers, externalData) => {
+ console.log(externalData)
+ return true
+ },
id: 'info',
title: m.info,
children: [
@@ -58,42 +63,49 @@ export const clientInfoSection = buildSection({
return nationalRegistry.name
},
}),
- buildDescriptionField({
- id: 'about.description2',
- title: '',
+ buildTextField({
+ id: ABOUTIDS.powerOfAttorneyNationalId,
+ title: m.powerOfAttorneyNationalId,
+ width: 'half',
+ readOnly: true,
+ format: '######-####',
+ defaultValue: (application: Application) =>
+ getValueViaPath(
+ application.externalData,
+ 'identity.data.actor.nationalId',
+ ),
}),
- buildCustomField({
- id: 'powerOfAttorney',
- title: '',
- description: '',
- component: 'PowerOfAttorneyFields',
- childInputIds: [
- ABOUTIDS.powerOfAttorneyNationalId,
- ABOUTIDS.powerOfAttorneyName,
- ],
+ buildTextField({
+ id: ABOUTIDS.powerOfAttorneyName,
+ title: m.powerOfAttorneyName,
+ width: 'half',
+ readOnly: true,
+ defaultValue: (application: Application) =>
+ getValueViaPath(
+ application.externalData,
+ 'identity.data.actor.name',
+ ),
}),
-
buildTextField({
id: 'about.email',
title: m.email,
width: 'half',
variant: 'email',
- defaultValue: (application: Application) => {
- const userProfile = application.externalData.userProfile
- .data as UserProfile
- return userProfile.email
- },
+ defaultValue: (application: Application) =>
+ getValueViaPath(
+ application.externalData,
+ 'userProfile.data.email',
+ ),
}),
- buildTextField({
+ buildPhoneField({
id: 'about.phoneNumber',
title: m.phoneNumber,
width: 'half',
- variant: 'tel',
- defaultValue: (application: Application) => {
- const userProfile = application.externalData.userProfile
- .data as UserProfile
- return userProfile.mobilePhoneNumber
- },
+ defaultValue: (application: Application) =>
+ getValueViaPath(
+ application.externalData,
+ 'userProfile.data.mobilePhoneNumber',
+ ),
}),
],
}),
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/hooks/useTotals.ts b/libs/application/templates/inao/financial-statement-cemetery/src/hooks/useTotals.ts
deleted file mode 100644
index 15a5873fdd5e..000000000000
--- a/libs/application/templates/inao/financial-statement-cemetery/src/hooks/useTotals.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { useCallback, useEffect, useState } from 'react'
-import { useFormContext } from 'react-hook-form'
-import { getTotal } from '../utils/helpers'
-
-const useTotals = (key: string): [() => void, number] => {
- const [total, setTotal] = useState(0)
- const { getValues } = useFormContext()
- const getSum = useCallback(() => {
- const values = getValues()
- const sum = getTotal(values, key)
- setTotal(sum)
- }, [key, getValues, setTotal])
-
- useEffect(() => {
- getSum()
- }, [getSum])
-
- return [getSum, total]
-}
-
-export { useTotals }
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/lib/dataSchema.ts b/libs/application/templates/inao/financial-statement-cemetery/src/lib/dataSchema.ts
index 97379678b103..35a8aefa428f 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/lib/dataSchema.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/lib/dataSchema.ts
@@ -3,11 +3,9 @@ import { m } from './messages'
import * as kennitala from 'kennitala'
import { parsePhoneNumberFromString } from 'libphonenumber-js'
import { BOARDMEMEBER, CARETAKER } from '../utils/constants'
-import {
- isPositiveNumberInString,
- getBoardmembersAndCaretakers,
-} from '../utils/helpers'
+import { getBoardmembersAndCaretakers } from '../utils/helpers'
import { YES } from '@island.is/application/types'
+import { isPositiveNumberInString } from '../utils/currency'
const FileSchema = z.object({
name: z.string(),
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/types/types.ts b/libs/application/templates/inao/financial-statement-cemetery/src/types/types.ts
index 53e29233513f..edd111488a8c 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/types/types.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/types/types.ts
@@ -46,3 +46,19 @@ type InaoConfigItem = {
export type AuditConfig = {
financialStatementsInaoConfig: Array
}
+
+export type CareTaker = {
+ nationalId: string
+ name: string
+ role: string
+}
+
+export type TaxInfoItem = {
+ __typename: string
+ key: number
+ value: string
+}
+
+export type TaxInfoData = {
+ financialStatementsInaoTaxInfo: Array
+}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/utils/constants.ts b/libs/application/templates/inao/financial-statement-cemetery/src/utils/constants.ts
index 2c0cb3bb6afe..190000af6700 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/utils/constants.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/utils/constants.ts
@@ -26,6 +26,7 @@ export enum TaxInfoTypes {
CARE_INCOME = 300,
BURIAL_REVENUE = 301,
GRANT_FROM_THE_CEMETERY_FUND = 302,
+ DONATIONS_TO_CEMETERYFUND = 334,
}
export const CEMETERYOPERATIONIDS = {
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/utils/currency.ts b/libs/application/templates/inao/financial-statement-cemetery/src/utils/currency.ts
new file mode 100644
index 000000000000..7ffe7149224c
--- /dev/null
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/utils/currency.ts
@@ -0,0 +1,16 @@
+export const currencyStringToNumber = (str: string) => {
+ if (!str) {
+ return str
+ }
+ const cleanString = str.replace(/[,\s]+|[.\s]+/g, '')
+ return parseInt(cleanString, 10)
+}
+
+export const formatCurrency = (answer?: string) => {
+ if (!answer) return '0. kr'
+ return answer.replace(/\B(?=(\d{3})+(?!\d))/g, '.') + ' kr.'
+}
+
+export const isPositiveNumberInString = (input: string) => {
+ return Number(input) >= 0
+}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/utils/helpers.ts b/libs/application/templates/inao/financial-statement-cemetery/src/utils/helpers.ts
index aec943d790e8..9a6d72727122 100644
--- a/libs/application/templates/inao/financial-statement-cemetery/src/utils/helpers.ts
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/utils/helpers.ts
@@ -1,42 +1,16 @@
-import { ExternalData, FormValue } from '@island.is/application/types'
+import { FormValue } from '@island.is/application/types'
import { getValueViaPath } from '@island.is/application/core'
import {
BOARDMEMEBER,
- CAPITALNUMBERS,
CARETAKER,
CemeteriesBackwardLimit,
CemeteriesYearAllowed,
- CEMETERYEQUITIESANDLIABILITIESIDS,
CEMETERYOPERATIONIDS,
- EQUITYANDLIABILITIESTOTALS,
- OPERATINGCOST,
- TOTAL,
+ TaxInfoTypes,
} from './constants'
-import { FinancialStatementCemetery } from '../lib/dataSchema'
import getYear from 'date-fns/getYear'
import subYears from 'date-fns/subYears'
-import { AuditConfig, BoardMember, Config, FSIUSERTYPE } from '../types/types'
-
-export const getTotal = (values: Record, key: string) => {
- if (!values[key]) {
- return 0
- }
- const total = Object.entries(values[key])
- .filter(([k, v]) => k !== TOTAL && !isNaN(Number(v)))
- .map(([_k, v]) => Number(v))
- .reduce((prev, current) => {
- return (prev += current)
- }, 0)
- return total
-}
-
-export const currencyStringToNumber = (str: string) => {
- if (!str) {
- return str
- }
- const cleanString = str.replace(/[,\s]+|[.\s]+/g, '')
- return parseInt(cleanString, 10)
-}
+import { AuditConfig, BoardMember, TaxInfoItem } from '../types/types'
export const getBoardmembersAndCaretakers = (members: Array) => {
const careTakers = members
@@ -60,11 +34,7 @@ export const isCemetryUnderFinancialLimit = (answers: FormValue) => {
getValueViaPath(answers, 'cemeteryLiability.longTerm') || '0'
const isUnderLimit = Number(totalIncome) < Number(incomeLimit)
- if (isUnderLimit && fixedAssetsTotal === '0' && longTermDebt === '0') {
- return true
- }
-
- return false
+ return isUnderLimit && fixedAssetsTotal === '0' && longTermDebt === '0'
}
export const getYearOptions = (data: AuditConfig) => {
@@ -103,226 +73,64 @@ export const possibleOperatingYears = (
return operationYears
}
-export const getConfigInfoForKey = (config: Config[], configKey: string) => {
- return config?.filter((config: Config) => config.key === configKey)[0].value
-}
-
-export const formatCurrency = (answer?: string) => {
- if (!answer) return '0. kr'
- return answer.replace(/\B(?=(\d{3})+(?!\d))/g, '.') + ' kr.'
-}
-
-export const isPositiveNumberInString = (input: string) => {
- return Number(input) > 0
-}
-
-export const sumIncome = (answers: FormValue) => {
- const careIncome =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.careIncome) || '0'
- const burialRevenue =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.burialRevenue) || '0'
- const grantFromTheCemeteryFund =
- getValueViaPath(
- answers,
- CEMETERYOPERATIONIDS.grantFromTheCemeteryFund,
- ) || '0'
- const otherIncome =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.otherIncome) || '0'
-
- return `${
- Number(careIncome) +
- Number(burialRevenue) +
- Number(grantFromTheCemeteryFund) +
- Number(otherIncome)
- }`
-}
-
-export const sumExpenses = (answers: FormValue) => {
- const payroll = getValueViaPath(answers, CEMETERYOPERATIONIDS.payroll)
- const funeralCost =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.funeralCost) || '0'
- const chapelExpense =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.chapelExpense) || '0'
- const donationsToCemeteryFund =
- getValueViaPath(
- answers,
- CEMETERYOPERATIONIDS.donationsToCemeteryFund,
- ) || '0'
- const donationsToOther =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.donationsToOther) ||
- '0'
- const otherOperationCost =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.otherOperationCost) ||
- '0'
- const depreciation =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.depreciation) || '0'
-
- return `${
- Number(payroll) +
- Number(funeralCost) +
- Number(chapelExpense) +
- Number(donationsToCemeteryFund) +
- Number(donationsToOther) +
- Number(otherOperationCost) +
- Number(depreciation)
- }`
-}
-
-export const sumOperatingResults = (answers: FormValue) => {
- const income =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.totalIncome) || '0'
- const expenses =
- getValueViaPath(answers, CEMETERYOPERATIONIDS.totalExpense) || '0'
-
- return `${Number(income) - Number(expenses)}`
-}
-
-export const sumCapitalNumbers = (answers: FormValue) => {
- const capitalIncome =
- getValueViaPath(answers, CAPITALNUMBERS.capitalIncome) || '0'
- const capitalCost =
- getValueViaPath(answers, CAPITALNUMBERS.capitalCost) || '0'
- return `${Number(capitalIncome) - Number(capitalCost)}`
-}
-
-export const sumAssets = (answers: FormValue) => {
- const fixedAssetsTotal =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.fixedAssetsTotal,
- ) || '0'
- const currentAssets =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.currentAssets,
- ) || '0'
- return `${Number(fixedAssetsTotal) + Number(currentAssets)}`
-}
-
-export const sumLiabilities = (answers: FormValue) => {
- const longTerm =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.longTerm,
- ) || '0'
- const shortTerm =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.shortTerm,
- ) || '0'
- return `${Number(longTerm) + Number(shortTerm)}`
-}
-
-export const operationResult = (answers: FormValue) => {
- const operatingTotalCost =
- getValueViaPath(answers, OPERATINGCOST.total) || '0'
- const capitalTotal =
- getValueViaPath(answers, CAPITALNUMBERS.total) || '0'
- return `${Number(operatingTotalCost) + Number(capitalTotal)}`
-}
-
-export const sumTotalEquity = (answers: FormValue) => {
- const equityAtTheBeginningOfTheYear =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.equityAtTheBeginningOfTheYear,
- ) || '0'
- const revaluationDueToPriceChanges =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.revaluationDueToPriceChanges,
- ) || '0'
- const reevaluateOther =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.reevaluateOther,
- ) || '0'
- const operationResult =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.operationResult,
- ) || '0'
-
- return `${
- Number(equityAtTheBeginningOfTheYear) +
- Number(revaluationDueToPriceChanges) +
- Number(reevaluateOther) +
- Number(operationResult)
- }`
-}
-
-export const sumTotalEquityAndLiabilities = (answers: FormValue) => {
- const liabilityTotal =
- getValueViaPath(
- answers,
- EQUITYANDLIABILITIESTOTALS.liabilitiesTotal,
- ) || '0'
- const totalEquity =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.equityTotal,
- ) || '0'
+export const getCareIncomeAndBurialRevenueAndGrant = (
+ taxInfo?: Array,
+) => {
+ if (!taxInfo) {
+ return {
+ careIncome: undefined,
+ burialRevenue: undefined,
+ grantFromTheCemeteryFund: undefined,
+ }
+ }
- return `${Number(totalEquity) + Number(liabilityTotal)}`
+ const careIncome = taxInfo.find(
+ (item) => item.key === TaxInfoTypes.CARE_INCOME,
+ )
+ const burialRevenue = taxInfo.find(
+ (item) => item.key === TaxInfoTypes.BURIAL_REVENUE,
+ )
+ const grantFromTheCemeteryFund = taxInfo.find(
+ (item) => item.key === TaxInfoTypes.GRANT_FROM_THE_CEMETERY_FUND,
+ )
+ const donationsToCemeteryFund = taxInfo.find(
+ (item) => item.key === TaxInfoTypes.DONATIONS_TO_CEMETERYFUND,
+ )
+
+ return {
+ careIncome: careIncome ? careIncome.value : undefined,
+ burialRevenue: burialRevenue ? burialRevenue.value : undefined,
+ grantFromTheCemeteryFund: grantFromTheCemeteryFund
+ ? grantFromTheCemeteryFund.value
+ : undefined,
+ donationsToCemeteryFund: donationsToCemeteryFund
+ ? donationsToCemeteryFund.value
+ : undefined,
+ }
}
-export const showEquitiesAndLiabilitiesAlert = (answers: FormValue) => {
- const fixedAssetsTotal =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.fixedAssetsTotal,
- ) || '0'
- const currentAssets =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.currentAssets,
- ) || '0'
- const longTerm =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.longTerm,
- ) || '0'
- const shortTerm =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.shortTerm,
- ) || '0'
- const equityAtTheBeginningOfTheYear =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.equityAtTheBeginningOfTheYear,
- ) || '0'
- const revaluationDueToPriceChanges =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.revaluationDueToPriceChanges,
- ) || '0'
- const reevaluateOther =
- getValueViaPath(
- answers,
- CEMETERYEQUITIESANDLIABILITIESIDS.reevaluateOther,
- ) || '0'
-
- const totalAssets =
- getValueViaPath(answers, EQUITYANDLIABILITIESTOTALS.assetsTotal) ||
- '0'
- const totalEquityAndLiabilities =
- getValueViaPath(
- answers,
- EQUITYANDLIABILITIESTOTALS.equityAndLiabilitiesTotal,
- ) || '0'
-
- if (
- !fixedAssetsTotal ||
- !currentAssets ||
- !longTerm ||
- !shortTerm ||
- !equityAtTheBeginningOfTheYear ||
- !revaluationDueToPriceChanges ||
- !reevaluateOther ||
- !operationResult
- ) {
- return false
+export const getTaxInfoFromAnswers = (answers: FormValue) => {
+ const careIncome = getValueViaPath(
+ answers,
+ CEMETERYOPERATIONIDS.careIncome,
+ )
+ const burialRevenue = getValueViaPath(
+ answers,
+ CEMETERYOPERATIONIDS.burialRevenue,
+ )
+ const grantFromTheCemeteryFund = getValueViaPath(
+ answers,
+ CEMETERYOPERATIONIDS.grantFromTheCemeteryFund,
+ )
+ const donationsToCemeteryFund = getValueViaPath(
+ answers,
+ CEMETERYOPERATIONIDS.donationsToCemeteryFund,
+ )
+
+ return {
+ careIncomeFromAnswers: careIncome,
+ burialRevenueFromAnswers: burialRevenue,
+ grantFromTheCemeteryFundFromAnswers: grantFromTheCemeteryFund,
+ donationsToCemeteryFundFromAnswers: donationsToCemeteryFund,
}
- return totalAssets !== totalEquityAndLiabilities
}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/utils/overviewUtils.ts b/libs/application/templates/inao/financial-statement-cemetery/src/utils/overviewUtils.ts
new file mode 100644
index 000000000000..f27cb0ef6f96
--- /dev/null
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/utils/overviewUtils.ts
@@ -0,0 +1,189 @@
+import { FormValue } from '@island.is/application/types'
+import { getValueViaPath } from '@island.is/application/core'
+import { CareTaker } from '../types/types'
+import { formatPhoneNumber } from '@island.is/application/ui-components'
+import { format as formatNationalId } from 'kennitala'
+import { formatCurrency } from './currency'
+
+export const getOverviewNumbers = (answers: FormValue) => {
+ const file = getValueViaPath>(answers, 'attachments.file')
+ const fileName = file?.[0]?.name
+ const incomeLimit =
+ getValueViaPath(answers, 'cemeteryOperations.incomeLimit') ?? '0'
+ const email = getValueViaPath(answers, 'about.email')
+ const careIncome = getValueViaPath(
+ answers,
+ 'cemeteryIncome.careIncome',
+ )
+ const cemeteryCaretakers = getValueViaPath>(
+ answers,
+ 'cemeteryCaretaker',
+ )
+ const burialRevenue = getValueViaPath(
+ answers,
+ 'cemeteryIncome.burialRevenue',
+ )
+ const grantFromTheCemeteryFund = getValueViaPath(
+ answers,
+ 'cemeteryIncome.grantFromTheCemeteryFund',
+ )
+ const otherIncome = getValueViaPath(
+ answers,
+ 'cemeteryIncome.otherIncome',
+ )
+ const totalIncome = getValueViaPath(answers, 'cemeteryIncome.total')
+
+ const payroll = getValueViaPath(answers, 'cemeteryExpense.payroll')
+ const funeralCost = getValueViaPath(
+ answers,
+ 'cemeteryExpense.funeralCost',
+ )
+ const chapelExpense = getValueViaPath(
+ answers,
+ 'cemeteryExpense.chapelExpense',
+ )
+ const donationsToCemeteryFund = getValueViaPath(
+ answers,
+ 'cemeteryExpense.cemeteryFundExpense',
+ )
+ const donationsToOther = getValueViaPath(
+ answers,
+ 'cemeteryExpense.donationsToOther',
+ )
+ const otherOperationCost = getValueViaPath(
+ answers,
+ 'cemeteryExpense.otherOperationCost',
+ )
+ const depreciation = getValueViaPath(
+ answers,
+ 'cemeteryExpense.depreciation',
+ )
+ const totalExpenses = getValueViaPath(
+ answers,
+ 'cemeteryExpense.total',
+ )
+
+ const fixedAssetsTotal = getValueViaPath(
+ answers,
+ 'cemeteryAsset.fixedAssetsTotal',
+ )
+ const currentAssets = getValueViaPath(
+ answers,
+ 'cemeteryAsset.currentAssets',
+ )
+ const totalAssets = getValueViaPath(answers, 'assetsTotal')
+
+ const longTerm = getValueViaPath(
+ answers,
+ 'cemeteryLiability.longTerm',
+ )
+ const shortTerm = getValueViaPath(
+ answers,
+ 'cemeteryLiability.shortTerm',
+ )
+ const totalLiabilities = getValueViaPath(
+ answers,
+ 'equityAndLiabilitiesTotals.liabilitiesTotal',
+ )
+
+ const equityAtTheBeginningOfTheYear = getValueViaPath(
+ answers,
+ 'cemeteryEquity.equityAtTheBeginningOfTheYear',
+ )
+ const revaluationDueToPriceChanges = getValueViaPath(
+ answers,
+ 'cemeteryEquity.revaluationDueToPriceChanges',
+ )
+ const reevaluateOther = getValueViaPath(
+ answers,
+ 'cemeteryEquity.reevaluateOther',
+ )
+ const operationResult = getValueViaPath(
+ answers,
+ 'cemeteryEquity.operationResult',
+ )
+ const totalEquity = getValueViaPath(answers, 'cemeteryEquity.total')
+
+ const debtsAndCash = getValueViaPath(
+ answers,
+ 'equityAndLiabilitiesTotals.equityAndLiabilitiesTotal',
+ )
+
+ return {
+ file,
+ fileName,
+ incomeLimit,
+ email,
+ cemeteryCaretakers,
+ careIncome,
+ burialRevenue,
+ grantFromTheCemeteryFund,
+ otherIncome,
+ totalIncome,
+ payroll,
+ funeralCost,
+ chapelExpense,
+ donationsToCemeteryFund,
+ donationsToOther,
+ otherOperationCost,
+ depreciation,
+ totalExpenses,
+ fixedAssetsTotal,
+ currentAssets,
+ totalAssets,
+ longTerm,
+ shortTerm,
+ totalLiabilities,
+ equityAtTheBeginningOfTheYear,
+ revaluationDueToPriceChanges,
+ reevaluateOther,
+ operationResult,
+ totalEquity,
+ debtsAndCash,
+ }
+}
+
+export const getAboutOverviewNumbers = (answers: FormValue) => {
+ const fullName = getValueViaPath(answers, 'about.fullName')
+ const nationalId = formatNationalId(
+ getValueViaPath(answers, 'about.nationalId') ?? '',
+ )
+ const powerOfAttorneyName = getValueViaPath(
+ answers,
+ 'about.powerOfAttorneyName',
+ )
+ const powerOfAttorneyNationalId = formatNationalId(
+ getValueViaPath(answers, 'about.powerOfAttorneyNationalId') ?? '',
+ )
+ const email = getValueViaPath(answers, 'about.email')
+ const phoneNumber = formatPhoneNumber(
+ getValueViaPath(answers, 'about.phoneNumber') ?? '',
+ )
+
+ return {
+ fullName,
+ nationalId,
+ powerOfAttorneyName,
+ powerOfAttorneyNationalId,
+ email,
+ phoneNumber,
+ }
+}
+
+export const getCapitalNumbersOverviewNumbers = (answers: FormValue) => {
+ const capitalIncome = formatCurrency(
+ getValueViaPath(answers, 'capitalNumbers.capitalIncome'),
+ )
+ const capitalCost = formatCurrency(
+ getValueViaPath(answers, 'capitalNumbers.capitalCost'),
+ )
+ const totalCapital = formatCurrency(
+ getValueViaPath(answers, 'capitalNumbers.total'),
+ )
+
+ return {
+ capitalIncome,
+ capitalCost,
+ totalCapital,
+ }
+}
diff --git a/libs/application/templates/inao/financial-statement-cemetery/src/utils/sums.ts b/libs/application/templates/inao/financial-statement-cemetery/src/utils/sums.ts
new file mode 100644
index 000000000000..4b8e6c2e1738
--- /dev/null
+++ b/libs/application/templates/inao/financial-statement-cemetery/src/utils/sums.ts
@@ -0,0 +1,225 @@
+import { FormValue } from '@island.is/application/types'
+import { getValueViaPath } from '@island.is/application/core'
+import {
+ CAPITALNUMBERS,
+ CEMETERYEQUITIESANDLIABILITIESIDS,
+ CEMETERYOPERATIONIDS,
+ EQUITYANDLIABILITIESTOTALS,
+ OPERATINGCOST,
+} from './constants'
+
+export const sumIncome = (answers: FormValue) => {
+ const careIncome =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.careIncome) || '0'
+ const burialRevenue =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.burialRevenue) || '0'
+ const grantFromTheCemeteryFund =
+ getValueViaPath(
+ answers,
+ CEMETERYOPERATIONIDS.grantFromTheCemeteryFund,
+ ) || '0'
+ const otherIncome =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.otherIncome) || '0'
+
+ return `${
+ Number(careIncome) +
+ Number(burialRevenue) +
+ Number(grantFromTheCemeteryFund) +
+ Number(otherIncome)
+ }`
+}
+
+export const sumExpenses = (answers: FormValue) => {
+ const payroll = getValueViaPath(answers, CEMETERYOPERATIONIDS.payroll)
+ const funeralCost =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.funeralCost) || '0'
+ const chapelExpense =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.chapelExpense) || '0'
+ const donationsToCemeteryFund =
+ getValueViaPath(
+ answers,
+ CEMETERYOPERATIONIDS.donationsToCemeteryFund,
+ ) || '0'
+ const donationsToOther =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.donationsToOther) ||
+ '0'
+ const otherOperationCost =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.otherOperationCost) ||
+ '0'
+ const depreciation =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.depreciation) || '0'
+
+ return `${
+ Number(payroll) +
+ Number(funeralCost) +
+ Number(chapelExpense) +
+ Number(donationsToCemeteryFund) +
+ Number(donationsToOther) +
+ Number(otherOperationCost) +
+ Number(depreciation)
+ }`
+}
+
+export const sumOperatingResults = (answers: FormValue) => {
+ const income =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.totalIncome) || '0'
+ const expenses =
+ getValueViaPath(answers, CEMETERYOPERATIONIDS.totalExpense) || '0'
+
+ return `${Number(income) - Number(expenses)}`
+}
+
+export const sumCapitalNumbers = (answers: FormValue) => {
+ const capitalIncome =
+ getValueViaPath(answers, CAPITALNUMBERS.capitalIncome) || '0'
+ const capitalCost =
+ getValueViaPath(answers, CAPITALNUMBERS.capitalCost) || '0'
+ return `${Number(capitalIncome) - Number(capitalCost)}`
+}
+
+export const sumAssets = (answers: FormValue) => {
+ const fixedAssetsTotal =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.fixedAssetsTotal,
+ ) || '0'
+ const currentAssets =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.currentAssets,
+ ) || '0'
+ return `${Number(fixedAssetsTotal) + Number(currentAssets)}`
+}
+
+export const sumLiabilities = (answers: FormValue) => {
+ const longTerm =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.longTerm,
+ ) || '0'
+ const shortTerm =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.shortTerm,
+ ) || '0'
+ return `${Number(longTerm) + Number(shortTerm)}`
+}
+
+export const operationResult = (answers: FormValue) => {
+ const operatingTotalCost =
+ getValueViaPath(answers, OPERATINGCOST.total) || '0'
+ const capitalTotal =
+ getValueViaPath(answers, CAPITALNUMBERS.total) || '0'
+ return `${Number(operatingTotalCost) + Number(capitalTotal)}`
+}
+
+export const sumTotalEquity = (answers: FormValue) => {
+ const equityAtTheBeginningOfTheYear =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.equityAtTheBeginningOfTheYear,
+ ) || '0'
+ const revaluationDueToPriceChanges =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.revaluationDueToPriceChanges,
+ ) || '0'
+ const reevaluateOther =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.reevaluateOther,
+ ) || '0'
+ const operationResult =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.operationResult,
+ ) || '0'
+
+ return `${
+ Number(equityAtTheBeginningOfTheYear) +
+ Number(revaluationDueToPriceChanges) +
+ Number(reevaluateOther) +
+ Number(operationResult)
+ }`
+}
+
+export const sumTotalEquityAndLiabilities = (answers: FormValue) => {
+ const liabilityTotal =
+ getValueViaPath(
+ answers,
+ EQUITYANDLIABILITIESTOTALS.liabilitiesTotal,
+ ) || '0'
+ const totalEquity =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.equityTotal,
+ ) || '0'
+
+ return `${Number(totalEquity) + Number(liabilityTotal)}`
+}
+
+export const showEquitiesAndLiabilitiesAlert = (answers: FormValue) => {
+ const fixedAssetsTotal =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.fixedAssetsTotal,
+ ) || '0'
+ const currentAssets =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.currentAssets,
+ ) || '0'
+ const longTerm =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.longTerm,
+ ) || '0'
+ const shortTerm =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.shortTerm,
+ ) || '0'
+ const equityAtTheBeginningOfTheYear =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.equityAtTheBeginningOfTheYear,
+ ) || '0'
+ const revaluationDueToPriceChanges =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.revaluationDueToPriceChanges,
+ ) || '0'
+ const reevaluateOther =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.reevaluateOther,
+ ) || '0'
+
+ const totalAssets =
+ getValueViaPath(answers, EQUITYANDLIABILITIESTOTALS.assetsTotal) ||
+ '0'
+ const totalEquityAndLiabilities =
+ getValueViaPath(
+ answers,
+ EQUITYANDLIABILITIESTOTALS.equityAndLiabilitiesTotal,
+ ) || '0'
+ const operationResult =
+ getValueViaPath(
+ answers,
+ CEMETERYEQUITIESANDLIABILITIESIDS.operationResult,
+ ) || '0'
+
+ if (
+ !fixedAssetsTotal ||
+ !currentAssets ||
+ !longTerm ||
+ !shortTerm ||
+ !equityAtTheBeginningOfTheYear ||
+ !revaluationDueToPriceChanges ||
+ !reevaluateOther ||
+ !operationResult
+ ) {
+ return false
+ }
+ return totalAssets !== totalEquityAndLiabilities
+}
diff --git a/libs/clients/financial-statements-inao/src/lib/financialStatementsInao.config.ts b/libs/clients/financial-statements-inao/src/lib/financialStatementsInao.config.ts
index 56487d0eccaf..89d8e99c8b8d 100644
--- a/libs/clients/financial-statements-inao/src/lib/financialStatementsInao.config.ts
+++ b/libs/clients/financial-statements-inao/src/lib/financialStatementsInao.config.ts
@@ -1,11 +1,15 @@
import { defineConfig } from '@island.is/nest/config'
+import { isRunningOnEnvironment } from '@island.is/shared/utils'
+const isLocal = isRunningOnEnvironment('local')
export const FinancialStatementsInaoClientConfig = defineConfig({
name: 'DataverseClient',
load: (env) => ({
basePath: env.required(
'FINANCIAL_STATEMENTS_INAO_BASE_PATH',
- 'https://dev-re.crm4.dynamics.com/api/data/v9.1',
+ isLocal
+ ? 'https://dev-re.crm4.dynamics.com/api/data/v9.1'
+ : 'https://star-re.crm4.dynamics.com/api/data/v9.1',
),
issuer: env.required(
'FINANCIAL_STATEMENTS_INAO_ISSUER',
@@ -13,7 +17,9 @@ export const FinancialStatementsInaoClientConfig = defineConfig({
),
scope: env.required(
'FINANCIAL_STATEMENTS_INAO_SCOPE',
- 'https://dev-re.crm4.dynamics.com/.default',
+ isLocal
+ ? 'https://dev-re.crm4.dynamics.com/.default'
+ : 'https://star-re.crm4.dynamics.com/.default',
),
tokenEndpoint: env.required(
'FINANCIAL_STATEMENTS_INAO_TOKEN_ENDPOINT',