update
This commit is contained in:
850
rog/models.py
850
rog/models.py
@ -1,425 +1,425 @@
|
||||
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 _
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models.signals import post_save, post_delete, pre_save
|
||||
from django.dispatch import receiver
|
||||
import geopandas as gpd
|
||||
from sqlalchemy import *
|
||||
from geoalchemy2 import Geometry, WKTElement
|
||||
import os, zipfile, glob
|
||||
import environ
|
||||
from geo.Postgres import Db
|
||||
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")
|
||||
|
||||
db = Db(dbname=env("POSTGRES_DBNAME"), user=env("POSTGRES_USER"), password=env("POSTGRES_PASS"), host="postgres-db", port=env("PG_PORT"))
|
||||
|
||||
|
||||
class RogUser(models.Model):
|
||||
user=models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
email=models.EmailField(_('Email'))
|
||||
phone=models.CharField(_('Phone Number'), max_length=55)
|
||||
first_name=models.CharField(_('First Name'), max_length=255)
|
||||
middle_name=models.CharField(_('Middle Name'), max_length=255, blank=True, null=True)
|
||||
last_name=models.CharField(_('last_name'), max_length=255)
|
||||
nickname=models.CharField(_('Nickname'), max_length=255, blank=True, null=True)
|
||||
country=models.CharField(_('Country'), max_length=255, default='Japan')
|
||||
language=models.CharField(_('Language'), max_length=255, default='Japanese')
|
||||
prefecture=models.CharField(_('Prefecture'), max_length=255, blank=True, null=True)
|
||||
sex=models.CharField(_('Sex'), max_length=255, default='unknown', blank=True, null=True)
|
||||
birthyear=models.IntegerField(_('Birth year'), blank=True, null=True)
|
||||
family_structure =models.IntegerField(_('Family Structure'), blank=True, null=True)
|
||||
introducer = models.ForeignKey(User, related_name='introduced_uesr', on_delete=models.DO_NOTHING)
|
||||
level= models.IntegerField(_('Level'), blank=True, null=True, default=0)
|
||||
parammeters=models.CharField(_('Parameters'), max_length=512)
|
||||
created_at=models.DateTimeField(auto_now_add=True)
|
||||
last_updated_user=models.ForeignKey(User, related_name="roguser_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class SystemSettings(models.Model):
|
||||
setting_name=models.CharField(_('Settings Name'), max_length=255)
|
||||
version=models.CharField(_('Version'), max_length=10, blank=True, null=True)
|
||||
effective_date=models.DateTimeField()
|
||||
end_date=models.DateTimeField()
|
||||
parammeters=models.CharField(_('Parameters'), max_length=512)
|
||||
created_at=models.DateTimeField(auto_now_add=True)
|
||||
last_updated_user=models.ForeignKey(User, related_name="system_setting_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
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)
|
||||
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_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, blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.location_id)
|
||||
|
||||
|
||||
|
||||
class Location_polygon(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_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, blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.location_name)
|
||||
|
||||
|
||||
|
||||
EVENT_STATUS = (
|
||||
("PREPARING", _("Preparing")),
|
||||
("PROMOTION", _("Promotion")),
|
||||
("EVENT", _("Event")),
|
||||
("END", _("End"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
tagname=models.CharField(_('Parameters'), max_length=512, blank=True, null=True)
|
||||
status=models.CharField(max_length=256, choices=EVENT_STATUS)
|
||||
price=models.IntegerField(_('Paid Amount'), default=0)
|
||||
promotion_date=models.DateTimeField(_('Promotion date'), blank=True, null=True)
|
||||
event_start=models.DateTimeField(_('Promotion date'), blank=True, null=True)
|
||||
event_end=models.DateTimeField(_('Promotion date'), blank=True, null=True)
|
||||
remark=models.CharField(max_length=256, 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="event_updated_user", on_delete=models.DO_NOTHING,blank=True, null=True)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
ROG_STATUS = (
|
||||
("REGISTERED", _("Registered")),
|
||||
("ACCEPTED", _("accepted")),
|
||||
("PAID", _("paid")),
|
||||
("JOINED", _("joined")),
|
||||
("CANCELED", _("Canceled"))
|
||||
)
|
||||
|
||||
class JoinedEvent(models.Model):
|
||||
user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
tagname=models.CharField(_('Tag Name'), max_length=255, blank=True, null=True)
|
||||
status=models.CharField(max_length=256, choices=ROG_STATUS)
|
||||
registrationid=models.CharField(_('Registration Id'), max_length=56)
|
||||
payment_code=models.CharField(_('Payment Code'), max_length=255)
|
||||
paid=models.IntegerField(_('Paid Amount'), default=0)
|
||||
remark=models.CharField(_('Remark'), max_length=255, blank=True, null=True)
|
||||
parammeters=models.CharField(_('Parameters'), max_length=512)
|
||||
created_at=models.DateTimeField(auto_now_add=True)
|
||||
last_updated_user=models.ForeignKey(User, related_name="joined_event_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
|
||||
class Favorite(models.Model):
|
||||
user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
location=models.ForeignKey(Location, on_delete=models.CASCADE)
|
||||
good=models.IntegerField(_('Good'), default=0)
|
||||
favorite=models.IntegerField(_('Favorite'), default=0)
|
||||
evaluation=models.IntegerField(_('Evaluation'), default=0)
|
||||
number_visit=models.IntegerField(_('Good'), default=0)
|
||||
last_visited=models.DateTimeField(_('Last Visited'), 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="favorite_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
|
||||
TRAVEL_CATEGORY = (
|
||||
("PRIVATE", _("Private")),
|
||||
("GROUP", _("Group")),
|
||||
("AGENT", _("Agent")),
|
||||
("ROGAINING", _("Rogaining"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
class TravelList(models.Model):
|
||||
travel_id= models.IntegerField(_('Travel Id'))
|
||||
user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
start_date=models.DateTimeField(_('Start date') ,blank=True, null=True)
|
||||
finish_date=models.DateTimeField(_('End date') ,blank=True, null=True)
|
||||
category=models.CharField(max_length=256, choices=TRAVEL_CATEGORY)
|
||||
title=models.CharField(_('Title'), max_length=255)
|
||||
transportation=models.CharField(_('Transpotation'), max_length=255 ,blank=True, null=True)
|
||||
moving_distance=models.IntegerField(blank=True, null=True)
|
||||
duration=models.DurationField(_('Duration') ,blank=True, null=True)
|
||||
eta=models.DateTimeField(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="travel_list_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class TravelPoint(models.Model):
|
||||
travel_list= models.ForeignKey(TravelList, on_delete=models.DO_NOTHING)
|
||||
location=models.ForeignKey(Location, on_delete=models.CASCADE)
|
||||
distance=models.FloatField(blank=True, null=True)
|
||||
transportation=models.CharField(_('Transpotation'), max_length=255 ,blank=True, null=True)
|
||||
eta=models.DateTimeField(blank=True, null=True)
|
||||
order_number=models.IntegerField(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="travelpoint_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
|
||||
|
||||
class RogEvent(models.Model):
|
||||
title=models.CharField(_('Title'), max_length=255)
|
||||
venue=models.CharField(_('Venue'), max_length=255)
|
||||
at_date=models.DateTimeField(_('At Date'), auto_now_add=True)
|
||||
geom=models.MultiPointField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
class EventRoute(models.Model):
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
event = models.OneToOneField(RogEvent, on_delete=models.CASCADE)
|
||||
geom = models.MultiLineStringField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Shop(models.Model):
|
||||
name=models.CharField(_('Shop name'), max_length=255)
|
||||
geom=models.MultiPointField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class ShopRoute(models.Model):
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
shop = models.OneToOneField(Shop, on_delete=models.CASCADE)
|
||||
geom = models.MultiLineStringField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def getTableForModel(tbl):
|
||||
if tbl == 1:
|
||||
return Location.objects.model._meta.db_table;
|
||||
elif tbl == 2:
|
||||
return Location_line.objects.model._meta.db_table;
|
||||
else:
|
||||
return Location_polygon.objects.model._meta.db_table;
|
||||
|
||||
def getMappingforModel(tbl, shp):
|
||||
if tbl == 1:
|
||||
return LayerMapping(Location, shp, location_mapping, transform=False)
|
||||
elif tbl == 2:
|
||||
return LayerMapping(Location_line, shp, location_line_mapping, transform=False)
|
||||
else:
|
||||
return LayerMapping(Location_polygon, shp, location_polygon_mapping, transform=False)
|
||||
|
||||
|
||||
class ShapeLayers(models.Model):
|
||||
name = models.CharField(_("Shape Layer"), max_length=255)
|
||||
file = models.FileField(upload_to='%y%m%d', blank=True)
|
||||
uploaded_date = models.DateField(auto_now_add=True)
|
||||
layerof = models.IntegerField(choices=LAYER_CHOICES, default=1)
|
||||
table_name = models.CharField(_("Table name"), max_length=255, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
|
||||
|
||||
@receiver(pre_save, sender=ShapeLayers)
|
||||
def my_callback(sender, instance, *args, **kwargs):
|
||||
instance.table_name = getTableForModel(instance.layerof)
|
||||
|
||||
@receiver(post_save, sender=ShapeLayers)
|
||||
def publish_date(sender, instance, created, **kwargs):
|
||||
file = instance.file.path
|
||||
file_format = os.path.basename(file).split('.')[-1]
|
||||
file_name = os.path.basename(file).split('.')[0]
|
||||
file_path = os.path.dirname(file)
|
||||
name = instance.name
|
||||
conn_str = f'postgresql://{env("POSTGRES_USER")}:{env("POSTGRES_PASS")}@{env("PG_HOST")}:{env("PG_PORT")}/{env("POSTGRES_DBNAME")}'
|
||||
|
||||
with zipfile.ZipFile(file, 'r') as zip_ref:
|
||||
zip_ref.extractall(file_path)
|
||||
|
||||
os.remove(file)
|
||||
|
||||
try:
|
||||
shp = glob.glob(r'{}/**/*.shp'.format(file_path), recursive=True)[0]
|
||||
gdf = gpd.read_file(shp)
|
||||
crs_name = str(gdf.crs.srs)
|
||||
print(crs_name, 'crs - name')
|
||||
epsg = int(crs_name.replace('epsg:',''))
|
||||
if epsg is None:
|
||||
epsg=4326
|
||||
|
||||
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 == 2:
|
||||
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]
|
||||
)
|
||||
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 _
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models.signals import post_save, post_delete, pre_save
|
||||
from django.dispatch import receiver
|
||||
import geopandas as gpd
|
||||
from sqlalchemy import *
|
||||
from geoalchemy2 import Geometry, WKTElement
|
||||
import os, zipfile, glob
|
||||
import environ
|
||||
from geo.Postgres import Db
|
||||
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")
|
||||
|
||||
db = Db(dbname=env("POSTGRES_DBNAME"), user=env("POSTGRES_USER"), password=env("POSTGRES_PASS"), host="postgres-db", port=env("PG_PORT"))
|
||||
|
||||
|
||||
class RogUser(models.Model):
|
||||
user=models.OneToOneField(User, on_delete=models.CASCADE)
|
||||
email=models.EmailField(_('Email'))
|
||||
phone=models.CharField(_('Phone Number'), max_length=55)
|
||||
first_name=models.CharField(_('First Name'), max_length=255)
|
||||
middle_name=models.CharField(_('Middle Name'), max_length=255, blank=True, null=True)
|
||||
last_name=models.CharField(_('last_name'), max_length=255)
|
||||
nickname=models.CharField(_('Nickname'), max_length=255, blank=True, null=True)
|
||||
country=models.CharField(_('Country'), max_length=255, default='Japan')
|
||||
language=models.CharField(_('Language'), max_length=255, default='Japanese')
|
||||
prefecture=models.CharField(_('Prefecture'), max_length=255, blank=True, null=True)
|
||||
sex=models.CharField(_('Sex'), max_length=255, default='unknown', blank=True, null=True)
|
||||
birthyear=models.IntegerField(_('Birth year'), blank=True, null=True)
|
||||
family_structure =models.IntegerField(_('Family Structure'), blank=True, null=True)
|
||||
introducer = models.ForeignKey(User, related_name='introduced_uesr', on_delete=models.DO_NOTHING)
|
||||
level= models.IntegerField(_('Level'), blank=True, null=True, default=0)
|
||||
parammeters=models.CharField(_('Parameters'), max_length=512)
|
||||
created_at=models.DateTimeField(auto_now_add=True)
|
||||
last_updated_user=models.ForeignKey(User, related_name="roguser_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class SystemSettings(models.Model):
|
||||
setting_name=models.CharField(_('Settings Name'), max_length=255)
|
||||
version=models.CharField(_('Version'), max_length=10, blank=True, null=True)
|
||||
effective_date=models.DateTimeField()
|
||||
end_date=models.DateTimeField()
|
||||
parammeters=models.CharField(_('Parameters'), max_length=512)
|
||||
created_at=models.DateTimeField(auto_now_add=True)
|
||||
last_updated_user=models.ForeignKey(User, related_name="system_setting_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
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(_('Portal'), max_length=255,blank=True, null=True)
|
||||
group=models.CharField(_('Group'), max_length=255,blank=True, null=True)
|
||||
phone=models.CharField(_('Phone'), max_length=255,blank=True, null=True)
|
||||
fax=models.CharField(_('Fax'), max_length=255, blank=True, null=True)
|
||||
email=models.EmailField(_('Email'), max_length=255,blank=True, null=True)
|
||||
facility=models.CharField(_('Facility'), max_length=255, blank=True, null=True)
|
||||
remark=models.CharField(_('Remarks'), 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)
|
||||
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(_('Portal'), max_length=255,blank=True, null=True)
|
||||
group=models.CharField(_('Group'), max_length=255,blank=True, null=True)
|
||||
phone=models.CharField(_('Phone'), max_length=255,blank=True, null=True)
|
||||
fax=models.CharField(_('Fax'), max_length=255, blank=True, null=True)
|
||||
email=models.EmailField(_('Email'), max_length=255,blank=True, null=True)
|
||||
facility=models.CharField(_('Facility'), max_length=255, blank=True, null=True)
|
||||
remark=models.CharField(_('Remarks'), 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_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, blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.location_id)
|
||||
|
||||
|
||||
|
||||
class Location_polygon(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(_('Portal'), max_length=255,blank=True, null=True)
|
||||
group=models.CharField(_('Group'), max_length=255,blank=True, null=True)
|
||||
phone=models.CharField(_('Phone'), max_length=255,blank=True, null=True)
|
||||
fax=models.CharField(_('Fax'), max_length=255, blank=True, null=True)
|
||||
email=models.EmailField(_('Email'), max_length=255,blank=True, null=True)
|
||||
facility=models.CharField(_('Facility'), max_length=255, blank=True, null=True)
|
||||
remark=models.CharField(_('Remarks'), 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_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, blank=True, null=True)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.location_name)
|
||||
|
||||
|
||||
|
||||
EVENT_STATUS = (
|
||||
("PREPARING", _("Preparing")),
|
||||
("PROMOTION", _("Promotion")),
|
||||
("EVENT", _("Event")),
|
||||
("END", _("End"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
tagname=models.CharField(_('Parameters'), max_length=512, blank=True, null=True)
|
||||
status=models.CharField(max_length=256, choices=EVENT_STATUS)
|
||||
price=models.IntegerField(_('Paid Amount'), default=0)
|
||||
promotion_date=models.DateTimeField(_('Promotion date'), blank=True, null=True)
|
||||
event_start=models.DateTimeField(_('Promotion date'), blank=True, null=True)
|
||||
event_end=models.DateTimeField(_('Promotion date'), blank=True, null=True)
|
||||
remark=models.CharField(max_length=256, 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="event_updated_user", on_delete=models.DO_NOTHING,blank=True, null=True)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
ROG_STATUS = (
|
||||
("REGISTERED", _("Registered")),
|
||||
("ACCEPTED", _("accepted")),
|
||||
("PAID", _("paid")),
|
||||
("JOINED", _("joined")),
|
||||
("CANCELED", _("Canceled"))
|
||||
)
|
||||
|
||||
class JoinedEvent(models.Model):
|
||||
user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
tagname=models.CharField(_('Tag Name'), max_length=255, blank=True, null=True)
|
||||
status=models.CharField(max_length=256, choices=ROG_STATUS)
|
||||
registrationid=models.CharField(_('Registration Id'), max_length=56)
|
||||
payment_code=models.CharField(_('Payment Code'), max_length=255)
|
||||
paid=models.IntegerField(_('Paid Amount'), default=0)
|
||||
remark=models.CharField(_('Remark'), max_length=255, blank=True, null=True)
|
||||
parammeters=models.CharField(_('Parameters'), max_length=512)
|
||||
created_at=models.DateTimeField(auto_now_add=True)
|
||||
last_updated_user=models.ForeignKey(User, related_name="joined_event_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
|
||||
class Favorite(models.Model):
|
||||
user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
location=models.ForeignKey(Location, on_delete=models.CASCADE)
|
||||
good=models.IntegerField(_('Good'), default=0)
|
||||
favorite=models.IntegerField(_('Favorite'), default=0)
|
||||
evaluation=models.IntegerField(_('Evaluation'), default=0)
|
||||
number_visit=models.IntegerField(_('Good'), default=0)
|
||||
last_visited=models.DateTimeField(_('Last Visited'), 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="favorite_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
|
||||
TRAVEL_CATEGORY = (
|
||||
("PRIVATE", _("Private")),
|
||||
("GROUP", _("Group")),
|
||||
("AGENT", _("Agent")),
|
||||
("ROGAINING", _("Rogaining"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
class TravelList(models.Model):
|
||||
travel_id= models.IntegerField(_('Travel Id'))
|
||||
user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
start_date=models.DateTimeField(_('Start date') ,blank=True, null=True)
|
||||
finish_date=models.DateTimeField(_('End date') ,blank=True, null=True)
|
||||
category=models.CharField(max_length=256, choices=TRAVEL_CATEGORY)
|
||||
title=models.CharField(_('Title'), max_length=255)
|
||||
transportation=models.CharField(_('Transpotation'), max_length=255 ,blank=True, null=True)
|
||||
moving_distance=models.IntegerField(blank=True, null=True)
|
||||
duration=models.DurationField(_('Duration') ,blank=True, null=True)
|
||||
eta=models.DateTimeField(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="travel_list_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class TravelPoint(models.Model):
|
||||
travel_list= models.ForeignKey(TravelList, on_delete=models.DO_NOTHING)
|
||||
location=models.ForeignKey(Location, on_delete=models.CASCADE)
|
||||
distance=models.FloatField(blank=True, null=True)
|
||||
transportation=models.CharField(_('Transpotation'), max_length=255 ,blank=True, null=True)
|
||||
eta=models.DateTimeField(blank=True, null=True)
|
||||
order_number=models.IntegerField(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="travelpoint_updated_user", on_delete=models.DO_NOTHING)
|
||||
last_updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
|
||||
|
||||
class RogEvent(models.Model):
|
||||
title=models.CharField(_('Title'), max_length=255)
|
||||
venue=models.CharField(_('Venue'), max_length=255)
|
||||
at_date=models.DateTimeField(_('At Date'), auto_now_add=True)
|
||||
geom=models.MultiPointField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
class EventRoute(models.Model):
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
event = models.OneToOneField(RogEvent, on_delete=models.CASCADE)
|
||||
geom = models.MultiLineStringField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Shop(models.Model):
|
||||
name=models.CharField(_('Shop name'), max_length=255)
|
||||
geom=models.MultiPointField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class ShopRoute(models.Model):
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
shop = models.OneToOneField(Shop, on_delete=models.CASCADE)
|
||||
geom = models.MultiLineStringField(srid=4326)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def getTableForModel(tbl):
|
||||
if tbl == 1:
|
||||
return Location.objects.model._meta.db_table;
|
||||
elif tbl == 2:
|
||||
return Location_line.objects.model._meta.db_table;
|
||||
else:
|
||||
return Location_polygon.objects.model._meta.db_table;
|
||||
|
||||
def getMappingforModel(tbl, shp):
|
||||
if tbl == 1:
|
||||
return LayerMapping(Location, shp, location_mapping, transform=False)
|
||||
elif tbl == 2:
|
||||
return LayerMapping(Location_line, shp, location_line_mapping, transform=False)
|
||||
else:
|
||||
return LayerMapping(Location_polygon, shp, location_polygon_mapping, transform=False)
|
||||
|
||||
|
||||
class ShapeLayers(models.Model):
|
||||
name = models.CharField(_("Shape Layer"), max_length=255)
|
||||
file = models.FileField(upload_to='%y%m%d', blank=True)
|
||||
uploaded_date = models.DateField(auto_now_add=True)
|
||||
layerof = models.IntegerField(choices=LAYER_CHOICES, default=1)
|
||||
table_name = models.CharField(_("Table name"), max_length=255, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
|
||||
|
||||
@receiver(pre_save, sender=ShapeLayers)
|
||||
def my_callback(sender, instance, *args, **kwargs):
|
||||
instance.table_name = getTableForModel(instance.layerof)
|
||||
|
||||
@receiver(post_save, sender=ShapeLayers)
|
||||
def publish_date(sender, instance, created, **kwargs):
|
||||
file = instance.file.path
|
||||
file_format = os.path.basename(file).split('.')[-1]
|
||||
file_name = os.path.basename(file).split('.')[0]
|
||||
file_path = os.path.dirname(file)
|
||||
name = instance.name
|
||||
conn_str = f'postgresql://{env("POSTGRES_USER")}:{env("POSTGRES_PASS")}@{env("PG_HOST")}:{env("PG_PORT")}/{env("POSTGRES_DBNAME")}'
|
||||
|
||||
with zipfile.ZipFile(file, 'r') as zip_ref:
|
||||
zip_ref.extractall(file_path)
|
||||
|
||||
os.remove(file)
|
||||
|
||||
try:
|
||||
shp = glob.glob(r'{}/**/*.shp'.format(file_path), recursive=True)[0]
|
||||
gdf = gpd.read_file(shp)
|
||||
crs_name = str(gdf.crs.srs)
|
||||
print(crs_name, 'crs - name')
|
||||
epsg = int(crs_name.replace('epsg:',''))
|
||||
if epsg is None:
|
||||
epsg=4326
|
||||
|
||||
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 == 2:
|
||||
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]
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user