<cfparam default='' name='form.df' />
<cfparam default='' name='form.dt' />
<cfparam default='' name='form.emps' />
<cfparam default='p' name='url.pyType' />
<cfparam default='y' name='url.exported' />
<cfparam default='' name='url.pgnote_status' />
<!--- #10508: Evergreen (Agency 1195) custom payroll export; #10581 adds Unassigned Visit + HCPCS --->
<cfset isEvergreenPayrollExport = (isDefined("session.AgencyId") AND val(session.AgencyId) EQ 1195) />
<cfif structKeyExists(form, "pyType") AND len(trim(form.pyType))><cfset url.pyType = form.pyType /></cfif>
<cfif structKeyExists(form, "exported") AND len(trim(form.exported))><cfset url.exported = form.exported /></cfif>
<cfif isDefined("form.Schedule_Id") AND form.Schedule_Id NEQ "" AND find("@", form.Schedule_Id)>
	<cfset _payrollExportScheduleIds = "" />
	<cfloop list="#form.Schedule_Id#" index="_payrollExportSid">
		<cfset _payrollExportSid = listFirst(_payrollExportSid, "@") />
		<cfif isNumeric(_payrollExportSid)>
			<cfset _payrollExportScheduleIds = listAppend(_payrollExportScheduleIds, _payrollExportSid) />
		</cfif>
	</cfloop>
	<cfif len(_payrollExportScheduleIds)><cfset form.Schedule_Id = _payrollExportScheduleIds /></cfif>
