Ë
    jAj´&  ã                  ó  — d dl mZ d dlmZmZ d dlmZ d dl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„ Ze G d„ d«      «       Ze G d	„ d
«      «       Zdd„Zdd„Zdd„Ze G d„ d«      «       Ze G d„ d«      «       Z G d„ d«      Zy)é    )Úannotations)Ú	dataclassÚfield)ÚPath)ÚSHEET_CAVESÚSHEET_EAU_CHAUDEÚSHEET_EAU_FROIDEÚ
SHEET_INFOÚSHEET_SURFACESÚSYNDIC_LOT_COPRO_OVERRIDE)Ú_cleanÚnormalize_lot_coproÚsplit_lot_copro_partsÚsplit_milliemesÚsplit_rangec                 óJ   — 	 dd l } | S # t        $ r}t        d«      |‚d }~ww xY w)Nr   z&openpyxl requis : pip install openpyxl)ÚopenpyxlÚImportErrorÚ
SystemExit)r   Úexcs     ú+Y:\copro_gestion\app\excel_import\reader.pyÚ_require_openpyxlr      s4   € ðLÛð €Oøô ò LÜÐAÓBÈÐKûðLús   ‚ ˆ	"‘�"c                  óò   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   edd„«       Zy)ÚInfoRowÚintÚrow_numÚstrÚ
lot_syndicÚlot_copro_excelÚ	nom_coproÚprenom_coproÚetage_porteÚbalÚcaveÚ	milliemesÚadresseÚ	tel_coproÚ
mail_coproÚautres_coordonneesÚgestionnaireÚcivilite_occÚnom_occÚ
prenom_occÚtel_occÚmail_occÚinfos_diversesÚanciens_occupantsc           
     ó
  — t        t        |«      dkD  r|d   nd«      }t        t        |«      dkD  r|d   nd«      }|s|sy  | d+i d|“d|“d|“dt        t        |«      dkD  r|d   nd«      “d	t        t        |«      d
kD  r|d
   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      dkD  r|d   nd«      “dt        t        |«      d kD  r|d    nd«      “d!t        t        |«      d"kD  r|d"   nd«      “d#t        t        |«      d$kD  r|d$   nd«      “d%t        t        |«      d&kD  r|d&   nd«      “d't        t        |«      d(kD  r|d(   nd«      “d)t        t        |«      d*kD  r|d*   «      “ŽS d«      “ŽS ),Né   Ú é   r   r   r   r    é   r!   é   r"   é   r#   é   r$   é   r%   é	   r&   é
   r'   é   r(   é   r)   é   r*   é   r+   é   r,   é   r-   é   r.   é   r/   é   r0   é   r1   é   © )r   Úlen)Úclsr   Úrowr   Ú	lot_copros        r   Úfrom_rowzInfoRow.from_row7   s¥  € ä¤c¨#£h°¢l˜C šF¸Ó;ˆ
Ü¤S¨£X°¢\˜3˜qš6°rÓ:ˆ	Ù¡)ØÙò 
Ùð
á!ð
ñ &ð
ô ¤s¨3£x°!¢|˜S šV¸Ô<ð	
ô
  ¬#¨c«(°Qª,  A¢¸BÔ?ð
