B
    O΄gYA                 @   s  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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mZ ddlmZmZmZmZmZmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1Z1d dl2Z2G dd deZ3dd Z4dd Z5dd Z6dd Z7dd Z8d d! Z9e,d"d#d$d% Z:e,d"d#d&d' Z;e,d"d#d8d)d*Z<e,d"d#d+d, Z=G d-d. d.e	eeZ>ej?d/d0 Z@e+d1d2 d"d#d3d4 ZAe+d5d2 d"d#d6d7 ZBdS )9    )messages)datetime)	Paginator)HttpResponse)UserPassesTestMixinLoginRequiredMixin)FileSystemStorage)ListView
UpdateView)JsonResponse)EmailMessage)transaction   )Cart)
BrandCarModelEngineCarService	PriceListOrderCsvTRANSMISSION_CHOICESFUEL_CHOICES)CsvUploadFormOrderReleaseFormUploadFileForm)renderredirectget_object_or_404)user_passes_testlogin_required)render_to_string)BASE_DIRNc                   s,   e Zd ZeZdZdZdZ fddZ  Z	S )SearchEnginezmain/search_price.html
   Nc                s  t  jf |}tj |d< tj |d< dd tD |d< dd tD |d< t| j	}|
 |d< d	}| jjjd
d}||d< | j	jdkry8x2|D ]*}| j	j| }|dkrt| j	d |S qW W n   Y nX | j	jd }|dkr|j|d}dd tjj|dD |d< | j	jd |d< | j	jd }|dkrF|j|d}| j	jd |d< | j	jd }|dkrx|j|d}| j	jd |d< | j	jd }|dkr|j|d}| j	jd |d< | j	jd }|dkr|j|d}| j	jd |d< | j	jdd}	t|| j}
|
|	}||d< |S )NZ
brands_allZengines_allc             S   s   g | ]}|d  qS )r    ).0itemr&   r&   '/var/www/pobierzsterownik/main/views.py
<listcomp>)   s    z1SearchEngine.get_context_data.<locals>.<listcomp>Zfuel_allc             S   s   g | ]}|d  qS )r   r&   )r'   r(   r&   r&   r)   r*   *   s    Ztransmission_allcart_products)brandmodelenginefueltransmissionT)activeobject_listGET-u"   Musisz użyć wszystkich filtrów.r,   )Zcar__brand__name__icontainsc             S   s   g | ]
}|j qS r&   )r-   )r'   carr&   r&   r)   r*   @   s    )Zbrand__nameZ
models_allr-   )Zcar__model__name__icontainsr.   )Zcar__engine__name__icontainsr/   )Z	car__fuelr0   )Zcar__transmissionpager   )superget_context_datar   objectsallr   r   r   r   request	get_prodsr-   filtermethodr3   r   warningr   getr   paginate_byr6   )selfkwargscontextcartfilterspricesr=   valueqr6   	paginator)	__class__r&   r)   r8   %   sZ    







zSearchEngine.get_context_data)
__name__
__module____qualname__r   r-   template_namerA   Zreturn_roomsr8   __classcell__r&   r&   )rK   r)   r$      s
   r$   c             C   s   | j ddkS )NHTTP_X_REQUESTED_WITHXMLHttpRequest)METAr@   )r;   r&   r&   r)   is_ajax^   s    rT   c             C   sj   t | rfytjj|d}W n& tjk