</cfif>
<div class="portlet box blue">
	<div class="portlet-title">
		<div class="caption">
			<i class="fa fa-report"></i> Payroll Report Export
		</div>
		<div class="tools">
        	<a href="javascript:;" class="collapse">
			</a>
		</div>
	</div>
	<div class="portlet-body form">
	<br />
	<cfif isDefined("form.Schedule_Id") and form.Schedule_Id neq "">
		<cfquery  name='GetVisitsall' datasource='#Application.DataSrc#'>

		SELECT
                       a.Mileage_Rate
                      ,si.Schedule_Id
                      ,si.Emp_ID, si.Assmt_ID,an.Patient_ID
                      ,IFNULL(si.Emp_ID, 0) AS Schedule_Emp_ID
                      ,si.Visit_Date,si.Missed
                      ,DATE_FORMAT(si.Visit_Date, '%Y-%m-%d') vd
                      ,DATE_FORMAT(py.pay_date, '%Y-%m-%d') dd
                      ,si.Skill
                      ,si.Schedule_Id
                      ,LEFT(TIMEDIFF(EndTime,StartTime),2) hours
                      ,si.StartTime
                      ,si.EndTime
                      ,IFNULL(pProgress.Progress_ID,0 ) AS  Progress_ID
                      ,si.Progress_Note,si.pgnotesdraft
                      ,si.Travel travel
                       ,si.Total_EPay paid
                      ,si.Paperwork paper
                      ,si.Mileage miles
                      ,si.Mi_Pay AS PayMileage, si.Visit_Type 
                      ,e.Emp_ID
                      ,e.Emp_Last
                      ,e.Emp_First
                      ,e.Emp_Custom_1
                      ,e.Emp_Street1,e.Emp_City,e.Emp_State,e.Emp_Zip
                      ,ep.Pay_Rate
                      ,UPPER(ep.Measure) measure
                      ,p.Pt_Last pl
                      ,p.Pt_First pf
                      <cfif isEvergreenPayrollExport>
                      ,p.Pt_Agy_ID
                      ,p.Pt_Street
                      ,p.Pt_City
                      ,p.Pt_State
                      ,p.Pt_Zip
                      ,(SELECT DATE_FORMAT(pa.M0030_START_CARE_DT, '%m/%d/%Y')
                        FROM #Request.prefix_db_agency#.pAdmit pa
                        INNER JOIN #Request.prefix_db_agency#.pAssessments ass ON ass.Admit_ID = pa.Admit_ID
                          AND ass.Assmt_ID = si.Assmt_ID
                          AND ass.Status = 0
                        WHERE pa.Status = 0
                        LIMIT 1) AS patient_admit_date
                      ,(SELECT payr.Pay_Name
                        FROM #Request.prefix_db_agency#.pPtPayer pp
                        INNER JOIN #Request.prefix_db_agency#.pPayer payr ON payr.Pay_ID = pp.Payer_ID AND payr.Status = 0
                        WHERE pp.PtPayer_ID = si.PtPayer_ID AND pp.Status = 0
                        LIMIT 1) AS patient_payer_name
                      ,IFNULL(rc.HCPCS, '') AS HCPCS
                      </cfif>
                      ,py.id AS PayrollId, py.pay_type, ap.Description
                      ,py.Pay_Date,
                        <!--- #10571 --->
                        <cfinclude template="payroll_assessments_completed_sql.inc.cfm">
                        ,py.total_paid

                       FROM
                          #Request.prefix_db_lookup#.Agency a,
                      <cfif NOT isEvergreenPayrollExport>
                      #Request.prefix_db_lookup#.pEmployee e,
                      #Request.prefix_db_agency#.Employee_Payroll ep,
                     #Request.prefix_db_agency#.Agency_Payroll ap,
                      </cfif>
                      #Request.prefix_db_agency#.pPatients p,
                      #Request.prefix_db_agency#.pAssessments an, 
                      #Request.prefix_db_agency#.pSchedules si  
                          LEFT OUTER JOIN #Request.prefix_db_agency#.payroll py ON py.Schedule_Id = si.Schedule_Id
                           LEFT OUTER JOIN #Request.prefix_db_agency#.pProgress  ON pProgress.Schedule_Id = si.Schedule_Id
                          <cfif isEvergreenPayrollExport>
                          LEFT OUTER JOIN #Request.prefix_db_lookup#.pEmployee e ON e.Emp_ID = si.Emp_ID AND si.Emp_ID > 0
                          LEFT OUTER JOIN #Request.prefix_db_agency#.Employee_Payroll ep ON ep.Emp_ID = e.Emp_ID AND ep.EmpPay_Id = si.Pay_ID
                          LEFT OUTER JOIN #Request.prefix_db_agency#.Agency_Payroll ap ON ap.Payroll_Id = ep.Payroll_ID
                          LEFT OUTER JOIN #Request.prefix_db_agency#.pRevenue_Code rc ON rc.Rev_CodeID = si.HCPCS_ID AND rc.Status = 0
                          </cfif>
                          WHERE a.Agency_Id = '#session.AgencyId#'
                          <cfif form.df NEQ '' AND form.dt neq ''>
                          		AND si.Visit_Date BETWEEN #CreateODBCDate(form.df)# AND #CreateODBCDate(form.dt)#
                          <cfelse>
                          		AND si.Visit_Date BETWEEN #CreateODBCDate(url.df)# AND #CreateODBCDate(url.dt)#
                          </cfif>
                          AND si.Status = 0
                          <cfif NOT isEvergreenPayrollExport>
                          AND si.Emp_ID IS NOT NULL
                          AND si.Emp_ID > 0
                          </cfif>
                           AND si.Missed NOT IN (1,3)
                          <cfif form.Schedule_Id neq ''>
                          	AND (
								si.Schedule_Id IN (<cfqueryparam value="#form.Schedule_Id#" cfsqltype="cf_sql_integer" list="yes">)
								<cfif isEvergreenPayrollExport>
								OR IFNULL(si.Emp_ID, 0) = 0
								</cfif>
							)
                          </cfif>
                          <cfif url.pyType eq 'p'>
                                AND (
									py.Schedule_Id = si.Schedule_Id
									<cfif isEvergreenPayrollExport>
									OR IFNULL(si.Emp_ID, 0) = 0
									</cfif>
								)
                               <cfif url.exported neq 'y'>
                                  AND (py.exported = 'N' <cfif isEvergreenPayrollExport>OR IFNULL(si.Emp_ID, 0) = 0</cfif>)
                               </cfif>
                          <cfelseif url.pyType eq 'u'>
                              AND si.Schedule_Id NOT IN (SELECT Schedule_Id FROM #Request.prefix_db_agency#.payroll WHERE Schedule_Id = si.Schedule_Id)
                          </cfif>
                          <cfif NOT isEvergreenPayrollExport>
                          AND e.Emp_ID = si.Emp_ID
                          </cfif>
                      <cfif form.emps neq ''>
                            AND (e.Emp_ID IN (#form.emps#)
							<cfif isEvergreenPayrollExport>
							OR IFNULL(si.Emp_ID, 0) = 0
							</cfif>
							)
                      </cfif>
                      <cfif NOT isEvergreenPayrollExport>
                      AND ep.Emp_ID = e.Emp_ID
                      AND ep.EmpPay_Id = si.Pay_ID
                      AND ap.Payroll_Id = ep.Payroll_ID
                      </cfif>
                      AND p.Patient_Id = si.Patient_Id
                      AND an.Assmt_ID = si.Assmt_ID
                      AND an.Status  = 0
					  AND p.Status  IN (0,1,4)
                      GROUP BY si.Schedule_Id
                          ORDER BY  si.Visit_Date, e.Emp_Last, e.Emp_First, ep.Measure
		</cfquery>

		  <cfinclude template="payroll_reconcile_assessments_completed.inc.cfm">

		  <cfquery  dbtype="query" name="gets">
          SELECT * FROM GetVisitsall 
          <cfif  url.pgnote_status neq ''>
          	WHERE 
              <cfif url.pgnote_status eq '1'>
                  pgnotesdraft = 1
                  AND Visit_Type IS NULL
              <cfelseif  url.pgnote_status eq '2'>
                      (pgnotesdraft = 2 OR assessments_completed = 1)
              <cfelseif  url.pgnote_status eq '3'>
                   <!--- #10572: missed visits are not incomplete OASIS/eval --->
                   (Visit_Type IS NOT NULL AND (assessments_completed IS NULL OR assessments_completed <> 1)
                    AND (Missed = 0 OR Missed IS NULL))
              </cfif>
          </cfif>
      </cfquery>

	</cfif>

	<cfif isDefined("gets") and gets.recordcount gt 0>
		<cfif isEvergreenPayrollExport>
		<cfset str = """" & "Patient Agency ID" & """"
			& "," & """" & "Patient Name" & """"
			& "," & """" & "Patient Address" & """"
			& "," & """" & "Patient Admission Date" & """"
			& "," & """" & "Patient Payer" & """"
			& "," & """" & "Visit Date" & """"
			& "," & """" & "Progress Note" & """"
			& "," & """" & "Employee ID" & """"
			& "," & """" & "Employee Name" & """"
			& "," & """" & "Employee Address" & """"
			& "," & """" & "Payroll Item" & """"
			& "," & """" & "Start_Time" & """"
			& "," & """" & "End_Time" & """"
			& "," & """" & "Unassigned Visit" & """"
			& "," & """" & "HCPCS" & """"
			& chr(13)
			& chr(10)
			/>
		<cfelse>
		<cfset str = """" & "Transaction-Id" & """"
			& "," & """" & "Visit Date" & """"
			& "," & """" & "Pay-Date" & """"
			& "," & """" & "Patient-Name" & """"
			& "," & """" & "Progress-Note" & """"
			& "," & """" & "Employee-Name" & """"
            & "," & """" & "Employee-ID" & """"
			& "," & """" & "Payroll-Item" & """"
			& "," & """" & "Pay-Type" & """"
			& "," & """" & "Pay-Rate" & """"
			& "," & """" & "Hours" & """"
			& "," & """" & "Wages" & """"
			& "," & """" & "Travel" & """"
			& "," & """" & "Travel Minutes" & """"
			& "," & """" & "Paperwork" & """"
			& "," & """" & "Paperwork Minutes" & """"
			& "," & """" & "Miles" & """"
            & "," & """" & "Mileage $$" & """"   
			& "," & """" & "Pay-Total" & """"
			& chr(13)
			& chr(10)
			/>
		</cfif>

		<cfoutput query='gets'>
			<cfif isEvergreenPayrollExport>
				<cfif Val(Missed) NEQ 0><cfset pgnote_status = 'Missed Visit' />
				<cfelseif pgnotesdraft EQ 1 AND len(Visit_Type) EQ 0><cfset pgnote_status = 'Incomplete' />
				<cfelseif pgnotesdraft EQ 2><cfset pgnote_status = 'Complete' />
				<cfelseif len(Visit_Type) gt 0 AND Val(assessments_completed) EQ 1><cfset pgnote_status = 'Complete' />
				<cfelseif pgnotesdraft EQ 0><cfset pgnote_status = 'Incomplete' />
				</cfif>
				<cfset _ptAddr = trim(Pt_Street & "") />
				<cfif len(trim(Pt_City & ""))>
					<cfif len(_ptAddr)><cfset _ptAddr = _ptAddr & ", " & trim(Pt_City) /><cfelse><cfset _ptAddr = trim(Pt_City) /></cfif>
				</cfif>
				<cfif len(trim(Pt_State & "")) OR len(trim(Pt_Zip & ""))>
					<cfset _ptStateZip = trim(Pt_State & "") />
					<cfif len(trim(Pt_State & "")) AND len(trim(Pt_Zip & ""))><cfset _ptStateZip = _ptStateZip & " " /></cfif>
					<cfset _ptStateZip = _ptStateZip & trim(Pt_Zip & "") />
					<cfif len(_ptAddr)><cfset _ptAddr = _ptAddr & ", " & _ptStateZip /><cfelse><cfset _ptAddr = _ptStateZip /></cfif>
				</cfif>
				<cfset _empAddr = trim(Emp_Street1 & "") />
				<cfif len(trim(Emp_City & ""))>
					<cfif len(_empAddr)><cfset _empAddr = _empAddr & ", " & trim(Emp_City) /><cfelse><cfset _empAddr = trim(Emp_City) /></cfif>
				</cfif>
				<cfif len(trim(Emp_State & "")) OR len(trim(Emp_Zip & ""))>
					<cfset _empStateZip = trim(Emp_State & "") />
					<cfif len(trim(Emp_State & "")) AND len(trim(Emp_Zip & ""))><cfset _empStateZip = _empStateZip & " " /></cfif>
					<cfset _empStateZip = _empStateZip & trim(Emp_Zip & "") />
					<cfif len(_empAddr)><cfset _empAddr = _empAddr & ", " & _empStateZip /><cfelse><cfset _empAddr = _empStateZip /></cfif>
				</cfif>
				<cfset _visitDate = "" />
				<cfif isDate(Visit_Date)><cfset _visitDate = DateFormat(Visit_Date, "m/d/yyyy") /></cfif>
				<cfset _startTime = "" />
				<cfset _endTime = "" />
				<cfif isDate(StartTime)><cfset _startTime = TimeFormat(StartTime, "h:mm tt") /><cfelseif len(trim(StartTime))><cfset _startTime = trim(StartTime) /></cfif>
				<cfif isDate(EndTime)><cfset _endTime = TimeFormat(EndTime, "h:mm tt") /><cfelseif len(trim(EndTime))><cfset _endTime = trim(EndTime) /></cfif>
				<cfset _isUnassignedVisit = (Val(Schedule_Emp_ID) LTE 0) />
				<cfset _empName = trim(Emp_Last) />
				<cfif len(trim(Emp_First))>
					<cfif len(_empName)><cfset _empName = _empName & ", " /></cfif>
					<cfset _empName = _empName & trim(Emp_First) />
				</cfif>
				<cfif _isUnassignedVisit>
					<cfset _empName = "Unassigned" />
					<cfset _empAddr = "" />
				</cfif>
				<cfset str = str
					& """" & trim(Pt_Agy_ID) & """"
					& "," & """" & trim(pl) & ", " & trim(pf) & """"
					& "," & """" & _ptAddr & """"
					& "," & """" & trim(patient_admit_date) & """"
					& "," & """" & trim(patient_payer_name) & """"
					& "," & """" & _visitDate & """"
					& "," & """" & pgnote_status & """"
					& "," & """" & trim(Emp_Custom_1) & """"
					& "," & """" & _empName & """"
					& "," & """" & _empAddr & """"
					& "," & """" & trim(Description) & """"
					& "," & """" & _startTime & """"
					& "," & """" & _endTime & """"
					& "," & """" & (_isUnassignedVisit ? "Yes" : "No") & """"
					& "," & """" & trim(HCPCS) & """"
					& chr(13)
					& chr(10)
					/>
			<cfelse>
				<cfset mt = Measure />
        <cfset vTotal = "0.00" />
            <cfif mt eq 'HOURLY'>
               <cfset mt = 'Hourly' />
               <cfset amt = (pay_rate * (hours)) />
                <cfset vTotal = amt />
                <cfset payOther = true />
                <cfif travel gt 0>
                  <cfset vTotal = vTotal + ((travel/60) * Pay_Rate) />
                </cfif>
                <cfif paper gt 0>
                  <cfset vTotal = vTotal + ((paper/60) * Pay_Rate) />
                </cfif>
                <cfif miles gt 0 and PayMileage eq 1 and mileage_rate gt 0>
                  <cfset vTotal = vTotal + (miles * mileage_rate) />
                </cfif>
          	<cfelseif mt eq 'VISIT'>
               <cfset mt = 'By Visit' />
                <cfset amt = (pay_rate) />
                <cfset vTotal = amt />
                <cfif miles gt 0 and PayMileage eq 1 and mileage_rate gt 0>
                 <cfset vTotal = vTotal + (miles * mileage_rate) />
                </cfif>
            <cfelseif mt eq 'DAILY SALARY'>
               <cfset mt = 'Daily Salary' />
                <cfset amt = (pay_rate) />
                <cfset vTotal = amt />
                <cfif miles gt 0 and PayMileage eq 1 and mileage_rate gt 0>
                   <cfset vTotal = vTotal + (miles * mileage_rate) />
                </cfif>
            </cfif>
            <cfif travel gt 0 and measure eq 'hourly'>
                <cfset travels = #DecimalFormat(((travel/60) * Pay_Rate))# />
            <cfelse>
            	<cfset travels = '0.00' />
            </cfif>
            <cfif travel gt 0>
             <cfset travel_min = #travel# />
            <cfelse>
            	<cfset travel_min = 0 />
            </cfif>
            <cfif paper gt 0 and measure eq 'hourly'>
				      <cfset paperworks = #DecimalFormat(((paper/60) * Pay_Rate))# />
			      <cfelse>
            	<cfset paperworks = '0.00' />
            </cfif>
            <cfif paper gt 0>
             <cfset paper_min = #paper# />
            <cfelse>
            	<cfset paper_min = 0 />
            </cfif>
            <cfif miles gt 0>
             <cfset miles = #miles# />
            <cfelse>
            	<cfset mileage = 0 />
            </cfif>    
            <cfif PayMileage eq 1 and mileage_rate gt 0>
							<cfset mileagerate = mileage_rate />	
            <cfelse>
            	<cfset mileagerate = "0.00" />
            </cfif>
           <!--- <cfif pgnotesdraft EQ 2 OR (len(Visit_Type) gt 0 AND assessments_completed EQ 1) >
           		<cfset pgnote_status = 'Complete' />
            <cfelseif pgnotesdraft EQ 1>
           		<cfset pgnote_status = 'Incomplete' />
           	<cfelseif len(Visit_Type) gt 0 AND assessments_completed NEQ 1>
           		<cfset pgnote_status = 'OASIS/Eval Incomplete' />
           </cfif>--->
           <cfif Val(gets.Missed) NEQ 0> <cfset pgnote_status = 'Missed Visit' />
            <cfelseif pgnotesdraft EQ 1 AND len(Visit_Type) EQ 0> <cfset pgnote_status = 'Incomplete' />
            <cfelseif pgnotesdraft EQ 2 ><cfset pgnote_status = 'Complete' />
            <cfelseif len(Visit_Type) gt 0 AND Val(assessments_completed) EQ 1><cfset pgnote_status = 'Complete' />
            <cfelseif pgnotesdraft EQ 0 ><cfset pgnote_status = 'Incomplete' />
            </cfif>


           <cfset totalpay = miles * mileagerate  />
           <cfif gets.Missed EQ '2' >
              <cfset  Request.wages = gets.Pay_Rate * 0.3 /> 
           <cfelse>
               <cfset Request.wages = amt /> 
           </cfif>
			<cfset str = str
				& """" & #gets.Schedule_Id# & """"
				& "," & """" & #gets.vd# & """"
				& "," & """" & #gets.pay_date# & """"
				& "," & """" & #gets.pl# & ", " & #gets.pf# & """"
				& "," & """" & #pgnote_status# & """"
				& "," & """" & #gets.Emp_Last# & ", " & #gets.Emp_First# & """"
                & "," & """" & #gets.Emp_Custom_1# & """"   
				& "," & """" & #gets.Description# & """"
				& "," & """" & #mt# & """"
				& "," & """" & #gets.Pay_Rate# & """"
				& "," & """" & #gets.hours# & """"
				& "," & """" & #Request.wages# & """"
				& "," & """" & #travels# & """"
				& "," & """" & #travel_min# & """"
				& "," & """" & #paperworks# & """"
				& "," & """" & #paper_min# & """"
                & "," & """" & #miles# & """"   
				& "," & """" & #mileagerate# & """"
				& "," & """" & #vTotal# & """"
				& chr(13)
				& chr(10)
				/>
			</cfif>
		</cfoutput>

		<cfset dt = DateFormat(Now(), "yyyy-mm-dd") />
		<cffile action="write" file="#application.datapath##session.AgencyId#_#session.EmployeeId#_#dt#.csv" output="#str#">

		<cfoutput>
			Please <a href="#application.webdatapath##session.AgencyId#_#session.EmployeeId#_#dt#.csv">Right Click Here</a> and choose "Save Target As..." to download the Exported data file and save it to your computer.
		</cfoutput>

		<br/><br/>

		<a href='index.cfm?page=reports&cat=schedules&rpt=Payroll_Report'>Click Here</a> to start a new Payroll Report search.
       <br/><br/>
		<cfquery  name='setExported' datasource='#Application.DataSrc#'>
			UPDATE #Request.prefix_db_agency#.payroll
			SET    exported = 'Y'
			WHERE  Schedule_Id IN (<cfqueryparam value="#form.Schedule_Id#" cfsqltype="cf_sql_integer" list="yes">)
		</cfquery>
	<cfelse>
		No data could be found based on your search criteria.
		<br/><br/>
		Please try again.
	</cfif>
</div>
</div>
