diff --git a/rog/admin.py b/rog/admin.py index 19fd274..5617062 100755 --- a/rog/admin.py +++ b/rog/admin.py @@ -1013,14 +1013,14 @@ class GpsLogAdmin(admin.ModelAdmin): list_display = ['id', 'serial_number', 'zekken_number', 'event_code', 'cp_number', 'checkin_time'] list_filter = ['event_code', 'checkin_time', 'buy_flag', 'is_service_checked'] search_fields = ['zekken_number', 'event_code', 'cp_number'] - readonly_fields = ['checkin_time', 'create_at', 'update_at'] + readonly_fields = ['checkin_time'] @admin.register(GpsCheckin) class GpsCheckinAdmin(admin.ModelAdmin): - list_display = ['id', 'zekken', 'event_code', 'cp_number', 'create_at'] - list_filter = ['event_code', 'create_at', 'validate_location'] + list_display = ['id', 'zekken', 'event_code', 'cp_number', 'checkin_time'] + list_filter = ['event_code', 'checkin_time'] search_fields = ['zekken', 'event_code', 'cp_number'] - readonly_fields = ['create_at'] + readonly_fields = ['checkin_time', 'record_time'] @admin.register(Checkpoint) class CheckpointAdmin(admin.ModelAdmin): diff --git a/rog/models.py b/rog/models.py index cdc91e5..fee09fb 100755 --- a/rog/models.py +++ b/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})" class GpsCheckin(models.Model): - id = models.AutoField(primary_key=True) # 明示的にidフィールドを追加 - zekken = models.CharField( - max_length=20, - null=True, - blank=True, - help_text="ゼッケン番号(実テーブルフィールド名に合わせて修正)" - ) - zekken_number = models.TextField( - null=False, - default='', - help_text="ゼッケン番号(後方互換性のため残す)" - ) - event_id = models.IntegerField( - null=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="審査日時" - ) + 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(srid=4326, 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' # 実際のテーブル名に合わせて修正 - indexes = [ - models.Index(fields=['zekken', 'event_code', 'serial_number'], name='idx_zekken_event'), - models.Index(fields=['create_at'], name='idx_create_at'), - ] - + db_table = 'rog_gpscheckin' + managed = True 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): # 作成時・更新時のタイムスタンプを自動設定 diff --git a/rog/models_clean.py b/rog/models_clean.py new file mode 100644 index 0000000..5c95960 --- /dev/null +++ b/rog/models_clean.py @@ -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}"