o
    #hI                     @   s   d dl Zd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d dl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 edeZe ddd Z!dd Z"dd Z#dS )    N)	Blueprint	send_file)Document)InchesPt)WD_ALIGN_PARAGRAPH)WD_ALIGN_VERTICAL)normalize_damage)classify_repairmatch_prioritymatch_unit_priceadjustnatural_sort_key)damage_solutions)get_damage_solutiondownloadz/download/<table_type>c           "   
      sX  t jdsdS td}| dkrZt }|dd |dD ]6\}}|jd| dd	 tt	|d
 }d
|}| d| d}|| t|d  td}|jddt|d  d d}	d|	_|	jD ]7}
|
jD ]1}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]}td|j_qqqmqh|	jd j}d|d _ d
|d _ d|d _ t!|D ]\}}||d|d   _ ||d|d   _ qd|d _ d|d _ |	jd j}d|d _ d|d _ d|d _ t"t|D ]}d|d|d   _ d|d|d   _ qd|d _ d|d _ |d
}|D ]\}}|	# j}t$||d _ t$||d _ t$|d j%d |d _ d}d}t!|D ]U\}}||d |k }|j&st'|d j%d }t(|d j%d }|d|d|d   _ t$||d|d   _ ||7 }||7 }qFd|d|d   _ d|d|d   _ qF|d|d _ t$||d _ |D ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}td|j_qӐqΐqq|jddd	 |D ]f}t)|}|jd | d!| d"d#d$ zAt*| d% v r5t+ fd&d'd(D s5t,-d) r)t.d%||}|| nt.d%||}|| nt. ||}|| W n
 t/yK   Y nw |d* q|0  q n| d+kr^|g d,ddg 1 2 }|d 3d|d< t }|d-d |jdd.d}	d|	_|	jD ];}
|
jD ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}td|j_qqqq|	jd j}d|d _ d
|d _ d|d _ d|d _ d|d _ |4 D ]p\}}
|	# j}t$|
d |d _ t$|
d
 |d _ t$|
d |d _ t'|
d d|d _ t$|
d |d _ |D ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}td|j_qMqHq&qn| d/krht5|}n	| d0krqt6|}t78 } |9|  | :d | dkrd1}!n| d+krd2}!n| d/krd3}!n| d0krd4}!n|  d5}!t;| d6|!d7d8S )9Nz	cache.csvu   데이터가 없습니다.detailu   부재별 집계표r   	   부재명u   부재명:    level   손상내용, u=   에 대한 외관조사결과에서 조사된 바와 같이, u"    등의 손상이 조사되었다.u   부재위치)key      rowscols
Table Grid	      단위   u   합계    손상물량   개소.2f-u!   손상별 원인 및 대책방안u   손상내용: u    (보수방안: )z	Heading 3)styleu   균열c                 3   s    | ]}| v V  qd S )N ).0xnormalized_dmgr,   E/home/skpark/git/infrasmart_work/infrasmart/download/download_file.py	<genexpr>   s    z!download_table.<locals>.<genexpr>)u   백태u   누수u   부u"   균열\(?[a-zA-Z]*=?[\d.]+(mm|㎜)z2--------------------------------------------------overallr   r   r!   u   외관조사 총괄표   repaircostu   부재별_집계표.docxu   외관조사_총괄표.docxu   보수물량표.docxu   개략공사비표.docxu	   _표.docxTzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)as_attachmentdownload_namemimetype)<ospathexistspdread_csvr   add_headinggroupbysortedsetjoinadd_paragraphuniquer   	add_tablelenr+   r   cellsr   
paragraphsparagraph_formatspace_beforespace_afterr   CENTER	alignmentr   vertical_alignmentrunsfontsizetext	enumeraterangeadd_rowstrilocemptyfloatintr
   r	   anyresearchr   	Exceptionadd_page_breaksumreset_indexrounditerrows_generate_repair_table_generate_cost_tableioBytesIOsaveseekr   )"
table_typedfdocnamegroupunique_damagesdamage_textsummary	positionstablerowcell	paragraphrunheader_cellsipossubheader_cellsdamage_groupsdamagedamage_group	row_cellstotal_damagetotal_countpos_data
damage_valcountdmgrepair_methodformatted_solutionr3   _
doc_streamfilenamer,   r/   r1   download_table   sL  






















