B
    ²ô`€  ã               @   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 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 )é    )Útime)ÚHttpResponse)Údate)Úgettext_lazy)Úutils)ÚUnicodeCSVWriterc               @   sd   e Zd Zd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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   sR   |  d¡| _|  d¡| _d|  dd¡ }| j| ƒ | _|  ¡ | _|  | j¡| _d S )NÚ
start_dateÚend_datez%s_formatterÚ	formatterZHTML)Úgetr
   r   Ú
formattersr   Úget_querysetÚquerysetÚfilter_with_date_range)ÚselfÚkwargsZformatter_name© r   úS/home/dcms/DCMS/lib/python3.7/site-packages/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*   | j d k	r| j S | jstdƒ‚| jj ¡ S )NzkPlease define a model_class property on your report generator class, or override the qet_queryset() method.)r   Úmodel_classÚ
ValueErrorZ_default_managerÚall)r   r   r   r   r   (   s    
zReportGenerator.get_querysetc             C   s   | j  | j¡S )N)r   Úgenerate_responser   )r   r   r   r   Úgenerate3   s    zReportGenerator.generatec             C   s
   | j  ¡ S )z6
        Returns the filename for this report
        )r   Úfilename)r   r   r   r   r    6   s    zReportGenerator.filenamec             C   s   |j S )zF
        Checks whether this report is available to this user
        )Zis_staff)r   Úuserr   r   r   Úis_available_to<   s    zReportGenerator.is_available_toc             C   sn   | j s
|S | jr:t | jtj¡}d| j  |i}|jf |Ž}| jrjt | jtj¡}d| j  |i}|jf |Ž}|S )zX
        Filter results based that are within a (possibly open ended) daterange
        z%s__gtez%s__lte)	Údate_range_field_namer
   r   Zdatetime_combiner   ÚminÚfilterr   Úmax)r   r   Zstart_datetimeZfilter_kwargsZend_datetimer   r   r   r   B   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   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  |d¡S )Nr	   ZDATETIME_FORMAT)r   Úformat_datetime)r   Údtr   r   r   r/   ^   s    zReportFormatter.format_datetimec             C   s   |sdS t  |d¡S )Nr	   r   )r   r/   )r   Údr   r   r   Úformat_datec   s    zReportFormatter.format_datec             C   s
   t  |¡S )N)r   Úformat_timedelta)r   Útdr   r   r   r3   h   s    z ReportFormatter.format_timedeltac             C   s   | j S )N)r+   )r   r   r   r   r    k   s    zReportFormatter.filenameN)r'   r(   r)   r/   r2   r3   r    r   r   r   r   r.   ]   s   r.   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   Zfile_handler   r   r   r   Úget_csv_writerq   s    z!ReportCSVFormatter.get_csv_writerc             K   s.   t dd}d| jf |Ž |d< |  ||¡ |S )Nztext/csv)r,   zattachment; filename=%szContent-Disposition)r   r    Zgenerate_csv)r   Úobjectsr   Úresponser   r   r   r   t   s
    
z$ReportCSVFormatter.generate_responseN)r'   r(   r)   r7   r   r   r   r   r   r5   o   s   r5   c               @   s   e Zd Zdd„ ZdS )ÚReportHTMLFormatterc             K   s   |S )Nr   )r   r8   r   r   r   r   r   ~   s    z%ReportHTMLFormatter.generate_responseN)r'   r(   r)   r   r   r   r   r   r:   |   s   r:   N)Údatetimer   Zdjango.httpr   Zdjango.template.defaultfiltersr   Zdjango.utils.translationr   r   Z
oscar.corer   Zoscar.core.compatr   Úobjectr   r.   r5   r:   r   r   r   r   Ú<module>   s   R