Ë
    
.Úi>:  ã                   ór  — 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 d dlmZ d dlmZmZmZ d d	l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mZ d dl m!Z!m"Z"m#Z#m$Z$ d„ Z%h d£Z&h d£Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.dedefd„Z/dedefd„Z0 G d„ de«      Z1 G d „ d!e«      Z2 G d"„ d#e«      Z3y$)%é    )Úsettings)Ú	send_mail)Útransaction)ÚQ)Útimezone)ÚAPIView)ÚIsAuthenticated)ÚMultiPartParserÚ
FormParserÚ
JSONParser)ÚResponse©Ústatus)ÚPermissionDeniedÚNotFoundÚValidationError)ÚCustomerMembership)ÚSupportTicketÚSupportTicketMessageÚSupportTicketAttachment)ÚSupportTicketSerializerÚSupportTicketCreateSerializerÚSupportTicketPatchSerializerÚSupportTicketMessageSerializerc                 óÌ  — t         j                  j                  ddd«      j                  | j                  ¬«      j                  d«      j                  «       }|st        d«      ‚|j                  }|st        d«      ‚t        |d«      r|j                  st        d	«      ‚t        |d
«      r|j                  dv rt        d«      ‚t        |dd «      }|st        d«      ‚|||fS )NÚcustomerÚuserÚcustomer__tenant)r   z-idz,No active customer membership for this user.z"Customer not found for membership.Úportal_enabledzCustomer portal is not enabled.r   )Ú	suspendedÚdisabledzAccount is suspended.Útenantz"No tenant found for this customer.)r   ÚobjectsÚselect_relatedÚfilterr   Úorder_byÚfirstr   r   Úhasattrr   r   Úgetattr)ÚrequestÚ
membershipr   r"   s       ú</var/www/html/acx/customers/views_customer_portal_support.pyÚ_cp_contextr-      s×   € ä×"Ñ"ß	‰˜
 FÐ,>Ó	?ß	‰�W—\‘\ˆÓ	"ß	‰�%‹ß	‰‹ð ñ ÜÐMÓNÐNà×"Ñ"€HÙÜÐCÓDÐDäˆxÐ)Ô*°8×3JÒ3JÜÐ@ÓAÐAäˆz˜8Ô$¨×):Ñ):Ð>WÑ)WÜÐ6Ó7Ð7ä�X˜x¨Ó.€FÙÜÐCÓDÐDà�x Ð'Ð'ó    >   ú.csvú.docú.gifú.jpgú.pdfú.pngú.pptú.txtú.xlsú.docxú.jpegú.pptxú.webpú.xlsx>   ú.7zú.jsú.pyú.shú.tsú.batú.cmdú.cssú.exeú.msiú.phpú.rarú.sqlú.svgú.tsxú.zipú.htmlú.javac                  ó6   — t        t        t        dd«      «      S )NÚACX_CP_MAX_FILE_MBé
   ©Úintr)   r   © r.   r,   Ú_max_file_mbrU   F   s   € ÜŒw”xÐ!5°rÓ:Ó;Ð;r.   c                  ó6   — t        t        t        dd«      «      S )NÚACX_CP_MAX_TOTAL_MBé   rR   rT   r.   r,   Ú_max_total_mbrY   I   s   € ÜŒw”xÐ!6¸Ó;Ó<Ð<r.   c           	      ó0  — t        «       dz  dz  }t        «       dz  dz  }d}| D ]ï  }t        |dd«      xs dj                  «       j	                  «       }t        t        |dd«      xs d«      }||z  }|dk  rt        dd|› �i«      ‚||kD  rt        dd|› d	t        «       › d
