Ë
    
.ÚiZ  ã                   óø   — 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mZ d dlmZ d dlmZmZ d dlmZmZ d d	lmZmZ d
dlmZmZ  edg«       eeg«      d„ «       «       Z G d„ dej8                  «      Zy)é    )Útransaction)ÚQ)ÚviewsetsÚstatus)ÚIsAuthenticated)ÚactionÚapi_viewÚpermission_classes)ÚResponse)ÚPermissionDeniedÚValidationError)ÚCaseÚCaseNote)ÚCaseSerializerÚCaseNoteSerializeré   )Úget_active_customer_for_userÚget_active_customer_membershipÚGETc                 óŠ  — t        | j                  «      }|r|j                  st        d«      ‚|j                  }|j                  st        d«      ‚t        |j                  |j                  |j                  |j                  |j                  dœ|j                  |j                  |j                  |j                  dœdœ«      S )NzNo active customer membership.úCustomer portal disabled.)ÚidÚnameÚcodeÚportal_enabledÚ	tenant_id)r   Úroler   Úis_primary_contact)ÚcustomerÚ
membership)r   Úuserr   r   r   r   r   r   r   r   r   r   r   )ÚrequestÚcmÚcs      ú+/var/www/html/acx/customers/portal_views.pyÚcustomer_portal_mer&      s¦   € ô 
(¨¯©Ó	5€BÙ�R—[’[ÜÐ?Ó@Ð@à
�‰€AØ×ÒÜÐ:Ó;Ð;äà—$‘$Ø—F‘FØ—F‘FØ×.Ñ.ØŸ™ñ
ð —%‘%Ø—G‘GØ—i‘iØ"$×"7Ñ"7ñ	
ñó ð ó    c                   ó¼   ‡ — e Zd ZdZegZeZej                  j                  ddddd«      Zh d£Zd„ Zˆ fd	„Zd
„ Zd„ Zd„ Zˆ fd„Z edddgd¬«      dd„«       Zˆ xZS )ÚCustomerPortalCaseViewSetzO
    ViewSet portail client, scoping: cases appartenant au customer actif.
    ÚtenantÚdebtorÚ	portfolioÚassigned_tor   >   ÚtitleÚdue_dateÚmetadataÚpriorityc                 óŒ   — t        | j                  j                  «      }|st        d«      ‚|j                  st        d«      ‚|S )NzNo active customer.r   )r   r"   r!   r   r   )Úselfr$   s     r%   Úget_customerz&CustomerPortalCaseViewSet.get_customer9   s?   € Ü(¨¯©×):Ñ):Ó;ˆÙÜ"Ð#8Ó9Ð9Ø×ÒÜ"Ð#>Ó?Ð?Øˆr'   c                 ób   •— t         ‰| �  «       }| j                  «       }|j                  |d<   |S )u–   
        Important : on injecte tenant=customer.tenant pour que CaseSerializer.validate
        puisse vÃ©rifier debtor/portfolio par tenant.
        r*   )ÚsuperÚget_serializer_contextr4   r*   )r3   Úctxr   Ú	__class__s      €r%   r7   z0CustomerPortalCaseViewSet.get_serializer_contextA   s2   ø€ ô
 ‰gÑ,Ó.ˆØ×$Ñ$Ó&ˆØ Ÿ™ˆˆH‰Øˆ
r'   c                 óÊ  — | j                  «       }| j                  j                  |¬«      }| j                  j                  j                  d«      }|r|j                  |¬«      }| j                  j                  j                  d«      xs dj                  «       }|r5|j                  t        |¬«      t        |¬«      z  t        |¬«      z  «      }|j                  d	«      S )
N)r   r   ©r   ÚqÚ )Útitle__icontains)Úreference__icontains)Údebtor__full_name__icontainsú-id)	r4   ÚquerysetÚfilterr"   Úquery_paramsÚgetÚstripr   Úorder_by)r3   r   ÚqsÚstatus_qr<   s        r%   Úget_querysetz&CustomerPortalCaseViewSet.get_querysetK   sÀ   € Ø×$Ñ$Ó&ˆØ�]‰]×!Ñ!¨8Ð!Ó4ˆà—<‘<×,Ñ,×0Ñ0°Ó:ˆÙØ—‘ (�Ó+ˆBà�\‰\×&Ñ&×*Ñ*¨3Ó/Ò5°2×<Ñ<Ó>ˆÙØ—‘Ü 1Ô%Ü¨Ô+ñ,ä°Ô3ñ4óˆBð �{‰{˜5Ó!Ð!r'   c                 ó  — | j                  «       }t        j                  «       5  |j                  |j                  || j
                  j                  t        j                  j                  ¬«       ddd«       y# 1 sw Y   yxY w)uy   
        CrÃ©ation dossier par client (optionnel).
        On force tenant & customer & created_source=CUSTOMER.
        )r*   r   Ú
