o
    O h4-                     @   s8  d dl mZ d dlmZ d dlmZ d dlZd dlmZmZm	Z	 d dl
mZ d dlm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mZmZ d dlmZ d dlmZ d dlZd dl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+ d dl,m-Z- d dl.m/Z/ d dlmZm	Z	 ddl0m1Z1m2Z2 ddl3m4Z4 d dl5Z6d dl7m8Z8 d dl9T ddl:m;Z; d dlmZ d dl<Z<G dd deZ=d d! Z>G d"d# d#eZ?G d$d% d%eZ@G d&d' d'eZAG d(d) d)e8ZBG d*d+ d+eZCG d,d- d-eZDG d.d/ d/eZEG d0d1 d1eZFdS )2    )APIView)ResponsestatusN)datetimedate	timedelta)settings)django_pbkdf2_sha256)get_authorization_header)RefreshToken)TokenBackend)
exceptions)renderredirectHttpResponse)mail)render_to_string)messages)	timesince)Max)Q)FileSystemStorage)TemplateView)	send_mail)transaction)r   r      )ProductSampleEndUser)ProductSampleSerializer)PageNumberPagination)*)authenticatedc                   @      e Zd Zdd ZdS )UploadImagesc              
   C   s   z"|j }|d}g }|D ]}t|}|| qttjd|dW S  ty? } ztdt|itj	dW  Y d }~S d }~ww )NimagesSuccessstatus_codestatus_messagedatamessager   )
r*   getlistuploadTheProfileappendr   r   HTTP_200_OK	ExceptionstrHTTP_500_INTERNAL_SERVER_ERROR)selfrequestr*   r%   
image_urlsimage
image_pathe r9   2/var/www/html/lionshead-backend/panel_api/views.pypost&   s   
"zUploadImages.postN__name__
__module____qualname__r;   r9   r9   r9   r:   r$   %       r$   c                  C   s   t  j} d}tjjd|  d}g }|D ]}t| d|  |j}|r/|	t
|d q|r8t|d nd}t|d}| d| d|  S )NSDR-)job_number__endswithz-(\d+)-r      )r   nowyearr   objectsfilterrematch
job_numberr.   intgroupmaxr1   zfill)current_yearprefixexisting	sequencesobjrJ   next_seqsequence_strr9   r9   r:   generate_job_number2   s   
rW   c                   @   r#   )UserRegisterc           
   
   C   s  zd|j }|d}|d  }|d}|s#tdditjdW S |s/tdditjdW S |s;tdditjdW S t|}t	j
j|d	 }|rUtdd
itjdW S t	j
j|||d}tddiW S  ty }	 ztdt|	itjdW  Y d }	~	S d }	~	ww )Nnameemailpasswordr+   email is requiredr   name is requiredpassword is requiredrZ   zThe email is already registered)rY   rZ   r[   z.You have been successfully registered with us.)r*   getstriplowerr   r   HTTP_400_BAD_REQUESThandlerhashr   rG   rH   firstHTTP_409_CONFLICTcreater0   r1   r2   )
r3   r4   r*   rY   rZ   r[   new_passwordcheck_emailuser_objr8   r9   r9   r:   r;   F   s*   


"zUserRegister.postNr<   r9   r9   r9   r:   rX   E   r@   rX   c                   @   r#   )	LoginUserc              
   C   sR  z|j }|d  }|d}|stdditjdW S |s*tdditjdW S tjj	|d
 }|dkrAtdd	itjdW S tjj	|d }tjj	|d
d }|j}t||}	|	rt|}
|j|j|j|jd}t|
t|
jd}td||dW S tdditjdW S  ty } ztdt|itjdW  Y d }~S d }~ww )NrZ   r[   r+   r\   r   r^   r_   r   z:This email does not exist in our database, please registerF)rZ   end_date__isnull)idrY   rZ   is_profile_completed)refreshaccesszLogin Successfully)r+   r*   tokenszInvalid password)r*   r`   ra   rb   r   r   rc   r   rG   rH   countHTTP_404_NOT_FOUNDrf   r[   rd   verifyr   for_userrn   rY   rZ   ro   r1   access_tokenHTTP_401_UNAUTHORIZEDr0   r2   )r3   r4   r*   rZ   r[   useruserObjuserObj_deletecheck_passwordcheckrefresh_tokenallDatarr   r8   r9   r9   r:   r;   _   s>   

"zLoginUser.postNr<   r9   r9   r9   r:   rl   ^   r@   rl   c                   @   s   e Zd Zdd Zdd ZdS )UpdateUserProfilec              
   C   s   zQzt |}W n ty% } ztdt|itjdW  Y d }~W S d }~ww tjj|d	 }|s;tdditj
dW S |j|j|j|j|jd}ttjd|dW S  tyn } ztdt|itjdW  Y d }~S d }~ww )Nr+   r   rn   user not foundrn   rY   rZ   phone_numberr6   zFetched Successfullyr'   )r"   r0   r   r1   r   rx   r   rG   rH   rf   rt   rn   rY   rZ   r   r6   r/   r2   )r3   r4   uidr8   rk   all_datar9   r9   r:   r`      s*   $"zUpdateUserProfile.getc              
   C   s  zzt |}W n ty% } ztdt|itjdW  Y d }~W S d }~ww tjj|d	 }|s;tdditj
