a
    ;Xh7a                     @   s`  d dl mZ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 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 d dl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(m)Z) dd Z*dd Z+dd Z,dd Z-dd Z.e"dd Z/d d! Z0d"d# Z1d$d% Z2d d&l3m4Z4 d'd( Z5dS ))    )renderredirectget_object_or_404)get_user_info)	LoteFormsSemeaduraForms)messages)CadastroLote	SemeaduraLogExclusaoLote)Especies)FornecedoresModels)PorcentagemColetaProducaoMudas)datetime)dateN)Decimal)transaction)settings)timezone)require_POST)	mark_safe)Repique)EstufaSelecaoc              	   C   s   ddl m} |jd }d| d}|jj|djddd	}d}|rg }|D ]L}||}	t|	d
krJ|	d }
zt|
}|	| W qJ t
y   Y qJ0 qJ|rt|}|d }|  d| d| }|S )uE  
    Gera a próxima sequência baseada APENAS no ano (dois últimos dígitos).
    Se no ano 25 já existe 25.L1, 25.L2..., o próximo é 25.L3 (independente do que vier antes).
    Formato final que vamos gerar: <especie_id>.<ano_lote>.L<sequencia>
    mas o filtro ignora o especie_id e só se baseia no .<ano_lote>.L
    r   )r	   d   .z.L)Znumero_lote__containsnumero_loteT)flat      )apps.lotes.modelsr	   yearobjectsfiltervalues_listsplitlenintappend
ValueErrormax)
especie_id	data_loter	   Zano_loteZ
filtro_anoZlotes_do_anoZmaior_sequenciaZ
sequenciasZlote_strpartsZseq_strZseq_intZproximaZproxima_sequencia r/   4/var/www/viveiro_mudafortebrasil/apps/lotes/views.pyobter_proxima_sequencia   s2    

r1   c              
   C   sv  t t|d}| jjstdS t| jj}d }d }ztjj	|d}t
jj	|d}| jdkr~t| j| j}| rb|jdd}| j|_|j	d}|js|r|j|_|jst|||_|j|_t|j|j d|_t|j|j d|_||_|j	d	}	|	r:ztjj	|	d}
|
j|_W n tjy6   d |_Y n0 nd |_|  t !| t"d
 tdW S t#|j$ t %| t"d nt|j&|j'|rt|jdnd|rt|jdnd|r|jnd|r|rt|j|j d dnd|r|rt|j|j d dnddd}t( }W nF t)y^ } z,t %| d|  t#d|  W Y d }~n
d }~0 0 t*| d||||dS )NidindexespeciePOSTFcommitr-      
fornecedoruj   <i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Lote cadastrado com êxito.lista_especies   <i class="fa-solid fa-circle-exclamation"></i><strong class="mx-1">Erro!</strong> no formulário. Verifique os dados inseridos.r   r   )especiesnome_popularvalor_minimovalor_maximonumero_sementes_por_kgqtd_sementes_minimoqtd_sementes_maximoinitialzErro ao salvar lote: zlotes/cadastro_lote.htmlformlote	user_infor6   )+r   r   useris_authenticatedr   r   r3   r   r#   getr   methodr   r7   FILESis_validsaveregistrado_porcleaned_dataanor"   r   r1   rB   roundr@   rA   r,   r   nome_fantasiar;   DoesNotExistr   successr   printerrorserrorr>   r?   r	   	Exceptionr   )requestr,   r6   rJ   rH   rI   porcentagem_dataproducao_datadata_lote_informadafornecedor_selecionado_idfornecedor_selecionadoer/   r/   r0   cadastro_lote?   st    



$$
	
$rd   c                 C   s  t t|d}t t|d}| jjs(tdS t| jj}d }ztj	j
|d}tj	j
|d}| jdkr|j}	t| j| j|d}| rt  |jdd}|j
d}
|
r|
|	krt||
|_|js|
r|
j|_|j|_|j|j |_|j|j |_||_|j
d	}|rHztj	j
|d}|j|_ W n tj!yD   d |_ Y n0 nd |_ |  t"#| t$d
 tdW  d    W S 1 s0    Y  nt"%| t$d nt||j&|j'|r|jnd|r|jnd|r|jnd|r|r|j|j d nd|r|r|j|j d nd|jr*|j(dnd dd}W nL t)y } z2t"%| d|  t*j%d| dd W Y d }~n
d }~0 0 t+| d||||dS )Nr2   r4   r5   r7   )instanceFr8   r-   r;   ug   <i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Lote editado com êxito.lista_estoquer=   r   r   %Y-%m-%d)r>   r?   r@   rA   rB   rC   rD   r-   re   rF   zErro ao editar lote: Texc_infozlotes/editar_lote.htmlrG   ),r   r   r	   rK   rL   r   r   r3   r   r#   rM   r   rN   r-   r   r7   rO   rP   r   atomicrQ   rS   r1   r   rT   r"   rB   r@   rA   r,   r   rV   r;   rW   r   rX   r   r[   r>   r?   strftimer\   loggingr   )r]   r,   lote_idr6   rI   rJ   rH   r^   r_   Zdata_lote_originalr`   ra   rb   rc   r/   r/   r0   editar_lote   sv    


