Portal Secure Messaging Audits
[openemr.git] / library / payment_jav.inc.php
blob8ce849ea9f267d9548c91a5c345fa8340b83877b
1 <?php
2 // +-----------------------------------------------------------------------------+
3 // Copyright (C) 2010 Z&H Consultancy Services Private Limited <sam@zhservices.com>
4 //
5 //
6 // 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 2
9 // of the License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
18 // A copy of the GNU General Public License is included along with this program:
19 // openemr/interface/login/GnuGPL.html
20 // For more information write to the Free Software
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 //
23 // Author: Eldho Chacko <eldho@zhservices.com>
24 // Paul Simon K <paul@zhservices.com>
26 // +------------------------------------------------------------------------------+
27 //===============================================================================
28 //This section handles payment related javascript functios.Add, Search and Edit screen uses these functions.
29 //===============================================================================
31 <script type="text/javascript">
32 function CheckVisible(MakeBlank)
33 {//Displays and hides the check number text box.Add and edit page uses the same function.
34 //In edit its value should not be lost on just a change.It is controlled be the 'MakeBlank' argument.
35 if(document.getElementById('payment_method').options[document.getElementById('payment_method').selectedIndex].value=='check_payment' ||
36 document.getElementById('payment_method').options[document.getElementById('payment_method').selectedIndex].value=='bank_draft' )
38 document.getElementById('div_check_number').style.display='none';
39 document.getElementById('check_number').style.display='';
41 else
43 document.getElementById('div_check_number').style.display='';
44 if(MakeBlank=='yes')
45 {//In Add page clearing the field is done.
46 document.getElementById('check_number').value='';
48 document.getElementById('check_number').style.display='none';
51 function PayingEntityAction()
53 //Which ajax is to be active(patient,insurance), is decided by the 'Paying Entity' drop down, where this function is called.
54 //So on changing some initialization is need.Done below.
55 document.getElementById('type_code').value='';
56 document.getElementById('hidden_ajax_close_value').value='';
57 document.getElementById('hidden_type_code').value='';
58 document.getElementById('div_insurance_or_patient').innerHTML='&nbsp;';
59 document.getElementById('description').value='';
60 if(document.getElementById('ajax_div_insurance'))
62 $("#ajax_div_patient_error").empty();
63 $("#ajax_div_patient").empty();
64 $("#ajax_div_insurance_error").empty();
65 $("#ajax_div_insurance").empty();
66 $("#ajax_div_insurance").hide();
67 document.getElementById('payment_method').style.display='';
69 //As per the selected value, one value is selected in the 'Payment Category' drop down.
70 if(document.getElementById('type_name').options[document.getElementById('type_name').selectedIndex].value=='patient')
72 document.getElementById('adjustment_code').value='patient_payment';
74 else if(document.getElementById('type_name').options[document.getElementById('type_name').selectedIndex].value=='insurance')
76 document.getElementById('adjustment_code').value='insurance_payment';
78 //As per the selected value, certain values are not selectable in the 'Payment Category' drop down.They are greyed out.
79 var list=document.getElementById('type_name');
80 var newValue = (list.options[list.selectedIndex].value);
81 if (newValue=='patient') {
82 if(document.getElementById('option_insurance_payment'))
83 document.getElementById('option_insurance_payment').style.backgroundColor='#DEDEDE';
84 if(document.getElementById('option_family_payment'))
85 document.getElementById('option_family_payment').style.backgroundColor='#ffffff';
86 if(document.getElementById('option_patient_payment'))
87 document.getElementById('option_patient_payment').style.backgroundColor='#ffffff';
89 if (newValue=='insurance') {
90 if(document.getElementById('option_family_payment'))
91 document.getElementById('option_family_payment').style.backgroundColor='#DEDEDE';
92 if(document.getElementById('option_patient_payment'))
93 document.getElementById('option_patient_payment').style.backgroundColor='#DEDEDE';
94 if(document.getElementById('option_insurance_payment'))
95 document.getElementById('option_insurance_payment').style.backgroundColor='#ffffff';
98 function FilterSelection(listSelected) {
99 //function PayingEntityAction() greyed out certain values as per the selection in the 'Paying Entity' drop down.
100 //When the same are selected in the 'Payment Category' drop down, this function reverts back to the old value.
101 if(document.getElementById('type_name').options[document.getElementById('type_name').selectedIndex].value=='patient')
103 ValueToPut='patient_payment';
105 else if(document.getElementById('type_name').options[document.getElementById('type_name').selectedIndex].value=='insurance')
107 ValueToPut='insurance_payment';
110 var newValueSelected = (listSelected.options[listSelected.selectedIndex].value);
112 var list=document.getElementById('type_name');
113 var newValue = (list.options[list.selectedIndex].value);
114 if (newValue=='patient') {
115 if(newValueSelected=='insurance_payment')
116 listSelected.value=ValueToPut;//Putting values back
118 if (newValue=='insurance') {
119 if(newValueSelected=='family_payment')
120 listSelected.value=ValueToPut;
121 if(newValueSelected=='patient_payment')
122 listSelected.value=ValueToPut;//Putting values back
125 function RestoreValues(CountIndex)
126 {//old remainder is restored back
127 if(document.getElementById('Allowed'+CountIndex).value*1==0 && document.getElementById('Payment'+CountIndex).value*1==0 && document.getElementById('AdjAmount'+CountIndex).value*1==0 && document.getElementById('Takeback'+CountIndex).value*1==0)
129 document.getElementById('RemainderTd'+CountIndex).innerHTML=document.getElementById('HiddenRemainderTd'+CountIndex).value*1
132 function ActionFollowUp(CountIndex)
133 {//Activating or deactivating the FollowUpReason text box.
134 if(document.getElementById('FollowUp'+CountIndex).checked)
136 document.getElementById('FollowUpReason'+CountIndex).readOnly=false;
137 document.getElementById('FollowUpReason'+CountIndex).value='';
139 else
141 document.getElementById('FollowUpReason'+CountIndex).value='';
142 document.getElementById('FollowUpReason'+CountIndex).readOnly=true;
145 function ValidateDateGreaterThanNow(DateValue,DateFormat)
146 {//Validate whether the date is greater than now.The 3 formats of date is taken care of.
147 if(DateFormat=='%Y-%m-%d')
149 DateValueArray=DateValue.split('-');
150 DateValue=DateValueArray[1]+'/'+DateValueArray[2]+'/'+DateValueArray[0];
152 else if(DateFormat=='%m/%d/%Y')
155 else if(DateFormat=='%d/%m/%Y')
157 DateValueArray=DateValue.split('/');
158 DateValue=DateValueArray[1]+'/'+DateValueArray[0]+'/'+DateValueArray[2];
160 PassedDate = new Date(DateValue);
161 Now = new Date();
162 if(PassedDate > Now)
163 return false;
164 else
165 return true;
167 function DateCheckGreater(DateValue1,DateValue2,DateFormat)
168 {//Checks which date is greater.The 3 formats of date is taken care of.
169 if(DateFormat=='%Y-%m-%d')
171 DateValueArray=DateValue1.split('-');
172 DateValue1=DateValueArray[1]+'/'+DateValueArray[2]+'/'+DateValueArray[0];
173 DateValueArray=DateValue2.split('-');
174 DateValue2=DateValueArray[1]+'/'+DateValueArray[2]+'/'+DateValueArray[0];
176 else if(DateFormat=='%m/%d/%Y')
179 else if(DateFormat=='%d/%m/%Y')
181 DateValueArray=DateValue1.split('/');
182 DateValue1=DateValueArray[1]+'/'+DateValueArray[0]+'/'+DateValueArray[2];
183 DateValueArray=DateValue2.split('/');
184 DateValue2=DateValueArray[1]+'/'+DateValueArray[0]+'/'+DateValueArray[2];
186 PassedDateValue1 = new Date(DateValue1);
187 PassedDateValue2 = new Date(DateValue2);
188 if(PassedDateValue1 <= PassedDateValue2)
189 return true;
190 else
191 return false;
193 function ConvertToUpperCase(ObjectPassed)
194 {//Convert To Upper Case.Example:- onKeyUp="ConvertToUpperCase(this)".
195 ObjectPassed.value=ObjectPassed.value.toUpperCase();
197 //--------------------------------
198 function SearchOnceMore()
199 {//Used in the option buttons,listing the charges.
200 //'Non Paid', 'Show Primary Complete', 'Show All Transactions' uses this when a patient is selected through ajax.
201 if(document.getElementById('hidden_patient_code').value*1>0)
203 document.getElementById('mode').value='search';
204 top.restoreSession();
205 document.forms[0].submit();
207 else
209 alert("<?php echo htmlspecialchars(xl('Please Select a Patient.'), ENT_QUOTES) ?>")
212 function CheckUnappliedAmount()
213 {//The value retured from here decides whether Payments can be posted/modified or not.
214 UnappliedAmount=document.getElementById('TdUnappliedAmount').innerHTML*1;
215 if(UnappliedAmount<0)
217 return 1;
219 else if(UnappliedAmount>0)
221 return 2;
223 else
225 return 3;
228 function ValidateNumeric(TheObject)
229 {//Numeric validations, used while typing numbers.
230 if(TheObject.value!=TheObject.value*1)
232 alert("<?php echo htmlspecialchars(xl('Value Should be Numeric'), ENT_QUOTES) ?>");
233 TheObject.focus();
234 return false;
237 function SavePayment()
238 {//Used before saving.
239 if(FormValidations())//FormValidations contains the form checks
241 if(confirm("<?php echo htmlspecialchars(xl('Would you like to save?'), ENT_QUOTES) ?>"))
243 top.restoreSession();
244 document.getElementById('mode').value='new_payment';
245 document.forms[0].submit();
247 else
248 return false;
250 else
251 return false;
253 function OpenEOBEntry()
254 {//Used before allocating the recieved amount.
255 if(FormValidations())//FormValidations contains the form checks
257 if(confirm("<?php echo htmlspecialchars(xl('Would you like to Allocate?'), ENT_QUOTES) ?>"))
259 top.restoreSession();
260 document.getElementById('mode').value='distribute';
261 document.forms[0].submit();
263 else
264 return false;
266 else
267 return false;
269 function ScreenAdjustment(PassedObject,CountIndex)
270 {//Called when there is change in the amount by typing.
271 //Readjusts the various values.Another function FillAmount() is also used.
272 //Ins1 case and allowed is filled means it is primary's first payment.
273 //It moves to secondary or patient balance.
274 //If primary again pays means ==>change Post For to Ins1 and do not enter any value in the allowed box.
275 Allowed=document.getElementById('Allowed'+CountIndex).value*1;
276 if(document.getElementById('Allowed'+CountIndex).id==PassedObject.id)
278 document.getElementById('Payment'+CountIndex).value=Allowed;
280 Payment=document.getElementById('Payment'+CountIndex).value*1;
281 ChargeAmount=document.getElementById('HiddenChargeAmount'+CountIndex).value*1;
282 Remainder=document.getElementById('HiddenRemainderTd'+CountIndex).value*1;
283 if(document.getElementById('Allowed'+CountIndex).id==PassedObject.id)
285 if(document.getElementById('HiddenIns'+CountIndex).value==1)
287 document.getElementById('AdjAmount'+CountIndex).value=Math.round((ChargeAmount-Allowed)*100)/100;
289 else
291 document.getElementById('AdjAmount'+CountIndex).value=Math.round((Remainder-Allowed)*100)/100;
294 AdjustmentAmount=document.getElementById('AdjAmount'+CountIndex).value*1;
295 CopayAmount=document.getElementById('HiddenCopayAmount'+CountIndex).value*1;
296 Takeback=document.getElementById('Takeback'+CountIndex).value*1;
297 if(document.getElementById('HiddenIns'+CountIndex).value==1 && Allowed!=0)
298 {//Means it is primary's first payment.
299 document.getElementById('RemainderTd'+CountIndex).innerHTML=Math.round((ChargeAmount-AdjustmentAmount-CopayAmount-Payment+Takeback)*100)/100;
301 else
302 {//All other case.
303 document.getElementById('RemainderTd'+CountIndex).innerHTML=Math.round((Remainder-AdjustmentAmount-Payment+Takeback)*100)/100;
305 FillAmount();
307 function FillAmount()
308 {//Called when there is change in the amount by typing.
309 //Readjusts the various values.
310 <?php
311 if ($screen=='new_payment') {
313 UnpostedAmt=document.getElementById('HidUnpostedAmount').value*1;
314 <?php
315 } else {
317 UnpostedAmt=document.getElementById('payment_amount').value*1;
318 <?php
322 TempTotal=0;
323 for(RowCount=1;;RowCount++)
325 if(!document.getElementById('Payment'+RowCount))
326 break;
327 else
329 Takeback=document.getElementById('Takeback'+RowCount).value*1;
330 TempTotal=Math.round((TempTotal+document.getElementById('Payment'+RowCount).value*1-Takeback)*100)/100;
333 document.getElementById('TdUnappliedAmount').innerHTML=Math.round((UnpostedAmt-TempTotal)*100)/100;
334 document.getElementById('HidUnappliedAmount').value=Math.round((UnpostedAmt-TempTotal)*100)/100;
335 document.getElementById('HidCurrentPostedAmount').value=TempTotal;
337 function ActionOnInsPat(CountIndex)
338 {//Called when there is onchange in the Ins/Pat drop down.
339 InsPatDropDownValue=document.getElementById('payment_ins'+CountIndex).options[document.getElementById('payment_ins'+CountIndex).selectedIndex].value;
340 document.getElementById('HiddenIns'+CountIndex).value=InsPatDropDownValue;
341 if(InsPatDropDownValue==1)
343 document.getElementById('trCharges'+CountIndex).bgColor='#ddddff';
345 else if(InsPatDropDownValue==2)
347 document.getElementById('trCharges'+CountIndex).bgColor='#ffdddd';
349 else if(InsPatDropDownValue==3)
351 document.getElementById('trCharges'+CountIndex).bgColor='#F2F1BC';
353 else if(InsPatDropDownValue==0)
355 document.getElementById('trCharges'+CountIndex).bgColor='#AAFFFF';
358 function CheckPayingEntityAndDistributionPostFor()
359 {//Ensures that Insurance payment is distributed under Ins1,Ins2,Ins3 and Patient paymentat under Pat.
360 PayingEntity=document.getElementById('type_name').options?document.getElementById('type_name').options[document.getElementById('type_name').selectedIndex].value:document.getElementById('type_name').value;
361 CountIndexAbove=0;
362 for(RowCount=CountIndexAbove+1;;RowCount++)
364 if(!document.getElementById('Payment'+RowCount))
365 break;
366 else if(document.getElementById('Allowed'+RowCount).value=='' && document.getElementById('Payment'+RowCount).value=='' && document.getElementById('AdjAmount'+RowCount).value=='' && document.getElementById('Deductible'+RowCount).value=='' && document.getElementById('Takeback'+RowCount).value=='' && document.getElementById('FollowUp'+RowCount).checked==false)
369 else
371 InsPatDropDownValue=document.getElementById('payment_ins'+RowCount).options[document.getElementById('payment_ins'+RowCount).selectedIndex].value;
372 if(PayingEntity=='patient' && InsPatDropDownValue>0)
374 alert("<?php echo htmlspecialchars(xl('Cannot Post for Insurance.The Paying Entity selected is Patient.'), ENT_QUOTES) ?>");
375 return false;
377 else if(PayingEntity=='insurance' && InsPatDropDownValue==0)
379 alert("<?php echo htmlspecialchars(xl('Cannot Post for Patient.The Paying Entity selected is Insurance.'), ENT_QUOTES) ?>");
380 return false;
384 return true;
386 function FormValidations()
387 {//Screen validations are done here.
388 if(document.getElementById('check_date').value=='')
390 alert("<?php echo htmlspecialchars(xl('Please Fill the Date'), ENT_QUOTES) ?>");
391 document.getElementById('check_date').focus();
392 return false;
394 else if(!ValidateDateGreaterThanNow(document.getElementById('check_date').value,'<?php echo DateFormatRead();?>'))
396 alert("<?php echo htmlspecialchars(xl('Date Cannot be greater than Today'), ENT_QUOTES) ?>");
397 document.getElementById('check_date').focus();
398 return false;
400 if(document.getElementById('post_to_date').value=='')
402 alert("<?php echo htmlspecialchars(xl('Please Fill the Post To Date'), ENT_QUOTES) ?>");
403 document.getElementById('post_to_date').focus();
404 return false;
406 else if(!ValidateDateGreaterThanNow(document.getElementById('post_to_date').value,'<?php echo DateFormatRead();?>'))
408 alert("<?php echo htmlspecialchars(xl('Post To Date Cannot be greater than Today'), ENT_QUOTES) ?>");
409 document.getElementById('post_to_date').focus();
410 return false;
412 else if(DateCheckGreater(document.getElementById('post_to_date').value,'<?php echo $GLOBALS['post_to_date_benchmark']=='' ? date('Y-m-d', time() - (10 * 24 * 60 * 60)) : htmlspecialchars(oeFormatShortDate($GLOBALS['post_to_date_benchmark']));?>',
413 '<?php echo DateFormatRead();?>'))
415 alert("<?php echo htmlspecialchars(xl('Post To Date Must be greater than the Financial Close Date.'), ENT_QUOTES) ?>");
416 document.getElementById('post_to_date').focus();
417 return false;
419 if(((document.getElementById('payment_method').options[document.getElementById('payment_method').selectedIndex].value=='check_payment' ||
420 document.getElementById('payment_method').options[document.getElementById('payment_method').selectedIndex].value=='bank_draft') &&
421 document.getElementById('check_number').value=='' ))
423 alert("<?php echo htmlspecialchars(xl('Please Fill the Check Number'), ENT_QUOTES) ?>");
424 document.getElementById('check_number').focus();
425 return false;
427 <?php
428 if ($screen=='edit_payment') {
430 if(document.getElementById('check_number').value!='' &&
431 document.getElementById('payment_method').options[document.getElementById('payment_method').selectedIndex].value=='')
433 alert("<?php echo htmlspecialchars(xl('Please Select the Payment Method'), ENT_QUOTES) ?>");
434 document.getElementById('payment_method').focus();
435 return false;
437 <?php
440 if(document.getElementById('payment_amount').value=='')
442 alert("<?php echo htmlspecialchars(xl('Please Fill the Payment Amount'), ENT_QUOTES) ?>");
443 document.getElementById('payment_amount').focus();
444 return false;
446 if(document.getElementById('payment_amount').value!=document.getElementById('payment_amount').value*1)
448 alert("<?php echo htmlspecialchars(xl('Payment Amount must be Numeric'), ENT_QUOTES) ?>");
449 document.getElementById('payment_amount').focus();
450 return false;
452 <?php
453 if ($screen=='edit_payment') {
455 if(document.getElementById('adjustment_code').options[document.getElementById('adjustment_code').selectedIndex].value=='')
457 alert("<?php echo htmlspecialchars(xl('Please Fill the Payment Category'), ENT_QUOTES) ?>");
458 document.getElementById('adjustment_code').focus();
459 return false;
461 <?php
464 if(document.getElementById('type_code').value=='')
466 alert("<?php echo htmlspecialchars(xl('Please Fill the Payment From'), ENT_QUOTES) ?>");
467 document.getElementById('type_code').focus();
468 return false;
470 if(document.getElementById('hidden_type_code').value!=document.getElementById('div_insurance_or_patient').innerHTML)
472 alert("<?php echo htmlspecialchars(xl('Take Payment From, from Drop Down'), ENT_QUOTES) ?>");
473 document.getElementById('type_code').focus();
474 return false;
476 if(document.getElementById('deposit_date').value=='')
479 else if(!ValidateDateGreaterThanNow(document.getElementById('deposit_date').value,'<?php echo DateFormatRead();?>'))
481 alert("<?php echo htmlspecialchars(xl('Deposit Date Cannot be greater than Today'), ENT_QUOTES) ?>");
482 document.getElementById('deposit_date').focus();
483 return false;
485 return true;
487 //========================================================================================
488 function UpdateTotalValues(start,count,Payment,PaymentTotal)
489 {//Used in totaling the columns.
490 var paymenttot=0;
491 if(count > 0)
493 for(i=start;i<start+count;i++)
495 if(document.getElementById(Payment+i))
497 paymenttot=paymenttot+document.getElementById(Payment+i).value*1;
500 document.getElementById(PaymentTotal).innerHTML=Math.round((paymenttot)*100)/100;
503 </script>