initial setting at 20-Aug-2025
This commit is contained in:
0
rog/.DS_Store
vendored
Normal file → Executable file
0
rog/.DS_Store
vendored
Normal file → Executable file
0
rog/__init__.py
Normal file → Executable file
0
rog/__init__.py
Normal file → Executable file
0
rog/admin.py
Normal file → Executable file
0
rog/admin.py
Normal file → Executable file
0
rog/apps.py
Normal file → Executable file
0
rog/apps.py
Normal file → Executable file
0
rog/backend.py
Normal file → Executable file
0
rog/backend.py
Normal file → Executable file
0
rog/choices.py
Normal file → Executable file
0
rog/choices.py
Normal file → Executable file
0
rog/forms.py
Normal file → Executable file
0
rog/forms.py
Normal file → Executable file
0
rog/gifuroge_team.csv
Normal file → Executable file
0
rog/gifuroge_team.csv
Normal file → Executable file
0
rog/management/commands/cleanup_temp_users.py
Normal file → Executable file
0
rog/management/commands/cleanup_temp_users.py
Normal file → Executable file
644
rog/management/commands/import_event_data.py
Normal file
644
rog/management/commands/import_event_data.py
Normal 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
0
rog/mapping.py
Normal file → Executable file
0
rog/middleware/__init__.py
Normal file → Executable file
0
rog/middleware/__init__.py
Normal file → Executable file
0
rog/middleware/ip_blocking.py
Normal file → Executable file
0
rog/middleware/ip_blocking.py
Normal file → Executable file
0
rog/migration_scripts.py
Normal file → Executable file
0
rog/migration_scripts.py
Normal file → Executable 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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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',
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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 (閉業)'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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',
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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')},
|
||||
),
|
||||
]
|
||||
@ -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')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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),
|
||||
),
|
||||
]
|
||||
@ -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
0
rog/migrations_backup/__init__.py
Normal file → Executable file
143
rog/models.py
Normal file → Executable file
143
rog/models.py
Normal file → Executable 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
0
rog/permissions.py
Normal file → Executable file
0
rog/postgres_views.sql
Normal file → Executable file
0
rog/postgres_views.sql
Normal file → Executable file
3
rog/serializers.py
Normal file → Executable file
3
rog/serializers.py
Normal file → Executable 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
0
rog/services/__init__.py
Normal file → Executable file
0
rog/services/csv_processor.py
Normal file → Executable file
0
rog/services/csv_processor.py
Normal file → Executable file
0
rog/templates/.DS_Store
vendored
Normal file → Executable file
0
rog/templates/.DS_Store
vendored
Normal file → Executable file
0
rog/templates/activation-template.html
Normal file → Executable file
0
rog/templates/activation-template.html
Normal file → Executable file
0
rog/templates/activation_success.html
Normal file → Executable file
0
rog/templates/activation_success.html
Normal file → Executable file
0
rog/templates/admin/.DS_Store
vendored
Normal file → Executable file
0
rog/templates/admin/.DS_Store
vendored
Normal file → Executable file
0
rog/templates/admin/csv_upload.html
Normal file → Executable file
0
rog/templates/admin/csv_upload.html
Normal file → Executable file
0
rog/templates/admin/entry/change_list.html
Normal file → Executable file
0
rog/templates/admin/entry/change_list.html
Normal file → Executable file
0
rog/templates/admin/entry/upload_csv.html
Normal file → Executable file
0
rog/templates/admin/entry/upload_csv.html
Normal file → Executable file
0
rog/templates/admin/gifuroge_register_changelist.html
Normal file → Executable file
0
rog/templates/admin/gifuroge_register_changelist.html
Normal file → Executable file
0
rog/templates/admin/load_users.html
Normal file → Executable file
0
rog/templates/admin/load_users.html
Normal file → Executable file
0
rog/templates/admin/rog/.DS_Store
vendored
Normal file → Executable file
0
rog/templates/admin/rog/.DS_Store
vendored
Normal file → Executable file
0
rog/templates/admin/rog/customuser/change_list.html
Normal file → Executable file
0
rog/templates/admin/rog/customuser/change_list.html
Normal file → Executable file
0
rog/templates/admin/rog/gifurogeregister/change_list.html
Normal file → Executable file
0
rog/templates/admin/rog/gifurogeregister/change_list.html
Normal file → Executable file
0
rog/templates/admin/rog/gifurogeregister/upload-csv.html
Normal file → Executable file
0
rog/templates/admin/rog/gifurogeregister/upload-csv.html
Normal file → Executable file
0
rog/templates/email/invitation_and_verification_email.txt
Normal file → Executable file
0
rog/templates/email/invitation_and_verification_email.txt
Normal file → Executable file
0
rog/templates/email/invitation_existing_email.txt
Normal file → Executable file
0
rog/templates/email/invitation_existing_email.txt
Normal file → Executable file
0
rog/templates/email/invitation_new_email.txt
Normal file → Executable file
0
rog/templates/email/invitation_new_email.txt
Normal file → Executable file
0
rog/templates/email/reset_password_email.txt
Normal file → Executable file
0
rog/templates/email/reset_password_email.txt
Normal file → Executable file
0
rog/templates/email/verification_email.txt
Normal file → Executable file
0
rog/templates/email/verification_email.txt
Normal file → Executable file
0
rog/templates/password-reset-component.tsx
Normal file → Executable file
0
rog/templates/password-reset-component.tsx
Normal file → Executable file
0
rog/templates/password_reset.html
Normal file → Executable file
0
rog/templates/password_reset.html
Normal file → Executable file
0
rog/templates/password_reset_invalid.html
Normal file → Executable file
0
rog/templates/password_reset_invalid.html
Normal file → Executable file
0
rog/templates/verification-template.html
Normal file → Executable file
0
rog/templates/verification-template.html
Normal file → Executable file
0
rog/templates/verification_success.html
Normal file → Executable file
0
rog/templates/verification_success.html
Normal file → Executable file
0
rog/tests.py
Normal file → Executable file
0
rog/tests.py
Normal file → Executable file
0
rog/tests/__init__.py
Executable file
0
rog/tests/__init__.py
Executable file
0
rog/transfer.py
Normal file → Executable file
0
rog/transfer.py
Normal file → Executable file
89
rog/urls.py
Normal file → Executable file
89
rog/urls.py
Normal file → Executable 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
233
rog/urls.py.bck
Executable 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
0
rog/users.txt
Normal file → Executable file
0
rog/utils.py
Normal file → Executable file
0
rog/utils.py
Normal file → Executable file
0
rog/utils_code/__init__.py
Normal file → Executable file
0
rog/utils_code/__init__.py
Normal file → Executable file
0
rog/utils_code/date_converter.py
Normal file → Executable file
0
rog/utils_code/date_converter.py
Normal file → Executable file
0
rog/utils_code/name_splitter.py
Normal file → Executable file
0
rog/utils_code/name_splitter.py
Normal file → Executable file
9
rog/views.py
Normal file → Executable file
9
rog/views.py
Normal file → Executable 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
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
0
rog/views_apis/__init__.py
Executable file
72
rog/views_apis/api_auth.py
Executable file
72
rog/views_apis/api_auth.py
Executable 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
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
Reference in New Issue
Block a user