dW S |jd}|sLttjddW S |jd}|s]ttjd	dW S tjj|d
j|jd}|rtttjddW S |jd}|sttjddW S tjj|dj|jd}	|	rttjddW S |jd}
||_||_||_|
|_|  |j|j|j|j|jd}ttjd|dW S  ty } ztdt|itjdW  Y d }~S d }~ww )Nr+   r   r   r   rY   r]   )r(   r)   rZ   r\   r_   z3This email is already associated with some account.r   zphone_number is required)r   z:This phone number is already associated with some account.r6   r   zProfile updated successfullyr'   )r"   r0   r   r1   r   rx   r   rG   rH   rf   rt   r*   r`   rc   excludern   rY   rZ   r   r6   saver/   r2   )r3   r4   r   r8   rk   rY   rZ   rj   r   check_numberr6   r   r9   r9   r:   r;      sT   $	"zUpdateUserProfile.postN)r=   r>   r?   r`   r;   r9   r9   r9   r:   r      s    r   c                   @   s    e Zd ZdZdZdZdd ZdS )CustomProductPagination
   	page_sized   c              
   C   s2   t dd| jjj| jjj| jj|  |  |dS )N   zProducts fetched successfully)r(   r)   total_itemstotal_pagescurrent_pagenextpreviousresults)r   page	paginatorrs   	num_pagesnumberget_next_linkget_previous_link)r3   r*   r9   r9   r:   get_paginated_response   s   z.CustomProductPagination.get_paginated_responseN)r=   r>   r?   r   page_size_query_parammax_page_sizer   r9   r9   r9   r:   r      s
    r   c                   @   r#   )GetProductListingc                 C   s   |j dd }tj d}|r<|t|dt|dB t|dB t|dB t|dB t|dB t|d	B t|d
B }t }|	||}t
|dd}||jS )Nsearchz-id)product_line__icontains)subfamily__icontains)tm_article_number__icontains)style_name__icontains)og_style_name__icontains)color_name__icontains)season__icontains)location__icontainsT)many)query_paramsr`   r   rG   allorder_byrH   r   r   paginate_querysetr   r   r*   )r3   r4   r   samplesr   result_page
serializerr9   r9   r:   r`      s0   zGetProductListing.getN)r=   r>   r?   r`   r9   r9   r9   r:   r      r@   r   c                   @   s   e Zd ZdddZdS )UploadProductSampleNc              
   C   s   |j d}|stdditjdS z$|jdrt|}n|jdr*t	|}n
tdditjdW S W n  t
yU } ztddt| itjdW  Y d }~S d }~ww | D ]\}}|d	}|sfqZt }	t|	  S td1d2itjdS )3NfileerrorzNo file uploadedr   z.csvz.xlsxzUnsupported file formatzError reading file: zTM ARTICLE NUMBERproduct_linezPRODUCT LINE	subfamily	SUBFAMILY
style_namez
STYLE NAMEog_style_namezOG STYLE NAME
color_namezCOLOR  NAMEseasonSEASONpar_datezPAR Datenumber_of_samples_receivedzNumber of Samples Receivedmarketing_sample_estimated_datezMarketing Sample Estimated Daterep_sms_photoshop_commentszRep SMS/Photoshop CommentslocationLOCATIONsample_pass_off_datezSample Pass off Datelionshead_received_datezLionshead Received Dateflatlay_shoot_datezFlatlay Shoot Dateflatlay_shootzFlatlays Shot (Y or N)on_model_shoot_datezOn Model Shoot Dateon_models_shotzOn Models Shot (Y or N)zSample Return DatezLast Updated DateTimez
Updated By)sample_return_datelast_updated_datetime
updated_byrK   )tm_article_numberdefaultsr+   z*File uploaded and data saved successfully!)FILESr`   r   r   rc   rY   endswithpdread_csv
read_excelr0   r1   iterrowsrW   r   rG   update_or_createHTTP_201_CREATED)r3   r4   formatr   dfr8   _rowr   rK   r   r9   r9   r:   r;      s*   (
zUploadProductSample.postNr<   r9   r9   r9   r:   r      s    r   c                   @   r#   )GetProductDetailc                 C   st   |j d}|stdditjdS z	tjj|d}W n tjy-   tdditjd Y S w t	|}t|j tj
dS )Narticle_numberr   zarticle_number is requiredr   )r   zProduct not found)r*   r`   r   r   rc   r   rG   DoesNotExistrt   r   r/   )r3   r4   r   productr   r9   r9   r:   r;   6  s   zGetProductDetail.postNr<   r9   r9   r9   r:   r   5  r@   r   c                   @   r#   )ImportProductFilec                 C   s   d S r   r9   )r3   r4   r9   r9   r:   r;   F  s   zImportProductFile.postNr<   r9   r9   r9   r:   r   E  r@   r   )Grest_framework.viewsr   rest_framework.responser   rest_frameworkr   randomr   r   r   django.confr	   passlib.hashr
   rd   jsonrest_framework.authenticationr   rest_framework_simplejwt.tokensr   !rest_framework_simplejwt.backendsr   r   django.shortcutsr   r   r   django.corer   django.template.loaderr   mathstringdjango.contribr   django.utils.timesincer   django.db.modelsr   r   django.core.files.storager   django.views.genericr   django.core.mailr   	django.dbr   modelsr   r   serializersr   pandasr   rest_framework.paginationr    panel_api.functionsauthenticationr"   rI   r$   rW   rX   rl   r   r   r   r   r   r   r9   r9   r9   r:   <module>   sV    'L;