initial setting at 20-Aug-2025

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

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

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