o
    hf                     @   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	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mZmZ d d
lmZmZ d dlmZ d dlZd dlZdddZdddZ dS )    )HttpResponse)get_template)timezone)canvas)letterA4)colors)getSampleStyleSheetParagraphStyle)inch)SimpleDocTemplateTable
TableStyle	ParagraphSpacer)DrawingRect)DecimalNc                 C   s  t  }t|td}t }td|d dddd}td|d	 d
dd}g }|td| |tdd t	
 d}|td| |d  |rd}	g }
|dr]|
d|d   |drl|
d|d   |dr{|
d|d   |dr|
d|d   |
r|	d|
7 }	|t|	|d  |tdd tdd | D }t| }dt|gdd |d!gg}t|d"t d"t gd#}|td$d%d&tjfd'd%d&tjfd(d)d*d+d,d%d&dtjfg || |tdd | r|td-| g d.g}| D ]0}||j|jj|jd/d t|jdkr"d0nd1 |jjd |jd!|jd2|  g q	t|dt d3t d"t dt dt d4t d5t gd#}|td$d%d6tj!fd'd%d6tj"fd7d8d9d:d;d<d,d%d&dtjfd=d$d>d&tj#fg || |$| |%d? |S )@z"Generate a PDF report for expensespagesizeCustomTitleHeading1         parentfontSize
spaceAfter	alignmentCustomHeadingHeading2      )r   r   r   zExpense Reportz	%B %d, %YzGenerated on: NormalzFilters Applied: monthzMonth: yearzYear: categoryz
Category: employeez
Employee: z,    c                 s   s    | ]}|j V  qd S N)amount).0expense r.   1/var/www/html/optinet_system/expenditure/utils.py	<genexpr>D   s    z.generate_expense_report_pdf.<locals>.<genexpr>Total Expenses:Total Amount:KSh ,.2f   	colWidths
BACKGROUNDr   r   r;   	TEXTCOLORALIGNr9   r:   LEFTFONTNAMEr9   r:   Helvetica-BoldFONTSIZEr9   r:   r#   BOTTOMPADDINGr9   r:   r#   GRIDzExpense Details)z	Expense #EmployeeTitleCategoryAmountDateStatusNz... z%Y-%m-%d      ?g?gffffff?r;   r   r>   r9   r:   CENTERrA   r9   rP   rB   )rD   r9   rP   
   )rF   r9   rP   r#   rA   r   r   r:   	Helvetica)rD   rV   r:      )VALIGNr9   r:   MIDDLErV   r   )&ioBytesIOr   r   r	   r
   appendr   r   r   nowstrftimegetjoinsumlenstrr   r   setStyler   r   	lightgreyblackexpense_numberr(   	full_nametitler'   namer+   expense_dateget_status_displaygrey
whitesmokebeigebuildseek)expensesfiltersbufferdocstylestitle_styleheading_stylestoryreport_datefilter_textfilter_partstotal_amounttotal_countsummary_datasummary_tabledatar-   tabler.   r.   r/   generate_expense_report_pdf   s   







$

6


r   c                 C   s  ddl m}m} ddlm}m} |jj| ddgd}|r"|j|d}|jj|d	j|d
|dd	d}t
 }t|td}	g }
t }td|d dddd}|sT|  n	tj|  d|  }|
td| | |
tdd |j|ddd p~td}| }d|gdt|gdd|dgg}t|d t d!t gd"}|td#d$d%tjfd&d$d%tjfd'd(d)d*d+d$d%dtjfg |
| |
tdd |r@|
td,|d-  g d.g}|D ]%}|dkr|j | d/ nd}||j!t|j"d|j d|d0d1g qt|d t d2t d2t dt gd"}|td#d$d3tj#fd&d$d3tj$fd4d5d6d7d+d$d%dtjfd#d8d%tj%fg |
| |	&|
 |'d |S )9z$Generate monthly expense summary PDFr   )ExpenseExpenseCategoryr   )SumCountapprovedpaid)expense_date__year
status__in)expense_date__month)expenses__inexpenses__amountrs   )r~   expense_countz-total_amountr   r   r   r   r   r    zMonthly Expense Summary - r)   r+   )totalr   z0.00zPeriod:r1   r2   r3   r4   r5      r6   r8   r9   r:   r<   r=   r@   rC   rE   rG   zBreakdown by Categoryr!   )rJ   zNumber of ExpenseszTotal Amount
Percentaged   z.1f%rO   rP   rQ   rS   rU   )rD   r9   r:   rT   rV   )(modelsr   r   django.db.modelsr   r   objectsfilterannotateorder_byr[   r\   r   r   r	   r
   calendar
month_namer]   r   r   	aggregater   countrd   r   r   re   r   r   	lightbluerg   r~   rk   r   rn   ro   rp   rq   rr   )r&   r%   r   r   r   r   expenses_qscategory_breakdownru   rv   rz   rw   rx   
period_strr~   r   r   r   cat_datar'   
percentage	cat_tabler.   r.   r/   $generate_monthly_expense_summary_pdf   s   	




$


r   r*   )!django.httpr   django.template.loaderr   django.utilsr   reportlab.pdfgenr   reportlab.lib.pagesizesr   r   reportlab.libr   reportlab.lib.stylesr	   r
   reportlab.lib.unitsr   reportlab.platypusr   r   r   r   r   reportlab.graphics.shapesr   r   decimalr   r   r[   r   r   r.   r.   r.   r/   <module>   s   
|