o
    h)                     @   s  d dl Z d dlmZmZ d dlmZ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 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 d dlmZm Z 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, edd Z-edd Z.edd Z/edd Z0edd Z1edd Z2edd  Z3ed!d" Z4ed#d$ Z5ed%d& Z6ed'd( Z7ed)d* Z8dS )+    N)datetime	timedelta)renderget_object_or_404redirect)login_required)JsonResponse)CountSumQF)timezone)messages)	Paginator)User   )SiteTrafficProductAnalyticsBannerUserSessionShopSettings)OrderCartShippingMethod)Product)Shop)Customer)
BannerFormShopSettingsForm)ShippingMethodFormc                 C   s&  t   }|tdd }tjjdd }tjjt  tdd dd }tjjd|d }t	jj|d
 }t	jj|d	jtd
tdtdtdd}|d pUd|d pZd|d rl|d dkrl|d |d  ndd}tjj|d	ddjtdtdtdtddddd }	tjjdd  }
tjjd!d  }tjjd"d  }tjjd#d  }tjjd$d  }tj d%dd }tjj|g d&d'jtd(d)d* pd}tjj|g d&d+jtd(d)d* pd}tjjd,d- }||||||	|
||||||||d.}t| d/|S )0z'Main ecommerce dashboard with analytics   daysr   )groups__name)minutes)last_activity__gteuser__groups__name)r#   date_joined__date)date)	date__gte
page_viewsunique_visitorsbounce_rater(   )total_viewstotal_visitorstotal_bounce_raterecord_countr-   r   r.   r0   r/   )r-   r.   avg_bounce_rateproduct__nameproduct__idviewsclicks	purchasesrevenue)r-   total_clickstotal_purchasestotal_revenue-total_clicksN
   Pending)status
ProcessingShipped	Delivered	Cancelledz-created_at)r?   r@   rA   )created_at__date
status__intotal_price)totalrF   )created_at__date__gterD   T)	is_active)total_customerscustomers_onlinenew_customers_todaytraffic_todaytraffic_last_30_daystop_products
orders_neworders_processingorders_shippedorders_deliveredorders_cancelledrecent_ordersrevenue_todayrevenue_last_30_daysactive_bannersz%shop_backend/ecommerce_dashboard.html)r   nowr(   r   r   objectsfiltercountr   r   first	aggregater
   r	   r   valuesannotateorder_byr   allr   r   )requesttodaylast_30_daysrI   rJ   rK   rL   traffic_aggregatesrM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   context rg   +/var/www/html/kangema/shop_backend/views.pyecommerce_dashboard   s   

	ri   c                 C   sB   t j dd}t|d}| jd}||}t| dd|iS )zList all banners	placementdisplay_orderr<   pagezshop_backend/banner_list.htmlbanners)	r   rY   ra   r`   r   GETgetget_pager   )rb   rm   	paginatorpage_numberpage_objrg   rg   rh   banner_listu   s
   

rt   c                 C   sV   | j dkrt| j| j}| r|  t| d tdS nt }t	| d|ddS )zCreate a new bannerPOSTzBanner created successfully!shop_backend:banner_listshop_backend/banner_form.htmlzCreate Banner)formtitle)
methodr   ru   FILESis_validsaver   successr   r   rb   rx   rg   rg   rh   banner_create   s   
r   c                 C   sl   t t|d}| jdkr't| j| j|d}| r&|  t	| d t
dS nt|d}t| d||ddS )	zEdit an existing banneridru   instancezBanner updated successfully!rv   rw   zEdit Banner)rx   bannerry   )r   r   rz   r   ru   r{   r|   r}   r   r~   r   r   )rb   	banner_idr   rx   rg   rg   rh   banner_edit   s   

r   c                 C   sB   t t|d}| jdkr|  t| d tdS t| dd|iS )zDelete a bannerr   ru   zBanner deleted successfully!rv   z'shop_backend/banner_confirm_delete.htmlr   )r   r   rz   deleter   r~   r   r   )rb   r   r   rg   rg   rh   banner_delete   s   
r   c                 C   s   t j }|st| d tdS tjj|d\}}| jdkr9t	| j
|d}| r8|  t| d tdS nt	|d}t| d|||d	S )
z$Edit shop settings including taglinez5No shop configuration found. Please create one first.z shop_backend:ecommerce_dashboard)shopru   r   z#Shop settings updated successfully!zshop_backend:shop_settingszshop_backend/shop_settings.html)rx   r   shop_settings)r   rY   r\   r   errorr   r   get_or_createrz   r   ru   r|   r}   r~   r   )rb   r   r   createdrx   rg   rg   rh   r      s$   


r   c                 C   s   t | jdd}t  }|t|d }ttj	j
||dddd}ttj	j
||djdd	id
djtdtdd}t||dS )zAPI endpoint for analytics datar"   r    r!   r)   	date__lter(   r*   r+   )rG   created_at__date__ltezDATE(created_at))selectr   rE   )r[   r7   )trafficorders)intrn   ro   r   rX   r(   r   listr   rY   rZ   r^   r   extrar_   r	   r
   r   )rb   r"   end_date
start_datetraffic_data
order_datarg   rg   rh   analytics_api   s0   

r   c              	   C   s   t | jdd}t  }|t|d }tjj	||d
dddjtdtd	td
tdtdtdd td dddd }t| d||dS )zProduct analytics dashboardr"   r    r!   r   r2   r3   product__imager4   r5   cart_additionsr6   r7   r9   g      Y@r8   )r-   r8   total_cart_additionsr9   r:   conversion_rater;   N   z#shop_backend/product_analytics.html)productsr"   )r   rn   ro   r   rX   r(   r   r   rY   rZ   r^   r_   r
   r   r`   r   )rb   r"   r   r   r   rg   rg   rh   product_analytics   s0   r   c                 C   s(   t j ddddd}tdt|iS )z)API endpoint to list all shipping methodsr   namedescriptioncostrH   methods)r   rY   ra   r^   r   r   )rb   r   rg   rg   rh   shipping_methods_list  s   

r   c                 C   sN   | j dkr t| j}| r|  tdddS tdddS tdddS )z%Create a new shipping method via AJAXru   Tz$Shipping method created successfullyr~   messageFForm validation failedInvalid request method)rz   r   ru   r|   r}   r   r   rg   rg   rh   shipping_method_create  s   

r   c                 C   s^   t t|d}| jdkr(t| j|d}| r!|  tdddS tdddS tdd	dS )
z)Edit an existing shipping method via AJAXr   ru   r   Tz$Shipping method updated successfullyr   Fr   r   )r   r   rz   r   ru   r|   r}   r   )rb   	method_idrz   rx   rg   rg   rh   shipping_method_edit  s   
r   c                 C   s:   t t|d}| jdkr|  tdddS tdddS )z!Delete a shipping method via AJAXr   ru   Tz$Shipping method deleted successfullyr   Fr   )r   r   rz   r   r   )rb   r   rz   rg   rg   rh   shipping_method_delete-  s
   
r   )9jsonr   r   django.shortcutsr   r   r   django.contrib.auth.decoratorsr   django.httpr   django.db.modelsr	   r
   r   r   django.utilsr   django.contribr   django.core.paginatorr   django.contrib.auth.modelsr   modelsr   r   r   r   r   shop.modelsr   r   r   inventory.modelsr   settings.modelsr   customers.modelsr   formsr   r   
shop.formsr   ri   rt   r   r   r   r   r   r   r   r   r   r   rg   rg   rg   rh   <module>   sR   
_










