medivo 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/medivo/lab_appointment/handlers.coffee +12 -6
- data/app/assets/javascripts/medivo/lab_list/handlers.coffee +6 -1
- data/app/controllers/medivo/labs_controller.rb +1 -1
- data/app/models/medivo/order.rb +14 -1
- data/lib/medivo/version.rb +1 -1
- data/lib/medivo.rb +6 -1
- data/lib/{medivo → pdf/medivo}/fdf_generator.rb +0 -0
- data/lib/pdf/medivo/pdf_generator.rb +18 -0
- data/lib/pdf/medivo/pdf_group.rb +42 -0
- data/lib/{medivo → support}/validators.rb +0 -0
- data/spec/dummy/app/views/labs/search.html.haml +8 -8
- data/spec/dummy/log/development.log +1080 -0
- data/spec/dummy/tmp/cache/assets/C46/F00/sprockets%2F2281d588b540056c5a7306c32a3761b9 +0 -0
- data/spec/dummy/tmp/cache/assets/CB4/BD0/sprockets%2F3378f27c0d4f5e6d708665b22707a31f +0 -0
- data/spec/dummy/tmp/cache/assets/CD8/DA0/sprockets%2F622aa5281d15503829a5f7a0bf56fc29 +0 -0
- data/spec/dummy/tmp/cache/assets/D20/F10/sprockets%2Fb2e907e4faa85fe755f4439e3b229088 +0 -0
- data/spec/dummy/tmp/cache/assets/D29/000/sprockets%2F61a10ddf57f1129c02a1049bfed6e007 +0 -0
- data/spec/dummy/tmp/cache/assets/D41/250/sprockets%2F7b3c4426715dcd1feedc4a95e5444256 +0 -0
- data/spec/dummy/tmp/cache/assets/D4C/7A0/sprockets%2Fbc635c7b186d1ef5178f4ed3722d868b +0 -0
- data/spec/dummy/tmp/cache/assets/D5D/3E0/sprockets%2F63fea6cc142b5f02da93bf81e70b2116 +0 -0
- data/spec/dummy/tmp/cache/assets/D60/030/sprockets%2Ffc9485f617fc5e9b8918755d2e08ecc6 +0 -0
- data/spec/dummy/tmp/cache/assets/D69/130/sprockets%2Fbaa4ec50a34ce938c986612c2a47a64e +0 -0
- data/spec/dummy/tmp/cache/assets/D74/9A0/sprockets%2F0ca4e6e833c72156fc7e7d5f007d9ce3 +0 -0
- data/spec/dummy/tmp/cache/assets/D76/720/sprockets%2F88d8aa1d2fb41ce79b8ec4150ea74748 +0 -0
- data/spec/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
- data/spec/dummy/tmp/cache/assets/DCE/E80/sprockets%2Fc71ec62157b9cc7aabfc030955cef87b +0 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/pids/server.pid +1 -0
- data/spec/fixtures/lc_order_with_normal_results.xml +98 -0
- data/spec/fixtures/{lc_positive_results.xml → lc_order_with_positive_results.xml} +0 -0
- data/spec/fixtures/{order_with_requisition.xml → lc_order_with_requisition.xml} +0 -0
- data/spec/fixtures/negative_results.pdf +0 -0
- data/spec/lib/fdf_generator_spec.rb +22 -0
- data/spec/lib/pdf_generator_spec.rb +12 -0
- data/spec/lib/pdf_group_spec.rb +42 -0
- data/spec/models/orders_spec.rb +46 -28
- data/spec/spec_helper.rb +3 -0
- metadata +54 -29
@@ -6,23 +6,28 @@ $(document).ready ->
|
|
6
6
|
###### handle ajax appointment data search ########
|
7
7
|
$("form#appointment_data_search")
|
8
8
|
.bind('ajax:beforeSend', (event, data)->
|
9
|
+
form = $(this)
|
9
10
|
messages = []
|
10
|
-
date =
|
11
|
+
date = form.find('input#appointment_date').val()
|
11
12
|
valid_date = Date.parseExact(date, "M/d/yyyy")
|
12
13
|
messages.push("Date is invalid, must be mm/dd/yyyy format") unless valid_date
|
13
|
-
|
14
|
+
# find the selected lab from the lab list and get the lab code
|
15
|
+
selected_lab = $('#lab_list_container input:radio:checked')
|
16
|
+
lab_code = $('#lab_list_container input:radio:checked').parent('li').find('form > input#lab_code').val()
|
17
|
+
# set the value in this forms lab_code input field
|
18
|
+
form.find('input#lab_code').val(lab_code)
|
14
19
|
messages.push("Labcode is missing") unless lab_code
|
15
20
|
if (messages.length > 0)
|
16
21
|
span = $("<span>#{messages.join("<br>")}</span>")
|
17
|
-
|
22
|
+
form.find('.error_message').append(span)
|
18
23
|
span.fadeOut(4000)
|
19
24
|
false
|
20
|
-
|
21
25
|
)
|
22
26
|
.bind('ajax:success', (event, data)->
|
23
27
|
window.appointment_list.setList(data.times)
|
24
|
-
# set the first as selected
|
28
|
+
# set the first appointment time as selected
|
25
29
|
$('input:radio[name=appointment_time]:first').prop('checked',true)
|
30
|
+
# re enable searching for appointment times
|
26
31
|
$('form#appointment_data_search input[type=submit]').prop("disabled", false)
|
27
32
|
)
|
28
33
|
.bind('ajax:complete', (event, data)->
|
@@ -32,6 +37,7 @@ $(document).ready ->
|
|
32
37
|
###### handle toggle to show more appointments ########
|
33
38
|
$("#more_appointments_list_toggler").live("click", ->
|
34
39
|
window.appointment_list.setShowNumber(window.max_appointment_show_number)
|
35
|
-
$(
|
40
|
+
$('input:radio[name=appointment_time]:first').prop('checked',true)
|
41
|
+
$("#more_appointments_list_toggler").hide()
|
36
42
|
)
|
37
43
|
|
@@ -13,6 +13,8 @@ $(document).ready ->
|
|
13
13
|
.bind('ajax:success', (event, data)->
|
14
14
|
window.map_view.center_point = data.zip_location
|
15
15
|
window.lab_list.setList(data.labs)
|
16
|
+
# set the first lab as selected
|
17
|
+
$('input:radio[name=selected_lab]:first').prop('checked',true)
|
16
18
|
$('form#lab_data_search input[type=submit]').prop("disabled", false)
|
17
19
|
)
|
18
20
|
.bind('ajax:complete', (event, data)->
|
@@ -21,5 +23,8 @@ $(document).ready ->
|
|
21
23
|
###### handle toggle to show more labs ########
|
22
24
|
$("#more_labs_list_toggler").live("click", ->
|
23
25
|
window.lab_list.setShowNumber(window.max_lab_show_number)
|
24
|
-
|
26
|
+
# set the first lab as selected
|
27
|
+
$('input:radio[name=selected_lab]:first').prop('checked',true)
|
28
|
+
# hide the toggle to show more after they have been shown
|
29
|
+
$("#more_labs_list_toggler").hide()
|
25
30
|
)
|
@@ -9,7 +9,7 @@ module Medivo
|
|
9
9
|
data = if Rails.env.development?
|
10
10
|
"{\"times\":[\"11/03/2011|08:30 AM\",\"11/04/2011|08:30 AM\",\"11/02/2011|09:00 AM\",\"11/01/2011|09:30 AM\",\"11/02/2011|09:30 AM\",\"11/03/2011|09:30 AM\",\"11/04/2011|09:30 AM\",\"10/31/2011|10:00 AM\",\"11/01/2011|10:00 AM\",\"11/02/2011|10:00 AM\",\"11/03/2011|10:00 AM\",\"11/04/2011|10:00 AM\",\"11/05/2011|10:00 AM\",\"10/31/2011|10:30 AM\",\"11/01/2011|10:30 AM\",\"11/02/2011|10:30 AM\",\"11/03/2011|10:30 AM\",\"10/31/2011|11:00 AM\",\"11/01/2011|11:00 AM\",\"11/02/2011|11:00 AM\",\"11/03/2011|11:00 AM\",\"11/04/2011|11:00 AM\",\"11/05/2011|11:00 AM\",\"10/31/2011|01:30 PM\",\"11/01/2011|01:30 PM\",\"11/02/2011|01:30 PM\",\"11/03/2011|01:30 PM\",\"11/04/2011|01:30 PM\",\"10/31/2011|02:00 PM\",\"11/01/2011|02:00 PM\",\"11/02/2011|02:00 PM\",\"11/03/2011|02:00 PM\",\"10/31/2011|02:30 PM\",\"11/01/2011|02:30 PM\",\"11/02/2011|02:30 PM\",\"11/03/2011|02:30 PM\",\"11/04/2011|02:30 PM\",\"10/31/2011|03:00 PM\",\"11/01/2011|03:00 PM\",\"11/02/2011|03:00 PM\",\"11/03/2011|03:00 PM\",\"11/04/2011|03:00 PM\",\"10/31/2011|03:30 PM\",\"11/01/2011|03:30 PM\",\"11/02/2011|03:30 PM\",\"11/03/2011|03:30 PM\",\"11/04/2011|03:30 PM\",\"10/31/2011|04:00 PM\",\"11/01/2011|04:00 PM\",\"11/02/2011|04:00 PM\",\"11/03/2011|04:00 PM\",\"11/04/2011|04:00 PM\"]}"
|
11
11
|
else
|
12
|
-
Medivo::Appointment.find(params[:lab_code], params[:
|
12
|
+
Medivo::Appointment.find(params[:lab_code], params[:appointment_date])
|
13
13
|
end
|
14
14
|
render :json=> data, :layout => nil
|
15
15
|
end
|
data/app/models/medivo/order.rb
CHANGED
@@ -61,10 +61,15 @@ module Medivo
|
|
61
61
|
end
|
62
62
|
|
63
63
|
# gets the lab requisition pdf
|
64
|
-
def
|
64
|
+
def pdf_requisition
|
65
65
|
Base64::decode64(try(:sameday_requisition))
|
66
66
|
end
|
67
67
|
|
68
|
+
# get a lab requisition pdf from requisition id
|
69
|
+
def self.pdf_requisition(requsition_id)
|
70
|
+
find_with_requisition(requsition_id).pdf_requisition
|
71
|
+
end
|
72
|
+
|
68
73
|
# loads the results with order
|
69
74
|
def self.find_with_results(requsition_id)
|
70
75
|
find(requsition_id, :params=>{:include=>:reconciled_results})
|
@@ -80,6 +85,14 @@ module Medivo
|
|
80
85
|
try(:reconciled_results).try(:results_summary)
|
81
86
|
end
|
82
87
|
|
88
|
+
def pdf_result
|
89
|
+
Base64::decode64(try(:reconciled_results).try(:results_pdf))
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.pdf_result(requsition_id)
|
93
|
+
find_with_results(requsition_id).pdf_result
|
94
|
+
end
|
95
|
+
|
83
96
|
def simulate_result(lab_prefix, type='normal')
|
84
97
|
raise "Incorrect Result Type" unless %w(normal false_positive positive).include?(type) and %w(qd lc).include?(lab_prefix)
|
85
98
|
body = case type
|
data/lib/medivo/version.rb
CHANGED
data/lib/medivo.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
require "medivo/engine"
|
2
|
-
require "medivo/validators"
|
3
2
|
|
4
3
|
require 'jquery-rails'
|
5
4
|
require 'coffee-script'
|
6
5
|
require 'haml-rails'
|
6
|
+
require 'pdf/toolkit'
|
7
|
+
require 'pdfkit'
|
7
8
|
require 'geocoder'
|
8
9
|
# yahoo has 5,000 a day limit, google is 2,500
|
9
10
|
Geocoder::Configuration.lookup = :yahoo
|
11
|
+
|
12
|
+
ENGINE_PATH = File.expand_path('../..', __FILE__) unless defined? ENGINE_PATH
|
13
|
+
Dir["#{ENGINE_PATH}/lib/pdf/**/*.rb"].each { |f| p f; require f }
|
14
|
+
Dir["#{ENGINE_PATH}/lib/support/**/*.rb"].each { |f| require f }
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Medivo
|
2
|
+
class PdfGenerator
|
3
|
+
|
4
|
+
##
|
5
|
+
# file_path string path to pdf file with variable fields
|
6
|
+
# variables hash the hash of variables to fill in
|
7
|
+
#
|
8
|
+
# return pdf file handler
|
9
|
+
def self.variable_fields(file_path, variables)
|
10
|
+
raise "variables #{variables} should be a hash" unless variables.is_a? Hash
|
11
|
+
pdf = Tempfile.new('pdf', :encoding => 'ascii-8bit')
|
12
|
+
fdf = FdfGenerator.file(variables)
|
13
|
+
system 'pdftk', file_path, 'fill_form', fdf.path, 'output', pdf.path, 'flatten'
|
14
|
+
pdf
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Medivo
|
2
|
+
class PdfGroup
|
3
|
+
def initialize
|
4
|
+
@pdfs = []
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.create(&block)
|
8
|
+
raise "need to pass a block do create" unless block_given?
|
9
|
+
pdf_group = PdfGroup.new
|
10
|
+
yield pdf_group
|
11
|
+
# combine the pdfs
|
12
|
+
pdf_group.pdf
|
13
|
+
end
|
14
|
+
|
15
|
+
def variable_fields(file_path, variables)
|
16
|
+
@pdfs << PdfGenerator.variable_fields(file_path, variables)
|
17
|
+
end
|
18
|
+
|
19
|
+
def lab_requisition(requisition_id)
|
20
|
+
pdf = Tempfile.new('pdf', :encoding => 'ascii-8bit')
|
21
|
+
pdf.write Medivo::Order.pdf_requisition(requisition_id)
|
22
|
+
pdf.close
|
23
|
+
@pdfs << pdf
|
24
|
+
end
|
25
|
+
|
26
|
+
def lab_result(requisition_id)
|
27
|
+
pdf = Tempfile.new('pdf', :encoding => 'ascii-8bit')
|
28
|
+
pdf.write Medivo::Order.pdf_result(requisition_id)
|
29
|
+
pdf.close
|
30
|
+
@pdfs << pdf
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Combines the PDFs
|
35
|
+
def pdf
|
36
|
+
pdf = Tempfile.new('pdf', :encoding => 'ascii-8bit')
|
37
|
+
args = [@pdfs.collect(&:path), 'cat', 'output', pdf.path].flatten
|
38
|
+
system 'pdftk', *args
|
39
|
+
pdf
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
File without changes
|
@@ -1,6 +1,7 @@
|
|
1
1
|
// sample template for rendering lab info
|
2
2
|
%script{:id=>"lab_item_template", :type=>"text/x-handlebars-template"}
|
3
3
|
%li.lab_info
|
4
|
+
= radio_button_tag :selected_lab, "{{data/id}}", 'yes'
|
4
5
|
.lab_image
|
5
6
|
%img{:src=>"{{icon}}", :width=>'12px'}
|
6
7
|
%div
|
@@ -15,7 +16,7 @@
|
|
15
16
|
= form_for :lab, :url=>'/select', :method=>'post' do |f|
|
16
17
|
%input{ :type=>:hidden, :name => 'id', :value=>"{{data/id}}" }
|
17
18
|
%input{ :type=>:hidden, :name => 'lab_id', :value=>"{{data/lab_id}}" }
|
18
|
-
%input{ :type=>:hidden, :name => 'lab_code', :value=>"{{data/code}}" }
|
19
|
+
%input{ :type=>:hidden, :name => 'lab_code', :value=>"{{data/code}}", :id=>'lab_code' }
|
19
20
|
%input{ :type=>:hidden, :name => 'lab_info[name]', :value=>"{{data/lab_name}}" }
|
20
21
|
%input{ :type=>:hidden, :name => 'lab_info[address]', :value=>"{{address_without_comma}}" }
|
21
22
|
%input{ :type=>:hidden, :name => 'lab_info[city]', :value=>"{{titleize data/city}}" }
|
@@ -32,8 +33,7 @@
|
|
32
33
|
#lab_list_container{ 'data-labs'=>@lab_data.to_json }
|
33
34
|
%ul#lab_list
|
34
35
|
|
35
|
-
|
36
|
-
= link_to 'View more locations', '#', :id => 'more_labs_list_toggler'
|
36
|
+
= link_to 'View more locations', '#', :id => 'more_labs_list_toggler', :style => 'padding-left:50px;'
|
37
37
|
|
38
38
|
// form for ajax lab searches ..the code to handle return data is in app/assets/medivo/labs/handle_ajax.coffee
|
39
39
|
= form_tag(medivo.data_labs_path, :method=>:get, :id=>'lab_data_search', :remote=>true) do
|
@@ -48,8 +48,8 @@
|
|
48
48
|
|
49
49
|
// sample template for rendering appointment info
|
50
50
|
%script{:id=>"appointment_item_template", :type=>"text/x-handlebars-template"}
|
51
|
-
%
|
52
|
-
|
51
|
+
%li.appointment_time
|
52
|
+
%input{ :type=>'radio', :name=>"appointment_time", :value=>"{{data}}"} {{formattedDate}}
|
53
53
|
|
54
54
|
Search for appointment times
|
55
55
|
|
@@ -57,8 +57,8 @@ Search for appointment times
|
|
57
57
|
#appointment_list_container
|
58
58
|
%ul#appointment_list
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
// if you want to allow the showing of more appointment times
|
61
|
+
= link_to 'View more times', '#', :id => 'more_appointment_list_toggler', :style => 'display:none;padding-left:50px;'
|
62
62
|
|
63
63
|
// form for ajax appointment searches ..the code to handle return data is in app/assets/medivo/lab_appointments/handlers.coffee
|
64
64
|
= form_tag(medivo.data_appointments_path, :method=>:get, :id=>'appointment_data_search', :remote=>true) do
|
@@ -66,7 +66,7 @@ Search for appointment times
|
|
66
66
|
Enter a Date
|
67
67
|
.error_message
|
68
68
|
|
69
|
-
= text_field_tag :
|
69
|
+
= text_field_tag :appointment_date, (Date.today+3.days).strftime("%m/%d/%Y")
|
70
70
|
= hidden_field_tag :lab_code, '' # you have to fill this in dynamically with a lab_code
|
71
71
|
%p
|
72
72
|
= submit_tag "Search for appointments", :id=> :find_appointments, :class=>'button'
|