o
    ,i=6                  
   @   s  d Z ddlZddlZddlmZmZmZmZm	Z	m
Z
mZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ z.ddlZddlZejejejejeZ e ejvriej!de  dd
l"m#Z# W n e$y Z% ze&de%  dd Z#W Y dZ%[%ndZ%[%ww dd Z'dd Z(e)de'dddZ*ej)ddgde'dd Z+ej)ddgde'dd Z,dS )u    
파일 관리 관련 라우트
    N)requestrender_templatejsonifysessionflashredirecturl_for)get_db_connectionclean_dataframe_datasort_componentsnormalize_componentCOMPONENT_ORDER)natural_sort_key)pivot_detail_view)evaluate_slab_condition   )file_management_bp)generate_repair_tablesu&   generate_repair_tables import 실패: c                 C   s   dS )N)u%   <p>보수 데이터 로딩 중...</p>u%   <p>비용 데이터 로딩 중...</p>u%   <p>평가 데이터 로딩 중...</p> )dffilenamer   r   P/home/skpark/git/infrasmart_work/infrasmart/blueprints/file_management/routes.pyr      s   r   c                    s$   ddl m} |  fdd}|S )u    로그인 필요 데코레이터r   )wrapsc                     s"   dt vr
ttdS  | i |S )Nusernamez
auth.login)r   r   r   )argskwargsfr   r   decorated_function    s   z*login_required.<locals>.decorated_function)	functoolsr   )r   r   r   r   r   r   login_required   s   r    c                 C   s   dd l }|jddks|jddkrMd| jv rG| d  D ]%}| | d |k }td| dt| d	 t|jd
d dd td qd S td d S d S )Nr   DEBUGTrueFLASK_DEBUG1u   원본부재명z
[z] - u   개 데이터T   )indexmax_colsmax_colwidthz(----------------------------------------u1   [DEBUG] '원본부재명' 컬럼이 없습니다.)osenvirongetcolumnsuniqueprintlen	to_string)r   r)   	componentcomponent_dfr   r   r   console_logdf'   s    

r3   z/view_file/<filename>Fc           %      C   st  t  }| }| td< z$z|d | du}|r'|d| td f n
|d| td f | }|sKtd ttdW W |  |  S d}|r`t	|d	kr`|d	 r]|d	 nd
}nd
}|d }t
|trpt|}t|}t| t|}t|d  }	||d |	 }d}
d}d}d}d}t| dd|d\}
}| }|d jjddd|d jjdddB }d|j|df< |g dddg   }|d d|d< |d dd |d< |djdd	d}|d7 }|d 7 }|d!7 }|d"7 }|d#7 }|d$7 }|d%7 }|d&7 }|d'7 }|d(7 }|d)7 }|d*7 }|d+7 }|d"7 }|d#7 }|d$7 }|d%7 }|d&7 }|d'7 }|  D ]?\}}|d,7 }|d-|d  d.7 }|d/|d  d.7 }|d-|d0  d.7 }|d-|d  d.7 }|d-|d  d.7 }|d17 }q>|d)7 }|d27 }t!|| \}}}|d3| td f | }|r|d durt"|d nd4}|r|d	 durt"|d	 nd5}||d d6k  }g }t#|d7  t$d8D ]}||d7 |k }d9|j%v r|d9  }nd}d:|j%v r$||d jjd;dd d: & }t'|rd}nzt"|}W n t(t)fy#   d}Y nw d}||d jjd;dd d  }||d jjd<dd d  } ||d jjd=dd d  }!||d jjd>dd d  }"t*|t'|ss|dkrudn|t'| s| dkrdn| t'|!s|!dkrdn|!t'|"s|"dkrdn|"d?}#|+|t|d	t'|s|nd@|dkrt|dnd@| dkrt| dnd@|!dkrt|!dAnd@|"dkrt|"dnd@|#dB qt,dCt-j./dDdE|
||||||d| ||dFW W |  |  S  t0y0 }$ ztdGt|$  ttdW  Y d}$~$W |  |  S d}$~$ww |  |  w )Hu   파일 보기current_filenamez
            SELECT column_name
            FROM information_schema.columns
            WHERE table_name = 'uploaded_files' AND column_name = 'plan_type'
        NzTSELECT file_data, plan_type FROM uploaded_files WHERE filename = %s AND user_id = %suser_idzISELECT file_data FROM uploaded_files WHERE filename = %s AND user_id = %su"   파일을 찾을 수 없습니다.z
