medivo 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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'
|