Fix GpsCheckin
This commit is contained in:
@ -1013,14 +1013,14 @@ class GpsLogAdmin(admin.ModelAdmin):
|
|||||||
list_display = ['id', 'serial_number', 'zekken_number', 'event_code', 'cp_number', 'checkin_time']
|
list_display = ['id', 'serial_number', 'zekken_number', 'event_code', 'cp_number', 'checkin_time']
|
||||||
list_filter = ['event_code', 'checkin_time', 'buy_flag', 'is_service_checked']
|
list_filter = ['event_code', 'checkin_time', 'buy_flag', 'is_service_checked']
|
||||||
search_fields = ['zekken_number', 'event_code', 'cp_number']
|
search_fields = ['zekken_number', 'event_code', 'cp_number']
|
||||||
readonly_fields = ['checkin_time', 'create_at', 'update_at']
|
readonly_fields = ['checkin_time']
|
||||||
|
|
||||||
@admin.register(GpsCheckin)
|
@admin.register(GpsCheckin)
|
||||||
class GpsCheckinAdmin(admin.ModelAdmin):
|
class GpsCheckinAdmin(admin.ModelAdmin):
|
||||||
list_display = ['id', 'zekken', 'event_code', 'cp_number', 'create_at']
|
list_display = ['id', 'zekken', 'event_code', 'cp_number', 'checkin_time']
|
||||||
list_filter = ['event_code', 'create_at', 'validate_location']
|
list_filter = ['event_code', 'checkin_time']
|
||||||
search_fields = ['zekken', 'event_code', 'cp_number']
|
search_fields = ['zekken', 'event_code', 'cp_number']
|
||||||
readonly_fields = ['create_at']
|
readonly_fields = ['checkin_time', 'record_time']
|
||||||
|
|
||||||
@admin.register(Checkpoint)
|
@admin.register(Checkpoint)
|
||||||
class CheckpointAdmin(admin.ModelAdmin):
|
class CheckpointAdmin(admin.ModelAdmin):
|
||||||
|
|||||||
189
rog/models.py
189
rog/models.py
@ -913,182 +913,27 @@ class Checkpoint(models.Model):
|
|||||||
return f"CP{self.cp_number} - {self.cp_name} ({self.event.event_code if self.event.event_code else self.event.event_name})"
|
return f"CP{self.cp_number} - {self.cp_name} ({self.event.event_code if self.event.event_code else self.event.event_name})"
|
||||||
|
|
||||||
class GpsCheckin(models.Model):
|
class GpsCheckin(models.Model):
|
||||||
id = models.AutoField(primary_key=True) # 明示的にidフィールドを追加
|
id = models.AutoField(primary_key=True)
|
||||||
zekken = models.CharField(
|
event_code = models.CharField(max_length=255, null=False, default='')
|
||||||
max_length=20,
|
zekken = models.CharField(max_length=20, null=True, blank=True)
|
||||||
null=True,
|
serial_number = models.CharField(max_length=20, null=True, blank=True)
|
||||||
blank=True,
|
cp_number = models.CharField(max_length=20, null=True, blank=True)
|
||||||
help_text="ゼッケン番号(実テーブルフィールド名に合わせて修正)"
|
lat = models.FloatField(null=True, blank=True)
|
||||||
)
|
lng = models.FloatField(null=True, blank=True)
|
||||||
zekken_number = models.TextField(
|
checkin_time = models.DateTimeField(null=True, blank=True)
|
||||||
null=False,
|
record_time = models.DateTimeField(null=True, blank=True)
|
||||||
default='',
|
location = models.PointField(srid=4326, null=True, blank=True)
|
||||||
help_text="ゼッケン番号(後方互換性のため残す)"
|
mobserver_id = models.IntegerField(null=True, blank=True)
|
||||||
)
|
event_id = models.BigIntegerField(null=True, blank=True)
|
||||||
event_id = models.IntegerField(
|
team_id = models.BigIntegerField(null=True, blank=True)
|
||||||
null=True,
|
checkpoint_id = models.BigIntegerField(null=True, blank=True)
|
||||||
blank=True,
|
|
||||||
help_text="イベントID"
|
|
||||||
)
|
|
||||||
event_code = models.TextField(
|
|
||||||
null=False,
|
|
||||||
default='',
|
|
||||||
help_text="イベントコード"
|
|
||||||
)
|
|
||||||
cp_number = models.IntegerField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="チェックポイント番号"
|
|
||||||
)
|
|
||||||
lattitude = models.FloatField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="緯度:写真から取得"
|
|
||||||
)
|
|
||||||
longitude = models.FloatField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="経度:写真から取得"
|
|
||||||
)
|
|
||||||
image_address = models.TextField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="チェックイン画像のパス"
|
|
||||||
)
|
|
||||||
image_receipt = models.TextField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
default=False,
|
|
||||||
help_text="レシート画像のパス"
|
|
||||||
)
|
|
||||||
image_qr = models.BooleanField(
|
|
||||||
default=False,
|
|
||||||
help_text="QRコードスキャンフラグ"
|
|
||||||
)
|
|
||||||
validate_location = models.BooleanField(
|
|
||||||
default=False,
|
|
||||||
help_text="位置情報検証フラグ:画像認識で検証した結果"
|
|
||||||
)
|
|
||||||
goal_time = models.TextField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="ゴール時刻=ゴール時のみ使用される。画像から時刻を読み取り設定する。"
|
|
||||||
)
|
|
||||||
late_point = models.IntegerField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="遅刻ポイント:ゴールの時刻が制限時間を超えた場合、1分につき-50点が加算。"
|
|
||||||
)
|
|
||||||
create_at = models.DateTimeField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="作成日時:データの作成日時"
|
|
||||||
)
|
|
||||||
create_user = models.TextField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="作成ユーザー"
|
|
||||||
)
|
|
||||||
update_at = models.DateTimeField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="更新日時"
|
|
||||||
)
|
|
||||||
update_user = models.TextField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="更新ユーザー"
|
|
||||||
)
|
|
||||||
buy_flag = models.BooleanField(
|
|
||||||
default=False,
|
|
||||||
help_text="購入フラグ:協賛店で購入した場合、無条件でTRUEにする。"
|
|
||||||
)
|
|
||||||
colabo_company_memo = models.TextField(
|
|
||||||
null=False,
|
|
||||||
default='',
|
|
||||||
help_text="グループコード:複数のイベントで合算する場合に使用する"
|
|
||||||
)
|
|
||||||
points = models.IntegerField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="ポイント:このチェックインによる獲得ポイント。通常ポイントと買い物ポイントは分離される。ゴールの場合には減点なども含む。"
|
|
||||||
)
|
|
||||||
|
|
||||||
# MobServer統合フィールド
|
|
||||||
serial_number = models.IntegerField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="MobServer gps_information.serial_number"
|
|
||||||
)
|
|
||||||
team = models.ForeignKey(
|
|
||||||
'Team',
|
|
||||||
on_delete=models.CASCADE,
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="統合チームリレーション"
|
|
||||||
)
|
|
||||||
team_name = models.CharField(
|
|
||||||
max_length=255,
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="チーム名(実テーブルフィールド)"
|
|
||||||
)
|
|
||||||
checkin_time = models.DateTimeField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="チェックイン時刻(実テーブルフィールド)"
|
|
||||||
)
|
|
||||||
checkpoint = models.ForeignKey(
|
|
||||||
'Checkpoint',
|
|
||||||
on_delete=models.CASCADE,
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="統合チェックポイントリレーション"
|
|
||||||
)
|
|
||||||
minus_photo_flag = models.BooleanField(
|
|
||||||
default=False,
|
|
||||||
help_text="MobServer gps_information.minus_photo_flag"
|
|
||||||
)
|
|
||||||
|
|
||||||
# 通過審査管理フィールド
|
|
||||||
validation_status = models.CharField(
|
|
||||||
max_length=20,
|
|
||||||
choices=[
|
|
||||||
('PENDING', '審査待ち'),
|
|
||||||
('APPROVED', '承認'),
|
|
||||||
('REJECTED', '却下'),
|
|
||||||
('AUTO_APPROVED', '自動承認')
|
|
||||||
],
|
|
||||||
default='PENDING',
|
|
||||||
help_text="通過審査ステータス"
|
|
||||||
)
|
|
||||||
validation_comment = models.TextField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="審査コメント・理由"
|
|
||||||
)
|
|
||||||
validated_by = models.CharField(
|
|
||||||
max_length=255,
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="審査者"
|
|
||||||
)
|
|
||||||
validated_at = models.DateTimeField(
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
help_text="審査日時"
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'rog_gpscheckin' # 実際のテーブル名に合わせて修正
|
db_table = 'rog_gpscheckin'
|
||||||
indexes = [
|
managed = True
|
||||||
models.Index(fields=['zekken', 'event_code', 'serial_number'], name='idx_zekken_event'),
|
|
||||||
models.Index(fields=['create_at'], name='idx_create_at'),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.event_code}-{self.zekken_number}-{self.serial_number}-buy:{self.buy_flag}-valid:{self.validate_location}-point:{self.points}"
|
return f"GPS Checkin {self.id} - {self.zekken}"
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
# 作成時・更新時のタイムスタンプを自動設定
|
# 作成時・更新時のタイムスタンプを自動設定
|
||||||
|
|||||||
25
rog/models_clean.py
Normal file
25
rog/models_clean.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# 実際のテーブル構造に基づいた最小限のGpsCheckinモデル
|
||||||
|
from django.contrib.gis.db import models
|
||||||
|
|
||||||
|
class GpsCheckin(models.Model):
|
||||||
|
id = models.AutoField(primary_key=True)
|
||||||
|
event_code = models.CharField(max_length=255, null=False, default='')
|
||||||
|
zekken = models.CharField(max_length=20, null=True, blank=True)
|
||||||
|
serial_number = models.CharField(max_length=20, null=True, blank=True)
|
||||||
|
cp_number = models.CharField(max_length=20, null=True, blank=True)
|
||||||
|
lat = models.FloatField(null=True, blank=True)
|
||||||
|
lng = models.FloatField(null=True, blank=True)
|
||||||
|
checkin_time = models.DateTimeField(null=True, blank=True)
|
||||||
|
record_time = models.DateTimeField(null=True, blank=True)
|
||||||
|
location = models.PointField(null=True, blank=True)
|
||||||
|
mobserver_id = models.IntegerField(null=True, blank=True)
|
||||||
|
event_id = models.BigIntegerField(null=True, blank=True)
|
||||||
|
team_id = models.BigIntegerField(null=True, blank=True)
|
||||||
|
checkpoint_id = models.BigIntegerField(null=True, blank=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'rog_gpscheckin'
|
||||||
|
managed = True
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"GPS Checkin {self.id} - {self.zekken}"
|
||||||
Reference in New Issue
Block a user