fix: Custom Reports-Superbill not showing Billing Information (#7582)
[openemr.git] / interface / main / tabs / js / menu_analysis.js
blob3a61628215df90ecb42030a6ad9474fb4cb7ba22
1 /**
2  * menu_analysis.js
3  *
4  * @package   OpenEMR
5  * @link      http://www.open-emr.org
6  * @author    Kevin Yeh <kevin.y@integralemr.com>
7  * @copyright Copyright (c) 2016 Kevin Yeh <kevin.y@integralemr.com>
8  * @license   https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
9  */
11 var targets={};
12 targets['Calendar']='lst';
13 targets['Flow Board']='lst';
14 targets['Messages ']='pat';
15 targets['Administration']='adm';
16 targets['Reports']='rep';
17 targets['Miscellaneous']='msc';
19 targets['Patients']='lst';
21 var acl_reqs={};
22 var global_reqs={};
24 //Billing Menu Restrictions
25 acl_reqs['EDI History']=['acct','eob'];
26 global_reqs['EDI History']='enable_edihistory_in_left_menu'
28 // Administration Menu restrictions
29 acl_reqs['Globals']=['admin','super'];
30 acl_reqs['Facilities']=['admin','users'];
31 acl_reqs['Users']=['admin','users'];
32 acl_reqs['Addr Book']=['admin','practice'];
33 acl_reqs['Practice']=['admin','practice'];
34 acl_reqs['Codes']=['admin','superbill'];
35 acl_reqs['Layouts']=['admin','super'];
36 acl_reqs['Lists']=['admin','super'];
37 acl_reqs['ACL']=['admin','acl'];
38 acl_reqs['Files']=['admin','super'];
39 acl_reqs['Backup']=['admin','super'];
42 acl_reqs['Rules']=['admin','super'];
43 global_reqs['Rules']='enable_cdr'
45 acl_reqs['Alerts']=['admin','super'];
46 global_reqs['Alerts']='enable_cdr'
48 acl_reqs['Patient Reminders']=['admin','super'];
49 global_reqs['Patient Reminders']='enable_cdr'
52 acl_reqs['Language']=['admin','language'];
53 acl_reqs['Forms']=['admin','forms'];
55 acl_reqs['Calendar']=['admin','calendar','main/calendar/index.php?module=PostCalendar&type=admin&func=modifyconfig']
57 acl_reqs['Logs']=['admin','users'];
59 acl_reqs['Certificates']=['admin','users'];
61 acl_reqs['Native Data Loads']=['admin','super'];
62 acl_reqs['External Data Loads']=['admin','super'];
63 acl_reqs['Merge Patient']=['admin','super'];
65 global_reqs['Fax/Scan']=['enable_hylafax','enable_scanner'];
68 function set_acl_reqs(entry)
70     if('url' in entry)
71     {
72         if(entry.label in acl_reqs)
73         {
74             var reqs=acl_reqs[entry.label];
75             if(reqs.length===3)
76             {
77                 if(entry.url.indexOf(reqs[2])!==-1)
78                 {
79                     entry.acl_req=[reqs[0],reqs[1]];
80                 }
81             }
82             else
83             {
84                 entry.acl_req=acl_reqs[entry.label];
85             }
86         }
87         if(entry.label in global_reqs)
88         {
89             entry.global_req=global_reqs[entry.label];
90         }
91     }
94 function setTarget(entry,target)
96     if('url' in entry)
97     {
98         entry.target=target
99     }
100     else
101     {
102         for(var idx=0;idx<entry.children.length;idx++)
103         {
104             setTarget(entry.children[idx],target);
105         }
106     }
108 function post_process(menu_entries)
110     for(var idx=0;idx<menu_entries.length;idx++)
111     {
112         var curEntry=menu_entries[idx];
113         set_acl_reqs(curEntry);
114         if(curEntry.label in targets)
115         {
116             setTarget(curEntry,targets[curEntry.label]);
117         }
118         post_process(curEntry.children);
119     }
121 function parse_link(link,entry)
123     if(link)
124     {
125         var parameters=link.substring(link.indexOf('(')+1,link.indexOf(')'));
126         if(parameters==='')
127         {
128             parameters=link;
129         }
130         if(link.indexOf("loadFrame2")===-1)
131         {
132             var url=parameters.replace(/'/g,"").replace(/"/g,"").replace("../","/interface/");
133             entry.url=url;
134             entry.target="report";
135         }
136         else
137         {
138             parameters=parameters.replace(/'/g,"").replace(/"/g,"");
139             var params=parameters.split(",");
140             entry.target=params[1];
141             if(entry.target==='RTop')
142             {
143                 entry.target='pat';
144             }
145             if(entry.target==='RBot')
146             {
147                 entry.target='enc';
148             }
151             entry.url=params[2].replace("../","/");
152             if(entry.url.indexOf("/")>0)
153             {
154                 entry.url="/interface/"+entry.url;
155             }
157         }
158     }
161 function menu_entry(label,link,menu_id)
163     var self=this;
164     self.label=label;
165     self.menu_id=menu_id;
166     parse_link(link,self);
167     self.children=[];
168     self.icon=icon;
169     self.helperText=helperText;
170     self.requirement=0;
171     if(menu_id)
172     {
173         if(menu_id.charAt(3)==='1')
174         {
175             if(self.label==='Summary')
176             {
177                 self.target="pat";
178             }
179             else
180             {
181                 self.target="enc";
182             }
183             self.requirement=1;
184         } else
185         if(menu_id.charAt(3)==='2')
186         {
187             self.target="enc";
188             self.requirement=2;
189             // Special case for "Current" visit entry
190             if(self.label==="Current")
191             {
192                 self.requirement=3;
193             }
194         }
195     }
198     return this;
201 function menu_entry_from_jq(elem)
203     return new menu_entry(elem.text(),elem.attr("onClick"),elem.attr("id"));
205 var menu_entries=[];
206 function analyze_menu()
208     alert('I think you will never see this. --Rod'); // debugging
210     if(!top.left_nav)
211     {
212         setTimeout(analyze_menu,1000);
213         return;
214     }
215     else
216     {
217         if(!top.left_nav.$)
218         {
219             alert("no jq!");
220             setTimeout(analyze_menu,1000);
221             return;
222         }
223     }
224     var jqLeft=top.left_nav.$(top.left_nav.document);
225     var $=top.left_nav.$;
226     jqLeft.ready(function(){
228         var menuTop=jqLeft.find("#navigation-slide");
229         menuTop.children().each(
230                 function(idx,elem)
231                 {
232                     // Header or content
233                     var jqElem=$(elem);
234                     var anchor=jqElem.children("a");
235                     var subMenu = jqElem.children("ul");
237                     var newEntry=menu_entry_from_jq(anchor);
238                     if(subMenu.length>0)
239                     {
240                         // 2 (Second) level menu items
241                         subMenu.children("li").each(function(idx,elem)
242                         {
243                             var sub_anchor=$(elem).children("a");
244                             var sub_entry=menu_entry_from_jq(sub_anchor);
245                             if(sub_anchor.length!==1)
246                             {
247                                 alert(sub_anchor.text());
248                             }
249                             var subSubMenu=$(elem).children("ul");
250                             //Third Level Menu Items
251                             if(subSubMenu.length>0 && sub_entry.label !=="Visit Forms")
252                             {
253                                 subSubMenu.children("li").each(function(idx,elem)
254                                 {
255                                     var sub_sub_anchor=$(elem).children("a");
256                                     var sub_sub_entry=menu_entry_from_jq(sub_sub_anchor);
257                                     sub_entry.children.push(sub_sub_entry);
259                                 });
261                             }
262                             //End Third Level Menu Items
263                             newEntry.children.push(sub_entry);
264                         });
265                         // End Second level menu items
266                     }
267                     menu_entries.push(newEntry);
270                 }
271         );
272         // Scan popup select
273         var popups = jqLeft.find("select[name='popups'] option");
274         var popups_menu_header=new menu_entry("Popups","","popup");
275         menu_entries.push(popups_menu_header);
276         popups.each(function(idx,elem)
277             {
278                 var jqElem=$(elem);
279                 if(jqElem.val()!=='')
280                 {
281                     var popup_entry=new menu_entry(jqElem.text(),jqElem.val(),"Popup:"+jqElem.text());
282                     popup_entry.target="pop";
283                     popup_entry.requirement=1;
284                     popups_menu_header.children.push(popup_entry);
285                 }
286             });
287         // Process Complete
289         post_process(menu_entries);
290         var data=$("<div id='#menuData'></div>");
291         data.text("$menu_json=\""+JSON.stringify(menu_entries).replace(/"/g,"\\\"")+"\";");
292         $("body").append(data);
293     });
295 var toID=setTimeout(analyze_menu,1000);