Ë
    
.ÚiU,  ã                   ó"  — d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ dd	lmZ dd
lmZmZ dedefd„Zd„ Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zdedefd„Z G d„ de«      Z G d„ de«      Zy)uº   
Gestion des appels audio/vidÃ©o sur un dossier.
Signaling WebRTC natif via polling : offer SDP, answer SDP et ICE candidates
Ã©changÃ©s entre les deux parties sans dÃ©pendance externe.
é    N)Útimezone)ÚAPIView)ÚIsAuthenticated)ÚResponse©Ústatus)ÚNotFoundÚPermissionDenied)Úget_active_tenant_for_user)ÚCaseÚCaseCallÚcallÚreturnc           	      ó˜  — | j                   }|r\|j                  xs dj                  «       › d|j                  xs dj                  «       › �j                  «       xs |j                  }nd}| j
                  | j                  | j                  | j                  | j                  || j                  | j                  j                  «       dœS )NÚ Ú ÚInconnu)ÚidÚcase_idÚ	room_nameÚ	call_typeÚinitiator_sideÚinitiator_namer   Ú
created_at)Ú	initiatorÚ
first_nameÚstripÚ	last_nameÚusernamer   r   r   r   r   r   r   Ú	isoformat)r   ÚuÚnames      ú&/var/www/html/acx/cases/views_calls.pyÚ_call_to_dictr$      s§   € Ø�‰€AÙØ—<‘<Ò% 2×,Ñ,Ó.Ð/¨q°!·+±+Ò2CÀ×1JÑ1JÓ1LÐ0MÐN×TÑTÓVÒdÐZ[×ZdÑZd‰àˆà�g‰gØ—<‘<Ø—^‘^Ø—^‘^Ø×-Ñ-ØØ—+‘+Ø—o‘o×/Ñ/Ó1ñ	ð 	ó    c                  óJ   — dt        j                  «       j                  d d › �S )Nzacx-é   )ÚuuidÚuuid4Úhex© r%   r#   Ú	_gen_roomr,   (   s#   € Ø”$—*‘*“,×"Ñ" 3 BÐ'Ð(Ð)Ð)r%   c                   ó>   — e Zd ZdZegZdedefd„Zdefd„Z	defd„Z
y)ÚTenantCaseCallsViewu†   
    GET  /cases/{case_id}/calls/active/  â†’ appel actif ou null
    POST /cases/{case_id}/calls/         â†’ dÃ©marrer un appel
    r   r   c                 óÂ   — t        |j                  «      }|st        d«      ‚t        j                  j                  ||¬«      j                  «       }|st        d«      ‚|S )NúNo active tenant.©r   ÚtenantúCase not found.)r   Úuserr
   r   ÚobjectsÚfilterÚfirstr	   )ÚselfÚrequestr   r2   Úcs        r#   Ú	_get_casezTenantCaseCallsView._get_case5   sU   € Ü+¨G¯L©LÓ9ˆÙÜ"Ð#6Ó7Ð7Ü�L‰L×Ñ 7°6ÐÓ:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-Øˆr%   c                 ó¼   — | j                  ||«      }t        j                  j                  |d¬«      j	                  «       }t        |rt        |«      «      S d «      S ©NÚactive©Úcaser   ©r;   r   r5   r6   r7   r   r$   ©r8   r9   r   r:   r   s        r#   ÚgetzTenantCaseCallsView.get>   óP   € Ø�N‰N˜7 GÓ,ˆÜ×Ñ×&Ñ&¨A°hÐ&Ó?×EÑEÓGˆÜ©tœ dÓ+Ó>Ð>¸Ó>Ð>r%   c                 óÈ  — | j                  ||«      }t        j                  j                  |d¬«      j	                  dt        j                  «       ¬«       |j                  j                  d«      xs dj                  «       }|dvrd}t        j                  j                  ||j                  dt        «       |¬	«      }t        t        |«      t        j                   ¬
