<cfcomponent extends="components.common.formObject">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.role1="">
	<cfset variables.role2="">
	<cfset variables.role3="">

	<cfset module.list.orderBy="idProject">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.role1="">
		<cfset variables.role2="">
		<cfset variables.role3="">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProject()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProject(arguments.objectId)>
	</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="components.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "components.corporate.project")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.project.isRetrievedFromDB()) or variables.project.getIdProject() neq variables.idProject>
			<cfset variables.project=CreateObject("component", "components.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>

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

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

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

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

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idProject=getQuery.idProject>
			<cfset variables.role1=getQuery.role1>
			<cfset variables.role2=getQuery.role2>
			<cfset variables.role3=getQuery.role3>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectRoles.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				projectRoles.idProject, 
				projectRoles.role1,
				projectRoles.role2,
				projectRoles.role3
			FROM 
				projectRoles 
			">
		<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 --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectRoles
					(
					idProject, 
					role1,
					role2,
					role3
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.role1#" cfsqltype="cf_sql_varchar" maxlength="255">, 
					<cfqueryparam value="#variables.role2#" cfsqltype="cf_sql_varchar" maxlength="255">, 
					<cfqueryparam value="#variables.role3#" cfsqltype="cf_sql_varchar" maxlength="255">
					)
				ON DUPLICATE KEY UPDATE 
					role1=<cfqueryparam value="#variables.role1#" cfsqltype="cf_sql_varchar" maxlength="255">, 
					role2=<cfqueryparam value="#variables.role2#" cfsqltype="cf_sql_varchar" maxlength="255">, 
					role3=<cfqueryparam value="#variables.role3#" cfsqltype="cf_sql_varchar" maxlength="255"> 
			</cfquery>
			<cfset result.id=variables.idProject>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectRoles.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 projectRoles
				WHERE 
					idProject=<cfqueryparam value="#variables.idProject#" 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 [projectRoles.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>