initial setting at 20-Aug-2025

This commit is contained in:
2025-08-20 19:15:19 +09:00
parent eab529bd3b
commit 1ba305641e
149 changed files with 170449 additions and 1802 deletions

0
rog/.DS_Store vendored Normal file → Executable file
View File

0
rog/__init__.py Normal file → Executable file
View File

0
rog/admin.py Normal file → Executable file
View File

0
rog/apps.py Normal file → Executable file
View File

0
rog/backend.py Normal file → Executable file
View File

0
rog/choices.py Normal file → Executable file
View File

0
rog/forms.py Normal file → Executable file
View File

0
rog/gifuroge_team.csv Normal file → Executable file
View File

0
rog/management/commands/cleanup_temp_users.py Normal file → Executable file
View File

View File

@ -0,0 +1,644 @@
import csv
import os
import logging
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction, connections
from django.utils import timezone
from django.conf import settings
from django.contrib.auth import get_user_model
from rog.models import Member, Team, NewEvent2, Entry, Location,NewCategory #, GpsLog
CustomUser = get_user_model()
logger = logging.getLogger(__name__)
class Command(BaseCommand):
help = 'CSVファイルからイベント参加者情報をインポートし、rogdbとgifurogeデータベースに登録します。'
def add_arguments(self, parser):
parser.add_argument('csv_file', type=str, help='インポートするCSVファイルのパス')
parser.add_argument('event_code', type=str, help='登録するイベントコード')
def handle(self, *args, **options):
csv_file = options['csv_file']
event_code = options['event_code']
# 処理結果を保存するリストを初期化
self.processed_entries = []
if not os.path.exists(csv_file):
raise CommandError(f'ファイルが見つかりません: {csv_file}')
try:
event = NewEvent2.objects.get(event_name=event_code)
except NewEvent2.DoesNotExist:
raise CommandError(f'イベントが見つかりません: {event_code}')
self.stdout.write(self.style.SUCCESS(f'イベント "{event.event_name}" のデータをインポートします'))
# CSVファイルを読み込み、rogdbデータベースに登録
with open(csv_file, 'r', encoding='utf-8') as file:
reader = csv.reader(file)
next(reader) # ヘッダー行をスキップ
with transaction.atomic():
for i, row in enumerate(reader, 1):
try:
self.process_entry(row, event)
except Exception as e:
self.stdout.write(self.style.ERROR(f'{i} のデータ処理中にエラーが発生しました: {str(e)}'))
self.stdout.write(self.style.WARNING(f'この行はスキップして続行します'))
# gifurogeデータベースへの転送
self.transfer_to_gifuroge(event)
# 結果をCSVファイルに出力
self.export_processed_entries(event_code)
self.stdout.write(self.style.SUCCESS('データのインポートが完了しました'))
def process_entry(self, row, event):
"""CSVの1行からエントリー情報を処理"""
try:
# 新しいCSVフォーマットに対応したインデックス
participation_time = row[0]
division = row[1]
is_trial = row[2].strip() == 'お試し' # 「お試し」フラグ
division_number = row[3]
team_name = row[4]
leader_name = row[5]
leader_kana = row[6]
leader_gender = row[7] # 新しく追加された性別フィールド
password = row[8] # インデックスが1つずれる
member_count = int(row[9]) # インデックスが1つずれる
zekken_label = row[10] # インデックスが1つずれる
zekken_number = row[11] # インデックスが1つずれる
leader_email = row[12] # インデックスが1つずれる
leader_birth_date = row[13] # インデックスが1つずれる
name_parts = leader_name.split(' ', 1)
lastname = name_parts[0]
firstname = name_parts[1] if len(name_parts) > 1 else ""
# 半角数字を全角数字に変換する関数
def to_fullwidth(s):
"""半角数字を全角数字に変換する"""
result = ""
for char in s:
if char.isdigit():
# 半角数字を全角数字に変換
result += chr(ord(char) + 0xFEE0)
else:
result += char
return result
# 日付フォーマットを変換する関数
def format_date(date_str):
"""YYYY/MM/DD形式をYYYY-MM-DD形式に変換する"""
if not date_str:
return None
try:
# スラッシュやピリオドなどの区切り文字を処理
parts = None
if '/' in date_str:
parts = date_str.split('/')
elif '.' in date_str:
parts = date_str.split('.')
elif '-' in date_str:
# 既にハイフン形式の場合はそのまま返す
return date_str
if parts and len(parts) == 3:
year, month, day = parts
# 必要に応じて年を4桁に修正'91' → '1991'
if len(year) == 2:
if int(year) > 50: # 50より大きい場合は1900年代と仮定
year = f"19{year}"
else:
year = f"20{year}"
# 月と日が1桁の場合は2桁に揃える
month = month.zfill(2)
day = day.zfill(2)
return f"{year}-{month}-{day}"
return date_str # 変換できない場合は元の文字列を返す
except Exception as e:
self.stdout.write(self.style.ERROR(f'日付変換エラー: {date_str} - {str(e)}'))
return None
# 代表者の生年月日をフォーマット変換
formatted_leader_birth_date = format_date(leader_birth_date)
# 参加時間を全角に変換
fullwidth_participation_time = to_fullwidth(participation_time)
# 代表者の性別を設定Femaleならtrue、それ以外ならfalse
is_female = leader_gender.strip().lower() == "female"
# 1. CustomUserを検索または作成
new_user = False
password_to_save = ""
try:
leader = CustomUser.objects.get(email=leader_email)
# 既存ユーザー
password_to_save = "(既存)"
# 既存ユーザーの性別情報を更新
if leader.female != is_female:
leader.female = is_female
leader.save()
self.stdout.write(f'既存ユーザーを代表者として使用します: {leader_email} (性別: {leader_gender})')
except CustomUser.DoesNotExist:
# 新規ユーザーの場合
# leader_nameを空白で分離
leader = CustomUser.objects.create_user(
email=leader_email,
password=password,
firstname=firstname,
lastname=lastname,
date_of_birth=formatted_leader_birth_date,
group=event.event_name,
female=is_female, # 性別を設定
is_active=True
)
password_to_save = password # 新規ユーザーの場合は実際のパスワード
self.stdout.write(f'代表者を新規作成しました: {leader_email} (パスワード: {password}, 性別: {leader_gender})')
# 処理した代表者情報をリストに追加
self.processed_entries.append({
'leader_name': leader_name,
'team_name': team_name,
'email': leader_email,
'password': password_to_save
})
# CSVの参加部門から対応するカテゴリーを検索
# division + "-" + participation_time + "時間" の形式で検索
category_name_with_time = f"{division}-{fullwidth_participation_time}時間"
try:
category = NewCategory.objects.get(category_name=category_name_with_time)
except NewCategory.DoesNotExist:
# カテゴリーが見つからない場合のエラーハンドリング
self.stdout.write(self.style.ERROR(f'カテゴリーが見つかりません: {category_name_with_time}'))
raise CommandError(f'カテゴリー "{category_name_with_time}" が存在しません。先にカテゴリーを作成してください。')
# 2. チームの作成とメンバーの登録
team = Team.objects.create(
team_name=team_name,
owner=leader,
category=category # eventではなくcategoryを使用
)
# メンバーの登録(代表者を含む)
Member.objects.create(
team=team,
user=leader,
firstname=firstname,
lastname=lastname,
date_of_birth=formatted_leader_birth_date,
female=is_female, # 性別を設定
is_temporary=False # 代表者は一時的なメンバーではない
)
# 追加メンバーの登録CSVの14列目以降に存在する場合
for i in range(1, min(member_count, 5) + 1): # 最大5人まで
# 各メンバーは3つのフィールド名前、生年月日、性別を持つ
member_name_idx = 14 + (i-1) * 3
member_birth_idx = member_name_idx + 1
member_gender_idx = member_name_idx + 2 # 性別のインデックス
if len(row) > member_name_idx and row[member_name_idx]:
member_name = row[member_name_idx]
member_birth = row[member_birth_idx] if len(row) > member_birth_idx else None
# メンバーの生年月日もフォーマット変換
formatted_member_birth = format_date(member_birth) if member_birth else None
member_gender = row[member_gender_idx] if len(row) > member_gender_idx else "Male"
member_is_female = member_gender.strip().lower() == "female"
# 名前を分割
name_parts = member_name.split(' ', 1)
lastname = name_parts[0]
firstname = name_parts[1] if len(name_parts) > 1 else ""
# メンバー用のユーザー作成(メールアドレスは一時的なもの)
temp_email = f"{team_name.replace(' ', '_')}_{i}@example.com"
# 既存のメンバーチェック
try:
member_user = CustomUser.objects.filter(email=temp_email).first()
if not member_user:
raise CustomUser.DoesNotExist()
# 既存ユーザーの性別情報を更新
if member_user.female != member_is_female:
member_user.female = member_is_female
member_user.save()
except CustomUser.DoesNotExist:
import secrets
member_user = CustomUser.objects.create_user(
email=temp_email,
password=secrets.token_urlsafe(12), # メンバーにはランダムパスワード
firstname=firstname,
lastname=lastname,
date_of_birth=formatted_member_birth,
female=member_is_female, # 性別を設定
is_active=False # メンバーは直接ログインしないのでFalse
)
Member.objects.create(
team=team,
user=member_user,
firstname=firstname,
lastname=lastname,
date_of_birth=formatted_member_birth,
female=member_is_female, # 性別を設定
is_temporary=True # 追加メンバーは一時的なメンバーとして設定
)
self.stdout.write(f' => メンバーを追加しました: {member_name} (性別: {member_gender})')
# 3. エントリーの作成
# イベントの実施日をエントリーに割り当て
# イベントの開始日時から日付部分のみを取得
entry_date = event.start_datetime.date() if event.start_datetime else None # イベントの実施日
entry = Entry.objects.create(
team=team,
event=event,
date=entry_date, # イベントの実施日をエントリーに割り当て
zekken_number=zekken_number,
zekken_label=zekken_label,
category=category,
owner=leader,
is_trial=is_trial # お試しフラグを設定
)
# エントリー登録完了のログ出力
self.stdout.write(f'チーム "{team_name}" をイベント "{event.event_name}" に登録しました (ゼッケン: {zekken_label}, お試し: {is_trial})')
except Exception as e:
self.stdout.write(self.style.ERROR(f'エラーが発生しました: {str(e)}'))
# エラーが発生してもスキップして続行するため、例外を再スローしない
except Exception as e:
self.stdout.write(self.style.ERROR(f'エラーが発生しました: {str(e)}'))
raise
def export_processed_entries(self, event_code):
"""処理した代表者情報をCSVファイルに出力"""
if not self.processed_entries:
self.stdout.write('処理したエントリーがありません')
return
output_file = f"{event_code}_leaders_{timezone.now().strftime('%Y%m%d_%H%M%S')}.csv"
with open(output_file, 'w', encoding='utf-8', newline='') as csvfile:
fieldnames = ['代表者名', 'チーム名', 'メールアドレス', 'パスワード']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for entry in self.processed_entries:
writer.writerow({
'代表者名': entry['leader_name'],
'チーム名': entry['team_name'],
'メールアドレス': entry['email'],
'パスワード': entry['password']
})
self.stdout.write(self.style.SUCCESS(f'代表者情報をCSVファイルに出力しました: {output_file}'))
def process_entry_old(self, row, event):
"""CSVの1行からエントリー情報を処理"""
self.stdout.write(self.style.SUCCESS(f'イベント "{event.event_name}", row="{row}"'))
try:
# 新しいCSVフォーマットに対応したインデックス
participation_time = row[0]
division = row[1]
is_trial = row[2].strip() == 'お試し' # 「お試し」フラグ
division_number = row[3]
team_name = row[4]
leader_name = row[5]
leader_kana = row[6]
password = row[7] # 新しいフィールド:パスワード
member_count = int(row[8])
zekken_label = row[9] # ゼッケンラベル
zekken_number = row[10] # ナンバー
leader_email = row[11]
leader_birth_date = row[12]
# 1. CustomUserを検索または作成
try:
leader = CustomUser.objects.get(email=leader_email)
self.stdout.write(f'既存ユーザーを代表者として使用します: {leader_email}')
except CustomUser.DoesNotExist:
# 新規ユーザーの場合はランダムパスワードを生成
import secrets
# leader_nameを空白で分離
name_parts = leader_name.split(' ', 1)
lastname = name_parts[0]
firstname = name_parts[1] if len(name_parts) > 1 else ""
leader = CustomUser.objects.create_user(
email=leader_email,
password=password,
firstname=firstname, # 名前の後半部分
lastname=lastname, # 名前の前半部分
birth_date=leader_birth_date,
is_active=True
)
self.stdout.write(f'代表者を新規作成しました: {leader_email} (パスワード: {password})')
# CSVの参加部門から対応するカテゴリーを検索
try:
category = NewCategory.objects.get(category_name=division)
self.stdout.write(f'カテゴリーを見つけました: {category.category_name}')
except NewCategory.DoesNotExist:
# カテゴリーが見つからない場合のエラーハンドリング
self.stdout.write(self.style.ERROR(f'カテゴリーが見つかりません: {division}'))
raise CommandError(f'カテゴリー "{division}" が存在しません。先にカテゴリーを作成してください。')
# 2. チームの作成とメンバーの登録
team = Team.objects.create(
team_name=team_name,
owner=leader,
category=category
)
Member.objects.create(
team=team,
user=leader,
is_leader=True,
firstname=leader.firstname,
lastname=leader.lastname,
date_of_birth=leader.date_of_birth,
is_temporary=False # 代表者は一時的なメンバーではない
)
# 追加メンバーの登録CSVの13列目以降に存在する場合
for i in range(1, min(member_count, 5) + 1): # 最大5人まで
member_name_idx = 13 + (i-1) * 2
member_birth_idx = member_name_idx + 1
if len(row) > member_name_idx and row[member_name_idx]:
member_name = row[member_name_idx]
member_birth = row[member_birth_idx] if len(row) > member_birth_idx else None
# メンバー用のユーザー作成(メールアドレスは一時的なもの)
temp_email = f"{team_name.replace(' ', '_')}_{i}@example.com"
# 既存のメンバーチェック
try:
member_user = CustomUser.objects.filter(name=member_name).first()
if not member_user:
raise CustomUser.DoesNotExist()
except CustomUser.DoesNotExist:
import secrets
member_user = CustomUser.objects.create_user(
email=temp_email,
password=secrets.token_urlsafe(12), # メンバーにはランダムパスワード
name=member_name,
birth_date=member_birth,
is_active=False # メンバーは直接ログインしないのでFalse
)
# 名前を分割(姓と名の分離)
name_parts = member_name.split(' ', 1)
firstname = name_parts[1] if len(name_parts) > 1 else ""
lastname = name_parts[0]
Member.objects.create(
team=team,
user=member_user,
is_leader=False,
firstname=firstname,
lastname=lastname,
date_of_birth=member_birth,
is_temporary=True # 追加メンバーは一時的なメンバーとして設定
)
# 3. エントリーの作成
entry = Entry.objects.create(
team=team,
event=event,
zekken_number=zekken_number,
zekken_label=zekken_label, # 新しいフィールドに設定
class_type=division,
leader=leader,
)
# スタート記録の追加
#GpsLog.record_start(entry)
self.stdout.write(f'チーム "{team_name}" を登録しました (お試し: {is_trial})')
except Exception as e:
self.stdout.write(self.style.ERROR(f'エラーが発生しました: {str(e)}'))
raise
def transfer_to_gifuroge(self, event):
"""rogdbからgifurogeデータベースへデータを転送"""
self.stdout.write('gifurogeデータベースへのデータ転送を開始します')
with connections['gifuroge'].cursor() as cursor:
try:
# 1. Event data transfer from NewEvent2 to event_table
self.stdout.write('イベントデータを転送中...')
# Extract fields from the event object
event_code = event.event_name
event_name = event.event_description or event.event_name
start_datetime = event.start_datetime
# Format start_datetime to get only the date part
event_date = start_datetime.date() if start_datetime else None
cursor.execute("""
INSERT INTO event_table
(event_code, event_name, start_time, event_day)
VALUES (%s, %s, %s, %s)
ON CONFLICT (event_code) DO UPDATE
SET event_name = %s, start_time = %s, event_day = %s
""", [
event_code, event_name, start_datetime, event_date,
event_name, start_datetime, event_date
])
self.stdout.write(f'イベント "{event_code}" を転送しました')
# 4. Locationテーブルからcheckpoint_tableへの転送
self.stdout.write('checkpointデータを転送中...')
locations = Location.objects.filter(group=event.event_name)
# Print the number of location records
location_count = locations.count()
self.stdout.write(f'checkpointデータ: {location_count}件を転送中...')
for location in locations:
# Display the cp_number, event_code, and colabo_company_memo
# self.stdout.write(f' CP: {location.cp}, Event: {event.event_name}, Memo: {"" or "(empty)"}')
cursor.execute("""
INSERT INTO checkpoint_table
(cp_number, event_code, cp_name, latitude, longitude, photo_point, buy_point, sample_photo, colabo_company_memo)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (cp_number, event_code,colabo_company_memo) DO UPDATE
SET cp_name = %s, latitude = %s, longitude = %s, photo_point = %s, buy_point = %s, sample_photo = %s, colabo_company_memo = %s
""", [
location.cp, event.event_name, location.location_name,
location.latitude, location.longitude, location.checkin_point,
location.buy_point, location.photos, '',
location.location_name, location.latitude, location.longitude,
location.checkin_point, location.buy_point, location.photos, ''
])
# If cp=-1, insert another record with cp=-2
if location.cp == -1:
cursor.execute("""
INSERT INTO checkpoint_table
(cp_number, event_code, cp_name, latitude, longitude, photo_point, buy_point, sample_photo, colabo_company_memo)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (cp_number, event_code,colabo_company_memo) DO UPDATE
SET cp_name = %s, latitude = %s, longitude = %s, photo_point = %s, buy_point = %s, sample_photo = %s, colabo_company_memo = %s
""", [
-2, event.event_name, location.location_name,
location.latitude, location.longitude, location.checkin_point,
location.buy_point, location.photos, '',
location.location_name, location.latitude, location.longitude,
location.checkin_point, location.buy_point, location.photos, ''
])
# 5. user_tableへの転送をスキップ
self.stdout.write('ユーザーデータの転送をスキップします')
# 6. Teamテーブルからteam_tableへの転送修正版
entries = Entry.objects.filter(event__event_name=event.event_name)
# Print the number of team entries
entry_count = entries.count()
self.stdout.write(f'チームデータ: {entry_count}件を転送中...')
for entry in entries:
team = entry.team
# 「お試し」かどうかを判定
is_trial = False
if hasattr(entry, 'zekken_label') and entry.zekken_label and 'お試し' in entry.zekken_label:
is_trial = True
# パスワード処理
leader = team.owner
user_password = ''
# リーダーが新規登録のユーザーかどうかを確認
if hasattr(leader, '_password') and leader._password:
user_password = leader._password
else:
# 既存のユーザーの場合はパスワードを空にする
user_password = '(existing)'
cursor.execute("""
INSERT INTO team_table
(zekken_number, event_code, team_name, class_name, password, trial)
VALUES (%s, %s, %s, %s, %s, %s)
ON CONFLICT (zekken_number, event_code) DO UPDATE
SET team_name = %s, class_name = %s, password = %s, trial = %s
""", [
entry.zekken_label, event.event_name, team.team_name,
team.category.category_name, user_password, is_trial,
team.team_name, team.category.category_name,
user_password, is_trial
])
self.stdout.write(self.style.SUCCESS('gifurogeデータベースへの転送が完了しました'))
except Exception as e:
self.stdout.write(self.style.ERROR(f'転送中にエラーが発生しました: {str(e)}'))
raise
def transfer_to_gifuroge_old(self, event):
"""rogdbからgifurogeデータベースへデータを転送"""
self.stdout.write('gifurogeデータベースへのデータ転送を開始します')
with connections['gifuroge'].cursor() as cursor:
try:
# 4. Locationテーブルからcheckpoint_tableへの転送
self.stdout.write('checkpointデータを転送中...')
locations = Location.objects.filter(event=event)
for location in locations:
cursor.execute("""
INSERT INTO checkpoint_table
(checkpoint_id, checkpoint_name, point_value, latitude, longitude, event_code)
VALUES (%s, %s, %s, %s, %s, %s)
ON CONFLICT (checkpoint_id, event_code) DO UPDATE
SET checkpoint_name = %s, point_value = %s, latitude = %s, longitude = %s
""", [
location.id, location.name, location.point_value,
location.latitude, location.longitude, event.event_name,
location.name, location.point_value,
location.latitude, location.longitude
])
# 5. CustomUserテーブルからuser_tableへの転送
self.stdout.write('ユーザーデータを転送中...')
entries = Entry.objects.filter(event=event)
users = CustomUser.objects.filter(entry__event=event).distinct()
for user in users:
cursor.execute("""
INSERT INTO user_table
(user_id, name, email, event_code)
VALUES (%s, %s, %s, %s)
ON CONFLICT (user_id, event_code) DO UPDATE
SET name = %s, email = %s
""", [
user.id, user.name, user.email, event.event_name,
user.name, user.email
])
# 6. Teamテーブルからteam_tableへの転送trialフィールドを追加
self.stdout.write('チームデータを転送中...')
teams = Team.objects.filter(entry__event=event).distinct()
for team in teams:
entry = Entry.objects.get(team=team, event=event)
# CSVで「お試し」フラグがあったかどうかを確認
# ここでは仮にTeamモデルから判断できないので別途Entry.zekken_labelとの比較などで判断
is_trial = False
try:
# お試しフラグの判定ロジックを実装
# 実際のデータ構造に基づいて修正が必要
entries_with_trial = Entry.objects.filter(
team=team, event=event
).first()
if entries_with_trial:
# ここでお試しフラグを設定する実装が必要
# 例えば特定のゼッケンラベルパターンでお試し判定など
pass
except:
is_trial = False
cursor.execute("""
INSERT INTO team_table
(team_id, team_name, class_type, zekken_number, leader_id, event_code, trial)
VALUES (%s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (team_id, event_code) DO UPDATE
SET team_name = %s, class_type = %s, zekken_number = %s, leader_id = %s, trial = %s
""", [
team.id, team.team_name, entry.class_type, entry.zekken_number,
team.leader.id, event.event_name, is_trial,
team.team_name, entry.class_type, entry.zekken_number, team.leader.id, is_trial
])
self.stdout.write(self.style.SUCCESS('gifurogeデータベースへの転送が完了しました'))
except Exception as e:
self.stdout.write(self.style.ERROR(f'転送中にエラーが発生しました: {str(e)}'))
raise