«      S )Nr>   r?   Úended©r   Úended_atr   Úvideo©ÚaudiorI   r2   ©r@   r   r   r   r   r   ©r;   r   r5   r6   Úupdater   ÚnowÚdatarC   ÚlowerÚcreater4   r,   r   r$   Ú
drf_statusÚHTTP_201_CREATED©r8   r9   r   r:   r   r   s         r#   ÚpostzTenantCaseCallsView.postC   sÅ   € Ø�N‰N˜7 GÓ,ˆô 	×Ñ×Ñ Q¨xÐÓ8×?Ñ?Ø¤X§\¡\£^ð 	@ô 	
ð —\‘\×%Ñ% kÓ2Ò=°g×DÑDÓFˆ	ØÐ.Ñ.ØˆIä×Ñ×&Ñ&ØØ—l‘lØ#Ü“kØð 'ó 
ˆô œ dÓ+´J×4OÑ4OÔPÐPr%   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpermission_classesÚintr   r;   rC   rV   r+   r%   r#   r.   r.   .   s?   „ ñð *Ð*Ðð¨#ð °$ó ð? Có ?ð
Q Sô Qr%   r.   c                   ó&   — e Zd ZdZegZdedefd„Zy)ÚTenantCaseCallEndViewu?   DELETE /cases/{case_id}/calls/{call_id}/  â†’ terminer un appelr   Úcall_idc                 ó¸  — t        |j                  «      }|st        d«      ‚t        j                  j                  ||¬«      j                  «       }|st        d«      ‚t        j                  j                  ||¬«      j                  «       }|st        d«      ‚d|_	        t        j                  «       |_        |j                  ddg¬	«       t        d
di«      S )Nr0   r1   r3   ©r   r@   úCall not found.rF   r   rH   ©Úupdate_fieldsÚokT)r   r4   r
   r   r5   r6   r7   r	   r   r   r   rO   rH   Úsaver   ©r8   r9   r   r`   r2   r:   r   s          r#   ÚdeletezTenantCaseCallEndView.delete]   s¹   € Ü+¨G¯L©LÓ9ˆÙÜ"Ð#6Ó7Ð7Ü�L‰L×Ñ 7°6ÐÓ:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-Ü×Ñ×&Ñ&¨'¸Ð&Ó:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-ØˆŒÜ Ÿ™›ˆŒØ�	‰	 ¨:Ð 6ˆ	Ô7Ü˜˜t˜Ó%Ð%r%   N©rX   rY   rZ   r[   r   r\   r]   ri   r+   r%   r#   r_   r_   Y   s!   „ ÙIØ)Ð*Ðð& sð &°Sô &r%   r_   c                   ó>   — e Zd ZdZegZdedefd„Zdefd„Z	defd„Z
y)ÚCustomerPortalCaseCallsViewu¶   
    GET  /customer-portal/cases/{case_id}/calls/active/  â†’ appel actif ou null
    POST /customer-portal/cases/{case_id}/calls/         â†’ dÃ©marrer un appel (cÃ´tÃ© client)
    r   r   c                 ó@  — ddl m} |j                  j                  |j                  d¬«      j                  d«      j                  «       }|st        d«      ‚t        j                  j                  ||j                  ¬«      j                  «       }|st        d«      ‚|S )	Nr   ©ÚCustomerMembershipr>   ©r4   r   ÚcustomerúNo active customer membership.©r   rq   r3   )Úcustomers.modelsro   r5   r6   r4   Úselect_relatedr7   r
   r   rq   r	   )r8   r9   r   ro   Ú
membershipr:   s         r#   r;   z%CustomerPortalCaseCallsView._get_casev   s‰   € Ý7Ø'×/Ñ/×6Ñ6Ø—‘ hð 7ó 
ç
‰.˜Ó
$§U¡U£Wð 	ñ Ü"Ð#CÓDÐDÜ�L‰L×Ñ 7°Z×5HÑ5HÐÓI×OÑOÓQˆÙÜÐ,Ó-Ð-Øˆr%   c                 ó¼   — | j                  ||«      }t        j                  j                  |d¬«      j	                  «       }t        |rt        |«      «      S d «      S r=   rA   rB   s        r#   rC   zCustomerPortalCaseCallsView.get‚   rD   r%   c                 óÈ  — | j                  ||«      }t        j                  j                  |d¬«      j	                  dt        j                  «       ¬«       |j                  j                  d«      xs dj                  «       }|dvrd}t        j                  j                  ||j                  dt        «       |¬	«      }t        t        |«      t        j                   ¬
«      S )Nr>   r?   rF   rG   r   rI   rJ   rq   rL   r   rM   rU   s         r#   rV   z CustomerPortalCaseCallsView.post‡   sÃ   € Ø�N‰N˜7 GÓ,ˆÜ×Ñ×Ñ Q¨xÐÓ8×?Ñ?Ø¤X§\¡\£^ð 	@ô 	
ð —\‘\×%Ñ% kÓ2Ò=°g×DÑDÓFˆ	ØÐ.Ñ.ØˆIÜ×Ñ×&Ñ&ØØ—l‘lØ%Ü“kØð 'ó 
ˆô œ dÓ+´J×4OÑ4OÔPÐPr%   NrW   r+   r%   r#   rl   rl   o   s?   „ ñð *Ð*Ðð
¨#ð 
°$ó 
ð? Có ?ð
Q Sô Qr%   rl   c                   ó&   — e Zd ZdZegZdedefd„Zy)ÚCustomerPortalCaseCallEndViewz8DELETE /customer-portal/cases/{case_id}/calls/{call_id}/r   r`   c                 ó  — ddl m} |j                  j                  |j                  d¬«      j                  «       }|st        d«      ‚t        j                  j                  ||j                  ¬«      j                  «       }|st        d«      ‚t        j                  j                  ||¬«      j                  «       }|st        d	«      ‚d
|_        t        j                  «       |_        |j                  ddg¬«       t!        ddi«      S )Nr   rn   r>   rp   rr   rs   r3   rb   rc   rF   r   rH   rd   rf   T)rt   ro   r5   r6   r4   r7   r
   r   rq   r	   r   r   r   rO   rH   rg   r   ©r8   r9   r   r`   ro   rv   r:   r   s           r#   ri   z$CustomerPortalCaseCallEndView.delete�   sä   € Ý7Ø'×/Ñ/×6Ñ6Ø—‘ hð 7ó 
ç
‰%‹'ð 	ñ Ü"Ð#CÓDÐDÜ�L‰L×Ñ 7°Z×5HÑ5HÐÓI×OÑOÓQˆÙÜÐ,Ó-Ð-Ü×Ñ×&Ñ&¨'¸Ð&Ó:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-ØˆŒÜ Ÿ™›ˆŒØ�	‰	 ¨:Ð 6ˆ	Ô7Ü˜˜t˜Ó%Ð%r%   Nrj   r+   r%   r#   rz   rz   ™   s!   „ ÙBØ)Ð*Ðð& sð &°Sô &r%   rz   c                 óœ   — | j                   | j                  | j                  | j                  | j                  xs g | j
                  xs g dœS )N©r   r   Ú	offer_sdpÚ
answer_sdpÚice_initiatorÚice_peerr~   )r   s    r#   Ú_signal_to_dictrƒ   ²   sB   € à�g‰gØ—+‘+Ø—^‘^Ø—o‘oØ×+Ñ+Ò1¨rØ—M‘MÒ' Rñð r%   c                   óJ   — e Zd ZdZegZdededefd„Zdedefd„Z	dedefd„Z
y)	ÚTenantCaseCallSignalViewuª   
    GET  /cases/{case_id}/calls/{call_id}/signal/  â†’ Ã©tat signaling WebRTC
    PATCH /cases/{case_id}/calls/{call_id}/signal/ â†’ mettre Ã  jour offer/answer/ICE
    r   r`   r   c                 ó:  — t        |j                  «      }|st        d«      ‚t        j                  j                  ||¬«      j                  «       }|st        d«      ‚t        j                  j                  ||¬«      j                  «       }|st        d«      ‚|S )Nr0   r1   r3   rb   rc   )	r   r4   r
   r   r5   r6   r7   r	   r   rh   s          r#   Ú	_get_callz"TenantCaseCallSignalView._get_callÄ   sˆ   € Ü+¨G¯L©LÓ9ˆÙÜ"Ð#6Ó7Ð7Ü�L‰L×Ñ 7°6ÐÓ:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-Ü×Ñ×&Ñ&¨'¸Ð&Ó:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-Øˆr%   c                 óP   — | j                  |||«      }t        t        |«      «      S ©N©r‡   r   rƒ   ©r8   r9   r   r`   r   s        r#   rC   zTenantCaseCallSignalView.getÐ   ó$   € Ø�~‰~˜g w°Ó8ˆÜœ¨Ó-Ó.Ð.r%   c                 ó  — | j                  |||«      }|j                  }g }d|v r|d   |_        |j                  d«       d|v r|d   |_        |j                  d«       d|v r>|d   }t        |t        «      r)|j                  xs g |z   |_        |j                  d«       d|v r>|d   }t        |t        «      r)|j                  xs g |z   |_        |j                  d«       |r|j                  |¬«       t        t        |«      «      S ©Nr   r€   Úadd_ice_initiatorr�   Úadd_ice_peerr‚   rd   ©r‡   rP   r   Úappendr€   Ú