,*ro   c           	      C   s"  | j jstdS t| j j}| jd}| jd}tj	 }|rN|j
|d}|r^|j
|d}tj}|D ](}tt|jd|_| |jj |j_qhtjdd }d	d
dddddddddddddddddddddddddddddddd d!dg}t| d"||||||d#S )$Nr4   rT   mes)Zdata_lote__year)Zdata_lote__monthr5   r-   r"   r    ZJaneiro)numeronomer   Z	Fevereiror:   u   Março   ZAbril   ZMaio   ZJunho   ZJulho   ZAgosto	   ZSetembro
   ZOutubro   ZNovembro   ZDezembrozlotes/lista_lotes.html)lotesanos_disponiveisano_selecionadomes_selecionadomesesrJ   )rK   rL   r   r   r3   GETrM   r	   r#   allr$   r   	MEDIA_URLr   r   r6   porcentagem_coletafoto_especiedatesdistinctr   )	r]   rJ   r~   r   r|   base_urlrI   r}   r   r/   r/   r0   lista_lotes   sP    
r   c                 C   sp   | j jstdS t| j j}tjjdd}tj	}|D ](}t
t|jd|_| |jj |j_q4t| d||dS )Nr4   r   )entrada_sementes_kgr5   zlotes/lista_estoque.html)r|   rJ   )rK   rL   r   r   r3   r	   r#   excluder   r   r   r   r6   r   r   r   )r]   rJ   r|   r   rI   r/   r/   r0   rf     s    rf   c                 C   s   | j jstdS tt|d}| jdd}| jdd}|dkrH|rH|n|}t f t	j
j|j|j|j|jt  t  | j | j j||d
}|  t| td W d    n1 s0    Y  td	S )
Nr4   r2   motivo_exclusao motivo_exclusao_outrosOutros)
rn   r   r-   r;   data_exclusaohora_exclusaousuario_exclusaonome_usuario_exclusaor   r   uh   <i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Lote deletado com êxito.rf   )rK   rL   r   r   r	   r7   rM   r   rk   r   r#   creater3   r   r-   r;   r   nowr   timeusernamedeleter   rX   r   )r]   rn   rI   r   r   Zmotivo_finalZlog_exclusaor/   r/   r0   excluir_lote.  s0    


$r   c                 C   s  t t|d}t t|d}tjj|d}| jjs6tdS t	| jj
}z tjj|d}tjj|d}W nV ty }	 z>t| td|	  tjd|	 dd td	W  Y d }	~	S d }	~	0 0 ||j|j|r|jnd
|r|jnd
|rdt|jnd
|r|r|j|j d nd
|r,|r,|j|j d nd
|jd|jd
}
|j}| jdkrzt| j |
d}|! r(|j"dd}| j|_#||_$| j dd }|dkrd |_%n|dkrd |_&t't(|j)d
krt| td tdW S |"  | j)t't(|j*8  _)|"  t+| td tdW S t| td t,|j- W n\ ty }	 zBt| td|	  tjd|	 dd t||
d}W Y d }	~	n
d }	~	0 0 nt||
d}t.| d||||||dS )Nr2   )rI   r4   r5   b<i class="fa-solid fa-circle-exclamation"></i><strong class="mx-1">Erro!</strong> ao obter dados: Erro ao obter dados: Tri   r   r   {:.2f}r   rg   
rI   r>   r?   r@   rA   rB   rC   rD   r-   numero_mudar7   rE   Fr8   tipo_selecaoclienteempresa   <i class="fa-solid fa-circle-exclamation"></i><strong class="mx-1">Erro!</strong> Acabou estas sementes. Não é possível semear mais.rf   o   <i class="fa-solid fa-circle-check"></i><strong class="mx-1">Sucesso!</strong> Semeadura registrada com êxito.r=   j<i class="fa-solid fa-circle-exclamation"></i><strong class="mx-1">Erro!</strong> ao registrar semeadura: Erro ao registrar semeadura: rh   zlotes/semeadura_lote.html)rH   rI   rJ   r6   quebra_dormencia
semeaduras)/r   r   r	   r
   r#   r$   rK   rL   r   r   r3   r   rM   r   r\   r   r[   r   rm   r>   r?   r@   rA   formatfloatrB   r-   rl   r   r   rN   r   r7   rP   rQ   rR   rI   r   r   r   strr   qtd_sementes_utilizadarX   rY   rZ   r   )r]   r,   rn   r6   rI   r   rJ   r^   r_   rc   initial_datar   rH   	semeadurar   r/   r/   r0   semeadura_loteP  s    





