2 // +-----------------------------------------------------------------------------+
3 // Copyright (C) 2010 Z&H Consultancy Services Private Limited <sam@zhservices.com>
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.
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
='';
43 document
.getElementById('div_check_number').style
.display
='';
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
=' ';
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
='';
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
);
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
)
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();
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)
219 else if(UnappliedAmount
>0)
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) ?>");
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();
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();
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;
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;
303 document
.getElementById('RemainderTd'+CountIndex
).innerHTML
=Math
.round((Remainder
-AdjustmentAmount
-Payment+Takeback
)*100)/100;
307 function FillAmount()
308 {//Called when there is change in the amount by typing.
309 //Readjusts the various values.
311 if ($screen=='new_payment') {
313 UnpostedAmt
=document
.getElementById('HidUnpostedAmount').value
*1;
317 UnpostedAmt
=document
.getElementById('payment_amount').value
*1;
323 for(RowCount
=1;;RowCount++
)
325 if(!document
.getElementById('Payment'+RowCount
))
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
;
362 for(RowCount
=CountIndexAbove+
1;;RowCount++
)
364 if(!document
.getElementById('Payment'+RowCount
))
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)
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) ?>");
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) ?>");
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
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();
487 //========================================================================================
488 function UpdateTotalValues(start
,count
,Payment
,PaymentTotal
)
489 {//Used in totaling the columns.
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;