|
1 | 1 | import re
|
2 |
| -from io import BytesIO |
3 | 2 | from typings.activity import (
|
4 | 3 | Activity,
|
5 | 4 | ActivityMember,
|
6 |
| - ActivityMode, |
7 | 5 | ActivityStatus,
|
8 | 6 | ActivityType,
|
9 | 7 | MemberActivityStatus,
|
10 |
| - SpecialActivityClassify, Special, |
| 8 | + SpecialActivityClassify, |
11 | 9 | )
|
12 |
| -from fastapi import APIRouter, File, HTTPException, Depends, UploadFile |
13 |
| -import copy |
| 10 | +from fastapi import APIRouter, HTTPException, Depends |
14 | 11 | from typings.log import inject_log
|
15 | 12 | from util.get_class import get_activities_related_to_user
|
16 | 13 | from util.group import is_in_a_same_class
|
|
19 | 16 | from datetime import datetime
|
20 | 17 | from database import db
|
21 | 18 | from pydantic import BaseModel
|
22 |
| -import pandas as pd |
23 | 19 |
|
24 | 20 | router = APIRouter()
|
25 | 21 |
|
@@ -91,57 +87,6 @@ async def create_activity(payload: Activity, user=Depends(get_current_user), log
|
91 | 87 | return {"status": "ok", "code": 201, "data": str(id)}
|
92 | 88 |
|
93 | 89 |
|
94 |
| -@router.post("/upload") |
95 |
| -async def upload_activity_excel(name: str, desc: str, payload: UploadFile = File(...), user=Depends(get_current_user), |
96 |
| - log=Depends(inject_log)): |
97 |
| - """ |
98 |
| - Upload activity excel |
99 |
| - """ |
100 |
| - |
101 |
| - expected_columns = ['_id', 'ID', 'Name', 'Class ID', 'On Campus', 'Off Campus', 'Social Practice'] |
102 |
| - |
103 |
| - try: |
104 |
| - contents = await payload.read() |
105 |
| - filename = BytesIO(contents) |
106 |
| - |
107 |
| - sheet_names = pd.ExcelFile(filename).sheet_names |
108 |
| - |
109 |
| - # Read all sheets into a list of DataFrames |
110 |
| - dfs = [pd.read_excel(filename, sheet_name=sheet) for sheet in sheet_names] |
111 |
| - |
112 |
| - # Concatenate all DataFrames into one |
113 |
| - df = pd.concat(dfs, ignore_index=True) |
114 |
| - |
115 |
| - if df.columns.to_list() != expected_columns: |
116 |
| - raise HTTPException(status_code=400, detail="Invalid excel format") |
117 |
| - |
118 |
| - df.fillna(0.0) |
119 |
| - accepted_modes = ['On Campus', 'Off Campus', 'Social Practice'] |
120 |
| - |
121 |
| - info = Activity(_id='', type=ActivityType.special, name=name, description=desc, members=[], registration=None, |
122 |
| - date=datetime.now().isoformat(), createdAt=datetime.now().isoformat(), |
123 |
| - updatedAt=datetime.now().isoformat(), creator=user['id'], status=ActivityStatus.effective, |
124 |
| - special=Special(classify=SpecialActivityClassify.import_), approver='authority') |
125 |
| - |
126 |
| - for mode in accepted_modes: |
127 |
| - template = copy.deepcopy(info) |
128 |
| - template.name += ' | Mode: ' + mode |
129 |
| - for idx, row in df.iterrows(): |
130 |
| - if row[mode] != 0.0 and not pd.isna(row[mode]): |
131 |
| - template.members.append(ActivityMember(_id=row['_id'], id=row['_id'], status=MemberActivityStatus.effective, |
132 |
| - mode=ActivityMode(mode.replace(' ', '-').lower()), |
133 |
| - duration=row[mode])) |
134 |
| - if len(user) != 0: |
135 |
| - await create_activity(template, user=user, log=log) |
136 |
| - except Exception as e: |
137 |
| - raise HTTPException(status_code=400, detail=str(e)) |
138 |
| - |
139 |
| - log.with_text(f"User {await get_user_name(user['id'])} uploaded activity excel") |
140 |
| - await log.insert_log() |
141 |
| - |
142 |
| - return {"status": "ok", "code": 201} |
143 |
| - |
144 |
| - |
145 | 90 | class PutDescription(BaseModel):
|
146 | 91 | description: str
|
147 | 92 |
|
|
0 commit comments