B
    #8`]                 @   s  d dl mZ d dl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 d dlmZ 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T ddlT ddlmZ dd ZG dd dejejZ G dd dej!ej"Z#G dd dej!eej$Z%G dd dej!ejZ&G dd dej!eej$Z'G dd dej!ej(Z)ej*dd Z+ej*dd  Ze,d!d/d"d#Z-e,d$d%d& Z.ed'd(d)d*d+ Z/ed'd(d)d,d- Z0d.S )0    )render)reversereverse_lazy)generic)JsonResponseHttpResponseRedirect)escapeformat_html)mixins)
decorators)QObjectDoesNotExist)SuccessMessageMixin)cache_control   )ISBN)*)bookSearchQc             C   s
   t | dS )NzBookDatabase/base.html)r   )request r   +/srv/www/books/BookDB/BookDatabase/views.pyindex   s    r   c                   s8   e Zd ZdZdZeZdd Z fddZdd Z	  Z
S )	
BookSearchzBookDatabase/bookList.htmlresultsc             C   s~   | j jdr(tdt| j jd}nd}| j jdrd| j jd}tjt|||d  S tj	 ||d  S d S )Nstartr   q2   )
r   GETgetmaxintBookobjectsfilterr   all)selfr   termr   r   r   get_queryset   s    zBookSearch.get_querysetc                s   t  jf |}| ji d|d< | jjdrxtdt| jjd}|dkrjtd|d |d< t|d  |d |d< nd|d< t	|d dk rd |d< |S )	N)initialformr   r   r   prevnextr   )
superget_context_data
form_classr   r   r   r   r    printlen)r%   kwargscontextr   )	__class__r   r   r-   '   s    zBookSearch.get_context_datac             O   s   t td|jS )NzBookDatabase:reshelve)r   r   POST)r%   r   argsr1   r   r   r   post6   s    zBookSearch.post)__name__
__module____qualname__template_namecontext_object_nameZ
SearchFormr.   r'   r-   r6   __classcell__r   r   )r3   r   r      s   r   c            	       sP   e Zd ZdZdddddddd	d
g	ZdZeZedZ	d fdd	Z
dd Z  ZS )
BookUpdatezBookDatabase.change_bookr   NameAuthorVoiceDateQuantityShelfTypeNoteszBookDatabase/editBook.htmlzBookDatabase:searchNc                s"   t  |}d|jd jjd< |S )N   rE   rows)r,   get_formfieldswidgetattrs)r%   r.   r)   )r3   r   r   rH   A   s    zBookUpdate.get_formc             C   s$   t dtdd| jjid|d }|S )Nz8<a href="{}" target="_blank">{}</a> updated successfullyzBookDatabase:editBookpk)r1   r>   )r	   r   objectid)r%   cleaned_datatextr   r   r   get_success_messageF   s    
zBookUpdate.get_success_message)N)r7   r8   r9   permission_requiredrI   r:   r!   modelr   success_urlrH   rQ   r<   r   r   )r3   r   r=   :   s   r=   c            	       sP   e Zd ZdZdddddddd	d
g	ZdZeZdd Zd fdd	Z	dd Z
  ZS )
