mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
The official image from streamline does not currently work for the arm64 platform. As a temporary measure, the source code and docker build scripts have been lifted from the official images and are used to build locally. Some additional modifications are made to reduce overall image size, these are documented in docker/README.md
260 lines
8.4 KiB
JavaScript
Executable File
260 lines
8.4 KiB
JavaScript
Executable File
function getAge(dateString) {
|
|
var now = new Date();
|
|
var today = new Date(now.getYear(), now.getMonth(), now.getDate());
|
|
|
|
var yearNow = now.getYear();
|
|
var monthNow = now.getMonth();
|
|
var dateNow = now.getDate();
|
|
|
|
// var dob = new Date(dateString.substring(6, 10),
|
|
// dateString.substring(0, 2) - 1,
|
|
// dateString.substring(3, 5)
|
|
// );
|
|
|
|
var dob = new Date(dateString); // This allows for use of any date format
|
|
|
|
var yearDob = dob.getYear();
|
|
var monthDob = dob.getMonth();
|
|
var dateDob = dob.getDate();
|
|
var age = {};
|
|
var ageString = "";
|
|
var yearString = "";
|
|
var monthString = "";
|
|
var dayString = "";
|
|
|
|
|
|
yearAge = yearNow - yearDob;
|
|
|
|
if (monthNow >= monthDob)
|
|
var monthAge = monthNow - monthDob;
|
|
else {
|
|
yearAge--;
|
|
var monthAge = 12 + monthNow - monthDob;
|
|
}
|
|
|
|
if (dateNow >= dateDob)
|
|
var dateAge = dateNow - dateDob;
|
|
else {
|
|
monthAge--;
|
|
var dateAge = 31 + dateNow - dateDob;
|
|
|
|
if (monthAge < 0) {
|
|
monthAge = 11;
|
|
yearAge--;
|
|
}
|
|
}
|
|
|
|
age = {
|
|
years: yearAge,
|
|
months: monthAge,
|
|
days: dateAge
|
|
};
|
|
|
|
if (age.years > 1)
|
|
yearString = " years";
|
|
else
|
|
yearString = " year";
|
|
if (age.months > 1)
|
|
monthString = " months";
|
|
else
|
|
monthString = " month";
|
|
if (age.days > 1)
|
|
dayString = " days";
|
|
else
|
|
dayString = " day";
|
|
|
|
|
|
if ((age.years > 0) && (age.months > 0) && (age.days > 0))
|
|
ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old.";
|
|
else if ((age.years == 0) && (age.months == 0) && (age.days > 0))
|
|
ageString = "Only " + age.days + dayString + " old!";
|
|
else if ((age.years > 0) && (age.months == 0) && (age.days == 0))
|
|
ageString = age.years + yearString + " old. Happy Birthday!!";
|
|
else if ((age.years > 0) && (age.months > 0) && (age.days == 0))
|
|
ageString = age.years + yearString + " and " + age.months + monthString + " old.";
|
|
else if ((age.years == 0) && (age.months > 0) && (age.days > 0))
|
|
ageString = age.months + monthString + " and " + age.days + dayString + " old.";
|
|
else if ((age.years > 0) && (age.months == 0) && (age.days > 0))
|
|
ageString = age.years + yearString + " and " + age.days + dayString + " old.";
|
|
else if ((age.years == 0) && (age.months > 0) && (age.days == 0))
|
|
ageString = age.months + monthString + " old.";
|
|
else
|
|
ageString = "Error";
|
|
|
|
return ageString;
|
|
}
|
|
|
|
/**
|
|
* Quick and simple export target #table_id into a csv
|
|
*
|
|
* Ref: https://stackoverflow.com/questions/15547198/export-html-table-to-csv/56370447
|
|
*
|
|
* @param table_id The id assigned to the html table
|
|
* @param title The report title
|
|
* @param separator Optional delimeter with a comma default for csv
|
|
*/
|
|
function download_table_as_csv(table_id, title, separator = ',') {
|
|
// Select rows from table_id
|
|
let rows = document.querySelectorAll('table#' + table_id + ' tr');
|
|
// Construct csv
|
|
let csv = [];
|
|
for (let i = 0; i < rows.length; i++) {
|
|
let cols = rows[i].querySelectorAll('td, th');
|
|
let row_csv = csv_from_cols(cols, separator);
|
|
csv.push(row_csv);
|
|
}
|
|
let csv_string = csv.join('\n');
|
|
|
|
// Download it
|
|
let filename = title + ' - ' + new Date().toLocaleDateString() + '.csv';
|
|
let link = document.createElement('a');
|
|
link.style.display = 'none';
|
|
link.setAttribute('target', '_blank');
|
|
link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_string));
|
|
link.setAttribute('download', filename);
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
}
|
|
|
|
/**
|
|
* Quick and simple html print call
|
|
*
|
|
* @param divToPrint The id assigned to the div
|
|
*/
|
|
function print_div(divToPrint) {
|
|
let myDiv = document.getElementById(divToPrint);
|
|
|
|
// Hide DataTable buttons
|
|
[].forEach.call(myDiv.querySelectorAll('.dt-buttons'), function (el) {
|
|
el.style.visibility = 'hidden';
|
|
});
|
|
|
|
// Hide DataTable search box
|
|
[].forEach.call(myDiv.querySelectorAll('.dataTables_filter'), function (el) {
|
|
el.style.visibility = 'hidden';
|
|
});
|
|
|
|
// Hide DataTable pagination header
|
|
[].forEach.call(myDiv.querySelectorAll('.dataTables_info'), function (el) {
|
|
el.style.visibility = 'hidden';
|
|
});
|
|
|
|
// Hide DataTable pagination buttons
|
|
[].forEach.call(myDiv.querySelectorAll('.dataTables_paginate'), function (el) {
|
|
el.style.visibility = 'hidden';
|
|
});
|
|
|
|
let newWindow = window.open('', 'SecondWindow', 'toolbar=0,stat=0');
|
|
|
|
newWindow.document.write("<html><body " +
|
|
"class='' " +
|
|
" onload='window.print()'>" +
|
|
myDiv.innerHTML +
|
|
"</body></html>");
|
|
newWindow.document.close();
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Quick and simple export target #table_ids into a csv
|
|
*
|
|
* Ref: https://stackoverflow.com/questions/15547198/export-html-table-to-csv/56370447
|
|
*
|
|
* @param table_ids The list of ids assigned to the html tables
|
|
* @param title The report title
|
|
* @param separator Optional delimeter with a comma default for csv
|
|
*/
|
|
function download_tables_as_csv(table_ids, title, separator = ',') {
|
|
let csv_strings = "";
|
|
for (let i = 0; i < table_ids.length; i++) {
|
|
let table_id = table_ids[i];
|
|
|
|
// Select rows from table_id
|
|
let rows = document.querySelectorAll('table#' + table_id + ' tr');
|
|
// Construct csv
|
|
let csv = [];
|
|
for (let i = 0; i < rows.length; i++) {
|
|
let cols = rows[i].querySelectorAll('td, th');
|
|
let row_csv = csv_from_cols(cols, separator);
|
|
csv.push(row_csv);
|
|
}
|
|
|
|
let csv_string = csv.join('\n');
|
|
csv_strings += csv_string;
|
|
csv_strings += "\n\n";
|
|
}
|
|
|
|
// Download it
|
|
let filename = title + ' - ' + new Date().toLocaleDateString() + '.csv';
|
|
let link = document.createElement('a');
|
|
link.style.display = 'none';
|
|
link.setAttribute('target', '_blank');
|
|
link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_strings));
|
|
link.setAttribute('download', filename);
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
}
|
|
|
|
/**
|
|
* Convert column data into a csv
|
|
*
|
|
* @param cols Html table columns assigned
|
|
* @param separator Optional delimeter with a comma default for csv
|
|
*/
|
|
function csv_from_cols(cols, separator) {
|
|
let row = [];
|
|
for (let j = 0; j < cols.length; j++) {
|
|
// Clean innertext to remove multiple spaces and jumpline (break csv)
|
|
let data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, '').replace(/(\s\s)/gm, ' ')
|
|
// Escape double-quote with double-double-quote (see https://stackoverflow.com/questions/17808511/properly-escape-a-double-quote-in-csv)
|
|
data = data.replace(/"/g, '""');
|
|
// Push escaped string
|
|
row.push('"' + data + '"');
|
|
}
|
|
return row.join(separator);
|
|
}
|
|
|
|
// JS number formatter based on https://stackoverflow.com/a/34141813/9788442
|
|
function number_format(number, decimals, dec_point, thousands_sep) {
|
|
// Strip all characters but numerical ones.
|
|
number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
|
|
var n = !isFinite(+number) ? 0 : +number,
|
|
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
|
|
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
|
|
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
|
|
s = '',
|
|
toFixedFix = function (n, prec) {
|
|
var k = Math.pow(10, prec);
|
|
return '' + Math.round(n * k) / k;
|
|
};
|
|
|
|
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
|
|
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
|
|
if (s[0].length > 3) {
|
|
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
|
|
}
|
|
if ((s[1] || '').length < prec) {
|
|
s[1] = s[1] || '';
|
|
s[1] += new Array(prec - s[1].length + 1).join('0');
|
|
}
|
|
return s.join(dec);
|
|
}
|
|
|
|
|
|
// will return a currency formating eg 55,000 UGX
|
|
function ugandan_shillings(value, currency_code) {
|
|
if (value == "N/A" || value == "") {
|
|
value = 0;
|
|
} else if (typeof value == "string") {
|
|
value = parseInt(value);
|
|
value = number_format(value, 0, ".", ",");
|
|
} else if (typeof value == "number") {
|
|
value = number_format(value, 0, ".", ",");
|
|
} else {
|
|
value = 0;
|
|
}
|
|
return value + " " + currency_code;
|
|
}
|