<cfparam name="form.Status" default="0">
<cfparam name="form.Authno_Placeholder" default="0">
<cfparam name="form.Assessments" default="0">
<cfparam name="form.no_assessments" default="0">
<cfparam name="form.prn_visits" default="0">
<cfparam name="form.Visitfreq_Placeholder" default="0">
<cfparam name="form.visit_withoutorders" default="0">
<cfparam name="form.getauthweeks" default="0">
<cfparam name="form.showSimplifiedForm" default="false">

<!--- Set default values for simplified form fields if they're not provided --->
<cfif form.showSimplifiedForm EQ true>
    <cfparam name="form.Auth_No" default="">
    <cfparam name="form.Date_Start" default="">
    <cfparam name="form.Date_End" default="">
    <cfparam name="form.Total_Visits" default="0">
    <cfparam name="form.visit_freq" default="0">
    <cfparam name="form.visits_track_auth" default="">
    <cfparam name="form.Notes" default="">
</cfif>

<!--- Validate and clean Auth_No field to prevent encoding issues --->
<cfif isDefined("form.Auth_No") AND form.Auth_No NEQ "">
    <!--- Remove any non-ASCII characters that might cause encoding issues --->
    <cfset form.Auth_No = REReplace(form.Auth_No, "[^\x20-\x7E]", "", "ALL")>
    <!--- Trim whitespace --->
    <cfset form.Auth_No = Trim(form.Auth_No)>
