diff --git a/rog/admin.py b/rog/admin.py index ea55ed7..a717577 100644 --- a/rog/admin.py +++ b/rog/admin.py @@ -27,4 +27,4 @@ admin.site.register(TravelPoint, admin.ModelAdmin) admin.site.register(Event, admin.ModelAdmin) admin.site.register(Location_line, LeafletGeoAdmin) admin.site.register(Location_polygon, LeafletGeoAdmin) -admin.site.register(ShapeLayers, admin.ModelAdmin) +admin.site.register(ShapeLayers, admin.ModelAdmin) \ No newline at end of file diff --git a/rog/choices.py b/rog/choices.py index 7600f8a..04b7b66 100644 --- a/rog/choices.py +++ b/rog/choices.py @@ -2,6 +2,6 @@ from django.utils.translation import gettext_lazy as _ LAYER_CHOICES = ( (1, _("locations")), - (2, _("locations_line")), - (3, _("locations_polygon")), + (2, _("Location_line")), + (3, _("Location_polygon")), ) \ No newline at end of file diff --git a/rog/mapping.py b/rog/mapping.py index ef8c3e1..a9981e9 100644 --- a/rog/mapping.py +++ b/rog/mapping.py @@ -27,51 +27,11 @@ location_mapping = { location_line_mapping = { 'location_id' : 'loc_id', - 'location_name' : 'loc_name', - 'category': 'category', - 'zip':'zip', - 'address':'address', - 'prefecture':'prefecture', - 'area':'area', - 'city':'city', - 'photos':'photos', - 'videos':'videos', - 'webcontents':'webcontent', - 'status':'status', - 'portal':'portal', - 'group':'group', - 'phone':'phone', - 'fax':'fax', - 'email':'email', - 'facility':'facility', - 'remark':'remark', - 'parammeters':'params', - 'tags':'tags', 'geom': 'LINESTRING', } location_polygon_mapping = { 'location_id' : 'loc_id', - 'location_name' : 'loc_name', - 'category': 'category', - 'zip':'zip', - 'address':'address', - 'prefecture':'prefecture', - 'area':'area', - 'city':'city', - 'photos':'photos', - 'videos':'videos', - 'webcontents':'webcontent', - 'status':'status', - 'portal':'portal', - 'group':'group', - 'phone':'phone', - 'fax':'fax', - 'email':'email', - 'facility':'facility', - 'remark':'remark', - 'parammeters':'params', - 'tags':'tags', 'geom': 'POLYGON', } \ No newline at end of file diff --git a/rog/migrations/0001_initial.py b/rog/migrations/0001_initial.py index 278d1e6..0a299ad 100644 --- a/rog/migrations/0001_initial.py +++ b/rog/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.9 on 2022-02-28 05:04 +# Generated by Django 3.2.9 on 2022-03-07 07:10 from django.conf import settings import django.contrib.gis.db.models.fields @@ -19,7 +19,7 @@ class Migration(migrations.Migration): name='Location', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('location_id', models.IntegerField(blank=True, null=True, verbose_name='Location Name')), + ('location_id', models.IntegerField(blank=True, null=True, verbose_name='Location id')), ('location_name', models.CharField(max_length=255, verbose_name='Location Name')), ('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='Category')), ('zip', models.CharField(blank=True, max_length=12, null=True, verbose_name='Zip code')), @@ -27,9 +27,9 @@ class Migration(migrations.Migration): ('prefecture', models.CharField(blank=True, max_length=255, null=True, verbose_name='Prefecture')), ('area', models.CharField(blank=True, max_length=255, null=True, verbose_name='Area')), ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('photos', models.JSONField(blank=True, null=True, verbose_name='Phptos')), - ('videos', models.JSONField(blank=True, null=True, verbose_name='Videos')), - ('webcontents', models.JSONField(blank=True, null=True, verbose_name='Web Content')), + ('photos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phptos')), + ('videos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Videos')), + ('webcontents', models.CharField(blank=True, max_length=255, null=True, verbose_name='Web Content')), ('status', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), ('portal', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), ('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), @@ -63,7 +63,7 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=255, verbose_name='Shape Layer')), ('file', models.FileField(blank=True, upload_to='%y%m%d')), ('uploaded_date', models.DateField(auto_now_add=True)), - ('layerof', models.IntegerField(choices=[(1, 'locations')], default=1)), + ('layerof', models.IntegerField(choices=[(1, 'locations'), (2, 'Location_line'), (3, 'Location_polygon')], default=1)), ('table_name', models.CharField(blank=True, max_length=255, verbose_name='Table name')), ], ), @@ -159,6 +159,68 @@ class Migration(migrations.Migration): ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), + migrations.CreateModel( + name='Location_polygon', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('location_id', models.IntegerField(blank=True, null=True, verbose_name='Location id')), + ('location_name', models.CharField(max_length=255, verbose_name='Location Name')), + ('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='Category')), + ('zip', models.CharField(blank=True, max_length=12, null=True, verbose_name='Zip code')), + ('address', models.CharField(blank=True, max_length=512, null=True, verbose_name='Address')), + ('prefecture', models.CharField(blank=True, max_length=255, null=True, verbose_name='Prefecture')), + ('area', models.CharField(blank=True, max_length=255, null=True, verbose_name='Area')), + ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), + ('photos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phptos')), + ('videos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Videos')), + ('webcontents', models.CharField(blank=True, max_length=255, null=True, verbose_name='Web Content')), + ('status', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('portal', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('email', models.EmailField(blank=True, max_length=255, null=True, verbose_name='Email')), + ('facility', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('tags', models.CharField(blank=True, max_length=512, null=True, verbose_name='Tags')), + ('parammeters', models.CharField(blank=True, max_length=512, null=True, verbose_name='Parameters')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('last_updated_at', models.DateTimeField(auto_now=True)), + ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326)), + ('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='location_polygon_updated_user', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Location_line', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('location_id', models.IntegerField(blank=True, null=True, verbose_name='Location id')), + ('location_name', models.CharField(max_length=255, verbose_name='Location Name')), + ('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='Category')), + ('zip', models.CharField(blank=True, max_length=12, null=True, verbose_name='Zip code')), + ('address', models.CharField(blank=True, max_length=512, null=True, verbose_name='Address')), + ('prefecture', models.CharField(blank=True, max_length=255, null=True, verbose_name='Prefecture')), + ('area', models.CharField(blank=True, max_length=255, null=True, verbose_name='Area')), + ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), + ('photos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phptos')), + ('videos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Videos')), + ('webcontents', models.CharField(blank=True, max_length=255, null=True, verbose_name='Web Content')), + ('status', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('portal', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('email', models.EmailField(blank=True, max_length=255, null=True, verbose_name='Email')), + ('facility', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), + ('tags', models.CharField(blank=True, max_length=512, null=True, verbose_name='Tags')), + ('parammeters', models.CharField(blank=True, max_length=512, null=True, verbose_name='Parameters')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('last_updated_at', models.DateTimeField(auto_now=True)), + ('geom', django.contrib.gis.db.models.fields.MultiLineStringField(blank=True, null=True, srid=4326)), + ('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='location_line_updated_user', to=settings.AUTH_USER_MODEL)), + ], + ), migrations.CreateModel( name='JoinedEvent', fields=[ diff --git a/rog/migrations/0002_alter_location_location_id.py b/rog/migrations/0002_alter_location_location_id.py deleted file mode 100644 index 472bdd6..0000000 --- a/rog/migrations/0002_alter_location_location_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.9 on 2022-02-28 12:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('rog', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='location', - name='location_id', - field=models.IntegerField(blank=True, null=True, verbose_name='Location id'), - ), - ] diff --git a/rog/migrations/0003_auto_20220302_2240.py b/rog/migrations/0003_auto_20220302_2240.py deleted file mode 100644 index 5c4bd9c..0000000 --- a/rog/migrations/0003_auto_20220302_2240.py +++ /dev/null @@ -1,99 +0,0 @@ -# Generated by Django 3.2.9 on 2022-03-02 13:40 - -from django.conf import settings -import django.contrib.gis.db.models.fields -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('rog', '0002_alter_location_location_id'), - ] - - operations = [ - migrations.AlterField( - model_name='location', - name='photos', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Phptos'), - ), - migrations.AlterField( - model_name='location', - name='videos', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Videos'), - ), - migrations.AlterField( - model_name='location', - name='webcontents', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Web Content'), - ), - migrations.AlterField( - model_name='shapelayers', - name='layerof', - field=models.IntegerField(choices=[(1, 'locations'), (2, 'locations_line'), (3, 'locations_polygon')], default=1), - ), - migrations.CreateModel( - name='Location_polygon', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('location_id', models.IntegerField(blank=True, null=True, verbose_name='Location id')), - ('location_name', models.CharField(max_length=255, verbose_name='Location Name')), - ('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='Category')), - ('zip', models.CharField(blank=True, max_length=12, null=True, verbose_name='Zip code')), - ('address', models.CharField(blank=True, max_length=512, null=True, verbose_name='Address')), - ('prefecture', models.CharField(blank=True, max_length=255, null=True, verbose_name='Prefecture')), - ('area', models.CharField(blank=True, max_length=255, null=True, verbose_name='Area')), - ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('photos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phptos')), - ('videos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Videos')), - ('webcontents', models.CharField(blank=True, max_length=255, null=True, verbose_name='Web Content')), - ('status', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('portal', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('email', models.EmailField(blank=True, max_length=255, null=True, verbose_name='Email')), - ('facility', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('tags', models.CharField(blank=True, max_length=512, null=True, verbose_name='Tags')), - ('parammeters', models.CharField(blank=True, max_length=512, null=True, verbose_name='Parameters')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('last_updated_at', models.DateTimeField(auto_now=True)), - ('geom', django.contrib.gis.db.models.fields.MultiPolygonField(srid=4326)), - ('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='location_polygon_updated_user', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='Location_line', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('location_id', models.IntegerField(blank=True, null=True, verbose_name='Location id')), - ('location_name', models.CharField(max_length=255, verbose_name='Location Name')), - ('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='Category')), - ('zip', models.CharField(blank=True, max_length=12, null=True, verbose_name='Zip code')), - ('address', models.CharField(blank=True, max_length=512, null=True, verbose_name='Address')), - ('prefecture', models.CharField(blank=True, max_length=255, null=True, verbose_name='Prefecture')), - ('area', models.CharField(blank=True, max_length=255, null=True, verbose_name='Area')), - ('city', models.CharField(blank=True, max_length=255, null=True, verbose_name='City')), - ('photos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phptos')), - ('videos', models.CharField(blank=True, max_length=255, null=True, verbose_name='Videos')), - ('webcontents', models.CharField(blank=True, max_length=255, null=True, verbose_name='Web Content')), - ('status', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('portal', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('email', models.EmailField(blank=True, max_length=255, null=True, verbose_name='Email')), - ('facility', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Status')), - ('tags', models.CharField(blank=True, max_length=512, null=True, verbose_name='Tags')), - ('parammeters', models.CharField(blank=True, max_length=512, null=True, verbose_name='Parameters')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('last_updated_at', models.DateTimeField(auto_now=True)), - ('geom', django.contrib.gis.db.models.fields.MultiLineStringField(srid=4326)), - ('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='location_line_updated_user', to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/rog/models.py b/rog/models.py index 5521f90..657e02e 100644 --- a/rog/models.py +++ b/rog/models.py @@ -1,3 +1,6 @@ +from dataclasses import field +from pyexpat import model +from sre_constants import CH_LOCALE from typing import ChainMap from django.contrib.gis.db import models from django.utils.translation import gettext_lazy as _ @@ -14,6 +17,7 @@ from sqlalchemy.sql.functions import mode from .mapping import location_mapping, location_line_mapping, location_polygon_mapping from .choices import LAYER_CHOICES from django.contrib.gis.utils import LayerMapping +from django.apps import apps env = environ.Env(DEBUG=(bool, False)) environ.Env.read_env(env_file=".env") @@ -84,37 +88,6 @@ class Location(models.Model): return self.location_name -class Location(models.Model): - location_id=models.IntegerField(_('Location id'), blank=True, null=True) - location_name=models.CharField(_('Location Name'), max_length=255) - category=models.CharField(_('Category'), max_length=255, blank=True, null=True) - zip=models.CharField(_('Zip code'), max_length=12, blank=True, null=True) - address = models.CharField(_('Address'), max_length=512, blank=True, null=True) - prefecture = models.CharField(_('Prefecture'), max_length=255, blank=True, null=True) - area= models.CharField(_('Area'), max_length=255, blank=True, null=True) - city= models.CharField(_('City'), max_length=255, blank=True, null=True) - photos=models.CharField(_('Phptos'), max_length=255, blank=True, null=True) - videos=models.CharField(_('Videos'), max_length=255, blank=True, null=True) - webcontents=models.CharField(_('Web Content'), max_length=255, blank=True, null=True) - status=models.CharField(_('Status'),max_length=255, blank=True, null=True) - portal=models.CharField(_('Status'), max_length=255,blank=True, null=True) - group=models.CharField(_('Status'), max_length=255,blank=True, null=True) - phone=models.CharField(_('Status'), max_length=255,blank=True, null=True) - fax=models.CharField(_('Status'), max_length=255, blank=True, null=True) - email=models.EmailField(_('Email'), max_length=255,blank=True, null=True) - facility=models.CharField(_('Status'), max_length=255, blank=True, null=True) - remark=models.CharField(_('Status'), max_length=255, blank=True, null=True) - tags=models.CharField(_('Tags'), max_length=512, blank=True, null=True) - parammeters=models.CharField(_('Parameters'), max_length=512, blank=True, null=True) - created_at=models.DateTimeField(auto_now_add=True) - last_updated_user=models.ForeignKey(User, related_name="location_updated_user", on_delete=models.DO_NOTHING,blank=True, null=True) - last_updated_at=models.DateTimeField(auto_now=True) - geom=models.MultiPointField(srid=4326) - - def __str__(self): - return self.location_name - - class Location_line(models.Model): location_id=models.IntegerField(_('Location id'), blank=True, null=True) location_name=models.CharField(_('Location Name'), max_length=255) @@ -140,10 +113,11 @@ class Location_line(models.Model): created_at=models.DateTimeField(auto_now_add=True) last_updated_user=models.ForeignKey(User, related_name="location_line_updated_user", on_delete=models.DO_NOTHING,blank=True, null=True) last_updated_at=models.DateTimeField(auto_now=True) - geom=models.MultiLineStringField(srid=4326) - + geom=models.MultiLineStringField(srid=4326, blank=True, null=True) + def __str__(self): - return self.location_name + return str(self.location_id) + class Location_polygon(models.Model): @@ -171,10 +145,10 @@ class Location_polygon(models.Model): created_at=models.DateTimeField(auto_now_add=True) last_updated_user=models.ForeignKey(User, related_name="location_polygon_updated_user", on_delete=models.DO_NOTHING,blank=True, null=True) last_updated_at=models.DateTimeField(auto_now=True) - geom=models.MultiPolygonField(srid=4326) + geom=models.MultiPolygonField(srid=4326, blank=True, null=True) def __str__(self): - return self.location_name + return str(self.location_name) @@ -327,9 +301,9 @@ def getMappingforModel(tbl, shp): if tbl == 1: return LayerMapping(Location, shp, location_mapping, transform=False) elif tbl == 2: - return LayerMapping(Location_line, location_line_mapping, transform=False) + return LayerMapping(Location_line, shp, location_line_mapping, transform=False) else: - return LayerMapping(Location_polygon, location_polygon_mapping, transform=False) + return LayerMapping(Location_polygon, shp, location_polygon_mapping, transform=False) class ShapeLayers(models.Model): @@ -372,11 +346,80 @@ def publish_date(sender, instance, created, **kwargs): if epsg is None: epsg=4326 - print("### shape file is ###") - lm2 = getMappingforModel(instance.layerof, shp) + print("### shape file is ###") lm2.save(strict=True, verbose=True) os.remove(shp) except Exception as e: print('##################',e) + + try: + csv = glob.glob(r'{}/**/*.csv'.format(file_path), recursive=True)[0] + + mdl = apps.get_model(app_label="rog", model_name=LAYER_CHOICES[instance.layerof -1][1]) + print(mdl) + print(f"#### instance.layerof - {instance.layerof}") + with open(csv, "r") as txt_file: + lns = txt_file.readlines() + for ln in lns: + fields = ln.split(",") + if instance.layerof == 12: + updateLineTable(mdl, fields) + if instance.layerof == 3: + updatePolygonTable(mdl, fields) + + except Exception as e: + print('##################',e) + + +def updateLineTable(mdl, fields): + #print(f"Updated {fields[0]} - {fields[1]}") + mdl.objects.filter(location_id = fields[0]).update( + location_name=fields[1], + category=fields[2], + zip=fields[3], + address=fields[4], + prefecture=fields[5], + area=fields[6], + city=fields[7], + photos=fields[8], + videos=fields[9], + webcontents=fields[10], + status=fields[11], + portal=fields[12], + group=fields[13], + phone=fields[14], + fax=fields[15], + email=fields[16], + facility=fields[17], + remark=fields[18], + tags=fields[19], + parammeters=fields[20] + ) + + +def updatePolygonTable(mdl, fields): + #print(f"Updated {fields[0]} - {fields[1]}") + mdl.objects.filter(location_id = fields[0]).update( + location_name=fields[1], + category=fields[2], + zip=fields[3], + address=fields[4], + prefecture=fields[5], + area=fields[6], + city=fields[7], + photos=fields[8], + videos=fields[9], + webcontents=fields[10], + status=fields[11], + portal=fields[12], + group=fields[13], + phone=fields[14], + fax=fields[15], + email=fields[16], + facility=fields[17], + remark=fields[18], + tags=fields[19], + parammeters=fields[20] + )