a
    ;Xh)                     @   s<  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
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 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$ edd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+edd Z,edd  Z-d!d" Z.d#d$ Z/d%d& Z0d'S )(    )renderredirectget_object_or_404)CategoriaInsumoFormItemEstoqueFormMovimentacaoEstoqueForm)CategoriaInsumoItemEstoqueMovimentacaoEstoque)SumF
FloatFieldExpressionWrapper)Coalesce)Counter)messages)JsonResponse)csrf_exempt)get_user_info)login_required)timezone)	timedelta)Especiesc                 C   s   t d t d| j | jdkrt d| j t| j}| rlt d | }t d| tdd|j|jd	S t d
|j	 td|j	dS nt d tdddS )Nz)View 'criar_categoria_insumo_ajax' calledzRequest method:POSTz
POST data:zForm is validzCategoria criada:TzCategoria criada com sucesso!)successmessagecategoria_idZcategoria_nomezForm errors:F)r   errorszInvalid methodu   Método inválido)r   r   )
printmethodr   r   is_validsaver   idnomer   )requestform	categoria r'   6/var/www/viveiro_mudafortebrasil/apps/estoque/views.pycriar_categoria_insumo_ajax   s&    


r)   c                 C   sn   | j jstdS t| j j}| jdkrVt| j}| r\|	  t
| d tdS nt }t| d||dS )Nindexr   zCategoria criada com sucesso.lista_categorias_insumoz#estoque/criar_categoria_insumo.htmlr%   	user_info)useris_authenticatedr   r   r"   r   r   r   r    r!   r   r   r   )r$   r-   r%   r'   r'   r(   criar_categoria_insumo(   s    


r0   c                 C   s8   | j jstdS t| j j}tj }t| d||dS )Nr*   z$estoque/lista_categorias_insumo.html)
categoriasr-   )	r.   r/   r   r   r"   r   objectsallr   )r$   r-   r1   r'   r'   r(   r+   6   s
    
r+   c                 C   s~   | j jstdS t| j j}tj }| jdkr`t	| j
}| rf|  t| d tdS nt	 }|||d}t| d|S )Nr*   r   z#Item de estoque criado com sucesso.lista_itens_estoque)r%   r-   especieszestoque/criar_item_estoque.html)r.   r/   r   r   r"   r   r2   r3   r   r   r   r    r!   r   r   r   )r$   r-   r5   r%   contextr'   r'   r(   criar_item_estoque=   s     



r7   c           	      C   s   | j jstdS t| j j}| jd}tj	 }t
  }|tdd }|rbtjj|dd}ntjjdd}|D ]d}|jr|j|k rd|_d	|_q||j  kr|krn nd	|_d|_qd	|_d	|_qtd	|_d	|_qt|||rt|nd |d
}t| d|S )Nr*   r&      daysr   )r   quantidade__gt)r;   TF)itensr1   Zcategoria_selecionadar-   z estoque/lista_itens_estoque.html)r.   r/   r   r   r"   GETgetr   r2   r3   r   nowdater   r	   filterdata_validadeZvencidoZproximo_vencimentointr   )	r$   r-   r   r1   hojeproximos_30_diasr<   itemr6   r'   r'   r(   r4   X   s8    

r4   c                 C   s   | j jstdS t| j j}tt|d}| jdkrft| j	|d}|
 rp|  t| d tdS n
t|d}t| d|||dS )	Nr*   pkr   )instancez'Item de estoque atualizado com sucesso.r4   z estoque/editar_item_estoque.html)r%   rF   r-   )r.   r/   r   r   r"   r   r	   r   r   r   r    r!   r   r   r   )r$   item_idr-   rF   r%   r'   r'   r(   editar_item_estoque   s    


rK   c                 C   s`   | j jstdS z&tjj|d}|  t| d W n  tj	yV   t
| d Y n0 tdS )Nr*   rG   u&   Item de estoque excluído com sucesso.u    Item de estoque não encontrado.r4   )r.   r/   r   r	   r2   r>   deleter   r   DoesNotExisterror)r$   rJ   rF   r'   r'   r(   deletar_item_estoque   s    rO   c              
   C   s   | j jstdS t| j j}| jd}i }|rDtt|d}||d< | j	dkrt
