2933 |
14 Nov 14 |
olle |
var Report = function() |
2933 |
14 Nov 14 |
olle |
2 |
{ |
2933 |
14 Nov 14 |
olle |
var report = {}; |
2933 |
14 Nov 14 |
olle |
var debug = 0; |
2933 |
14 Nov 14 |
olle |
5 |
|
2933 |
14 Nov 14 |
olle |
var periodIsValid = true; |
2933 |
14 Nov 14 |
olle |
7 |
|
3210 |
26 Mar 15 |
olle |
report.TITLE = 'MeLuDI'; |
6805 |
24 Aug 22 |
olle |
report.VERSION = '1.6.0'; |
2933 |
14 Nov 14 |
olle |
10 |
|
2933 |
14 Nov 14 |
olle |
report.initPage = function() |
2933 |
14 Nov 14 |
olle |
12 |
{ |
2933 |
14 Nov 14 |
olle |
var frm = document.forms['meludi']; |
2933 |
14 Nov 14 |
olle |
14 |
|
2933 |
14 Nov 14 |
olle |
// Step 1 |
2933 |
14 Nov 14 |
olle |
16 |
|
2933 |
14 Nov 14 |
olle |
// Step 2 |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler('step-2', 'wizard-initialize', report.initializeStep2); |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler('step-2', 'wizard-validate', report.validateStep2); |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler('fromdate', 'blur', report.dateOnChange) |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler('todate', 'blur', report.dateOnChange) |
2933 |
14 Nov 14 |
olle |
22 |
|
2933 |
14 Nov 14 |
olle |
// Final registration |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler('wizard', 'wizard-submit', report.submit); |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler('printButton', 'click', report.printVersion); |
2933 |
14 Nov 14 |
olle |
26 |
|
2933 |
14 Nov 14 |
olle |
// Navigation |
2933 |
14 Nov 14 |
olle |
Buttons.addClickHandler('gocancel', Wizard.restartWizard); |
2933 |
14 Nov 14 |
olle |
Buttons.addClickHandler('gorestart', Wizard.restartWizard); |
2933 |
14 Nov 14 |
olle |
Buttons.addClickHandler('gonext', Wizard.goNextOnClick); |
2933 |
14 Nov 14 |
olle |
Buttons.addClickHandler('gocreate', Wizard.goRegister); |
2933 |
14 Nov 14 |
olle |
32 |
|
2933 |
14 Nov 14 |
olle |
Doc.show('step-1'); |
2933 |
14 Nov 14 |
olle |
Doc.show('gonext'); |
2933 |
14 Nov 14 |
olle |
35 |
} |
2933 |
14 Nov 14 |
olle |
36 |
|
2933 |
14 Nov 14 |
olle |
report.initializeStep2 = function() |
2933 |
14 Nov 14 |
olle |
38 |
{ |
2933 |
14 Nov 14 |
olle |
var frm = document.forms['meludi']; |
2933 |
14 Nov 14 |
olle |
Wizard.setCurrentStep(2); |
2933 |
14 Nov 14 |
olle |
Doc.show('gocancel'); |
2933 |
14 Nov 14 |
olle |
Doc.show('gocreate'); |
2933 |
14 Nov 14 |
olle |
var reportType = frm.reporttype.value; |
2933 |
14 Nov 14 |
olle |
44 |
|
2933 |
14 Nov 14 |
olle |
// Hide all parameter fields |
2933 |
14 Nov 14 |
olle |
Doc.hide('report-period'); |
2933 |
14 Nov 14 |
olle |
Doc.hide('view-type'); |
2933 |
14 Nov 14 |
olle |
Doc.hide('projectfocus-filter'); |
2933 |
14 Nov 14 |
olle |
49 |
|
2933 |
14 Nov 14 |
olle |
// Re-enable base on report type |
2933 |
14 Nov 14 |
olle |
if (reportType == 'samplecount') |
2933 |
14 Nov 14 |
olle |
52 |
{ |
2933 |
14 Nov 14 |
olle |
Doc.show('report-period'); |
2933 |
14 Nov 14 |
olle |
Doc.show('view-type'); |
2933 |
14 Nov 14 |
olle |
Doc.show('projectfocus-filter'); |
2933 |
14 Nov 14 |
olle |
56 |
} |
2933 |
14 Nov 14 |
olle |
else if (reportType == 'patientcount') |
2933 |
14 Nov 14 |
olle |
58 |
{ |
2933 |
14 Nov 14 |
olle |
Doc.show('report-period'); |
2933 |
14 Nov 14 |
olle |
Doc.show('view-type'); |
2933 |
14 Nov 14 |
olle |
61 |
} |
2933 |
14 Nov 14 |
olle |
else if (reportType == 'overviewreport') |
2933 |
14 Nov 14 |
olle |
63 |
{ |
2933 |
14 Nov 14 |
olle |
Doc.show('report-period'); |
2933 |
14 Nov 14 |
olle |
Doc.show('projectfocus-filter'); |
2933 |
14 Nov 14 |
olle |
66 |
} |
2933 |
14 Nov 14 |
olle |
else if (reportType == 'missingsampledatareport') |
2933 |
14 Nov 14 |
olle |
68 |
{ |
2933 |
14 Nov 14 |
olle |
69 |
/* |
2933 |
14 Nov 14 |
olle |
Doc.show('sample-type'); |
2933 |
14 Nov 14 |
olle |
71 |
*/ |
2933 |
14 Nov 14 |
olle |
Doc.show('projectfocus-filter'); |
2933 |
14 Nov 14 |
olle |
73 |
} |
2933 |
14 Nov 14 |
olle |
74 |
|
2933 |
14 Nov 14 |
olle |
frm.fromdate.focus(); |
2933 |
14 Nov 14 |
olle |
76 |
} |
2933 |
14 Nov 14 |
olle |
77 |
|
2933 |
14 Nov 14 |
olle |
report.validateStep2 = function(event) |
2933 |
14 Nov 14 |
olle |
79 |
{ |
2933 |
14 Nov 14 |
olle |
if (!periodIsValid) event.preventDefault(); |
2933 |
14 Nov 14 |
olle |
81 |
} |
2933 |
14 Nov 14 |
olle |
82 |
|
2933 |
14 Nov 14 |
olle |
report.dateOnChange = function() |
2933 |
14 Nov 14 |
olle |
84 |
{ |
2933 |
14 Nov 14 |
olle |
var frm = document.forms['meludi']; |
2933 |
14 Nov 14 |
olle |
var fromDate = frm.fromdate.value; |
2933 |
14 Nov 14 |
olle |
var toDate = frm.todate.value; |
2933 |
14 Nov 14 |
olle |
88 |
|
2933 |
14 Nov 14 |
olle |
periodIsValid = false; |
2933 |
14 Nov 14 |
olle |
Wizard.setInputStatus('period'); |
2933 |
14 Nov 14 |
olle |
91 |
|
2933 |
14 Nov 14 |
olle |
if (fromDate != '') |
2933 |
14 Nov 14 |
olle |
93 |
{ |
2933 |
14 Nov 14 |
olle |
fromDate = Meludi.autoFillDate(fromDate, true); |
2933 |
14 Nov 14 |
olle |
frm.fromdate.value = fromDate; |
2933 |
14 Nov 14 |
olle |
if (!Dates.isDate(fromDate, 'yyyyMMdd')) |
2933 |
14 Nov 14 |
olle |
97 |
{ |
2933 |
14 Nov 14 |
olle |
Wizard.setInputStatus('period', 'invalid', 'Not a valid from-date'); |
2933 |
14 Nov 14 |
olle |
return; |
2933 |
14 Nov 14 |
olle |
100 |
} |
2933 |
14 Nov 14 |
olle |
101 |
} |
2933 |
14 Nov 14 |
olle |
102 |
|
2933 |
14 Nov 14 |
olle |
if (toDate != '') |
2933 |
14 Nov 14 |
olle |
104 |
{ |
2933 |
14 Nov 14 |
olle |
toDate = Meludi.autoFillDate(toDate, true); |
2933 |
14 Nov 14 |
olle |
frm.todate.value = toDate; |
2933 |
14 Nov 14 |
olle |
if (!Dates.isDate(toDate, 'yyyyMMdd')) |
2933 |
14 Nov 14 |
olle |
108 |
{ |
2933 |
14 Nov 14 |
olle |
Wizard.setInputStatus('period', 'invalid', 'Not a valid to-date'); |
2933 |
14 Nov 14 |
olle |
return; |
2933 |
14 Nov 14 |
olle |
111 |
} |
2933 |
14 Nov 14 |
olle |
112 |
} |
2933 |
14 Nov 14 |
olle |
113 |
|
2933 |
14 Nov 14 |
olle |
if (toDate && fromDate) |
2933 |
14 Nov 14 |
olle |
115 |
{ |
2933 |
14 Nov 14 |
olle |
if (fromDate > toDate) |
2933 |
14 Nov 14 |
olle |
117 |
{ |
2933 |
14 Nov 14 |
olle |
Wizard.setInputStatus('period', 'invalid', 'Invalid period') |
2933 |
14 Nov 14 |
olle |
return; |
2933 |
14 Nov 14 |
olle |
120 |
} |
2933 |
14 Nov 14 |
olle |
121 |
} |
2933 |
14 Nov 14 |
olle |
122 |
|
2933 |
14 Nov 14 |
olle |
Wizard.setInputStatus('period', 'valid'); |
2933 |
14 Nov 14 |
olle |
periodIsValid = true; |
2933 |
14 Nov 14 |
olle |
125 |
} |
2933 |
14 Nov 14 |
olle |
126 |
|
2933 |
14 Nov 14 |
olle |
report.submit = function() |
2933 |
14 Nov 14 |
olle |
128 |
{ |
2933 |
14 Nov 14 |
olle |
var frm = document.forms['meludi']; |
2933 |
14 Nov 14 |
olle |
130 |
|
2933 |
14 Nov 14 |
olle |
var url = '../SampleReport.servlet?ID='+App.getSessionId(); |
2933 |
14 Nov 14 |
olle |
url += '&cmd='+frm.reporttype.value; |
2933 |
14 Nov 14 |
olle |
url += '&fdate='+frm.fromdate.value; |
2933 |
14 Nov 14 |
olle |
url += '&tdate='+frm.todate.value; |
2933 |
14 Nov 14 |
olle |
url += '&vtype='+frm.viewtype.value; |
2933 |
14 Nov 14 |
olle |
url += '&projectfocusfilter='+frm.projectfocusfilter.value; |
2933 |
14 Nov 14 |
olle |
137 |
|
2933 |
14 Nov 14 |
olle |
Wizard.showLoadingAnimation('Generating report...'); |
2933 |
14 Nov 14 |
olle |
Wizard.asyncJsonRequest(url, report.onReportGenerated); |
2933 |
14 Nov 14 |
olle |
140 |
} |
2933 |
14 Nov 14 |
olle |
141 |
|
2933 |
14 Nov 14 |
olle |
report.onReportGenerated = function(response) |
2933 |
14 Nov 14 |
olle |
143 |
{ |
2933 |
14 Nov 14 |
olle |
var reportData = response.report; |
2933 |
14 Nov 14 |
olle |
var permissionDeniedForPatientName = reportData.permissionDeniedForPatientName; |
2933 |
14 Nov 14 |
olle |
var permissionDeniedForPad = reportData.permissionDeniedForPad; |
2933 |
14 Nov 14 |
olle |
147 |
|
2933 |
14 Nov 14 |
olle |
var reportTable; |
2933 |
14 Nov 14 |
olle |
var frm = document.forms['meludi']; |
2933 |
14 Nov 14 |
olle |
var reportType = frm.reporttype.value; |
2933 |
14 Nov 14 |
olle |
151 |
|
2933 |
14 Nov 14 |
olle |
if (reportData != null) |
2933 |
14 Nov 14 |
olle |
153 |
{ |
2933 |
14 Nov 14 |
olle |
if ('samplecount' == reportType) |
2933 |
14 Nov 14 |
olle |
155 |
{ |
2933 |
14 Nov 14 |
olle |
reportTable = createItemCountReport(reportData, reportType); |
2933 |
14 Nov 14 |
olle |
157 |
} |
2933 |
14 Nov 14 |
olle |
else if ('patientcount' == reportType) |
2933 |
14 Nov 14 |
olle |
159 |
{ |
2933 |
14 Nov 14 |
olle |
reportTable = createItemCountReport(reportData, reportType); |
2933 |
14 Nov 14 |
olle |
161 |
} |
2933 |
14 Nov 14 |
olle |
else if ('overviewreport' == reportType) |
2933 |
14 Nov 14 |
olle |
163 |
{ |
2933 |
14 Nov 14 |
olle |
reportTable = createOverviewReport(reportData); |
2933 |
14 Nov 14 |
olle |
165 |
} |
2933 |
14 Nov 14 |
olle |
else if ('missingsampledatareport' == reportType) |
2933 |
14 Nov 14 |
olle |
167 |
{ |
2933 |
14 Nov 14 |
olle |
reportTable = createMissingSampleDataReport(reportData); |
2933 |
14 Nov 14 |
olle |
169 |
} |
2933 |
14 Nov 14 |
olle |
170 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
172 |
{ |
2933 |
14 Nov 14 |
olle |
Wizard.setFatalError('No values could be found during given period'); |
2933 |
14 Nov 14 |
olle |
return; |
2933 |
14 Nov 14 |
olle |
175 |
} |
2933 |
14 Nov 14 |
olle |
176 |
|
2933 |
14 Nov 14 |
olle |
var reportDiv = Doc.element('reportdiv'); |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(reportTable); |
2933 |
14 Nov 14 |
olle |
179 |
|
2933 |
14 Nov 14 |
olle |
// Optional extra tables |
2933 |
14 Nov 14 |
olle |
if ('overviewreport' == reportType) |
2933 |
14 Nov 14 |
olle |
182 |
{ |
2933 |
14 Nov 14 |
olle |
var spacer0 = document.createElement('text'); |
2933 |
14 Nov 14 |
olle |
spacer0.innerHTML = "<BR>"; |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(spacer0); |
2933 |
14 Nov 14 |
olle |
var spacer = document.createElement('text'); |
2933 |
14 Nov 14 |
olle |
spacer.innerHTML = "<BR>"; |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(spacer); |
2933 |
14 Nov 14 |
olle |
// Table with patients having at least one item of different sample types |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(spacer); |
2933 |
14 Nov 14 |
olle |
var patientWithSampleTable = createOverviewPatientWithSampleTable(reportData); |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(patientWithSampleTable); |
2933 |
14 Nov 14 |
olle |
// Table with patients having different combinations of sample types |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(spacer); |
2933 |
14 Nov 14 |
olle |
195 |
} |
2933 |
14 Nov 14 |
olle |
// Summary list |
2933 |
14 Nov 14 |
olle |
var summaryList = document.createElement('ul'); |
2933 |
14 Nov 14 |
olle |
if (unknownSite == null) unknownSite = 0; |
2933 |
14 Nov 14 |
olle |
if (unknownPatientSite == null) unknownPatientSite = 0; |
2933 |
14 Nov 14 |
olle |
if (unknownCreation == null) unknownCreation = 0; |
2933 |
14 Nov 14 |
olle |
if ('samplecount' == reportType) |
2933 |
14 Nov 14 |
olle |
202 |
{ |
2933 |
14 Nov 14 |
olle |
var samples = 'specimens'; |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement(unknownSite + ' ' + samples + ' registered to unknown sites.')); |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement(unknownCreation + ' ' + samples + ' without creation date. These are included in the \'Total\' column.')); |
2933 |
14 Nov 14 |
olle |
206 |
} |
2933 |
14 Nov 14 |
olle |
else if ('patientcount' == reportType) |
2933 |
14 Nov 14 |
olle |
208 |
{ |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement(unknownSite + ' patients registered to unknown sites.')); |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement(unknownCreation + ' patients without creation date. These are included in the \'Total\' column.')); |
2933 |
14 Nov 14 |
olle |
211 |
} |
2933 |
14 Nov 14 |
olle |
else if ('overviewreport' == reportType) |
2933 |
14 Nov 14 |
olle |
213 |
{ |
2933 |
14 Nov 14 |
olle |
var numSpecimenNoDate = 0; |
2933 |
14 Nov 14 |
olle |
if (report != null) |
2933 |
14 Nov 14 |
olle |
216 |
{ |
2933 |
14 Nov 14 |
olle |
var statistics = reportData.statistics; |
2933 |
14 Nov 14 |
olle |
numSpecimenNoDate = statistics.specimenNoDate; |
2933 |
14 Nov 14 |
olle |
219 |
} |
2933 |
14 Nov 14 |
olle |
if (numSpecimenNoDate == null) |
2933 |
14 Nov 14 |
olle |
221 |
{ |
2933 |
14 Nov 14 |
olle |
numSpecimenNoDate = 0; |
2933 |
14 Nov 14 |
olle |
223 |
} |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement(unknownPatientSite + ' patients registered to unknown sites.')); |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement(numPatientsNoSamples + ' patients with no samples.')); |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement('Note: Time period filter only affects sample items, patients are derived from these.')); |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement('Note: If creation date is unknown, registration date is used instead.')); |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement('Items with unknown creation date: Specimen ' + numSpecimenNoDate)); |
2933 |
14 Nov 14 |
olle |
229 |
} |
2933 |
14 Nov 14 |
olle |
else if ('missingsampledatareport' == reportType) |
2933 |
14 Nov 14 |
olle |
231 |
{ |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(getListElement('Note: Patient name is considered missing if either "all first names" or "family name" is missing for an existing patient.')); |
2933 |
14 Nov 14 |
olle |
if (permissionDeniedForPatientName) |
2933 |
14 Nov 14 |
olle |
234 |
{ |
2933 |
14 Nov 14 |
olle |
var patientNamePermissionWarning = document.createElement('li'); |
2933 |
14 Nov 14 |
olle |
patientNamePermissionWarning.innerHTML = 'Sorry, logged-in user does not have permission to check patient names.'; |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(patientNamePermissionWarning); |
2933 |
14 Nov 14 |
olle |
238 |
} |
2933 |
14 Nov 14 |
olle |
if (permissionDeniedForPad) |
2933 |
14 Nov 14 |
olle |
240 |
{ |
2933 |
14 Nov 14 |
olle |
var padPermissionWarning = document.createElement('li'); |
2933 |
14 Nov 14 |
olle |
padPermissionWarning.innerHTML = 'Sorry, logged-in user does not have permission to check PAD values.'; |
2933 |
14 Nov 14 |
olle |
summaryList.appendChild(padPermissionWarning); |
2933 |
14 Nov 14 |
olle |
244 |
} |
2933 |
14 Nov 14 |
olle |
245 |
} |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(summaryList); |
2933 |
14 Nov 14 |
olle |
if ('consentcount' == reportType) |
2933 |
14 Nov 14 |
olle |
248 |
{ |
2933 |
14 Nov 14 |
olle |
// Add table with patients with consents with multiple dates |
2933 |
14 Nov 14 |
olle |
var multipleDatesTable = createConsentTablePatientsWithMultipleDates(reportData); |
2933 |
14 Nov 14 |
olle |
reportDiv.appendChild(multipleDatesTable); |
2933 |
14 Nov 14 |
olle |
252 |
} |
2933 |
14 Nov 14 |
olle |
253 |
|
2933 |
14 Nov 14 |
olle |
Doc.show('step-3'); |
2933 |
14 Nov 14 |
olle |
Doc.show('gorestart'); |
2933 |
14 Nov 14 |
olle |
256 |
} |
2933 |
14 Nov 14 |
olle |
257 |
|
2933 |
14 Nov 14 |
olle |
258 |
|
2933 |
14 Nov 14 |
olle |
report.printVersion = function() |
2933 |
14 Nov 14 |
olle |
260 |
{ |
2933 |
14 Nov 14 |
olle |
var frm = document.forms['meludi']; |
2933 |
14 Nov 14 |
olle |
var reportName = frm.reporttype[frm.reporttype.selectedIndex].text; |
2933 |
14 Nov 14 |
olle |
var printNote = '<b>Note!</b> For better printing set page orientation to <i>landscape</i>.'; |
2933 |
14 Nov 14 |
olle |
Meludi.openPrintWindow('step-3-content', reportName, 'landscape', printNote, '../', 'report.css'); |
2933 |
14 Nov 14 |
olle |
265 |
} |
2933 |
14 Nov 14 |
olle |
266 |
|
2933 |
14 Nov 14 |
olle |
return report; |
2933 |
14 Nov 14 |
olle |
268 |
}(); |
2933 |
14 Nov 14 |
olle |
269 |
|
2933 |
14 Nov 14 |
olle |
Doc.onLoad(Report.initPage); |
2933 |
14 Nov 14 |
olle |
271 |
|
2933 |
14 Nov 14 |
olle |
272 |
|
2933 |
14 Nov 14 |
olle |
var numCols; |
2933 |
14 Nov 14 |
olle |
var unknownSite = 0; |
2933 |
14 Nov 14 |
olle |
var unknownPatientSite = 0; |
2933 |
14 Nov 14 |
olle |
var unknownCreation = 0; |
2933 |
14 Nov 14 |
olle |
var numMissing = 0; |
2933 |
14 Nov 14 |
olle |
var numPatientsNoSamples = 0; |
2933 |
14 Nov 14 |
olle |
279 |
|
2933 |
14 Nov 14 |
olle |
var month=new Array(12); |
2933 |
14 Nov 14 |
olle |
month[0]="Jan"; |
2933 |
14 Nov 14 |
olle |
month[1]="Feb"; |
2933 |
14 Nov 14 |
olle |
month[2]="Mar"; |
2933 |
14 Nov 14 |
olle |
month[3]="Apr"; |
2933 |
14 Nov 14 |
olle |
month[4]="May"; |
2933 |
14 Nov 14 |
olle |
month[5]="Jun"; |
2933 |
14 Nov 14 |
olle |
month[6]="Jul"; |
2933 |
14 Nov 14 |
olle |
month[7]="Aug"; |
2933 |
14 Nov 14 |
olle |
month[8]="Sep"; |
2933 |
14 Nov 14 |
olle |
month[9]="Oct"; |
2933 |
14 Nov 14 |
olle |
month[10]="Nov"; |
2933 |
14 Nov 14 |
olle |
month[11]="Dec"; |
2933 |
14 Nov 14 |
olle |
293 |
|
2933 |
14 Nov 14 |
olle |
function createMissingDataSampleListPreview(allLines, sampleTypes, previewTitle, previewList) |
2933 |
14 Nov 14 |
olle |
295 |
{ |
2933 |
14 Nov 14 |
olle |
var numCases = allLines.length - 2; // First line is a header line |
2933 |
14 Nov 14 |
olle |
var numSpecimen = 0; |
2933 |
14 Nov 14 |
olle |
var numNoSpecimen = 0; |
2933 |
14 Nov 14 |
olle |
299 |
|
2933 |
14 Nov 14 |
olle |
var html = '<tr><th>'+allLines[0].replace(/\t/g, '</th><th>')+'</th></tr>'; |
2933 |
14 Nov 14 |
olle |
// Check second column for the 'Subtype' value |
2933 |
14 Nov 14 |
olle |
var numNoConsent = 0; |
2933 |
14 Nov 14 |
olle |
var numMissingConsent = 0; |
2933 |
14 Nov 14 |
olle |
for (var i = 1 ; i <= numCases; i++) |
2933 |
14 Nov 14 |
olle |
305 |
{ |
2933 |
14 Nov 14 |
olle |
var line = allLines[i]; |
2933 |
14 Nov 14 |
olle |
var cols = line.split(/\t/); |
2933 |
14 Nov 14 |
olle |
var sampleSubtype = cols[1]; |
2933 |
14 Nov 14 |
olle |
if (sampleSubtype == 'Specimen') |
2933 |
14 Nov 14 |
olle |
310 |
{ |
2933 |
14 Nov 14 |
olle |
numSpecimen++; |
2933 |
14 Nov 14 |
olle |
312 |
} |
2933 |
14 Nov 14 |
olle |
else if (sampleSubtype == 'NoSpecimen') |
2933 |
14 Nov 14 |
olle |
314 |
{ |
2933 |
14 Nov 14 |
olle |
numNoSpecimen++; |
2933 |
14 Nov 14 |
olle |
316 |
} |
2933 |
14 Nov 14 |
olle |
var rowClass = ''; |
2933 |
14 Nov 14 |
olle |
html += '<tr class="'+rowClass+'"><td>'+cols.join('</td><td>')+'</td></tr>'; |
2933 |
14 Nov 14 |
olle |
319 |
} |
2933 |
14 Nov 14 |
olle |
320 |
|
2933 |
14 Nov 14 |
olle |
previewTitle.innerHTML = 'Sample type(s) - ' + sampleTypes + ' (' + numCases + ')'; |
2933 |
14 Nov 14 |
olle |
if (sampleTypes == 'Specimen' || sampleTypes == 'No specimen') |
2933 |
14 Nov 14 |
olle |
323 |
{ |
2933 |
14 Nov 14 |
olle |
// Report the number of each subtype for 'Specimen/No specimen' |
2933 |
14 Nov 14 |
olle |
previewTitle.innerHTML = 'Sample type(s) - Specimen (' + numSpecimen + ')/No specimen (' + numNoSpecimen + ') Total (' + numCases + ')'; |
2933 |
14 Nov 14 |
olle |
326 |
} |
2933 |
14 Nov 14 |
olle |
previewList.innerHTML = '<table>'+html+'</table>'; |
2933 |
14 Nov 14 |
olle |
Doc.show('previewWrapper'); |
2933 |
14 Nov 14 |
olle |
329 |
} |
2933 |
14 Nov 14 |
olle |
330 |
|
2933 |
14 Nov 14 |
olle |
function createItemCountReport(report, reportType) |
2933 |
14 Nov 14 |
olle |
332 |
{ |
2933 |
14 Nov 14 |
olle |
var reportTable = getReportTable(); |
4174 |
24 Oct 16 |
olle |
var projectName = report.projectName; |
2933 |
14 Nov 14 |
olle |
var sdString = report.beginDate; |
2933 |
14 Nov 14 |
olle |
var edString = report.endDate; |
2933 |
14 Nov 14 |
olle |
var psdString = report.periodBeginDate; |
2933 |
14 Nov 14 |
olle |
var ldString = report.latestDate; |
2933 |
14 Nov 14 |
olle |
var startDate = dateStrToDate(sdString); |
2933 |
14 Nov 14 |
olle |
var endDate = dateStrToDate(edString); |
2933 |
14 Nov 14 |
olle |
var periodStartDate = dateStrToDate(psdString); |
2933 |
14 Nov 14 |
olle |
var latestDate = dateStrToDate(ldString); |
2933 |
14 Nov 14 |
olle |
343 |
|
2933 |
14 Nov 14 |
olle |
var viewType = report.viewType; |
2933 |
14 Nov 14 |
olle |
var projectFocusFilter = report.projectFocusFilter; |
2933 |
14 Nov 14 |
olle |
346 |
|
2933 |
14 Nov 14 |
olle |
var headerRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeaderRowYear = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var columnHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
350 |
|
2933 |
14 Nov 14 |
olle |
var headerText = '# Items by '; |
2933 |
14 Nov 14 |
olle |
var startDateStr = addHyphensToDateString(sdString); |
2933 |
14 Nov 14 |
olle |
var endDateStr = addHyphensToDateString(edString); |
2933 |
14 Nov 14 |
olle |
var latestDateStr = addHyphensToDateString(ldString); |
2933 |
14 Nov 14 |
olle |
if ('samplecount' == reportType) |
2933 |
14 Nov 14 |
olle |
356 |
{ |
2933 |
14 Nov 14 |
olle |
headerText = '# Specimens by '; |
2933 |
14 Nov 14 |
olle |
if (projectFocusFilter != null && projectFocusFilter != 'none') |
2933 |
14 Nov 14 |
olle |
359 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = getProjectFocusFilterDisplayText(projectFocusFilter); |
2933 |
14 Nov 14 |
olle |
headerText = '# Specimens with project focus \'' + projectFocusFilterDisplayText + '\' by '; |
2933 |
14 Nov 14 |
olle |
362 |
} |
2933 |
14 Nov 14 |
olle |
363 |
} |
2933 |
14 Nov 14 |
olle |
else if ('patientcount' == reportType) |
2933 |
14 Nov 14 |
olle |
365 |
{ |
2933 |
14 Nov 14 |
olle |
headerText = '# Patients by '; |
2933 |
14 Nov 14 |
olle |
367 |
} |
2933 |
14 Nov 14 |
olle |
if (viewType == 'WEEK') |
2933 |
14 Nov 14 |
olle |
369 |
{ |
2933 |
14 Nov 14 |
olle |
var startWeek = getISOWeekNumber(periodStartDate); |
2933 |
14 Nov 14 |
olle |
var endWeek = getISOWeekNumber(endDate); |
2933 |
14 Nov 14 |
olle |
var tempDate = new Date(periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate()-periodStartDate.getDay()+1); |
2933 |
14 Nov 14 |
olle |
numCols = 0; |
2933 |
14 Nov 14 |
olle |
while (tempDate < endDate) |
2933 |
14 Nov 14 |
olle |
375 |
{ |
2933 |
14 Nov 14 |
olle |
numCols++; |
2933 |
14 Nov 14 |
olle |
tempDate.setDate(tempDate.getDate()+7); |
2933 |
14 Nov 14 |
olle |
378 |
} |
2933 |
14 Nov 14 |
olle |
headerText += 'week'; |
2933 |
14 Nov 14 |
olle |
380 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'MONTH') |
2933 |
14 Nov 14 |
olle |
382 |
{ |
2933 |
14 Nov 14 |
olle |
numCols = (endDate.getFullYear()-periodStartDate.getFullYear())*12 + endDate.getMonth()-periodStartDate.getMonth()+1; |
2933 |
14 Nov 14 |
olle |
headerText += 'month'; |
2933 |
14 Nov 14 |
olle |
385 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'QUARTER') |
2933 |
14 Nov 14 |
olle |
387 |
{ |
2933 |
14 Nov 14 |
olle |
// First year (from start quarter to end of year) |
2933 |
14 Nov 14 |
olle |
numCols = 4 - Math.floor(periodStartDate.getMonth()/3); |
2933 |
14 Nov 14 |
olle |
// Last year (from start of year to end quarter) |
2933 |
14 Nov 14 |
olle |
numCols += Math.floor(endDate.getMonth()/3)+1; |
2933 |
14 Nov 14 |
olle |
// If first and last year is the same, subtract 4 quarters |
2933 |
14 Nov 14 |
olle |
if (endDate.getFullYear() - periodStartDate.getFullYear() == 0) |
2933 |
14 Nov 14 |
olle |
394 |
{ |
2933 |
14 Nov 14 |
olle |
numCols -= 4; |
2933 |
14 Nov 14 |
olle |
396 |
} |
2933 |
14 Nov 14 |
olle |
// Full years between start and end dates |
2933 |
14 Nov 14 |
olle |
if((endDate.getFullYear() - periodStartDate.getFullYear()) > 1) |
2933 |
14 Nov 14 |
olle |
399 |
{ |
2933 |
14 Nov 14 |
olle |
numCols += 4 * (endDate.getFullYear() - periodStartDate.getFullYear()-1); |
2933 |
14 Nov 14 |
olle |
401 |
} |
2933 |
14 Nov 14 |
olle |
headerText += 'quarter'; |
2933 |
14 Nov 14 |
olle |
403 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
405 |
{ |
2933 |
14 Nov 14 |
olle |
numCols = endDate.getFullYear() - periodStartDate.getFullYear() + 1; |
2933 |
14 Nov 14 |
olle |
headerText += 'year'; |
2933 |
14 Nov 14 |
olle |
408 |
} |
2933 |
14 Nov 14 |
olle |
409 |
|
2933 |
14 Nov 14 |
olle |
// Set table header |
2933 |
14 Nov 14 |
olle |
headerText += ' (between ' + startDateStr + ' and ' + endDateStr + ')'; |
2933 |
14 Nov 14 |
olle |
if (latestDate != null) |
2933 |
14 Nov 14 |
olle |
413 |
{ |
2933 |
14 Nov 14 |
olle |
headerText += '\nLast registration ' + latestDateStr; |
2933 |
14 Nov 14 |
olle |
415 |
} |
2933 |
14 Nov 14 |
olle |
// Add top header line with program title and version |
4174 |
24 Oct 16 |
olle |
headerText = projectName + ' [' + Report.TITLE + ' ' + Report.VERSION + ']\n' + headerText; |
2933 |
14 Nov 14 |
olle |
headerRow.appendChild(getTableCellElement(headerText, 'reportheader', (numCols+5))); |
2933 |
14 Nov 14 |
olle |
419 |
|
2933 |
14 Nov 14 |
olle |
// Sub headers |
2933 |
14 Nov 14 |
olle |
// Only if each datacol is less then a year |
2933 |
14 Nov 14 |
olle |
if (viewType != 'YEAR') |
2933 |
14 Nov 14 |
olle |
423 |
{ |
2933 |
14 Nov 14 |
olle |
subHeaderRowYear.appendChild(getTableCellElement('', 'reportsubheader', 3)); |
2933 |
14 Nov 14 |
olle |
addYearSubHeaders(periodStartDate, endDate, subHeaderRowYear, viewType); |
2933 |
14 Nov 14 |
olle |
subHeaderRowYear.appendChild(getTableCellElement('', 'reportsubheader', 2)); |
2933 |
14 Nov 14 |
olle |
427 |
} |
2933 |
14 Nov 14 |
olle |
428 |
|
2933 |
14 Nov 14 |
olle |
// Columnsheader |
4727 |
04 Apr 18 |
olle |
var siteHeader = getTableCellElement('Hospital site', 'reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var startDateHeader = getTableCellElement('Start date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var latestDateHeader = getTableCellElement('Latest date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(siteHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(startDateHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(latestDateHeader); |
2933 |
14 Nov 14 |
olle |
436 |
|
2933 |
14 Nov 14 |
olle |
if (viewType == 'MONTH') addMonthColumnHeaders(columnHeaderRow, periodStartDate); |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'WEEK') addWeekColumnHeaders(columnHeaderRow, periodStartDate); |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'QUARTER') addQuarterColumnHeaders(columnHeaderRow, periodStartDate); |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'YEAR') addYearSubHeaders(periodStartDate, endDate, columnHeaderRow, viewType); |
2933 |
14 Nov 14 |
olle |
441 |
|
2933 |
14 Nov 14 |
olle |
442 |
|
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('Sum', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('Total', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
445 |
|
2933 |
14 Nov 14 |
olle |
// Build table |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(headerRow); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(subHeaderRowYear); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(columnHeaderRow); |
2933 |
14 Nov 14 |
olle |
450 |
|
2933 |
14 Nov 14 |
olle |
// Data rows |
2933 |
14 Nov 14 |
olle |
addDataRowsToTable(report, reportTable); |
2933 |
14 Nov 14 |
olle |
453 |
|
2933 |
14 Nov 14 |
olle |
// Add a row with the combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var sitesCombinedRow = document.createElement('tr'); |
4727 |
04 Apr 18 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('Hospital sites combined', 'colsummary')); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('', 'colsummary', 2)); |
2933 |
14 Nov 14 |
olle |
// Get combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
var sitesCombined = statistics.sitesCombinedKey; |
2933 |
14 Nov 14 |
olle |
var sortedKeyArray = createSortedPeriodArray(report, numCols); |
2933 |
14 Nov 14 |
olle |
var key; |
2933 |
14 Nov 14 |
olle |
for (arrayIndex in sortedKeyArray) |
2933 |
14 Nov 14 |
olle |
464 |
{ |
2933 |
14 Nov 14 |
olle |
key = sortedKeyArray[arrayIndex]; |
2933 |
14 Nov 14 |
olle |
var data = getJSONData(sitesCombined, key, 0); |
2933 |
14 Nov 14 |
olle |
// Add entry with sample sum for site for selected time period |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data,'colsummary')); |
2933 |
14 Nov 14 |
olle |
469 |
} |
2933 |
14 Nov 14 |
olle |
// Get total number of samples for site for the selected time period |
2933 |
14 Nov 14 |
olle |
var sum = getJSONData(statistics, 'sumKey', 0); |
2933 |
14 Nov 14 |
olle |
// Add entry with total number of samples for site for the selected time period |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(sum, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
// Get total number of samples for all sites, regardless of creation date |
2933 |
14 Nov 14 |
olle |
var total = getJSONData(statistics, 'totalKey', 0); |
2933 |
14 Nov 14 |
olle |
// Add entry with total number of samples for all sites, regardless of creation date |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(total, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(sitesCombinedRow); |
2933 |
14 Nov 14 |
olle |
479 |
|
2933 |
14 Nov 14 |
olle |
return reportTable; |
2933 |
14 Nov 14 |
olle |
481 |
} |
2933 |
14 Nov 14 |
olle |
482 |
|
2933 |
14 Nov 14 |
olle |
function createOverviewReport(report) |
2933 |
14 Nov 14 |
olle |
484 |
{ |
2933 |
14 Nov 14 |
olle |
var reportTable = getReportTable(); |
4174 |
24 Oct 16 |
olle |
var projectName = report.projectName; |
2933 |
14 Nov 14 |
olle |
var projectFocusFilter = report.projectFocusFilter; |
2933 |
14 Nov 14 |
olle |
var sdString = report.beginDate; |
2933 |
14 Nov 14 |
olle |
var edString = report.endDate; |
2933 |
14 Nov 14 |
olle |
var ldString = report.latestDate; |
2933 |
14 Nov 14 |
olle |
var startDate = dateStrToDate(sdString); |
2933 |
14 Nov 14 |
olle |
var endDate = dateStrToDate(edString); |
2933 |
14 Nov 14 |
olle |
var latestDate = dateStrToDate(ldString); |
2933 |
14 Nov 14 |
olle |
494 |
|
2933 |
14 Nov 14 |
olle |
var headerRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeader2Row = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var columnHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
499 |
|
2933 |
14 Nov 14 |
olle |
var numCols = 2; |
2933 |
14 Nov 14 |
olle |
var numDecimals = 0; |
2933 |
14 Nov 14 |
olle |
var headerText = 'Number of items of different kinds'; |
2933 |
14 Nov 14 |
olle |
if (projectFocusFilter != null && projectFocusFilter != 'none') |
2933 |
14 Nov 14 |
olle |
504 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = getProjectFocusFilterDisplayText(projectFocusFilter); |
2933 |
14 Nov 14 |
olle |
headerText += ', project focus = \'' + projectFocusFilterDisplayText + '\''; |
2933 |
14 Nov 14 |
olle |
507 |
} |
2933 |
14 Nov 14 |
olle |
var startDateStr = addHyphensToDateString(sdString); |
2933 |
14 Nov 14 |
olle |
var endDateStr = addHyphensToDateString(edString); |
2933 |
14 Nov 14 |
olle |
var latestDateStr = addHyphensToDateString(ldString); |
2933 |
14 Nov 14 |
olle |
headerText += ' (betweeen ' + startDateStr + ' and ' + endDateStr + ')'; |
2933 |
14 Nov 14 |
olle |
if (latestDate != null) |
2933 |
14 Nov 14 |
olle |
513 |
{ |
2933 |
14 Nov 14 |
olle |
headerText += '\nLast registration ' + latestDateStr; |
2933 |
14 Nov 14 |
olle |
515 |
} |
2933 |
14 Nov 14 |
olle |
// Add top header line with program title and version |
4174 |
24 Oct 16 |
olle |
headerText = projectName + ' [' + Report.TITLE + ' ' + Report.VERSION + ']\n' + headerText; |
2933 |
14 Nov 14 |
olle |
headerRow.appendChild(getTableCellElement(headerText, 'reportheader', (numCols+3))); |
2933 |
14 Nov 14 |
olle |
519 |
|
2933 |
14 Nov 14 |
olle |
// Subheader |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('', 'reportsubheader', 3)); |
2933 |
14 Nov 14 |
olle |
522 |
|
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('Patients', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('Specimens', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
525 |
|
2933 |
14 Nov 14 |
olle |
// Subheader 2 |
2933 |
14 Nov 14 |
olle |
subHeader2Row.appendChild(getTableCellElement('', 'reportsubheader', 3)); |
2933 |
14 Nov 14 |
olle |
528 |
|
2933 |
14 Nov 14 |
olle |
subHeader2Row.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeader2Row.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
531 |
|
2933 |
14 Nov 14 |
olle |
// Columnsheader |
4727 |
04 Apr 18 |
olle |
var siteHeader = getTableCellElement('Hospital site', 'reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var startDateHeader = getTableCellElement('Start date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var latestDateHeader = getTableCellElement('Latest date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(siteHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(startDateHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(latestDateHeader); |
2933 |
14 Nov 14 |
olle |
539 |
|
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('Patients', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('Specimens', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
542 |
/* |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
545 |
*/ |
2933 |
14 Nov 14 |
olle |
546 |
|
2933 |
14 Nov 14 |
olle |
// Build table |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(headerRow); |
2933 |
14 Nov 14 |
olle |
549 |
/* |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(subHeaderRow); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(subHeader2Row); |
2933 |
14 Nov 14 |
olle |
552 |
*/ |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(columnHeaderRow); |
2933 |
14 Nov 14 |
olle |
554 |
|
2933 |
14 Nov 14 |
olle |
// Data rows |
2933 |
14 Nov 14 |
olle |
addDataRowsToOverviewTable(report, reportTable); |
2933 |
14 Nov 14 |
olle |
557 |
|
2933 |
14 Nov 14 |
olle |
// Add a row with the combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var sitesCombinedRow = document.createElement('tr'); |
4727 |
04 Apr 18 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('Hospital sites combined', 'colsummary')); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('', 'colsummary', 2)); |
2933 |
14 Nov 14 |
olle |
// Get combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
// Get values for use in summary section |
2933 |
14 Nov 14 |
olle |
numPatientsNoSamples = statistics.patientNoSamples; |
2933 |
14 Nov 14 |
olle |
var sitesCombined = statistics.sitesCombinedKey; |
2933 |
14 Nov 14 |
olle |
if (sitesCombined != null) |
2933 |
14 Nov 14 |
olle |
570 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'patient'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'specimen'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
575 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(sitesCombinedRow); |
2933 |
14 Nov 14 |
olle |
577 |
|
2933 |
14 Nov 14 |
olle |
return reportTable; |
2933 |
14 Nov 14 |
olle |
579 |
} |
2933 |
14 Nov 14 |
olle |
580 |
|
2933 |
14 Nov 14 |
olle |
function createOverviewPatientWithSampleTable(report) |
2933 |
14 Nov 14 |
olle |
582 |
{ |
2933 |
14 Nov 14 |
olle |
var reportTable = getReportTable(); |
4174 |
24 Oct 16 |
olle |
var projectName = report.projectName; |
2933 |
14 Nov 14 |
olle |
var projectFocusFilter = report.projectFocusFilter; |
2933 |
14 Nov 14 |
olle |
var sdString = report.beginDate; |
2933 |
14 Nov 14 |
olle |
var edString = report.endDate; |
2933 |
14 Nov 14 |
olle |
var ldString = report.latestDate; |
2933 |
14 Nov 14 |
olle |
var startDate = dateStrToDate(sdString); |
2933 |
14 Nov 14 |
olle |
var endDate = dateStrToDate(edString); |
2933 |
14 Nov 14 |
olle |
var latestDate = dateStrToDate(ldString); |
2933 |
14 Nov 14 |
olle |
592 |
|
2933 |
14 Nov 14 |
olle |
var headerRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeader2Row = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var columnHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
597 |
|
2933 |
14 Nov 14 |
olle |
var numCols = 4; |
2933 |
14 Nov 14 |
olle |
var numDecimals = 0; |
2933 |
14 Nov 14 |
olle |
var headerText = 'Patients having different number of specimens'; |
2933 |
14 Nov 14 |
olle |
if (projectFocusFilter != null && projectFocusFilter != 'none') |
2933 |
14 Nov 14 |
olle |
602 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = getProjectFocusFilterDisplayText(projectFocusFilter); |
2933 |
14 Nov 14 |
olle |
headerText += ', project focus = \'' + projectFocusFilterDisplayText + '\''; |
2933 |
14 Nov 14 |
olle |
605 |
} |
2933 |
14 Nov 14 |
olle |
var startDateStr = addHyphensToDateString(sdString); |
2933 |
14 Nov 14 |
olle |
var endDateStr = addHyphensToDateString(edString); |
2933 |
14 Nov 14 |
olle |
var latestDateStr = addHyphensToDateString(ldString); |
2933 |
14 Nov 14 |
olle |
headerText += ' (betweeen ' + startDateStr + ' and ' + endDateStr + ')'; |
2933 |
14 Nov 14 |
olle |
610 |
/* |
2933 |
14 Nov 14 |
olle |
headerText += '\nColumn entries are non-exclusive, i.e. a patient may be represented in several columns'; |
2933 |
14 Nov 14 |
olle |
612 |
*/ |
2933 |
14 Nov 14 |
olle |
// Add top header line with program title and version |
4174 |
24 Oct 16 |
olle |
headerText = projectName + ' [' + Report.TITLE + ' ' + Report.VERSION + ']\n' + headerText; |
2933 |
14 Nov 14 |
olle |
headerRow.appendChild(getTableCellElement(headerText, 'reportheader', (numCols+3))); |
2933 |
14 Nov 14 |
olle |
616 |
|
2933 |
14 Nov 14 |
olle |
// Subheader |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('', 'reportsubheader', 3)); |
2933 |
14 Nov 14 |
olle |
619 |
|
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('Patients', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('with', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('with', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('with', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
624 |
|
2933 |
14 Nov 14 |
olle |
625 |
/* |
2933 |
14 Nov 14 |
olle |
// Subheader 2 |
2933 |
14 Nov 14 |
olle |
subHeader2Row.appendChild(getTableCellElement('', 'reportsubheader', 3)); |
2933 |
14 Nov 14 |
olle |
628 |
|
2933 |
14 Nov 14 |
olle |
subHeader2Row.appendChild(getTableCellElement('total', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeader2Row.appendChild(getTableCellElement('specimen(s)', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
631 |
*/ |
2933 |
14 Nov 14 |
olle |
632 |
|
2933 |
14 Nov 14 |
olle |
// Columnsheader |
4727 |
04 Apr 18 |
olle |
var siteHeader = getTableCellElement('Hospital site', 'reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var startDateHeader = getTableCellElement('Start date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var latestDateHeader = getTableCellElement('Latest date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(siteHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(startDateHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(latestDateHeader); |
2933 |
14 Nov 14 |
olle |
640 |
|
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('total', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('1 specimen', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('2 specimens', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('3+ specimens', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
645 |
/* |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
648 |
*/ |
2933 |
14 Nov 14 |
olle |
649 |
|
2933 |
14 Nov 14 |
olle |
// Build table |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(headerRow); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(subHeaderRow); |
2933 |
14 Nov 14 |
olle |
653 |
/* |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(subHeader2Row); |
2933 |
14 Nov 14 |
olle |
655 |
*/ |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(columnHeaderRow); |
2933 |
14 Nov 14 |
olle |
657 |
|
2933 |
14 Nov 14 |
olle |
// Data rows |
2933 |
14 Nov 14 |
olle |
addDataRowsToOverviewPatientWithSampleTable(report, reportTable); |
2933 |
14 Nov 14 |
olle |
660 |
|
2933 |
14 Nov 14 |
olle |
// Add a row with the combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var sitesCombinedRow = document.createElement('tr'); |
4727 |
04 Apr 18 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('Hospital sites combined', 'colsummary')); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('', 'colsummary', 2)); |
2933 |
14 Nov 14 |
olle |
// Get combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
// Get values for use in summary section |
2933 |
14 Nov 14 |
olle |
numPatientsNoSamples = statistics.patientNoSamples; |
2933 |
14 Nov 14 |
olle |
var sitesCombined = statistics.sitesCombinedKey; |
2933 |
14 Nov 14 |
olle |
if (sitesCombined != null) |
2933 |
14 Nov 14 |
olle |
673 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'patient'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
676 |
/* |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'patientWithSpecimen'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
679 |
*/ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'patientWithOneSpecimen'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'patientWithTwoSpecimen'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'patientWithThreeOrMoreSpecimen'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
686 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(sitesCombinedRow); |
2933 |
14 Nov 14 |
olle |
688 |
|
2933 |
14 Nov 14 |
olle |
return reportTable; |
2933 |
14 Nov 14 |
olle |
690 |
} |
2933 |
14 Nov 14 |
olle |
691 |
|
2933 |
14 Nov 14 |
olle |
function createMissingSampleDataReport(report) |
2933 |
14 Nov 14 |
olle |
693 |
{ |
2933 |
14 Nov 14 |
olle |
var reportTable = getReportTable(); |
4174 |
24 Oct 16 |
olle |
var projectName = report.projectName; |
2933 |
14 Nov 14 |
olle |
var sdString = report.beginDate; |
2933 |
14 Nov 14 |
olle |
var edString = report.endDate; |
2933 |
14 Nov 14 |
olle |
var ldString = report.latestDate; |
2933 |
14 Nov 14 |
olle |
var startDate = dateStrToDate(sdString); |
2933 |
14 Nov 14 |
olle |
var endDate = dateStrToDate(edString); |
2933 |
14 Nov 14 |
olle |
var latestDate = dateStrToDate(ldString); |
2933 |
14 Nov 14 |
olle |
702 |
|
2933 |
14 Nov 14 |
olle |
var sampleType = report.sampleType; |
2933 |
14 Nov 14 |
olle |
var projectFocusFilter = report.projectFocusFilter; |
2933 |
14 Nov 14 |
olle |
var permissionDeniedForPatientName = report.permissionDeniedForPatientName; |
2933 |
14 Nov 14 |
olle |
var permissionDeniedForPad = report.permissionDeniedForPad; |
2933 |
14 Nov 14 |
olle |
707 |
|
2933 |
14 Nov 14 |
olle |
var headerRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var subHeader2Row = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var columnHeaderRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
712 |
|
2933 |
14 Nov 14 |
olle |
var numCols = 5; |
2933 |
14 Nov 14 |
olle |
if (sampleType == 'specimen') |
2933 |
14 Nov 14 |
olle |
715 |
{ |
2933 |
14 Nov 14 |
olle |
numCols = 6; |
2933 |
14 Nov 14 |
olle |
717 |
} |
2933 |
14 Nov 14 |
olle |
else if (sampleType == 'nospecimen') |
2933 |
14 Nov 14 |
olle |
719 |
{ |
2933 |
14 Nov 14 |
olle |
numCols = 4; |
2933 |
14 Nov 14 |
olle |
721 |
} |
2933 |
14 Nov 14 |
olle |
else if (sampleType == 'blood') |
2933 |
14 Nov 14 |
olle |
723 |
{ |
2933 |
14 Nov 14 |
olle |
numCols = 3; |
2933 |
14 Nov 14 |
olle |
725 |
} |
2933 |
14 Nov 14 |
olle |
var numDecimals = 0; |
2933 |
14 Nov 14 |
olle |
var headerText = 'Number of missing specimen items of different kinds'; |
2933 |
14 Nov 14 |
olle |
if (projectFocusFilter != null && projectFocusFilter != 'none') |
2933 |
14 Nov 14 |
olle |
729 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = getProjectFocusFilterDisplayText(projectFocusFilter); |
2933 |
14 Nov 14 |
olle |
headerText += ', project focus = \'' + projectFocusFilterDisplayText + '\''; |
2933 |
14 Nov 14 |
olle |
732 |
} |
2933 |
14 Nov 14 |
olle |
var startDateStr = addHyphensToDateString(sdString); |
2933 |
14 Nov 14 |
olle |
var endDateStr = addHyphensToDateString(edString); |
2933 |
14 Nov 14 |
olle |
var latestDateStr = addHyphensToDateString(ldString); |
2933 |
14 Nov 14 |
olle |
headerText += ' (betweeen ' + startDateStr + ' and ' + endDateStr + ')'; |
2933 |
14 Nov 14 |
olle |
if (latestDate != null) |
2933 |
14 Nov 14 |
olle |
738 |
{ |
2933 |
14 Nov 14 |
olle |
headerText += '\nLast registration ' + latestDateStr; |
2933 |
14 Nov 14 |
olle |
740 |
} |
2933 |
14 Nov 14 |
olle |
// Add top header line with program title and version |
4174 |
24 Oct 16 |
olle |
headerText = projectName + ' [' + Report.TITLE + ' ' + Report.VERSION + ']\n' + headerText; |
2933 |
14 Nov 14 |
olle |
headerRow.appendChild(getTableCellElement(headerText, 'reportheader', (numCols+3))); |
2933 |
14 Nov 14 |
olle |
744 |
|
2933 |
14 Nov 14 |
olle |
// Subheader |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('', 'reportsubheader', 3)); |
2933 |
14 Nov 14 |
olle |
747 |
|
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('Patient', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('Patient', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
if (sampleType == 'specimen') |
2933 |
14 Nov 14 |
olle |
751 |
{ |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('PAD', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
subHeaderRow.appendChild(getTableCellElement('Sampling', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
754 |
} |
2933 |
14 Nov 14 |
olle |
755 |
|
2933 |
14 Nov 14 |
olle |
// Columnsheader |
4727 |
04 Apr 18 |
olle |
var siteHeader = getTableCellElement('Hospital site', 'reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var startDateHeader = getTableCellElement('Start date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
var latestDateHeader = getTableCellElement('Latest date','reportsubheader'); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(siteHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(startDateHeader); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(latestDateHeader); |
2933 |
14 Nov 14 |
olle |
763 |
|
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('name', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
if (sampleType == 'specimen') |
2933 |
14 Nov 14 |
olle |
767 |
{ |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('reference', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement('date', 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
770 |
} |
2933 |
14 Nov 14 |
olle |
771 |
|
2933 |
14 Nov 14 |
olle |
// Build table |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(headerRow); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(subHeaderRow); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(columnHeaderRow); |
2933 |
14 Nov 14 |
olle |
776 |
|
2933 |
14 Nov 14 |
olle |
// Data rows |
2933 |
14 Nov 14 |
olle |
addDataRowsToMissingSampleDataTable(report, reportTable); |
2933 |
14 Nov 14 |
olle |
779 |
|
2933 |
14 Nov 14 |
olle |
// Add a row with the combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var sitesCombinedRow = document.createElement('tr'); |
4727 |
04 Apr 18 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('Hospital sites combined', 'colsummary')); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement('', 'colsummary', 2)); |
2933 |
14 Nov 14 |
olle |
// Get combined numbers for all sites for each period |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
var sitesCombined = statistics.sitesCombinedKey; |
2933 |
14 Nov 14 |
olle |
if (sitesCombined != null) |
2933 |
14 Nov 14 |
olle |
790 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'missingPatient'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
if (!permissionDeniedForPatientName) |
2933 |
14 Nov 14 |
olle |
794 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'missingPatientName'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
797 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
799 |
{ |
2933 |
14 Nov 14 |
olle |
data = '-'; |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
802 |
} |
2933 |
14 Nov 14 |
olle |
if (sampleType == 'specimen') |
2933 |
14 Nov 14 |
olle |
804 |
{ |
2933 |
14 Nov 14 |
olle |
if (!permissionDeniedForPad) |
2933 |
14 Nov 14 |
olle |
806 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'missingPadReference'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
809 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
811 |
{ |
2933 |
14 Nov 14 |
olle |
data = '-'; |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
814 |
} |
2933 |
14 Nov 14 |
olle |
data = getJSONData(sitesCombined, 'missingSamplingDateTime'); |
2933 |
14 Nov 14 |
olle |
sitesCombinedRow.appendChild(getTableCellElement(data, 'colsummary')); |
2933 |
14 Nov 14 |
olle |
817 |
} |
2933 |
14 Nov 14 |
olle |
818 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(sitesCombinedRow); |
2933 |
14 Nov 14 |
olle |
820 |
|
2933 |
14 Nov 14 |
olle |
return reportTable; |
2933 |
14 Nov 14 |
olle |
822 |
} |
2933 |
14 Nov 14 |
olle |
823 |
|
2933 |
14 Nov 14 |
olle |
function addDataRowsToOverviewTable(report, reportTable) |
2933 |
14 Nov 14 |
olle |
825 |
{ |
2933 |
14 Nov 14 |
olle |
var sites = report.sites; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
unknownCreation = statistics.noDate; |
2933 |
14 Nov 14 |
olle |
unknownSite = statistics.unknownSite; |
2933 |
14 Nov 14 |
olle |
unknownPatientSite = statistics.unknownPatientSite; |
2933 |
14 Nov 14 |
olle |
for (var siteNo = 0; siteNo < sites.length; siteNo++) |
2933 |
14 Nov 14 |
olle |
832 |
{ |
2933 |
14 Nov 14 |
olle |
var site = sites[siteNo]; |
2933 |
14 Nov 14 |
olle |
var siteName = site.name; |
2933 |
14 Nov 14 |
olle |
var siteStartDate = dateStrToDate(site.startDate); |
2933 |
14 Nov 14 |
olle |
var siteStartDateStr = addHyphensToDateString(site.startDate); |
2933 |
14 Nov 14 |
olle |
837 |
|
2933 |
14 Nov 14 |
olle |
var siteData = statistics[site.prefix]; |
2933 |
14 Nov 14 |
olle |
var siteLatestDate = siteData['latestDateKey']; |
2933 |
14 Nov 14 |
olle |
var siteLatestDateStr = addHyphensToDateString(siteLatestDate); |
2933 |
14 Nov 14 |
olle |
var tableRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var tableCol = getTableCellElement(siteName, 'rowtitle'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(tableCol); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteStartDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteLatestDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var totalKey = 'totalKey'; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
850 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patient'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'specimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
855 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(tableRow); |
2933 |
14 Nov 14 |
olle |
857 |
} |
2933 |
14 Nov 14 |
olle |
858 |
} |
2933 |
14 Nov 14 |
olle |
859 |
|
2933 |
14 Nov 14 |
olle |
function addDataRowsToOverviewPatientWithSampleTable(report, reportTable) |
2933 |
14 Nov 14 |
olle |
861 |
{ |
2933 |
14 Nov 14 |
olle |
var sites = report.sites; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
unknownCreation = statistics.noDate; |
2933 |
14 Nov 14 |
olle |
unknownSite = statistics.unknownSite; |
2933 |
14 Nov 14 |
olle |
unknownPatientSite = statistics.unknownPatientSite; |
2933 |
14 Nov 14 |
olle |
for (var siteNo = 0; siteNo < sites.length; siteNo++) |
2933 |
14 Nov 14 |
olle |
868 |
{ |
2933 |
14 Nov 14 |
olle |
var site = sites[siteNo]; |
2933 |
14 Nov 14 |
olle |
var siteName = site.name; |
2933 |
14 Nov 14 |
olle |
var siteStartDate = dateStrToDate(site.startDate); |
2933 |
14 Nov 14 |
olle |
var siteStartDateStr = addHyphensToDateString(site.startDate); |
2933 |
14 Nov 14 |
olle |
873 |
|
2933 |
14 Nov 14 |
olle |
var siteData = statistics[site.prefix]; |
2933 |
14 Nov 14 |
olle |
var siteLatestDate = siteData['latestDateKey']; |
2933 |
14 Nov 14 |
olle |
var siteLatestDateStr = addHyphensToDateString(siteLatestDate); |
2933 |
14 Nov 14 |
olle |
var tableRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var tableCol = getTableCellElement(siteName, 'rowtitle'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(tableCol); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteStartDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteLatestDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var totalKey = 'totalKey'; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
886 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patient'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
889 |
/* |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientWithSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
892 |
*/ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientWithOneSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientWithTwoSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientWithThreeOrMoreSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
899 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(tableRow); |
2933 |
14 Nov 14 |
olle |
901 |
} |
2933 |
14 Nov 14 |
olle |
902 |
} |
2933 |
14 Nov 14 |
olle |
903 |
|
2933 |
14 Nov 14 |
olle |
function addDataRowsToOverviewPatientDetailedTable(report, reportTable) |
2933 |
14 Nov 14 |
olle |
905 |
{ |
2933 |
14 Nov 14 |
olle |
var sites = report.sites; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
unknownCreation = statistics.noDate; |
2933 |
14 Nov 14 |
olle |
unknownSite = statistics.unknownSite; |
2933 |
14 Nov 14 |
olle |
unknownPatientSite = statistics.unknownPatientSite; |
2933 |
14 Nov 14 |
olle |
for (var siteNo = 0; siteNo < sites.length; siteNo++) |
2933 |
14 Nov 14 |
olle |
912 |
{ |
2933 |
14 Nov 14 |
olle |
var site = sites[siteNo]; |
2933 |
14 Nov 14 |
olle |
var siteName = site.name; |
2933 |
14 Nov 14 |
olle |
var siteStartDate = dateStrToDate(site.startDate); |
2933 |
14 Nov 14 |
olle |
var siteStartDateStr = addHyphensToDateString(site.startDate); |
2933 |
14 Nov 14 |
olle |
917 |
|
2933 |
14 Nov 14 |
olle |
var siteData = statistics[site.prefix]; |
2933 |
14 Nov 14 |
olle |
var tableRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var tableCol = getTableCellElement(siteName, 'rowtitle'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(tableCol); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteStartDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var totalKey = 'totalKey'; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
927 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientBloodSampleOnly'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientSpecimenOnly'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientNoSpecimenOnly'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientBloodSampleAndSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientBloodSampleAndNoSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientSpecimenAndNoSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'patientBloodSampleAndSpecimenAndNoSpecimen'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
//data = getJSONData(siteData, 'patientNoSamples'); |
2933 |
14 Nov 14 |
olle |
//tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'sumKey'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'rowsummary')); |
2933 |
14 Nov 14 |
olle |
946 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(tableRow); |
2933 |
14 Nov 14 |
olle |
948 |
} |
2933 |
14 Nov 14 |
olle |
949 |
} |
2933 |
14 Nov 14 |
olle |
950 |
|
2933 |
14 Nov 14 |
olle |
function addDataRowsToMissingSampleDataTable(report, reportTable) |
2933 |
14 Nov 14 |
olle |
952 |
{ |
2933 |
14 Nov 14 |
olle |
var sites = report.sites; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
var sampleType = report.sampleType; |
2933 |
14 Nov 14 |
olle |
var permissionDeniedForPatientName = report.permissionDeniedForPatientName; |
2933 |
14 Nov 14 |
olle |
var permissionDeniedForPad = report.permissionDeniedForPad; |
2933 |
14 Nov 14 |
olle |
var unknownCreation = statistics.noDate; |
2933 |
14 Nov 14 |
olle |
var unknownSite = statistics.unknownSite; |
2933 |
14 Nov 14 |
olle |
for (var siteNo = 0; siteNo < sites.length; siteNo++) |
2933 |
14 Nov 14 |
olle |
961 |
{ |
2933 |
14 Nov 14 |
olle |
var site = sites[siteNo]; |
2933 |
14 Nov 14 |
olle |
var siteName = site.name; |
2933 |
14 Nov 14 |
olle |
var siteStartDate = dateStrToDate(site.startDate); |
2933 |
14 Nov 14 |
olle |
var siteStartDateStr = addHyphensToDateString(site.startDate); |
2933 |
14 Nov 14 |
olle |
966 |
|
2933 |
14 Nov 14 |
olle |
var siteData = statistics[site.prefix]; |
2933 |
14 Nov 14 |
olle |
var siteLatestDate = siteData['latestDateKey']; |
2933 |
14 Nov 14 |
olle |
var siteLatestDateStr = addHyphensToDateString(siteLatestDate); |
2933 |
14 Nov 14 |
olle |
var tableRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var tableCol = getTableCellElement(siteName, 'rowtitle'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(tableCol); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteStartDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteLatestDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
//var currentDate = new Date(periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate()); |
2933 |
14 Nov 14 |
olle |
var noDateKey = 'noDate'; |
2933 |
14 Nov 14 |
olle |
var sumKey = 'sumKey'; |
2933 |
14 Nov 14 |
olle |
var totalKey = 'totalKey'; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
980 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'missingPatient'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
if (!permissionDeniedForPatientName) |
2933 |
14 Nov 14 |
olle |
984 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'missingPatientName'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
987 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
989 |
{ |
2933 |
14 Nov 14 |
olle |
data = '-'; |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
992 |
} |
2933 |
14 Nov 14 |
olle |
if (sampleType == 'specimen') |
2933 |
14 Nov 14 |
olle |
994 |
{ |
2933 |
14 Nov 14 |
olle |
if (!permissionDeniedForPad) |
2933 |
14 Nov 14 |
olle |
996 |
{ |
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'missingPadReference'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
999 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1001 |
{ |
2933 |
14 Nov 14 |
olle |
data = '-'; |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
1004 |
} |
2933 |
14 Nov 14 |
olle |
1005 |
|
2933 |
14 Nov 14 |
olle |
data = getJSONData(siteData, 'missingSamplingDateTime'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
1008 |
} |
2933 |
14 Nov 14 |
olle |
1009 |
} |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(tableRow); |
2933 |
14 Nov 14 |
olle |
1011 |
} |
2933 |
14 Nov 14 |
olle |
1012 |
} |
2933 |
14 Nov 14 |
olle |
1013 |
|
2933 |
14 Nov 14 |
olle |
function createLink(name, id, itemType, title) |
2933 |
14 Nov 14 |
olle |
1015 |
{ |
2933 |
14 Nov 14 |
olle |
var link = document.createElement('span'); |
2933 |
14 Nov 14 |
olle |
link.className = 'link'; |
2933 |
14 Nov 14 |
olle |
link.title = title; |
2933 |
14 Nov 14 |
olle |
link.innerHTML = name; |
2933 |
14 Nov 14 |
olle |
Events.addEventHandler(link, 'click', Items.itemOnClick, {'item-id': id, 'item-type': itemType, 'no-edit': 1}); |
2933 |
14 Nov 14 |
olle |
return link; |
2933 |
14 Nov 14 |
olle |
1022 |
} |
2933 |
14 Nov 14 |
olle |
1023 |
|
2933 |
14 Nov 14 |
olle |
function createTableCellElementChild(child, clazz, colspan, rowspan) |
2933 |
14 Nov 14 |
olle |
1025 |
{ |
2933 |
14 Nov 14 |
olle |
var cellElement = document.createElement('td'); |
2933 |
14 Nov 14 |
olle |
cellElement.setAttribute('class', clazz); |
2933 |
14 Nov 14 |
olle |
if (colspan != null) cellElement.setAttribute('colspan', colspan); |
2933 |
14 Nov 14 |
olle |
if (rowspan != null) cellElement.setAttribute('rowspan', rowspan); |
2933 |
14 Nov 14 |
olle |
cellElement.appendChild(child); |
2933 |
14 Nov 14 |
olle |
1031 |
|
2933 |
14 Nov 14 |
olle |
return cellElement; |
2933 |
14 Nov 14 |
olle |
1033 |
} |
2933 |
14 Nov 14 |
olle |
1034 |
|
2933 |
14 Nov 14 |
olle |
function getJSONDataWithPercent(jsonObject, key, sumKey, numDecimals) |
2933 |
14 Nov 14 |
olle |
1036 |
{ |
2933 |
14 Nov 14 |
olle |
var dataNum = getJSONData(jsonObject, key); |
2933 |
14 Nov 14 |
olle |
var dataSum = getJSONData(jsonObject, sumKey); |
2933 |
14 Nov 14 |
olle |
var dataPct = '0'; |
2933 |
14 Nov 14 |
olle |
if (dataSum != null && dataSum != 0) |
2933 |
14 Nov 14 |
olle |
1041 |
{ |
2933 |
14 Nov 14 |
olle |
dataPct = 100*dataNum/dataSum; |
2933 |
14 Nov 14 |
olle |
dataPct = dataPct.toFixed(numDecimals); |
2933 |
14 Nov 14 |
olle |
1044 |
} |
2933 |
14 Nov 14 |
olle |
var data = dataNum + ' (' + dataPct + '%)'; |
2933 |
14 Nov 14 |
olle |
return data; |
2933 |
14 Nov 14 |
olle |
1047 |
} |
2933 |
14 Nov 14 |
olle |
1048 |
|
2933 |
14 Nov 14 |
olle |
function getJSONData(jsonObject, key) |
2933 |
14 Nov 14 |
olle |
1050 |
{ |
2933 |
14 Nov 14 |
olle |
var data = getJSONData(jsonObject, key, ''); |
2933 |
14 Nov 14 |
olle |
return data; |
2933 |
14 Nov 14 |
olle |
1053 |
} |
2933 |
14 Nov 14 |
olle |
1054 |
|
2933 |
14 Nov 14 |
olle |
function getJSONData(jsonObject, key, defaultChoice) |
2933 |
14 Nov 14 |
olle |
1056 |
{ |
2933 |
14 Nov 14 |
olle |
var data = defaultChoice; |
2933 |
14 Nov 14 |
olle |
if (jsonObject != null) |
2933 |
14 Nov 14 |
olle |
1059 |
{ |
2933 |
14 Nov 14 |
olle |
if (jsonObject[key] != null) |
2933 |
14 Nov 14 |
olle |
1061 |
{ |
2933 |
14 Nov 14 |
olle |
data = jsonObject[key]; |
2933 |
14 Nov 14 |
olle |
1063 |
} |
2933 |
14 Nov 14 |
olle |
1064 |
} |
2933 |
14 Nov 14 |
olle |
return data; |
2933 |
14 Nov 14 |
olle |
1066 |
} |
2933 |
14 Nov 14 |
olle |
1067 |
|
2933 |
14 Nov 14 |
olle |
function addQuarterColumnHeaders(columnHeaderRow, startDate) |
2933 |
14 Nov 14 |
olle |
1069 |
{ |
2933 |
14 Nov 14 |
olle |
var currentDate = startDate; |
2933 |
14 Nov 14 |
olle |
for (var i=0;i<numCols;i++) |
2933 |
14 Nov 14 |
olle |
1072 |
{ |
2933 |
14 Nov 14 |
olle |
var quarter = Math.floor(currentDate.getMonth()/3)+1; |
2933 |
14 Nov 14 |
olle |
var columnText = 'Q'+quarter; |
2933 |
14 Nov 14 |
olle |
var quarterHeader = getTableCellElement(columnText, 'reportsubheader'); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(quarterHeader); |
2933 |
14 Nov 14 |
olle |
currentDate.setMonth(currentDate.getMonth()+3); |
2933 |
14 Nov 14 |
olle |
1078 |
} |
2933 |
14 Nov 14 |
olle |
1079 |
} |
2933 |
14 Nov 14 |
olle |
1080 |
|
2933 |
14 Nov 14 |
olle |
function addWeekColumnHeaders(columnHeaderRow, startDate) |
2933 |
14 Nov 14 |
olle |
1082 |
{ |
2933 |
14 Nov 14 |
olle |
var currentDate = startDate; |
2933 |
14 Nov 14 |
olle |
var day = currentDate.getDay()-1; |
2933 |
14 Nov 14 |
olle |
day = day>=0 ? day: day + 7; |
2933 |
14 Nov 14 |
olle |
currentDate.setDate(currentDate.getDate()-day); |
2933 |
14 Nov 14 |
olle |
for (var i=0;i<numCols;i++) |
2933 |
14 Nov 14 |
olle |
1088 |
{ |
2933 |
14 Nov 14 |
olle |
var weekNum = getISOWeekNumber(currentDate); |
2933 |
14 Nov 14 |
olle |
var columnText = weekNum; |
2933 |
14 Nov 14 |
olle |
if (weekNum < 10) columnText = '0'+columnText; |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(getTableCellElement(columnText, 'reportsubheader')); |
2933 |
14 Nov 14 |
olle |
currentDate.setDate(currentDate.getDate()+7); |
2933 |
14 Nov 14 |
olle |
1094 |
} |
2933 |
14 Nov 14 |
olle |
1095 |
} |
2933 |
14 Nov 14 |
olle |
1096 |
|
2933 |
14 Nov 14 |
olle |
function addMonthColumnHeaders(columnHeaderRow, startDate) |
2933 |
14 Nov 14 |
olle |
1098 |
{ |
2933 |
14 Nov 14 |
olle |
var currentDate = new Date(startDate.getFullYear(), startDate.getMonth()); |
2933 |
14 Nov 14 |
olle |
for (var i=0;i<numCols;i++) |
2933 |
14 Nov 14 |
olle |
1101 |
{ |
2933 |
14 Nov 14 |
olle |
var monthHeader = getTableCellElement(month[currentDate.getMonth()], 'reportsubheader'); |
2933 |
14 Nov 14 |
olle |
columnHeaderRow.appendChild(monthHeader); |
2933 |
14 Nov 14 |
olle |
currentDate.setMonth(currentDate.getMonth() +1); |
2933 |
14 Nov 14 |
olle |
1105 |
} |
2933 |
14 Nov 14 |
olle |
1106 |
} |
2933 |
14 Nov 14 |
olle |
1107 |
|
2933 |
14 Nov 14 |
olle |
function addYearSubHeaders(startDate, endDate, subHeaderRowYear, vt) |
2933 |
14 Nov 14 |
olle |
1109 |
{ |
2933 |
14 Nov 14 |
olle |
var currentYear = startDate.getFullYear(); |
2933 |
14 Nov 14 |
olle |
1111 |
|
2933 |
14 Nov 14 |
olle |
var columnCounter = 0; |
2933 |
14 Nov 14 |
olle |
do |
2933 |
14 Nov 14 |
olle |
1114 |
{ |
2933 |
14 Nov 14 |
olle |
var colspan; |
2933 |
14 Nov 14 |
olle |
var headerText = currentYear; |
2933 |
14 Nov 14 |
olle |
if (vt == "MONTH") |
2933 |
14 Nov 14 |
olle |
1118 |
{ |
2933 |
14 Nov 14 |
olle |
if (currentYear == startDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1120 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = 11-startDate.getMonth()+1; |
2933 |
14 Nov 14 |
olle |
if (endDate.getFullYear() == currentYear) |
2933 |
14 Nov 14 |
olle |
1123 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = colspan - (11-endDate.getMonth()); |
2933 |
14 Nov 14 |
olle |
1125 |
} |
2933 |
14 Nov 14 |
olle |
1126 |
} |
2933 |
14 Nov 14 |
olle |
else if (currentYear == endDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
colspan = endDate.getMonth()+1; |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
colspan = 12; |
2933 |
14 Nov 14 |
olle |
1131 |
} |
2933 |
14 Nov 14 |
olle |
else if (vt == "WEEK") |
2933 |
14 Nov 14 |
olle |
1133 |
{ |
2933 |
14 Nov 14 |
olle |
if (startDate.getFullYear() == endDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1135 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = numCols; |
2933 |
14 Nov 14 |
olle |
1137 |
} |
2933 |
14 Nov 14 |
olle |
else if (currentYear == startDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1139 |
{ |
2933 |
14 Nov 14 |
olle |
var startWeek = getISOWeekNumber(startDate); |
2933 |
14 Nov 14 |
olle |
var lastDay = new Date(startDate.getFullYear(), 11, 31); |
2933 |
14 Nov 14 |
olle |
var endWeek = getISOWeekNumber(lastDay); |
2933 |
14 Nov 14 |
olle |
if (endWeek == 1) |
2933 |
14 Nov 14 |
olle |
1144 |
{ |
2933 |
14 Nov 14 |
olle |
lastDay.setDate(lastDay.getDate()-7); |
2933 |
14 Nov 14 |
olle |
endWeek = getISOWeekNumber(lastDay); |
2933 |
14 Nov 14 |
olle |
1147 |
} |
2933 |
14 Nov 14 |
olle |
colspan = endWeek - startWeek +1; |
2933 |
14 Nov 14 |
olle |
1149 |
} |
2933 |
14 Nov 14 |
olle |
else if (currentYear == endDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1151 |
{ |
2933 |
14 Nov 14 |
olle |
var endWeek = getISOWeekNumber(endDate); |
2933 |
14 Nov 14 |
olle |
colspan = endWeek; |
2933 |
14 Nov 14 |
olle |
1154 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1156 |
{ |
2933 |
14 Nov 14 |
olle |
var dateInLastWeek = new Date(currentYear, 11, 31); |
2933 |
14 Nov 14 |
olle |
var endWeek = getISOWeekNumber(dateInLastWeek); |
2933 |
14 Nov 14 |
olle |
if (endWeek == 1) |
2933 |
14 Nov 14 |
olle |
1160 |
{ |
2933 |
14 Nov 14 |
olle |
dateInLastWeek.setDate(dateInLastWeek.getDate()-7); |
2933 |
14 Nov 14 |
olle |
endWeek = getISOWeekNumber(dateInLastWeek); |
2933 |
14 Nov 14 |
olle |
1163 |
} |
2933 |
14 Nov 14 |
olle |
colspan = endWeek; |
2933 |
14 Nov 14 |
olle |
1165 |
} |
2933 |
14 Nov 14 |
olle |
1166 |
} |
2933 |
14 Nov 14 |
olle |
else if (vt == "QUARTER") |
2933 |
14 Nov 14 |
olle |
1168 |
{ |
2933 |
14 Nov 14 |
olle |
if (currentYear == startDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1170 |
{ |
2933 |
14 Nov 14 |
olle |
if (startDate.getFullYear() == endDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1172 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = Math.floor((endDate.getMonth()-startDate.getMonth())/3)+1; |
2933 |
14 Nov 14 |
olle |
1174 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1176 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = Math.floor((11-startDate.getMonth())/3) +1; |
2933 |
14 Nov 14 |
olle |
1178 |
} |
2933 |
14 Nov 14 |
olle |
1179 |
} |
2933 |
14 Nov 14 |
olle |
else if(currentYear == endDate.getFullYear()) |
2933 |
14 Nov 14 |
olle |
1181 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = Math.floor(endDate.getMonth()/3)+1; |
2933 |
14 Nov 14 |
olle |
1183 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1185 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = 4; |
2933 |
14 Nov 14 |
olle |
1187 |
} |
2933 |
14 Nov 14 |
olle |
1188 |
} |
2933 |
14 Nov 14 |
olle |
else if (vt == "YEAR") |
2933 |
14 Nov 14 |
olle |
1190 |
{ |
2933 |
14 Nov 14 |
olle |
colspan = 1; |
2933 |
14 Nov 14 |
olle |
1192 |
} |
2933 |
14 Nov 14 |
olle |
columnCounter += colspan; |
2933 |
14 Nov 14 |
olle |
subHeaderRowYear.appendChild(getTableCellElement(headerText, 'reportsubheader', colspan)); |
2933 |
14 Nov 14 |
olle |
}while(!(++currentYear>endDate.getFullYear())); |
2933 |
14 Nov 14 |
olle |
1196 |
} |
2933 |
14 Nov 14 |
olle |
1197 |
|
2933 |
14 Nov 14 |
olle |
function addDataRowsToTable(report, reportTable) |
2933 |
14 Nov 14 |
olle |
1199 |
{ |
2933 |
14 Nov 14 |
olle |
var fdString = report.beginDate; |
2933 |
14 Nov 14 |
olle |
var ldString = report.endDate; |
2933 |
14 Nov 14 |
olle |
var psdString = report.periodBeginDate; |
2933 |
14 Nov 14 |
olle |
var startDate = new Date(); |
2933 |
14 Nov 14 |
olle |
startDate.setYear(fdString.substr(0,4)); |
2933 |
14 Nov 14 |
olle |
startDate.setMonth(fdString.substr(4,2)-1); |
2933 |
14 Nov 14 |
olle |
startDate.setDate(fdString.substr(6)); |
2933 |
14 Nov 14 |
olle |
var endDate = new Date(); |
2933 |
14 Nov 14 |
olle |
endDate.setYear(ldString.substr(0,4)); |
2933 |
14 Nov 14 |
olle |
endDate.setMonth(ldString.substr(4,2)-1); |
2933 |
14 Nov 14 |
olle |
endDate.setDate(ldString.substr(6)); |
2933 |
14 Nov 14 |
olle |
var periodStartDate = new Date(); |
2933 |
14 Nov 14 |
olle |
periodStartDate.setYear(psdString.substr(0,4)); |
2933 |
14 Nov 14 |
olle |
periodStartDate.setMonth(psdString.substr(4,2)-1); |
2933 |
14 Nov 14 |
olle |
periodStartDate.setDate(psdString.substr(6)); |
2933 |
14 Nov 14 |
olle |
var viewType = report.viewType; |
2933 |
14 Nov 14 |
olle |
var sites = report.sites; |
2933 |
14 Nov 14 |
olle |
var statistics = report.statistics; |
2933 |
14 Nov 14 |
olle |
unknownCreation = statistics.noDate; |
2933 |
14 Nov 14 |
olle |
unknownSite = statistics.unknownSite; |
2933 |
14 Nov 14 |
olle |
unknownPatientSite = statistics.unknownPatientSite; |
2933 |
14 Nov 14 |
olle |
for (var siteNo = 0; siteNo < sites.length; siteNo++) |
2933 |
14 Nov 14 |
olle |
1222 |
{ |
2933 |
14 Nov 14 |
olle |
var site = sites[siteNo]; |
2933 |
14 Nov 14 |
olle |
var siteName = site.name; |
2933 |
14 Nov 14 |
olle |
var year = site.startDate.substr(0,4); |
2933 |
14 Nov 14 |
olle |
var month = site.startDate.substr(5,2); |
2933 |
14 Nov 14 |
olle |
var date = site.startDate.substr(8,2); |
2933 |
14 Nov 14 |
olle |
var siteStartDate = new Date(year, month-1, date); |
2933 |
14 Nov 14 |
olle |
1229 |
|
2933 |
14 Nov 14 |
olle |
var siteData = statistics[site.prefix]; |
2933 |
14 Nov 14 |
olle |
var siteLatestDate = siteData['latestDateKey']; |
2933 |
14 Nov 14 |
olle |
var siteLatestDateStr = '????-??-??'; |
2933 |
14 Nov 14 |
olle |
if (siteLatestDate != null) |
2933 |
14 Nov 14 |
olle |
1234 |
{ |
2933 |
14 Nov 14 |
olle |
var siteLatestDateYear = siteLatestDate.substr(0,4); |
2933 |
14 Nov 14 |
olle |
var siteLatestDateMonth = siteLatestDate.substr(4,2); |
2933 |
14 Nov 14 |
olle |
var siteLatestDateDate = siteLatestDate.substr(6,2); |
2933 |
14 Nov 14 |
olle |
siteLatestDateStr = siteLatestDateYear + '-' + siteLatestDateMonth + '-' + siteLatestDateDate; |
2933 |
14 Nov 14 |
olle |
1239 |
} |
2933 |
14 Nov 14 |
olle |
var tableRow = document.createElement('tr'); |
2933 |
14 Nov 14 |
olle |
var tableCol = getTableCellElement(siteName, 'rowtitle'); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(tableCol); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(year+'-'+(month)+'-'+date, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteLatestDateStr, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
var currentDate = new Date(periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate()); |
2933 |
14 Nov 14 |
olle |
var columnCounter = 0; |
2933 |
14 Nov 14 |
olle |
do |
2933 |
14 Nov 14 |
olle |
1248 |
{ |
2933 |
14 Nov 14 |
olle |
var data = 0; |
2933 |
14 Nov 14 |
olle |
var keyIndex; |
2933 |
14 Nov 14 |
olle |
var yearIndex = currentDate.getFullYear(); |
2933 |
14 Nov 14 |
olle |
1252 |
|
2933 |
14 Nov 14 |
olle |
if (viewType == 'YEAR') |
2933 |
14 Nov 14 |
olle |
1254 |
{ |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
1257 |
{ |
2933 |
14 Nov 14 |
olle |
if (siteData[keyIndex] != null) data = siteData[keyIndex]; |
2933 |
14 Nov 14 |
olle |
1259 |
} |
2933 |
14 Nov 14 |
olle |
// Initialize data columns before site start date to empty string |
2933 |
14 Nov 14 |
olle |
if ( (currentDate.getFullYear() < siteStartDate.getFullYear())) |
2933 |
14 Nov 14 |
olle |
1262 |
{ |
2933 |
14 Nov 14 |
olle |
data = ''; |
2933 |
14 Nov 14 |
olle |
1264 |
} |
2933 |
14 Nov 14 |
olle |
currentDate.setFullYear(currentDate.getFullYear()+1); |
2933 |
14 Nov 14 |
olle |
1266 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'QUARTER') |
2933 |
14 Nov 14 |
olle |
1268 |
{ |
2933 |
14 Nov 14 |
olle |
var qIndex = Math.floor(currentDate.getMonth()/3) + 1; |
2933 |
14 Nov 14 |
olle |
var startQuarter = Math.floor(siteStartDate.getMonth()/3)+1; |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + '' + qIndex; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
1273 |
{ |
2933 |
14 Nov 14 |
olle |
if (siteData[keyIndex] != null) data = siteData[keyIndex]; |
2933 |
14 Nov 14 |
olle |
1275 |
} |
2933 |
14 Nov 14 |
olle |
// Initialize data columns before site start date to empty string |
2933 |
14 Nov 14 |
olle |
if ( (currentDate.getFullYear() < siteStartDate.getFullYear()) || |
2933 |
14 Nov 14 |
olle |
(currentDate.getFullYear() == siteStartDate.getFullYear() && qIndex < startQuarter)) |
2933 |
14 Nov 14 |
olle |
1279 |
{ |
2933 |
14 Nov 14 |
olle |
data = ''; |
2933 |
14 Nov 14 |
olle |
1281 |
} |
2933 |
14 Nov 14 |
olle |
currentDate.setMonth(currentDate.getMonth()+3); |
2933 |
14 Nov 14 |
olle |
1283 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'MONTH') |
2933 |
14 Nov 14 |
olle |
1285 |
{ |
2933 |
14 Nov 14 |
olle |
var monthIndex = currentDate.getMonth()+1; |
2933 |
14 Nov 14 |
olle |
var rowFill = monthIndex < 10 ? '0' : ''; |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + rowFill + monthIndex; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
1290 |
{ |
2933 |
14 Nov 14 |
olle |
if (siteData[keyIndex] != null) data = siteData[keyIndex]; |
2933 |
14 Nov 14 |
olle |
1292 |
} |
2933 |
14 Nov 14 |
olle |
// Initialize data columns before site start date to empty string |
2933 |
14 Nov 14 |
olle |
if ( (currentDate.getFullYear() < siteStartDate.getFullYear()) || |
2933 |
14 Nov 14 |
olle |
(currentDate.getFullYear() == siteStartDate.getFullYear() && (monthIndex-1) < siteStartDate.getMonth())) |
2933 |
14 Nov 14 |
olle |
1296 |
{ |
2933 |
14 Nov 14 |
olle |
data = ''; |
2933 |
14 Nov 14 |
olle |
1298 |
} |
2933 |
14 Nov 14 |
olle |
currentDate.setMonth(currentDate.getMonth()+1); |
2933 |
14 Nov 14 |
olle |
1300 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'WEEK') |
2933 |
14 Nov 14 |
olle |
1302 |
{ |
2933 |
14 Nov 14 |
olle |
var weekIndex = getISOWeekNumber(currentDate); |
2933 |
14 Nov 14 |
olle |
// Week number in year stored as yyyyww with leading 0 if needed |
2933 |
14 Nov 14 |
olle |
if (weekIndex < 10) |
2933 |
14 Nov 14 |
olle |
1306 |
{ |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + '0' + weekIndex; |
2933 |
14 Nov 14 |
olle |
1308 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1310 |
{ |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + '' + weekIndex; |
2933 |
14 Nov 14 |
olle |
1312 |
} |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
1314 |
{ |
2933 |
14 Nov 14 |
olle |
if (siteData[keyIndex] != null) data = siteData[keyIndex]; |
2933 |
14 Nov 14 |
olle |
1316 |
} |
2933 |
14 Nov 14 |
olle |
// Initialize data columns before site start date to empty string |
2933 |
14 Nov 14 |
olle |
1318 |
// |
2933 |
14 Nov 14 |
olle |
// Note: ISO week numbers are tricky in their short form (without being coupled to a year), |
2933 |
14 Nov 14 |
olle |
// since days in different years may lie in the same week, and days at the start of |
2933 |
14 Nov 14 |
olle |
// a year may have week number 52 or 53 of the previous year and days at the end of |
2933 |
14 Nov 14 |
olle |
// a year may have week number 01 of the next year. |
2933 |
14 Nov 14 |
olle |
// Example: Monday 2012-01-02 has week number 2012-01, Monday 2012-12-31 has week number 2013-01 |
2933 |
14 Nov 14 |
olle |
// If current date is before site start date - 6 days, it is in a previous week |
2933 |
14 Nov 14 |
olle |
// If current date is within site start date +/- 6 days and not in the same week, check dates |
2933 |
14 Nov 14 |
olle |
// (just checking week numbers in the last case leads to e.g. 2012-12-30 (w52) > 2012-12-31 (w01)) |
2933 |
14 Nov 14 |
olle |
1327 |
// |
2933 |
14 Nov 14 |
olle |
if (currentDate.getTime() < siteStartDate.getTime() - 6*24*3600*1000 || |
2933 |
14 Nov 14 |
olle |
currentDate.getTime() < siteStartDate.getTime() + 6*24*3600*1000 && |
2933 |
14 Nov 14 |
olle |
getISOWeekNumber(currentDate) != getISOWeekNumber(siteStartDate) && |
2933 |
14 Nov 14 |
olle |
currentDate < siteStartDate) |
2933 |
14 Nov 14 |
olle |
1332 |
{ |
2933 |
14 Nov 14 |
olle |
data = ''; |
2933 |
14 Nov 14 |
olle |
1334 |
} |
2933 |
14 Nov 14 |
olle |
currentDate.setDate(currentDate.getDate()+7); |
2933 |
14 Nov 14 |
olle |
1336 |
} |
2933 |
14 Nov 14 |
olle |
1337 |
|
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(data, 'reportdata')); |
2933 |
14 Nov 14 |
olle |
columnCounter++; |
2933 |
14 Nov 14 |
olle |
} while (columnCounter < numCols) |
2933 |
14 Nov 14 |
olle |
// Add column with sample sum for site for the selected time period |
2933 |
14 Nov 14 |
olle |
var siteSum = 0; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
1344 |
{ |
2933 |
14 Nov 14 |
olle |
var sumSiteKey = 'sumSiteKey'; |
2933 |
14 Nov 14 |
olle |
if (siteData[sumSiteKey] != null) |
2933 |
14 Nov 14 |
olle |
1347 |
{ |
2933 |
14 Nov 14 |
olle |
siteSum = siteData[sumSiteKey]; |
2933 |
14 Nov 14 |
olle |
1349 |
} |
2933 |
14 Nov 14 |
olle |
1350 |
} |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteSum, 'rowsummary')); |
2933 |
14 Nov 14 |
olle |
// Add column with total number of samples for site, regardless of creation date |
2933 |
14 Nov 14 |
olle |
var siteTotal = 0; |
2933 |
14 Nov 14 |
olle |
if (siteData != null) |
2933 |
14 Nov 14 |
olle |
1355 |
{ |
2933 |
14 Nov 14 |
olle |
var totalSiteKey = 'totalSiteKey'; |
2933 |
14 Nov 14 |
olle |
if (siteData[totalSiteKey] != null) |
2933 |
14 Nov 14 |
olle |
1358 |
{ |
2933 |
14 Nov 14 |
olle |
siteTotal = siteData[totalSiteKey]; |
2933 |
14 Nov 14 |
olle |
1360 |
} |
2933 |
14 Nov 14 |
olle |
1361 |
} |
2933 |
14 Nov 14 |
olle |
tableRow.appendChild(getTableCellElement(siteTotal, 'rowsummary')); |
2933 |
14 Nov 14 |
olle |
reportTable.appendChild(tableRow); |
2933 |
14 Nov 14 |
olle |
1364 |
} |
2933 |
14 Nov 14 |
olle |
1365 |
} |
2933 |
14 Nov 14 |
olle |
1366 |
|
2933 |
14 Nov 14 |
olle |
function createSortedPeriodArray(report, numberOfColumns) |
2933 |
14 Nov 14 |
olle |
1368 |
{ |
2933 |
14 Nov 14 |
olle |
var psdString = report.periodBeginDate; |
2933 |
14 Nov 14 |
olle |
var periodStartDate = new Date(); |
2933 |
14 Nov 14 |
olle |
periodStartDate.setYear(psdString.substr(0,4)); |
2933 |
14 Nov 14 |
olle |
periodStartDate.setMonth(psdString.substr(4,2)-1); |
2933 |
14 Nov 14 |
olle |
periodStartDate.setDate(psdString.substr(6)); |
2933 |
14 Nov 14 |
olle |
var viewType = report.viewType; |
2933 |
14 Nov 14 |
olle |
var sortedPeriodArray = Array(numberOfColumns); |
2933 |
14 Nov 14 |
olle |
var currentDate = new Date(periodStartDate.getFullYear(), periodStartDate.getMonth(), periodStartDate.getDate()); |
2933 |
14 Nov 14 |
olle |
var columnCounter = 0; |
2933 |
14 Nov 14 |
olle |
do |
2933 |
14 Nov 14 |
olle |
1379 |
{ |
2933 |
14 Nov 14 |
olle |
var keyIndex; |
2933 |
14 Nov 14 |
olle |
var yearIndex = currentDate.getFullYear(); |
2933 |
14 Nov 14 |
olle |
1382 |
|
2933 |
14 Nov 14 |
olle |
if (viewType == 'YEAR') |
2933 |
14 Nov 14 |
olle |
1384 |
{ |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex; |
2933 |
14 Nov 14 |
olle |
currentDate.setFullYear(currentDate.getFullYear()+1); |
2933 |
14 Nov 14 |
olle |
1387 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'QUARTER') |
2933 |
14 Nov 14 |
olle |
1389 |
{ |
2933 |
14 Nov 14 |
olle |
var qIndex = Math.floor(currentDate.getMonth()/3) + 1; |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + '' + qIndex; |
2933 |
14 Nov 14 |
olle |
currentDate.setMonth(currentDate.getMonth()+3); |
2933 |
14 Nov 14 |
olle |
1393 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'MONTH') |
2933 |
14 Nov 14 |
olle |
1395 |
{ |
2933 |
14 Nov 14 |
olle |
var monthIndex = currentDate.getMonth()+1; |
2933 |
14 Nov 14 |
olle |
var rowFill = monthIndex < 10 ? '0' : ''; |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + rowFill + monthIndex; |
2933 |
14 Nov 14 |
olle |
currentDate.setMonth(currentDate.getMonth()+1); |
2933 |
14 Nov 14 |
olle |
1400 |
} |
2933 |
14 Nov 14 |
olle |
else if (viewType == 'WEEK') |
2933 |
14 Nov 14 |
olle |
1402 |
{ |
2933 |
14 Nov 14 |
olle |
var weekIndex = getISOWeekNumber(currentDate); |
2933 |
14 Nov 14 |
olle |
// Week number in year stored as yyyyww with leading 0 if needed |
2933 |
14 Nov 14 |
olle |
if (weekIndex < 10) |
2933 |
14 Nov 14 |
olle |
1406 |
{ |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + '0' + weekIndex; |
2933 |
14 Nov 14 |
olle |
1408 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1410 |
{ |
2933 |
14 Nov 14 |
olle |
keyIndex = yearIndex + '' + weekIndex; |
2933 |
14 Nov 14 |
olle |
1412 |
} |
2933 |
14 Nov 14 |
olle |
currentDate.setDate(currentDate.getDate()+7); |
2933 |
14 Nov 14 |
olle |
1414 |
} |
2933 |
14 Nov 14 |
olle |
sortedPeriodArray[columnCounter] = keyIndex; |
2933 |
14 Nov 14 |
olle |
columnCounter++; |
2933 |
14 Nov 14 |
olle |
} while (columnCounter < numberOfColumns) |
2933 |
14 Nov 14 |
olle |
return sortedPeriodArray; |
2933 |
14 Nov 14 |
olle |
1419 |
} |
2933 |
14 Nov 14 |
olle |
1420 |
|
2933 |
14 Nov 14 |
olle |
function getReportTable() |
2933 |
14 Nov 14 |
olle |
1422 |
{ |
2933 |
14 Nov 14 |
olle |
var reportTable = document.createElement('table'); |
2933 |
14 Nov 14 |
olle |
reportTable.setAttribute('class','reporttable'); |
2933 |
14 Nov 14 |
olle |
reportTable.setAttribute('border','1'); |
2933 |
14 Nov 14 |
olle |
return reportTable; |
2933 |
14 Nov 14 |
olle |
1427 |
} |
2933 |
14 Nov 14 |
olle |
1428 |
|
2933 |
14 Nov 14 |
olle |
function getTableCellElement(text, clazz, colspan, rowspan) |
2933 |
14 Nov 14 |
olle |
1430 |
{ |
2933 |
14 Nov 14 |
olle |
var cellElement = document.createElement('td'); |
2933 |
14 Nov 14 |
olle |
text = new String(text); |
2933 |
14 Nov 14 |
olle |
var textArray = text.split("\n"); |
2933 |
14 Nov 14 |
olle |
if (textArray.length > 1) |
2933 |
14 Nov 14 |
olle |
1435 |
{ |
2933 |
14 Nov 14 |
olle |
for (var i=0;i<textArray.length;i++) |
2933 |
14 Nov 14 |
olle |
1437 |
{ |
2933 |
14 Nov 14 |
olle |
if (i>0)cellElement.appendChild(document.createElement('br')); |
2933 |
14 Nov 14 |
olle |
cellElement.appendChild(document.createTextNode(textArray[i])); |
2933 |
14 Nov 14 |
olle |
1440 |
} |
2933 |
14 Nov 14 |
olle |
1441 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1443 |
{ |
2933 |
14 Nov 14 |
olle |
cellElement.appendChild(document.createTextNode(text)); |
2933 |
14 Nov 14 |
olle |
1445 |
} |
2933 |
14 Nov 14 |
olle |
cellElement.setAttribute('class', clazz); |
2933 |
14 Nov 14 |
olle |
if (colspan != null) cellElement.setAttribute('colspan', colspan); |
2933 |
14 Nov 14 |
olle |
if (rowspan != null) cellElement.setAttribute('rowspan', rowspan); |
2933 |
14 Nov 14 |
olle |
1449 |
|
2933 |
14 Nov 14 |
olle |
return cellElement; |
2933 |
14 Nov 14 |
olle |
1451 |
} |
2933 |
14 Nov 14 |
olle |
1452 |
|
2933 |
14 Nov 14 |
olle |
function getListElement(itemText) |
2933 |
14 Nov 14 |
olle |
1454 |
{ |
2933 |
14 Nov 14 |
olle |
var listElement = document.createElement('li'); |
2933 |
14 Nov 14 |
olle |
var textNode = document.createTextNode(itemText); |
2933 |
14 Nov 14 |
olle |
listElement.appendChild(textNode); |
2933 |
14 Nov 14 |
olle |
return listElement; |
2933 |
14 Nov 14 |
olle |
1459 |
} |
2933 |
14 Nov 14 |
olle |
1460 |
|
2933 |
14 Nov 14 |
olle |
1461 |
/** |
2933 |
14 Nov 14 |
olle |
* addHyphensToDateStr() |
2933 |
14 Nov 14 |
olle |
1463 |
* |
2933 |
14 Nov 14 |
olle |
* Adds hyphens to date string in yyyymmdd format to |
2933 |
14 Nov 14 |
olle |
* get yyyy-mm-dd format. If input string already contains |
2933 |
14 Nov 14 |
olle |
* hyphen(s), the input string is returned unchanged. |
2933 |
14 Nov 14 |
olle |
* If input string is null or empty, '????-??-??' is returned. |
2933 |
14 Nov 14 |
olle |
1468 |
* |
2933 |
14 Nov 14 |
olle |
* @param dateStr String Input date string in yyyy-mm-dd or yyyymmdd format. |
2933 |
14 Nov 14 |
olle |
* @return String Date string in yyyy-mm-dd format. |
2933 |
14 Nov 14 |
olle |
1471 |
*/ |
2933 |
14 Nov 14 |
olle |
function addHyphensToDateString(dateStr) |
2933 |
14 Nov 14 |
olle |
1473 |
{ |
2933 |
14 Nov 14 |
olle |
var dateWithHyphensStr = '????-??-??'; |
2933 |
14 Nov 14 |
olle |
if (dateStr != null && dateStr != '') |
2933 |
14 Nov 14 |
olle |
1476 |
{ |
2933 |
14 Nov 14 |
olle |
// Check if input string already contains hyphen |
2933 |
14 Nov 14 |
olle |
if (dateStr.indexOf("-") >= 0) |
2933 |
14 Nov 14 |
olle |
1479 |
{ |
2933 |
14 Nov 14 |
olle |
// Date already has hyphen(s) |
2933 |
14 Nov 14 |
olle |
dateWithHyphensStr = dateStr; |
2933 |
14 Nov 14 |
olle |
1482 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1484 |
{ |
2933 |
14 Nov 14 |
olle |
// Date in yyyymmdd format |
2933 |
14 Nov 14 |
olle |
var yearStr = dateStr.substr(0,4); |
2933 |
14 Nov 14 |
olle |
var monthStr = dateStr.substr(4,2); |
2933 |
14 Nov 14 |
olle |
var dayStr = dateStr.substr(6,2); |
2933 |
14 Nov 14 |
olle |
dateWithHyphensStr = yearStr + '-' + monthStr + '-' + dayStr; |
2933 |
14 Nov 14 |
olle |
1490 |
} |
2933 |
14 Nov 14 |
olle |
1491 |
} |
2933 |
14 Nov 14 |
olle |
return dateWithHyphensStr; |
2933 |
14 Nov 14 |
olle |
1493 |
} |
2933 |
14 Nov 14 |
olle |
1494 |
|
2933 |
14 Nov 14 |
olle |
1495 |
/** |
2933 |
14 Nov 14 |
olle |
* dateStrToDate() |
2933 |
14 Nov 14 |
olle |
1497 |
* |
2933 |
14 Nov 14 |
olle |
* Takes an input date string in yyyy-mm-dd or yyyymmdd format |
2933 |
14 Nov 14 |
olle |
* and returns a date corresponding to the date string. |
2933 |
14 Nov 14 |
olle |
* If input string is null or empty, null is returned. |
2933 |
14 Nov 14 |
olle |
1501 |
* |
2933 |
14 Nov 14 |
olle |
* @param dateStr String Input date string in yyyy-mm-dd or yyyymmdd format. |
2933 |
14 Nov 14 |
olle |
* @return Date Date corresponding to input date string. |
2933 |
14 Nov 14 |
olle |
1504 |
*/ |
2933 |
14 Nov 14 |
olle |
function dateStrToDate(dateStr) |
2933 |
14 Nov 14 |
olle |
1506 |
{ |
2933 |
14 Nov 14 |
olle |
var date = null; |
2933 |
14 Nov 14 |
olle |
if (dateStr != null && dateStr != '') |
2933 |
14 Nov 14 |
olle |
1509 |
{ |
2933 |
14 Nov 14 |
olle |
// Check if input string already contains hyphen |
2933 |
14 Nov 14 |
olle |
if (dateStr.indexOf("-") >= 0) |
2933 |
14 Nov 14 |
olle |
1512 |
{ |
2933 |
14 Nov 14 |
olle |
// Date in yyyy-mm-dd format |
2933 |
14 Nov 14 |
olle |
var yearStr = dateStr.substr(0,4); |
2933 |
14 Nov 14 |
olle |
var monthStr = dateStr.substr(5,2); |
2933 |
14 Nov 14 |
olle |
var dayStr = dateStr.substr(8,2); |
2933 |
14 Nov 14 |
olle |
var date = new Date(parseInt(yearStr, 10), parseInt(monthStr, 10)-1, parseInt(dayStr, 10)); |
2933 |
14 Nov 14 |
olle |
1518 |
} |
2933 |
14 Nov 14 |
olle |
else |
2933 |
14 Nov 14 |
olle |
1520 |
{ |
2933 |
14 Nov 14 |
olle |
// Date in yyyymmdd format |
2933 |
14 Nov 14 |
olle |
var yearStr = dateStr.substr(0,4); |
2933 |
14 Nov 14 |
olle |
var monthStr = dateStr.substr(4,2); |
2933 |
14 Nov 14 |
olle |
var dayStr = dateStr.substr(6,2); |
2933 |
14 Nov 14 |
olle |
var date = new Date(parseInt(yearStr, 10), parseInt(monthStr, 10)-1, parseInt(dayStr, 10)); |
2933 |
14 Nov 14 |
olle |
1526 |
} |
2933 |
14 Nov 14 |
olle |
1527 |
} |
2933 |
14 Nov 14 |
olle |
return date; |
2933 |
14 Nov 14 |
olle |
1529 |
} |
2933 |
14 Nov 14 |
olle |
1530 |
|
2933 |
14 Nov 14 |
olle |
1531 |
/* |
2933 |
14 Nov 14 |
olle |
* Get the ISO week number for a given date |
2933 |
14 Nov 14 |
olle |
1533 |
* |
2933 |
14 Nov 14 |
olle |
* Based on code at http://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php |
2933 |
14 Nov 14 |
olle |
1535 |
* |
2933 |
14 Nov 14 |
olle |
* @param date String Input date to get ISO week number for. |
2933 |
14 Nov 14 |
olle |
* @return int ISO week number for input date. |
2933 |
14 Nov 14 |
olle |
1538 |
*/ |
2933 |
14 Nov 14 |
olle |
function getISOWeekNumber(date) |
2933 |
14 Nov 14 |
olle |
1540 |
{ |
2933 |
14 Nov 14 |
olle |
tmpDate = new Date(date); |
2933 |
14 Nov 14 |
olle |
tmpDate.setHours(0,0,0); |
2933 |
14 Nov 14 |
olle |
// Set to nearest Thursday: current date + 4 - current day number |
2933 |
14 Nov 14 |
olle |
// Make Sunday day number 7 |
2933 |
14 Nov 14 |
olle |
tmpDate.setDate(tmpDate.getDate() + 4 - (tmpDate.getDay() || 7)); |
2933 |
14 Nov 14 |
olle |
// Get first day of year |
2933 |
14 Nov 14 |
olle |
var yearStart = new Date(tmpDate.getFullYear(), 0, 1); |
2933 |
14 Nov 14 |
olle |
// Calculate full weeks to nearast Thursday (86400000 = 24*60*60*1000 number of ms in a day) |
2933 |
14 Nov 14 |
olle |
var weekNo = Math.ceil(( ( (tmpDate - yearStart) / 86400000) + 1)/7); |
2933 |
14 Nov 14 |
olle |
return weekNo; |
2933 |
14 Nov 14 |
olle |
1551 |
} |
2933 |
14 Nov 14 |
olle |
1552 |
|
2933 |
14 Nov 14 |
olle |
1553 |
|
2933 |
14 Nov 14 |
olle |
function getProjectFocusFilterDisplayText(projectFocusFilter) |
2933 |
14 Nov 14 |
olle |
1555 |
{ |
2933 |
14 Nov 14 |
olle |
var projectFocusFilterDisplayText = projectFocusFilter; |
2933 |
14 Nov 14 |
olle |
if (projectFocusFilter == 'melanoma') |
2933 |
14 Nov 14 |
olle |
1558 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = 'Melanoma'; |
2933 |
14 Nov 14 |
olle |
1560 |
} |
2933 |
14 Nov 14 |
olle |
else if (projectFocusFilter == 'lungcancer') |
2933 |
14 Nov 14 |
olle |
1562 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = 'Lung cancer'; |
2933 |
14 Nov 14 |
olle |
1564 |
} |
3058 |
19 Dec 14 |
olle |
else if (projectFocusFilter == 'coloncancer') |
3058 |
19 Dec 14 |
olle |
1566 |
{ |
3058 |
19 Dec 14 |
olle |
projectFocusFilterDisplayText = 'Colon cancer'; |
3058 |
19 Dec 14 |
olle |
1568 |
} |
3139 |
16 Feb 15 |
olle |
else if (projectFocusFilter == 'GIST') |
3139 |
16 Feb 15 |
olle |
1570 |
{ |
3139 |
16 Feb 15 |
olle |
projectFocusFilterDisplayText = 'GIST (Gastrointestinal stromal tumour)'; |
3139 |
16 Feb 15 |
olle |
1572 |
} |
4196 |
31 Oct 16 |
olle |
else if (projectFocusFilter == 'breastcancer') |
4196 |
31 Oct 16 |
olle |
1574 |
{ |
4196 |
31 Oct 16 |
olle |
projectFocusFilterDisplayText = 'Breast cancer'; |
4196 |
31 Oct 16 |
olle |
1576 |
} |
2933 |
14 Nov 14 |
olle |
else if (projectFocusFilter == '') |
2933 |
14 Nov 14 |
olle |
1578 |
{ |
2933 |
14 Nov 14 |
olle |
projectFocusFilterDisplayText = 'unknown'; |
2933 |
14 Nov 14 |
olle |
1580 |
} |
2933 |
14 Nov 14 |
olle |
return projectFocusFilterDisplayText; |
2933 |
14 Nov 14 |
olle |
1582 |
} |