From 8eb32904cac5d2dcde624a90114d8cc1cb4fa639 Mon Sep 17 00:00:00 2001 From: Rasmus Selsmark Date: Sun, 27 Oct 2024 14:12:24 +0100 Subject: [PATCH 1/2] Created Municipalities table with data importer --- members/admin/__init__.py | 3 + members/admin/municipality_admin.py | 4 + .../commands/import_municipalities.py | 38 +++++++ .../management/commands/municipalities.csv | 98 +++++++++++++++++++ members/migrations/0057_municipality.py | 40 ++++++++ members/models/__init__.py | 3 + members/models/municipality.py | 16 +++ 7 files changed, 202 insertions(+) create mode 100644 members/admin/municipality_admin.py create mode 100644 members/management/commands/import_municipalities.py create mode 100644 members/management/commands/municipalities.csv create mode 100644 members/migrations/0057_municipality.py create mode 100644 members/models/municipality.py diff --git a/members/admin/__init__.py b/members/admin/__init__.py index 3fe93b96..33a3ca57 100644 --- a/members/admin/__init__.py +++ b/members/admin/__init__.py @@ -11,6 +11,7 @@ EmailTemplate, Equipment, Family, + Municipality, Payment, Person, Union, @@ -25,6 +26,7 @@ from .department_admin import DepartmentAdmin from .equipment_admin import EquipmentAdmin from .family_admin import FamilyAdmin +from .municipality_admin import MunicipalityAdmin from .payment_admin import PaymentAdmin from .person_admin import PersonAdmin from .union_admin import UnionAdmin @@ -43,6 +45,7 @@ admin.site.register(EmailTemplate) admin.site.register(Equipment, EquipmentAdmin) admin.site.register(Family, FamilyAdmin) +admin.site.register(Municipality, MunicipalityAdmin) admin.site.register(Payment, PaymentAdmin) admin.site.register(Person, PersonAdmin) admin.site.register(Union, UnionAdmin) diff --git a/members/admin/municipality_admin.py b/members/admin/municipality_admin.py new file mode 100644 index 00000000..f27f1226 --- /dev/null +++ b/members/admin/municipality_admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin + +class MunicipalityAdmin(admin.ModelAdmin): + list_display = ('municipality', 'address', 'zipcode', 'city', 'email') diff --git a/members/management/commands/import_municipalities.py b/members/management/commands/import_municipalities.py new file mode 100644 index 00000000..d91f0ad6 --- /dev/null +++ b/members/management/commands/import_municipalities.py @@ -0,0 +1,38 @@ +import csv +from django.core.management.base import BaseCommand +from members.models import Municipality + +# run locally: +# docker compose run web ./manage.py import_municipalities members/management/commands/municipalities.csv + +class Command(BaseCommand): + help = 'Import municipalities data from a CSV file into the Municipality model' + + def add_arguments(self, parser): + parser.add_argument( + 'csv_file', + type=str, + help='Path to the CSV file containing municipalities data' + ) + + def handle(self, *args, **kwargs): + csv_file_path = kwargs['csv_file'] + + try: + with open(csv_file_path, mode='r', encoding='utf-8') as file: + reader = csv.reader(file, delimiter=';') + for row in reader: + municipality, address, zipcode, city, email = row + Municipality.objects.create( + municipality=municipality, + address=address, + zipcode=zipcode, + city=city, + email=email + ) + self.stdout.write(f"Added municipality: {municipality}") + + self.stdout.write(self.style.SUCCESS('Successfully imported all municipalities')) + + except FileNotFoundError: + self.stdout.write(self.style.ERROR(f"File {csv_file_path} not found. Please check the file path.")) diff --git a/members/management/commands/municipalities.csv b/members/management/commands/municipalities.csv new file mode 100644 index 00000000..8c1f3389 --- /dev/null +++ b/members/management/commands/municipalities.csv @@ -0,0 +1,98 @@ +Albertslund Kommune;Nordmarks Allé;2620;Albertslund;albertslund@albertslund.dk +Allerød Kommune;Bjarkesvej;3450;Allerød;kommunen@alleroed.dk +Assens Kommune;Rådhus Allé 5;5610;Assens;assens@assens.dk +Ballerup Kommune;Hold-an Vej 7;2750;Ballerup;borger@balk.dk +Billund Kommune;Jorden Rundt 1;7200;Grindsted;kommunen@billund.dk +Bornholms Regionskommune;Ullasvej 23;3700;Rønne;post@brk.dk +Brøndby Kommune;Park Allé 160;2605;Brøndby;brondby@brondby.dk +Brønderslev Kommune;Ny Rådhusplads 1;9700;Brønderslev;raadhus@99454545.dk +Dragør Kommune;Kirkevej 7;2791;Dragør;dragoer@dragoer.dk +Egedal Kommune;Dronning Dagmars Vej 200;3660;Stenløse;kommune@egekom.dk +Esbjerg Kommune;Torvegade 74;6700;Esbjerg;raadhuset@esbjergkommune.dk +Fanø Kommune;Skolevej 5-7;6720;Fanø;raadhuset@fanoe.dk +Favrskov Kommune;Skovvej 20;8382;Hinnerup;favrskov@favrskov.dk +Faxe Kommune;Frederiksgade 9;4690;Haslev;kommunen@faxekommune.dk +Fredensborg Kommune;Egevangen 3 B;2980;Kokkedal;fredensborg@fredensborg.dk +Fredericia Kommune;Gothersgade 20;7000;Fredericia;kommunen@fredericia.dk +Frederiksberg Kommune;Smallegade 1;2000;Frederiksberg;raadhuset@frederiksberg.dk +Frederikshavn Kommune;Rådhus Allé 100;9900;Frederikshavn;post@frederikshavn.dk +Frederikssund Kommune;Torvet 2;3600;Frederikssund;epost@frederikssund.dk +Furesø Kommune;Rådhustorvet 2;3520;Farum;furesoe@furesoe.dk +Faaborg-Midtfyn Kommune;Tinghøj Allé 2;5750;Ringe;fmk@fmk.dk +Gentofte Kommune;Bernstorffsvej 161;2920;Charlottenlund;gentofte@gentofte.dk +Gladsaxe Kommune;Rådhus Allé 7;2860;Søborg;kommunen@gladsaxe.dk +Glostrup Kommune;Rådhusparken 2;2600;Glostrup;glostrup.kommune@glostrup.dk +Greve Kommune;Rådhusholmen 10;2670;Greve;raadhus@greve.dk +Gribskov Kommune;Rådhusvej 3;3200;Helsinge;borgerservice@gribskov.dk +Guldborgsund Kommune;Parkvej 37;4800;Nykøbing Falster;kommunen@guldborgsund.dk +Haderslev Kommune;Christian X's Vej 39;6100;Haderslev;post@haderslev.dk +Halsnæs Kommune;Rådhuspladsen 1;3300;Frederiksværk;mail@halsnaes.dk +Hedensted Kommune;Niels Espes Vej 8;8722;Hedensted;mail@hedensted.dk +Helsingør Kommune;Stengade 59;3000;Helsingør;mail@helsingor.dk +Herlev Kommune;Herlev Bygade 90;2730;Herlev;herlev@herlev.dk +Herning Kommune;Torvet;7400;Herning;kommunen@herning.dk +Hillerød Kommune;Trollesmindealle 27;3400;Hillerød;hillerod@hillerod.dk +Hjørring Kommune;Nørregade 2;9800;Hjørring;hjoerring@hjoerring.dk +Holbæk Kommune;Kanalstræde 2;4300;Holbæk;post@holb.dk +Holstebro Kommune;Kirkestræde 11;7500;Holstebro;kommunen@holstebro.dk +Horsens Kommune;Rådhustorvet 4;8700;Horsens;horsens.kommune@horsens.dk +Hvidovre Kommune;Hvidovrevej 278;2650;Hvidovre;hvidovre@hvidovre.dk +Høje-Taastrup Kommune;Rådhusstræde 1;2630;Taastrup;kommune@htk.dk +Hørsholm Kommune;Slotsmarken 13;2970;Hørsholm;kommunen@horsholm.dk +Ikast-Brande Kommune;Rådhusstrædet 6;7430;Ikast;post@ikast-brande.dk +Ishøj Kommune;Ishøj Store Torv 20;2635;Ishøj;ishojkommune@ishoj.dk +Jammerbugt Kommune;Toftevej 43;9440;Aabybro;raadhus@jammerbugt.dk +Kalundborg Kommune;Klosterparkvej 7;4400;Kalundborg;kalundborg@kalundborg.dk +Kerteminde Kommune;Hans Schacksvej 4;5300;Kerteminde;kommune@kerteminde.dk +Kolding Kommune;Akseltorv 1;6000;Kolding;kommunen@kolding.dk +Københavns Kommune;Rådhuset;1599;København V;borgerservice@kk.dk +Køge Kommune;Torvet 1;4600;Køge;raadhus@koege.dk +Langeland Kommune;Fredensvej 1;5900;Rudkøbing;post@langelandkommune.dk +Lejre Kommune;Møllebjergvej 4;4330;Hvalsø;post@lejre.dk +Lemvig Kommune;Rådhusgade 2;7620;Lemvig;lemvig.kommune@lemvig.dk +Lolland Kommune;Jernbanegade 7;4930;Maribo;lolland@lolland.dk +Lyngby-Taarbæk Kommune;Lyngby Torv;2800;Kongens Lyngby;lyngby@ltk.dk +Læsø Kommune;Doktorvejen 2;9940;Læsø;kommunen@laesoe.dk +Mariagerfjord Kommune;Nordre Kajgade 1;9500;Hobro;raadhus@mariagerfjord.dk +Middelfart Kommune;Nytorv 9;5500;Middelfart;middelfart@middelfart.dk +Morsø Kommune;Jernbanevej 7;7900;Nykøbing Mors;kommunen@morsoe.dk +Norddjurs Kommune;Torvet 3;8500;Grenaa;norddjurs@norddjurs.dk +Nordfyns Kommune;Østergade 23;5400;Bogense;post@nordfynskommune.dk +Nyborg Kommune;Torvet 1;5800;Nyborg;kommune@nyborg.dk +Næstved Kommune;Rådmandshaven 20;4700;Næstved;naestved@naestved.dk +Odder Kommune;Rådhusgade 3;8300;Odder;odder.kommune@odder.dk +Odense Kommune;Flakhaven 2;5000;Odense C;odense@odense.dk +Odsherred Kommune;Nyvej 22;4573;Højby;kommune@odsherred.dk +Randers Kommune;Laksetorvet;8900;Randers C;randers.kommune@randers.dk +Rebild Kommune;Hobrovej 110;9530;Støvring;raadhus@rebild.dk +Ringkøbing-Skjern Kommune;Ved Fjorden 6;6950;Ringkøbing;post@rksk.dk +Ringsted Kommune;Sct. Bendtsgade 1;4100;Ringsted;ringsted@ringsted.dk +Roskilde Kommune;Rådhusbuen 1;4000;Roskilde;kommunen@roskilde.dk +Rudersdal Kommune;Øverødvej 2;2840;Holte;rudersdal@rudersdal.dk +Rødovre Kommune;Rødovre Parkvej 150;2610;Rødovre;rk@rk.dk +Samsø Kommune;Søtofte 10;8305;Samsø;kommune@samsoe.dk +Silkeborg Kommune;Søvej 1;8600;Silkeborg;kommunen@silkeborg.dk +Skanderborg Kommune;Skanderborg Fælled 1;8660;Skanderborg;skanderborg.kommune@skanderborg.dk +Skive Kommune;Torvegade 10;7800;Skive;sk@skivekommune.dk +Slagelse Kommune;Rådhuspladsen 11;4200;Slagelse;slagelse@slagelse.dk +Solrød Kommune;Solrød Center 1;2680;Solrød Strand;kommune@solrod.dk +Sorø Kommune;Rådhusvej 8;4180;Sorø;soroekom@soroe.dk +Stevns Kommune;Rådhuspladsen 4;4660;Store Heddinge;stevns@stevns.dk +Struer Kommune;Østergade 11-15;7600;Struer;struer@struer.dk +Svendborg Kommune;Ramsherred 5;5700;Svendborg;svendborg@svendborg.dk +Syddjurs Kommune;Lundbergsvej 2;8400;Ebbeltoft;syddjurs@syddjurs.dk +Sønderborg Kommune;Rådhustorvet 10;6400;Sønderborg;post@sonderborg.dk +Thisted Kommune;Asylgade 30;7700;Thisted;thistedkommune@thisted.dk +Tønder Kommune;Kongevej 57;6270;Tønder;toender@toender.dk +Tårnby Kommune;Amager Landevej 76;2770;Kastrup;kommunen@taarnby.dk +Vallensbæk Kommune;Vallensbæk Stationstorv 100;2665;Vallensbæk Strand;kommune@vallensbaek.dk +Varde Kommune;Bytoften 2;6800;Varde;vardekommune@varde.dk +Vejen Kommune;Rådhuspassagen 3;6600;Vejen;post@vejen.dk +Vejle Kommune;Skolegade 1;7100;Vejle;post@vejle.dk +Vesthimmerlands Kommune;Vestre Boulevard 7;9600;Aars;post@vesthimmerland.dk +Viborg Kommune;Prinsens Alle 5;8800;Viborg;viborg@viborg.dk +Vordingborg Kommune;Valdemarsgade 43;4760;Vordingborg;post@vordingborg.dk +Ærø Kommune;Statene 2;5970;Ærøskøbing;post@aeroekommune.dk +Aabenraa Kommune;Skelbækvej 2;6200;Aabenraa;post@aabenraa.dk +Aalborg Kommune;Boulevarden 13;9000;Aalborg;aalborg@aalborg.dk +Aarhus Kommune;Rådhuspladsen 2;8000;Aarhus C;post@aarhus.dk diff --git a/members/migrations/0057_municipality.py b/members/migrations/0057_municipality.py new file mode 100644 index 00000000..e940260a --- /dev/null +++ b/members/migrations/0057_municipality.py @@ -0,0 +1,40 @@ +# Generated by Django 4.2.16 on 2024-10-27 13:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("members", "0056_alter_activityinvite_activity"), + ] + + operations = [ + migrations.CreateModel( + name="Municipality", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "municipality", + models.CharField(max_length=255, verbose_name="Kommune"), + ), + ("address", models.CharField(max_length=255, verbose_name="Adresse")), + ("zipcode", models.CharField(max_length=10, verbose_name="Postnr")), + ("city", models.CharField(max_length=100, verbose_name="By")), + ("email", models.EmailField(max_length=254, verbose_name="E-mail")), + ], + options={ + "verbose_name": "Kommune", + "verbose_name_plural": "Kommuner", + "ordering": ["municipality"], + }, + ), + ] diff --git a/members/models/__init__.py b/members/models/__init__.py index 2a9d84ed..8be32061 100644 --- a/members/models/__init__.py +++ b/members/models/__init__.py @@ -15,6 +15,7 @@ import members.models.equipment import members.models.equipmentloan import members.models.family +import members.models.municipality import members.models.notification import members.models.payment import members.models.person @@ -41,6 +42,7 @@ from .equipment import Equipment from .equipmentloan import EquipmentLoan from .family import Family +from .municipality import Municipality from .notification import Notification from .payment import Payment from .person import Person @@ -69,6 +71,7 @@ EquipmentLoan, Family, gatherDayliStatistics, + Municipality, Notification, Payment, Person, diff --git a/members/models/municipality.py b/members/models/municipality.py new file mode 100644 index 00000000..2d917b6d --- /dev/null +++ b/members/models/municipality.py @@ -0,0 +1,16 @@ +from django.db import models + +class Municipality(models.Model): + municipality = models.CharField(max_length=255, verbose_name="Kommune") + address = models.CharField(max_length=255, verbose_name="Adresse") + zipcode = models.CharField(max_length=10, verbose_name="Postnr") + city = models.CharField(max_length=100, verbose_name="By") + email = models.EmailField(verbose_name="E-mail") + + def __str__(self): + return f"{self.municipality}, {self.zipcode} {self.city}" + + class Meta: + verbose_name = "Kommune" + verbose_name_plural = "Kommuner" + ordering = ["municipality"] From 2e23057d376944f7f71e0ca870193facd08faa8c Mon Sep 17 00:00:00 2001 From: Rasmus Selsmark Date: Sun, 27 Oct 2024 14:17:08 +0100 Subject: [PATCH 2/2] Fix formatting --- members/admin/municipality_admin.py | 3 ++- .../commands/import_municipalities.py | 25 ++++++++++++------- members/models/municipality.py | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/members/admin/municipality_admin.py b/members/admin/municipality_admin.py index f27f1226..aa44bf14 100644 --- a/members/admin/municipality_admin.py +++ b/members/admin/municipality_admin.py @@ -1,4 +1,5 @@ from django.contrib import admin + class MunicipalityAdmin(admin.ModelAdmin): - list_display = ('municipality', 'address', 'zipcode', 'city', 'email') + list_display = ("municipality", "address", "zipcode", "city", "email") diff --git a/members/management/commands/import_municipalities.py b/members/management/commands/import_municipalities.py index d91f0ad6..6ff090a7 100644 --- a/members/management/commands/import_municipalities.py +++ b/members/management/commands/import_municipalities.py @@ -5,22 +5,23 @@ # run locally: # docker compose run web ./manage.py import_municipalities members/management/commands/municipalities.csv + class Command(BaseCommand): - help = 'Import municipalities data from a CSV file into the Municipality model' + help = "Import municipalities data from a CSV file into the Municipality model" def add_arguments(self, parser): parser.add_argument( - 'csv_file', + "csv_file", type=str, - help='Path to the CSV file containing municipalities data' + help="Path to the CSV file containing municipalities data", ) def handle(self, *args, **kwargs): - csv_file_path = kwargs['csv_file'] + csv_file_path = kwargs["csv_file"] try: - with open(csv_file_path, mode='r', encoding='utf-8') as file: - reader = csv.reader(file, delimiter=';') + with open(csv_file_path, mode="r", encoding="utf-8") as file: + reader = csv.reader(file, delimiter=";") for row in reader: municipality, address, zipcode, city, email = row Municipality.objects.create( @@ -28,11 +29,17 @@ def handle(self, *args, **kwargs): address=address, zipcode=zipcode, city=city, - email=email + email=email, ) self.stdout.write(f"Added municipality: {municipality}") - self.stdout.write(self.style.SUCCESS('Successfully imported all municipalities')) + self.stdout.write( + self.style.SUCCESS("Successfully imported all municipalities") + ) except FileNotFoundError: - self.stdout.write(self.style.ERROR(f"File {csv_file_path} not found. Please check the file path.")) + self.stdout.write( + self.style.ERROR( + f"File {csv_file_path} not found. Please check the file path." + ) + ) diff --git a/members/models/municipality.py b/members/models/municipality.py index 2d917b6d..1c366561 100644 --- a/members/models/municipality.py +++ b/members/models/municipality.py @@ -1,5 +1,6 @@ from django.db import models + class Municipality(models.Model): municipality = models.CharField(max_length=255, verbose_name="Kommune") address = models.CharField(max_length=255, verbose_name="Adresse")