�i«      ‚||kD  rt        ddt        «       › d
�i«      ‚|j                  d«      }|dk\  r||d  nd}|t        v rt        dd|› �i«      ‚|t        vsŒát        dd|› �i«      ‚ y )Ni   r   ÚnameÚ ÚsizeÚfileszEmpty file not allowed: zFile too large: z (max zMB)zTotal upload too large (max ú.zFile type not allowed: )
rU   rY   r)   ÚlowerÚstriprS   r   ÚrfindÚFORBIDDEN_EXTÚALLOWED_EXT)	r^   Úmax_fileÚ	max_totalÚtotalÚfr[   r]   ÚdotÚexts	            r,   Ú_validate_filesrk   L   sP  € Ü‹~ Ñ$ tÑ+€HÜ“ $Ñ&¨Ñ-€IØ€Eàò OˆÜ˜˜6 2Ó&Ò,¨"×3Ñ3Ó5×;Ñ;Ó=ˆÜ”7˜1˜f aÓ(Ò-¨AÓ.ˆà�‰ˆØ�1Š9Ü! 7Ð.FÀtÀfÐ,MÐ"NÓOÐOØ�(Š?Ü! 7Ð.>¸t¸fÀFÌ<Ë>ÐJZÐZ]Ð,^Ð"_Ó`Ð`Ø�9ÒÜ! 7Ð.JÌ=Ë?ÐJ[Ð[^Ð,_Ð"`ÓaÐaà�j‰j˜‹oˆØ 1šHˆd�3�4‰j¨"ˆØ”-ÑÜ! 7Ð.EÀdÀVÐ,LÐ"MÓNÐNØ”kÒ!Ü! 7Ð.EÀdÀVÐ,LÐ"MÓNÐNñ#Or.   c                  óÎ   — t         j                  j                  d«      j                  } | j                  j                  dd¬«      j                  d¬«      j                  d¬«      S )Nr   T)Úis_superuserÚ	is_active)Úemail__isnullr\   )Úemail__exact)r   Ú_metaÚ	get_fieldÚrelated_modelr#   r%   Úexclude)ÚUsers    r,   Ú_get_platform_superadminsrv   j   sV   € Ü×#Ñ#×-Ñ-¨fÓ5×CÑC€Dà�<‰<×Ñ¨D¸DÐÓA×IÑIÐX\ÐIÓ]×eÑeÐsuÐeÓvÐvr.   c                 ó  — 	 ddl m} |j                  j                  d«      j	                  | ¬«      }t        |d«      r|j	                  d¬«      }t        t        dd	g«      }t        |d
«      r7|j	                  t        d¬«      t        |¬«      z  «      j                  «       }n|j	                  d¬«      }|D �cg c]3  }|j                  sŒt        |j                  dd«      sŒ(|j                  ‘Œ5 c}S c c}w # t        $ r g cY S w xY w)z²
    Adapt to your RBAC:
    - preferred: Membership model (tenancy/accounts) with roles 'tenant_admin' or is_owner
    If you already have a Membership model, plug it here.
    r   )Ú
Membershipr   )r"   r   Úactiver   ÚACX_TENANT_ADMIN_ROLE_IDSÚtenant_adminÚrolesT)Úis_owner)Úroles__id__inÚemailN)Úaccounts.modelsrx   r#   r$   r%   r(   r)   r   r   Údistinctr   Ú	Exception)r"   rx   ÚqsÚadmin_role_idsÚms        r,   Ú_get_tenant_adminsr†   o   sÛ   € ðÝ.Ø×Ñ×.Ñ.¨vÓ6×=Ñ=ÀVÐ=ÓLˆÜ�:˜xÔ(Ø—‘ (�Ó+ˆBä ¤Ð+FÈÐHXÓYˆÜ�:˜wÔ'Ø—‘œ1 dÔ+¬a¸nÔ.MÑMÓN×WÑWÓY‰Bà—‘ D�Ó)ˆBØ "ÖP˜1 a§f£f´¸¿¹ÀÈ$Õ1O�—“ÒPÐPùÒPøÜò ØŠ	ðús0   ‚B:C< Â<C7ÃC7Ã&C7Ã4C< Ã7C< Ã<D
Ä	D
c                 ó¼   — t        «       }| D ]C  }t        |dd«      xs dj                  «       j                  «       }|sŒ3|j	                  |«       ŒE t        |«      S )Nr   r\   )Úsetr)   ra   r`   ÚaddÚsorted)ÚusersÚoutÚur   s       r,   Ú_emailsrŽ   „   sW   € Ü
‹%€CØò ˆÜ˜˜G RÓ(Ò.¨B×5Ñ5Ó7×=Ñ=Ó?ˆÚØ�G‰G�E�Nðô �#‹;Ðr.   c           	      óH   — |sy t        | |t        t        dd «      |d¬«       y )NÚDEFAULT_FROM_EMAILT)ÚsubjectÚmessageÚ
from_emailÚrecipient_listÚfail_silently)r   r)   r   )r‘   ÚbodyÚ
recipientss      r,   Ú_send_support_emailr˜   Œ   s)   € ÙØÜØØÜœ8Ð%9¸4Ó@Ø!Øör.   ÚticketÚ	first_msgc           
      óà  — t        | j                  «      }t        t        «       «      }t	        ||z   «      }|j
                  xs dj                  «       }t        |«      dkD  r|d d dz   }t        t        dd«      j                  d«      }|r|› d| j                  › �nd}d| j                  › d	| j                  › �}d