| j}| r|jdd}| j |_z|  t| d td	W S  ty } z|d t| W Y d }~qd }~0 0 n
t
|d
}t| d||dS )Nr*   rJ   rG   rF   r   F)commitu&   Movimentação registrada com sucesso.r4   )initialz#estoque/registrar_movimentacao.htmlr,   )r.   r/   r   r   r"   r=   r>   r   r	   r   r   r   r    r!   responsavelr   r   
ValueError	add_errorstrr   )r$   r-   rJ   initial_datarF   r%   Zmovimentacaoer'   r'   r(   registrar_movimentacao   s*    


(
rX   c                 C   s:   | j jstdS t| j j}tjd}t| d||dS )Nr*   z-dataz estoque/lista_movimentacoes.html)movimentacoesr-   )	r.   r/   r   r   r"   r
   r2   order_byr   )r$   r-   rY   r'   r'   r(   lista_movimentacoes   s
    r[   c                 C   s  | j jstdS t| j j}tjd}g }|D ]}d}d}d}g }|j	 D ]h}	|	j
rf|t|	j
7 }|	jd ur|t|	j7 }n$|	j
r|	jr|t|	j
t|	j 7 }|	jrN||	j qN|rt|dd d }dddd	d
dd}
||j||||
|dd q0||d}t| d|S )Nr*   r<   r       Z
KilogramasGramasLitros
MililitrosUnidadesSacos)kgglmlunsc)r#   total_quantidadetotal_custounidade_medidaZunidade_display)categoria_datar-   z,estoque/relatorio_insumos_por_categoria.html)r.   r/   r   r   r"   r   r2   prefetch_relatedr<   r3   
quantidadefloatcustocusto_unitariork   appendr   most_commonr#   r>   r   )r$   r-   r1   rl   r&   ri   rj   Zunidade_mais_usadaZunidadesrF   ZUNIDADE_DISPLAYr6   r'   r'   r(   relatorio_insumos_por_categoria   sN    
	

	rt   c                 C   s   | j jstdS t| j j}t  }|tdd }t	j
j||fdjtd| d}|D ]}|j| j|_q\||d}t| d|S )	Nr*   r8   r9   )Zdata_validade__rangerB   )dias_restantes)itens_vencendor-   z&estoque/itens_proximos_vencimento.html)r.   r/   r   r   r"   r   r?   r@   r   r	   r2   rA   annotater   rB   r:   ru   r   )r$   r-   rD   rE   rv   rF   r6   r'   r'   r(   itens_proximos_vencimento   s     
rx   c                 C   s   | j jstdS t| j j}tjjtdtd d}t	jjt
tdtd t dd}|jt
d	dd
 ppd}||||d}t| d|S )Nr*   rn   rq   )custo_totalZitens__quantidadeZitens__custo_unitario)output_field)rj   ry   rj   r   )r<   r1   total_custo_geralr-   z%estoque/relatorio_custos_insumos.html)r.   r/   r   r   r"   r	   r2   rw   r   r   r   r   	aggregater   )r$   r-   r<   r1   r{   r6   r'   r'   r(   relatorio_custos_insumos  s2    r}   N)1django.shortcutsr   r   r   Zapps.estoque.formsr   r   r   Zapps.estoque.modelsr   r	   r
   django.db.modelsr   r   r   r   django.db.models.functionsr   collectionsr   django.contribr   django.httpr   django.views.decorators.csrfr   apps.dashboard.utilsr   django.contrib.auth.decoratorsr   django.utilsr   datetimer   Zapps.especies.modelsr   r)   r0   r+   r7   r4   rK   rO   rX   r[   rt   rx   r}   r'   r'   r'   r(   <module>   s8   
+

	6