3
4[Y%                 @   s   d dl Z d dl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mZ d d	lmZ d d
lmZ G dd dejZG dd dejZG dd dejZdS )    N)settings)User)models)HttpResponse)get_template)python_2_unicode_compatible)HTMLCSS)RiskMap)utilsc                   s   e Zd ZejdejdZejddZ fddZ	dd Z
ed	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd!ddZd"dd Z  ZS )#
MapaRiesgoCuestionario)	on_deleteT)auto_now_addc                s,   | j d k}tt| j|| |r(| j  d S )N)idsuperr   save__generar__)selfargskwargsZcreando)	__class__ G/var/www/vitahealth/hygea.vitahealth/healthbackend/models/mapariesgo.pyr      s    
zMapaRiesgo.savec             C   s   | j j j  | jj }t|j }x|j D ]\}}ytj	j
|d}W n   w.Y nX |dkrbq.t| |d}|j
dd|_|j
dd|_|dkr|jdk	ryt|j|j |_|_W n   Y nX |jdkrd|_d	|_|j
d
d|_|j  q.W dS )u   
        Este método ejecuta los algoritmos para calcular los riesgos y almacena
        los resultados en instancias detalle RiesgoCalculado, donde se vinculan
        los distintos riesgos y su probabilidad de ocurrencia
        )nombre_internoN)mapa_riesgoriesgovaluelabelrisk_bmirisk_waist_hip   UNKNOWNmessage)r   r    )riesgocalculado_setalldeletecuestionarioZ__get_riskmap_input_data__r
   	all_risksitemsRiesgoobjectsgetRiesgoCalculador   r   floatr#   r   )r   
input_dataoutputriskdatarrcr   r   r   r   $   s.    

zMapaRiesgo.__generar__c             C   s(   x"| j jddD ]}|jjrdS qW dS )Nr   )	value__gtTF)r%   filterr   impide_ofrecer_dieta)r   r5   r   r   r   r8   D   s    zMapaRiesgo.impide_ofrecer_dietac          	   C   s2   ddddddddd	g	}| j jjd
kr.|jd |S )Nrisk_cox_cardiovascular_testrisk_framingham_testrisk_diabetes_mellitus!risk_diabetes_mellitus_regressionrisk_hypertension_testrisk_lung_cancer_test_16_yearsrisk_lung_cancer_test_6_yearsr   r    Hombrerisk_breast_cancer_test)r(   pacientegenderappend)r   risksr   r   r   __get_graph_risksnames__K   s    
z#MapaRiesgo.__get_graph_risksnames__c             C   s   ddddddddd	d
ddgS )Nrisk_B12vitamin_testrisk_Dvitamin_testrisk_calcium_testrisk_cholesterol_hdlrisk_cholesterol_ldlrisk_hemoglobine_testrisk_iron_testrisk_leucocytes_testrisk_potassium_testrisk_sodium_testrisk_trygliceridesrisk_uric_acidr   )r   r   r   r   __get_analytics_risksnames__]   s    z'MapaRiesgo.__get_analytics_risksnames__c          
   C   s4   y$t | jjddj}|dkr"d S |S    d S d S )Nrisk_heart_age)Zriesgo__nombre_internor!   r$   )intr%   r-   r   )r   edadr   r   r   get_edad_corazonn   s    zMapaRiesgo.get_edad_corazonc             C   sb   | j  }|d krd S | jj| }|dkr8d|dj|fS |dkrJd|dfS d|dj|d fS d S )	Nr   successu   {} años menorzigual que usteddangeru   {} años mayorr!   r$   )rW   r(   rV   format)r   rV   diffr   r   r   get_edad_corazon_diffw   s    
z MapaRiesgo.get_edad_corazon_diffc             C   s   | j j| j djdS )N)riesgo__nombre_interno__inz-value)r%   r7   rF   order_by)r   r   r   r   get_riesgos_patologias   s    z!MapaRiesgo.get_riesgos_patologiasc             C   s    | j j| j djddjdS )N)r]   r"   )r   z-value)r%   r7   rS   excluder^   )r   r   r   r   get_riesgos_analitica   s    z MapaRiesgo.get_riesgos_analiticac             C   sh   g }x.| j  jddD ]}|jjr|j|jj qW x.| j jddD ]}|jjrF|j|jj qFW |S )N2   )r6   Z20)r   )r_   r7   r   consejo_saludrD   ra   r`   )r   Zconsejosr5   r   r   r   get_consejos_salud   s    zMapaRiesgo.get_consejos_saludc                sh   t | jj| j djd
djdd}ddg t t fdd|}x|D ]}tj|d |d	< qJW |S )N)r]   r!   )r   Zriesgo__nombrer   r   c                s   t t | S )N)dictzip)x)fieldsr   r   <lambda>   s    z/MapaRiesgo.__get_graph_data__.<locals>.<lambda>colorr$   )	listr%   r7   rF   r`   values_listmapr.   get_bar_color)r   valuesr3   rowr   )rh   r   __get_graph_data__   s    &
zMapaRiesgo.__get_graph_data__  c             C   s   t j| j d|dS )Nbase64)r1   width)r   generate_bars_graphrq   )r   rt   r   r   r   get_graph_base64   s    zMapaRiesgo.get_graph_base64Nc             C   s$  | j j}d| jj jd| | j |d}tjjtj	dd|d d}d}t
d	j|d }|j|}g }	|	jt||d
jt|t|gd g }
x&|	D ]}x|jD ]}|
j| qW qW |	d j|
j }|rt|dd}|rd|j d |j d }nd}|jdd}d| d |d< |S |S d S )N
vitahealthr   )modeloZriesgosr3   r(   rB   staticpdfrx   zpdf.csszThttps://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.2/css/bootstrap.min.cssz!healthbackend/pdf/{}/riesgos.html)stringbase_url)stylesheetsr   zapplication/pdf)content_typezMapa de riesgos de  z.pdfzMapa de riesgos.pdf_z
filename=""zContent-Disposition)r(   rB   r%   r&   r^   ospathjoinr   BASE_DIRr   rZ   renderrD   r   r	   pagescopy	write_pdfr   
first_name	last_namereplace)r   as_httpresponser|   rB   r3   
report_cssZbs4_csstemplatehtml	documents	all_pagesdocp	pdf_finalhttp_responsefilenamer   r   r   to_pdf   s4    
&
zMapaRiesgo.to_pdf)rr   )TN)__name__
__module____qualname__r   OneToOneFieldCASCADEr(   DateTimeFieldcreatedr   r   propertyr8   rF   rS   rW   r\   r_   ra   rd   rq   rv   r   __classcell__r   r   )r   r   r      s    	
r   c               @   sf   e Zd ZdZejddZejddZej Z	ej
dejddZejdddZejddd	Zd
d ZdS )r+   z
    Representa cada uno de los riesgos que se calculan para el mapa de riesgos de salud.
    Cada uno esta vinculado con un bloque de ejercicios y un consejo de salud.
       )
max_lengthBloqueEjerciciosT)r   null)r   blankz@Desmarcar en caso que se pueda ofrecer una dieta aunque se tenga)default	help_textc             C   s   dj | jS )Nz{})rZ   r   )r   r   r   r   __str__   s    zRiesgo.__str__N)r   r   r   __doc__r   	CharFieldnombrer   PositiveSmallIntegerFieldorden
ForeignKeySET_NULLbloque_ejercicios	TextFieldrc   BooleanFieldr8   r   r   r   r   r   r+      s   r+   c               @   s   e Zd ZdZejdejdZejdejdZej	ddddZ
ejd	d
d
dZejd
d
dZdd Zdd Zedd Zdd ZdS )r.   zb
    Representa uno de los riesgos calculados por el modulo riskmap para un paciente concreto
    r   )r   r+         r   )
max_digitsdecimal_placesr   rb   T)r   r   r   )r   r   c             C   s   dj | j| j| j| jS )Nz{}: {} [{}] ({}))rZ   r   r   r   r#   )r   r   r   r   r      s    zRiesgoCalculado.__str__c             C   s    | j dk rdS | j dk rdS dS )N   rX   F   warningrY   )r   )r   r   r   r   get_bootstrap_class   s
    

z#RiesgoCalculado.get_bootstrap_classc             C   s   |dk rdS |dk rdS dS )Nr   z#12FF00r   z#FFC400z#FF2C0Dr   )r   r   r   r   r   rn      s
    zRiesgoCalculado.get_bar_colorc             C   sf   | j j| jj krb| jdkrbt| j}|dkr2dS |dkr>dS |dkrJdS |dkrVd	S |d
krbdS dS )Nr"   r   zTOO LOW
   LOW   NORMAL(   HIGHrb   zTOO HIGH )r   r   r   rS   r   rU   )r   r   r   r   r   get_tag   s    
zRiesgoCalculado.get_tagN)r   r   r   r   r   r   r   r   r   DecimalFieldr   r   r   r   r#   r   r   classmethodrn   r   r   r   r   r   r.      s   r.   )datetimer   pygaldjango.confr   django.contrib.auth.modelsr   	django.dbr   django.httpr   django.template.loaderr   django.utils.encodingr   
weasyprintr   r	   riskmapr
   healthbackendr   Modelr   r+   r.   r   r   r   r   <module>   s   
 /