diff --git a/rog/postgres_views.sql b/rog/postgres_views.sql index 38f4c73..cab4781 100644 --- a/rog/postgres_views.sql +++ b/rog/postgres_views.sql @@ -281,4 +281,62 @@ ORDER BY /* CREATE INDEX idx_gps_checkins_cp_number ON gps_checkins(cp_number); CREATE INDEX idx_rog_location_cp ON rog_location(cp); -*/ \ No newline at end of file +*/ + +-- チェックポイントごとの集計VIEW +-- チェックポイントごとの集計ビューを作成 +DROP VIEW IF EXISTS v_checkpoint_summary CASCADE; +CREATE OR REPLACE VIEW v_checkpoint_summary AS +WITH checkpoint_counts AS ( + SELECT + e.event_id, + ev.event_name, + gc.cp_number, + l.sub_loc_id, + l.location_name, + e.category_id, + nc.category_name, + COUNT(CASE + WHEN gc.validate_location = true AND gc.buy_flag = false + THEN 1 + END) as normal_checkins, + COUNT(CASE + WHEN gc.validate_location = true AND gc.buy_flag = true + THEN 1 + END) as purchase_checkins + FROM + rog_entry e + JOIN rog_newevent2 ev ON e.event_id = ev.id + JOIN rog_newcategory nc ON e.category_id = nc.id + JOIN gps_checkins gc ON ev.event_name = gc.event_code + AND CAST(e.zekken_number AS TEXT) = gc.zekken_number + LEFT JOIN rog_location l ON gc.cp_number = l.cp + AND l."group" LIKE '%' || gc.event_code || '%' + WHERE + e.is_active = true + AND gc.validate_location = true + GROUP BY + e.event_id, + ev.event_name, + gc.cp_number, + l.sub_loc_id, + l.location_name, + e.category_id, + nc.category_name +) +SELECT + event_id, + event_name, + cp_number, + sub_loc_id, + location_name, + category_id, + category_name, + normal_checkins, + purchase_checkins +FROM + checkpoint_counts +ORDER BY + event_name, + cp_number, + category_id; \ No newline at end of file diff --git a/rog/urls.py b/rog/urls.py index a123986..796f312 100644 --- a/rog/urls.py +++ b/rog/urls.py @@ -127,6 +127,8 @@ urlpatterns += [ 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'), + ] if settings.DEBUG: diff --git a/rog/views.py b/rog/views.py index 2fa76a4..7e6b711 100644 --- a/rog/views.py +++ b/rog/views.py @@ -2683,6 +2683,61 @@ def update_checkins_old(request): ) +@api_view(['GET']) +def get_photo_list(): + print("/get_photo_list") + + zekken = requests.args.get('zekken') + password = requests.args.get('pw') + event_code = requests.args.get('event') + + zekken_conversion = { + "MF3-160": "MZ3-160", + "MF3-161": "MZ3-161", + "MF3-162": "MZ3-162", + "MF3-163": "MZ3-163", + "MF5-170": "MZ5-170", + "MF5-171": "MZ5-171", + "MF5-172": "MZ5-172", + "MF5-173": "MZ5-173", + "MF5-174": "MZ5-174", + "MF5-175": "MZ5-175", + "MF5-176": "MZ5-176", + "MF5-177": "MZ5-177", + "MF5-178": "MZ5-178", + "MF5-179": "MZ5-179" + } + + if zekken in zekken_conversion: + zekken = zekken_conversion[zekken] + + photo_list = [] + + photo_list.extend(_get_photo_list(zekken, event_code)) + + return JsonResponse({ + "status": "OK", + "photo_list": photo_list, + "report": _get_final_report(zekken, event_code) + }) + +def _get_final_report(self, zekken, event_code): + report = f"https://sumasenrogaining.s3.us-west-2.amazonaws.com/{event_code}/scoreboard/certificate_{zekken}.pdf" + return report + +def _get_photo_list(self,zekken, event_code): + photos = [] + try: + checkins = GpsCheckin.objects.filter(zekken_number=zekken, event_code=event_code) + for checkin in checkins: + if checkin.image_address: + photos.append({ + "cp_number": checkin.cp_number, + "photo_url": checkin.image_address.url + }) + except Exception as e: + print(f"Error in _get_photo_list: {str(e)}") + return photos @api_view(['GET']) def export_excel(request, zekken_number, event_code):