Skip to content

Commit

Permalink
Merge pull request #20 from CommonGateway/feature/PC246-9/proxy-with-…
Browse files Browse the repository at this point in the history
…mapping

Improved performance by removing / disabling sync code
  • Loading branch information
WilcoLouwerse authored Nov 25, 2024
2 parents ea4cde1 + c4aabab commit c6f82f3
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 57 deletions.
30 changes: 15 additions & 15 deletions Installation/Mapping/simxml.get.aanslag.aanslagregel.mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,30 @@
"title": "GetAanslagAanslagregel",
"$id": "https://dowr.simxml.nl/mapping/simxml.get.aanslag.aanslagregel.mapping.json",
"$schema": "https://docs.commongateway.nl/schemas/Mapping.schema.json",
"version": "0.0.5",
"version": "0.0.6",
"passTrough": false,
"mapping": {
"@soortEntiteit": "R",
"ASL.@soortEntiteit": "F",
"ASL.belastingJaar": "{{ value.belastingJaar }}",
"ASL.ingangsDatumAanslagRegel": "{{ value.ingangsdatum|date(\"Ymd\") }}",
"ASL.afmeldDatumAanslagRegel": "{{ value.einddatum|date(\"Ymd\") }}",
"ASL.bedragAanslagRegel": "{{ value.bedrag|replace({',' : '.'}) }}",
"ASL.belastingJaar": "{{ belastingJaar }}",
"ASL.ingangsDatumAanslagRegel": "{{ ingangsdatum|date(\"Ymd\") }}",
"ASL.afmeldDatumAanslagRegel": "{{ einddatum|date(\"Ymd\") }}",
"ASL.bedragAanslagRegel": "{{ bedrag|replace({',' : '.'}) }}",
"ASL.btwBedragAanslagRegel": "0.00",
"ASL.bedragAanslagRegelExclusiefBtw": "{{ value.bedrag|replace({',' : '.'}) }}",
"ASL.codeBelastingSoort": "{{ value.codeBelastingsoort }}",
"ASL.omschrijvingBelastingSoort": "{{ value.omschrijvingBelastingsoort }}",
"ASL.tariefSoort": "{{ value.codeBelastingtype }}",
"ASL.omschrijvingTariefSoort": "{{ value.omschrijvingBelastingtype }}",
"ASL.bedragAanslagRegelExclusiefBtw": "{{ bedrag|replace({',' : '.'}) }}",
"ASL.codeBelastingSoort": "{{ codeBelastingsoort }}",
"ASL.omschrijvingBelastingSoort": "{{ omschrijvingBelastingsoort }}",
"ASL.tariefSoort": "{{ codeBelastingtype }}",
"ASL.omschrijvingTariefSoort": "{{ omschrijvingBelastingtype }}",
"ASL.omschrijvingBelastingObject.@xsi:nil": "true",
"ASL.omschrijvingBelastingObject.@StUF:noValue": "geenWaarde",
"ASL.grondslag": "{{ value.heffingsgrondslag }}",
"ASL.grondslag": "{{ heffingsgrondslag }}",
"ASL.omschrijvingGrondslag.@xsi:nil": "true",
"ASL.omschrijvingGrondslag.@StUF:noValue": "geenWaarde",
"ASL.WOZObjectNummer": "{{ value.wozObjectnummer }}",
"ASL.indicatieBezwaar": "{% if value.bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"ASL.belastingplichtnummer": "{{ value.belastingplichtnummer }}",
"ASL.ASLADR": "{% if value.embedded.adres is defined and value.embedded.adres is not empty %}{% set aanslagregelAdressen = [] %}{% set aanslagregelAdressen = aanslagregelAdressen|merge(value.embedded.adres) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", aanslagregelAdressen, true)|json_encode }}{% else %}\"\"{% endif %}"
"ASL.WOZObjectNummer": "{{ wozObjectnummer }}",
"ASL.indicatieBezwaar": "{% if bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"ASL.belastingplichtnummer": "{{ belastingplichtnummer }}",
"ASL.ASLADR": "{% if adres is defined and adres is not empty %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", adres, true)|json_encode }}{% else %}\"\"{% endif %}"
},
"cast": {
"ASL.ASLADR": ["jsonToArray", "unsetIfValue=="]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"title": "GetAanslagBeschikkingsregel",
"$id": "https://dowr.simxml.nl/mapping/simxml.get.aanslag.beschikkingsregel.mapping.json",
"$schema": "https://docs.commongateway.nl/schemas/Mapping.schema.json",
"version": "0.0.3",
"version": "0.0.4",
"passTrough": false,
"mapping": {
"@soortEntiteit": "R",
Expand All @@ -12,21 +12,21 @@
"BSK.beginDatumWOZTijdVak": "{{ aanslag.belastingJaar ~ '0101' }}",
"BSK.eindDatumWOZTijdVak": "{% set belastingjaar = aanslag.belastingJaar ~ '-01-01' %}{{ belastingjaar|date_modify(\"+1 year\")|date(\"Ymd\") }}",
"BSK.waardePeilJaar": "{% set belastingjaar = aanslag.belastingJaar ~ '-01-01' %}{{ belastingjaar|date_modify(\"-1 year\")|date(\"Y\") }}",
"BSK.indicatieBezwaar": "{% if value.bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"BSK.indicatieBezwaar": "{% if bezwaarMogelijk == true %}J{% else %}N{% endif %}",
"BSK.extraElementen.StUF:extraElement.0.@naam": "beschikkingSleutel",
"BSK.extraElementen.StUF:extraElement.0.#": "{{ value.sleutelBeschikkingsregel }}",
"BSK.extraElementen.StUF:extraElement.0.#": "{{ sleutelBeschikkingsregel }}",
"BSK.BSKWRD.@soortEntiteit": "R",
"BSK.BSKWRD.WRD.@soortEntiteit": "F",
"BSK.BSKWRD.WRD.heffingsmaatstafOZB": "{{ value.vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.heffingsmaatstafOZB": "{{ vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.heffingsmaatstafOZBGebruikers": "0",
"BSK.BSKWRD.WRD.vastgesteldeWaarde": "{{ value.vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.vastgesteldeWaarde": "{{ vastgesteldeWaarde }}",
"BSK.BSKWRD.WRD.waardePeilDatum": "{% set belastingjaar = aanslag.belastingJaar ~ '-01-01' %}{{ belastingjaar|date_modify(\"-1 year\")|date(\"Ymd\") }}",
"BSK.BSKWRD.WRD.WRDWOZ.@soortEntiteit": "R",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.@soortEntiteit": "F",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZObjectNummer": "{{ value.wozObjectnummer }}",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZObjectNummer": "{{ wozObjectnummer }}",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.omschrijvingWOZObject.@xsi:nil": "true",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.omschrijvingWOZObject.@StUF:noValue": "geenWaarde",
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZADRHFD": "{% if value.embedded.adres is defined and value.embedded.adres is not empty %}{% set beschikkingsregelAdres = [] %}{% set beschikkingsregelAdres = beschikkingsregelAdres|merge(value.embedded.adres) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", beschikkingsregelAdres)|json_encode }}{% else %}\"\"{% endif %}"
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZADRHFD": "{% if adres is defined and adres is not empty %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.adres.mapping.json\", adres)|json_encode }}{% else %}\"\"{% endif %}"
},
"cast": {
"BSK.BSKWRD.WRD.WRDWOZ.WOZ.WOZADRHFD": ["jsonToArray", "unsetIfValue=="]
Expand Down
8 changes: 4 additions & 4 deletions Installation/Mapping/simxml.get.aanslagen.result.mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"title": "GetAanslagenResult",
"$id": "https://dowr.simxml.nl/mapping/simxml.get.aanslagen.result.mapping.json",
"$schema": "https://docs.commongateway.nl/schemas/Mapping.schema.json",
"version": "0.0.7",
"version": "0.0.8",
"passTrough": false,
"mapping": {
"@soortEntiteit": "F",
Expand Down Expand Up @@ -40,9 +40,9 @@
"BLJARD.0.ARD.keuzeOmschrijvingRedenBezwaar": "Placeholder, to do, make showing bezwaren abstract",
"BLJPRS.@soortEntiteit": "R",
"BLJPRS.PRS.@soortEntiteit": "F",
"BLJPRS.PRS.bsn-nummer": "{{ value.embedded.belastingplichtige.burgerservicenummer }}",
"BLJASL": "{% if value.embedded.aanslagregels is defined %}{% set aanslagregels = [] %}{% set aanslagregels = aanslagregels|merge(value.embedded.aanslagregels) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.aanslagregel.mapping.json\", aanslagregels, true)|json_encode }}{% else %}\"\"{% endif %}",
"BLJBSK": "{% if value.embedded.beschikkingsregels is defined %}{% set beschikkingsregels = [] %}{% set beschikkingsregels = beschikkingsregels|merge(value.embedded.beschikkingsregels) %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.beschikkingsregel.mapping.json\", {'listInput': beschikkingsregels, 'aanslag': value}, true)|json_encode }}{% else %}\"\"{% endif %}"
"BLJPRS.PRS.bsn-nummer": "{{ value.belastingplichtige.burgerservicenummer }}",
"BLJASL": "{% if value.aanslagregels is defined %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.aanslagregel.mapping.json\", value.aanslagregels, true)|json_encode }}{% else %}\"\"{% endif %}",
"BLJBSK": "{% if value.beschikkingsregels is defined %}{{ map(\"https://dowr.simxml.nl/mapping/simxml.get.aanslag.beschikkingsregel.mapping.json\", {'listInput': value.beschikkingsregels, 'aanslag': value}, true)|json_encode }}{% else %}\"\"{% endif %}"
},
"cast": {
"BLJASL": ["jsonToArray", "unsetIfValue=="],
Expand Down
113 changes: 82 additions & 31 deletions src/Service/SimTaxService.php
Original file line number Diff line number Diff line change
Expand Up @@ -217,27 +217,34 @@ public function getAanslagen(array $vraagBericht): Response

$filter = $this->getAanslagenFilter($vraagBericht);

if (isset($filter['embedded.belastingplichtige.burgerservicenummer']) === false) {
return $this->createResponse(['Error' => "No bsn given."], 501);
// Old gateway filter
// if (isset($filter['embedded.belastingplichtige.burgerservicenummer']) === false) {
if (isset($filter['bsn']) === false) {
return $this->createResponse(['Error' => "No bsn given."], 400);
}

// Sync aanslagen from openbelasting api with given bsn.
$this->syncAanslagenService->fetchAndSyncAanslagen($filter['embedded.belastingplichtige.burgerservicenummer']);

// Sync aanslagen from openbelasting api with given bsn. (The old way didn't use the return value of this function)
$aanslagen['results'] = $this->syncAanslagenService->fetchAndSyncAanslagen($filter['bsn'], $filter['belastingjaar-vanaf']);

Check warning on line 227 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Avoid using undefined variables such as '$aanslagen' which will lead to PHP notices.

Check warning on line 227 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Line exceeds 125 characters; contains 131 characters
// Old filter
// $this->syncAanslagenService->fetchAndSyncAanslagen($filter['embedded.belastingplichtige.burgerservicenummer']);
// Make sure we order correctly
$filter['_order']['belastingJaar'] = 'desc';

// Old gateway filter
// $filter['_order']['belastingJaar'] = 'desc';
// Old way of getting aanslagen from the gateway itself
// Then fetch synced aanslagen through cacheService.
$aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);

// $aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);
// TODO: this is a temporary workaround at the request of SIM

Check warning on line 236 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Comment refers to a TODO task "this is a temporary workaround at the request of SIM"
// This will set the Aanslag "bezwaarMogelijk" to false if one of it's "aanslagregels" has "bezwaarMogelijk" set to false.

Check warning on line 237 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Line exceeds 125 characters; contains 130 characters
foreach ($aanslagen['results'] as $aanslag) {

Check warning on line 238 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Avoid using undefined variables such as '$aanslagen' which will lead to PHP notices.
if (isset($aanslag['embedded']['aanslagregels']) === false) {
// Old gateway/not proxy version with embedded
// if (isset($aanslag['embedded']['aanslagregels']) === false) {
if (isset($aanslag['aanslagregels']) === false) {
continue;
}

foreach ($aanslag['embedded']['aanslagregels'] as $aanslagregel) {
// Old gateway/not proxy version with embedded
// foreach ($aanslag['embedded']['aanslagregels'] as $aanslagregel) {
foreach ($aanslag['aanslagregels'] as $aanslagregel) {
if ($aanslagregel['bezwaarMogelijk'] == false) {
$aanslag['bezwaarMogelijk'] = false;
break;
Expand All @@ -264,6 +271,16 @@ public function getAanslagen(array $vraagBericht): Response
private function getAanslagenFilter(array $vraagBericht): array

Check warning on line 271 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

The method getAanslagenFilter() has a Cyclomatic Complexity of 11. The configured cyclomatic complexity threshold is 10.
{
$minYear = $maxYear = null;

Check warning on line 273 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Avoid unused local variables such as '$maxYear'.

// Make sure ['ns2:body']['ns2:BLJ'] is always an array of items
if (isset($vraagBericht['ns2:body']['ns2:BLJ'][1]) === false) {
$BLJ = $vraagBericht['ns2:body']['ns2:BLJ'];
unset($vraagBericht['ns2:body']['ns2:BLJ']);

$vraagBericht['ns2:body']['ns2:BLJ'][] = $BLJ;
$vraagBericht['ns2:body']['ns2:BLJ'][] = [];
}

foreach ($vraagBericht['ns2:body']['ns2:BLJ'] as $key => $blj) {
if (isset($blj['ns2:BLJPRS']['ns2:PRS']['ns2:bsn-nummer']) === false) {
continue;
Expand All @@ -282,30 +299,37 @@ private function getAanslagenFilter(array $vraagBericht): array
$minYear = $blj['ns2:extraElementen']['ns1:extraElement']['#'];
}

// Old gateway filter
// Last key should be the max year
if ($key === array_key_last($vraagBericht['ns2:body']['ns2:BLJ'])) {
$maxYear = $blj['ns2:extraElementen']['ns1:extraElement']['#'];
}
// if ($key === array_key_last($vraagBericht['ns2:body']['ns2:BLJ'])) {
// $maxYear = $blj['ns2:extraElementen']['ns1:extraElement']['#'];
// }
}
}//end foreach

if (isset($minYear) === true) {
$filter = $this->getMinMaxYearFilter($vraagBericht, $minYear, $maxYear);
$filter['belastingjaar-vanaf'] = $minYear;
// Old gateway filter
// $filter = $this->getMinMaxYearFilter($vraagBericht, $minYear, $maxYear);
} else {
$this->logger->warning('Could not find a minimal year for bsn: '.($bsn ?? '').' Using current & last year instead for getting Aanslagen');
// Old warning log
// $this->logger->warning('Could not find a minimal year for bsn: '.($bsn ?? '').' Using current & last year instead for getting Aanslagen');
$filter = [];
}

// Old gateway filter, for now default value will be set in the OpenBelastingBundle
// If we have no (min/max) belastingJaar filter in the request use this year and the last year for filtering instead.
if (isset($filter['belastingJaar']) === false) {
$dateTime = new DateTime();
$filter['belastingJaar'][] = $dateTime->format('Y');
$dateTime->add(DateInterval::createFromDateString('-1 year'));
$filter['belastingJaar'][] = $dateTime->format('Y');
}

// if (isset($filter['belastingJaar']) === false) {
// $dateTime = new DateTime();
// $filter['belastingJaar'][] = $dateTime->format('Y');
// $dateTime->add(DateInterval::createFromDateString('-1 year'));
// $filter['belastingJaar'][] = $dateTime->format('Y');
// }
if (isset($bsn)) {
$filter['embedded.belastingplichtige.burgerservicenummer'] = $bsn;
$filter['bsn'] = $bsn;

// Old gateway filter
// $filter['embedded.belastingplichtige.burgerservicenummer'] = $bsn;
}

return $filter;
Expand Down Expand Up @@ -360,21 +384,48 @@ public function getAanslag(array $vraagBericht): Response
return $this->createResponse(['Error' => "No mapping found for {$this::MAPPING_REFS['GetAanslag']}."], 501);
}

$filter = [];
if (isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer']) === true) {
$filter['aanslagbiljetnummer'] = $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer'];
// (new) Get correct filters for getting all aanslagen
$filter = $this->getAanslagenFilter($vraagBericht);

// Old gateway filter
// if (isset($filter['embedded.belastingplichtige.burgerservicenummer']) === false) {
if (isset($filter['bsn']) === false) {
// (new) We need to check if filter contains bsn
return $this->createResponse(['Error' => "No bsn given."], 400);
}

// (new) get all aanslagen from source instead of syncing
$aanslagenFromSource = $this->syncAanslagenService->fetchAndSyncAanslagen($filter['bsn'], $filter['belastingjaar-vanaf']);

Check warning on line 398 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Line exceeds 125 characters; contains 130 characters

// $filter = [];
if (isset($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetNummer']) === true || isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer']) === true) {
$filter['aanslagbiljetnummer'] = ($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetNummer'] ?? $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetNummer']);
}

if (isset($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetVolgNummer']) === true || isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer']) === true) {
$filter['aanslagbiljetvolgnummer'] = ($vraagBericht['ns2:body']['ns2:OPO']['ns2:aanslagBiljetVolgNummer'] ?? $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer']);
}

if (isset($vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer']) === true) {
$filter['aanslagbiljetvolgnummer'] = $vraagBericht['ns2:body']['ns2:OPO'][0]['ns2:aanslagBiljetVolgNummer'];
// Old way of finding a single Aanslag object in the gateway
// $aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);
// (new) way of finding a single Aanslag object with aanslagbiljetnummer & aanslagbiljetvolgnummer filters
$aanslagen['count'] = 0;
foreach ($aanslagenFromSource as $aanslag) {
if (isset($filter['aanslagbiljetnummer']) === true
&& $filter['aanslagbiljetnummer'] === $aanslag['aanslagbiljetnummer']
&& isset($filter['aanslagbiljetvolgnummer']) === true
&& $filter['aanslagbiljetvolgnummer'] === $aanslag['aanslagbiljetvolgnummer']
) {
$aanslagen['results'][] = $aanslag;
$aanslagen['count'] = ($aanslagen['count'] + 1);
}
}

$aanslagen = $this->cacheService->searchObjects(null, $filter, [$this::SCHEMA_REFS['Aanslagbiljet']]);
if ($aanslagen['count'] > 1) {
$this->logger->warning('Found more than 1 aanslag with these filters: ', $filter);
return $this->createResponse(['Error' => 'Found more than 1 aanslag with these filters', 'Filters' => $filter], 500);

Check warning on line 426 in src/Service/SimTaxService.php

View workflow job for this annotation

GitHub Actions / build

Line exceeds 125 characters; contains 129 characters
} else if ($aanslagen['count'] === 1) {
$aanslagen['result'] = $aanslagen['results'][0];
$aanslagen['result'] = ($aanslagen['results'][0] ?? $aanslagen['results']);
}

$aanslagen['vraagbericht'] = $vraagBericht;
Expand Down

0 comments on commit c6f82f3

Please sign in to comment.