r@   t| d tdS X dd tjj	|dD }t
d|iS d S )N)pkzWybrana marka nie istnieje!zmain:search-viewc             S   s   g | ]}|j jqS r&   )r-   name)r'   r5   r&   r&   r)   r*   i   s    z#get_models_data.<locals>.<listcomp>)r,   models)rT   r   r9   r@   DoesNotExistr   errorr   r   r=   r   )r;   rU   r,   rW   r&   r&   r)   get_models_dataa   s    
rZ   c             C   s*   t | }| }| }t| d||dS )Nzmain/cart_summary.html)r+   total)r   r<   r[   r   )r;   rE   r+   r[   r&   r&   r)   cart_summaryl   s    r\   c             C   s   t | }td| iS )Nquantity_all)r   r   get_all_quantity)r;   rE   r&   r&   r)   cart_quantityr   s    r_   c             C   s6  t | }| jddkr2t| jd}ttt|d}| }x|D ]}|jjj	|jjj	ks|jj
j	|jj
j	ks|jjj	|jjj	ks|jj|jjks|jj|jjkrHt| d|d jjj	 d|d jj
j	 d|d jjj	 d|d jj d|d jj d	 td
diS qHW |j|dd t| ddS d S )Nactionpost
product_id)idum   Możesz mieć w koszyku tylko jeden samochód jednocześnie.<br>Nadal możesz wybrać inne modyfikacje do <b>r    z | z</b>	wrong_carTr   )productZquantityF)r]   re   )r   POSTr@   intr   r   r<   r5   r,   rV   r-   r.   r/   r0   r   r?   r   changer^   )r;   rE   rb   pricer+   rf   r&   r&   r)   cart_addv   s    
\Zrk   c             C   sN   t | }| jddkrJt| jd}|j|d t| | dS d S )Nr`   ra   rb   )rf   )r[   r]   )r   rg   r@   rh   deleter   r[   r^   )r;   rE   rb   r&   r&   r)   cart_delete   s
    rm   zusers:login)	login_urlc          	   C   sP  t  }| jdkrH| jdrdd | jdD }d}tjj|d}x|D ]}||j7 }qLW | j	j
j|k rt| d tdS t| d	||d
S | jrHt | jpd | jpd }t  g }x:| j D ],}|dks|dkrq|ttt|d qW | r,| }| j	|_	t }|d| jd jdd | jd }	|	|_x|D ]}|j| qPW |  td| j	|d}
td|j !d |
| j	j"gd}|# st$d | j	j
j|j%k rx|j&' D ]}|(  qW |(  t| d n0t)| }|*  | j	j
 j|j%8  _| j	j
  nt| d	||d
S W d Q R X tdS )Nrg   productsc             S   s   g | ]}t |qS r&   )rh   )r'   rU   r&   r&   r)   r*      s    zorder.<locals>.<listcomp>r   )pk__inu(   Nie masz wystarczającej liczby credits!z	main:cartzmain/order.html)ro   upload_formcsrfmiddlewaretokenuser_comment)rc   z
org_files/org_filerd   r4   zmain/order_email.html)userorderu   Zamówienie z%d/%m/%Y %H:%I)tou   Błąd wysyłania wiadmości)+r   r>   rg   r@   getlistr   r9   r=   rj   ru   profilecreditsr   rY   r   r   FILESr   atomickeysappendr   rh   is_validsaver   rV   replacert   addr"   r   datestrftimeemailsendprinttotal_pricefilesr:   rl   r   clear)r;   formZproducts_idsr[   rG   rj   keyrv   fsfilenamemessager   r   rE   r&   r&   r)   rv      s^    

(

 
rv   c             C   s&   | j j jd7  _| j j  tdS )N   zusers:profile)ru   ry   rz   r   r   )r;   r&   r&   r)   buy_credits   s    r   orgc          	   C   s   yt jj|d}W n& t jk
r8   t| d tdS X |j| jksN| jjr|dkr`|j	j
}n|dkrp|jj
}ttjt tt tj| ddd(}t|d	d
}dtj| |d< |S Q R X nt| d tdS d S )N)rU   u   Nie znaleziono zamówienia!zusers:profiler   modrignore)errorszmultipart/form-data;)content_typezattachment; filename=zContent-Dispositionu+   Nie masz uprawnień do pobrania tego pliku!)r   r9   r@   rX   r   rY   r   ru   is_staffrt   urlmod_filer   ospathabspathr#   opennormpathr   basename)r;   rU   typerv   filepathresponse_fileresponser&   r&   r)   download_file   s"    

 r   c             C   sn   yt jj|d}W n& t jk
r8   t| d tdS X | j|jkrVt| dd|iS t| d tdS d S )N)rU   u!   Wybrane zamówienie nie istnieje!zusers:profilezmain/show_order.htmlrv   u&   Nie masz dostępu do tego zamówienia!)	r   r9   r@   rX   r   rY   r   ru   r   )r;   rU   rv   r&   r&   r)   
show_order   s    
r   c                   s@   e Zd ZeZdZeZdd Zdd Z	dd Z
 fdd	Z  ZS )
ReleaseOrderzmain/release_order.htmlc             C   s0   t d d| _| jjjs&t| jd | jjjS )Ntestzusers:loginu"   Musisz mieć uprawnienia obsługi.)r   rn   r;   ru   r   r   rY   )rB   r&   r&   r)   	test_func   s
    