main.indexr   freer   	   부재명 aaaaaTF)pivotdetail	user_plan   손상내용u   받침)nau	   전단키u   교량받침)r7   r=      단위u   손상물량u   개소   c                 S   s"   t | tv rtt | S ttS )N)r   r   r&   r/   )xr   r   r   <lambda>   s   " zview_file.<locals>.<lambda>u   부재명_순서)axiszb<div id="overall-table-header" class="table-container overall-table"><table class="table-striped">z <thead>z  <tr style="text-align: right;">u*    <th style="width: 150px;" >부재명</th>u-    <th style="width: 300px;" >손상내용</th>u&    <th style="width: 150px;">단위</th>u,    <th style="width: 150px;">손상물량</th>u&    <th style="width: 150px;">개소</th>z </tr>z	 </thead>z</tbody></table></div>zb<div class="table-container overall-table"><table id="overall-table" class="table-striped"><thead>zU <tr style="display:none" id="overall-print-table-header" style="text-align: right;">z<tr>z<td style="width: 150px;">z</td>z<td style="width: 300px;">r?   z</tr>z</div>z|
        SELECT markup_rate, overhead_rate
        FROM uploaded_files
        WHERE filename = %s AND user_id = %s
        g      4@g      I@u	   바닥판u   부재위치)key   점검면적u   폭u   균열u   백태|누수u$   박락|파손|재료분리|층분리   철근부식)crack_widthcrack_ratio
leak_ratiosurface_damage_ratiorebar_corrosion_ratio-   )u   구분rE   u	   균열폭u	   균열율u   백태u   표면손상rF   u   등급zindex_re.htmltabr;   )
active_tabdetail_htmldetail_html_header_linkoverall_htmlrepair_html	cost_html	file_dataslab_eval_tableerror_messager   markup_rateoverhead_rateu9   파일을 불러오는 중 오류가 발생했습니다: )1r	   cursorr   executefetchoner   r   r   closer/   
isinstancestrjsonloadspd	DataFramer3   r
   r   r-   isinr   copycontainslocgroupbysumreset_indexroundapplysort_valuesdropiterrowsr   floatsortedr   r,   maxisna
ValueError	TypeErrorr   appendr   r   r   r+   	Exception)%r   r:   conncurhas_plan_typeresultfile_plan_typerU   r   unique_componentsrP   rQ   rR   rS   rT   
df_overallbearing_damage_maskoverall_row	eval_htmlrates_resultrX   rY   slab_dfrV   possubareacrack_width_rawrG   rH   rI   rJ   rebar_ratiogradeer   r   r   	view_file6   s,  


 )
 



$$     


r   z/delete_file/<filename>POST)methodsc                 C   s   t ddiS )u   파일 삭제successT)r   )r   r   r   r   delete_file  s   r   z/update_file_damage_detailsc                  C   sV  t  } td }tdd}tdd}zz]t }| }|d||f |  D ]+\}}|d||||d |d	 |d
 |d |d |d |d |d |d |d f q)|  t	d |\}}	}
t
d||	dW W |  |  S  ty } z#td| |  t
dt|ddfW  Y d }~W |  |  S d }~ww |  |  w )Nr5   r   unknownr4   unnamed_filezf
            DELETE FROM file_damage_details
            WHERE user_id = %s AND filename = %s
        a}  
                INSERT INTO file_damage_details (
                    user_id, username, filename,unit,
                    component_name, damage_description,
                    repair_method, priority,damage_quantity,
                    repair_quantity, count, unit_price, estimated_cost
                ) VALUES (%s, %s, %s,%s, %s, %s, %s, %s, %s,%s, %s, %s, %s)
            unitr1   damagemethodprioritydamage_quantityquantitycount	unitPrice	totalCostu   보수물량 저장 완료)messagerS   rT   u   업데이트 오류:u   오류 발생)r   errori  )r   get_jsonr   r+   r	   rZ   r[   itemscommitr   r   r]   rw   r.   rollbackr_   )datar5   r   r   rx   ry   rD   r;   rS   cost_htmlxxxxr   r   r   r   r   update_file_damage_details
  sT   

"

r   )F)-__doc__r`   pandasrb   flaskr   r   r   r   r   r   r   utils.commonr	   r
   r   r   r   utils.damage_utilsr   utils.pivot_detail_viewr   utils.evaluationr   r8   r   sysr)   pathdirnameabspath__file__project_rootinsertutils.generate_repair_tablesr   ImportErrorr   r.   r    r3   router   r   r   r   r   r   r   <module>   sB    $$

 K