
<cfif isdefined('form.PPAction') and form.PPAction neq ''>

<cfparam name="form.Status" default="0">
<cfparam name="form.Util_Force" default="0">
<cfset oldSub_HIC = "">

		<cfif form.PPAction eq 'new'>
			<cfquery  name="getpayer" datasource="#Application.DataSrc#">
		         SELECT IFNULL(MAX(PtPayer_ID),0)+1 As pPtPayer_ID FROM #Request.prefix_db_agency#.pPtPayer 
		    </cfquery>
		    <cfquery  name="geteligi" datasource="#Application.DataSrc#">
		         SELECT IFNULL(MAX(Elig_ID),0)+1 As pElig_ID FROM #Request.prefix_db_agency#.Eligibility 
		    </cfquery>
		    <cfset pElig_ID = #geteligi.pElig_ID# />
			<cfset pPtPayer_ID =  #getpayer.pPtPayer_ID# />
		<cfelseif form.PPAction eq 'update'>
			<cfquery name="GetOldPatientPayer" datasource="#Application.DataSrc#">
				SELECT Sub_HIC
				FROM #Request.prefix_db_agency#.pPtPayer
				WHERE PtPayer_ID = <cfqueryparam value="#form.PPID#" cfsqltype="cf_sql_integer">
				AND Patient_ID = <cfqueryparam value="#session.cs.patientid#" cfsqltype="cf_sql_integer">
				AND Status = <cfqueryparam value="0" cfsqltype="cf_sql_integer">
				LIMIT 1
			</cfquery>
			<cfif GetOldPatientPayer.recordcount GT 0>
				<cfset oldSub_HIC = trim(GetOldPatientPayer.Sub_HIC)>
			</cfif>
			<cfquery  name="geteligi" datasource="#Application.DataSrc#">
	         	SELECT *  FROM  #Request.prefix_db_agency#.Eligibility 
	         	WHERE Patient_ID = 	<cfqueryparam value = "#session.cs.patientid#" CFSQLType ="CF_SQL_INTEGER">
	         	AND  PtPayer_ID  =  <cfqueryparam value = "#form.PPID#"  CFSQLType ="CF_SQL_INTEGER"> 
	         	AND  Status  	 =  <cfqueryparam value = "0"  CFSQLType ="CF_SQL_INTEGER">
	    	</cfquery>
			<cfset pPtPayer_ID =  #form.PPID# />
			<cfset pElig_ID =  #geteligi.Elig_ID# />
		</cfif>

		<cfquery  datasource="#Application.DataSrc#" name="GetData">
			SELECT Pay_ID, Loc_ID, Status, Output, Payer_No, Submitter_ID, Receiver_ID, Pay_Name, Pay_Street, Pay_City, Pay_State, Pay_Zip, Pay_Phone, Pay_Contact, Identification_Code_Qualifier, Agency_Biller, Biller_First, Biller_Type, Biller_Last_or_Company, Biller_NPI, Biller_Submitter_ID, Pay_Website, Web_User, Web_Pass  
			FROM  #Request.prefix_db_agency#.pPayer 
			WHERE  Pay_ID = <cfqueryparam value = "#form.Payer_ID#" CFSQLType ="CF_SQL_INTEGER">
			<!--- AND Output = 'Medicare' --->
		    AND  Status = <cfqueryparam value = "0" CFSQLType ="CF_SQL_INTEGER">	
		</cfquery>

		<cfset finaldata = "">
		<cfset ctr = 0 />
		<cfset DATEFROM = #Now()#>
		<cfset DATETO = #DateAdd('d', 90,  Now())#>
		<cfset Eligiunique_ID = #NumberFormat( pElig_ID, "C000000000" )# />
		<!--- For remove zero using #NumberFormat( 1, "L999" )# --->
		<cfset creationdate = #DateFormat(Now(), "YYMMDD")# /> 
		<cfset creationtime = #DateFormat(Now(),"HHMM")# />

		<cfoutput query = "GetData">
			 <cfset finaldata = "ISA*00*          *00*          *ZZ*#LJustify(Submitter_ID,15)#*ZZ*#LJustify(Receiver_ID,15)#*#DateFormat(NOW(),"yymmdd")#*#creationtime#*^*00501*#Eligiunique_ID#*0*P*>~" & chr(13)& chr(10) &
			 "GS*HS*#Receiver_ID#*#Receiver_ID#*#DateFormat(NOW(),"yymmdd")#*#creationtime#*#getTimeZone.Natl_Provider_ID#*X*005010X279A1~"& chr(13)& chr(10) &     
             "ST*270*#Eligiunique_ID#*005010X279A1~"& chr(13)& chr(10) &
             "BHT*0022*13*#Eligiunique_ID#*#creationdate#*#creationtime#~"& chr(13)& chr(10) &
			 "HL*1**20*1~" & chr(13)& chr(10)>
			 <cfset finaldata = finaldata & "NM1*PR*2*#UCase(Pay_Name)#*****PI*#Payer_No#~" & chr(13)& chr(10) &
			 "HL*2*1*21*1~" & chr(13)& chr(10) &
 			 "NM1*1P*2*#UCase(getTimeZone.Agency_Name)#*****XX*#getTimeZone.Natl_Provider_ID#~" & chr(13)& chr(10) & 
 			 "HL*3*2*22*0~"& chr(13)& chr(10) &
			 "NM1*IL*1*#UCase(GetP.Pt_Last)#*#UCase(GetP.Pt_First)#****MI*#Form.Sub_HIC#~"& chr(13)& chr(10) />
			  <cfset finaldata = finaldata & "DMG*D8*#DateFormat(GetP.Pt_DOB,"yyyymmdd")#*#Left(GetP.Pt_Gender,1)#~" & chr(13)& chr(10) &
			 "DTP*291*RD8*#DateFormat(DATEFROM,"yyyymmdd")#-#DateFormat(DATETO,"yyyymmdd")#~" & chr(13)& chr(10) &
			 "EQ*42~" & chr(13)& chr(10) & 
 			 "EQ*30~" & chr(13)& chr(10) & 
 			 "SE*14*#Eligiunique_ID#~" & chr(13)& chr(10) & 
 			 "GE*1*#pElig_ID#~" & chr(13)& chr(10) & 
			 "IEA*1*#Eligiunique_ID#~"& chr(13)& chr(10) />
		 </cfoutput>

		

		
		<cfif (form.PPAction eq 'new' AND getTimeZone.svc_eligibility EQ 1)>
			<cfquery name="InsertEligibility" datasource="#Application.DataSrc#">
				Insert Into #Request.prefix_db_agency#.Eligibility
					(Patient_ID, PtPayer_ID, Status,batch, line270,Verification_Date,<!--- Start_Date,---> 
						Notes, Date_Create, Created_by, Date_Change, Change_by)
				VALUES
				(
					<cfqueryparam value = "#session.cs.patientid#" CFSQLType ="CF_SQL_INTEGER">,
					<cfqueryparam value = "#pPtPayer_ID#" CFSQLType ="CF_SQL_INTEGER">,
					<cfqueryparam value = "0" CFSQLType ="CF_SQL_INTEGER">,
					<cfqueryparam value = "1" CFSQLType ="CF_SQL_INTEGER">,
					<cfqueryparam value = "#finaldata#" CFSQLType ="CF_SQL_VARCHAR">,
					<!--- <cfqueryparam value="#DateFormat(now(),'yyyy-mm-dd')#" cfsqltype="cf_sql_date">, --->
					<cfqueryparam value="#DateFormat(now(),'yyyy-mm-dd')#" cfsqltype="cf_sql_date">,
					<cfqueryparam value = "Automated Eligibility Request Sent" 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> 
 
			<cfif getTimeZone.svc_eligibility EQ 1>
				<cftry>
						<cfset invoice= #GetP.Pt_First# >
						<cfset strFilePath = "/var/www/Inovalon_files/Eligibility_upload_files/" >
						<cfset CONTRO = #DateFormat(Now(),"YYMMDDHHMMSS")#>
						<cfset CONTROL = #session.agencyid#&'-'&#CONTRO# />
						<cfset filename= 'ELG'&#CONTROL#&'.270' />
						<cffile action="write" file="#strFilePath##filename#" output="#finaldata#" >
						 <cfset billingSFTP = createObject("component", "components.billing.billing_sftp") />
						 <cfset objFTPProperties = billingSFTP.getConnectionProperties(session.agencyid) />

						<cfftp action="open" connection="objConnection" attributeCollection="#objFTPProperties#" >
						<cfftp action="putfile" localfile="#strFilePath##filename#" remotefile="/incoming/eligibility/#filename#" connection="objConnection" >
						<cfftp action="putfile" localfile="#strFilePath##filename#" remotefile="/incoming/test/#filename#" connection="objConnection" >
						<cfftp action="close" connection="objConnection" > 		
						<!--- <cfif CGI.REMOTE_ADDR EQ '121.200.49.65'><cfabort></cfif>	--->	
						<cfcatch type="any">
					        <!--- Handle the error --->
					        <cfset errorMessage = cfcatch.message>
					        <cfset errorDetail = cfcatch.detail>
					        <cfif CGI.REMOTE_ADDR EQ '121.200.49.65'><cfdump var="#cfcatch#"><cfabort></cfif>			        
				        	<cfmail to= "velmurugan@myhomecarebiz.com,melissa@myhomecarebiz.com" from="error@myhomecarebiz.com" subject="#Application.ServerName# - Eligbiliy file Error:" type="html">
		                          Please find below error when we send eligibility file into Innovalon due to FTP connection error <br>
		                           <!--- Log the error or take other appropriate actions --->
							            FTP Error: #errorMessage#<br>
							            Error Details: #errorDetail#<br>
							       	<cfdump var ="#cfcatch#">
		                    </cfmail>
					    </cfcatch>
					 </cftry>
			</cfif>

		<cfelse>
			<cfquery name="UpdateEligibility" datasource="#Application.DataSrc#">
				UPDATE #Request.prefix_db_agency#.Eligibility
				SET line270 = <cfqueryparam value = "#finaldata#" CFSQLType ="CF_SQL_VARCHAR">,
					Date_Change = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">,
				    Change_by = <cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER">
				WHERE Patient_ID = <cfqueryparam value = "#session.cs.patientid#" CFSQLType ="CF_SQL_INTEGER">
				AND PtPayer_ID = <cfqueryparam value = "#pPtPayer_ID#" CFSQLType ="CF_SQL_INTEGER">
			</cfquery>		

		</cfif>
			


<cfif form.PPAction eq 'new'>
	<cfquery  name="getp" datasource="#Application.DataSrc#">
         SELECT IFNULL(MAX(PtPayer_ID),0)+1 As pPtPayer_ID FROM #Request.prefix_db_agency#.pPtPayer 
    </cfquery>
	<cfset pPtPayer_ID =  #getp.pPtPayer_ID# />
<cfelseif form.PPAction eq 'update'>
	<cfquery name="UpdatePatientPayer" datasource="#Application.DataSrc#">
		UPDATE #Request.prefix_db_agency#.pPtPayer SET 
		Status = <cfqueryparam value = "3" CFSQLType ="CF_SQL_INTEGER">,
		Record_Mod_Date =  <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">, 
		Change_by = <cfqueryparam value = "#session.employeeid#" CFSQLType ="CF_SQL_INTEGER">
		Where PtPayer_ID = <cfqueryparam value = "#form.PPID#" CFSQLType ="CF_SQL_INTEGER"> 
	</cfquery>
	<cfset pPtPayer_ID =  #form.PPID# />
</cfif>
	<cfif form.Pt_Relationship EQ '18 Self'>
		<cfset form.Sub_First =  #form.Sub_First_hidden#/>
		<cfset form.Sub_Last =  #form.Sub_Last_hidden#/>
		<cfset form.Sub_Mid =  #form.Sub_Mid_hidden#/>
		<cfset form.Sub_Street =  #form.Sub_Street_hidden#/>
		<cfset form.Sub_City =  #form.Sub_City_hidden#/>
		<cfset form.Sub_State =  #form.Sub_State_hidden#/>
		<cfset form.Sub_Zip =  #form.Sub_Zip_hidden#/>
		<cfset form.Sub_Gender =  #form.Sub_Gender_hidden#/>
		<cfset form.Sub_DOB =  #form.Sub_DOB_hidden#/>
	</cfif>
	<cfquery name="InsertPatientPayer" datasource="#Application.DataSrc#">
		Insert Into #Request.prefix_db_agency#.pPtPayer
			(PtPayer_ID,Patient_ID, Status, Payer_ID, Pt_Relationship,Sub_HIC, Sub_First,
			 Sub_Last, Sub_Mid, Sub_Street, Sub_City, Sub_State, Sub_Zip, Sub_Gender, Sub_DOB,
			  Plan_Program, Plan_type,MSP_code, Policy_Group_Number, Policy_Group_Name,
			 Payer_Responsibility, Util_Force, <!--- M0150, --->
			 <cfif form.Deductible_Amount NEQ "" >Deductible_Amount,</cfif>
			 Deductible_Met,
			  <cfif form.Copay_Amount NEQ "" >Copay_Amount,</cfif>
			  <cfif form.OP_Amount NEQ "" >OP_Amount,</cfif>
			  	OP_Amount_Met,
			   <cfif form.Coinsurance NEQ "" >Coinsurance,</cfif>
			   Date_Start, Date_End,
 			   <cfif form.Part_A_Start NEQ "" >Part_A_Start,</cfif>
 			   <cfif form.Part_A_Term NEQ "" >Part_A_Term,</cfif>
 			   <cfif form.Part_B_Start NEQ "" >Part_B_Start,</cfif>
 			   <cfif form.Part_B_Term NEQ "" >Part_B_Term,</cfif>
 			   <!--- <cfif form.Deductible_In_Net NEQ "" >Deductible_In_Net,</cfif> --->
 			   <cfif form.Deductible_Out_Net NEQ "" >Deductible_Out_Net,</cfif>
 			   <cfif form.Deductible_Remaining NEQ "" >Deductible_Remaining,</cfif>
 			   <!---<cfif form.Copay_In_Net NEQ "" >Copay_In_Net,</cfif> --->
 			   <cfif form.Copay_Out_Net NEQ "" >Copay_Out_Net,</cfif>
 			   <!---<cfif form.OP_In_Net NEQ "" >OP_In_Net,</cfif> --->
 			   <cfif form.OP_Out_Net NEQ "" >OP_Out_Net,</cfif>
			   <cfif form.OP_Remaining NEQ "" >OP_Remaining,</cfif>
			   <!---<cfif form.Coinsurance_In_Net NEQ "" >Coinsurance_In_Net,</cfif> --->
			   <cfif form.Coinsurance_Out_Net NEQ "" >Coinsurance_Out_Net,</cfif>
			  Record_Creation_Date, Created_by, Record_Mod_Date, Change_by)
		VALUES
		(
			<cfqueryparam value = "#pPtPayer_ID#" CFSQLType ="CF_SQL_INTEGER">,
			<cfqueryparam value = "#session.cs.patientid#" CFSQLType ="CF_SQL_INTEGER">,
			<cfqueryparam value = "#form.Status#" CFSQLType ="CF_SQL_INTEGER">,
			<cfqueryparam value = "#form.Payer_ID#" CFSQLType ="CF_SQL_INTEGER">,
			<cfqueryparam value = "#form.Pt_Relationship#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_HIC#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_First#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_Last#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_Mid#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_Street#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_City#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_State#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_Zip#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Sub_Gender#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#DATEFORMAT(form.Sub_DOB,"mm/dd/yyy")#" CFSQLType ="CF_SQL_DATE">,
			<cfqueryparam value = "#form.Plan_Program#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Plan_type#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.MSP_code#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Policy_Group_Number#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Policy_Group_Name#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Payer_Responsibility#" CFSQLType ="CF_SQL_VARCHAR">,
			<cfqueryparam value = "#form.Util_Force#" CFSQLType ="CF_SQL_INTEGER">,
			<!--- <cfqueryparam value = "#form.otherM0150#" CFSQLType ="CF_SQL_VARCHAR">, --->
			<cfif form.Deductible_Amount NEQ "" >
				<cfqueryparam value = "#form.Deductible_Amount#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<cfqueryparam value = "#form.Deductible_Met#" CFSQLType ="CF_SQL_INTEGER">,
			<cfif form.Copay_Amount NEQ "" >
				<cfqueryparam value = "#form.Copay_Amount#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<cfif form.OP_Amount NEQ "" >
				<cfqueryparam value = "#form.OP_Amount#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<cfqueryparam value = "#form.OP_Amount_Met#" CFSQLType ="CF_SQL_INTEGER">,
			<cfif form.Coinsurance NEQ "" >
				<cfqueryparam value = "#form.Coinsurance#" CFSQLType ="CF_SQL_INTEGER">,
			</cfif>
			<cfif form.primary_DateStart NEQ "" >
			  <cfqueryparam value = "#form.primary_DateStart#" CFSQLType ="CF_SQL_DATE">,
			<cfelse>
			  NULL,
			</cfif>
			<cfif form.primary_DateEnd NEQ "" >
			  <cfqueryparam value = "#form.primary_DateEnd#" CFSQLType ="CF_SQL_DATE">,
			<cfelse>
			  NULL,
			</cfif>
			<cfif form.Part_A_Start NEQ "" >
			  <cfqueryparam value = "#form.Part_A_Start#" CFSQLType ="CF_SQL_DATE">,
			</cfif>
			<cfif form.Part_A_Term NEQ "" >
			  <cfqueryparam value = "#form.Part_A_Term#" CFSQLType ="CF_SQL_DATE">,
			</cfif>
			<cfif form.Part_B_Start NEQ "" >
			  <cfqueryparam value = "#form.Part_B_Start#" CFSQLType ="CF_SQL_DATE">,
			</cfif>
			<cfif form.Part_B_Term NEQ "" >
			  <cfqueryparam value = "#form.Part_B_Term#" CFSQLType ="CF_SQL_DATE">,
			</cfif>

			<!--- <cfif form.Deductible_In_Net NEQ "" >
				<cfqueryparam value = "#form.Deductible_In_Net#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif> --->
			<cfif form.Deductible_Out_Net NEQ "" >
				<cfqueryparam value = "#form.Deductible_Out_Net#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<cfif form.Deductible_Remaining NEQ "" >
				<cfqueryparam value = "#form.Deductible_Remaining#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<!--- <cfif form.Copay_In_Net NEQ "" >
				<cfqueryparam value = "#form.Copay_In_Net#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif> --->
			<cfif form.Copay_Out_Net NEQ "" >
				<cfqueryparam value = "#form.Copay_Out_Net#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<!--- <cfif form.OP_In_Net NEQ "" >
				<cfqueryparam value = "#form.OP_In_Net#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif> --->
			<cfif form.OP_Out_Net NEQ "" >
				<cfqueryparam value = "#form.OP_Out_Net#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<cfif form.OP_Remaining NEQ "" >
				<cfqueryparam value = "#form.OP_Remaining#" scale="2" CFSQLType ="CF_SQL_DECIMAL">,
			</cfif>
			<!--- <cfif form.Coinsurance_In_Net NEQ "" >
				<cfqueryparam value = "#form.Coinsurance_In_Net#" CFSQLType ="CF_SQL_INTEGER">,
			</cfif> --->
			<cfif form.Coinsurance_Out_Net NEQ "" >
				<cfqueryparam value = "#form.Coinsurance_Out_Net#" CFSQLType ="CF_SQL_INTEGER">,
			</cfif>
			<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>

	<cfset newSub_HIC = trim(form.Sub_HIC)>
	<cfset memberIdChanged = false>
	<cfif form.PPAction EQ "update" AND oldSub_HIC NEQ newSub_HIC>
		<cfset memberIdChanged = true>
	</cfif>

	<cfif memberIdChanged>
		<cftry>
			<cfset evvPatientAuto = createObject("component", "components.evv.EVVPatientAutomation").init()>
			<cfset evvQueueResult = evvPatientAuto.requeuePatientClientOnDataChange(
				patientID = val(session.cs.patientid),
				agencyID = val(session.agencyid),
				triggerSource = "payer_member_id_update",
				createdBy = val(session.employeeid)
			)>
			<cflog file="EVVPatientAutomation" text="patient_payers_action patient #session.cs.patientid# member ID changed from '#oldSub_HIC#' to '#newSub_HIC#' - #evvQueueResult.message#">
			<cfcatch type="any">
				<cflog file="EVVPatientAutomation" text="patient_payers_action EVV requeue failed for patient #session.cs.patientid#: #cfcatch.message# #cfcatch.detail#">
			</cfcatch>
		</cftry>
	</cfif>

	<cfoutput>
		<cfset session.cs.enc_patientid = encrypt(#form.PatientID#,"54kczhzgHTj4a8n+SRZPyg==","AES","Hex") />
		<cflocation url="index.cfm?page=patient&ID=#session.cs.enc_patientid#&cat=patientpayers&tab=Payer" addtoken="no">
	</cfoutput>
<cfelse>
	<cfif isdefined('url.PPID') and isNumeric('#url.PPID#')>
		<cfquery name="PatientpayerDelete" datasource="#Application.DataSrc#">
			UPDATE #Request.prefix_db_agency#.pPtPayer SET Status = 2
			Where PtPayer_ID = '#Trim(url.PPID)#'
		</cfquery>
	</cfif>
<cfoutput>



<cflocation url="index.cfm?page=patient&ID=#session.cs.enc_patientid#&cat=patientpayers&tab=Payer" addtoken="no">

</cfoutput>
</cfif>