created_byÚcreated_sourceN)
r4   r   ÚatomicÚsaver*   r"   r!   r   ÚCreatedSourceÚCUSTOMER)r3   Ú
serializerr   s      r%   Úperform_createz(CustomerPortalCaseViewSet.perform_create]   sj   € ð
 ×$Ñ$Ó&ˆä×ÑÓ!ñ 	Ø�O‰OØ—‘Ø!ØŸ<™<×,Ñ,Ü#×1Ñ1×:Ñ:ð	 ô ÷	÷ 	ñ 	ús   ¥AA:Á:Bc                 ó   — t        d«      ‚)Nz#Use PATCH for partial updates only.)r   )r3   r"   ÚargsÚkwargss       r%   Úupdatez CustomerPortalCaseViewSet.updatel   s   € äÐDÓEÐEr'   c           	      óÄ  •— | j                  «       }|j                  t        j                  j                  k7  rt        d«      ‚|j                  |j                  j                  k7  rt        d«      ‚t        |j                  j                  «       «      }|| j                  z
  }|r)t        dddj                  t        |«      «      › d�i«      ‚t!        ‰| �D  |g|¢­i |¤ŽS )Nz4You cannot edit this case (not created by customer).z*You cannot edit a case you did not create.ÚdetailzForbidden fields: z, ú.)Ú
get_objectrM   r   rP   rQ   r   Úcreated_by_idr!   r   ÚsetÚdataÚkeysÚCLIENT_EDITABLE_FIELDSr   ÚjoinÚsortedr6   Úpartial_update)r3   r"   rU   rV   ÚcaseÚincomingÚ	forbiddenr9   s          €r%   rc   z(CustomerPortalCaseViewSet.partial_updatep   sÆ   ø€ Ø�‰Ó ˆà×Ñ¤$×"4Ñ"4×"=Ñ"=Ò=Ü"Ð#YÓZÐZØ×Ñ §¡§¡Ò0Ü"Ð#OÓPÐPä�w—|‘|×(Ñ(Ó*Ó+ˆØ˜t×:Ñ:Ñ:ˆ	ÙÜ! 8Ð/AÀ$Ç)Á)ÌFÐS\ÓL]ÓB^ÐA_Ð_`Ð-aÐ"bÓcÐcä‰wÑ% gÐ?°Ò?¸Ñ?Ð?r'   Tr   ÚPOSTÚnotes)rY   ÚmethodsÚurl_pathc                 ó  — | j                  «       }|j                  dk(  rX|j                  j                  d«      j	                  «       j                  d«      }t        t        |d¬«      j                  «      S t        |j                  d|i¬«      }|j                  d¬«       t        j                  j                  ||j                  |j                  d	   ¬
«      }t        t        |«      j                  t        j                   ¬«      S )Nr   ÚauthorrA   T)Úmanyr"   )r^   Úcontext)Úraise_exceptionÚbody)rd   rl   rp   r;   )r[   Úmethodrh   Úselect_relatedÚallrG   r   r   r^   Úis_validr   ÚobjectsÚcreater!   Úvalidated_datar   ÚHTTP_201_CREATED)r3   r"   Úpkrd   rH   ÚserÚnotes          r%   rh   zCustomerPortalCaseViewSet.notes   sÒ   € à�‰Ó ˆà�>‰>˜UÒ"Ø—‘×*Ñ*¨8Ó4×8Ñ8Ó:×CÑCÀEÓJˆBÜÔ.¨r¸Ô=×BÑBÓCÐCä  g§l¡l¸YÈÐ<PÔQˆØ�‰ TˆÔ*ä×Ñ×&Ñ&ØØ—<‘<Ø×#Ñ# FÑ+ð 'ó 
ˆô
 Ô*¨4Ó0×5Ñ5¼f×>UÑ>UÔVÐVr'   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r   Úserializer_classr   ru   rr   rB   r`   r4   r7   rJ   rS   rW   rc   r   rh   Ú__classcell__)r9   s   @r%   r)   r)   -   sƒ   ø„ ñð *Ð*ÐØ%Ðà�|‰|×*Ñ*¨8°X¸{ÈMÐ[eÓf€Hò KÐòôò"ò$òFô@ñ �4 %¨ ¸7ÔCòWó DôWr'   r)   N)Ú	django.dbr   Údjango.db.modelsr   Úrest_frameworkr   r   Úrest_framework.permissionsr   Úrest_framework.decoratorsr   r	   r
   Úrest_framework.responser   Úrest_framework.exceptionsr   r   Úcases.modelsr   r   Úcases.serializersr   r   Úcustomer_contextr   r   r&   ÚModelViewSetr)   © r'   r%   ú<module>rŽ      sg   ðå !Ý ç +Ý 6ß JÑ JÝ ,ß Gç 'ß @ç Zñ 
ˆ5ˆ'ÓÙ�_Ð%Ó&ñó 'ó ðô4bW × 5Ñ 5õ bWr'   