| j                  › �d| j                  j                  › �d| j                  › �d| j                   › �d| j"                  xs d› �dd|j$                  r|j$                  j&                  nd› d�d|dg
}	|r|	j)                  d|› �«       t+        |dj-                  |	«      |«       y )Nr\   éÈ   éÅ   ú...ÚFRONTEND_CLIENT_PORTAL_BASE_URLú/ú/client/support/u   ACX Support â€¢ New ticket #u    â€¢ zTenant: ú
Customer: z
Category: z
Priority: z	Case ID: Ú-úFrom: @õ   â€”ú (customer)úOpen: Ú
)r†   r"   Úlistrv   rŽ   r–   ra   Úlenr)   r   ÚrstripÚidr‘   r   r[   ÚcategoryÚpriorityÚcase_idÚauthorÚusernameÚappendr˜   Újoin)
r™   rš   Útenant_adminsÚplatform_adminsr—   ÚpreviewÚbaseÚlinkr‘   Úliness
             r,   Ú_notify_ticket_createdrº   —   se  € Ü& v§}¡}Ó5€MÜÔ4Ó6Ó7€OÜ˜¨Ñ8Ó9€Jà�~‰~Ò# ×*Ñ*Ó,€GÜ
ˆ7ƒ|�cÒØ˜$˜3�- %Ñ'ˆä”8Ð>ÀÓC×JÑJÈ3ÓO€DÙ37ˆdˆVÐ# F§I¡I ;Ñ/¸R€Dà,¨V¯Y©Y¨K°u¸V¿^¹^Ð<LÐM€Gà
�6—=‘=�/Ð"Ø
�V—_‘_×)Ñ)Ð*Ð+Ø
�V—_‘_Ð%Ð&Ø
�V—_‘_Ð%Ð&Ø
�F—N‘NÒ) cÐ*Ð+Ø
Ø
¨y×/?Ò/?�)×"Ñ"×+Ò+ÀUÐKÈ;ÐWØ
ØØ
ð€Eñ Ø�‰�v˜d˜V�_Ô%Ü˜ §¡¨5Ó!1°:Õ>r.   Úmsgc                 óN  — d| j                   | j                  }}}t        t        «       «      }t	        |«      }|j
                  xs dj                  «       }t        |«      dkD  r|dd dz   }t        t        dd«      j                  d«      }|r|› d| j                  › �nd}	|j                  t        j                  j                  k(  r§t!        ||z   «      }
d	| j                  › d
�}d| j                  › d| j"                  › �d|j$                  › �dd|j&                  r|j&                  j(                  nd› d�d|dg}|	r|j+                  d|	› �«       t-        |dj/                  |«      |
«       yt0        j2                  j5                  d«      j7                  |¬«      }t9        t0        d«      r|j7                  d¬«      }|D �cg c]3  }|j:                  sŒt        |j:                  dd«      sŒ(|j:                  ‘Œ5 }}t!        |«      }
d	| j                  › d�}d| j                  › d| j"                  › �dd|j&                  r|j&                  j(                  nd› d|j                  › d�d|dg}|	r|j+                  d|	› �«       t-        |dj/                  |«      |
«       yc c}w )z¼
    Pro notifications:
    - if customer writes: notify tenant admins + platform admins
    - if tenant/platform writes: notify customer members (active) + platform admins (optional)
    Nr\   rœ   r�   rž   rŸ   r    r¡   u   ACX Support â€¢ Ticket #u    â€¢ New customer messagez	Ticket: #z - r¢   r¤   r¥   r¦   r§   r¨   r   )r   r   ry   r   r   u    â€¢ New updatez (ú))r   r"   r©   rv   r†   r–   ra   rª   r)   r   r«   r¬   Úsider   ÚSideÚCUSTOMERrŽ   r‘   r[   r°   r±   r²   r˜   r³   r   r#   r$   r%   r(   r   )r™   r»   r+   r   r"   rµ   r´   r¶   r·   r¸   r—   r‘   r¹   Úcmsr…   Úcustomer_userss                   r,   Ú_notify_ticket_messagerÃ   ´   sj  € ð $(¨¯©¸&¿-¹-˜&�€JäÔ4Ó6Ó7€OÜ& vÓ.€Mà�x‰xŠ~˜2×$Ñ$Ó&€GÜ