0
rog/mapping.py Normal file → Executable file
View File

0
rog/middleware/__init__.py Normal file → Executable file
View File

0
rog/middleware/ip_blocking.py Normal file → Executable file
View File

0
rog/migration_scripts.py Normal file → Executable file
View File

View File

@ -1,351 +0,0 @@
# Generated by Django 3.2.9 on 2022-05-04 15:05
from django.conf import settings
import django.contrib.gis.db.models.fields
from django.db import migrations, models
import django.db.models.deletion
import rog.models
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='JpnAdminMainPerf',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326)),
('adm0_en', models.CharField(blank=True, max_length=254, null=True)),
('adm0_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm0_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm1_en', models.CharField(blank=True, max_length=254, null=True)),
('adm1_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm1_pcode', models.CharField(blank=True, max_length=254, null=True)),
],
options={
'db_table': 'jpn_admin_main_perf',
'managed': False,
},
),
migrations.CreateModel(
name='JpnAdminPerf',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geom', django.contrib.gis.db.models.fields.MultiLineStringField(blank=True, null=True, srid=4326)),
('et_id', models.IntegerField(blank=True, null=True)),
('et_right', models.CharField(blank=True, max_length=80, null=True)),
('et_left', models.CharField(blank=True, max_length=80, null=True)),
('adm2_l', models.CharField(blank=True, max_length=50, null=True)),
('adm1_l', models.CharField(blank=True, max_length=50, null=True)),
('adm0_l', models.CharField(blank=True, max_length=50, null=True)),
('adm0_r', models.CharField(blank=True, max_length=50, null=True)),
('adm1_r', models.CharField(blank=True, max_length=50, null=True)),
('adm2_r', models.CharField(blank=True, max_length=50, null=True)),
('admlevel', models.IntegerField(blank=True, null=True)),
],
options={
'db_table': 'jpn_admin_perf',
'managed': False,
},
),
migrations.CreateModel(
name='JpnSubPerf',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326)),
('adm0_en', models.CharField(blank=True, max_length=254, null=True)),
('adm0_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm0_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm1_en', models.CharField(blank=True, max_length=254, null=True)),
('adm1_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm1_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm2_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm2_en', models.CharField(blank=True, max_length=254, null=True)),
('adm2_pcode', models.CharField(blank=True, max_length=254, null=True)),
],
options={
'db_table': 'jpn_sub_perf',
'managed': False,
},
),
migrations.CreateModel(
name='CustomUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
('is_staff', models.BooleanField(default=False)),
('is_active', models.BooleanField(default=False)),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
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 id')),
('location_name', models.CharField(default='--- 場所をお願いします --', 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')),
('latitude', models.FloatField(blank=True, null=True, verbose_name='Latitude')),
('longitude', models.FloatField(blank=True, null=True, verbose_name='Latitude')),
('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='Portal')),
('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Group')),
('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phone')),
('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Fax')),
('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='Facility')),
('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Remarks')),
('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.MultiPointField(srid=4326)),
('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='location_updated_user', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='ShapeLayers',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255, verbose_name='Shape Layer')),
('file', models.FileField(blank=True, upload_to=rog.models.get_file_path)),
('uploaded_date', models.DateField(auto_now_add=True)),
('layerof', models.IntegerField(choices=[(1, 'location'), (2, 'Location_line'), (3, 'Location_polygon')], default=1)),
('table_name', models.CharField(blank=True, max_length=255, verbose_name='Table name')),
],
),
migrations.CreateModel(
name='TestModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('testbane', models.CharField(max_length=355, verbose_name='test field')),
('wanttogo', models.BooleanField(default=False)),
('like', models.BooleanField(default=False)),
('checkin', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_updated_at', models.DateTimeField(auto_now=True)),
],
),
migrations.CreateModel(
name='TravelList',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('travel_id', models.IntegerField(verbose_name='Travel Id')),
('start_date', models.DateTimeField(blank=True, null=True, verbose_name='Start date')),
('finish_date', models.DateTimeField(blank=True, null=True, verbose_name='End date')),
('category', models.CharField(choices=[('PRIVATE', 'Private'), ('GROUP', 'Group'), ('AGENT', 'Agent'), ('ROGAINING', 'Rogaining')], max_length=256)),
('title', models.CharField(max_length=255, verbose_name='Title')),
('transportation', models.CharField(blank=True, max_length=255, null=True, verbose_name='Transpotation')),
('moving_distance', models.IntegerField(blank=True, null=True)),
('duration', models.DurationField(blank=True, null=True, verbose_name='Duration')),
('eta', models.DateTimeField(blank=True, null=True)),
('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)),
('last_updated_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='travel_list_updated_user', to=settings.AUTH_USER_MODEL)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Useractions',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('wanttogo', models.BooleanField(default=False)),
('like', models.BooleanField(default=False)),
('checkin', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_updated_at', models.DateTimeField(auto_now=True)),
('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='action_location', to='rog.location')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='action_user', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='TravelPoint',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('distance', models.FloatField(blank=True, null=True)),
('transportation', models.CharField(blank=True, max_length=255, null=True, verbose_name='Transpotation')),
('eta', models.DateTimeField(blank=True, null=True)),
('order_number', models.IntegerField(blank=True, null=True)),
('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)),
('last_updated_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='travelpoint_updated_user', to=settings.AUTH_USER_MODEL)),
('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.location')),
('travel_list', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='rog.travellist')),
],
),
migrations.CreateModel(
name='SystemSettings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('setting_name', models.CharField(max_length=255, verbose_name='Settings Name')),
('version', models.CharField(blank=True, max_length=10, null=True, verbose_name='Version')),
('effective_date', models.DateTimeField()),
('end_date', models.DateTimeField()),
('parammeters', models.CharField(max_length=512, verbose_name='Parameters')),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_updated_at', models.DateTimeField(auto_now=True)),
('last_updated_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='system_setting_updated_user', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='RogUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254, verbose_name='Email')),
('phone', models.CharField(max_length=55, verbose_name='Phone Number')),
('first_name', models.CharField(max_length=255, verbose_name='First Name')),
('middle_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='Middle Name')),
('last_name', models.CharField(max_length=255, verbose_name='last_name')),
('nickname', models.CharField(blank=True, max_length=255, null=True, verbose_name='Nickname')),
('country', models.CharField(default='Japan', max_length=255, verbose_name='Country')),
('language', models.CharField(default='Japanese', max_length=255, verbose_name='Language')),
('prefecture', models.CharField(blank=True, max_length=255, null=True, verbose_name='Prefecture')),
('sex', models.CharField(blank=True, default='unknown', max_length=255, null=True, verbose_name='Sex')),
('birthyear', models.IntegerField(blank=True, null=True, verbose_name='Birth year')),
('family_structure', models.IntegerField(blank=True, null=True, verbose_name='Family Structure')),
('level', models.IntegerField(blank=True, default=0, null=True, verbose_name='Level')),
('parammeters', models.CharField(max_length=512, verbose_name='Parameters')),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_updated_at', models.DateTimeField(auto_now=True)),
('introducer', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='introduced_uesr', to=settings.AUTH_USER_MODEL)),
('last_updated_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='roguser_updated_user', to=settings.AUTH_USER_MODEL)),
('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='Portal')),
('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Group')),
('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phone')),
('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Fax')),
('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='Facility')),
('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Remarks')),
('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='Portal')),
('group', models.CharField(blank=True, max_length=255, null=True, verbose_name='Group')),
('phone', models.CharField(blank=True, max_length=255, null=True, verbose_name='Phone')),
('fax', models.CharField(blank=True, max_length=255, null=True, verbose_name='Fax')),
('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='Facility')),
('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Remarks')),
('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=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('tagname', models.CharField(blank=True, max_length=255, null=True, verbose_name='Tag Name')),
('status', models.CharField(choices=[('REGISTERED', 'Registered'), ('ACCEPTED', 'accepted'), ('PAID', 'paid'), ('JOINED', 'joined'), ('CANCELED', 'Canceled')], max_length=256)),
('registrationid', models.CharField(max_length=56, verbose_name='Registration Id')),
('payment_code', models.CharField(max_length=255, verbose_name='Payment Code')),
('paid', models.IntegerField(default=0, verbose_name='Paid Amount')),
('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='Remark')),
('parammeters', models.CharField(max_length=512, verbose_name='Parameters')),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_updated_at', models.DateTimeField(auto_now=True)),
('last_updated_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='joined_event_updated_user', to=settings.AUTH_USER_MODEL)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Favorite',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('good', models.IntegerField(default=0, verbose_name='Good')),
('favorite', models.IntegerField(default=0, verbose_name='Favorite')),
('evaluation', models.IntegerField(default=0, verbose_name='Evaluation')),
('number_visit', models.IntegerField(default=0, verbose_name='Good')),
('last_visited', models.DateTimeField(blank=True, null=True, verbose_name='Last Visited')),
('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)),
('last_updated_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='favorite_updated_user', to=settings.AUTH_USER_MODEL)),
('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.location')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Event',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('tagname', models.CharField(blank=True, max_length=512, null=True, verbose_name='Parameters')),
('status', models.CharField(choices=[('PREPARING', 'Preparing'), ('PROMOTION', 'Promotion'), ('EVENT', 'Event'), ('END', 'End')], max_length=256)),
('price', models.IntegerField(default=0, verbose_name='Paid Amount')),
('promotion_date', models.DateTimeField(blank=True, null=True, verbose_name='Promotion date')),
('event_start', models.DateTimeField(blank=True, null=True, verbose_name='Promotion date')),
('event_end', models.DateTimeField(blank=True, null=True, verbose_name='Promotion date')),
('remark', models.CharField(blank=True, max_length=256, null=True)),
('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)),
('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='event_updated_user', to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-05-11 11:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='useractions',
name='order',
field=models.IntegerField(default=-1),
),
migrations.AlterField(
model_name='customuser',
name='is_active',
field=models.BooleanField(default=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-05-11 17:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0002_auto_20220511_2017'),
]
operations = [
migrations.AlterField(
model_name='useractions',
name='order',
field=models.IntegerField(default=0),
),
]

View File

@ -1,55 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-05 15:23
import django.contrib.gis.db.models.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0003_alter_useractions_order'),
]
operations = [
migrations.CreateModel(
name='GifuAreas',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326)),
('adm0_en', models.CharField(blank=True, max_length=254, null=True)),
('adm0_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm0_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm1_en', models.CharField(blank=True, max_length=254, null=True)),
('adm1_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm1_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm2_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm2_en', models.CharField(blank=True, max_length=254, null=True)),
('adm2_pcode', models.CharField(blank=True, max_length=254, null=True)),
('area_nm', models.CharField(blank=True, max_length=254, null=True)),
],
options={
'db_table': 'gifu_areas',
'managed': False,
},
),
migrations.AddField(
model_name='location',
name='auto_checkin',
field=models.BooleanField(default=False, verbose_name='Is Autologin'),
),
migrations.AddField(
model_name='location',
name='checkin_radious',
field=models.IntegerField(blank=True, null=True, verbose_name='Checkin Radious'),
),
migrations.AddField(
model_name='location',
name='event_active',
field=models.BooleanField(default=True, verbose_name='Is Autologin'),
),
migrations.AddField(
model_name='location',
name='event_name',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Tags'),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-06 06:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0004_auto_20220606_0023'),
]
operations = [
migrations.AlterField(
model_name='location',
name='event_active',
field=models.BooleanField(default=True, verbose_name='Is Event active'),
),
migrations.AlterField(
model_name='location',
name='event_name',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Event name'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-07 13:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0005_auto_20220606_1523'),
]
operations = [
migrations.AddField(
model_name='location',
name='paid',
field=models.BooleanField(default=False, verbose_name='Is Paid'),
),
]

View File

@ -1,22 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-07 13:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0006_location_paid'),
]
operations = [
migrations.RemoveField(
model_name='location',
name='paid',
),
migrations.AddField(
model_name='roguser',
name='paid',
field=models.BooleanField(default=False, verbose_name='Is Paid'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-07 13:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0007_auto_20220607_2207'),
]
operations = [
migrations.AlterField(
model_name='roguser',
name='parammeters',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Parameters'),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-07 14:24
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('rog', '0008_alter_roguser_parammeters'),
]
operations = [
migrations.RemoveField(
model_name='roguser',
name='email',
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-10 06:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0009_remove_roguser_email'),
]
operations = [
migrations.AddField(
model_name='useractions',
name='checkinimage',
field=models.FileField(blank=True, null=True, upload_to='%y%m%d'),
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-12 18:11
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 = [
('rog', '0010_useractions_checkinimage'),
]
operations = [
migrations.CreateModel(
name='UserTracks',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geom', django.contrib.gis.db.models.fields.MultiPointField(srid=4326)),
('created_at', models.DateTimeField(auto_now_add=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,113 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-13 08:58
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0011_usertracks'),
]
operations = [
migrations.AlterField(
model_name='location',
name='address',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Address'),
),
migrations.AlterField(
model_name='location',
name='area',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Area'),
),
migrations.AlterField(
model_name='location',
name='category',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Category'),
),
migrations.AlterField(
model_name='location',
name='city',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='City'),
),
migrations.AlterField(
model_name='location',
name='email',
field=models.EmailField(blank=True, max_length=2048, null=True, verbose_name='Email'),
),
migrations.AlterField(
model_name='location',
name='event_name',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Event name'),
),
migrations.AlterField(
model_name='location',
name='facility',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Facility'),
),
migrations.AlterField(
model_name='location',
name='fax',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Fax'),
),
migrations.AlterField(
model_name='location',
name='group',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Group'),
),
migrations.AlterField(
model_name='location',
name='location_name',
field=models.CharField(default='--- 場所をお願いします --', max_length=2048, verbose_name='Location Name'),
),
migrations.AlterField(
model_name='location',
name='parammeters',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Parameters'),
),
migrations.AlterField(
model_name='location',
name='phone',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Phone'),
),
migrations.AlterField(
model_name='location',
name='photos',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Phptos'),
),
migrations.AlterField(
model_name='location',
name='portal',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Portal'),
),
migrations.AlterField(
model_name='location',
name='prefecture',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Prefecture'),
),
migrations.AlterField(
model_name='location',
name='remark',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Remarks'),
),
migrations.AlterField(
model_name='location',
name='status',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Status'),
),
migrations.AlterField(
model_name='location',
name='tags',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Tags'),
),
migrations.AlterField(
model_name='location',
name='videos',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Videos'),
),
migrations.AlterField(
model_name='location',
name='webcontents',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Web Content'),
),
]

View File

@ -1,88 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-18 09:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0012_auto_20220613_1758'),
]
operations = [
migrations.AddField(
model_name='location',
name='buy_point',
field=models.IntegerField(blank=True, default=0, null=True, verbose_name='buy Point'),
),
migrations.AddField(
model_name='location',
name='checkin_point',
field=models.IntegerField(blank=True, default=10, null=True, verbose_name='Checkin Point'),
),
migrations.AddField(
model_name='location',
name='checkin_radius',
field=models.IntegerField(blank=True, default=15, null=True, verbose_name='Checkin radious'),
),
migrations.AddField(
model_name='location',
name='evaluation_value',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Evaluation value (評価)'),
),
migrations.AddField(
model_name='location',
name='hidden_location',
field=models.BooleanField(default=False, verbose_name='Is Hidden Location'),
),
migrations.AddField(
model_name='location',
name='opening_hours_fri',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours frinday (金曜)'),
),
migrations.AddField(
model_name='location',
name='opening_hours_mon',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours monday (月曜)'),
),
migrations.AddField(
model_name='location',
name='opening_hours_sat',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours saturday (土曜)'),
),
migrations.AddField(
model_name='location',
name='opening_hours_sun',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours sunday (日曜)'),
),
migrations.AddField(
model_name='location',
name='opening_hours_thu',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours thursday (木曜)'),
),
migrations.AddField(
model_name='location',
name='opening_hours_tue',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours tuesday (火曜)'),
),
migrations.AddField(
model_name='location',
name='opening_hours_wed',
field=models.TimeField(blank=True, null=True, verbose_name='Opening hours wednesday (水曜)'),
),
migrations.AddField(
model_name='location',
name='shop_closed',
field=models.BooleanField(default=False, verbose_name='Shop Closed (休業)'),
),
migrations.AddField(
model_name='location',
name='shop_shutdown',
field=models.BooleanField(default=False, null=True, verbose_name='Shop Shutdown (閉業)'),
),
migrations.AlterField(
model_name='location',
name='auto_checkin',
field=models.BooleanField(default=False, verbose_name='Is AutoCheckin'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-18 09:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0013_auto_20220618_1847'),
]
operations = [
migrations.AlterField(
model_name='location',
name='shop_shutdown',
field=models.BooleanField(default=False, verbose_name='Shop Shutdown (閉業)'),
),
]

View File

@ -1,57 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-19 07:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0014_alter_location_shop_shutdown'),
]
operations = [
migrations.RemoveField(
model_name='location',
name='checkin_radious',
),
migrations.AlterField(
model_name='location',
name='opening_hours_fri',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours frinday (金曜)'),
),
migrations.AlterField(
model_name='location',
name='opening_hours_mon',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours monday (月曜)'),
),
migrations.AlterField(
model_name='location',
name='opening_hours_sat',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours saturday (土曜)'),
),
migrations.AlterField(
model_name='location',
name='opening_hours_sun',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours sunday (日曜)'),
),
migrations.AlterField(
model_name='location',
name='opening_hours_thu',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours thursday (木曜)'),
),
migrations.AlterField(
model_name='location',
name='opening_hours_tue',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours tuesday (火曜)'),
),
migrations.AlterField(
model_name='location',
name='opening_hours_wed',
field=models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours wednesday (水曜)'),
),
migrations.AlterField(
model_name='location',
name='photos',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Photos'),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 3.2.9 on 2022-06-21 09:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0015_auto_20220619_1611'),
]
operations = [
migrations.CreateModel(
name='ShapeFileLocations',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('shapefile', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Shapelayer')),
('locid', models.IntegerField(blank=True, null=True)),
],
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-07-25 07:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0016_shapefilelocations'),
]
operations = [
migrations.AddField(
model_name='location',
name='cp',
field=models.IntegerField(blank=True, null=True, verbose_name='Check Point'),
),
migrations.AddField(
model_name='location',
name='subcategory',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Sub Category'),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-16 07:16
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0017_auto_20220725_1605'),
]
operations = [
migrations.AddField(
model_name='location',
name='sub_loc_id',
field=models.IntegerField(blank=True, null=True, verbose_name='Sub location id'),
),
migrations.AlterField(
model_name='location',
name='cp',
field=models.FloatField(blank=True, null=True, verbose_name='Check Point'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-16 07:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0018_auto_20220816_1616'),
]
operations = [
migrations.AlterField(
model_name='location',
name='checkin_radius',
field=models.FloatField(blank=True, default=15.0, null=True, verbose_name='Checkin radious'),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-16 07:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0019_alter_location_checkin_radius'),
]
operations = [
migrations.AlterField(
model_name='location',
name='buy_point',
field=models.FloatField(blank=True, default=0, null=True, verbose_name='buy Point'),
),
migrations.AlterField(
model_name='location',
name='checkin_point',
field=models.FloatField(blank=True, default=10, null=True, verbose_name='Checkin Point'),
),
]

View File

@ -1,69 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-17 05:48
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 = [
('rog', '0020_auto_20220816_1627'),
]
operations = [
migrations.CreateModel(
name='templocation',
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')),
('sub_loc_id', models.IntegerField(blank=True, null=True, verbose_name='Sub location id')),
('cp', models.FloatField(blank=True, null=True, verbose_name='Check Point')),
('location_name', models.CharField(default='--- 場所をお願いします --', max_length=2048, verbose_name='Location Name')),
('category', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Category')),
('subcategory', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Sub Category')),
('zip', models.CharField(blank=True, max_length=12, null=True, verbose_name='Zip code')),
('address', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Address')),
('prefecture', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Prefecture')),
('area', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Area')),
('city', models.CharField(blank=True, max_length=2048, null=True, verbose_name='City')),
('latitude', models.FloatField(blank=True, null=True, verbose_name='Latitude')),
('longitude', models.FloatField(blank=True, null=True, verbose_name='Latitude')),
('photos', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Photos')),
('videos', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Videos')),
('webcontents', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Web Content')),
('status', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Status')),
('portal', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Portal')),
('group', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Group')),
('phone', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Phone')),
('fax', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Fax')),
('email', models.EmailField(blank=True, max_length=2048, null=True, verbose_name='Email')),
('facility', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Facility')),
('remark', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Remarks')),
('tags', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Tags')),
('event_name', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Event name')),
('event_active', models.BooleanField(default=True, verbose_name='Is Event active')),
('hidden_location', models.BooleanField(default=False, verbose_name='Is Hidden Location')),
('auto_checkin', models.BooleanField(default=False, verbose_name='Is AutoCheckin')),
('checkin_radius', models.FloatField(blank=True, default=15.0, null=True, verbose_name='Checkin radious')),
('checkin_point', models.FloatField(blank=True, default=10, null=True, verbose_name='Checkin Point')),
('buy_point', models.FloatField(blank=True, default=0, null=True, verbose_name='buy Point')),
('evaluation_value', models.CharField(blank=True, max_length=2048, null=True, verbose_name='Evaluation value (評価)')),
('shop_closed', models.BooleanField(default=False, verbose_name='Shop Closed (休業)')),
('shop_shutdown', models.BooleanField(default=False, verbose_name='Shop Shutdown (閉業)')),
('opening_hours_mon', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours monday (月曜)')),
('opening_hours_tue', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours tuesday (火曜)')),
('opening_hours_wed', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours wednesday (水曜)')),
('opening_hours_thu', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours thursday (木曜)')),
('opening_hours_fri', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours frinday (金曜)')),
('opening_hours_sat', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours saturday (土曜)')),
('opening_hours_sun', models.CharField(blank=True, max_length=512, null=True, verbose_name='Opening hours sunday (日曜)')),
('parammeters', models.CharField(blank=True, max_length=2048, 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.MultiPointField(srid=4326)),
('last_updated_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='temp_location_updated_user', to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-22 14:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0021_templocation'),
]
operations = [
migrations.AlterField(
model_name='shapelayers',
name='layerof',
field=models.IntegerField(choices=[(1, 'templocation'), (2, 'Location_line'), (3, 'Location_polygon')], default=1),
),
migrations.AlterField(
model_name='templocation',
name='cp',
field=models.FloatField(default=0, null=True, verbose_name='Check Point'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-22 14:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0022_auto_20220822_2319'),
]
operations = [
migrations.AlterField(
model_name='location',
name='cp',
field=models.FloatField(default=0, null=True, verbose_name='Check Point'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-29 14:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0023_alter_location_cp'),
]
operations = [
migrations.AddField(
model_name='customuser',
name='group',
field=models.CharField(choices=[('G1', '大垣-初心者'), ('G2', '大垣-3時間'), ('G3', '大垣-5時間')], default='G1', max_length=2),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-30 05:26
from django.db import migrations, models
import rog.models
class Migration(migrations.Migration):
dependencies = [
('rog', '0024_customuser_group'),
]
operations = [
migrations.CreateModel(
name='UserUpload',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255, verbose_name='User uploads')),
('file', models.FileField(blank=True, upload_to=rog.models.get_file_path)),
('uploaded_date', models.DateField(auto_now_add=True)),
],
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-30 10:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0025_userupload'),
]
operations = [
migrations.CreateModel(
name='UserUploadUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('userfile', models.CharField(blank=True, max_length=2048, null=True, verbose_name='User file')),
('email', models.CharField(max_length=255, verbose_name='User Email')),
],
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-30 10:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0026_useruploaduser'),
]
operations = [
migrations.AlterField(
model_name='customuser',
name='group',
field=models.CharField(choices=[('G1', '大垣-初心者'), ('G2', '大垣-3時間'), ('G3', '大垣-5時間')], default='G1', max_length=255),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-30 10:58
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0027_alter_customuser_group'),
]
operations = [
migrations.AlterField(
model_name='customuser',
name='group',
field=models.CharField(choices=[('大垣-初心者', '大垣-初心者'), ('大垣-3時間', '大垣-3時間'), ('大垣-5時間', '大垣-5時間')], default='大垣-初心者', max_length=255),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-31 04:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0028_alter_customuser_group'),
]
operations = [
migrations.AddField(
model_name='customuser',
name='area',
field=models.CharField(default='city', max_length=255),
preserve_default=False,
),
migrations.AddField(
model_name='customuser',
name='cities',
field=models.CharField(blank=True, max_length=255, null=True),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-31 05:40
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('rog', '0029_auto_20220831_1317'),
]
operations = [
migrations.RemoveField(
model_name='customuser',
name='area',
),
migrations.RemoveField(
model_name='customuser',
name='cities',
),
]

View File

@ -1,28 +0,0 @@
# Generated by Django 3.2.9 on 2022-08-31 13:44
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('rog', '0030_auto_20220831_1440'),
]
operations = [
migrations.CreateModel(
name='EventUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='event', to='rog.event')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='event',
name='user',
field=models.ManyToManyField(related_name='even', through='rog.EventUser', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.9 on 2022-09-07 09:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0031_auto_20220831_2244'),
]
operations = [
migrations.AlterField(
model_name='location',
name='sub_loc_id',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Sub location id'),
),
]

View File

@ -1,274 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-24 05:31
import datetime
from django.conf import settings
import django.contrib.postgres.indexes
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import uuid
class Migration(migrations.Migration):
dependencies = [
('rog', '0032_alter_location_sub_loc_id'),
]
operations = [
migrations.CreateModel(
name='Category',
fields=[
('category_name', models.CharField(max_length=255, primary_key=True, serialize=False)),
('category_number', models.IntegerField(unique=True)),
('duration', models.DurationField(default=datetime.timedelta(seconds=18000))),
('num_of_member', models.IntegerField(default=1)),
('family', models.BooleanField(default=False)),
('female', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='CheckinImages',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('checkinimage', models.FileField(blank=True, null=True, upload_to='checkin/%y%m%d')),
('checkintime', models.DateTimeField(verbose_name='Goal time')),
('team_name', models.CharField(max_length=255, verbose_name='Team name')),
('event_code', models.CharField(max_length=255, verbose_name='event code')),
('cp_number', models.IntegerField(verbose_name='CP numner')),
],
),
migrations.CreateModel(
name='Entry',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateTimeField()),
],
),
migrations.CreateModel(
name='EntryMember',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('is_temporary', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='GoalImages',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('goalimage', models.FileField(blank=True, null=True, upload_to='goals/%y%m%d')),
('goaltime', models.DateTimeField(verbose_name='Goal time')),
('team_name', models.CharField(max_length=255, verbose_name='Team name')),
('event_code', models.CharField(max_length=255, verbose_name='event code')),
('cp_number', models.IntegerField(verbose_name='CP numner')),
],
),
migrations.CreateModel(
name='Member',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('is_temporary', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='NewEvent',
fields=[
('event_name', models.CharField(max_length=255, primary_key=True, serialize=False)),
('start_datetime', models.DateTimeField(default=django.utils.timezone.now)),
('end_datetime', models.DateTimeField()),
],
),
migrations.CreateModel(
name='Team',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('zekken_number', models.CharField(max_length=255, unique=True)),
('team_name', models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name='TempUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254, unique=True)),
('password', models.CharField(max_length=128)),
('is_rogaining', models.BooleanField(default=False)),
('zekken_number', models.CharField(blank=True, max_length=255, null=True)),
('event_code', models.CharField(blank=True, max_length=255, null=True)),
('team_name', models.CharField(blank=True, max_length=255, null=True)),
('group', models.CharField(max_length=255)),
('firstname', models.CharField(blank=True, max_length=255, null=True)),
('lastname', models.CharField(blank=True, max_length=255, null=True)),
('date_of_birth', models.DateField(blank=True, null=True)),
('female', models.BooleanField(default=False)),
('verification_code', models.UUIDField(default=uuid.uuid4, editable=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('expires_at', models.DateTimeField()),
],
),
migrations.DeleteModel(
name='JpnAdminPerf',
),
migrations.DeleteModel(
name='JpnSubPerf',
),
migrations.AddField(
model_name='customuser',
name='date_of_birth',
field=models.DateField(blank=True, null=True),
),
migrations.AddField(
model_name='customuser',
name='event_code',
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Event Code'),
),
migrations.AddField(
model_name='customuser',
name='female',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='customuser',
name='firstname',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name='customuser',
name='is_rogaining',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='customuser',
name='lastname',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name='customuser',
name='team_name',
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Team Name'),
),
migrations.AddField(
model_name='customuser',
name='zekken_number',
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Zekken Number'),
),
migrations.AlterField(
model_name='customuser',
name='email',
field=models.CharField(max_length=255, unique=True, verbose_name='Email'),
),
migrations.AlterField(
model_name='location',
name='category',
field=models.CharField(blank=True, db_index=True, max_length=2048, null=True, verbose_name='Category'),
),
migrations.AlterField(
model_name='location',
name='event_active',
field=models.BooleanField(db_index=True, default=True, verbose_name='Is Event active'),
),
migrations.AlterField(
model_name='location',
name='event_name',
field=models.CharField(blank=True, db_index=True, max_length=2048, null=True, verbose_name='Event name'),
),
migrations.AlterField(
model_name='location',
name='group',
field=models.CharField(blank=True, db_index=True, max_length=2048, null=True, verbose_name='Group'),
),
migrations.AlterField(
model_name='location',
name='location_id',
field=models.IntegerField(blank=True, db_index=True, null=True, verbose_name='Location id'),
),
migrations.AlterField(
model_name='templocation',
name='sub_loc_id',
field=models.CharField(blank=True, max_length=2048, null=True, verbose_name='Sub location id'),
),
migrations.AddIndex(
model_name='location',
index=django.contrib.postgres.indexes.GistIndex(fields=['geom'], name='rog_locatio_geom_4793cc_gist'),
),
migrations.AddField(
model_name='team',
name='category',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='rog.category'),
),
migrations.AddField(
model_name='team',
name='owner',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='owned_teams', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='member',
name='team',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.team'),
),
migrations.AddField(
model_name='member',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='goalimages',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='entrymember',
name='entry',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.entry'),
),
migrations.AddField(
model_name='entrymember',
name='member',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.member'),
),
migrations.AddField(
model_name='entry',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.category'),
),
migrations.AddField(
model_name='entry',
name='event',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.newevent'),
),
migrations.AddField(
model_name='entry',
name='owner',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='entry',
name='team',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.team'),
),
migrations.AddField(
model_name='checkinimages',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
),
migrations.AlterUniqueTogether(
name='category',
unique_together={('category_name', 'category_number')},
),
migrations.AlterUniqueTogether(
name='team',
unique_together={('zekken_number', 'category')},
),
migrations.AlterUniqueTogether(
name='member',
unique_together={('team', 'user')},
),
migrations.AlterUniqueTogether(
name='entrymember',
unique_together={('entry', 'member')},
),
migrations.AlterUniqueTogether(
name='entry',
unique_together={('team', 'event', 'date', 'owner')},
),
]

View File

@ -1,34 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-24 06:22
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0033_auto_20240724_1431'),
]
operations = [
migrations.AlterField(
model_name='category',
name='category_number',
field=models.IntegerField(default=0),
),
migrations.CreateModel(
name='NewCategory',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('category_name', models.CharField(max_length=255, unique=True)),
('category_number', models.IntegerField(default=0)),
('duration', models.DurationField(default=datetime.timedelta(seconds=18000))),
('num_of_member', models.IntegerField(default=1)),
('family', models.BooleanField(default=False)),
('female', models.BooleanField(default=False)),
],
options={
'unique_together': {('category_name', 'category_number')},
},
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-24 06:29
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('rog', '0034_auto_20240724_1522'),
]
operations = [
migrations.CreateModel(
name='NewEvent2',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('event_name', models.CharField(max_length=255, unique=True)),
('start_datetime', models.DateTimeField(default=django.utils.timezone.now)),
('end_datetime', models.DateTimeField()),
],
),
migrations.AlterField(
model_name='entry',
name='event',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.newevent2'),
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-24 06:58
from django.db import migrations, models
import django.db.models.deletion
import rog.models
class Migration(migrations.Migration):
dependencies = [
('rog', '0035_auto_20240724_1529'),
]
operations = [
migrations.AlterField(
model_name='team',
name='category',
field=models.ForeignKey(default=rog.models.get_default_category, on_delete=django.db.models.deletion.SET_DEFAULT, to='rog.newcategory'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-24 15:20
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('rog', '0036_alter_team_category'),
]
operations = [
migrations.AlterField(
model_name='member',
name='team',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='members', to='rog.team'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-25 01:21
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('rog', '0037_alter_member_team'),
]
operations = [
migrations.AlterField(
model_name='entry',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rog.newcategory'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 3.2.9 on 2024-07-26 06:08
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('rog', '0038_alter_entry_category'),
]
operations = [
migrations.AddField(
model_name='customuser',
name='date_joined',
field=models.DateTimeField(default=django.utils.timezone.now),
),
migrations.AlterField(
model_name='customuser',
name='email',
field=models.EmailField(max_length=254, unique=True),
),
migrations.AlterField(
model_name='customuser',
name='group',
field=models.CharField(blank=True, max_length=255),
),
]

View File

@ -1,33 +0,0 @@
# Generated by Django 3.2.9 on 2024-08-01 08:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0039_auto_20240726_1508'),
]
operations = [
migrations.AddField(
model_name='member',
name='date_of_birth',
field=models.DateField(blank=True, null=True),
),
migrations.AddField(
model_name='member',
name='female',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='member',
name='firstname',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name='member',
name='lastname',
field=models.CharField(blank=True, max_length=255, null=True),
),
]

View File

@ -1,37 +0,0 @@
# Generated by Django 3.2.9 on 2024-08-02 15:11
import django.contrib.gis.db.models.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rog', '0040_auto_20240801_1729'),
]
operations = [
migrations.CreateModel(
name='JpnSubPerf',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('geom', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326)),
('adm0_en', models.CharField(blank=True, max_length=254, null=True)),
('adm0_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm0_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm1_en', models.CharField(blank=True, max_length=254, null=True)),
('adm1_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm1_pcode', models.CharField(blank=True, max_length=254, null=True)),
('adm2_ja', models.CharField(blank=True, max_length=254, null=True)),
('adm2_en', models.CharField(blank=True, max_length=254, null=True)),
('adm2_pcode', models.CharField(blank=True, max_length=254, null=True)),
('name_modified', models.CharField(blank=True, max_length=254, null=True)),
('area_name', models.CharField(blank=True, max_length=254, null=True)),
('list_order', models.IntegerField(default=0)),
],
options={
'db_table': 'jpn_sub_perf',
'managed': False,
},
),
]

0
rog/migrations_backup/__init__.py Normal file → Executable file
View File

143
rog/models.py Normal file → Executable file
View File

@ -422,6 +422,7 @@ class Entry(models.Model):
date = models.DateTimeField()
owner = models.ForeignKey(CustomUser, on_delete=models.CASCADE,blank=True, null=True) # Akira 2024-7-24
zekken_number = models.IntegerField(default=0)
zekken_label = models.CharField(max_length=255, blank=True, null=True)
is_active = models.BooleanField(default=True) # 新しく追加
hasParticipated = models.BooleanField(default=False) # 新しく追加
hasGoaled = models.BooleanField(default=False) # 新しく追加
@ -1402,3 +1403,145 @@ def publish_data(sender, instance, created, **kwargs):
insertUserUploadUser(instance.name, fields)
except Exception as e:
print('######## user csv file ##########',e)
# for upper compatible
# 既存のモデルに追加=> 通過記録に相応しい名称に変更すべき
class GpsLog(models.Model):
"""
GPSチェックイン情報を管理するモデル
gps_informationテーブルに対応
"""
serial_number = models.IntegerField(null=False)
# 新規追加
entry = models.ForeignKey(Entry, on_delete=models.CASCADE, related_name='checkpoints')
# Entry へ移行
zekken_number = models.TextField(null=False)
event_code = models.TextField(null=False)
cp_number = models.TextField(null=True, blank=True)
image_address = models.TextField(null=True, blank=True)
# 新規追加
checkin_time = models.DateTimeField(auto_now_add=True)
goal_time = models.TextField(null=True, blank=True)
late_point = models.IntegerField(null=True, blank=True)
create_at = models.DateTimeField(null=True, blank=True)
create_user = models.TextField(null=True, blank=True)
update_at = models.DateTimeField(null=True, blank=True)
update_user = models.TextField(null=True, blank=True)
buy_flag = models.BooleanField(null=True, blank=True)
minus_photo_flag = models.BooleanField(null=True, blank=True)
colabo_company_memo = models.TextField(null=False, default='')
# 新規追加
is_service_checked = models.BooleanField(default=False)
# ゴール記録用に追加
score = models.IntegerField(default=0, null=True, blank=True)
scoreboard_url = models.URLField(blank=True, null=True)
class Meta:
db_table = 'gps_information'
# 複合主キーの設定
unique_together = [['serial_number', 'zekken_number', 'event_code', 'colabo_company_memo']]
# インデックスの設定(必要に応じて)
indexes = [
models.Index(fields=['zekken_number', 'event_code'], name='gpslog_zekken_event_idx'),
models.Index(fields=['create_at'], name='gpslog_create_at_idx'),
]
def __str__(self):
return f"{self.event_code}-{self.zekken_number}-{self.serial_number}"
@classmethod
def record_start(cls, entry):
"""
チームのスタート情報を記録する
以前はTeamStartモデルが担当していた機能
"""
return cls.objects.create(
serial_number=0, # スタートログを表す特別な値
entry=entry,
zekken_number=entry.zekken_number,
event_code=entry.event.event_name,
cp_number="START",
create_at=timezone.now(),
update_at=timezone.now(),
buy_flag=False,
colabo_company_memo=""
)
@classmethod
def record_goal(cls, entry, goal_time=None, image_url=None, score=0, scoreboard_url=None):
"""
チームのゴール情報を記録する
以前はTeamGoalモデルが担当していた機能
"""
if goal_time is None:
goal_time = timezone.now()
return cls.objects.create(
serial_number=9999, # ゴールログを表す特別な値
entry=entry,
zekken_number=entry.zekken_number,
event_code=entry.event.event_name,
cp_number="GOAL",
image_address=image_url,
create_at=goal_time,
update_at=timezone.now(),
goal_time=goal_time.strftime('%Y-%m-%d %H:%M:%S'),
buy_flag=False,
score=score,
scoreboard_url=scoreboard_url,
colabo_company_memo=""
)
def is_start_record(self):
"""このレコードがスタート記録かどうかを判定"""
return self.cp_number == "START" and self.serial_number == 0
def is_goal_record(self):
"""このレコードがゴール記録かどうかを判定"""
return self.cp_number == "GOAL" and self.serial_number == 9999
@property
def start_time(self):
"""スタート時刻を返すTeamStartとの互換性のため"""
return self.create_at or self.checkin_time
@property
def goal_datetime(self):
"""ゴール時刻をDateTimeとして返すTeamGoalとの互換性のため"""
if self.is_goal_record() and self.create_at:
return self.create_at
return None
class Waypoint(models.Model):
entry = models.ForeignKey('Entry', on_delete=models.CASCADE, related_name='waypoints')
latitude = models.FloatField()
longitude = models.FloatField()
altitude = models.FloatField(null=True, blank=True)
accuracy = models.FloatField(null=True, blank=True)
speed = models.FloatField(null=True, blank=True)
recorded_at = models.DateTimeField()
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['recorded_at']
indexes = [
models.Index(fields=['entry', 'recorded_at']),
]
def __str__(self):
return f"{self.entry.team_name} - {self.recorded_at.strftime('%Y-%m-%d %H:%M:%S')}"

0
rog/permissions.py Normal file → Executable file
View File

0
rog/postgres_views.sql Normal file → Executable file
View File

3
rog/serializers.py Normal file → Executable file
View File

@ -441,7 +441,8 @@ class EntrySerializer(serializers.ModelSerializer):
event = serializers.PrimaryKeyRelatedField(queryset=NewEvent2.objects.all())
category = serializers.PrimaryKeyRelatedField(queryset=NewCategory.objects.all())
owner = serializers.PrimaryKeyRelatedField(read_only=True)
date = serializers.DateTimeField(input_formats=['%Y-%m-%d'])
#date = serializers.DateTimeField(input_formats=['%Y-%m-%d'])
date = serializers.DateField(required=False, allow_null=True) # DateTimeFieldではなくDateFieldを使用
zekken_number = serializers.IntegerField()
#date = serializers.DateTimeField(default_timezone=timezone.get_current_timezone())

0
rog/services/__init__.py Normal file → Executable file
View File

0
rog/services/csv_processor.py Normal file → Executable file
View File

0
rog/templates/.DS_Store vendored Normal file → Executable file
View File

0
rog/templates/activation-template.html Normal file → Executable file
View File

0
rog/templates/activation_success.html Normal file → Executable file
View File

0
rog/templates/admin/.DS_Store vendored Normal file → Executable file
View File

0
rog/templates/admin/csv_upload.html Normal file → Executable file
View File

0
rog/templates/admin/entry/change_list.html Normal file → Executable file
View File

0
rog/templates/admin/entry/upload_csv.html Normal file → Executable file
View File

0
rog/templates/admin/gifuroge_register_changelist.html Normal file → Executable file
View File

0
rog/templates/admin/load_users.html Normal file → Executable file
View File

0
rog/templates/admin/rog/.DS_Store vendored Normal file → Executable file
View File

0
rog/templates/admin/rog/customuser/change_list.html Normal file → Executable file
View File

View File

View File

View File

0
rog/templates/email/invitation_existing_email.txt Normal file → Executable file
View File

0
rog/templates/email/invitation_new_email.txt Normal file → Executable file
View File

0
rog/templates/email/reset_password_email.txt Normal file → Executable file
View File

0
rog/templates/email/verification_email.txt Normal file → Executable file
View File

0
rog/templates/password-reset-component.tsx Normal file → Executable file
View File

0
rog/templates/password_reset.html Normal file → Executable file
View File

0
rog/templates/password_reset_invalid.html Normal file → Executable file
View File

0
rog/templates/verification-template.html Normal file → Executable file
View File

0
rog/templates/verification_success.html Normal file → Executable file
View File

0
rog/tests.py Normal file → Executable file
View File

0
rog/tests/__init__.py Executable file
View File

0
rog/transfer.py Normal file → Executable file
View File

89
rog/urls.py Normal file → Executable file
View File

@ -3,6 +3,20 @@ from rest_framework import urlpatterns
from rest_framework.routers import DefaultRouter
from .views import CategoryByNameView, LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, LocationsInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView, GoalImageViewSet, CheckinImageViewSet, ExtentForLocations, DeleteAccount, PrivacyView, RegistrationView, TeamViewSet,MemberViewSet,EntryViewSet,RegisterView, VerifyEmailView, NewEventListView,NewEvent2ListView,NewCategoryListView,CategoryListView, MemberUserDetailView, TeamMembersWithUserView,MemberAddView,UserActivationView,RegistrationView,TempUserRegistrationView,ResendInvitationEmailView,update_user_info,update_user_detail,ActivateMemberView, ActivateNewMemberView, PasswordResetRequestView, PasswordResetConfirmView, NewCategoryViewSet,LocationInBound2,UserLastGoalTimeView,TeamEntriesView,update_entry_status,get_events,get_zekken_numbers,get_team_info,get_checkins,update_checkins,export_excel,debug_urls,get_ranking, all_ranking_top3
from .views_apis.api_auth import check_event_code
from .views_apis.api_teams import register_team,update_team_name,team_class_changer,team_register,zekken_max_num,zekken_double_check,get_team_list,get_zekken_list
from .views_apis.api_play import input_cp,get_checkpoint_list,start_from_rogapp,checkin_from_rogapp,goal_from_rogapp
from .views_apis.api_edit import remove_checkin_from_rogapp,add_checkin,delete_checkin,move_checkin,goal_checkin,change_goal_time_checkin,change_goal_time_checkin,get_checkin_list,service_check_true,service_check_false,get_yet_check_service_list
from .views_apis.api_waypoint import get_waypoint_datas_from_rogapp,get_route,fetch_user_locations,get_all_routes
from .views_apis.api_routes import top_users_routes,generate_route_image
from .views_apis.api_events import get_start_point,analyze_point
from .views_apis.api_monitor import realtime_monitor, realtime_monitor_zekken_narrow
from .views_apis.api_ranking import get_ranking,all_ranking_top3
from .views_apis.api_photos import get_photo_list, get_photo_list_prod
from .views_apis.api_scoreboard import get_scoreboard,download_scoreboard,reprint,make_all_scoreboard,make_cp_list_sheet
from .views_apis.api_simulator import rogaining_simulator
from .views_apis.api_test import test_gifuroge,practice
from django.urls import path, include
from knox import views as knox_views
@ -86,9 +100,9 @@ urlpatterns += [
path('privacy/', PrivacyView, name='privacy-view'),
#path('goalimage/', GoalImageViewSet.as_view(), name='goalimage')
path('verify-email/<uuid:verification_code>/', VerifyEmailView.as_view(), name='verify-email'),
path('categories/', NewCategoryListView.as_view(), name='category-list'),
# 新しいパス
path('categories/<str:name>/', CategoryByNameView.as_view(), name='category-detail'),
path('categories/<slug:name>/', NewCategoryListView.as_view(), name='category-list'),
path('categories/', NewCategoryListView.as_view(), name='category-list'),
path('new-events/', NewEvent2ListView.as_view(), name='new-event-list'),
path('members/<int:pk>/user/', MemberUserDetailView.as_view(), name='member-user-detail'),
@ -134,6 +148,77 @@ urlpatterns += [
path('api/rankings/<str:event_code>/<str:category_name>/', get_ranking, name='get_ranking'),
path('api/rankings/top3/<str:event_code>/', all_ranking_top3, name='all_ranking_top3'),
# for upper compatible API
## Event
path('check_event_code', check_event_code, name='check_event_code'),
path('getStartPoint', get_start_point, name='get_start_point'),
path('analyze_point', analyze_point, name='analyze_point'),
## Team
path('get_team_list', get_team_list, name='get_team_list'),
path('get_zekken_list', get_zekken_list, name='get_zekken_list'),
path('register_team', register_team, name='register_team'),
path('update_team_name', update_team_name, name='update_team_name'),
path('teamClassChanger', team_class_changer, name='team_class_changer'),
path('teamRegister', team_register, name='team_register'),
path('zekkenMaxNum', zekken_max_num, name='zekken_max_num'),
path('zekkenDoubleCheck', zekken_double_check, name='zekken_double_check'),
## Play
path('input_cp', input_cp, name='input_cp'),
path('start_from_rogapp', start_from_rogapp, name='start_from_rogapp'),
path('checkin_from_rogapp', checkin_from_rogapp, name='checkin_from_rogapp'),
path('goal_from_rogapp', goal_from_rogapp, name='goal_from_rogapp'),
## Edit Play
path('remove_checkin_from_rogapp', remove_checkin_from_rogapp, name='remove_checkin_from_rogapp'),
path('addCheckin', add_checkin, name='add_checkin'),
path('deleteCheckin', delete_checkin, name='delete_checkin'),
path('moveCheckin', move_checkin, name='move_checkin'),
path('goalCheckin', goal_checkin, name='goal_checkin'),
path('changeGoalTimeCheckin', change_goal_time_checkin, name='change_goal_time_checkin'),
path('moveCheckin', move_checkin, name='move_checkin'),
path('changeGoalTimeCheckin', change_goal_time_checkin, name='change_goal_time_checkin'),
path('getCheckinList', get_checkin_list, name='get_checkin_list'),
path('serviceCheckTrue', service_check_true, name='service_check_true'),
path('serviceCheckFalse', service_check_false, name='service_check_false'),
path('getYetCheckSeeviceList', get_yet_check_service_list, name='get_yet_check_service_list'),
## Waypoint
path('get_waypoint_datas_from_rogapp', get_waypoint_datas_from_rogapp, name='get_waypoint_datas_from_rogapp'),
path('getRoute', get_route, name='get_route'),
path('fetchUserLocations', fetch_user_locations, name='fetch_user_locations'),
path('getAllRoutes', get_all_routes, name='get_all_routes'),
path('top_users_routes', top_users_routes, name='top_users_routes'),
path('generate_route_image', generate_route_image, name='generate_route_image'),
path('realtimeMonitor', realtime_monitor, name='realtime_monitor'),
path('realtimeMonitor_zekken_narrow', realtime_monitor_zekken_narrow, name='realtime_monitor_zekken_narrow'),
## Ranking
path('get_ranking', get_ranking, name='get_ranking'),
path('all_ranking_top3', all_ranking_top3, name='all_ranking_top3'),
## PhotoList
path('get_photo_list', get_photo_list, name='get_photo_list'),
path('get_photo_list_prod', get_photo_list_prod, name='get_photo_list_prod'),
path('getCheckpointList', get_checkpoint_list, name='get_checkpoint_list'),
path('makeCpListSheet', make_cp_list_sheet, name='make_cp_list_sheet'),
## Scoreboard
path('getScoreboard', get_scoreboard, name='get_scoreboard'),
path('download_scoreboard', download_scoreboard, name='download_scoreboard'),
path('reprint', reprint, name='reprint'),
path('makeAllScoreboard', make_all_scoreboard, name='make_all_scoreboard'),
## Simulator
path('rogainingSimulator', rogaining_simulator, name='rogaining_simulator'),
## Test
path('test_gifuroge', test_gifuroge, name='test_gifuroge'),
path('practice', practice, name='practice'),
]
if settings.DEBUG:

233
rog/urls.py.bck Executable file
View File

@ -0,0 +1,233 @@
from sys import prefix
from rest_framework import urlpatterns
from rest_framework.routers import DefaultRouter
from .views import CategoryByNameView, LocationViewSet, Location_lineViewSet, Location_polygonViewSet, Jpn_Main_PerfViewSet, LocationsInPerf, ExtentForSubPerf, SubPerfInMainPerf, ExtentForMainPerf, LocationsInSubPerf, CatView, RegistrationAPI, LoginAPI, UserAPI, UserActionViewset, UserMakeActionViewset, UserDestinations, UpdateOrder, LocationInBound, DeleteDestination, CustomAreaLocations, GetAllGifuAreas, CustomAreaNames, userDetials, UserTracksViewSet, CatByCity, ChangePasswordView, GoalImageViewSet, CheckinImageViewSet, ExtentForLocations, DeleteAccount, PrivacyView, RegistrationView, TeamViewSet,MemberViewSet,EntryViewSet,RegisterView, VerifyEmailView, NewEventListView,NewEvent2ListView,NewCategoryListView,CategoryListView, MemberUserDetailView, TeamMembersWithUserView,MemberAddView,UserActivationView,RegistrationView,TempUserRegistrationView,ResendInvitationEmailView,update_user_info,update_user_detail,ActivateMemberView, ActivateNewMemberView, PasswordResetRequestView, PasswordResetConfirmView, NewCategoryViewSet,LocationInBound2,UserLastGoalTimeView,TeamEntriesView,update_entry_status,get_events,get_zekken_numbers,get_team_info,get_checkins,update_checkins,export_excel,debug_urls,get_ranking, all_ranking_top3
from django.urls import path, include
from knox import views as knox_views
from .views import TestActionViewSet
from .views import OwnerEntriesView, OwnerTeamsView, OwnerMembersView
from .views_apis.api_auth import check_event_code
from .views_apis.api_teams import register_team,update_team_name,team_class_changer,team_register,zekken_max_num,zekken_double_check,get_team_list,get_zekken_list
from .views_apis.api_play import input_cp,get_checkpoint_list,start_from_rogapp,checkin_from_rogapp,goal_from_rogapp
from .views_apis.api_edit import remove_checkin_from_rogapp,add_checkin,delete_checkin,move_checkin,goal_checkin,change_goal_time_checkin,change_goal_time_checkin,get_checkin_list,service_check_true,service_check_false,get_yet_check_service_list
from .views_apis.api_waypoint import get_waypoint_datas_from_rogapp,get_route,fetch_user_locations,get_all_routes
from .views_apis.api_routes import top_users_routes,generate_route_image
from .views_apis.api_events import get_start_point,analyze_point
from .views_apis.api_monitor import realtime_monitor, realtime_monitor_zekken_narrow
from .views_apis.api_ranking import get_ranking,all_ranking_top3
from .views_apis.api_photos import get_photo_list, get_photo_list_prod
from .views_apis.api_scoreboard import get_scoreboard,download_scoreboard,reprint,make_all_scoreboard,make_cp_list_sheet
from .views_apis.api_simulator import rogaining_simulator
from .views_apis.api_test import test_gifuroge,practice
# 既存のurlpatternsに追加
urlpatterns = [
# ... 既存のURLパターン ...
path('teamRegister', team_register, name='team_register'),
]
from . import views
#from .views import NewEvent2AdminView
from django.conf import settings
from django.conf.urls.static import static
router = DefaultRouter()
router.register(r'newevent2', views.NewEvent2ViewSet)
router.register(prefix='location', viewset=LocationViewSet, basename='location')
router.register(prefix='location_line', viewset=Location_lineViewSet, basename="location_line")
router.register(prefix='location_polygon', viewset=Location_polygonViewSet, basename='location_polygon')
router.register(prefix='perf_main', viewset=Jpn_Main_PerfViewSet, basename='main_perf')
router.register(prefix='track', viewset=UserTracksViewSet, basename='track')
router.register(prefix='goalimage', viewset=GoalImageViewSet, basename='goalimage')
router.register(prefix='checkinimage', viewset=CheckinImageViewSet, basename='checkinimage')
#Akira 追加
# /api/teams/ - チームの一覧取得と作成
# /api/teams/<pk>/ - 特定のチームの取得、更新、削除
# /api/members/ - メンバーの一覧取得と作成
# /api/members/<pk>/ - 特定のメンバーの取得、更新、削除
# /api/entries/ - エントリーの一覧取得と作成
# /api/entries/<pk>/ - 特定のエントリーの取得、更新、削除
#
#router.register(r'teams', TeamViewSet)
#router.register(r'members', MemberViewSet)
#router.register(r'entries', EntryViewSet)
router.register(r'entry', EntryViewSet, basename='entry')
router.register(r'teams', TeamViewSet, basename='team')
router.register(r'members', MemberViewSet, basename='member')
router.register(r'teams/(?P<team_id>\d+)/members', MemberViewSet, basename='team-members')
router.register(r'categories-viewset', NewCategoryViewSet)
router.register(r'newevent2', views.NewEvent2ViewSet)
# Akira 追加
# GET /api/members/<member_id>/user/: 特定のメンバーのユーザー情報を取得
# GET /api/teams/<team_id>/members-with-user/: 特定のチームの全メンバーとそのユーザー情報を取得
app_name = 'rog' # 名前空間を追加
urlpatterns = router.urls
urlpatterns += [
path('inperf/', LocationsInPerf, name="location_perf"),
path('insubperf', LocationsInSubPerf, name='location_subperf'),
path('inbound', LocationInBound, name='location_bound'),
path('inbound2', LocationInBound2, name='location_bound'),
path('customarea/', CustomAreaLocations, name='custom_area_location'),
path('subperfinmain/', SubPerfInMainPerf, name="sub_perf"),
path('allgifuareas/', GetAllGifuAreas, name="gifu_area"),
path('perfext/', ExtentForSubPerf, name="sub_perf_ext"),
path('locsext/', ExtentForLocations, name="locs_ext"),
path('mainperfext/', ExtentForMainPerf, name="main_perf_ext"),
path('cats/', CatView, name='cats'),
path('catbycity/', CatByCity, name='cat_by_city'),
#path('register/', RegistrationAPI.as_view()),
path('login/', LoginAPI.as_view()),
path('user/', UserAPI.as_view()),
path('logout/', knox_views.LogoutView.as_view(), name='knox_logout'),
path('useraction/', UserActionViewset, name='user_action'),
path('makeaction/', UserMakeActionViewset, name='user_action'),
path('destinations/', UserDestinations, name='user_destinations'),
path('updateorder/', UpdateOrder, name='updateorder'),
path('delete_destination/', DeleteDestination, name='delete_detination'),
path('customareanames/', CustomAreaNames, name='custom_area_name'),
path('userdetials/', userDetials, name='user_detials'),
path('change-password/', ChangePasswordView.as_view(), name='change-password'),
path('delete-account/', DeleteAccount, name="delete-account"),
path('privacy/', PrivacyView, name='privacy-view'),
#path('goalimage/', GoalImageViewSet.as_view(), name='goalimage')
path('verify-email/<uuid:verification_code>/', VerifyEmailView.as_view(), name='verify-email'),
# 新しいパス
path('categories/<str:name>/', NewCategoryListView.as_view(), name='category-detail'),
path('categories/', NewCategoryListView.as_view(), name='category-list'),
path('new-events/', NewEvent2ListView.as_view(), name='new-event-list'),
path('members/<int:pk>/user/', MemberUserDetailView.as_view(), name='member-user-detail'),
path('teams/<int:team_id>/members-with-user/', TeamMembersWithUserView.as_view(), name='team-members-with-user'),
path('teams/<int:team_id>/members/', MemberViewSet.as_view({'get': 'list', 'post': 'create'}), name='team-members'),
path('teams/<int:team_id>/members/<int:pk>/', MemberViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}), name='team-member-detail'),
path('activate/<str:activation_token>/', UserActivationView.as_view(), name='user-activation'),
#path('register/', RegistrationView.as_view(), name='register'), #直接の登録はしない。
path('register/', TempUserRegistrationView.as_view(), name='temp-register'), # 仮登録
#path('register/temp/', RegisterView.as_view(), name='register'), # 古い仮登録
path('reactivate/<str:activation_token>/',ResendInvitationEmailView.as_view(),name='reactivate'),
path('userinfo/<int:user_id>/', update_user_info, name='update_user_info'),
path('userdetail/<int:user_id>/',update_user_detail, name='update_user_detail'),
path('activate-member/<int:user_id>/<int:team_id>/', ActivateMemberView.as_view(), name='activate-member'),
path('activate-new-member/<uuid:verification_code>/<int:team_id>/', ActivateNewMemberView.as_view(), name='activate-new-member'),
path('password-reset/', PasswordResetRequestView.as_view(), name='password_reset_request'),
path('reset-password/<uidb64>/<token>/', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('users/<int:user_id>/last-goal/', UserLastGoalTimeView.as_view(), name='user-last-goal-time'),
path('teams/<int:team_id>/entries/', TeamEntriesView.as_view(), name='team-entries'),
#path('admin/newevent2/', NewEvent2AdminView.as_view(), name='newevent2-admin'),
path('newevent2-list/', views.NewEvent2ListView.as_view(), name='newevent2-list'),
#path('admin/newevent2/csv-upload/', NewEvent2Admin.as_view({'get': 'csv_upload_view', 'post': 'csv_upload_view'}), name='rog_newevent2_csv-upload'),
#path('admin/', admin.site.urls),
path('entries/<int:entry_id>/update-status/', update_entry_status, name='update-entry-status'),
# for Supervisor Web app
path('events/', views.get_events, name='get_events'),
path('debug/urls/', views.debug_urls, name='debug_urls'),
path('zekken_numbers/<str:event_code>/', views.get_zekken_numbers, name='get_zekken_numbers'),
path('team_info/<int:zekken_number>/', views.get_team_info, name='get_team_info'),
path('checkins/<int:zekken_number>/<str:event_code>/', views.get_checkins, name='get_checkins'),
path('update_checkins/', views.update_checkins, name='update_checkins'),
path('export_excel/<int:zekken_number>/<str:event_code>/', views.export_excel, name='export_excel'),
# for Supervisor Web app
path('test/', views.test_api, name='test_api'),
path('update-goal-time/', views.update_goal_time, name='update-goal-time'),
path('get-goalimage/', views.get_goalimage, name='get-goalimage'),
path('get-photolist/', views.get_photo_list, name='get-photolist'),
path('api/rankings/<str:event_code>/<str:category_name>/', get_ranking, name='get_ranking'),
path('api/rankings/top3/<str:event_code>/', all_ranking_top3, name='all_ranking_top3'),
# for upper compatible API
## Event
path('check_event_code', check_event_code, name='check_event_code'),
path('getStartPoint', get_start_point, name='get_start_point'),
path('analyze_point', analyze_point, name='analyze_point'),
## Team
path('get_team_list', get_team_list, name='get_team_list'),
path('get_zekken_list', get_zekken_list, name='get_zekken_list'),
path('register_team', register_team, name='register_team'),
path('update_team_name', update_team_name, name='update_team_name'),
path('teamClassChanger', team_class_changer, name='team_class_changer'),
path('teamRegister', team_register, name='team_register'),
path('zekkenMaxNum', zekken_max_num, name='zekken_max_num'),
path('zekkenDoubleCheck', zekken_double_check, name='zekken_double_check'),
## Play
path('input_cp', input_cp, name='input_cp'),
path('start_from_rogapp', start_from_rogapp, name='start_from_rogapp'),
path('checkin_from_rogapp', checkin_from_rogapp, name='checkin_from_rogapp'),
path('goal_from_rogapp', goal_from_rogapp, name='goal_from_rogapp'),
## Edit Play
path('remove_checkin_from_rogapp', remove_checkin_from_rogapp, name='remove_checkin_from_rogapp'),
path('addCheckin', add_checkin, name='add_checkin'),
path('deleteCheckin', delete_checkin, name='delete_checkin'),
path('moveCheckin', move_checkin, name='move_checkin'),
path('goalCheckin', goal_checkin, name='goal_checkin'),
path('changeGoalTimeCheckin', change_goal_time_checkin, name='change_goal_time_checkin'),
path('moveCheckin', move_checkin, name='move_checkin'),
path('changeGoalTimeCheckin', change_goal_time_checkin, name='change_goal_time_checkin'),
path('getCheckinList', get_checkin_list, name='get_checkin_list'),
path('serviceCheckTrue', service_check_true, name='service_check_true'),
path('serviceCheckFalse', service_check_false, name='service_check_false'),
path('getYetCheckSeeviceList', get_yet_check_service_list, name='get_yet_check_service_list'),
## Waypoint
path('get_waypoint_datas_from_rogapp', get_waypoint_datas_from_rogapp, name='get_waypoint_datas_from_rogapp'),
path('getRoute', get_route, name='get_route'),
path('fetchUserLocations', fetch_user_locations, name='fetch_user_locations'),
path('getAllRoutes', get_all_routes, name='get_all_routes'),
path('top_users_routes', top_users_routes, name='top_users_routes'),
path('generate_route_image', generate_route_image, name='generate_route_image'),
path('realtimeMonitor', realtime_monitor, name='realtime_monitor'),
path('realtimeMonitor_zekken_narrow', realtime_monitor_zekken_narrow, name='realtime_monitor_zekken_narrow'),
## Ranking
path('get_ranking', get_ranking, name='get_ranking'),
path('all_ranking_top3', all_ranking_top3, name='all_ranking_top3'),
## PhotoList
path('get_photo_list', get_photo_list, name='get_photo_list'),
path('get_photo_list_prod', get_photo_list_prod, name='get_photo_list_prod'),
path('getCheckpointList', get_checkpoint_list, name='get_checkpoint_list'),
path('makeCpListSheet', make_cp_list_sheet, name='make_cp_list_sheet'),
## Scoreboard
path('getScoreboard', get_scoreboard, name='get_scoreboard'),
path('download_scoreboard', download_scoreboard, name='download_scoreboard'),
path('reprint', reprint, name='reprint'),
path('makeAllScoreboard', make_all_scoreboard, name='make_all_scoreboard'),
## Simulator
path('rogainingSimulator', rogaining_simulator, name='rogaining_simulator'),
## Test
path('test_gifuroge', test_gifuroge, name='test_gifuroge'),
path('practice', practice, name='practice'),
]
if settings.DEBUG:
# 開発環境でのメディアファイル提供
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

0
rog/users.txt Normal file → Executable file
View File

0
rog/utils.py Normal file → Executable file
View File

0
rog/utils_code/__init__.py Normal file → Executable file
View File

0
rog/utils_code/date_converter.py Normal file → Executable file
View File

0
rog/utils_code/name_splitter.py Normal file → Executable file
View File

9
rog/views.py Normal file → Executable file
View File

@ -1515,6 +1515,14 @@ class TeamViewSet(viewsets.ModelViewSet):
# return Response(TeamSerializer(new_team).data, status=status.HTTP_201_CREATED)
#
class CategoryDetailView(generics.RetrieveAPIView):
serializer_class = NewCategorySerializer
def get_object(self):
name = unquote(self.kwargs['name']) # URLデコード
return get_object_or_404(NewCategory, category_name=name)
class CategoryByNameView(generics.RetrieveAPIView):
serializer_class = NewCategorySerializer
@ -3663,6 +3671,7 @@ def get_ranking(request, event_code, category_name):
def all_ranking_top3(request, event_code):
"""特定のイベントの全クラスのTOP3を取得する"""
try:
event_code = unquote(event_code) # URLデコード
# イベントの情報を取得
event = NewEvent2.objects.get(event_name=event_code)

3789
rog/views.py.bck Executable file

File diff suppressed because it is too large Load Diff

0
rog/views_apis/__init__.py Executable file
View File

72
rog/views_apis/api_auth.py Executable file
View File

@ -0,0 +1,72 @@
# 既存のインポート部分を変更
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from rog.models import NewEvent2, Entry # Eventから変更
import logging
from django.db.models import F, Q
from django.conf import settings
import os
from urllib.parse import urljoin
logger = logging.getLogger(__name__)
"""
これで/check_event_codeエンドポイントがDjangoに実装されました。
このエンドポイントは元のRubyコードと同様に、ゼッケン番号とパスワードの認証を行い、
正しい場合はイベントコードを返します。
※注意: パスワード検証部分は、Djangoのcheck_passwordメソッドを使用していますが、
元のRubyコードでの検証方法と異なる可能性があります。
データベースの実際の構造や認証方法に合わせて調整が必要かもしれません。
"""
@api_view(['GET'])
def check_event_code(request):
"""
ゼッケン番号とパスワードの組み合わせが正しいか確認し、イベントコードを返す
パラメータ:
- zekken_number: ゼッケン番号
- pw: パスワード
"""
logger.info("check_event_code called")
zekken_number = request.query_params.get('zekken_number')
password = request.query_params.get('pw')
logger.debug(f"Parameters: zekken_number={zekken_number}, password={'*' * len(password) if password else None}")
if not zekken_number or not password:
logger.warning("Missing required parameters")
return Response({"status": "ERROR", "message": "ゼッケン番号とパスワードが必要です"}, status=status.HTTP_400_BAD_REQUEST)
try:
# ゼッケン番号とパスワードでユーザーを検索
entry = Entry.objects.filter(zekken_number=zekken_number).first()
if not entry:
logger.warning(f"No entry found for zekken_number: {zekken_number}")
return Response({"status": "ERROR", "message": "ゼッケン番号が見つかりません"}, status=status.HTTP_404_NOT_FOUND)
user = entry.owner
# パスワード検証
if not user.check_password(password):
logger.warning(f"Invalid password for zekken_number: {zekken_number}")
return Response({"status": "ERROR", "message": "パスワードが正しくありません"}, status=status.HTTP_401_UNAUTHORIZED)
# NewEvent2のイベント参照に対応
# Entryモデルがnew_event2などの別フィールド名でNewEvent2を参照している場合は変更が必要
new_event = NewEvent2.objects.filter(id=entry.event.id).first()
event_code = new_event.event_name if new_event else None
if not event_code:
logger.warning(f"No event associated with zekken_number: {zekken_number}")
return Response({"status": "ERROR", "message": "イベントが見つかりません"}, status=status.HTTP_404_NOT_FOUND)
logger.info(f"Authentication successful for zekken_number: {zekken_number}, event_code: {event_code}")
return Response({"status": "OK", "event_code": event_code})
except Exception as e:
logger.error(f"Error in check_event_code: {str(e)}")
return Response({"status": "ERROR", "message": "サーバーエラーが発生しました"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

1366
rog/views_apis/api_edit.py Executable file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More