3

\                 @   s   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 d dlmZ G dd	 d	eZG d
d deZG dd deZG dd deZdS )    )datetimetime)timezone)HttpResponse)date)gettext_lazy)utils)UnicodeCSVWriterc               @   sT   e Zd ZdZdZdZdZdZdZdd Z	d	d
 Z
dd Zdd Zdd Zdd ZdS )ReportGeneratorzX
    Top-level class that needs to be subclassed to provide a
    report generator.
    zreport-%s-to-%s.csvztext/csv z<insert report description>Nc             K   s6   |j d| _|j d| _d|d  }| j|  | _d S )N
start_dateend_datez%s_formatter	formatter)getr   r   
formattersr   )selfkwargsZformatter_name r   ?/var/www/html/oscar2019/oscar/apps/dashboard/reports/reports.py__init__   s    zReportGenerator.__init__c             C   s&   t d| jt| jdt| jdd S )Nz9%(report_filter)s between %(start_date)s and %(end_date)sDATE_FORMAT)Zreport_filterr   r   )_descriptionr   r   r   )r   r   r   r   report_description   s    
z"ReportGenerator.report_descriptionc             C   s   d S )Nr   )r   r   r   r   generate%   s    zReportGenerator.generatec             C   s
   | j j S )z6
        Returns the filename for this report
        )r   filename)r   r   r   r   r   (   s    zReportGenerator.filenamec             C   s   |j S )zF
        Checks whether this report is available to this user
        )is_staff)r   userr   r   r   is_available_to.   s    zReportGenerator.is_available_toc             C   s   | j s
|S | jrJtjtj| jtddtj }d| j  |i}|jf |}| j	rtj| j	tdddd}tj|tj }d| j  |i}|jf |}|S )zX
        Filter results based that are within a (possibly open ended) daterange
        r   z%s__gt   ;   )hourminutesecondz%s__lt)
date_range_field_namer   r   
make_awarer   combiner   get_default_timezonefilterr   )r   querysetstart_datetimefilter_kwargsZend_of_end_dateend_datetimer   r   r   filter_with_date_range4   s"    

z&ReportGenerator.filter_with_date_range)__name__
__module____qualname____doc__filename_templatecontent_typecoder   r$   r   r   r   r   r   r-   r   r   r   r   r
      s   r
   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ReportFormatterc             C   s   |sdS t j|dS )Nr   DATETIME_FORMAT)r   format_datetime)r   dtr   r   r   r7   X   s    zReportFormatter.format_datetimec             C   s   |sdS t j|dS )Nr   r   )r   r7   )r   dr   r   r   format_date]   s    zReportFormatter.format_datec             C   s
   t j|S )N)r   format_timedelta)r   tdr   r   r   r;   b   s    z ReportFormatter.format_timedeltac             C   s   | j S )N)r2   )r   r   r   r   r   e   s    zReportFormatter.filenameN)r.   r/   r0   r7   r:   r;   r   r   r   r   r   r5   W   s   r5   c               @   s   e Zd Zdd Zdd ZdS )ReportCSVFormatterc             K   s   t f d|i|S )N	open_file)r	   )r   file_handler   r   r   r   get_csv_writerk   s    z!ReportCSVFormatter.get_csv_writerc             K   s.   t dd}d| jf | |d< | j|| |S )Nztext/csv)r3   zattachment; filename=%szContent-Disposition)r   r   generate_csv)r   objectsr   responser   r   r   generate_responsen   s
    
z$ReportCSVFormatter.generate_responseN)r.   r/   r0   r@   rD   r   r   r   r   r=   i   s   r=   c               @   s   e Zd Zdd ZdS )ReportHTMLFormatterc             K   s   |S )Nr   )r   rB   r   r   r   r   rD   x   s    z%ReportHTMLFormatter.generate_responseN)r.   r/   r0   rD   r   r   r   r   rE   v   s   rE   N)r   r   django.utilsr   django.httpr   django.template.defaultfiltersr   django.utils.translationr   r   
oscar.corer   oscar.core.compatr	   objectr
   r5   r=   rE   r   r   r   r   <module>   s   K