From 6a17ebae19c95aaeebf01867f3965b3713725093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Wed, 1 Mar 2023 12:05:29 +0100 Subject: [PATCH] wip - ares data loading --- contracts/admin.py | 25 +++++++++++++++++++++++++ contracts/models.py | 1 + package.json | 3 ++- static_src/admin/signee_form.js | 33 +++++++++++++++++++++++++++++++-- webpack.config.js | 10 ++++++++++ 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/contracts/admin.py b/contracts/admin.py index 010bce2..1e7ecc2 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin +from django.utils.html import format_html from shared.admin import MarkdownxGuardedModelAdmin @@ -156,8 +157,32 @@ class SigneeRepresentativeInline(admin.TabularInline): class SigneeAdmin(MarkdownxGuardedModelAdmin): form = SigneeAdminForm + fields = ( + "name", + "entity_type", + "address_street_with_number", + "address_district", + "address_zip", + "address_country", + "ico_number", + "load_ares_data_button", + "date_of_birth", + "department", + "role", + ) + + readonly_fields = ("load_ares_data_button",) + inlines = (SigneeRepresentativeInline,) + def load_ares_data_button(self, obj): + return format_html( + "<button type=\"button\" id=\"load_ares_data\">Načíst data</button>" + ) + + load_ares_data_button.allow_tags = True + load_ares_data_button.short_description = "ARES" + class ContracteeRepresentativeInline(admin.TabularInline): form = ContractFileAdminForm diff --git a/contracts/models.py b/contracts/models.py index 8d6236e..33601ce 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -73,6 +73,7 @@ class Signee(models.Model): blank=True, null=True, verbose_name="IČO", + help_text="Vyplněním můžeš automaticky načíst data z ARES." ) # WARNING: Legal entity status dependent! date_of_birth = models.DateField( diff --git a/package.json b/package.json index eea8208..4ba021e 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "license": "AGPL-3.0-or-later", "dependencies": { "@tailwindcss/typography": "^0.5.9", + "alertifyjs": "^1.13.1", "css-loader": "^6.7.3", "jquery": "^3.6.3", "style-loader": "^3.3.1", @@ -21,6 +22,6 @@ "vue": "v2-latest", "webpack": "^5.75.0", "webpack-bundle-tracker": "^1.8.0", - "webpack-cli": "^5.0.1" + "webpack-cli": "^5.0.1", } } diff --git a/static_src/admin/signee_form.js b/static_src/admin/signee_form.js index 3776c5d..0b0da41 100644 --- a/static_src/admin/signee_form.js +++ b/static_src/admin/signee_form.js @@ -1,4 +1,7 @@ import $ from "jquery"; +import alertify from "alertifyjs"; + +const xmlParser = require("xml2json"); const fieldDepartmentValues = new Set([ "legal_entity", @@ -19,7 +22,7 @@ $(window).ready( ) ); - $(".field-ico_number"). + $(".field-ico_number,.field-load_ares_data_button"). css( "display", ( @@ -55,7 +58,7 @@ $(window).ready( "block" : "none" ) ); - $(".field-ico_number"). + $(".field-ico_number,.field-load_ares_data_button"). css( "display", ( @@ -78,5 +81,31 @@ $(window).ready( if (!fieldDepartmentValues.has($(event.target).val()) && !isEmpty) $("#id_department").val(""); } ); + + $("#load_ares_data").on( + "click", + async (event) => { + const icoValue = $("#id_ico_number").val(); + + const aresXMLResponse = await fetch( + `https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?ico=${icoValue}` + ); + + if (!aresXMLResponse.ok) { + alertify.error("Chyba při načítní dat z ARES. Je IČO správné?"); + + console.warn( + "Error loading ARES data: ", + await aresXMLResponse.text() + ); + + return; + } + + const formattedAresResponse = xmlParser.toJson(aresXMLResponse); + + console.log(formattedAresResponse); + } + ); } ); diff --git a/webpack.config.js b/webpack.config.js index 36fbd6c..a40806e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -41,4 +41,14 @@ module.exports = { plugins: [ new BundleTracker({filename: './webpack-stats.json'}) ], + resolve: { + fallback: { + "path": require.resolve("path-browserify"), + "crypto": require.resolve("crypto-browserify"), + "assert": require.resolve("assert/"), + "buffer": require.resolve("buffer/"), + "stream": require.resolve("stream-browserify"), + }, + extensions: [".js"], + } }; -- GitLab