</cfif>
<cfset form.Record_Creation_Date = "#Now()#" />
<cfset form.Record_Created_By = #session.employeeid# />
<cfset form.Record_Mod_Date = #Now()# />
<cfset form.Record_Mod_By = #session.employeeid# />
<cfset DoCommit = 1>
<cfset form.ID  = decrypt(#session.cs.enc_patientid#,#application.enckey#,"AES","Hex") />  
<cfif form.no_assessments EQ 1>
    <cfset form.Assmt_ID = 0 />
<cfelse>
    <cfset form.Assmt_ID = ListFirst(form.Assessments, "~") />
</cfif>
<!--- Initialize getOldAuth query variable --->
<cfset getOldAuth = queryNew("PtPayer_ID") />

<cfif form.Auth_ID EQ 0>  
    <cftransaction>
        <cftry>
            <cfquery  name="getauth" datasource="#Application.DataSrc#">
                       SELECT IFNULL(MAX(Auth_ID),0)+1 As pAuth_ID FROM #Request.prefix_db_agency#.pAuths 
            </cfquery>
            <cfset pAuth_ID =  #getauth.pAuth_ID# />

           <cfcatch>
                <cfset DoCommit = 0>
                <cftransaction action="rollback" />
            </cfcatch>
        </cftry>
        <cfif DoCommit EQ 1>
            <cftransaction action="commit" />
        </cfif>            
   </cftransaction>
<cfelse>
        <!--- Get the old authorization to check if payer has changed --->
        <cfquery name="getOldAuth" datasource="#Application.DataSrc#">
           SELECT PtPayer_ID FROM #Request.prefix_db_agency#.pAuths 
           WHERE Auth_ID = <cfqueryparam VALUE="#form.Auth_ID#"  cfsqltype="cf_sql_integer">
           AND Status = 0
           ORDER BY Date_Create DESC
           LIMIT 1
        </cfquery>
        
        <cfquery name="update_pAdmit" datasource="#Application.DataSrc#"  result="result">
           UPDATE #Request.prefix_db_agency#.pAuths SET 
           <cfif form.Status EQ 0 >
             Status   = <cfqueryparam VALUE="3"  cfsqltype="cf_sql_integer">,    
           <cfelse>
              Status   = <cfqueryparam VALUE="3"  cfsqltype="cf_sql_integer">,    
           </cfif>  
           Date_Change = <cfqueryparam VALUE="#form.Record_Mod_Date#"  cfsqltype="cf_sql_timestamp">,
           Change_by = <cfqueryparam VALUE="#form.Record_Mod_By#"  cfsqltype="cf_sql_integer">
           WHERE  Patient_ID = <cfqueryparam VALUE="#form.ID#"  cfsqltype="cf_sql_integer">
           AND AutoAuth_ID = <cfqueryparam VALUE="#form.AutoAuth_ID#"  cfsqltype="cf_sql_integer">
        </cfquery>
        <cfset pAuth_ID =  #form.Auth_ID# />
</cfif>

<cfif (NOT isDefined("form.ptpay_ID") OR Val(form.ptpay_ID) EQ 0) AND isDefined("form.PtPayer_ID") AND Len(Trim(form.PtPayer_ID)) GT 0>
    <cfset form.ptpay_ID = ListFirst(form.PtPayer_ID, "~") />
</cfif>

<!--- #10370: Medicare (pPayer.M0150=1) + Util_Force + F300 HIPPS avg - cap total auth visits per Assmt_ID (all skills) --->
<cfif isDefined("form.ptpay_ID") AND Val(form.ptpay_ID) GT 0 AND Val(form.Assmt_ID) GT 0 AND form.no_assessments NEQ 1>
    <cfquery name="getUtilForcePayer" datasource="#Application.DataSrc#">
        SELECT pPayer.M0150, pPtPayer.Util_Force
        FROM #Request.prefix_db_agency#.pPtPayer pPtPayer
        JOIN #Request.prefix_db_agency#.pPayer pPayer ON pPayer.Pay_ID = pPtPayer.Payer_ID AND pPayer.Status = 0
        WHERE pPtPayer.PtPayer_ID = <cfqueryparam value="#form.ptpay_ID#" cfsqltype="cf_sql_integer">
        AND pPtPayer.Status = 0
        LIMIT 1
    </cfquery>
    <cfset authUtilComp = CreateObject("component", "components.general.authorization").init() />
    <cfset effectiveUtilForce = 0 />
    <cfif getUtilForcePayer.recordcount GT 0>
        <cfset effectiveUtilForce = authUtilComp.getEffectiveUtilForce(getUtilForcePayer.Util_Force, getUtilForcePayer.M0150) />
    </cfif>
    <!--- 1) Util_Force = 1 (incl. Medicare default) and related pPayer.M0150 = 1 (Medicare) --->
    <cfif getUtilForcePayer.recordcount GT 0
        AND effectiveUtilForce EQ 1
        AND Left(Trim(getUtilForcePayer.M0150), 1) EQ "1"
        AND Left(Trim(getUtilForcePayer.M0150), 2) NEQ "10">
        <cfquery name="getUtilForceAssessment" datasource="#Application.DataSrc#">
            SELECT F300, F297
            FROM #Request.prefix_db_agency#.pAssessments
            WHERE Assmt_ID = <cfqueryparam value="#form.Assmt_ID#" cfsqltype="cf_sql_integer">
            AND Status = 0
            LIMIT 1
        </cfquery>
        <cfif getUtilForceAssessment.recordcount GT 0 AND Len(Trim(getUtilForceAssessment.F300)) GT 0>
            <cfset hippsAvgF300 = 0 />
            <cfset hippsAvgF297 = 0 />
            <cfquery name="getUtilForceHippsAvgF300" datasource="#Application.DataSrc#">
                SELECT IFNULL(Total_skilled, 0) AS Total_skilled
                FROM #Request.prefix_db_lookup#.CW_Visit_Utilization
                WHERE HIPPS_Code = <cfqueryparam value="#Trim(getUtilForceAssessment.F300)#" cfsqltype="cf_sql_varchar">
                LIMIT 1
            </cfquery>
            <cfif getUtilForceHippsAvgF300.recordcount GT 0>
                <cfset hippsAvgF300 = Val(getUtilForceHippsAvgF300.Total_skilled) />
            </cfif>
            <cfif Len(Trim(getUtilForceAssessment.F297)) GT 0>
                <cfquery name="getUtilForceHippsAvgF297" datasource="#Application.DataSrc#">
                    SELECT IFNULL(Total_skilled, 0) AS Total_skilled
                    FROM #Request.prefix_db_lookup#.CW_Visit_Utilization
                    WHERE HIPPS_Code = <cfqueryparam value="#Trim(getUtilForceAssessment.F297)#" cfsqltype="cf_sql_varchar">
                    LIMIT 1
                </cfquery>
                <cfif getUtilForceHippsAvgF297.recordcount GT 0>
                    <cfset hippsAvgF297 = Val(getUtilForceHippsAvgF297.Total_skilled) />
                </cfif>
            </cfif>
            <cfset hippsAvgVisits = hippsAvgF300 + hippsAvgF297 />
            <!--- 2) F300/F297 HIPPS map to CW_Visit_Utilization.Total_Skilled --->
            <cfif hippsAvgVisits GT 0>
                <!--- 3) total authorized visits per pAuth.Assmt_ID (all skills) --->
                <cfquery name="getAssmtAuthVisitSum" datasource="#Application.DataSrc#">
                    SELECT IFNULL(SUM(Total_Visits), 0) AS total_visits
                    FROM #Request.prefix_db_agency#.pAuths
                    WHERE Assmt_ID = <cfqueryparam value="#form.Assmt_ID#" cfsqltype="cf_sql_integer">
                    AND Status = 0
                </cfquery>
                <cfset oldAuthVisits = 0 />
                <cfif Val(form.Auth_ID) GT 0>
                    <cfquery name="getCurrentAuthVisits" datasource="#Application.DataSrc#">
                        SELECT IFNULL(Total_Visits, 0) AS Total_Visits
                        FROM #Request.prefix_db_agency#.pAuths
                        WHERE Auth_ID = <cfqueryparam value="#form.Auth_ID#" cfsqltype="cf_sql_integer">
                        AND Status = 0
                        LIMIT 1
                    </cfquery>
                    <cfif getCurrentAuthVisits.recordcount GT 0>
                        <cfset oldAuthVisits = Val(getCurrentAuthVisits.Total_Visits) />
                    </cfif>
                </cfif>
                <cfset projectedAuthVisits = Val(getAssmtAuthVisitSum.total_visits) - oldAuthVisits + Val(form.Total_Visits) />
                <!--- 4) total visits for Assmt_ID is greater than HIPPS Total_Skilled --->
                <cfif projectedAuthVisits GT hippsAvgVisits>
                    <div class="portlet box red">
                        <div class="portlet-title">
                            <div class="caption"><i class="fa fa-exclamation-triangle"></i> Authorization Not Saved</div>
                        </div>
                        <div class="portlet-body">
                            <h4>Visits exceeds average for this HIPPS Score. Contact Clinical Director.</h4>
                            <input class="btn blue" type="button" value="Go Back" onClick="history.back()">
                        </div>
                    </div>
                    <cfabort>
                </cfif>
            </cfif>
        </cfif>
    </cfif>