zReleaseOrder.test_funcc             C   s   t dS )Nzmain:search-view)r   )rB   r&   r&   r)   handle_no_permission   s    z!ReleaseOrder.handle_no_permissionc             C   sz   |   }| jjd rJt }|d| jjd jdd | jjd }|}| jjd |_|  t	
| jd td|jS )Nfilez
mod_files/rd   r4   statuszZapisano zmiany.zmain:release-order)
get_objectr;   r{   r   r   rV   r   rg   r   r   successr   rU   )rB   r   rv   r   r   r&   r&   r)   
form_valid  s    ,zReleaseOrder.form_validc                s0   t  jf |}|  }||d< |j |d< |S )Nrv   rG   )r7   r8   r   rj   r:   )rB   rC   rD   rv   )rK   r&   r)   r8     s
    zReleaseOrder.get_context_data)rL   rM   rN   r   r-   rO   r   
form_classr   r   r   r8   rP   r&   r&   )rK   r)   r      s   r   c          	   C   s  t j jdd t| jjddd}t|}xt	|D ]|\}}|dkrRq>|d 
d}d  } } } }}	|d dkrtjj|d   d	\}}
|d
 dkrtjj|d
   d	\}}
|d dkrtjj|d   d	\}}
|rR|rR|rR|d dkrR|d dkrRtjj||||d   |d   d\}}
|d dkrztjj|d  d	\}	}
|r>|	r>|d dkr>t jj||	t|d dd\}}
d|_|  q>W W d Q R X d| _|   d S )NF)r1   r   zwindows-1250)encodingr   ; )rV   r            )r,   r-   r.   r/   r0         )r5   servicerj   r1   T)r   r9   r:   updater   r   r   csvreader	enumeratesplitr   get_or_createstrip
capitalizer   r   r   r   rh   r1   r   	activated)
csv_objectZcsv_filer   countrowr,   r-   r.   r5   r   _rj   r&   r&   r)   	csv_to_db  sJ    
.
r   c             C   s   | j S )N)r   )ru   r&   r&   r)   <lambda>Y      r   c          
   C   s   t | jp
d | jpd }| jdkr| r|  tjjdd	dd }yt
| W n6 tk
r } zt| t| d W d d }~X Y nX t| d t  }t| dd	|iS )
Nrg   F)r   z-upload_timer   u   Błędny format danych w pliku!z!Zamieniono zestaw w bazie danych.zmain/reupload.htmlZcsv_form)r   rg   r{   r>   r   r   r   r9   r=   order_byr   	Exceptionr   r   rY   r   r   )r;   rq   r   er&   r&   r)   change_databaseY  s    r   c             C   s   | j S )N)r   )ru   r&   r&   r)   r   n  r   c             C   s   t j }tjtjtjttj	ddd}t
|ddddr}tj|dd	}|d
ddddddg xD|D ]<}||jjj|jjj|jjj|jj|jj|jj|jg qnW W d Q R X t
|ddd,}t|dd}dt d d|d< W d Q R X |S )NmediaZcsv_to_downloadzdatabase_backup.csvwzwindows-1250r   )r   newliner   )	delimiterZMarkaModelZSilnikZPaliwoZSkrzyniau   UsługaZCreditsr   )r   ztext/csv; charset=windows-1250)r   zattachment; filename=ceny_baza_z%d-%m-%Yz.csvzContent-Disposition)r   r9   r:   r   r   r   joindirname__file__pardirr   r   writerZwriterowr5   r,   rV   r-   r.   r/   r0   r   rj   r   r   nowr   )r;   rG   r   r   r   rj   r   r&   r&   r)   download_databasen  s.    


$r   )r   )Cdjango.contribr   r   django.core.paginatorr   django.http.responser   Zdjango.contrib.auth.mixinsr   r   django.core.files.storager   Zdjango.views.genericr	   r
   django.httpr   django.core.mailr   	django.dbr   rE   r   rW   r   r   r   r   r   r   r   r   r   r   formsr   r   r   Zdjango.shortcutsr   r   r   Zdjango.contrib.auth.decoratorsr    r!   django.template.loaderr"   Zdrivers.settingsr#   r   r   r$   rT   rZ   r\   r_   rk   rm   rv   r   r   r   r   r|   r   r   r   r&   r&   r&   r)   <module>   sB   0?<(=