프론트엔드 작성중
This commit is contained in:
@@ -236,35 +236,86 @@ async def upload_file(
|
||||
async def get_materials(
|
||||
project_id: Optional[int] = None,
|
||||
file_id: Optional[int] = None,
|
||||
job_no: Optional[str] = None,
|
||||
filename: Optional[str] = None,
|
||||
revision: Optional[str] = None,
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
search: Optional[str] = None,
|
||||
item_type: Optional[str] = None,
|
||||
material_grade: Optional[str] = None,
|
||||
size_spec: Optional[str] = None,
|
||||
file_filter: Optional[str] = None,
|
||||
sort_by: Optional[str] = None,
|
||||
db: Session = Depends(get_db)
|
||||
):
|
||||
"""저장된 자재 목록 조회"""
|
||||
"""
|
||||
저장된 자재 목록 조회 (job_no, filename, revision 3가지로 필터링 가능)
|
||||
"""
|
||||
try:
|
||||
query = """
|
||||
SELECT m.id, m.file_id, m.original_description, m.quantity, m.unit,
|
||||
m.size_spec, m.material_grade, m.line_number, m.row_number,
|
||||
m.created_at,
|
||||
f.original_filename, f.project_id,
|
||||
f.original_filename, f.project_id, f.job_no, f.revision,
|
||||
p.official_project_code, p.project_name
|
||||
FROM materials m
|
||||
LEFT JOIN files f ON m.file_id = f.id
|
||||
LEFT JOIN projects p ON f.project_id = p.id
|
||||
WHERE 1=1
|
||||
"""
|
||||
|
||||
params = {}
|
||||
|
||||
if project_id:
|
||||
query += " AND f.project_id = :project_id"
|
||||
params["project_id"] = project_id
|
||||
|
||||
if file_id:
|
||||
query += " AND m.file_id = :file_id"
|
||||
params["file_id"] = file_id
|
||||
if job_no:
|
||||
query += " AND f.job_no = :job_no"
|
||||
params["job_no"] = job_no
|
||||
if filename:
|
||||
query += " AND f.original_filename = :filename"
|
||||
params["filename"] = filename
|
||||
if revision:
|
||||
query += " AND f.revision = :revision"
|
||||
params["revision"] = revision
|
||||
if search:
|
||||
query += " AND (m.original_description ILIKE :search OR m.material_grade ILIKE :search)"
|
||||
params["search"] = f"%{search}%"
|
||||
if item_type:
|
||||
query += " AND m.classified_category = :item_type"
|
||||
params["item_type"] = item_type
|
||||
if material_grade:
|
||||
query += " AND m.material_grade ILIKE :material_grade"
|
||||
params["material_grade"] = f"%{material_grade}%"
|
||||
if size_spec:
|
||||
query += " AND m.size_spec ILIKE :size_spec"
|
||||
params["size_spec"] = f"%{size_spec}%"
|
||||
if file_filter:
|
||||
query += " AND f.original_filename ILIKE :file_filter"
|
||||
params["file_filter"] = f"%{file_filter}%"
|
||||
|
||||
# 정렬 처리
|
||||
if sort_by:
|
||||
if sort_by == "quantity_desc":
|
||||
query += " ORDER BY m.quantity DESC"
|
||||
elif sort_by == "quantity_asc":
|
||||
query += " ORDER BY m.quantity ASC"
|
||||
elif sort_by == "name_asc":
|
||||
query += " ORDER BY m.original_description ASC"
|
||||
elif sort_by == "name_desc":
|
||||
query += " ORDER BY m.original_description DESC"
|
||||
elif sort_by == "created_desc":
|
||||
query += " ORDER BY m.created_at DESC"
|
||||
elif sort_by == "created_asc":
|
||||
query += " ORDER BY m.created_at ASC"
|
||||
else:
|
||||
query += " ORDER BY m.line_number ASC"
|
||||
else:
|
||||
query += " ORDER BY m.line_number ASC"
|
||||
|
||||
query += " ORDER BY m.line_number ASC LIMIT :limit OFFSET :skip"
|
||||
query += " LIMIT :limit OFFSET :skip"
|
||||
params["limit"] = limit
|
||||
params["skip"] = skip
|
||||
|
||||
@@ -287,6 +338,26 @@ async def get_materials(
|
||||
if file_id:
|
||||
count_query += " AND m.file_id = :file_id"
|
||||
count_params["file_id"] = file_id
|
||||
|
||||
if search:
|
||||
count_query += " AND (m.original_description ILIKE :search OR m.material_grade ILIKE :search)"
|
||||
count_params["search"] = f"%{search}%"
|
||||
|
||||
if item_type:
|
||||
count_query += " AND m.classified_category = :item_type"
|
||||
count_params["item_type"] = item_type
|
||||
|
||||
if material_grade:
|
||||
count_query += " AND m.material_grade ILIKE :material_grade"
|
||||
count_params["material_grade"] = f"%{material_grade}%"
|
||||
|
||||
if size_spec:
|
||||
count_query += " AND m.size_spec ILIKE :size_spec"
|
||||
count_params["size_spec"] = f"%{size_spec}%"
|
||||
|
||||
if file_filter:
|
||||
count_query += " AND f.original_filename ILIKE :file_filter"
|
||||
count_params["file_filter"] = f"%{file_filter}%"
|
||||
|
||||
count_result = db.execute(text(count_query), count_params)
|
||||
total_count = count_result.fetchone()[0]
|
||||
|
||||
Reference in New Issue
Block a user