ô ¬¨S«°Aª˜s 1šv¸2Ô>ð
ô ¤ S£¨A¢�s˜1’v°2Ô6ð
ô ¤# c£(¨Q¢,˜˜Aš°BÔ7ð
ô ¤s¨3£x°!¢|˜S šV¸Ô<ð
ô ¤c¨#£h°¢m˜3˜rš7¸Ô<ð
ô ¬¨C«°2ª˜S šW¸2Ô>ð
ô ¬¨S«°Bª˜c "šg¸BÔ?ð
ô  &´°S³¸B² c¨"¢gÀBÔGð
ô  ¬3¨s«8°bª=  B¢¸bÔAð
ô  ¬3¨s«8°bª=  B¢¸bÔAð
ô  ¤c¨#£h°¢m˜3˜rš7¸Ô<ð!
ô" ¬¨S«°Bª˜c "šg¸BÔ?ð#
ô$ ¤c¨#£h°¢m˜3˜rš7¸Ô<ð%
ô& ¤s¨3£x°"¢}˜C šG¸"Ô=ð'
ô( "¬S°«X¸ª] # b¢'ÀÔCð)
ô* %´°C³¸2² S¨¡WÔFð+
ð 	
ð* DFÔFð+
ð 	
ó    N)r   r   rK   ÚtupleÚreturnz'InfoRow | None')Ú__name__Ú
__module__Ú__qualname__Ú__annotations__ÚclassmethodrM   rH   rN   r   r   r      s…   … àƒLØƒOØÓØƒNØÓØÓØ	ƒHØ
ƒIØƒNØƒLØƒNØƒOØÓØÓØÓØƒLØƒOØƒLØƒMØÓØÓàò
ó ñ
rN   r   c                  óä   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   dZded<   dZded<   dZded<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<   edd„«       Zy)ÚLotDraftu!   Lot aprÃ¨s Ã©clatement Ã©ventuel.r   Ú
import_keyr   rL   ÚetageÚporter#   r$   r%   Núfloat | NoneÚsurfacer4   Únotesr   r   Ú
source_rowÚsplit_indexé   Úsplit_totalÚproprio_nomÚproprio_prenomzInfoRow | NoneÚraw_rowc                ó¸   — | j                   r5| j                  r)| j                   › d| j                  › �j                  «       S | j                   xs | j                  S )NÚ )rY   rZ   Ústrip©Úselfs    r   r"   zLotDraft.etage_portek   sD   € à�:Š:˜$Ÿ*š*Ø—j‘j�\  4§:¡: ,Ð/×5Ñ5Ó7Ð7Ø�z‰zÒ'˜TŸZ™ZÐ'rN   )rP   r   )rQ   rR   rS   Ú__doc__rT   r\   r]   r^   r_   ra   rb   rc   rd   Úpropertyr"   rH   rN   r   rW   rW   V   sŽ   … á+àƒOØƒOØƒNØƒJØƒJØ	ƒHØ
ƒIØƒNØ €Gˆ\Ó Ø€Eˆ3ƒOØ€J�ÓØ€K�ÓØ€K�ÓØ€K�ÓØ€N�CÓØ"€Gˆ^Ó"àò(ó ñ(rN   rW   c                ó˜   — t        | «      }|syd|v r5|j                  dd«      \  }}|j                  «       |j                  «       fS |dfS )N)r4   r4   rf   r`   r4   )r   Úsplitrg   )ÚvalueÚvÚaÚbs       r   Ú_etage_porte_partsrr   r   sK   € Üˆu‹€AÙØØ
ˆa�xØ�w‰w�s˜A‹‰ˆˆ1Ø�w‰w‹y˜!Ÿ'™'›)Ð#Ð#Øˆbˆ5€LrN   c                ó:   — | t         v r	t         |    S t        |«      S ©N)r   r   )ÚsyndicÚexcel_copros     r   Úresolve_lot_coprorw   |   s!   € ØÔ*Ñ*Ü(¨Ñ0Ð0Ü˜{Ó+Ð+rN   c                ó¼  — t        | j                  «      }t        |«      dkD  rt        | j                  «      n| j                  g}t        | j                  «      }t        |«      dk(  r| j                  g}t        t        |«      t        |«      t        |«      d«      }t        |«      dk(  rE|dkD  r@t        | j                  | j                  «      }t        |«      D �cg c]  }|› d|dz   › �‘Œ }}t        |«      |k  r'|j                  |r|d   nd«       t        |«      |k  rŒ't        |«      |k  r'|j                  |r|d   nd«       t        |«      |k  rŒ't        |«      |k  r#|j                  |d   «       t        |«      |k  rŒ#d}| j                  rd| j                  › �}| j                  r |dz   | j                  z   j                  «       }g }t        |«      D ]ñ  }|dk(  r*t        | j                  |d   «      }	| j                  xs |	}
n"t        ||   «      }	| j                  › d|dz   › �}
t!        ||   «      \  }}| j"                  d	v rdn| j"                  }|j                  t%        |
| j                  |	||| j&                  ||t        |«      k  r||   nd|| j(                  |dz   || j*                  | j,                  | ¬
«      «       Œó |S c c}w )Nr`   Ú-éÿÿÿÿr4   zAnciens occupants : Ú
r   Ú#)ú//ry   u   â€”)rX   r   rL   rY   rZ   r#   r$   r%   r]   r^   r_   ra   rb   rc   rd   )r   r   rI   r   r"   r   r%   Úmaxrw   r   ÚrangeÚappendr1   r0   rg   r   rr   r$   rW   r#   r   r    r!   )rK   Úcopro_partsÚetage_partsÚ
mill_partsÚcountÚbaseÚiÚ
notes_baseÚdraftsÚcoprorX   rY   rZ   r$   s                 r   Úexpand_info_rowrŠ   ‚   s©  € Ü'¨×(;Ñ(;Ó<€KÜ25°kÓ2BÀQÒ2F”+˜cŸo™oÔ.ÈSÏ_É_ÐL]€KÜ  §¡Ó/€JÜ
ˆ;Ó˜1ÒØ—m‘m�_ˆ
ä”�KÓ ¤# kÓ"2´C¸
³OÀQÓG€EÜ
ˆ;Ó˜1Ò ¨¢Ü  §¡°×1DÑ1DÓEˆÜ27¸´,Ó?±,¨Q˜$˜˜q  Q¡ Ò(°,ˆÐ?ä
ˆkÓ
˜UÒ
"Ø×Ñ©k˜; rš?¸rÔBô ˆkÓ
˜UÓ
"ä
ˆj‹/˜EÒ
!Ø×Ñ©J˜* Rš.¸BÔ?ô ˆj‹/˜EÓ
!ä
ˆkÓ
˜UÒ
"Ø×Ñ˜; r™?Ô+ô ˆkÓ
˜UÓ
"ð €JØ
×ÒØ+¨C×,AÑ,AÐ+BÐCˆ
Ø
×ÒØ  4Ñ'¨#×*<Ñ*<Ñ<×CÑCÓEˆ
à€FÜ�5Ž\ˆØ�AŠ:Ü% c§n¡n°kÀ!±nÓEˆEØŸ™Ò0¨5‰Jä'¨°A©Ó7ˆEØŸN™NÐ+¨1¨Q°©U¨GÐ4ˆJä)¨+°a©.Ó9‰ˆˆuØ—X‘XÐ!3Ñ3‰r¸¿¹ˆà�‰ÜØ%ØŸ>™>ØØØØ—G‘GØØ+,¬s°:«Ò+>˜* Qš-ÀBØ ØŸ;™;Ø ™EØ!ØŸM™MØ"×/Ñ/Øôõ	
ð ð< €Mùò] @s   ÃKc                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú
SurfaceRowr   r   rL   r[   r\   N©rQ   rR   rS   rT   rH   rN   r   rŒ   rŒ   ½   s   … àƒOØƒNØÔrN   rŒ   c                  óJ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   y	)
Ú	ReleveRowr   r"   rL   rb   r[   Úindex_valeurÚoccupant_nomÚtype_eauNr�   rH   rN   r   r�   r�   Ä   s$   … àÓØƒNØÓØÓØÓØ„MrN   r�   c                  óT   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zy
)ÚExcelSourcec                óX   — || _         t        «       }|j                  |dd¬«      | _        y )NT)Ú	read_onlyÚ	data_only)Úpathr   Úload_workbookÚ_wb)ri   r˜   r   s      r   Ú__init__zExcelSource.__init__Ï   s*   € ØˆŒ	Ü$Ó&ˆØ×)Ñ)¨$¸$È$Ð)ÓOˆ�rN   c                ó8   — | j                   j                  «        y rt   )rš   Úcloserh   s    r   r�   zExcelSource.closeÔ   s   € Ø�‰�‰ÕrN   c                ó¸   — | j                   j                  D ]4  }|j                  «       |j                  «       k(  sŒ%| j                   |   c S  t        d|›�«      ‚)NzOnglet introuvable : )rš   Ú
sheetnamesrg   ÚKeyError)ri   ÚexpectedÚnames      r   Ú_sheetzExcelSource._sheet×   sN   € Ø—H‘H×'Ô'ˆDØ�z‰z‹|˜xŸ~™~Ó/Ó/Ø—x‘x ‘~Ò%ð (ô Ð.¨x¨lÐ;Ó<Ð<rN   c                óÔ   — | j                  t        «      }g }t        |j                  dd¬«      d¬«      D ]/  \  }}t        j                  ||«      }|sŒ|j                  |«       Œ1 |S )Nr3   T©Úmin_rowÚvalues_only)Ústart)r£   r
   Ú	enumerateÚ	iter_rowsr   rM   r€   )ri   ÚwsÚrowsr†   rK   Úparseds         r   Úread_info_rowszExcelSource.read_info_rowsÝ   sa   € Ø�[‰[œÓ$ˆØ ˆÜ §¡°QÀD Ó IÐQR×S‰FˆAˆsÜ×%Ñ% a¨Ó-ˆFÚØ—‘˜FÕ#ð Tð ˆrN   c                óÄ  — | j                  t        «      }i }|j                  dd¬«      D ]ˆ  }t        t	        |«      dkD  r|d   nd«      }t        t	        |«      dkD  r|d   nd«      }t	        |«      dkD  r|d   nd }|r|�	 t        |«      ||<   Œh|sŒk|€Œn	 t        |«      |dt        |«      › �<   ŒŠ |S # t        t        f$ r Y Œžw xY w# t        t        f$ r Y Œ³w xY w)	Nr3   Tr¥   r   r4   r`   r8   zcopro:)	r£   r   rª   r   rI   ÚfloatÚ	TypeErrorÚ
ValueErrorr   )ri   r«   ÚoutrK   ru   r‰   Úsurfs          r   Úread_surfaceszExcelSource.read_surfacesæ   sò   € Ø�[‰[œÓ(ˆØ "ˆØ—<‘<¨°t�<Ö<ˆCÜ¤c¨#£h°¢l˜C šF¸Ó;ˆFÜ¤S¨£X°¢\˜3˜qš6°rÓ:ˆEÜ  ›X¨š\�3�q’6¨tˆDÙ˜$Ð*ðÜ"'¨£+�C˜’Kò ˜4Ñ+ðÜAFÀtÃ�C˜&Ô!4°UÓ!;Ð <Ð=Ò>ð =ð ˆ
øô "¤:Ð.ò Ùðûô
 "¤:Ð.ò Ùðús$   ÂB8ÂCÂ8C
Ã	C
ÃCÃCc                óø   — | j                  t        «      }i }|j                  dd¬«      D ]L  }t        t	        |«      dkD  r|d   nd«      }t        t	        |«      dkD  r|d   nd«      }|sŒB|dv rdn|||<   ŒN |S )Nr3   Tr¥   r   r4   r7   )r}   )r£   r   rª   r   rI   )ri   r«   r³   rK   ru   r$   s         r   Ú
read_caveszExcelSource.read_cavesù   s{   € Ø�[‰[œÓ%ˆØ ˆØ—<‘<¨°t�<Ö<ˆCÜ¤c¨#£h°¢l˜C šF¸Ó;ˆFÜ¤C¨£H¨q¢L˜#˜aš&°bÓ9ˆDÚØ$(¨G¡O™b¸��F’ð	 =ð
 ˆ
rN   c                ó�  — | j                  |«      }g }|j                  dd¬«      D �]  }t        t        |«      dkD  r|d   nd«      }t        t        |«      dkD  r|d   nd«      }|s|sŒEt        |«      dkD  r|d   nd }d }	|�(t	        |«      j                  «       dk7  r	 t        |«      }	|j                  t        |t        |j                  d«      d   j                  «       «      t        t        |«      d	kD  r|d	   nd«      |	t        t        |«      d
kD  r|d
   nd«      |¬«      «       �Œ	 |S # t        t        f$ r Y Œ—w xY w)Nr6   Tr¥   r   r4   r`   r5   Ú(r3   r7   )r"   rL   rb   r�   r‘   r’   )r£   rª   r   rI   r   rg   r°   r±   r²   r€   r�   r   rm   )
