o
    ug8                     @   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 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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  d dl!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*Z*d dl+Z+G dd deZ,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2e'dd d!d" Z3e'dd d#d$ Z4e'dd d5d&d'Z5e'dd d(d) Z6G d*d+ d+eeZ7d,d- Z8e&d.d/ dd d0d1 Z9e&d2d/ dd d3d4 Z:dS )6    )messages)datetime)	Paginator)HttpResponse)UserPassesTestMixin)FileSystemStorage)ListView
UpdateView)JsonResponse   )Cart)BrandCarModelEngineCarService	PriceListOrder
OrderFilesCsvTRANSMISSION_CHOICESFUEL_CHOICES)CsvUploadFormOrderReleaseForm)renderredirectget_object_or_404)user_passes_testlogin_required)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di |}| jjjdd}d| jjv r=| jjd }|dkr5|j|d}dd tjj|dD |d	< | jjd |d< d
| jjv r[| jjd
 }|dkrS|j|d}| jjd
 |d
< d| jjv ry| jjd }|dkrq|j|d}| jjd |d< d| jjv r| jjd }|dkr|j|d}| jjd |d< d| jjv r| jjd }zt|}W n   Y n|j|d}| jjd |d< d| jjv r| jjd }|dkr|j|d}| jjd |d< | jj	dd}t
|| j}||}||d< tj |d< tj |d< dd tD |d< dd tD |d< |S )NTactivebrand-)Zcar__brand__name__icontainsc                 S   s   g | ]}|j qS  )model.0carr&   r&   %I:\VCS\pobierzsterownik\main\views.py
<listcomp>+   s    z1SearchEngine.get_context_data.<locals>.<listcomp>)Zbrand__nameZ
models_allr'   )Zcar__model__name__icontainsengine)Zcar__engine__name__icontainsfuel)r.   Z	prod_year)car_yeartransmission)r0   pager   object_listZ
brands_allZengines_allc                 S      g | ]}|d  qS r   r&   r)   itemr&   r&   r+   r,   Q       Zfuel_allc                 S   r3   r4   r&   r5   r&   r&   r+   r,   R   r7   Ztransmission_allr&   )superget_context_datar'   objectsfilterrequestGETr   intgetr   paginate_byr1   r   allr   r   r   )selfkwargscontextpricesqr1   	paginator	__class__r&   r+   r9   #   sZ   
zSearchEngine.get_context_data)
__name__
__module____qualname__r   r'   template_namer@   Zreturn_roomsr9   __classcell__r&   r&   rH   r+   r       s    r    c                 C   s   | j ddkS )NZHTTP_X_REQUESTED_WITHZXMLHttpRequest)METAr?   r<   r&   r&   r+   is_ajaxV   s   rQ   c                 C   sl   t | r4z	tjj|d}W n tjy!   t| d td Y S w 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'   namer(   r&   r&   r+   r,   a   r7   z#get_models_data.<locals>.<listcomp>)r$   models)rQ   r   r:   r?   DoesNotExistr   errorr   r   r;   r
   )r<   rS   r$   rU   r&   r&   r+   get_models_dataY   s   rX   c                 C   s*   t | }| }| }t| d||dS )Nzmain/cart_summary.html)cart_productstotal)r   Z	get_prodsrZ   r   )r<   cartrY   rZ   r&   r&   r+   cart_summaryd   s   r\   c                 C   s   t | }td| iS )Nquantity_all)r   r
   get_all_quantity)r<   r[   r&   r&   r+   cart_quantityj   s   r_   c                 C   sZ   t | }| jddkr+t| jd}ttt|d}|j|dd td| iS d S )Nactionpost
product_ididr   )productZquantityr]   )	r   POSTr?   r>   r   r   changer
   r^   )r<   r[   rb   pricer&   r&   r+   cart_addn   s   ri   c                 C   sH   t | }| jddkr"t| jd}|j|d td| iS d S )Nr`   ra   rb   )re   rZ   )r   rf   r?   r>   deleter
   rZ   )r<   r[   rb   r&   r&   r+   cart_deletev   s   rk   users:login)	login_urlc                 C   s  | j dkr| jdrBdd | jdD }d}tjj|d}|D ]}||j7 }q!| jj	j
|k r:t| d tdS t| d	d|iS | jrtjj| jd
}d}| j D ]4}t }|d| j| jdd | j| }ttt|d}tjj||d}	|j|	 ||j7 }qT||_|  | jj	j
|k r|j D ]}
|
  q|  t| d tdS t| }|   | jj	 j