isinstanceÚlistr�   r‚   rg   r   rƒ   ©r8   r9   r   r`   r   rP   re   Ú
candidatess           r#   ÚpatchzTenantCaseCallSignalView.patchÔ   ó	  € Ø�~‰~˜g w°Ó8ˆØ�|‰|ˆØˆà˜$ÑØ! +Ñ.ˆDŒNØ× Ñ  Ô-Ø˜4ÑØ" <Ñ0ˆDŒOØ× Ñ  Ô.Ø $Ñ&ØÐ1Ñ2ˆJÜ˜*¤dÔ+Ø&*×&8Ñ&8Ò&>¸BÀ*Ñ%L�Ô"Ø×$Ñ$ _Ô5Ø˜TÑ!Ø˜nÑ-ˆJÜ˜*¤dÔ+Ø!%§¡Ò!4°"¸
Ñ B�”Ø×$Ñ$ ZÔ0áØ�I‰I MˆIÔ2Üœ¨Ó-Ó.Ð.r%   N©rX   rY   rZ   r[   r   r\   r]   r   r‡   rC   r—   r+   r%   r#   r…   r…   ½   sR   „ ñð *Ð*Ðð
¨#ð 
¸ð 
Àó 
ð/ Cð /°#ó /ð/ cð /°Cô /r%   r…   c                   óJ   — e Zd ZdZegZdededefd„Zdedefd„Z	dedefd„Z
y)	Ú CustomerPortalCaseCallSignalViewzŠ
    GET  /customer-portal/cases/{case_id}/calls/{call_id}/signal/
    PATCH /customer-portal/cases/{case_id}/calls/{call_id}/signal/
    r   r`   r   c                 ó¸  — ddl m} |j                  j                  |j                  d¬«      j                  d«      j                  «       }|st        d«      ‚t        j                  j                  ||j                  ¬«      j                  «       }|st        d«      ‚t        j                  j                  ||¬	«      j                  «       }|st        d
