
    2hm!                        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
 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 d dlZ ej.                  e      Z G d dej4                        Z G d dej8                        Z G d dej<                        Z G d dej@                        Z! edg      d        Z" edg      d        Z#y)    )genericsstatus)Response)api_view)AllowAny)timezone)	send_mail)settings   )ContactForm)ContactFormSerializerContactFormListSerializerContactFormDetailSerializer!ContactFormStatusUpdateSerializerNc                   Z    e Zd ZdZej
                  j                         ZeZ	e
gZd Zd Zy)ContactFormCreateViewz_
    POST API for creating new contact form submissions
    Endpoint: /api/contact/submit/
    c                 8   | j                  |j                        }|j                         r|j                         }	 | j	                  |       t        dd|j                  |j                  |j                         |j                  j                         d|j                  ddd	t        j                   
      S t        dd|j"                  dt        j$                  
      S # t
        $ r+}t        j                  dt        |              Y d}~d}~ww xY w)zHandle contact form submissiondataz#Failed to send admin notification: NTzKYour message has been submitted successfully! We will get back to you soon.REF06d)idnamesubjectsubmitted_atreference_numbersuccessmessager   r   Fz Please correct the errors below.r   r   errors)get_serializerr   is_validsavesend_admin_notification	Exceptionloggererrorstrr   r   r   get_subject_display
created_at	isoformatr   HTTP_201_CREATEDr"   HTTP_400_BAD_REQUEST)selfrequestargskwargs
serializercontact_formes          "/var/www/apihucms/contact/views.pycreatezContactFormCreateView.create   s   ((gll(;
 %??,LM,,\:
 h&//(--+??A$0$;$;$E$E$G*-looc-B(C
 --
/ 
/ 9 ''
 --	/ 	/#  MB3q6(KLLMs   C% %	D.!DDc                 ~   d|j                          }d|j                   d|j                   d|j                  xs d d|j                          d|j                   d|j
                  j                  d	       d
|j                  dd}t        t        dd      }|r!t        ||t        t        dd      |gd       yy)zBSend email notification to admin about new contact form submissionzNew Contact Form Submission - zE
        New Contact Form Submission Received
        
        Name: z
        Email: z
        Phone: zNot providedz
        Subject: z#
        
        Message:
        z
        
        Submitted: z%Y-%m-%d %H:%M:%Sz
        Reference: REFr   zW
        
        Please log in to the admin panel to respond to this inquiry.
        ADMIN_EMAILNDEFAULT_FROM_EMAILznoreply@example.comT)r   r   