"

  






















r   c                 C   s  |  g dddg   }|d t|d< |jdd dd	|d
< |d t|d< d|j|d dkdf< |jtdd	|d< |d d|d< t	 }|
dd |jddd}d|_|jD ]7}|jD ]1}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]}td|j_qqqdq_|jd j}d|d _d|d _d|d _d|d _d|d _d|d _d|d _d
|d _d|d _| D ]\}	}| j}
t|d |
d _t|d |
d _t|d |
d _t |d d|
d _t |d d|
d _t|d |
d _t|d |
d _t|d
 |
d _t!|d d|
d _|
D ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}td|j_qWqRq0q|S )u   보수물량표 생성 함수r4   r&   r'   r      보수방안c                 S      t | d | d dS Nr   r   )r   r   rv   r,   r,   r1   <lambda>       z(_generate_repair_table.<locals>.<lambda>r   axis   우선순위   단가r      주의관찰   보수물량r   u   보수물량표r    r   r   r   r!   r   r"   r5            r(   ,)"rA   rb   rc   applyr
   r   locr   rd   r   r@   rG   r+   r   rI   r   rJ   rK   rL   rM   r   rN   rO   r   rP   rQ   rR   rS   rT   re   rW   rX   r[   r\   )rm   r6   rn   ru   rv   rw   rx   ry   rz   r   r   r,   r,   r1   rf      sp   
















	rf   c                 C   s0  |  g dddg   }|d t|d< |jdd dd	|d
< |d t|d< |jtdd	|d< |d d|d< |d |d  |d< ||d dk  }|j g ddd	dddd ddd }t
 }|dd |jddd}d|_|jD ]7}|jD ]1}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]}	td|	j_qqqq~|jd j}
d|
d _d|
d _d
|
d _d|
d _d|
d _d|
d  _| D ]z\}}| j}t |d |d _t |d |d _t |d
 |d _t!|d d!|d _t |d |d _t"|d d"|d  _|D ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}	td|	j_qJqEq#q|jd#dd$ |jddd}d|_|jD ];}|jD ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}	td|	j_qqqrqm|jd j}
d
|
d _d%|
d _d&|
d _d'|
d _| d
d  }d}|# D ]o\}}t"|}t"|d( }|| }||7 }| j}t ||d _|d"|d _|d"|d _|d"|d _|D ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}	td|	j_q2q-qq| j}d)|d _d*|d _d*|d _t"|d"|d _|D ]4}td|jd j_td|jd j_tj|jd _tj|_|jD ]}|jD ]	}	td|	j_qqqa|S )+u    개략공사비표 생성 함수r4   r&   r'   r   r   c                 S   r   r   r   r   r,   r,   r1   r   9  r   z&_generate_cost_table.<locals>.<lambda>r   r   r   r   r   r      개략공사비r   )r   r   r   F)dropnarb   c                 S   s   d tt| S )Nr   )rD   rB   rC   )r.   r,   r,   r1   r   C  s    first)r   r'   r   r   r   u   개략공사비표r   r   r   r   r    r   r   r"   r5   r(   r   u    우선순위별 공사비 요약r   u   순공사비u   제경비(50%)u   전체 공사비g      ?u   총괄 개략공사비r%   )$rA   rb   rc   r   r
   r   r   rd   copyaggr   r@   rG   r+   r   rI   r   rJ   rK   rL   rM   r   rN   rO   r   rP   rQ   rR   rS   rT   re   rW   rX   r[   r\   items)rm   r6   filteredresultrn   ru   rv   rw   rx   ry   rz   r   r   summary_tablegroup_by_priority	total_sumprioamountsoftindirecttotalr,   r,   r1   rg   5  s   



	













	













rg   )$pandasr>   r;   r^   randomrh   flaskr   r   docxr   docx.sharedr   r   docx.enum.textr   docx.enum.tabler   utils.commonr	   utils.evaluationr
   r   r   r   r   static.data.damage_solutionsr   utils.damage_ai_generatorr   __name__download_bprouter   rf   rg   r,   r,   r,   r1   <module>   s(    

 bA