2 * knockout.js view model for review of previous fee sheets
4 * Copyright (C) 2013 Kevin Yeh <kevin.y@integralemr.com> and OEMR <www.oemr.org>
6 * LICENSE: This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 3
9 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>;.
18 * @author Kevin Yeh <kevin.y@integralemr.com>
19 * @link http://www.open-emr.org
21 function code_entry(json_source)
23 this.code=ko.observable(json_source.code);
24 this.code_type=ko.observable(json_source.code_type);
25 this.description=ko.observable(json_source.description);
26 this.selected=ko.observable(json_source.selected);
27 this.priority=ko.observable(99999);
28 this.jsonify=function()
31 retval.code=this.code();
32 retval.code_type=this.code_type();
33 retval.description=this.description();
38 return this.code_type()+"|"+ this.code();
43 function procedure(json_source)
45 var retval=new code_entry(json_source);
46 retval.fee=ko.observable(json_source.fee);
47 retval.modifiers=ko.observable(json_source.modifiers);
48 retval.units=ko.observable(json_source.units);
49 retval.mod_size=ko.observable(json_source.mod_size);
50 retval.justify=ko.observableArray();
51 var justify_codes=json_source.justify.split(":");
52 for(var idx=0;idx<justify_codes.length;idx++)
54 var justify_parse=justify_codes[idx].split("|");
55 if(justify_parse.length==2)
58 new_code.code_type=justify_parse[0];
59 new_code.code=justify_parse[1];
60 new_code.descriptions="";
61 new_code.selected=true;
62 var ko_code=new code_entry(new_code)
63 ko_code.priority=idx+1;
64 retval.justify.push(ko_code);
67 retval.genJustify=function()
69 var justify_string="";
70 for(var idx=0;idx<this.justify().length;idx++)
72 var cur_justify=this.justify()[idx];
73 if(cur_justify.selected())
75 justify_string+=cur_justify.code_type() +"|"+cur_justify.code()+":";
78 return justify_string;
81 retval.procedure_choices=ko.observableArray();
82 retval.procedure_choices.push(new fee_sheet_option(retval.code(), retval.code_type(),retval.description(),retval.fee()));
83 for(idx=0;idx<fee_sheet_options.length;idx++)
85 retval.procedure_choices.push(fee_sheet_options[idx]);
87 retval.procedure_choice=ko.observable(retval.procedure_choices[0]);
88 retval.change_procedure=function(data,event)
90 data.description(data.procedure_choice().description);
91 data.code(data.procedure_choice().code);
92 data.code_type(data.procedure_choice().code_type);
93 data.fee(data.procedure_choice().fee);
96 retval.jsonify=function()
99 json_return.code=this.code();
100 json_return.code_type=this.code_type();
101 json_return.description=this.description();
102 json_return.fee=this.fee();
103 json_return.modifiers=this.modifiers();
104 json_return.units=this.units();
105 json_return.justify=this.genJustify();
110 // This function takes json objects for procedures and maps them to the knockoutjs model with observables
111 function map_procedures(json_objects)
114 for(var idx=0;idx<json_objects.length;idx++)
116 retval.push(procedure(json_objects[idx]));
123 // This function takes json objects and maps them to the knockoutjs model with observables
124 function map_code_entries(json_objects)
127 for(idx=0;idx<json_objects.length;idx++)
129 retval.push(new code_entry(json_objects[idx]));
134 function request_encounter_data(model_data,mode,prev_encounter)
142 if(prev_encounter!=null)
144 request.prev_encounter=prev_encounter;
146 $.post(review_ajax,request,function(result){
148 model_data.prev_encounter(null)
149 if(typeof result.encounters!='undefined')
151 model_data.encounters(result.encounters);
152 for(idx=0;idx<model_data.encounters().length;idx++)
154 if(model_data.encounters()[idx].id==result.prev_encounter)
156 model_data.selectedEncounter(model_data.encounters()[idx]);
162 model_data.encounters([]);
164 model_data.prev_encounter(result.prev_encounter)
165 if(typeof result.procedures!='undefined')
167 model_data.procedures(map_procedures(result.procedures));
171 model_data.procedures([]);
174 model_data.issues(map_code_entries(result.issues));
175 model_data.show(true);
179 function review_event(data,event)
181 event.preventDefault();
182 $(".cancel_dialog").click();
183 request_encounter_data(data.review,data.review.mode,null);
186 function cancel_review(data,event)
188 event.preventDefault();
193 function choose_encounter(data,event)
195 if(data.prev_encounter()!=null)
197 if(data.selectedEncounter().id!=data.prev_encounter())
199 request_encounter_data(data,"encounters",data.selectedEncounter().id)
203 function fee_sheet_review_view_model()
205 this.review= {name: 'Hello'
207 ,show: ko.observable(false)
208 ,prev_encounter: ko.observable()
209 ,encounters: ko.observableArray()
210 ,procedures: ko.observableArray()
211 ,issues: ko.observableArray()
212 ,selectedEncounter: ko.observable()
215 this.procedure_options={
216 current_procedure: ko.observable()
217 ,fee_sheet_options: ko.observableArray()
220 this.cancel_review= cancel_review;
221 this.review_event= review_event;
222 this.choose_encounter = choose_encounter;
224 function add_review(data,event)
227 for(var idx=0;idx<data.issues().length;idx++)
229 var cur_diag=data.issues()[idx];
230 if(cur_diag.selected())
232 diag_list.push(cur_diag.jsonify());
237 for(idx=0;idx<data.procedures().length;idx++)
239 var cur_proc=data.procedures()[idx];
240 if(cur_proc.selected())
242 proc_list.push(cur_proc.jsonify());
245 top.restoreSession();
250 diags: JSON.stringify(diag_list),
251 procs: JSON.stringify(proc_list)