ri   Ú
sheet_namer’   r«   r¬   rK   rY   rL   Úidx_rawr�   s
             r   Ú_read_releveszExcelSource._read_releves  s8  € Ø�[‰[˜Ó$ˆØ "ˆØ—<‘<¨°t�<×<ˆCÜ¤S¨£X°¢\˜3˜qš6°rÓ:ˆEÜ¬¨S«°Aª˜s 1šv¸2Ó>ˆIÙ¡ØÜ # C£¨1¢�c˜!’f°$ˆGØˆLØÐ"¤s¨7£|×'9Ñ'9Ó';¸rÒ'AðÜ#(¨£>�Lð �K‰KÜØ %Ü1°)·/±/À#Ó2FÀqÑ2I×2OÑ2OÓ2QÓRÜ &´°S³¸A² s¨1¢vÀ2Ó FØ!-Ü!'´#°c³(¸Q²,¨¨AªÀBÓ!GØ%ôö	ð =ð, ˆøô "¤:Ð.ò Ùðús   Â"D3Ä3EÅEc                ó\   — | j                  t        d«      | j                  t        d«      z   S )NÚ
eau_froideÚ
eau_chaude)r¼   r	   r   rh   s    r   Úread_releves_eauzExcelSource.read_releves_eau  s0   € Ø×!Ñ!Ô"2°LÓAÀD×DVÑDVÜ˜lóE
ñ 
ð 	
rN   c                óh   — g }| j                  «       D ]  }|j                  t        |«      «       Œ |S rt   )r®   ÚextendrŠ   )ri   ÚlotsrK   s      r   Úexpand_all_lotszExcelSource.expand_all_lots#  s0   € Ø!ˆØ×&Ñ&Ö(ˆCØ�K‰Kœ¨Ó,Õ-ð )àˆrN   N)r˜   r   )rP   ÚNone)r¡   r   )rP   zlist[InfoRow])rP   zdict[str, float])rP   zdict[str, str])rº   r   r’   r   rP   úlist[ReleveRow])rP   rÆ   )rP   úlist[LotDraft])rQ   rR   rS   r›   r�   r£   r®   rµ   r·   r¼   rÀ   rÄ   rH   rN   r   r”   r”   Î   s0   „ óPó
ó=óóó&óó6
ô
rN   r”   N)rn   r   rP   ztuple[str, str])ru   r   rv   r   rP   r   )rK   r   rP   rÇ   )Ú
__future__r   Údataclassesr   r   Úpathlibr   Úapp.excel_import.configr   r   r	   r
   r   r   Úapp.excel_import.parsersr   r   r   r   r   r   r   rW   rr   rw   rŠ   rŒ   r�   r”   rH   rN   r   Ú<module>rÍ      s¨   ðÝ "ç (Ý ÷÷ ÷õ òð ÷3
ð 3
ó ð3
ðl ÷(ð (ó ð(ó6ó,ó8ðv ÷ð ó ðð ÷ð ó ð÷Yò YrN   