o
    'h(Y                     @   s2  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 d dlmZmZ d dl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mZ G dd deeZ e	dd Z!e	dd Z"e	dd Z#e	dd Z$e	dd Z%e	dd Z&e	dd Z'e	dd Z(e	d d! Z)d"S )#    )renderredirectget_object_or_404)TemplateView)LoginRequiredMixin)login_requiredmessages)DepartmentRequiredMixinpermission_required)Ticket   )CustomerMarketingWeeklyReportMarketingLeadInteraction)MarketingWeeklyReportFormMarketingReportFilterFormMarketingReportReviewForm)CountQ)timezone)	timedeltac                       s,   e Zd ZdZ fddZ fddZ  ZS )MarketingDashboardViewz"customers/marketing_dashboard.htmlc                    s   |j js|  S ddlm} d }t|j dr%|j jr%|j jjr%|j jjj}|j j	sA|j j
sA||j dsA|dv sAt|d tdS t j|g|R i |S )Nr   has_permissionemployee_profileview_marketingweeklyreport	Marketing
ManagementStaff.Access denied. You need marketing permissions.	dashboard)useris_authenticatedhandle_no_permissionaccounts.permissionsr   hasattrr   
departmentnameis_superuseris_staffr	   errorr   superdispatch)selfrequestargskwargsr   	user_dept	__class__ 9/var/www/html/optinet_system/customers/marketing_views.pyr.      s   
zMarketingDashboardView.dispatchc                    s  t  jdi |}t }|jdddddd}tjj| jj	d}|j|d}|j|t
dd d}tdd	 |D }td
d	 |D }	|dkrM|	| d nd}
tjj|dd}tjj|dd}tjj| jj	|dd}tj }| }| }| }g }tdD ]6}|t
|d }|t
dd }||kr|}tjj||gd }|d|d  ||d|dd q|d d }|d d }||||||d d ||||d| | |
| |jdd tdd	 |D d |S )Nr   r   )dayhourminutesecondmicrosecondmarketing_staff)created_at__gteZ   daysc                 s       | ]}|j V  qd S Nnew_leads_generated.0rr6   r6   r7   	<genexpr>2       z:MarketingDashboardView.get_context_data.<locals>.<genexpr>c                 s   rC   rD   )leads_convertedrG   r6   r6   r7   rJ   3   rK   d   -created_at)
created_byr?      )weeks)created_at__rangezWeek z%b %d)weekcount
start_dateend_date
      z%B %Ydraftstatusc                 s   rC   rD   rE   rG   r6   r6   r7   rJ   s   rK   )total_customerscustomers_this_monthmy_customers_countmy_tickets_countmy_customers_this_monthrecent_customersrecent_ticketsweekly_growthcurrent_monthmy_reports_countreports_this_monthconversion_ratetotal_reportspending_reportsmonthly_leadsr6   )r-   get_context_datar   nowreplacer   objectsfilterr0   r#   r   sumr   order_byr   rT   rangeappendstrftimeupdate)r/   r2   contextrl   month_start