ˆ7ƒ|�cÒØ˜$˜3�- %Ñ'ˆä”8Ð>ÀÓC×JÑJÈ3ÓO€DÙ37ˆdˆVÐ# F§I¡I ;Ñ/¸R€Dà
‡x�xÔ'×,Ñ,×5Ñ5Ò5Ü˜]¨_Ñ<Ó=ˆ
Ø,¨V¯Y©Y¨KÐ7PÐQˆà˜Ÿ	™	�{ # f§n¡nÐ%5Ð6Ø˜Ÿ™˜Ð(ØØ¨S¯ZªZ�c—j‘j×)Ò)¸UÐCÀ;ÐOØØØð
ˆñ Ø�L‰L˜6 $ ˜Ô)Ü˜G T§Y¡Y¨uÓ%5°zÔBØô ×
$Ñ
$×
3Ñ
3°FÓ
;×
BÑ
BÈHÐ
BÓ
U€CÜÔ! 8Ô,Ø�j‰j ˆjÓ)ˆØ&)ÖW ¨Q¯V«V¼ÀÇÁÈÐQUÕ8V�a—f“fÐW€NÐWä˜Ó(€JØ(¨¯©¨°?ÐC€Gà
�F—I‘I�;˜c &§.¡.Ð!1Ð2Ø
Ø
¨¯ª�#—*‘*×%Ò%¸Ð?¸rÀ#Ç(Á(ÀÈ1ÐMØ
ØØ
ð€Eñ Ø�‰�v˜d˜V�_Ô%Ü˜ §¡¨5Ó!1°:Õ>ùò Xs   ÇJ"ÇJ"Ç/J"c                   ó(   — e Zd ZegZeeegZd„ Z	d„ Z
y)Ú CustomerPortalSupportTicketsViewc                 ó8  — t        |«      \  }}}|j                  j                  d«      xs dj                  «       }|j                  j                  d«      xs dj                  «       }t        j
                  j                  ||¬«      j                  d«      }|r(|j                  t        |¬«      t        |¬«      z  «      }|r|j                  |¬«      }t        |j                  d	«      d d
 d¬«      j                  }t        |t        j                  ¬«      S )NÚqr\   r   )r   r"   Ú
created_by)Úsubject__icontains)Úid__icontainsr   z-last_activity_atrœ   T)Úmany)r-   Úquery_paramsÚgetra   r   r#   r%   r$   r   r   r&   Údatar   r   ÚHTTP_200_OK)	Úselfr*   r+   r   r"   rÇ   Ústatus_qrƒ   rÎ   s	            r,   rÍ   z$CustomerPortalSupportTicketsView.getò   sì   € Ü'2°7Ó';Ñ$ˆ
�H˜fà×!Ñ!×%Ñ% cÓ*Ò0¨b×7Ñ7Ó9ˆØ×(Ñ(×,Ñ,¨XÓ6Ò<¸"×CÑCÓEˆä×"Ñ"×)Ñ)°8ÀFÐ)ÓK×ZÑZÐ[gÓhˆáØ—‘œ1°Ô2´QÀQÔ5GÑGÓHˆBÙØ—‘ (�Ó+ˆBä& r§{¡{Ð3FÓ'GÈÈÐ'MÐTXÔY×^Ñ^ˆÜ˜¤V×%7Ñ%7Ô8Ð8r.   c                 óÈ  — t        |«      \  }}}t        |j                  ¬«      }|j                  d¬«       |j                  }|j
                  j                  d«      }|rt        |«       t        j                  «       5  t        j                  j                  |||j                  |d   j                  «       |j                  d«      xs t        j                   j"                  |j                  d«      xs t        j$                  j&                  t        j(                  j*                  |j                  d«      ¬	«      }t,        j                  j                  ||j                  t,        j.                  j0                  |d
   j                  «       ¬«      }	|D ]T  }