$r   c                 C   s   t t|d}| jjstdS tjj|d rBt	
| d tdS | jdkr|j}| jtt|j7  _|  |  t	| d tdS t	
| d tdS )	Nr2   r4   )r   uN   Esta semeadura não pode ser excluída porque já possui um repique associado.lista_repiquer7   uK   Semeadura excluída com sucesso e quantidade de sementes devolvida ao lote.u   Ação inválida.)r   r
   rK   rL   r   r   r#   r$   existsr   r[   rN   rI   r   r   r   r   rQ   r   rX   )r]   semeadura_idr   rI   r/   r/   r0   delete_semeadura  s    
r   c                 C   s  t t|d}t t|d}| jjs(tdS t| jj}z tj	j
|d}tj	j
|d}W nV ty } z>t| td|  tjd| dd tdW  Y d }~S d }~0 0 ||j|j|r|jnd	|r|jnd	|rd
t|jnd	|r |r |j|j d nd	|r|r|j|j d nd	|jd|jd
}	| jdkrzt| j|	d}
|
 r|
jdd}||_ | j
dd }|dkrd |_!n|dkrd |_"t#t$|j%d	krt| td tdW S |  | j%t#t$|j&8  _%|  t'| td tdW S t| td t(|
j) W n\ ty } zBt| td|  tjd| dd t||	d}
W Y d }~n
d }~0 0 nt||	d}
t*| d|
|||dS )Nr2   r4   r5   r   r   Tri   r   r   r   r   rg   r   r7   rE   Fr8   r   r   r   r   rf   r   r=   r   r   rh   z lotes/editar_semeadura_lote.htmlrG   )+r   r   r	   rK   rL   r   r   r3   r   r#   rM   r   r\   r   r[   r   rm   r>   r?   r@   rA   r   r   rB   r-   rl   r   rN   r   r7   rP   rQ   rI   r   r   r   r   r   r   rX   rY   rZ   r   )r]   r,   rn   r6   rI   rJ   r^   r_   rc   r   rH   r   r   r/   r/   r0   editar_semeadura_lote  s|    





$r   )Qc           
   	   C   s   t | jj}tjd }| jdd}|r|j	|d}t
jj	|d}tj	t|dt|dB }tjj	|d}tjj	|d}n0| }t
j }tj }tj }tj }||||||||d}	t| d	|	S )
Nr6   rn   r   r2   )Zlote__id)cadastro_lote_id)Zsemeadura__lote__id)	all_lotesr|   r   repiquesestufasselecoesselected_lote_idrJ   zlotes/relatorio_lotes.html)r   rK   r3   r	   r#   select_relatedr   r   rM   r$   r
   r   r   r   r   noner   )
r]   rJ   r   r   r|   r   r   r   r   contextr/   r/   r0   relatorio_lotes  s8    




r   )6django.shortcutsr   r   r   apps.dashboard.utilsr   Zapps.lotes.formsr   r   django.contribr   r!   r	   r
   r   Zapps.especies.modelsr   Zapps.fornecedores.modelsr   Zapps.producao.modelsr   r   r   r   rm   decimalr   	django.dbr   django.confr   django.utilsr   Zdjango.views.decorators.httpr   django.utils.safestringr   apps.repique.modelsr   apps.estufa.modelsr   r   r1   rd   ro   r   rf   r   r   r   r   django.db.modelsr   r   r/   r/   r/   r0   <module>   s<   *RU6
!RN