<cfcomponent displayname="Invoices Functions" hint="I Return Invoices Information" output="false">

 	
   <cffunction name="init" displayname="Initialize Component" access="public" returntype="Invoices" hint="I initialize and return the Invoices object.">
		<cfreturn this>
	</cffunction>

	<cffunction name="show_sched_edit"  access="remote" output="Yes" returnFormat= "plain">   
			<cfargument name="Schedule_ID" required="yes" default="0">

				<cfquery name="getschedules" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_agency#.pSchedules
					WHERE Schedule_ID = <cfqueryparam value = "#arguments.Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">	
					AND status = 0
				</cfquery>


				<cfquery name="getadjust_codes" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_lookup#.Adjustment_codes_lookup
					WHERE Status = 0
				</cfquery>

				<cfsavecontent	variable = "html_sched_list"> 			
					<cfoutput>
						<form name="editsch_form" id="editsch_form_id" action="" method="post">						
							<input type="hidden" name="Schedule_ID" id="Schedule_ID"  value="#arguments.Schedule_ID#"/>			
							
							<div class="row">
								<div class="col-md-6">
									<div class="form-group">
		                         		<label>Payment</label>
										<input type="text"  name="Payment" id="Payment#Schedule_ID#"   value="#getschedules.Payment#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label id="lbl_write_offamount">Adjustment Amount</label>
										<input type="text"  name="write_offamount" id="write_offamount#Schedule_ID#"   value="#getschedules.write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code</label>
										<select name="write_offcode" id="write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code</label>
										<select name="write_offcodesecond" id="write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
								<div class="col-md-6">
									<div class="form-group">
                                 		<label id="lbl_second_write_offamount">Adjustment Amount 2nd</label>
										<input type="text"  name="second_write_offamount" id="second_write_offamount#Schedule_ID#"   value="#getschedules.second_write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code 2nd</label>
										<select name="second_write_offcode" id="second_write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.second_write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.second_write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.second_write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.second_write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.second_write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.second_write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code 2nd</label>
										
										<select name="second_write_offcodesecond" id="second_write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.second_write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.second_write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
							</div>
							<div class="row">
								<div class="col-md-6">
									<div class="form-group">
                                 		<label id="lbl_third_write_offamount">Adjustment Amount 3rd</label>
										<input type="text"  name="third_write_offamount" id="third_write_offamount#Schedule_ID#"   value="#getschedules.third_write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code 3rd</label>
										<select name="third_write_offcode" id="third_write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.third_write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.third_write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.third_write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.third_write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.third_write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.third_write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code 3rd</label>
										<select name="third_write_offcodesecond" id="third_write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.third_write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.third_write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
								<div class="col-md-6">
									<div class="form-group">
                                 		<label id="lbl_fourth_write_offamount">Adjustment Amount 4th</label>
										<input type="text"  name="fourth_write_offamount" id="fourth_write_offamount#Schedule_ID#"   value="#getschedules.fourth_write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code 4th</label>
										<select name="fourth_write_offcode" id="fourth_write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.fourth_write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.fourth_write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.fourth_write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.fourth_write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.fourth_write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.fourth_write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code 4th</label>
										<select name="fourth_write_offcodesecond" id="fourth_write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.fourth_write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.fourth_write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
							</div>	

						</form>		
					</cfoutput>	
				</cfsavecontent>	
				<cfreturn html_sched_list />	
	</cffunction>


	<cffunction name="show_sched_editnew"  access="remote" output="Yes" returnFormat= "plain">   
			<cfargument name="Schedule_ID" required="yes" default="0">
			<cfargument name="Payment_ID" required="yes" default="0">

				<cfquery name="getschedules" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_agency#.Visits_payments
					WHERE Schedule_ID = <cfqueryparam value = "#arguments.Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">
					AND Payment_ID = <cfqueryparam value = "#arguments.Payment_ID#" CFSQLType ="CF_SQL_INTEGER">	
					AND status = 0
				</cfquery>


				<cfquery name="getadjust_codes" datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_lookup#.Adjustment_codes_lookup
					WHERE Status = 0
				</cfquery>

				<cfsavecontent	variable = "html_sched_list"> 			
					<cfoutput>
						<form name="editsch_form" id="editsch_form_id" action="" method="post">						
							<input type="hidden" name="Schedule_ID" id="Schedule_ID"  value="#arguments.Schedule_ID#"/>			
							
							<div class="row">
								<div class="col-md-6">
									<div class="form-group">
		                         		<label>Payment</label>
										<input type="text"  name="Payment" id="Payment#Schedule_ID#"   value="#getschedules.Payment#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label id="lbl_write_offamount">Adjustment Amount</label>
										<input type="text"  name="write_offamount" id="write_offamount#Schedule_ID#"   value="#getschedules.write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code</label>
										<select name="write_offcode" id="write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code</label>
										<select name="write_offcodesecond" id="write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjust Contract Balance</label>
										<select name="adjust_contract_balance" id="adjust_contract_balance#Schedule_ID#" class="form-control">
											<option value="No" <cfif getschedules.adjust_contract_balance EQ '' OR getschedules.adjust_contract_balance EQ 'No'> selected</cfif>>No</option>
											<option value="Yes" <cfif getschedules.adjust_contract_balance EQ 'Yes'> selected</cfif>>Yes</option>
										</select>
									</div>
								</div>
								<div class="col-md-6">
									<div class="form-group">
                                 		<label id="lbl_second_write_offamount">Adjustment Amount 2nd</label>
										<input type="text"  name="second_write_offamount" id="second_write_offamount#Schedule_ID#"   value="#getschedules.second_write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code 2nd</label>
										<select name="second_write_offcode" id="second_write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.second_write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.second_write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.second_write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.second_write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.second_write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.second_write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code 2nd</label>
										
										<select name="second_write_offcodesecond" id="second_write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.second_write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.second_write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
							</div>
							<div class="row">
								<div class="col-md-6">
									<div class="form-group">
                                 		<label id="lbl_third_write_offamount">Adjustment Amount 3rd</label>
										<input type="text"  name="third_write_offamount" id="third_write_offamount#Schedule_ID#"   value="#getschedules.third_write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code 3rd</label>
										<select name="third_write_offcode" id="third_write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.third_write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.third_write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.third_write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.third_write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.third_write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.third_write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code 3rd</label>
										<select name="third_write_offcodesecond" id="third_write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.third_write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.third_write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
								<div class="col-md-6">
									<div class="form-group">
                                 		<label id="lbl_fourth_write_offamount">Adjustment Amount 4th</label>
										<input type="text"  name="fourth_write_offamount" id="fourth_write_offamount#Schedule_ID#"   value="#getschedules.fourth_write_offamount#" class="form-control">
									</div>
									<div class="form-group">
                                 		<label>Adjustment Group Code 4th</label>
										<select name="fourth_write_offcode" id="fourth_write_offcode#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.fourth_write_offcode EQ ''> selected</cfif>>--Select Group Codes--- </option>
											<option value="CO" <cfif getschedules.fourth_write_offcode EQ 'CO'> selected</cfif>>CO - 	Contractual Obligation </option>
											<option value="CR" <cfif getschedules.fourth_write_offcode EQ 'CR'> selected</cfif>>CR - Corrections and Reversal</option>
											<option value="OA" <cfif getschedules.fourth_write_offcode EQ 'OA'> selected</cfif>>OA - Other Adjustment</option>
											<option value="PI" <cfif getschedules.fourth_write_offcode EQ 'PI'> selected</cfif>>PI - Payer Initiated Reductions</option>
											<option value="PR" <cfif getschedules.fourth_write_offcode EQ 'PR'> selected</cfif>>PR - Patient Responsibility</option>
										</select>
									</div>
									<div class="form-group">
                                 		<label>Adjustment Code 4th</label>
										<select name="fourth_write_offcodesecond" id="fourth_write_offcodesecond#Schedule_ID#" class="form-control">
											<option value="" <cfif getschedules.fourth_write_offcodesecond EQ ''> selected</cfif>>--Select Codes--- </option>
											<cfloop query="getadjust_codes">
												<option value="#Adjustment_codes#" <cfif getschedules.fourth_write_offcodesecond EQ #Adjustment_codes#> selected</cfif>>#Adjustment_codes# </option>
											</cfloop>
										</select>
									</div>
								</div>
							</div>	

						</form>		
					</cfoutput>	
				</cfsavecontent>	
				<cfreturn html_sched_list />	
	</cffunction>

	<cffunction name="updateschpayments"  access="remote" output="Yes" returnFormat= "plain">   
			<cfargument name="Schedule_ID" required="yes" default="0">
			<cfargument name="payment" required="yes" default="0">
			<cfargument name="write_offamount" required="yes" default="0">
			<cfargument name="write_offcode" required="yes" default="0">
			<cfargument name="write_offcodesecond" required="yes" default="0">

			<cfargument name="second_write_offamount" required="yes" default="0">
			<cfargument name="second_write_offcode" required="yes" default="0">
			<cfargument name="second_write_offcodesecond" required="yes" default="0">

			<cfargument name="third_write_offamount" required="yes" default="0">
			<cfargument name="third_write_offcode" required="yes" default="0">
			<cfargument name="third_write_offcodesecond" required="yes" default="0">

			<cfargument name="fourth_write_offamount" required="yes" default="0">
			<cfargument name="fourth_write_offcode" required="yes" default="0">
			<cfargument name="fourth_write_offcodesecond" required="yes" default="0">

			<cfquery name="update_schduedules" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.pSchedules
				SET
				<cfif arguments.payment NEQ ''>
					payment = '#arguments.payment#',
				<cfelse>
					payment = '0.00',
				</cfif>
				<cfif arguments.write_offamount NEQ ''>
					 write_offamount = '#arguments.write_offamount#',
				<cfelse>
					write_offamount = '0.00',
				</cfif>
				write_offcode = '#arguments.write_offcode#',
				write_offcodesecond = '#arguments.write_offcodesecond#',

				<cfif arguments.second_write_offamount NEQ ''>
					 second_write_offamount = '#arguments.second_write_offamount#',
				<cfelse>
					second_write_offamount = '0.00',
				</cfif>
				second_write_offcode = '#arguments.second_write_offcode#',
				second_write_offcodesecond = '#arguments.second_write_offcodesecond#',

				<cfif arguments.third_write_offamount NEQ ''>
					 third_write_offamount = '#arguments.third_write_offamount#',
				<cfelse>
					third_write_offamount = '0.00',
				</cfif>
				third_write_offcode = '#arguments.third_write_offcode#',
				third_write_offcodesecond = '#arguments.third_write_offcodesecond#',

				<cfif arguments.fourth_write_offamount NEQ ''>
					 fourth_write_offamount = '#arguments.fourth_write_offamount#',
				<cfelse>
					fourth_write_offamount = '0.00',
				</cfif>
				fourth_write_offcode = '#arguments.fourth_write_offcode#',
				fourth_write_offcodesecond = '#arguments.fourth_write_offcodesecond#',


				Date_Change = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
					Change_by	= <cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER"> 
				WHERE Schedule_ID = <cfqueryparam value = "#arguments.Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">	
				AND status = 0
			</cfquery>


	</cffunction>

	<cffunction name="updateschpaymentsnew"  access="remote" output="Yes" returnFormat= "plain">   
			<cfargument name="Schedule_ID" required="yes" default="0">
			<cfargument name="Payment_ID" required="yes" default="0">
			<cfargument name="payment" required="yes" default="0">
			<cfargument name="write_offamount" required="yes" default="0">
			<cfargument name="write_offcode" required="yes" default="0">
			<cfargument name="write_offcodesecond" required="yes" default="0">

			<cfargument name="second_write_offamount" required="yes" default="0">
			<cfargument name="second_write_offcode" required="yes" default="0">
			<cfargument name="second_write_offcodesecond" required="yes" default="0">

			<cfargument name="third_write_offamount" required="yes" default="0">
			<cfargument name="third_write_offcode" required="yes" default="0">
			<cfargument name="third_write_offcodesecond" required="yes" default="0">

			<cfargument name="fourth_write_offamount" required="yes" default="0">
			<cfargument name="fourth_write_offcode" required="yes" default="0">
			<cfargument name="fourth_write_offcodesecond" required="yes" default="0">
			<cfargument name="adjust_contract_balance" required="no" default="No">
			<cfif arguments.Payment_ID GT 0>
			<cfquery name="checkPayLock" datasource="#Application.DataSrc#">
				SELECT 1 AS n FROM #Request.prefix_db_agency#.Payments
				WHERE Payment_ID = <cfqueryparam value="#arguments.Payment_ID#" CFSQLType="CF_SQL_INTEGER">
				AND IFNULL(Payment_Lock,0) = 1
			</cfquery>
			<cfif checkPayLock.recordCount GT 0>
				<cfreturn "Payment is locked. Visit payment allocation cannot be modified." />
			</cfif>
			</cfif>
			<cfquery name="update_Visits_payments" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.Visits_payments
					SET Status = 2
				WHERE Schedule_ID =  <cfqueryparam value = "#arguments.Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">
				AND Payment_ID = <cfqueryparam value = "#arguments.Payment_ID#" CFSQLType ="CF_SQL_INTEGER">
				AND status = 0
			</cfquery>

			<cfquery name="Insert_Visits_payments" datasource="#Application.DataSrc#">
				INSERT INTO #Request.prefix_db_agency#.Visits_payments
				(
					Schedule_ID, Payment_ID,payment,write_offamount,write_offcode,write_offcodesecond,second_write_offamount,second_write_offcode,
					second_write_offcodesecond,third_write_offamount,third_write_offcode,third_write_offcodesecond,
					fourth_write_offamount, fourth_write_offcode,fourth_write_offcodesecond,adjust_contract_balance,
					Date_Create,Created_by,Date_Change,Change_by
				)
				VALUES 
				(
					<cfqueryparam value = "#arguments.Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">,
					<cfqueryparam value = "#arguments.Payment_ID#" CFSQLType ="CF_SQL_INTEGER">,
					<cfif arguments.payment NEQ ''>'#arguments.payment#'<cfelse>'0.00'</cfif>,
					<cfif arguments.write_offamount NEQ ''> '#arguments.write_offamount#'<cfelse>'0.00'</cfif>,
					<cfqueryparam value = "#arguments.write_offcode#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfqueryparam value = "#arguments.write_offcodesecond#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfif arguments.second_write_offamount NEQ ''> '#arguments.second_write_offamount#'<cfelse>'0.00'</cfif>,
					<cfqueryparam value = "#arguments.second_write_offcode#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfqueryparam value = "#arguments.second_write_offcodesecond#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfif arguments.third_write_offamount NEQ ''> '#arguments.third_write_offamount#'<cfelse>'0.00'</cfif>,
					<cfqueryparam value = "#arguments.third_write_offcode#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfqueryparam value = "#arguments.third_write_offcodesecond#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfif arguments.fourth_write_offamount NEQ ''> '#arguments.fourth_write_offamount#'<cfelse>'0.00'</cfif>,
					<cfqueryparam value = "#arguments.fourth_write_offcode#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfqueryparam value = "#arguments.fourth_write_offcodesecond#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfqueryparam value = "#arguments.adjust_contract_balance#" CFSQLType ="CF_SQL_VARCHAR">,
					<cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
					<cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER">, 
					<cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
					<cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER"> 
				)
			</cfquery>

	</cffunction>

	<cffunction name="pushpayments"  access="remote" output="Yes" returnFormat= "plain">   
			<cfargument name="Remit_No" required="yes" default="0">
			<cfargument name="CLP_ID" required="yes" default="0">			

			<cfquery  name="getclaims"  datasource="#Application.DataSrc#">
					SELECT * FROM #Request.prefix_db_lookup#.cron_835 
					WHERE  Agency_ID = '#session.agencyid#'
					AND status = 0
					AND Remit_No = '#arguments.Remit_No#'
					AND CLP_ID = '#arguments.CLP_ID#'
					ORDER BY Remit_No ASC
			</cfquery>
			<cfset notfound_ICN = "">
			<cfset toddaydate = #dateformat(now(),"yyyy-mm-dd")# />
			<cfoutput query="getclaims" group="ICN">
				 <cfquery name="insertpDeposit" dataSource="#Application.DataSrc#">
			         INSERT into #Request.prefix_db_agency#.pDeposit
						(Date_Deposit,Payer_ID, Date_Create,Date_Check, Deposit_Type, Check_Total, Remit_No,
						Internal_Control_number,HCPCS,<!--- SVC04,SVC03, --->Writeoff_Amount,Visit_Date,
						Pay_Name, Net_Total,  Record_Created_Date, Record_Modified_Date)
					VALUES 
						('#Date_Deposit#','#Payer_ID#','#toddaydate#','#Date_Check#','#Deposit_Type#', '#Check_Total#','#Remit_No#',
						'#ICN#','#Revenue_Code#',<!--- '#SVC04#','#SVC03#', --->'#Dep_Writeoff_Amount#','#Visit_Date#',
						'#Pay_Name#','#Net_Total#', #now()#,#now()#)
				</cfquery> 
				<cfif Adjustment_Group_Code_2 EQ 'CO' AND Adjustment_Code_2 EQ '70'>
					<cfquery name="Update_Adjustment" dataSource="#Application.DataSrc#">
				         UPDATE #Request.prefix_db_agency#.Invoices
				          SET outlier = '#Adjustment_Amount_2#'
						WHERE Internal_control_number =  '#ICN#'
						AND (IFNULL(Invoice_Lock,0) <> 1)
					</cfquery> 
				</cfif>
				<cfif Seq_Amount NEQ ''>
					<cfquery name="Update_Seq_Code" dataSource="#Application.DataSrc#">
				         UPDATE #Request.prefix_db_agency#.Invoices
				          SET Seq_Amount = '#Seq_Amount#',
				          Seq_code = '#Seq_Code#'
						WHERE Invoice_ID =  '#Invoice_ID#'
						AND (IFNULL(Invoice_Lock,0) <> 1)
					</cfquery> 
				</cfif> 

				<cfquery name="getinv" dataSource="#Application.DataSrc#">
			         SELECT Invoice_ID FROM #Request.prefix_db_agency#.Invoices
					WHERE Internal_control_number =  '#ICN#'
					AND deleted <> 1
				</cfquery> 
				<cfif getinv.recordcount EQ 0 >
					<cfset notfound_ICN = ListAppend(notfound_ICN,#ICN#) >
				</cfif>				
			</cfoutput>
			 <cfoutput query="getclaims" group="CLP_ID">
			 		<cfquery name="get_inv" dataSource="#Application.DataSrc#"> 
				    	SELECT Invoice_ID,Seq_Amount,Seq_code,outlier FROM #Request.prefix_db_agency#.Invoices 
			    		WHERE Invoice_ID =  '#Invoice_ID#'
					</cfquery>
					<cfquery name="Insert_Payments" dataSource="#Application.DataSrc#"> 
					    	INSERT INTO #Request.prefix_db_agency#.Payments(
					    		 Invoice_ID, PatientPayer_ID, PaymentDate, Amount, PaymentMethod, EFT_Amount, EFT_No, Claim,
					    		  Pay_Seq_Amount,Pay_Seq_Code,Pay_outlier,
					    		  Comments, WriteOffAmount, WriteOffType, Deleted, Internal_control_number)
							 VALUES 
								('#Invoice_ID#','#Payer_ID#','#Date_Deposit#', '#total_paymentamount#','Electronic','#Check_Total#','#Remit_No#',
								'#ICN#','#get_inv.Seq_Amount#','#get_inv.Seq_code#', '#get_inv.outlier#',
								'Auto claim payment processing', '#total_WriteOffAmount#','#Adjustment_Code#', 0, '#ICN#')
					</cfquery>
					<cfif Payer_Type NEQ 'Medicare'>
						<cfquery datasource="#Application.DataSrc#" name="Last_payment_ID">
						      <cfsetting requesttimeout="5000">
							      SELECT LAST_INSERT_ID() as LastInsertID
						</cfquery>
						<cfset Payment_ID = #Last_payment_ID.LastInsertID# />
						<cfoutput>
							<cfquery name="Insert_Visits_payments" datasource="#Application.DataSrc#">
								INSERT INTO #Request.prefix_db_agency#.Visits_payments
								(
									Schedule_ID, Payment_ID,payment,write_offamount,write_offcode,write_offcodesecond,
									Date_Create,Created_by,Date_Change,Change_by
								)
								VALUES 
								(
									<cfqueryparam value = "#Schedule_ID#" CFSQLType ="CF_SQL_INTEGER">,
									<cfqueryparam value = "#Payment_ID#" CFSQLType ="CF_SQL_INTEGER">,
									<cfif Paid_amount  NEQ ''>'#Paid_amount#'<cfelse>'0.00'</cfif>,
									<cfif Adjustment_Amount NEQ ''> '#Adjustment_Amount#'<cfelse>'0.00'</cfif>,
									<cfqueryparam value = "#Adjustment_Group_Code#" CFSQLType ="CF_SQL_VARCHAR">,
									<cfqueryparam value = "#Adjustment_Code#" CFSQLType ="CF_SQL_VARCHAR">,							
									<cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
									<cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER">, 
									<cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
									<cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER"> 
								)
							</cfquery>
						</cfoutput>
					</cfif>

			</cfoutput>
			<cfquery  name="UPDATE_cron_835"  datasource="#Application.DataSrc#">
					UPDATE #Request.prefix_db_lookup#.cron_835
						SET  payment_pushed = 1
					WHERE  Agency_ID = '#session.agencyid#'
					AND status = 0
					AND Remit_No = '#arguments.Remit_No#'
					AND CLP_ID = '#arguments.CLP_ID#'
					<cfif len(notfound_ICN) gt 0 >
						AND  ICN NOT IN (<cfqueryparam value = "#notfound_ICN#" CFSQLType ="CF_SQL_VARCHAR" list="yes">)
					</cfif>
			</cfquery>
			<cfif len(notfound_ICN) gt 0 >
				<cfreturn notfound_ICN>
			<cfelse>
				<cfreturn 'success'>
			</cfif>
	</cffunction>

	<cffunction name="deleteSelectedCron835Claims" access="remote" output="Yes" returnFormat="plain">
		<cfargument name="Remit_No" required="yes" default="">
		<cfargument name="CLP_ID" required="yes" default="">
		<cfif NOT len(trim(arguments.Remit_No)) OR NOT len(trim(arguments.CLP_ID))>
			<cfreturn "error">
		</cfif>
		<cfif listLen(arguments.Remit_No) NEQ listLen(arguments.CLP_ID)>
			<cfreturn "error">
		</cfif>
		<cfloop from="1" to="#listLen(arguments.Remit_No)#" index="i">
			<cfquery name="deleteCron835" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_lookup#.cron_835
				SET status = 1
				WHERE Agency_ID = <cfqueryparam value="#session.agencyid#" cfsqltype="CF_SQL_INTEGER">
				AND status = 0
				AND payment_pushed = 0
				AND Remit_No = <cfqueryparam value="#listGetAt(arguments.Remit_No, i)#" cfsqltype="CF_SQL_VARCHAR">
				AND CLP_ID = <cfqueryparam value="#listGetAt(arguments.CLP_ID, i)#" cfsqltype="CF_SQL_VARCHAR">
			</cfquery>
		</cfloop>
		<cfreturn "success">
	</cffunction>

	<cffunction name="removelistvaluefromclient"  access="remote" output="Yes" returnFormat= "plain">   
			<cfargument name="Invoice_ID" required="yes" default="0">
			 <cfset client.Invoice_ID = ListDeleteAt( client.Invoice_ID, ListFind(client.Invoice_ID,arguments.Invoice_ID,","), ",")  />
			 <cfcookie name="Reimbursment_#arguments.Invoice_ID#" value="0.00" expires="now"/>

			 <cfreturn "success" />

	</cffunction>

	<cffunction name="UpdatePaymentLock" access="remote" output="Yes" returnFormat="plain">
		<cfargument name="Payment_Id" required="yes" default="0">
		<cfargument name="Lock" required="yes" default="0">
		<cfif NOT (isDefined("Session.IsAgencyLogin") AND Session.IsAgencyLogin EQ 1)>
			<cfreturn "Unauthorized" />
		</cfif>
		<cfquery datasource="#Application.DataSrc#" result="upResult">
			UPDATE #Request.prefix_db_agency#.Payments SET
			Payment_Lock = <cfqueryparam value="#arguments.Lock#" cfsqltype="CF_SQL_INTEGER" />
			,Record_Modified_By = <cfqueryparam value="#Session.EmployeeId#" cfsqltype="CF_SQL_INTEGER" />
			,Record_Modified_Date = #now()#
			WHERE Payment_ID = <cfqueryparam value="#arguments.Payment_Id#" cfsqltype="CF_SQL_INTEGER" />
			AND Invoice_ID IN (SELECT Invoice_ID FROM #Request.prefix_db_agency#.Invoices WHERE Agency_ID = <cfqueryparam value="#session.AgencyId#" cfsqltype="CF_SQL_INTEGER" /> AND Deleted <> 1)
		</cfquery>
		<cfreturn "success" />
	</cffunction>

	<cffunction name="DeleteInvoicePayment"  access="remote" output="Yes" returnFormat= "plain">
		<cfargument name="Payment_Id" required="yes" default="0">
		<cfargument name="Invoice_Id" required="yes" default="0">
		<cfquery name="update_Invoice" datasource="#Application.DataSrc#" result="delResult">
			UPDATE #Request.prefix_db_agency#.Payments
			SET Deleted = <cfqueryparam value="1" cfsqltype="cf_sql_integer" />
			WHERE Payment_ID = <cfqueryparam value="#arguments.Payment_Id#" cfsqltype="CF_SQL_INTEGER" />
			 AND Invoice_ID = <cfqueryparam value="#arguments.Invoice_Id#" cfsqltype="CF_SQL_INTEGER" />
			 AND (IFNULL(Payment_Lock,0) <> 1)
		</cfquery>
		<cfif delResult.recordCount EQ 0>
			<cfreturn "Payment is locked and cannot be deleted." />
		</cfif>
		<cfreturn "Success" />
	</cffunction>
	
	<cffunction name="AddPaymentHistory"  access="remote" output="Yes" returnFormat= "plain">
		<cfargument name="Payment_ID" required="yes" default="0">
		<cfquery  datasource="#Application.DataSrc#" name="getcolumns">
				SELECT   COLUMN_NAME 
				    FROM INFORMATION_SCHEMA.COLUMNS
				 WHERE TABLE_SCHEMA='#Request.prefix_db_agency#' AND TABLE_NAME  = 'Payments'
				 AND COLUMN_NAME NOT IN ('cdate_cdarte')
		</cfquery>
		<cfset myList = ValueList(getcolumns.COLUMN_NAME)>
		<cfquery  datasource="#Application.DataSrc#" name="AddPaymentsHistory">
			INSERT INTO #Request.prefix_db_agency#.Payments_history
			(#myList#)
			SELECT   #myList#  FROM  #Request.prefix_db_agency#.Payments
			WHERE Payment_ID IN (<cfqueryparam value = "#arguments.Payment_ID#" CFSQLType ="cf_sql_integer" list="yes">)
		</cfquery>
		<cfquery datasource="#Application.DataSrc#" name="Last_Payments">
 	      	SELECT LAST_INSERT_ID() as LastInsertID
      	</cfquery>
      	<cfset Pay_his_ID =  Last_Payments.LastInsertID />
      	<cfquery datasource="#Application.DataSrc#" name="Update_Payments_history">
 	      		UPDATE #Request.prefix_db_agency#.Payments_history 
 	      		SET record_timestamp = #now()#
 	      		WHERE Pay_his_ID = #Pay_his_ID#
      	</cfquery>

	</cffunction>

	<cffunction name="AddInvoiceHistory"  access="remote" output="Yes" returnFormat= "plain">
		<cfargument name="Invoice_ID" required="yes" default="0">
		<!--- Guard against empty/non-numeric ID lists to avoid queryparam failures. --->
		<cfset var invoiceIdList = trim(arguments.Invoice_ID) />
		<cfset invoiceIdList = reReplace(invoiceIdList, "[^0-9,]", "", "all") />
		<cfset invoiceIdList = reReplace(invoiceIdList, ",{2,}", ",", "all") />
		<cfset invoiceIdList = reReplace(invoiceIdList, "^,|,$", "", "all") />
		<cfif NOT len(invoiceIdList)>
			<cfreturn "" />
		</cfif>
		<cftry>
			<cfquery  datasource="#Application.DataSrc#" name="getcolumns">
					SELECT   COLUMN_NAME 
					    FROM INFORMATION_SCHEMA.COLUMNS
					 WHERE TABLE_SCHEMA='#Request.prefix_db_agency#' AND TABLE_NAME  = 'Invoices'
					 AND COLUMN_NAME NOT IN ('cdate_cdarte');
			</cfquery>
			<cfset myList = ValueList(getcolumns.COLUMN_NAME)>
			<cfif len(trim(myList))>
				<cfquery  datasource="#Application.DataSrc#" name="AddInvoicesHistory">
					INSERT INTO #Request.prefix_db_agency#.Invoices_history
					(#myList#)
					SELECT   #myList#  FROM  #Request.prefix_db_agency#.Invoices
					WHERE Invoice_ID IN (<cfqueryparam value = "#invoiceIdList#" CFSQLType ="cf_sql_integer" list="yes">)
				</cfquery>
				<cfif isDefined("AddInvoicesHistory.recordcount") AND AddInvoicesHistory.recordcount GT 0>
					<cfquery datasource="#Application.DataSrc#" name="Last_Inv">
		 	      	SELECT LAST_INSERT_ID() as LastInsertID
		      	</cfquery>
		      	<cfset Inv_his_ID =  Last_Inv.LastInsertID />
		      	<cfif isNumeric(Inv_his_ID) AND Inv_his_ID GT 0>
			      	<cfquery datasource="#Application.DataSrc#" name="Update_Payments_history">
			 	      		UPDATE #Request.prefix_db_agency#.Invoices_history 
			 	      		SET record_timestamp = #now()#
			 	      		WHERE Inv_his_ID = #Inv_his_ID#
			      	</cfquery>
		      	</cfif>
				</cfif>
			</cfif>
			<cfcatch>
				<cfreturn "" />
			</cfcatch>
		</cftry>
	</cffunction>

	<cffunction name="isInvoiceF298F299ReportAllowed" access="public" returntype="boolean" output="false">
		<cfset var allowedIp = "3.217.216.133" />
		<cfset var clientIp = trim(CGI.REMOTE_ADDR) />
		<cfif structKeyExists(CGI, "HTTP_X_FORWARDED_FOR") AND len(trim(CGI.HTTP_X_FORWARDED_FOR))>
			<cfset clientIp = trim(listFirst(CGI.HTTP_X_FORWARDED_FOR, ",")) />
		</cfif>
		<cfreturn clientIp EQ allowedIp />
	</cffunction>

	<cffunction name="parseMoneyValue" access="private" returntype="numeric">
		<cfargument name="value" type="any" required="true">
		<cfset var cleaned = trim(toString(arguments.value)) />
		<cfset cleaned = replace(cleaned, "$", "", "all") />
		<cfset cleaned = replace(cleaned, ",", "", "all") />
		<cfif len(cleaned) EQ 0 OR NOT isNumeric(cleaned)>
			<cfreturn 0 />
		</cfif>
		<cfreturn round(val(cleaned) * 100) / 100 />
	</cffunction>

	<cffunction name="saveInvoiceF298F299" access="remote" returnFormat="json" output="false">
		<cfargument name="invoice_id" type="numeric" required="true">
		<cfargument name="assmt_id" type="numeric" required="false" default="0">
		<cfargument name="contract_total" type="string" required="true">
		<cfargument name="f299" type="string" required="true">
		<cfargument name="f298" type="string" required="true">

		<cfset var result = {
			"SUCCESS": false,
			"MESSAGE": "",
			"INVOICE_ID": arguments.invoice_id,
			"CONTRACT_TOTAL": 0,
			"F299": 0,
			"F298": 0
		} />

		<cfif NOT structKeyExists(session, "AgencyId") OR NOT isNumeric(session.AgencyId)>
			<cfset result.MESSAGE = "Session expired. Please log in again." />
			<cfreturn result />
		</cfif>

		<!--- <cfif NOT isInvoiceF298F299ReportAllowed()>
			<cfset result.MESSAGE = "Access denied. This report is not available from your current location." />
			<cfreturn result />
		</cfif> --->

		<cfset var contractTotalVal = parseMoneyValue(arguments.contract_total) />
		<cfset var f299Val = parseMoneyValue(arguments.f299) />
		<cfset var f298Val = parseMoneyValue(arguments.f298) />

		<cfquery name="chkInv" datasource="#Application.DataSrc#">
			SELECT i.Invoice_Id, IFNULL(i.Invoice_Lock, 0) AS Invoice_Lock
			FROM #Request.prefix_db_agency#.Invoices i
			WHERE i.Invoice_Id = <cfqueryparam value="#arguments.invoice_id#" cfsqltype="cf_sql_integer">
			AND i.Agency_Id = <cfqueryparam value="#session.AgencyId#" cfsqltype="cf_sql_integer">
			AND i.Deleted <> 1
		</cfquery>

		<cfif chkInv.recordcount EQ 0>
			<cfset result.MESSAGE = "Invoice not found." />
			<cfreturn result />
		</cfif>
		<!--- <cfif chkInv.Invoice_Lock EQ 1>
			<cfset result.MESSAGE = "This invoice is locked and cannot be edited." />
			<cfreturn result />
		</cfif>--->

		<cfset AddInvoiceHistory(arguments.invoice_id) />

		<cfquery name="updInv" datasource="#Application.DataSrc#">
			UPDATE #Request.prefix_db_agency#.Invoices
			SET ContractTotal = <cfqueryparam value="#contractTotalVal#" cfsqltype="cf_sql_decimal" scale="2">,
				Record_Modified_By = <cfqueryparam value="#Session.EmployeeId#" cfsqltype="cf_sql_varchar">,
				Record_Modified_Date = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
			WHERE Invoice_Id = <cfqueryparam value="#arguments.invoice_id#" cfsqltype="cf_sql_integer">
			AND Agency_Id = <cfqueryparam value="#session.AgencyId#" cfsqltype="cf_sql_integer">
			AND IFNULL(Invoice_Lock, 0) <> 1
		</cfquery>

		<cfif arguments.assmt_id GT 0>
			<cfquery name="updAssmt" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.pAssessments
				SET F299 = <cfqueryparam value="#f299Val#" cfsqltype="cf_sql_decimal" scale="2">,
					F298 = <cfqueryparam value="#f298Val#" cfsqltype="cf_sql_decimal" scale="2">
				WHERE Assmt_ID = <cfqueryparam value="#arguments.assmt_id#" cfsqltype="cf_sql_integer">
				AND Status = 0
			</cfquery>
		</cfif>

		<cfset result.SUCCESS = true />
		<cfset result.MESSAGE = "Invoice values saved successfully." />
		<cfset result.CONTRACT_TOTAL = contractTotalVal />
		<cfset result.F299 = f299Val />
		<cfset result.F298 = f298Val />
		<cfreturn result />
	</cffunction>


</cfcomponent> 