from_emailrecipient_listfail_silently)r+   r   emailphoner   r,   strftimer   getattrr
   r	   )r0   r5   r   r   admin_emails        r7   r&   z-ContactFormCreateView.send_admin_notification?   s    2<3S3S3U2VW   ! """# $""4n5 62245 6	 
		  ++445HIJ K#s+ ,	$ ht<"8-ACXY +}"     N)__name__
__module____qualname____doc__r   objectsallquerysetr   serializer_classr   permission_classesr8   r&    rD   r7   r   r      s6     ""&&(H," /DrD   r   c                   N    e Zd ZdZej
                  j                         ZeZ	d Z
y)ContactFormListViewzc
    GET API for listing contact form submissions (admin use)
    Endpoint: /api/contact/list/
    c                    t         j                  j                         }| j                  j                  j                  dd      }|r|j                  |      }| j                  j                  j                  dd      }|r|j                  |      }| j                  j                  j                  dd      }|dk(  r6dd	lm} t        j                          |d
      z
  }|j                  |      }|S )z.Filter contact forms based on query parametersr   Nr    r   )r   recenttruer   	timedelta   dayscreated_at__gte)r   rI   rJ   r1   query_paramsgetfilterdatetimerU   r   now)r0   rK   status_filtersubject_filterrR   rU   week_agos          r7   get_querysetz ContactFormListView.get_queryseti   s    &&**, 1155hEm<H 2266y$G~>H **..x>V*||~	q(99Hx@HrD   N)rE   rF   rG   rH   r   rI   rJ   rK   r   rL   rc   rN   rD   r7   rP   rP   `   s(     ""&&(H0rD   rP   c                   H    e Zd ZdZej
                  j                         ZeZ	y)ContactFormDetailViewzb
    GET API for individual contact form details (admin use)
    Endpoint: /api/contact/<id>/
    N)
rE   rF   rG   rH   r   rI   rJ   rK   r   rL   rN   rD   r7   re   re      s#     ""&&(H2rD   re   c                   N    e Zd ZdZej
                  j                         ZeZ	d Z
y)ContactFormUpdateStatusViewzo
    PATCH API for updating contact form status (admin use)
    Endpoint: /api/contact/<id>/update-status/
    c                    | j                         }| j                  ||j                  d      }|j                         rq|j                  j                  d      dk(  r!t        j                         |j                  d<   |j                          t        ddt        |      j                  d      S t        dd	|j                  d
t        j                        S )z)Update contact form status with timestampT)r   partialr   resolvedresponded_atzStatus updated successfully.r   FzFailed to update status.r!   r    )
get_objectr#   r   r$   validated_datar\   r   r_   r%   r   r   r"   r   r/   )r0   r1   r2   r3   instancer4   s         r7   patchz!ContactFormUpdateStatusView.patch   s    ??$((d(S
 ((,,X6*D<DLLN
)).9OO93H=BB   1 ''
 --	/ 	/rD   N)rE   rF   rG   rH   r   rI   rJ   rK   r   rL   ro   rN   rD   r7   rg   rg      s(     ""&&(H8/rD   rg   GETc           	         ddl m} ddlm} t        j
                  j                         }t        j
                  j                  d      j                   |d            }|D ci c]  }|d   |d    }}t        j
                  j                  d      j                   |d            }|D ci c]  }|d   |d    }}t        j                          |d	      z
  }	t        j
                  j                  |	
      j                         }
t        j
                  j                  d      j                         }t        ||
|||t        j                         j                         d      S c c}w c c}w )z[
    GET API for contact form statistics (admin use)
    Endpoint: /api/contact/stats/
    r   )CountrT   r   )countrs   r      rW   rY   pendingr    )total_submissionsrecent_submissions_30_dayspending_submissionsstatus_breakdownsubject_breakdownlast_updated)django.db.modelsrr   r^   rU   r   rI   rs   valuesannotater   r_   r]   r   r-   )r1   rr   rU   rv   status_countsitemry   subject_countsrz   thirty_days_agorecent_submissionspending_counts               r7   contact_form_statsr      sV    '" $++113  ''..x8AAhAXMBOP$XW5PP !((//	:CC%PYJZC[NDRSDi$w-7SS llnyb'99O$,,33O3TZZ\  ''..i.@FFHM.&8,,. 002   Q Ts   $E-/E2POSTc                 6   dddddd}t        |      }|j                         rM|j                         }t        dd	|j                  t        |      j
                  d
t        j                        S t        dd|j                  dt        j                        S )zZ
    POST API for testing contact form functionality
    Endpoint: /api/contact/test/
    z	Test Userztest@example.comz+91 9876543210	admissionzJThis is a test message to verify the contact form API is working properly.)r   r?   r@   r   r   r   Tz'Test contact form created successfully!)r   r   test_idr   r    FzTest failedr!   )
r   r$   r%   r   r   r   r   r.   r"   r/   )r1   	test_datar4   r5   s       r7   test_contact_formr      s     #!_I 'I6J!(@#),7<<	

 ))+ 	+  ## ))	+ +rD   )$rest_frameworkr   r   rest_framework.responser   rest_framework.decoratorsr   rest_framework.permissionsr   django.utilsr   django.core.mailr	   django.confr
   modelsr   serializersr   r   r   r   logging	getLoggerrE   r(   CreateAPIViewr   ListAPIViewrP   RetrieveAPIViewre   UpdateAPIViewrg   r   r   rN   rD   r7   <module>r      s    + , . / ! &     			8	$IH22 IX(.. B3H44 3/("8"8 /D 
5'! !H 
6(+ +rD   