Skip to content
Snippets Groups Projects
Commit f188eeaa authored by Emmanuel Raviart's avatar Emmanuel Raviart
Browse files

Show parameter page even when its a bill-only parameter

parent d56636ca
No related branches found
No related tags found
No related merge requests found
......@@ -25,13 +25,17 @@
import { type SelfTargetAProps, newSimulationUrl } from "$lib/urls"
interface Props {
billParameter: Parameter
date: string
parameter: Parameter
parameter?: Parameter
}
const { openfiscaRepository } = publicConfig
let { date, parameter }: Props = $props()
// Note: A reform parameters tree is always more complete than a parameters tree before reform.
// And the children of a reform node parameter always contain the children of the node parameter
// before reform (albeit with some different value parameters).
let { billParameter, date, parameter }: Props = $props()
const dateFormatter = new Intl.DateTimeFormat("fr-FR", { dateStyle: "full" })
.format
......@@ -39,10 +43,10 @@
url: string,
) => SelfTargetAProps
let lastReviewOrChange = $derived(parameterLastReviewOrChange(parameter))
let lastReviewOrChange = $derived(parameterLastReviewOrChange(billParameter))
let parameterRepositoryUrl = $derived(
newParameterRepositoryUrl(metadata, parameter),
newParameterRepositoryUrl(metadata, billParameter),
)
</script>
......@@ -66,12 +70,14 @@
<div class="mb-4 border-l-2 border-black pl-4">
<p class="font-serif text-3xl font-bold">
{parameter.title}
{billParameter.title}
</p>
<span class="font-serif text-sm italic">{parameter.description}</span>
<span class="font-serif text-sm italic"
>{billParameter.description}</span
>
<div class="mt-7 w-3/5 rounded border p-2">
<h2 class="text-base">Parents du paramètre&nbsp;:</h2>
{#each [...iterParameterAncestors(parameter.parent)] as ancestor}
{#each [...iterParameterAncestors(billParameter.parent)] as ancestor}
<p class="inline font-serif text-sm">
<!-- svelte-ignore a11y_missing_attribute -->
<a
......@@ -82,11 +88,11 @@
&nbsp;&gt;&nbsp;
</p>
{/each}
<span class="text-sm"> {parameter.title}</span>
<span class="text-sm"> {billParameter.title}</span>
</div>
</div>
{#if parameter.class !== ParameterClass.Node}
{#if billParameter.class !== ParameterClass.Node}
<div class="inline-flex items-center">
{#if lastReviewOrChange === undefined || lastReviewOrChange < (new Date().getFullYear() - 2).toString()}
<iconify-icon
......@@ -104,7 +110,7 @@
></iconify-icon>
{/if}
<p class="text-sm text-black">
{#if lastReviewOrChange !== undefined}Ce paramètre a été {#if parameter.last_value_still_valid_on === lastReviewOrChange}
{#if lastReviewOrChange !== undefined}Ce paramètre a été {#if billParameter.last_value_still_valid_on === lastReviewOrChange}
vérifié
{:else}
mis à jour
......@@ -116,6 +122,7 @@
{:else}
Ce paramètre n'a pas de date de relecture connue.
{/if}
{#if parameter !== undefined}
<a
class="lx-link-text text-sm text-gray-700"
......@@ -123,11 +130,12 @@
>
Proposer une modification
</a>
{/if}
</p>
</div>
{/if}
{#if parameter.file_path !== undefined}
{#if parameter !== undefined && parameter.file_path !== undefined}
<div class="mt-4 flex">
<a
class="mx-4 mb-3 flex h-8 grow-0 items-center rounded-md bg-gray-300 px-2 py-1 text-sm uppercase text-black shadow-md hover:bg-le-bleu hover:text-white focus:outline-none md:mx-0"
......@@ -144,10 +152,10 @@
</div>
{/if}
{#if parameter.class === ParameterClass.Node}
{#if parameter.children !== undefined}
{#if billParameter.class === ParameterClass.Node}
{#if billParameter.children !== undefined}
<ul class="ml-4">
{#each Object.entries(parameter.children) as [childId, child]}
{#each Object.entries(billParameter.children) as [childId, child]}
<li class="my-2">
<!-- svelte-ignore a11y_missing_attribute -->
<a
......@@ -160,9 +168,9 @@
{/each}
</ul>
{/if}
{:else if parameter.class === ParameterClass.Scale}
<ScaleView {parameter} />
{:else if parameter.class === ParameterClass.Value}
{:else if billParameter.class === ParameterClass.Scale}
<ScaleView {billParameter} />
{:else if billParameter.class === ParameterClass.Value}
<!--Tableau des valeurs-->
<div class="pb-5">
<h2 class="pb-3 pt-7 text-xl font-bold">
......@@ -199,7 +207,7 @@
</tr>
</thead>
<tbody>
{#each buildInstantReferencesAndValueArray(parameter) as { instant, references, valueAtInstant }}
{#each buildInstantReferencesAndValueArray(billParameter) as { instant, references, valueAtInstant }}
<tr>
<td class="border p-1 text-center font-serif">{instant}</td>
{#if valueAtInstant === undefined}
......@@ -212,14 +220,15 @@
{:else}
<!-- TODO: Handle when valueAtInstant.value is a string array or a string by string dict. -->
<td class="border p-1 text-center font-serif"
>{getUnitByName(valueAtInstant.unit ?? parameter.unit)
?.ratio && typeof valueAtInstant.value === "number"
>{getUnitByName(
valueAtInstant.unit ?? billParameter.unit,
)?.ratio && typeof valueAtInstant.value === "number"
? parseFloat((valueAtInstant.value * 100).toFixed(8)) // trick to round value * 100
: (valueAtInstant.value ?? "")}</td
>
<td class="border p-1 text-center"
>{getUnitShortLabel(
valueAtInstant.unit ?? parameter.unit,
valueAtInstant.unit ?? billParameter.unit,
instant,
)}</td
>
......@@ -255,72 +264,75 @@
<h2 class="mt-7 pb-3 text-xl font-bold">Caractéristiques&nbsp;:</h2>
<div class="">
{#if parameter.class === ParameterClass.Node}
{#if parameter.unit !== undefined}
{#if billParameter.class === ParameterClass.Node}
{#if billParameter.unit !== undefined}
<div class="font-base my-1 flex border-b py-1">
<p class="mr-1">
Unité du paramètre&nbsp;:: <span class="font-bold">
{getUnitShortLabel(parameter.unit, date)}</span
{getUnitShortLabel(billParameter.unit, date)}</span
>
</p>
</div>
{/if}
{:else if parameter.class === ParameterClass.Scale}
{:else if billParameter.class === ParameterClass.Scale}
<div>
<p class="font-base my-1 mr-1 flex py-1">
Barème&nbsp;:&nbsp;<span class="font-bold">
{labelFromScaleType(parameter.type)}</span
{labelFromScaleType(billParameter.type)}</span
>
</p>
{#if parameter.threshold_unit !== undefined}
{#if billParameter.threshold_unit !== undefined}
<p class="font-base my-1 mr-1 flex py-1">
Unité de seuil&nbsp;:&nbsp;<span class="font-bold">
{getUnitShortLabel(parameter.threshold_unit, date)}</span
{getUnitShortLabel(
billParameter.threshold_unit,
date,
)}</span
>
</p>
{/if}
{#if isAmountScaleParameter(parameter)}
{#if asAmountScaleParameter(parameter).amount_unit !== undefined}
{#if isAmountScaleParameter(billParameter)}
{#if asAmountScaleParameter(billParameter).amount_unit !== undefined}
<p class="font-base my-1 mr-1 flex py-1">
Unité de montant&nbsp;:&nbsp; <span class="font-bold">
{getUnitShortLabel(
asAmountScaleParameter(parameter).amount_unit,
asAmountScaleParameter(billParameter).amount_unit,
date,
)}</span
>
</p>
{/if}
{:else if asRateScaleParameter(parameter).rate_unit !== undefined}
{:else if asRateScaleParameter(billParameter).rate_unit !== undefined}
<p class="font-base my-1 mr-1 flex py-1">
Unité de taux&nbsp;:&nbsp;<span class="font-bold">
{getUnitShortLabel(
asRateScaleParameter(parameter).rate_unit,
asRateScaleParameter(billParameter).rate_unit,
date,
)}</span
>
</p>
{/if}
</div>
{:else if parameter.class === ParameterClass.Value}
{:else if billParameter.class === ParameterClass.Value}
<p class="font-base my-1 mr-1 flex py-1">
Valeur de type&nbsp;:&nbsp;<span class="font-bold"
>{labelFromValueType(parameter.type)}</span
>{labelFromValueType(billParameter.type)}</span
>
</p>
{#if parameter.unit !== undefined}
{#if billParameter.unit !== undefined}
<div class="font-base my-1 flex py-1">
<p class="mr-1">
Unité de la valeur&nbsp;:&nbsp;<span class="font-bold"
>{getUnitShortLabel(parameter.unit, date)}</span
>{getUnitShortLabel(billParameter.unit, date)}</span
>
</p>
</div>
{/if}
{/if}
{#if parameter.documentation !== undefined}
{#if billParameter.documentation !== undefined}
<p class="mr-1">
Commentaire&nbsp;:&nbsp;<span class="italic"
>{parameter.documentation}</span
>{billParameter.documentation}</span
>
</p>
{/if}
......@@ -350,14 +362,14 @@
{/if}
</div>
{#if parameter.referring_variables !== undefined}
{#if billParameter.referring_variables !== undefined}
<!--Informations connexes-->
<section class="mt-7">
<h2 class="pb-3 pt-7 text-xl font-bold">
Formules de calcul où le paramètre apparaît :
</h2>
<ul class="list-inside list-disc">
{#each parameter.referring_variables as variableName}
{#each billParameter.referring_variables as variableName}
<li>
<!-- svelte-ignore a11y_missing_attribute -->
<a
......@@ -370,7 +382,7 @@
</ul>
</section>
{/if}
{#if parameter.file_path !== undefined}
{#if parameter !== undefined && parameter.file_path !== undefined}
<div class="my-4 flex justify-end">
<a
class="inline-block shrink-0 rounded bg-le-bleu px-4 py-2 text-center text-sm uppercase text-white shadow-md hover:bg-blue-900"
......
......@@ -15,13 +15,13 @@
const { appTitle } = publicConfig
let { data }: Props = $props()
let { parameter } = $derived(data)
let { billParameter, parameter } = $derived(data)
setContext("newSelfTargetAProps", newSelfTargetAProps)
</script>
<svelte:head>
<title>{parameter.name} | Paramètres | {appTitle}</title>
<title>{billParameter.name} | Paramètres | {appTitle}</title>
</svelte:head>
<ParameterView {date} {parameter} />
<ParameterView {date} {billParameter} {parameter} />
import { error } from "@sveltejs/kit"
import type { PageLoad } from "./$types"
import { billName } from "$lib/shared.svelte"
import {
getParameter,
rootParameter,
rootParameterByReformName,
} from "$lib/parameters"
import { getParameter, rootParameter } from "$lib/parameters"
import type { PageLoad } from "./$types"
export const load: PageLoad = function ({ params }) {
const { parameter: name } = params
const parameter = getParameter(rootParameter, name)
if (parameter === undefined) {
// Note: A reform parameters tree is always more complete than a parameters tree before reform.
// And the children of a reform node parameter always contain the children of the node parameter
// before reform (albeit with some different value parameters).
const billRootParameter =
billName === undefined
? rootParameter
: (rootParameterByReformName[billName] ?? rootParameter)
const billParameter = getParameter(billRootParameter, name)
if (billParameter === undefined) {
error(404, `Parameter "${name}" not found`)
}
const parameter = getParameter(rootParameter, name)
return {
billParameter,
parameter,
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment