fga-gpp-mds/2018.1-Dr-Down

View on GitHub
drdown/medicalrecords/static/medicalrecords/js/curves.js

Summary

Maintainability
A
35 mins
Test Coverage

var DATA_TYPES = {
    height: 'Height',
    weight: 'Weight',
    bmi: 'BMI',
    perimeter: 'Perimeter'
}


function getCookie(name) {
  var cookieValue = null;
  if (document.cookie && document.cookie !== '') {
      var cookies = document.cookie.split(';');
      for (var i = 0; i < cookies.length; i++) {
          var cookie = jQuery.trim(cookies[i]);
          // Does this cookie string begin with the name we want?
          if (cookie.substring(0, name.length + 1) === (name + '=')) {
              cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
              break;
          }
      }
  }
  return cookieValue;
}

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

var csrftoken = getCookie('csrftoken');

var height_data;
var weight_data;
var bmi_data;
var perimeter_data;

function call_height(time_frame){

    $.ajax({
        type:"GET",
        url:"curves/ajax/",
        data: {
            'username': document.getElementById("_username").value,
            'data_type': 'height',
            'time_frame' : time_frame,
        },
        success: function(response){
            height_data = JSON.stringify(response.data);

            google.charts.load('current', {'packages':['corechart']});
            google.charts.setOnLoadCallback(draw_HeigthChart);
        },
        error: function(response){
            console.log(response);
        }
    });

}

function call_weight(time_frame) {

    $.ajax({
        type:"GET",
        url:"curves/ajax/",
        data: {
            'username': document.getElementById("_username").value,
            'data_type': 'weight',
            'time_frame': time_frame,
        },
        success: function(response){
            weight_data = JSON.stringify(response.data);

            google.charts.load('current', {'packages':['corechart']});
            google.charts.setOnLoadCallback(draw_WeigthChart);
        },
        error: function(response){
            console.log(response);
        }
    });

}

$("#height_time_select").ready(
    function() {
        call_height(time_frame=$("#height_time_select").val())
    }
)

$(document).on('change','#height_time_select',function(){
    call_height(time_frame=$("#height_time_select").val())
});

$(document).on('change','#weight_time_select',function(){
    call_weight(time_frame=$("#weight_time_select").val())
});

$("#weight_time_select").ready(
    function () {
        call_weight(time_frame=$("#weight_time_select").val())
    }
)

$("#bmi_chart").ready(
    function() {

        $.ajax({
            type:"GET",
            url:"curves/ajax/",
            data: {
                'username': document.getElementById("_username").value,
                'data_type': 'bmi',
                'time_frame': 'months'
            },
            success: function(response){
                bmi_data = JSON.stringify(response.data);

                google.charts.load('current', {'packages':['corechart']});
                google.charts.setOnLoadCallback(draw_BMIChart);
            },
            error: function(response){
                console.log(response);
            }
        });

    }
)

$("#perimeter_chart").ready(
    function() {

        $.ajax({
            type:"GET",
            url:"curves/ajax/",
            data: {
                'username': document.getElementById("_username").value,
                'data_type': 'cephalic_perimeter',
                'time_frame': 'months'
            },
            success: function(response){
                perimeter_data = JSON.stringify(response.data);

                google.charts.load('current', {'packages':['corechart']});
                google.charts.setOnLoadCallback(draw_PerimeterChart);
            },
            error: function(response){
                console.log(response);
            }
        });

    }
)

$("#menu7-tab").click(function () {
        var func_to_call = function () {redraw_charts();};
        var time = 3000;

        setTimeout(func_to_call, time);
    }
)

function convertToArray(string) {

    var json_data = JSON.parse(string);

    var array = []

    json_data.graphic.forEach(element => {
        array.push(element)
    });

    array.forEach(element => {

        var item = element.pop()

        if (item == 0 && array.indexOf(element) != 1){
            item = null;
        }

        element.push(item);

    });

    console.log(array)

    return array
}