</cfif>

<cftransaction>
    <cftry>
        <cfif form.Rev_ID EQ ''>
          <cfset  form.Rev_ID  = 0 />
        </cfif>
        <cfif form.Total_Visits EQ ''>
          <cfset  form.Total_Visits  = 0 />
        </cfif>
        <cfparam name="form.visit_freq" default="0" />
        <cfif form.visit_freq EQ ''>
          <cfset  form.visit_freq  = 0 />
        </cfif>
        <cfif form.visit_withoutorders EQ ''>
          <cfset  form.visit_withoutorders  = 0 />
        </cfif>

        

        <cfquery name="getRevenue" datasource="#Application.DataSrc#">
            SELECT * FROM #Request.prefix_db_agency#.pRevenue_Code 
            WHERE Rev_CodeID = <cfqueryparam VALUE="#form.Rev_ID#"  cfsqltype="cf_sql_integer">
        </cfquery>

            <cfset CMSOrder_ID  =  0 />
            <cfset updating_reason = '' />
            <cfif form.AutoAuth_ID NEQ 0 >
                <cfquery name="getauths" datasource="#Application.DataSrc#">
                    SELECT * FROM #Request.prefix_db_agency#.pAuths 
                    WHERE AutoAuth_ID = <cfqueryparam VALUE="#form.AutoAuth_ID#"  cfsqltype="cf_sql_integer">
                </cfquery>
                <cfif form.visit_freq EQ getauths.visit_freq OR  form.Total_Visits EQ getauths.Total_Visits>
                    <cfset CMSOrder_ID = #getauths.CMSOrder_ID# />
                <cfelse>
                    <cfset updating_reason = 'Authorization changes of ' &  #getRevenue.Visit_Type# 
                        & " skill Total Visits: "& #form.Total_Visits#  & " and  Visit Freq: " & #form.visit_freq#  &"<br>" />
                </cfif>
                <cfif form.prn_visits NEQ getauths.prn_visits >
                     <cfset CMSOrder_ID  =  0 />
                    <cfset updating_reason = updating_reason & 'Authorization PRN Visits: '  & #form.prn_visits#  &"<br>" />
                <cfelseif CMSOrder_ID NEQ 0>
                     <cfset CMSOrder_ID = #getauths.CMSOrder_ID# />   
                </cfif>

            </cfif>
            <cfscript>
                    request.ass = CreateObject("component","components.general.assessments").init();
                    getgoalsuccess = request.ass.updategoals_visit(#form.Assmt_ID#);
            </cfscript>

            <cfquery name="InsertingpAuths"  datasource="#Application.DataSrc#"  result="result">
               INSERT INTO #Request.prefix_db_agency#.pAuths (Auth_ID, Patient_ID, Assmt_ID, PtPayer_ID, Elig_ID,
                CMSOrder_ID, Status, Description,
                <cfif form.Auth_No neq ''>Auth_No,</cfif> 
                Authno_Placeholder,Visitfreq_Placeholder,visits_track_auth,
                Date_Start, Date_End, Rev_ID, Skill, Total_Visits, visit_freq,  prn_visits,  Notes,
                 <cfif updating_reason NEQ ''>updating_reason,</cfif> visit_withoutorders,
                  Date_Create, Created_by, Date_Change, Change_by
                    )
                VALUES
                ( 
                  <cfqueryparam VALUE="#pAuth_ID#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#form.ID#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#form.Assmt_ID#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#form.ptpay_ID#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="0"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#CMSOrder_ID#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#form.Status#"  cfsqltype="cf_sql_integer">,
                   <cfqueryparam VALUE="#form.Description#"  cfsqltype="cf_sql_varchar">,
                  <cfif form.Auth_No neq ''><cfqueryparam VALUE="#form.Auth_No#" cfsqltype="cf_sql_varchar">,</cfif>
                  <cfqueryparam VALUE="#form.Authno_Placeholder#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#form.Visitfreq_Placeholder#"  cfsqltype="cf_sql_integer">,
                  <cfif form.visits_track_auth NEQ ''>'#Trim(form.visits_track_auth)#'<cfelse>NULL</cfif>,
                  <cfif form.showSimplifiedForm EQ true OR form.Date_Start EQ ''>NULL<cfelse><cfqueryparam VALUE="#form.Date_Start#"  cfsqltype="cf_sql_date"></cfif>,
                  <cfif form.showSimplifiedForm EQ true OR form.Date_End EQ ''>NULL<cfelse><cfqueryparam VALUE="#form.Date_End#"  cfsqltype="cf_sql_date"></cfif>,
                  <cfqueryparam VALUE="#form.Rev_ID#"  cfsqltype="cf_sql_integer" >,
                  <cfqueryparam VALUE="#getRevenue.Visit_Type#"  cfsqltype="cf_sql_varchar">,
                  <cfqueryparam VALUE="#form.Total_Visits#"  cfsqltype="cf_sql_integer" >,
                  <cfqueryparam VALUE="#form.visit_freq#"  cfsqltype="cf_sql_integer" >,
                  <cfif form.prn_visits NEQ ''><cfqueryparam VALUE="#form.prn_visits#"  cfsqltype="cf_sql_integer" ><cfelse>0</cfif>,
                  <cfqueryparam VALUE="#form.Notes#"  cfsqltype="cf_sql_varchar">,
                  <cfif updating_reason NEQ ''> <cfqueryparam VALUE="#updating_reason#"  cfsqltype="cf_sql_varchar">,</cfif>
                  <cfif form.visit_withoutorders NEQ ''><cfqueryparam VALUE="#form.visit_withoutorders#"  cfsqltype="cf_sql_integer" ><cfelse>0</cfif>,  
                  <cfqueryparam VALUE="#form.Record_Creation_Date#"  cfsqltype="cf_sql_timestamp">,
                  <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">,
                  <cfqueryparam VALUE="#form.Record_Creation_Date#"  cfsqltype="cf_sql_timestamp">,
                  <cfqueryparam VALUE="#session.employeeid#"  cfsqltype="cf_sql_integer">
                )
            </cfquery>
            <!--- Update schedules' payer_id and skill if payer or skill has changed --->
            <cfif form.Auth_ID NEQ 0 AND getOldAuth.recordcount GT 0>
                <cfset oldPtPayer_ID = getOldAuth.PtPayer_ID />
                <cfset newPtPayer_ID = form.ptpay_ID />
                <cfset newSkill = getRevenue.Visit_Type />
                
                <!--- Get old authorization skill --->
                <cfquery name="getOldAuthSkill" datasource="#Application.DataSrc#">
                    SELECT Skill FROM #Request.prefix_db_agency#.pAuths 
                    WHERE Auth_ID = <cfqueryparam VALUE="#pAuth_ID#"  cfsqltype="cf_sql_integer">
                    AND Status = 3
                    ORDER BY Date_Change DESC
                    LIMIT 1
                </cfquery>
                <cfset oldSkill = "" />
                <cfif getOldAuthSkill.recordcount GT 0>
                    <cfset oldSkill = getOldAuthSkill.Skill />
                </cfif>
                
                <cfif (isDefined("form.ptpay_ID") AND form.ptpay_ID NEQ "" AND oldPtPayer_ID NEQ newPtPayer_ID) OR (oldSkill NEQ "" AND oldSkill NEQ newSkill)>
                    <cfquery name="updateSchedulesPayerSkill" datasource="#Application.DataSrc#">
                        UPDATE #Request.prefix_db_agency#.pSchedules 
                        SET 
                        <cfif isDefined("form.ptpay_ID") AND form.ptpay_ID NEQ "" AND oldPtPayer_ID NEQ newPtPayer_ID>
                            PtPayer_ID = <cfqueryparam VALUE="#newPtPayer_ID#"  cfsqltype="cf_sql_integer">,
                        </cfif>
                        <cfif oldSkill NEQ "" AND oldSkill NEQ newSkill>
                            Skill = <cfqueryparam VALUE="#newSkill#"  cfsqltype="cf_sql_varchar">,
                        </cfif>
                            Date_Change = <cfqueryparam VALUE="#form.Record_Mod_Date#"  cfsqltype="cf_sql_timestamp">,
                            Change_by = <cfqueryparam VALUE="#form.Record_Mod_By#"  cfsqltype="cf_sql_integer">
                        WHERE Auth_ID = <cfqueryparam VALUE="#pAuth_ID#"  cfsqltype="cf_sql_integer">
                        AND Status = 0
                    </cfquery>
                </cfif>
            </cfif>
            
            <cfset strating_date = DateFormat(form.Date_Start,"yyyy-mm-dd") />
            <cfset ending_date = DateFormat(form.Date_End,"yyyy-mm-dd")/>
            <cfinclude template="authweeks_insert.cfm">
            <cfquery name="Getass" datasource="#Application.DataSrc#">
                SELECT *
                FROM  #Request.prefix_db_agency#.pAssessments
                WHERE Assmt_ID = <cfqueryparam value = "#form.Assmt_ID#" CFSQLType ="CF_SQL_INTEGER"> 
                AND Status = 0
                ORDER BY AutoAssmt_ID DESC 
            </cfquery>
            <cfif form.no_assessments EQ 1>
                <cfset encautoass_id = 0 />   
                <cfset encadmit_id   = 0 />
            <cfelse>
                <cfset encautoass_id= encrypt(#Getass.AutoAssmt_ID#,#Application.enckey#,"AES","Hex") />   
                <cfset encadmit_id= encrypt(#Getass.Admit_ID#,#Application.enckey#,"AES","Hex") />
            </cfif>        
            <cfset encass_id= encrypt(#form.Assmt_ID#,#Application.enckey#,"AES","Hex") />  
            <cfset enauth_id= encrypt(#pAuth_ID#,#Application.enckey#,"AES","Hex") />   
        <cfcatch>
            <cfset DoCommit = 0>
            <cftransaction action="rollback" />
             <cfmail to="#request.send_errors_to#" from="error@myhomecarebiz.com" subject="#Application.ServerName#  Error: #cfcatch#" type="html">
                 <cfdump var="#form#">
                <cfdump var="#cfcatch#">
            </cfmail>
            <cfabort>
        </cfcatch>
    </cftry>
    <cfif DoCommit EQ 1>
        <cftransaction action="commit" />
    </cfif>            
</cftransaction>
<!--- <cfif CGI.REMOTE_ADDR EQ '103.143.7.161'>
<cfabort>
</cfif> --->
<cfif form.Auth_ID EQ 0>  
    <!--- Check action type and redirect accordingly --->
    <cfif isDefined("form.actionType") AND form.actionType EQ "add_and_schedule">
        <!--- Redirect to add schedule page --->
        <cflocation url="/schedules/index.cfm?aMenu=schedules&page=schedules&cat=&rpt=addschedule&restrict=0&SID=0&PID=#session.cs.enc_patientid#&AID=#encass_id#&authid=#enauth_id#&frm=patient&visitdate=" addtoken="no">
    <cfelse>
        <!--- Show success message with options --->
        <div class="portlet box red">
            <div class="portlet-title">
                <div class="caption">
                    <i class="fa fa-gear"></i> Authorization Updated!
                </div>
                <div class="tools">
                    <a href="javascript:;" class="collapse"></a>
                </div>
            </div>
            <div class="portlet-body form">
                <div class="form-body">
                    <div class="form-group"><h4> Authorizations successfully updated.</h4></div>
                    <div class="row">
                        <cfoutput>
                          <div class="col-md-1">
                                <div class="form-group">
                                    <a  class="btn btn-default btn-sm" id="add_schedule" href="/schedules/index.cfm?aMenu=schedules&page=schedules&cat=&rpt=addvisit&restrict=0&SID=0&PID=#session.cs.enc_patientid#&AID=#encass_id#&authid=#enauth_id#&frm=patient&visitdate=">Add Visit</a>                                
                                </div>
                            </div>
                            <div class="col-md-1">
                                <div class="form-group">
                                    <a  class="btn btn-default btn-sm" id="add_schedule" href="/schedules/index.cfm?aMenu=schedules&page=schedules&cat=&rpt=addschedule&restrict=0&SID=0&PID=#session.cs.enc_patientid#&AID=#encass_id#&authid=#enauth_id#&frm=patient&visitdate=">Add Schedule</a>                                
                                </div>
                            </div>
                            <div class="col-md-2">
                                <div class="form-group">
                                     <a  class="btn btn-default btn-sm" id="viewproblist" href="/patientadmin_new/index.cfm?a=1&page=patient&px=y&ID=#session.cs.enc_patientid#&cat=Patient&autoassid=#encautoass_id#&admitid=#encadmit_id###authorization_#Getass.AutoAssmt_ID#"   >Go to Chart</a>
                                </div>
                            </div>
                        </cfoutput>
                    </div>
                </div>
            </div>
        </div>
        <cfabort>
    </cfif>
<cfelse>
    <cflocation url="/patientadmin_new/index.cfm?a=1&page=patient&px=y&ID=#session.cs.enc_patientid#&cat=authorizations&autoassid=#encautoass_id#&admitid=#encadmit_id#" addtoken="no">
</cfif>
<cfif CGI.REMOTE_ADDR EQ '121.200.49.65'>
    <cflocation url="#application.downloadpath#/patientadmin_new/index.cfm?page=patient&ID=#session.cs.enc_patientid#&cat=schedule" addtoken="no">
<cfelse>
<cflocation url="#application.downloadpath#/patientadmin_new/index.cfm?page=patient&ID=#session.cs.enc_patientid#&cat=authorizations" addtoken="no">
</cfif>
