From 5ee625728918c916f65b68f9b6ad2df681be468d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <tomas@imaniti.org>
Date: Sun, 25 Feb 2024 13:40:13 +0100
Subject: [PATCH] update for new ARES API

---
 contracts/views.py              |  9 +---
 package-lock.json               | 12 ++---
 static_src/admin/signee_form.js | 82 +++++++++++++++------------------
 3 files changed, 43 insertions(+), 60 deletions(-)

diff --git a/contracts/views.py b/contracts/views.py
index 4c126c5..2941353 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -1,5 +1,4 @@
 import os
-from xml.etree import ElementTree
 
 import requests
 from django.conf import settings
@@ -442,15 +441,9 @@ def get_ares_info(request, ico: int):
         raise HTTPExceptions.FORBIDDEN
 
     ares_info = requests.get(
-        f"https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico={ico}"
+        f"https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/{ico}"
     )
 
-    tree = ElementTree.fromstring(ares_info.content)
-
-    for result_count in tree.iter("are:Pocet_zaznamu"):
-        if result_count.text == "0":
-            raise HTTPExceptions.NOT_FOUND
-
     return HttpResponse(
         content=ares_info.content,
         status=ares_info.status_code,
diff --git a/package-lock.json b/package-lock.json
index 7dc4b76..3977430 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -515,9 +515,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001481",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz",
-      "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==",
+      "version": "1.0.30001589",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
+      "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==",
       "funding": [
         {
           "type": "opencollective",
@@ -2582,9 +2582,9 @@
       "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
     },
     "caniuse-lite": {
-      "version": "1.0.30001481",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz",
-      "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ=="
+      "version": "1.0.30001589",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
+      "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg=="
     },
     "chokidar": {
       "version": "3.5.3",
diff --git a/static_src/admin/signee_form.js b/static_src/admin/signee_form.js
index 473b4c0..f95c2ed 100644
--- a/static_src/admin/signee_form.js
+++ b/static_src/admin/signee_form.js
@@ -93,67 +93,57 @@ $(window).ready(
             async (event) => {
                 const icoValue = $("#id_ico_number").val();
 
-                const rawAresXMLResponse = await fetch(
+                const rawAresJSONResponse = await fetch(
                     `/ares-info-proxy/${icoValue}`
                 );
 
-                if (!rawAresXMLResponse.ok) {
+                if (!rawAresJSONResponse.ok) {
                     alertify.error("Chyba při načítní dat z ARES.");
 
                     console.warn(
                         "Error loading ARES data: ",
-                        await rawAresXMLResponse.text()
+                        await rawAresJSONResponse.text()
                     );
 
                     return;
                 }
 
-                const formattedAresData = new DOMParser().parseFromString(
-                    await rawAresXMLResponse.text(),
-                    "text/xml"
+                const formattedAresData = await rawAresJSONResponse.json();
+
+                let street = (
+                    (formattedAresData["sidlo"]["nazevUlice"] !== undefined) ?
+                    formattedAresData["sidlo"]["nazevUlice"] : ""
+                )
+
+                street += (
+                    (formattedAresData["sidlo"]["cisloDomovni"] !== undefined) ?
+                    (" " + formattedAresData["sidlo"]["cisloDomovni"]) : ""
+                )
+                street += (
+                    (formattedAresData["sidlo"]["cisloOrientacni"] !== undefined) ?
+                    ("/" + formattedAresData["sidlo"]["cisloOrientacni"]) : ""
+                )
+
+                $("#id_name").val(
+                    (formattedAresData["obchodniJmeno"] !== undefined) ?
+                    formattedAresData["obchodniJmeno"] : ""
+                )
+                $("#id_address_street_with_number").val(street);
+                $("#id_address_district").val(
+                    (formattedAresData["sidlo"]["nazevCastiObce"] !== undefined) ?
+                    formattedAresData["sidlo"]["nazevCastiObce"] : ""
+                );
+                $("#id_address_zip").val(
+                    (formattedAresData["sidlo"]["psc"] !== undefined) ?
+                    formattedAresData["sidlo"]["psc"] : ""
                 );
-
-                const errors = formattedAresData.getElementsByTagName("are:Error");
-
-                if (errors.length !== 0) {
-                    alertify.error("Chyba při načítní dat z ARES. Je IČO zadáno správně?");
-
-                    console.warn(
-                        "Error(s) loading ARES data: ",
-                        errors
-                    );
-
-                    return;
-                }
-
-                let streetResult = "";
-
-                const streetElements = formattedAresData.getElementsByTagName("dtt:Nazev_ulice");
-
-                if (streetElements.length !== 0) {
-                    streetResult += streetElements[0].innerHTML;
-                }
-
-                const houseNumberElements = formattedAresData.getElementsByTagName("dtt:Cislo_domovni");
-
-                if (houseNumberElements.length !== 0) {
-                    streetResult += ` ${houseNumberElements[0].innerHTML}`;
-                }
-
-                const orientationNumberElements = formattedAresData.getElementsByTagName("dtt:Cislo_orientacni");
-
-                if (orientationNumberElements.length !== 0) {
-                    streetResult += `/${orientationNumberElements[0].innerHTML}`;
-                }
-
-                $("#id_name").val(formattedAresData.getElementsByTagName("are:Obchodni_firma")[0].innerHTML)
-                $("#id_address_street_with_number").val(streetResult);
-                $("#id_address_district").val(formattedAresData.getElementsByTagName("dtt:Nazev_obce")[0].innerHTML);
-                $("#id_address_zip").val(formattedAresData.getElementsByTagName("dtt:PSC")[0].innerHTML);
                 // IÄŚO numbers will always be in the Czech Republic.
-                $("#id_address_country").val("Česká Republika");
+                $("#id_address_country").val(
+                    (formattedAresData["sidlo"]["nazevStatu"] !== undefined) ?
+                    formattedAresData["sidlo"]["nazevStatu"] : ""
+                );
 
-                console.log(formattedAresData);
+                console.info("Loaded ARES data: ", formattedAresData);
             }
         );
     }
-- 
GitLab