<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idProjectPhoto=0>
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idServerFile=0>
	<cfset variables.serverFile="">
	<cfset module.list.orderBy="idProjectPhoto">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idProjectPhoto=0>
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idServerFile=0>
		<cfset variables.serverFile="">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProjectPhoto()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProjectPhoto(arguments.objectId)>
	</cffunction>
	
	<cffunction name="setIdProjectPhoto" access="public" output="false">
		<cfargument name="idProjectPhoto" type="numeric" required="yes" default="0">
		<cfset variables.idProjectPhoto=arguments.idProjectPhoto>
	</cffunction>

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

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

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

	<cffunction name="getProject" access="public" returntype="proventas31.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "proventas31.corporate.project")></cfif>
		<cfif Compare(module.form.pageAction, "add") and not variables.project.isRetrievedFromDB()>
			<cfset variables.project=CreateObject("component", "proventas31.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>

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

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

	<cffunction name="getServerFile" access="public" returntype="proventas31.corporate.serverFile" output="false">
		<cfif not IsObject("variables.serverFile")>
			<cfset variables.serverFile=CreateObject("component", "proventas31.corporate.serverFile")>
		</cfif>
		<cfif Compare(module.form.pageAction, "add") and not variables.serverFile.isRetrievedFromDB()>
			<cfset variables.serverFile=CreateObject("component", "proventas31.corporate.serverFile")>
			<cfset variables.serverFile.setIdServerFile(variables.idServerFile)>
			<cfset variables.serverFile.get()>
		</cfif>
		<cfreturn variables.serverFile>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectPhoto.idProjectPhoto=<cfqueryparam value="#variables.idProjectPhoto#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idProject=getQuery.idProject>
			<cfif Len(getQuery.idServerFile)><cfset variables.idServerFile=getQuery.idServerFile><cfelse><cfset variables.idServerFile=0></cfif>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="idProjectPhoto">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectPhoto.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				projectPhoto.idProjectPhoto,
				projectPhoto.idProject, project.name AS project,
				projectPhoto.idServerFile, serverFile.displayName AS displayName, serverFile.serverFileName AS serverFileName
			FROM 
				projectPhoto
			LEFT JOIN project ON projectPhoto.idProject=project.idProject
			LEFT JOIN serverFile ON projectPhoto.idServerFile=serverFile.idServerFile
			">
		<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("serverFile.displayName")>
		<cfset var result=0>
		<cfif list.idProjectPhoto gt 0><cfset result=list.idProjectPhoto></cfif>
		<cfloop query="list">
			<cfif list.idProjectPhoto eq arguments.selected><cfset _selected=" selected"><cfset result=list.idProjectPhoto><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idProjectPhoto#"#_selected#>#list.displayName#</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 
				idProjectPhoto 
			FROM 
				projectPhoto 
			WHERE 
				projectPhoto.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				AND projectPhoto.idServerFile=<cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer">
				<cfif variables.idProjectPhoto gt 0>
				AND idProjectPhoto != <cfqueryparam value="#variables.idProjectPhoto#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idProjectPhoto>
		</cfif>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="create" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfif variables.idServerFile lt 1>
			<cfset result.message="idServerFile is obligatory">
			<cfreturn result>
		</cfif>
		<cfif variables.idProject lt 1>
			<cfset result.message="idProject is obligatory">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectPhoto
					(
					idProjectPhoto, idProject, idServerFile
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProjectPhoto#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">,
					<cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer">
					)
			</cfquery>
			<cfset result=getId()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [project.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfif variables.idServerFile lt 1>
			<cfset result.message="idServerFile is obligatory">
			<cfreturn result>
		</cfif>
		<cfif variables.idProjectPhoto lt 1>
			<cfset result.message="idProjectPhoto is obligatory">
			<cfreturn result>
		</cfif>
		<cfif variables.idProject lt 1>
			<cfset result.message="idProject is obligatory">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				UPDATE projectPhoto SET 
					idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">,
					idServerFile=<cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer">
				WHERE 
					idProjectPhoto=<cfqueryparam value="#variables.idProjectPhoto#" cfsqltype="cf_sql_integer"> 
			</cfquery>
			<cfset result.id=variables.idProjectPhoto>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [project.update()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="delete" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfset get()>
		<cfif variables.idServerFile gt 0>
			<cfset _deleteResult=getServerFile().delete()>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM 
					projectPhoto
				WHERE 
					projectPhoto.idProjectPhoto=<cfqueryparam value="#variables.idProjectPhoto#" cfsqltype="cf_sql_integer">
			</cfquery>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [project.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>