t2        j                  j                  |	|
t5        |
dd «      t5        |
dd «      t7        t5        |
dd«      xs d«      ¬«       ŒV |	j8                  |_        |j=                  ddg¬«       d d d «       t?        	«       tA        |«      j                  }tC        |tD        jF                  ¬«      S # 1 sw Y   ŒExY w)N)rÎ   T©Úraise_exceptionr^   r‘   r­   r®   r¯   )r"   r   rÈ   r‘   r­   r®   r   r¯   r–   ©r™   r°   r¾   r–   r[   Úcontent_typer]   r   ©r’   ÚfileÚfilenamerÖ   r]   Úlast_activity_atÚ
updated_at©Úupdate_fieldsr   )$r-   r   rÎ   Úis_validÚvalidated_dataÚFILESÚgetlistrk   r   Úatomicr   r#   Úcreater   ra   rÍ   ÚCategoryÚOTHERÚPriorityÚNORMALÚStatusÚOPENr   r¿   rÀ   r   r)   rS   Ú
created_atrÚ   Úsaverº   r   r   r   ÚHTTP_201_CREATED)rÐ   r*   r+   r   r"   ÚserÚvr^   Útktr»   rh   rŒ   s               r,   Úpostz%CustomerPortalSupportTicketsView.post  sÿ  € Ü'2°7Ó';Ñ$ˆ
�H˜fä+°·±Ô>ˆØ�‰ TˆÔ*Ø×Ñˆà—‘×%Ñ% gÓ.ˆÙÜ˜EÔ"ä×ÑÓ!ñ 	GÜ×'Ñ'×.Ñ.ØØ!Ø"Ÿ<™<Ø˜)™×*Ñ*Ó,ØŸ™˜zÓ*ÒJ¬m×.DÑ.D×.JÑ.JØŸ™˜zÓ*ÒK¬m×.DÑ.D×.KÑ.KÜ$×+Ñ+×0Ñ0ØŸ™˜iÓ(ð /ó 	ˆCô '×.Ñ.×5Ñ5ØØ—|‘|Ü)×.Ñ.×7Ñ7Ø�v‘Y—_‘_Ó&ð	 6ó ˆCð ò �Ü'×/Ñ/×6Ñ6ØØÜ$ Q¨°Ó5Ü!(¨¨N¸DÓ!AÜœW Q¨°Ó2Ò7°aÓ8ð 7õ ðð $'§>¡>ˆCÔ Ø�H‰HÐ$6¸Ð#EˆHÔF÷;	Gô> 	˜s CÔ(ä% cÓ*×/Ñ/ˆÜ˜¤F×$;Ñ$;Ô<Ð<÷E	Gð 	Gús   Â FIÉI!N)Ú__name__Ú
__module__Ú__qualname__r	   Úpermission_classesr
   r   r   Úparser_classesrÍ   rð   rT   r.   r,   rÅ   rÅ   î   s!   „ Ø)Ð*ÐØ% z°:Ð>€Nò9ó -=r.   rÅ   c                   ó6   — e Zd ZegZdefd„Zdefd„Zdefd„Zy)Ú%CustomerPortalSupportTicketDetailViewÚ	ticket_idc                 óÄ   — t        |«      \  }}}t        j                  j                  |||¬«      j	                  d«      j                  «       }|st        d«      ‚||||fS )N©r¬   r   r"   rÈ   úTicket not found.)r-   r   r#   r%   r$   r'   r   ©rÐ   r*   rø   r+   r   r"   rï   s          r,   Ú