«      ‚|S )Nr   rn   r>   rp   rq   rr   rs   r3   rb   rc   )rt   ro   r5   r6   r4   ru   r7   r
   r   rq   r	   r   r|   s           r#   r‡   z*CustomerPortalCaseCallSignalView._get_callö   s¼   € Ý7Ø'×/Ñ/×6Ñ6Ø—‘ hð 7ó 
ç
‰.˜Ó
$§U¡U£Wð 	ñ Ü"Ð#CÓDÐDÜ�L‰L×Ñ 7°Z×5HÑ5HÐÓI×OÑOÓQˆÙÜÐ,Ó-Ð-Ü×Ñ×&Ñ&¨'¸Ð&Ó:×@Ñ@ÓBˆÙÜÐ,Ó-Ð-Øˆr%   c                 óP   — | j                  |||«      }t        t        |«      «      S r‰   rŠ   r‹   s        r#   rC   z$CustomerPortalCaseCallSignalView.get  rŒ   r%   c                 ó  — | j                  |||«      }|j                  }g }d|v r|d   |_        |j                  d«       d|v r|d   |_        |j                  d«       d|v r>|d   }t        |t        «      r)|j                  xs g |z   |_        |j                  d«       d|v r>|d   }t        |t        «      r)|j                  xs g |z   |_        |j                  d«       |r|j                  |¬«       t        t        |«      «      S rŽ   r‘   r•   s           r#   r—   z&CustomerPortalCaseCallSignalView.patch	  r˜   r%   Nr™   r+   r%   r#   r›   r›   ï   sR   „ ñð *Ð*Ðð¨#ð ¸ð Àó ð/ Cð /°#ó /ð/ cð /°Cô /r%   r›   )r[   r(   Údjango.utilsr   Úrest_framework.viewsr   Úrest_framework.permissionsr   Úrest_framework.responser   Úrest_frameworkr   rS   Úrest_framework.exceptionsr	   r
   Úaccounts.tenant_contextr   Úcases.modelsr   r   Údictr$   r,   r.   r_   rl   rz   rƒ   r…   r›   r+   r%   r#   ú<module>r¨      s¡   ðñó
 å !Ý (Ý 6Ý ,Ý /ß @å >ß 'ð
˜ð  Tó ò$*ô(Q˜'ô (QôV&˜Gô &ô,'Q 'ô 'QôT& Gô &ð2˜(ð  tó ô//˜wô //ôd2/ wõ 2/r%   