my_reportsmy_reports_this_monthrecent_reportstotal_leadstotal_conversionsrg   r`   all_customers_this_monthmy_tickets_this_monthr\   r]   r^   r_   rc   i
week_startweek_endweek_customersra   rb   r4   r6   r7   rk   %   s   


z'MarketingDashboardView.get_context_data)__name__
__module____qualname__template_namer.   rk   __classcell__r6   r6   r4   r7   r      s    r   c                 C   st   ddl m} ddlm} ddlm} | jdkr5|| j}| r3|	 }|
| d|j d |d	S d
S | }d
S )z%Quick add customer form for marketingr   )CustomerFormr   )r   r   POSTz	Customer z has been created successfully!zcustomers:marketing_dashboardN)formsr   django.shortcutsr   django.contribr	   methodr   is_validsavesuccess	full_name)r0   r   r   r	   formcustomerr6   r6   r7   marketing_quick_add_customerx   s   


r   c                 C   s(  ddl m} | jjs5| jjs5|| jds5t| jdr+| jjr+| jjjr+| jjjjdv s5t	
| d tdS t  }|t| d }tjj| j|d	 }|r^t	| d
 td|jdS | jdkrt| j}| r|jdd}| j|_|  t	| d td|jdS nt }t| d|ddS )z"Create new marketing weekly reportr   r   add_marketingweeklyreportr   r   z@Access denied. You need marketing permissions to create reports.r"   rA   )r>   week_startingzAYou already have a report for this week. Editing existing report.zcustomers:marketing_report_editpkr   Fcommitz&Marketing report created successfully!!customers:marketing_report_detail$customers/marketing_report_form.htmlzCreate Weekly Marketing Report)r   title)r&   r   r#   r*   r+   r'   r   r(   r)   r	   r,   r   r   rl   dater   weekdayr   rn   ro   firstinfor   r   r   r   r   r   r>   r   r   )r0   r   todaymondayexisting_reportr   reportr6   r6   r7   marketing_report_create   sP   



r   c           
      C   s  ddl m} ddlm} d}t| jdr#| jjr#| jjjr#| jjjj}| jj	s?| jj
s?|| jds?|dv s?t| d	 td
S |dkrL|jj| jd}n| jj	sX| jj
sX|dv r^|j }n|j }t| j}| r|jdr{|j|jd d}|jdr|j|jd d}|jdr|j|jd d}|jdr|j|jd d}|dd}ddlm} ||d}| jd}||}	t| d|	|ddS )z)List all marketing reports with filteringr   r   r   r   Nr   r   r   >Access denied. You need marketing permissions to view reports.r"   r   r=   r   r    staff_member	date_from)week_starting__gtedate_to)week_ending__lter[   rZ   z-week_startingmarketing_staff__first_name	Paginator   pagez$customers/marketing_report_list.htmlzMarketing Weekly Reports)page_objfilter_formr   )modelsr   r&   r   r'   r#   r   r(   r)   r*   r+   r	   r,   r   rn   ro   allnoner   GETr   cleaned_datagetrq   django.core.paginatorr   get_pager   )
r0   r   r   r3   reportsr   r   	paginatorpage_numberr   r6   r6   r7   marketing_report_list   sR   




r   c                 C   s   ddl m} ddlm} d}t| jdr#| jjr#| jjjr#| jjjj}| jj	s?| jj
s?|| jds?|dv s?t| d	 td
S t||d}|dkrY|j| jkrYt| d tdS |j }||| j|jkoj|jdk| jjdv ot|jdkd}t| d|S )zView marketing report detailsr   r   r   r   Nr   r   r   r   r"   r   r   z#You can only view your own reports.customers:marketing_report_listrY   )
managementadminstaff	submitted)r   interactionscan_edit
can_reviewz&customers/marketing_report_detail.html)r   r   r&   r   r'   r#   r   r(   r)   r*   r+   r	   r,   r   r   r>   lead_interactionsr   r[   roler   )r0   r   r   r   r3   r   r   rv   r6   r6   r7   marketing_report_detail   s0   

r   c                 C   s   ddl m} t||d}| j|jkrt| d tdS |jdkr-t| d td|dS | j	d	krOt
| j|d
}| rN|  t| d td|jdS nt
|d
}t| d||d|j dS )zEdit marketing reportr   r   r   z#You can only edit your own reports.r   rY   z*You can only edit reports in draft status.r   r   instancezReport updated successfully!r   z Edit Marketing Report - Week of r   r   r   )r   r   r   r#   r>   r	   r,   r   r[   r   r   r   r   r   r   r   r   r   )r0   r   r   r   r   r6   r6   r7   marketing_report_edit  s*   



r   c                 C   s   ddl m} t||d}| j|jkrt| d tdS |jdkr-t| d td|dS | j	d	kr\d
|_|
  t| d zddlm} || W n	 tyU   Y nw td|dS t| dd|iS )z"Submit marketing report for reviewr   r   r   zAccess denied.r   rY   z2Report can only be submitted when in draft status.r   r   r   z'Report submitted for management review!r   NotificationServicez.customers/marketing_report_submit_confirm.htmlr   )r   r   r   r#   r>   r	   r,   r   r[   r   r   r   notifications.servicesr   !notify_marketing_report_submittedImportErrorr   )r0   r   r   r   r   r6   r6   r7   marketing_report_submit;  s(   

r   c                 C   sh  ddl m} ddlm} d}t| jdr#| jjr#| jjjr#| jjjj}| jj	s9| jj
s9|dv s9t| d td	S t||d
}|jdvrPt| d td|d
S | jdkrt| j|d}| r|jdd}| j|_t |_|  t| d|   d zddlm} || W n	 ty   Y nw td|d
S nt|d}t | d||d|j!"  dS )z%Management review of marketing reportr   r   r   r   Nr   r   z8Access denied. Management or staff permissions required.r   r   )r   reviewedzReport is not ready for review.r   r   r   Fr   zReport has been !r   z&customers/marketing_report_review.htmlzReview Marketing Report - r   )#r   r   r&   r   r'   r#   r   r(   r)   r*   r+   r	   r,   r   r   r[   r   r   r   r   r   reviewed_byr   rl   reviewed_atr   get_status_displaylowerr   r    notify_marketing_report_reviewedr   r   r>   get_full_name)r0   r   r   r   r3   r   r   r   r6   r6   r7   marketing_report_review[  sJ   



r   c                 C   sD  ddl m} d}t| jdr| jjr| jjjr| jjjj}| jjs9| jjs9|| jds9|dv s9t	
| d tdS tjj| jd	d
}| jd}| jd}|rX|j|d}|r`|j|d}ddlm} ||d}| jd}||}	| }
|jdd }|jdd }|jdd }|	|
|||||d}t| d|S )z5View tickets for customers created by marketing staffr   r   Nr   r   r   r!   r"   )rO   rN   r[   priorityrZ   )r   r   r   r   openin_progressresolved)r   total_ticketsopen_ticketsin_progress_ticketsresolved_ticketsstatus_filterpriority_filterz customers/marketing_tickets.html)r&   r   r'   r#   r   r(   r)   r*   r+   r	   r,   r   r   rn   ro   rq   r   r   r   r   r   rT   r   )r0   r   r3   
my_ticketsr   r   r   r   r   r   r   r   r   r   rv   r6   r6   r7   marketing_tickets_view  sH   