|8  _
| jj	  tdS )Nrf   Zproductsc                 S   s   g | ]}t |qS r&   )r>   )r)   rS   r&   r&   r+   r,      r7   zorder.<locals>.<listcomp>r   )pk__inu(   Nie masz wystarczającej liczby credits!z	main:cartzmain/order.htmluserz
org_files/ r%   rc   )rh   org_file)!methodrf   r?   getlistr   r:   r;   rh   rp   profilecreditsr   rW   r   r   FILESr   createkeysr   saverT   replacer   r>   r   filesaddtotal_pricerA   rj   r   clear)r<   Zproducts_idsrZ   rE   rh   orderkeyfsfilenameZorder_filesr|   r[   r&   r&   r+   r   }   sJ   
(
r   c                 C   s&   | j j jd7  _| j j  tdS )Nd   users:profile)rp   ru   rv   rz   r   rP   r&   r&   r+   buy_credits   s   r   orgc                 C   s  z	t jj|d}W n t jy   t| d td Y S w |j d j	| j	ks2|j d j	j
r|dkr;|jj}n|dkrC|jj}ttjt tt tj| ddd	}t|d
d}dtj| |d< |W  d    S 1 sxw   Y  d S t| d tdS )NrR   zWybrany plik nie istnieje!r   r   r   modrwindows-1250encodingz)multipart/form-data; charset=windows-1250content_typezattachment; filename=Content-Dispositionu+   Nie masz uprawnień do pobrania tego pliku!zmain:profile)r   r:   r?   rV   r   rW   r   	order_setrA   rp   is_staffrr   urlmod_fileprintospathabspathr   opennormpathr   basename)r<   rS   typer|   filepathresponse_fileresponser&   r&   r+   download_file   s&   (
 $r   c                 C   sl   z	t jj|d}W n t jy   t| d td Y S w | j|jkr,t| dd|iS t| d tdS )NrR   u!   Wybrane zamówienie nie istnieje!r   zmain/show_order.htmlr   u&   Nie masz dostępu do tego zamówienia!)	r   r:   r?   rV   r   rW   r   rp   r   )r<   rS   r   r&   r&   r+   
show_order   s   r   c                       s8   e Zd ZeZdZeZdd Zdd Z	 fddZ
  ZS )ReleaseOrderzmain/release_order.htmlc                 C   s(   d| _ | jjjst| jd | jjjS )Nrl   u"   Musisz mieć uprawnienia obsługi.)rm   r<   rp   r   r   rW   )rB   r&   r&   r+   	test_func   s   

zReleaseOrder.test_funcc                 C   s   | j j D ]0}| j j| r6t }|d| j j| jdd | j j| }ttt	|d}||_
|  q|  }| j jd |_|  t| j d td|jS )Nz
mod_files/rq   r%   rc   statuszZapisano zmiany.zmain:release-order)r<   rw   ry   r   rz   rT   r{   r   r   r>   r   
get_objectrf   r   r   successr   rS   )rB   formr   r   r   Z
order_filer   r&   r&   r+   
form_valid   s   ,zReleaseOrder.form_validc                    s,   t  jdi |}|  }|j |d< |S )Nr|   r&   )r8   r9   r   r|   rA   )rB   rC   rD   r   rH   r&   r+   r9      s   zReleaseOrder.get_context_data)rJ   rK   rL   r   r'   rM   r   
form_classr   r   r9   rN   r&   r&   rH   r+   r      s    r   c                 C   s  t j jdd t| jjddd}t|}t	|D ]\}}|dkr%q|d 
d}d  } } } }}	|d dkrKtjj|d   d	\}}
|d
 dkr`tjj|d
   d	\}}
|d dkrutjj|d   d	\}}
|r|r|rtjj|||d\}}
|d dkrtjj|d  d	\}	}
|r|	r|d dkr|d dkr|d dkr|d dkrt jj||d   t|d |d   |	t|d dd\}}
d|_|  qW d    n1 sw   Y  d| _|   d S )NFr"   r   r   r   r   ; )rT   r      )r$   r'   r-                  )r*   r.   r/   r0   servicerh   r#   T)r   r:   rA   updater   filer   csvreader	enumeratesplitr   get_or_createstrip
capitalizer   r   r   r   r>   r#   rz   	activated)
csv_objectZcsv_filer   countrowr$   r'   r-   r*   r   _rh   r&   r&   r+   	csv_to_db   s^   






8


	5r   c                 C      | j S Nr   ro   r&   r&   r+   <lambda>3      r   c              
   C   s   t | jpd | jp	d }| jdkrP| rP|  tjjdd	dd }zt
| W n tyF } zt| t| d W Y d }~nd }~ww t| d t  }t| dd	|iS )
Nrf   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   rf   rw   rs   is_validrz   r   r:   r;   order_byr   	Exceptionr   r   rW   r   r   )r<   Zupload_formr   er&   r&   r+   change_database3  s   r   c                 C   r   r   r   ro   r&   r&   r+   r   H  r   c                 C   s  t j }tjtjtjttj	ddd}t
|dddd7}tj|dd	}|g d
 |D ]}||jjj|jjj|jjj|j|j|j|jj|jg q1W d    n1 sZw   Y  t
|ddd}t|dd}dt d d|d< W d    |S 1 sw   Y  |S )NmediaZcsv_to_downloadzdatabase_backup.csvwr   r   )r   newliner   )	delimiter)ZMarkaModelZSilnikZPaliwoZRokZSkrzyniau   UsługaZCreditsr   r   ztext/csv; charset=windows-1250r   zattachment; filename=ceny_baza_z%d-%m-%Yz.csvr   )r   r:   rA   r   r   r   joindirname__file__pardirr   r   writerZwriterowr*   r$   rT   r'   r-   r.   r/   r0   r   rh   r   r   nowstrftime)r<   rE   r   r   r   rh   r   r&   r&   r+   download_databaseH  s>   

	
r   )r   );django.contribr   r   django.core.paginatorr   django.http.responser   Zdjango.contrib.auth.mixinsr   django.core.files.storager   Zdjango.views.genericr   r	   django.httpr
   r[   r   rU   r   r   r   r   r   r   r   r   r   r   r   formsr   r   django.shortcutsr   r   r   django.contrib.auth.decoratorsr   r   Zdrivers.settingsr   r   r   r    rQ   rX   r\   r_   ri   rk   r   r   r   r   r   r   r   r   r&   r&   r&   r+   <module>   sH    49
(

%=