function defineOptions(data_type, data_array) {


    if(data_array != null){

        title = data_array[0][data_array[0].length - 1];
        hAxis_title = data_array[0][0];
        vAxis_title = data_array[0][data_array[0].length - 1];

    }else{

        title = data_type;
        hAxis_title = data_type;
        vAxis_title = "Ages";

    }


    var series = {}

    if (data_type == DATA_TYPES.bmi){
        series = {
            0: { color: '#f96363' }, // red - 5%
            1: { color: '#f7ae6a' }, // orange  6- 10%
            2: { color: '#ffe06d' }, // yellow - 25%
            3: { color: '#b6ff84' }, // green - 50%
            4: { color: '#ffe06d' }, // yellow - 75%
            5: { color: '#f7ae6a' }, // orange - 85%
            6: { color: '#f96363' }, // red - 80%
            7: { color: '#f96363'},  // extra_red - 95%
            8: { color: '#003791', pointSize: '5'},  // blue - patient
        };
    }else{
        series = {
            0: { color: '#f96363' }, // red - 3%
            1: { color: '#f7ae6a' }, // orange 6- 10%
            2: { color: '#ffe06d' }, // yellow - 25%
            3: { color: '#b6ff84' }, // green - 50%
            4: { color: '#ffe06d' }, // yellow - 75%
            5: { color: '#f7ae6a' }, // orange - 90%
            6: { color: '#f96363' }, // red - 97%
            7: { color: '#003791', pointSize: '5'},  // blue - patient
        };
    }

    return {
        title: title,
        curveType: 'function',
        interpolateNulls: 'true',
        hAxis: {
            title: hAxis_title,
            titleTextStyle: {color: '#333'},
        },
        vAxis: {
            title: vAxis_title,
            titleTextStyle: {color: '#333'},
            format: 'decimal',
            viewWindowMode: 'pretty',
        },
        explorer: {
            actions: ['dragToZoom', 'rightClickToReset'],
            axis: 'horizontal',
            keepInBounds: true,
            maxZoomIn: 4.0
        },
        crosshair: { trigger: 'selection' },
        lineWidth: 2,
        series: series,
        is3D: false,
    };
}

function redraw_charts() {

    draw_HeigthChart();
    draw_WeigthChart();
    draw_BMIChart();
    draw_PerimeterChart();

}

function draw_HeigthChart() {

    var height_array = convertToArray(height_data)
    var data_height = google.visualization.arrayToDataTable(height_array);
    var options = defineOptions(data_type=DATA_TYPES.height, data_array=height_array)
    var height_chart = new google.visualization.LineChart(document.getElementById('height_chart'));
    height_chart.draw(data_height, options);

}

function draw_WeigthChart() {

    var weight_array = convertToArray(weight_data)
    var data_weight = google.visualization.arrayToDataTable(weight_array);
    var options = defineOptions(data_type=DATA_TYPES.weight, data_array=weight_array)
    var weight_chart = new google.visualization.LineChart(document.getElementById('weight_chart'));
    weight_chart.draw(data_weight, options);
}

function draw_BMIChart() {

    var bmi_array = convertToArray(bmi_data)
    var data_bmi = google.visualization.arrayToDataTable(bmi_array);
    var options = defineOptions(data_type=DATA_TYPES.bmi, data_array=bmi_array)
    var bmi_chart = new google.visualization.LineChart(document.getElementById('bmi_chart'));
    bmi_chart.draw(data_bmi, options);
}

function draw_PerimeterChart() {

    var perimeter_array = convertToArray(perimeter_data)
    var data_perimeter = google.visualization.arrayToDataTable(perimeter_array);
    var options = defineOptions(data_type=DATA_TYPES.perimeter, data_array=perimeter_array)
    var perimeter_chart = new google.visualization.LineChart(document.getElementById('perimeter_chart'));
    perimeter_chart.draw(data_perimeter, options);

}