r   c              
   C   s  ddl m}m}m} ddlm}m} ddlm} d}t	| j
dr/| j
jr/| j
jjr/| j
jjj}| j
jsK| j
jsK|| j
dsK|d	v sKt| d
 tdS t  }|tdd }	|dkre|jj| j
d}
n| j
jsq| j
jsq|dv rw|j }
n|j }
|
j|	|g dd}
|
 }|
j|d|d|d|d|d|d|d|dd}|d r|d dkr|d pdd |d  |d< nd|d< |
dj|d|d|ddd}g }| j
js| j
js|dv r.|
d d!j|d|d|d|dd"d#dd$ }|D ]$}|d% r$|d% dkr$|d pdd |d%  |d< qd|d< qt |}|jj|
d&d'j|d(|d(t!d)d*d+|d(t!d,d*d+d-}||t ||||	 d.| d/}t"| d0|S )1z)Analytics dashboard for marketing reportsr   )AvgSumr   r   )r   r   r   Nr   r   r   z@Access denied. You need marketing permissions to view analytics.r"   r@   rA   r   r=   r   )r   r   approved)r   r   
status__incustomers_contactedsite_visits_conducteddemos_conductedrF   qualified_leadsrL   )total_customers_contactedtotal_site_visitstotal_demostotal_leads_generatedtotal_qualified_leadsr|   avg_leads_generatedavg_conversionsr   r   rM   avg_conversion_rater   )leadsconversionssite_visitsr   marketing_staff__last_name)r{   r|   	avg_leadsr   z-total_conversionsrX   r   )weekly_report__ininteraction_typeidpositive)outcome)ro   	converted)rT   positive_outcomesr   z to )rh   metricsweekly_performancetop_performersr   
date_rangez,customers/marketing_analytics_dashboard.html)$django.db.modelsr   r   r   r   r   r   r&   r   r'   r#   r   r(   r)   r*   r+   r	   r,   r   r   rl   r   r   rn   ro   r   r   rT   	aggregatevaluesannotaterq   listr   r   r   )r0   r   r   r   r   r   r   r3   rV   rU   r   rh   r  r	  r
  performers_data	performerr   rv   r6   r6   r7   marketing_analytics_dashboard  s   



"		r  N)*r   r   r   r   django.views.genericr   django.contrib.auth.mixinsr   django.contrib.auth.decoratorsr   r   r	   r&   r
   r   tickets.modelsr   r   r   r   r   r   r   r   r   r  r   r   django.utilsr   datetimer   r   r   r   r   r   r   r   r   r   r  r6   r6   r6   r7   <module>   s>    j

-
:
'


2
6