U
    h.                     @   s   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mZmZmZmZmZ ddlmZ G d	d
 d
ejZdS )    )viewsetsstatus)Response)	Paginator)get_object_or_404)IsAuthenticated)SuratSuratfSuratd	DisposisiSuratVersionSuratVersionAttachment   )SuratVersionSerializerc                   @   sD   e Zd ZdZegZdd Zdd ZdddZdd	d
Z	dddZ
dS )SuratViewSetzCCRUD untuk Surat dengan lampiran, tujuan, disposisi, dan versioningc                    sz  t j d}t jdd}t jdd}t||}||}g }|D ]}t	jj
|jd}	tjj
|jd}
tjj
|jd}tjj
|jdd}||j|j|j|j|j|j|j|j|j|j fdd|	D d	d |
D d
d |D t|ddjd qP| r| nd}| r,| nd}t|j |j!|rR "d | nd|rl "d | nd||dS )zGET /api/surat/-createdpager   	page_size   pk_suratc                    s*   g | ]"}|j |j d |j dqS z/assets/upload/surat/)idnameurlpkr   build_absolute_uripath.0frequest ;D:\Project\agus\mfile_papteng_new\webapp\api\surat\views.py
<listcomp>2   s
   z%SuratViewSet.list.<locals>.<listcomp>c                 S   s&   g | ]}|j |j|j|j|jd qS )r   kepadacatatancreatedupdatedr   r(   r)   r*   r+   r    tr$   r$   r%   r&   :   s   c              	   S   s*   g | ]"}|j |j|j|j|j|jd qS )r   tanggalsifatr(   r)   
user_inputr   r0   r1   r(   r)   r2   r    dr$   r$   r%   r&   D   s   	Tmanyr   nomortyper0   pengirimpenerimaperihalr1   r*   r+   lampirantujuan	disposisiversionsNz?page=)count	num_pagesnextpreviousr   results)#r   objectsallorder_byintGETgetr   get_pager	   filterr   r
   r   r   appendr9   _typer0   pengirim_namapenerima_namar=   r1   r*   r+   r   datahas_nextnext_page_numberhas_previousprevious_page_numberr   rB   rC   r   )selfr#   queryr   r   	paginatorpagingresultitemr>   r?   r@   rA   	next_page	prev_pager$   r"   r%   list   sV    



	
+zSuratViewSet.listc              
   C   sj   z(t jjf |j}t|jddtjdW S  tk
rd } ztdt	|itj
d W Y S d}~X Y nX dS )zPOST /api/surat/r*   r   messager   errorN)r   rG   createrS   r   r   r   HTTP_201_CREATED	ExceptionstrHTTP_400_BAD_REQUEST)rX   r#   surater$   r$   r%   re   ^   s
    zSuratViewSet.createNc           	         s   t t|d}tjj|d}tjj|d}tjj|d}tjj|dd}|j	|j
|j|j|j|j|j|j|j|j fdd|D dd |D dd |D t|dd	jd
}t|S )zGET /api/surat/{id}/r   r   r   c                    s*   g | ]"}|j |j d |j dqS r   r   r   r"   r$   r%   r&   z   s
   z)SuratViewSet.retrieve.<locals>.<listcomp>c                 S   s&   g | ]}|j |j|j|j|jd qS r'   r,   r-   r$   r$   r%   r&      s   c              	   S   s*   g | ]"}|j |j|j|j|j|jd qS r/   r3   r4   r$   r$   r%   r&      s   	Tr6   r8   )r   r   r	   rG   rN   r
   r   r   rI   r   r9   rP   r0   rQ   rR   r=   r1   r*   r+   r   rS   r   )	rX   r#   r   rj   r>   r?   r@   rA   rS   r$   r"   r%   retrieveg   s6    

	*zSuratViewSet.retrievec                 C   s   zt t|d}tjj|j|j|j|j|j	|j
|j|j|j|j|j|j|j|jd |j D ]\}}t||| q\|  t|jddW S  tk
r } ztdt|itjd W Y S d}~X Y nX dS )zPUT /api/surat/{id}/rl   )r   r9   r0   r;   rQ   pengirim_instansir<   rR   penerima_instansir1   jenisr=   status_suratr2   r+   ra   rd   rc   N)r   r   r   rG   re   r   r9   r0   r;   rQ   rn   r<   rR   ro   r1   rp   r=   rq   r2   rS   itemssetattrsaver   rg   rh   r   ri   )rX   r#   r   rj   fieldvaluerk   r$   r$   r%   update   s0    zSuratViewSet.updatec              
   C   sj   z(t t|d}|  tdditjdW S  tk
rd } ztdt|itjd W Y S d}~X Y nX dS )zDELETE /api/surat/{id}/rl   rb   deletedrc   rd   N)	r   r   deleter   r   HTTP_204_NO_CONTENTrg   rh   ri   )rX   r#   r   rj   rk   r$   r$   r%   destroy   s    zSuratViewSet.destroy)N)N)N)__name__
__module____qualname____doc__r   permission_classesr`   re   rm   rw   r{   r$   r$   r$   r%   r      s   G	
5
!r   N)rest_frameworkr   r   rest_framework.responser   django.core.paginatorr   django.shortcutsr   Zrest_framework.permissionsr   Zwebapp.models.koleksir   r	   r
   r   r   r   serializersr   ViewSetr   r$   r$   r$   r%   <module>   s    