Mercurial > hg > orthanc
comparison OrthancExplorer/query-retrieve.js @ 1371:f528849ee9f7 query-retrieve
DICOM Query/Retrieve available from Orthanc Explorer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 27 May 2015 17:33:13 +0200 |
parents | |
children | 21a2929e541d |
comparison
equal
deleted
inserted
replaced
1370:7b6f5115607f | 1371:f528849ee9f7 |
---|---|
1 function JavascriptDateToDicom(date) | |
2 { | |
3 var s = date.toISOString(); | |
4 return s.substring(0, 4) + s.substring(5, 7) + s.substring(8, 10); | |
5 } | |
6 | |
7 function GenerateDicomDate(days) | |
8 { | |
9 var today = new Date(); | |
10 var other = new Date(today); | |
11 other.setDate(today.getDate() + days); | |
12 return JavascriptDateToDicom(other); | |
13 } | |
14 | |
15 | |
16 $('#query-retrieve').live('pagebeforeshow', function() { | |
17 $.ajax({ | |
18 url: '../modalities', | |
19 dataType: 'json', | |
20 async: false, | |
21 cache: false, | |
22 success: function(modalities) { | |
23 var target = $('#qr-server'); | |
24 $('option', target).remove(); | |
25 | |
26 for (var i = 0; i < modalities.length; i++) { | |
27 var option = $('<option>').text(modalities[i]); | |
28 target.append(option); | |
29 } | |
30 | |
31 target.selectmenu('refresh'); | |
32 } | |
33 }); | |
34 | |
35 var target = $('#qr-date'); | |
36 $('option', target).remove(); | |
37 target.append($('<option>').attr('value', '*').text('Any date')); | |
38 target.append($('<option>').attr('value', GenerateDicomDate(0)).text('Today')); | |
39 target.append($('<option>').attr('value', GenerateDicomDate(-1)).text('Yesterday')); | |
40 target.append($('<option>').attr('value', GenerateDicomDate(-7) + '-').text('Last 7 days')); | |
41 target.append($('<option>').attr('value', GenerateDicomDate(-31) + '-').text('Last 31 days')); | |
42 target.append($('<option>').attr('value', GenerateDicomDate(-31 * 3) + '-').text('Last 3 months')); | |
43 target.append($('<option>').attr('value', GenerateDicomDate(-365) + '-').text('Last year')); | |
44 target.selectmenu('refresh'); | |
45 }); | |
46 | |
47 | |
48 $('#qr-submit').live('click', function() { | |
49 var query = { | |
50 'Level' : 'Study', | |
51 'Query' : { | |
52 'AccessionNumber' : '*', | |
53 'PatientBirthDate' : '*', | |
54 'PatientID' : '*', | |
55 'PatientName' : '*', | |
56 'PatientSex' : '*', | |
57 'SpecificCharacterSet' : 'ISO_IR 192', // UTF-8 | |
58 'StudyDate' : $('#qr-date').val(), | |
59 'StudyDescription' : '*' | |
60 } | |
61 }; | |
62 | |
63 var field = $('#qr-fields input:checked').val(); | |
64 query['Query'][field] = $('#qr-value').val().toUpperCase(); | |
65 | |
66 var modalities = ''; | |
67 $('#qr-modalities input:checked').each(function() { | |
68 var s = $(this).attr('name'); | |
69 if (modalities == '*') | |
70 modalities = s; | |
71 else | |
72 modalities += '\\' + s; | |
73 }); | |
74 | |
75 if (modalities.length > 0) { | |
76 query['Query']['ModalitiesInStudy'] = modalities; | |
77 } | |
78 | |
79 | |
80 var server = $('#qr-server').val(); | |
81 $.ajax({ | |
82 url: '../modalities/' + server + '/query', | |
83 type: 'POST', | |
84 data: JSON.stringify(query), | |
85 dataType: 'json', | |
86 async: false, | |
87 error: function() { | |
88 alert('Error during query (C-Find)'); | |
89 }, | |
90 success: function(result) { | |
91 window.location.assign('explorer.html#query-retrieve-2?server=' + server + '&uuid=' + result['ID']); | |
92 } | |
93 }); | |
94 | |
95 return false; | |
96 }); | |
97 | |
98 | |
99 | |
100 function Retrieve(url) | |
101 { | |
102 $.ajax({ | |
103 url: '../system', | |
104 dataType: 'json', | |
105 async: false, | |
106 success: function(system) { | |
107 $('<div>').simpledialog2({ | |
108 mode: 'button', | |
109 headerText: 'Retrieve destination', | |
110 headerClose: true, | |
111 buttonPrompt: 'Enter Application Entity Title (AET):', | |
112 buttonInput: true, | |
113 buttonInputDefault: system['DicomAet'], | |
114 buttons : { | |
115 'OK': { | |
116 click: function () { | |
117 var aet = $.mobile.sdLastInput; | |
118 if (aet.length == 0) | |
119 aet = system['DicomAet']; | |
120 | |
121 $.ajax({ | |
122 url: url, | |
123 type: 'POST', | |
124 async: true, // Necessary to block UI | |
125 dataType: 'text', | |
126 data: aet, | |
127 beforeSend: function() { | |
128 $.blockUI({ message: $('#info-retrieve') }); | |
129 }, | |
130 complete: function(s) { | |
131 $.unblockUI(); | |
132 }, | |
133 error: function() { | |
134 alert('Error during retrieve'); | |
135 } | |
136 }); | |
137 } | |
138 } | |
139 } | |
140 }); | |
141 } | |
142 }); | |
143 } | |
144 | |
145 | |
146 | |
147 | |
148 $('#query-retrieve-2').live('pagebeforeshow', function() { | |
149 if ($.mobile.pageData) { | |
150 var uri = '../queries/' + $.mobile.pageData.uuid + '/answers'; | |
151 | |
152 $.ajax({ | |
153 url: uri, | |
154 dataType: 'json', | |
155 async: false, | |
156 success: function(answers) { | |
157 var target = $('#query-retrieve-2 ul'); | |
158 $('li', target).remove(); | |
159 | |
160 for (var i = 0; i < answers.length; i++) { | |
161 $.ajax({ | |
162 url: uri + '/' + answers[i] + '/content?simplify', | |
163 dataType: 'json', | |
164 async: false, | |
165 success: function(study) { | |
166 var series = '#query-retrieve-3?server=' + $.mobile.pageData.server + '&uuid=' + study['StudyInstanceUID']; | |
167 var info = $('<a>').attr('href', series).html( | |
168 ('<h3>{0} - {1}</h3>' + | |
169 '<p>Accession number: <b>{2}</b></p>' + | |
170 '<p>Birth date: <b>{3}</b></p>' + | |
171 '<p>Patient sex: <b>{4}</b></p>' + | |
172 '<p>Study description: <b>{5}</b></p>' + | |
173 '<p>Study date: <b>{6}</b></p>').format( | |
174 study['PatientID'], | |
175 study['PatientName'], | |
176 study['AccessionNumber'], | |
177 FormatDicomDate(study['PatientBirthDate']), | |
178 study['PatientSex'], | |
179 study['StudyDescription'], | |
180 FormatDicomDate(study['StudyDate']))); | |
181 | |
182 var studyUri = uri + '/' + answers[i] + '/retrieve'; | |
183 var retrieve = $('<a>').text('Retrieve').click(function() { | |
184 Retrieve(studyUri); | |
185 }); | |
186 | |
187 target.append($('<li>').append(info).append(retrieve)); | |
188 } | |
189 }); | |
190 } | |
191 | |
192 target.listview('refresh'); | |
193 } | |
194 }); | |
195 } | |
196 }); | |
197 | |
198 | |
199 $('#query-retrieve-3').live('pagebeforeshow', function() { | |
200 if ($.mobile.pageData) { | |
201 var query = { | |
202 'Level' : 'Series', | |
203 'Query' : { | |
204 'Modality' : '*', | |
205 'ProtocolName' : '*', | |
206 'SeriesDescription' : '*', | |
207 'SeriesInstanceUID' : '*', | |
208 'StudyInstanceUID' : $.mobile.pageData.uuid | |
209 } | |
210 }; | |
211 | |
212 $.ajax({ | |
213 url: '../modalities/' + $.mobile.pageData.server + '/query', | |
214 type: 'POST', | |
215 data: JSON.stringify(query), | |
216 dataType: 'json', | |
217 async: false, | |
218 error: function() { | |
219 alert('Error during query (C-Find)'); | |
220 }, | |
221 success: function(answer) { | |
222 var uri = '../queries/' + answer['ID'] + '/answers'; | |
223 | |
224 $.ajax({ | |
225 url: uri, | |
226 dataType: 'json', | |
227 async: false, | |
228 success: function(answers) { | |
229 | |
230 var target = $('#query-retrieve-3 ul'); | |
231 $('li', target).remove(); | |
232 | |
233 for (var i = 0; i < answers.length; i++) { | |
234 $.ajax({ | |
235 url: uri + '/' + answers[i] + '/content?simplify', | |
236 dataType: 'json', | |
237 async: false, | |
238 success: function(series) { | |
239 var info = $('<a>').html( | |
240 ('<h3>{0}</h3>' + | |
241 '<p>Modality: <b>{1}</b></p>' + | |
242 '<p>Protocol name: <b>{2}</b></p>' | |
243 ).format( | |
244 series['SeriesDescription'], | |
245 series['Modality'], | |
246 series['ProtocolName'] | |
247 )); | |
248 | |
249 var seriesUri = uri + '/' + answers[i] + '/retrieve'; | |
250 var retrieve = $('<a>').text('Retrieve').click(function() { | |
251 Retrieve(seriesUri); | |
252 }); | |
253 | |
254 target.append($('<li>').append(info).append(retrieve)); | |
255 } | |
256 }); | |
257 } | |
258 | |
259 target.listview('refresh'); | |
260 } | |
261 }); | |
262 } | |
263 }); | |
264 } | |
265 }); |