<cfcomponent extends="components.common.formObject">
	<cfset variables.idPaymentRequestStateHistory=0>
	<cfset variables.idPaymentRequest=0>
	<cfset variables.paymentRequest="">
	<cfset variables.idPaymentRequestState=0>
	<cfset variables.paymentRequestState="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee="">
	<cfset variables.dateRegistered="">
	<cfset variables.comment="">
	<cfset module.list.orderBy="dateRegistered DESC">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idPaymentRequestStateHistory=0>
		<cfset variables.idPaymentRequest=0>
		<cfset variables.paymentRequest="">
		<cfset variables.idPaymentRequestState=0>
		<cfset variables.paymentRequestState="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee="">
		<cfset variables.dateRegistered="">
		<cfset variables.comment="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdPaymentRequestStateHistory()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdPaymentRequestStateHistory(arguments.objectId)>
	</cffunction>

	<cffunction name="setIdPaymentRequestStateHistory" access="public" output="false">
		<cfargument name="idPaymentRequestStateHistory" type="numeric" required="yes" default="0">
		<cfset variables.idPaymentRequestStateHistory=arguments.idPaymentRequestStateHistory>
	</cffunction>

	<cffunction name="getIdPaymentRequestStateHistory" access="public" returntype="numeric" output="false">
		<cfreturn variables.idPaymentRequestStateHistory>
	</cffunction>

	<cffunction name="setIdPaymentRequest" access="remote" output="false">
		<cfargument name="idPaymentRequest" type="numeric" required="yes" default="0">
		<cfset variables.idPaymentRequest=arguments.idPaymentRequest>
	</cffunction>

	<cffunction name="getIdPaymentRequest" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idPaymentRequest>
	</cffunction>

	<cffunction name="getPaymentRequest" access="remote" returntype="components.corporate.paymentRequest" output="false">
		<cfif not IsObject("variables.paymentRequest")><cfset variables.paymentRequest=CreateObject("component", "components.corporate.paymentRequest")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.paymentRequest.isRetrievedFromDB()) or variables.paymentRequest.getIdPaymentRequest() neq variables.idPaymentRequest>
			<cfset variables.paymentRequest=CreateObject("component", "components.corporate.paymentRequest")>
			<cfset variables.paymentRequest.setIdPaymentRequest(variables.idPaymentRequest)>
			<cfset variables.paymentRequest.get()>
		</cfif>
		<cfreturn variables.paymentRequest>
	</cffunction>

	<cffunction name="setIdPaymentRequestState" access="public" output="false">
		<cfargument name="idPaymentRequestState" type="numeric" required="yes" default="0">
		<cfset variables.idPaymentRequestState=arguments.idPaymentRequestState>
	</cffunction>

	<cffunction name="getIdPaymentRequestState" access="public" returntype="numeric" output="false">
		<cfreturn variables.idPaymentRequestState>
	</cffunction>

	<cffunction name="getPaymentRequestState" access="remote" returntype="components.corporate.paymentRequestState" output="false">
		<cfif not IsObject("variables.paymentRequestState")><cfset variables.paymentRequestState=CreateObject("component", "components.corporate.paymentRequestState")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.paymentRequestState.isRetrievedFromDB()) or variables.paymentRequestState.getIdPaymentRequestState() neq variables.idPaymentRequestState>
			<cfset variables.paymentRequestState=CreateObject("component", "components.corporate.paymentRequestState")>
			<cfset variables.paymentRequestState.setIdPaymentRequestState(variables.idPaymentRequestState)>
			<cfset variables.paymentRequestState.get()>
		</cfif>
		<cfreturn variables.paymentRequestState>
	</cffunction>

	<cffunction name="setIdEmployee" access="remote" output="false">
		<cfargument name="idEmployee" type="numeric" required="yes" default="0">
		<cfset variables.idEmployee=arguments.idEmployee>
	</cffunction>

	<cffunction name="getIdEmployee" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idEmployee>
	</cffunction>

	<cffunction name="getEmployee" access="remote" returntype="components.corporate.employee" output="true">
		<cfif not IsObject("variables.employee")><cfset variables.employee=CreateObject("component", "components.corporate.employee")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.employee.isRetrievedFromDB()) or variables.employee.getIdEmployee() neq variables.idEmployee>
			<cfset variables.employee=CreateObject("component", "components.corporate.employee")>
			<cfset variables.employee.setIdEmployee(variables.idEmployee)>
			<cfset variables.employee.get()>
		</cfif>
		<cfreturn variables.employee>
	</cffunction>

	<cffunction name="setDateRegistered" access="remote" output="false">
		<cfargument name="dateRegistered" type="string" required="yes" default="">
		<cfset variables.dateRegistered=arguments.dateRegistered>
	</cffunction>

	<cffunction name="getDateRegistered" access="remote" returntype="string" output="false">
		<cfreturn variables.dateRegistered>
	</cffunction>

	<cffunction name="setComment" access="public" output="false">
		<cfargument name="comment" type="string" required="yes" default="">
		<cfset variables.comment=arguments.comment>
	</cffunction>

	<cffunction name="getComment" access="public" returntype="string" output="false">
		<cfreturn variables.comment>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				paymentRequestStateHistory.idPaymentRequestStateHistory=<cfqueryparam value="#variables.idPaymentRequestStateHistory#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idPaymentRequest=getQuery.idPaymentRequest>
			<cfset variables.idPaymentRequestState=getQuery.idPaymentRequestState>
			<cfset variables.idEmployee=getQuery.idEmployee>
			<cfset variables.dateRegistered=LSDateFormat(getQuery.dateRegistered, "dd/mm/yyyy") & " " & LSTimeFormat(getQuery.dateRegistered, "HH:mm")>
			<cfset variables.comment=ToString(getQuery.comment)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="">

		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE 
				paymentRequestStateHistory.idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#URLDecode(module.list.orderBy)#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				paymentRequestStateHistory.idPaymentRequestStateHistory,
				paymentRequestStateHistory.idPaymentRequest,
				paymentRequestStateHistory.idPaymentRequestState, paymentRequestState.name AS paymentRequestState,
				paymentRequestStateHistory.idEmployee,  CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				paymentRequestStateHistory.dateRegistered,
				paymentRequestStateHistory.comment
			FROM 
				paymentRequestStateHistory
			LEFT JOIN paymentRequestState ON paymentRequestStateHistory.idPaymentRequestState=paymentRequestState.idPaymentRequestState
			LEFT JOIN employee ON paymentRequestStateHistory.idEmployee=employee.idEmployee
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="createOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfset var list=getList("paymentRequestStateHistory.idPaymentRequestStateHistory")>
		<cfset var result=0>
		<cfif list.idPaymentRequestStateHistory gt 0><cfset result=list.idPaymentRequestStateHistory></cfif>
		<cfloop query="list">
			<cfif list.idPaymentRequestStateHistory eq arguments.selected><cfset _selected=" selected"><cfset result=list.idPaymentRequestStateHistory><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idPaymentRequestStateHistory#"#_selected#>#list.name#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>

	<cffunction name="getId" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfquery name="getIdQuery" datasource="#application.datasource#">
			SELECT 
				idPaymentRequestStateHistory 
			FROM 
				paymentRequestStateHistory 
			WHERE 
				idPaymentRequest=<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">
				AND idPaymentRequestState=<cfqueryparam value="#variables.idPaymentRequestState#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idPaymentRequestStateHistory>
		</cfif>
		<cfreturn result>
	</cffunction>
		
	<cffunction name="create" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO paymentRequestStateHistory
					(
					idPaymentRequestStateHistory, 
					idPaymentRequest,
					idPaymentRequestState,
					idEmployee,
					dateRegistered,
					comment
					) 
				VALUES 
					(
					NULL, 
					<cfqueryparam value="#variables.idPaymentRequest#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idPaymentRequestState#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">,
					<cfqueryparam value="#encode(variables.comment)#" cfsqltype="cf_sql_clob">
					)
				ON DUPLICATE KEY UPDATE 
					idEmployee=<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					dateRegistered=<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">,
					comment=<cfqueryparam value="#encode(variables.comment)#" cfsqltype="cf_sql_clob">
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idPaymentRequestStateHistory=result.id>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequestStateHistory.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfreturn create()>
	</cffunction>

	<cffunction name="delete" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM paymentRequestStateHistory
				WHERE 
					idPaymentRequestStateHistory=<cfqueryparam value="#variables.idPaymentRequestStateHistory#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=0>
			<cfset init()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [paymentRequestStateHistory.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>