BookCreatezBookDatabase.add_bookr   r>   r?   r@   rA   rB   rC   rD   rE   zBookDatabase/addBook.htmlc             C   s   t dd t| jj S )NzBookDatabase:addz?type=)r   strrM   rD   )r%   r   r   r   get_success_urlS   s    zBookCreate.get_success_urlNc                s:   t  |}| jjdd|jd _d|jd jjd< |S )Ntyper   rD   rF   rE   rG   )	r,   rH   r   r   r   rI   r(   rJ   rK   )r%   r.   r)   )r3   r   r   rH   V   s    zBookCreate.get_formc             C   s$   t dtdd| jjid|d }|S )Nz=<a href="{}" target="_blank">{}</a> added successfully as newzBookDatabase:editBookrL   )r1   r>   )r	   r   rM   rN   )r%   rO   rP   r   r   r   rQ   \   s    
zBookCreate.get_success_message)N)r7   r8   r9   rR   rI   r:   r!   rS   rW   rH   rQ   r<   r   r   )r3   r   rU   M   s   rU   c               @   s    e Zd ZdZdZdZdd ZdS )ShelfSelectzBookDatabase.change_shelfzBookDatabase/shelfList.htmlr   c             C   s   t j dS )N	ShortDesc)rC   r"   r$   order_by)r%   r   r   r   r'   h   s    zShelfSelect.get_querysetN)r7   r8   r9   rR   r:   r;   r'   r   r   r   r   rY   c   s   rY   c            	       s\   e Zd ZdZdddddddd	d
g	ZdZeZ fddZdd Z	dd Z
d fdd	Z  ZS )Reshelve)zBookDatabase.change_shelfzBookDatabase.add_bookzBookDatabase.change_bookr   r>   r?   rA   r@   rB   rC   rD   rE   zBookDatabase/shelfEdit.htmlc                s>   t  jf |}tjj| jd d d d |d< t| |S )Nshelf_id)rL   r   DescriptionZ
shelf_name)r,   r-   rC   r"   r#   r1   valuesr/   )r%   r1   r2   )r3   r   r   r-   r   s    $zReshelve.get_context_datac             C   s&   t dd| jd idd t| jj S )NzBookDatabase:reshelver]   )r1   z?type=)r   r1   rV   rM   rD   )r%   r   r   r   rW   x   s    zReshelve.get_success_urlc             C   s$   t dtdd| jjid|d }|S )NzF<a href="{}" target="_blank">{}</a> added to shelf successfully as newzBookDatabase:editBookrL   )r1   r>   )r	   r   rM   rN   )r%   rO   rP   r   r   r   rQ   {   s    
zReshelve.get_success_messageNc                sV   t  |}| jd |jd< d|jd _| jjdd|jd _d|jd j	j
d	< |S )
Nr]   rC   TrX   r   rD   rF   rE   rG   )r,   rH   r1   r(   rI   disabledr   r   r   rJ   rK   )r%   r.   r)   )r3   r   r   rH      s    zReshelve.get_form)N)r7   r8   r9   rR   rI   r:   r!   rS   r-   rW   rQ   rH   r<   r   r   )r3   r   r\   l   s   r\   c               @   s   e Zd ZdZdZdddZdS )FullReshelvezBookDatabase.change_shelfzBookDatabase/confirmFull.htmlNc             C   s*   t jj|djd d ttdd|idS )N)Z	Shelf__id)rC   zBookDatabase:reshelver]   )r1   )r!   r"   r#   updater   r   )r%   r   r]   r   r   r   r6      s    zFullReshelve.post)N)r7   r8   r9   rR   r:   r6   r   r   r   r   ra      s   ra   c             C   s4   t | jd}t|}t|| |s,i }t|S )Nsearch)rV   r   r   r   Z
ISBNlookupr/   r   )r   r&   dtlsr   r   r   getISBN   s    

re   c             C   s>   t | jd}tjt| ddd }d|i}t|S )Nrc   r   
   r   books)	rV   r   r   r!   r"   r#   r   r_   r   )r   r&   rg   rd   r   r   r   rc      s    rc   zBookDatabase.change_shelfc             C   s(   t jj|d}d |_|  ttdS )N)rL   zBookDatabase:search)r!   r"   r   rC   saver   r   )r   Zbook_idbookr   r   r   missing   s    rj   )zBookDatabase.change_bookzBookDatabase.change_shelfc          	   C   s  i }yt | jd}t | jd}ydtjj|d}|jj}tjj|d|_|  t| d|d< tjj	|d
 d |d< ||d< W nF tk
r   d	|d
< d|d< Y n$ tk
r   d|d
< d|d< Y nX W n( ttfk
r   d|d
< d|d< Y nX t|S )NrN   shelf)rL   Tsuccessr   ri   oldShelfzShelf not founderrorFzUnknown Errorzid or shelf not present)r    r   r   r!   r"   rC   r^   rh   r/   r#   r_   r   RuntimeErrorKeyError	TypeErrorr   )r   rd   rN   rk   ri   rm   r   r   r   move   s.    rr   Ti3)publicmax_agec             C   s   t | dddS )NzBookDatabase/isbnSearch.jszapplication/javascript)content_type)r   )r   r   r   r   isbnSearchJS   s    rv   c             C   s   t | dddS )Nz BookDatabase/isbnLookupSearch.jszapplication/javascript)ru   )r   )r   r   r   r   isbnLookupJS   s    rw   N)r   )1Zdjango.shortcutsr   django.urlsr   r   Zdjango.viewsr   django.httpr   r   django.utils.htmlr   r	   django.contrib.authr
   r   django.db.modelsr   r   Zdjango.contrib.messages.viewsr   django.views.decorators.cacher    r   modelsformsrc   r   r   ZLoginRequiredMixinListViewr   ZPermissionRequiredMixin
UpdateViewr=   
CreateViewrU   rY   r\   TemplateViewra   Zlogin_requiredre   rR   rj   rr   rv   rw   r   r   r   r   <module>   s6   #		