get_ticketz0CustomerPortalSupportTicketDetailView.get_ticket5  sd   € Ü'2°7Ó';Ñ$ˆ
�H˜fÜ×#Ñ#×*Ñ*¨iÀ(ÐSYÐ*ÓZ×iÑiÐjvÓw×}Ñ}ÓˆÙÜÐ.Ó/Ð/Ø˜8 V¨SÐ0Ð0r.   c                 ó�   — | j                  ||«      \  }}}}t        |«      j                  }t        |t        j
                  ¬«      S )Nr   )rý   r   rÎ   r   r   rÏ   )rÐ   r*   rø   r+   r   r"   rï   rÎ   s           r,   rÍ   z)CustomerPortalSupportTicketDetailView.get<  s>   € Ø,0¯O©O¸GÀYÓ,OÑ)ˆ
�H˜f cÜ& sÓ+×0Ñ0ˆÜ˜¤V×%7Ñ%7Ô8Ð8r.   c                 óø  — | j                  ||«      \  }}}}t        |j                  d¬«      }|j                  d¬«       |j                  }d|v r}|d   t
        j                  j                  t
        j                  j                  fvrt        ddi«      ‚|d   |_
        t        j                  «       |_        |j                  g d¢¬«       t        t!        |«      j                  t        j"                  ¬«      S )	NT)rÎ   ÚpartialrÓ   r   z*Client can only set status to open/closed.©r   rÚ   rÛ   rÜ   r   )rý   r   rÎ   rÞ   rß   r   rè   ÚCLOSEDré   r   r   r   ÚnowrÚ   rë   r   r   rÏ   )	rÐ   r*   rø   r+   r   r"   rï   rí   rî   s	            r,   Úpatchz+CustomerPortalSupportTicketDetailView.patchA  sÎ   € Ø,0¯O©O¸GÀYÓ,OÑ)ˆ
�H˜f cä*°·±ÀdÔKˆØ�‰ TˆÔ*Ø×Ñˆð �q‰=Ø�‰{¤=×#7Ñ#7×#>Ñ#>Ä×@TÑ@T×@YÑ@YÐ"ZÑZÜ% xÐ1]Ð&^Ó_Ð_Ø˜8™ˆCŒJÜ#+§<¡<£>ˆCÔ Ø�H‰HÒ#OˆHÔPäÔ/°Ó4×9Ñ9Ä&×BTÑBTÔUÐUr.   N)	rñ   rò   ró   r	   rô   rS   rý   rÍ   r  rT   r.   r,   r÷   r÷   2  s1   „ Ø)Ð*Ðð1¨Só 1ð9 có 9ð
V¨ô Vr.   r÷   c                   ó@   — e Zd ZegZeeegZde	fd„Z
de	fd„Zde	fd„Zy)Ú'CustomerPortalSupportTicketMessagesViewrø   c                 ó¦   — t        |«      \  }}}t        j                  j                  |||¬«      j	                  «       }|st        d«      ‚||||fS )Nrú   rû   )r-   r   r#   r%   r'   r   rü   s          r,   rý   z2CustomerPortalSupportTicketMessagesView.get_ticketW  sX   € Ü'2°7Ó';Ñ$ˆ
�H˜fÜ×#Ñ#×*Ñ*¨iÀ(ÐSYÐ*ÓZ×`Ñ`ÓbˆÙÜÐ.Ó/Ð/Ø˜8 V¨SÐ0Ð0r.   c                 ó  — | j                  ||«      \  }}}}t        j                  j                  |¬«      j	                  d«      j                  d«      }t        |d d dd|i¬«      j                  }t        |t        j                  ¬«      S )	N)r™   r°   Úattachmentsi,  Tr*   )rË   Úcontextr   )rý   r   r#   r%   r$   Úprefetch_relatedr   rÎ   r   r   rÏ   )	rÐ   r*   rø   r+   r   r"   rï   rƒ   rÎ   s	            r,   rÍ   z+CustomerPortalSupportTicketMessagesView.get^  s~   € Ø,0¯O©O¸GÀYÓ,OÑ)ˆ
�H˜f cÜ!×)Ñ)×0Ñ0¸Ð0Ó<×KÑKÈHÓU×fÑfÐgtÓuˆÜ-¨b°°#¨h¸TÈIÐW^ÐK_Ô`×eÑeˆÜ˜¤V×%7Ñ%7Ô8Ð8r.   c                 ó8  — | j                  ||«      \  }}}}|j                  j                  d«      xs dj                  «       }|st	        ddi«      ‚|j
                  j                  d«      }|rt        |«       t        j                  «       5  t        j                  j                  ||j                  t        j                  j                  |¬«      }	|D ]T  }
t         j                  j                  |	|
t#        |
dd «      t#        |
dd «      t%        t#        |
dd	«      xs d	«      ¬
«       ŒV |	j&                  |_        |j*                  t,        j.                  j0                  t,        j.                  j2                  fv r4t,        j.                  j4                  |_        |j7                  g d¢¬«       n|j7                  ddg¬«       d d d «       t9        |	«       t;        |	d|i¬«      j                  }t=        |t*        j>                  ¬«      S # 1 sw Y   ŒIxY w)Nr–   r\   zThis field is required.r^   rÕ   r[   rÖ   r]   r   r×   r  rÜ   rÚ   rÛ   r*   )r
  r   ) rý   rÎ   rÍ   ra   r   rà   rá   rk   r   râ   r   r#   rã   r   r¿   rÀ   r   r)   rS   rê   rÚ   r   r   rè   ÚRESOLVEDr  ré   rë   rÃ   r   r   rì   )rÐ   r*   rø   r+   r   r"   rï   r–   r^   r»   rh   rŒ   s               r,   rð   z,CustomerPortalSupportTicketMessagesView.postd  sÍ  € Ø,0¯O©O¸GÀYÓ,OÑ)ˆ
�H˜f cà—‘× Ñ  Ó(Ò.¨B×5Ñ5Ó7ˆÙÜ! 6Ð+DÐ"EÓFÐFà—‘×%Ñ% gÓ.ˆÙÜ˜EÔ"ä×ÑÓ!ñ 	KÜ&×.Ñ.×5Ñ5ØØ—|‘|Ü)×.Ñ.×7Ñ7Øð	 6ó ˆCð ò �Ü'×/Ñ/×6Ñ6ØØÜ$ Q¨°Ó5Ü!(¨¨N¸DÓ!AÜœW Q¨°Ó2Ò7°aÓ8ð 7õ ðð $'§>¡>ˆCÔ à�z‰zœm×2Ñ2×;Ñ;¼]×=QÑ=Q×=XÑ=XÐYÑYÜ*×1Ñ1×6Ñ6�”
Ø—‘Ò'S�ÕTà—‘Ð(:¸LÐ'I�ÔJ÷-	Kô0 	˜s CÔ(ä,¨S¸9ÀgÐ:NÔO×TÑTˆÜ˜¤F×$;Ñ$;Ô<Ð<÷7	Kð 	Kús   ÂD8HÈHN)rñ   rò   ró   r	   rô   r
   r   r   rõ   rS   rý   rÍ   rð   rT   r.   r,   r  r  S  s;   „ Ø)Ð*ÐØ% z°:Ð>€Nð1¨Só 1ð9 có 9ð&= sô &=r.   r  N)4Údjango.confr   Údjango.core.mailr   Ú	django.dbr   Údjango.db.modelsr   Údjango.utilsr   Úrest_framework.viewsr   Úrest_framework.permissionsr	   Úrest_framework.parsersr
   r   r   Úrest_framework.responser   Úrest_frameworkr   Úrest_framework.exceptionsr   r   r   Úcustomers.modelsr   Úcustomers.models_supportr   r   r   Úcustomers.serializers_supportr   r   r   r   r-   rd   rc   rU   rY   rk   rv   r†   rŽ   r˜   rº   rÃ   rÅ   r÷   r  rT   r.   r,   ú<module>r     sÊ   ðå  Ý &Ý !Ý Ý !Ý (Ý 6ß JÑ JÝ ,Ý !ß QÑ Qå /ß aÑ a÷ó ò(ò<€ò€ò<ò=òOò<wò
ò*ò	ð? =ð ?Ð=Qó ?ð:5? =ð 5?Ð7Kó 5?ôtA= wô A=ôHV¨Gô VôB7=¨gõ 7=r.   