<cfcomponent extends="components.common.formObject">
	<cfset variables.idEmployee=0>
	<cfset variables.employee="">
	<cfset variables.idCompany=0>
	<cfset variables.company="">
	<cfset variables.idCompanyDepartment=0>
	<cfset variables.companyDepartment="">
	<cfset variables.idCompanyPosition=0>
	<cfset variables.companyPosition="">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idEmployee=0>
		<cfset variables.employee="">
		<cfset variables.idCompany=0>
		<cfset variables.company="">
		<cfset variables.idCompanyDepartment=0>
		<cfset variables.companyDepartment="">
		<cfset variables.idCompanyPosition=0>
		<cfset variables.companyPosition="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdEmployee()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdEmployee(arguments.objectId)>
	</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="false">
		<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="setIdCompany" access="remote" output="false">
		<cfargument name="idCompany" type="numeric" required="yes" default="0">
		<cfset variables.idCompany=arguments.idCompany>
	</cffunction>

	<cffunction name="getIdCompany" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idCompany>
	</cffunction>
	
	<cffunction name="getCompany" access="remote" returntype="components.corporate.company" output="false">
		<cfif not IsObject("variables.company")><cfset variables.company=CreateObject("component", "components.corporate.company")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.company.isRetrievedFromDB()) or variables.company.getIdCompany() neq variables.idCompany>
			<cfset variables.company=CreateObject("component", "components.corporate.company")>
			<cfset variables.company.setIdCompany(variables.idCompany)>
			<cfset variables.company.get()>
		</cfif>
		<cfreturn variables.company>
	</cffunction>

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

	<cffunction name="getIdCompanyDepartment" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idCompanyDepartment>
	</cffunction>
	
	<cffunction name="getCompanyDepartment" access="remote" returntype="components.corporate.companyDepartment" output="false">
		<cfif not IsObject("variables.companyDepartment")><cfset variables.companyDepartment=CreateObject("component", "components.corporate.companyDepartment")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.companyDepartment.isRetrievedFromDB()) or variables.companyDepartment.getIdCompanyDepartment() neq variables.idCompanyDepartment>
			<cfset variables.companyDepartment=CreateObject("component", "components.corporate.companyDepartment")>
			<cfset variables.companyDepartment.setIdCompanyDepartment(variables.idCompanyDepartment)>
			<cfset variables.companyDepartment.get()>
		</cfif>
		<cfreturn variables.companyDepartment>
	</cffunction>

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

	<cffunction name="getIdCompanyPosition" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idCompanyPosition>
	</cffunction>
	
	<cffunction name="getCompanyPosition" access="remote" returntype="components.corporate.companyPosition" output="false">
		<cfif not IsObject("variables.companyPosition")><cfset variables.companyPosition=CreateObject("component", "components.corporate.companyPosition")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.companyPosition.isRetrievedFromDB()) or variables.companyPosition.getIdCompanyPosition() neq variables.idCompanyPosition>
			<cfset variables.companyPosition=CreateObject("component", "components.corporate.companyPosition")>
			<cfset variables.companyPosition.setIdCompanyPosition(variables.idCompanyPosition)>
			<cfset variables.companyPosition.get()>
		</cfif>
		<cfreturn variables.companyPosition>
	</cffunction>

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idEmployee=getQuery.idEmployee>
			<cfif Len(getQuery.idCompany)><cfset variables.idCompany=getQuery.idCompany><cfelse><cfset variables.idCompany=0></cfif>
			<cfif Len(getQuery.idCompanyDepartment)><cfset variables.idCompanyDepartment=getQuery.idCompanyDepartment><cfelse><cfset variables.idCompanyDepartment=0></cfif>
			<cfif Len(getQuery.idCompanyPosition)><cfset variables.idCompanyPosition=getQuery.idCompanyPosition><cfelse><cfset variables.idCompanyPosition=0></cfif>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="remote" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				employeeCompany.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<!--- ADDED: set that object was retrieved from DB --->
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getList" access="remote" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE 1=1
				<cfif Len(variables.nameFirst)>
				AND (
					employee.nameFirst LIKE <cfqueryparam value="%#variables.nameFirst#%" cfsqltype="cf_sql_varchar" maxlength="255">
					OR 
					employee.nameFirst1 LIKE <cfqueryparam value="%#variables.nameFirst#%" cfsqltype="cf_sql_varchar" maxlength="255">
				)
				</cfif>
				<cfif Len(variables.nameLast)>
				AND (
					employee.nameLast LIKE <cfqueryparam value="%#variables.nameLast#%" cfsqltype="cf_sql_varchar" maxlength="255">
					OR 
					employee.nameLast1 LIKE <cfqueryparam value="%#variables.nameLast#%" cfsqltype="cf_sql_varchar" maxlength="255">
				)
				</cfif>
			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="
				employeeCompany.idEmployee, CONCAT(TRIM(employee.nameFirst),' ', TRIM(employee.nameFirst1),' ',TRIM(employee.nameLast),' ',TRIM(employee.nameLast1)) as employee,
				employeeCompany.idCompany,
				company.name as company,
				employeeCompany.idCompanyDepartment,
				companyDepartment.name as companyDepartment,
				employeeCompany.idCompanyPosition,
				companyPosition.name as companyPosition
			FROM 
				employeeCompany 
			LEFT JOIN employee ON employeeCompany.idEmployee=employee.idEmployee
			LEFT JOIN company ON employeeCompany.idCompany=company.idCompany
			LEFT JOIN companyDepartment ON employeeCompany.idCompanyDepartment=companyDepartment.idCompanyDepartment
			LEFT JOIN companyPosition ON employeeCompany.idCompanyPosition=companyPosition.idCompanyPosition
				">
		<cfreturn result>
	</cffunction>

	<cffunction name="create" access="remote" 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 employeeCompany
					(
					idEmployee, 
					idCompany,
					idCompanyDepartment,
					idCompanyPosition
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idCompany gt 0><cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					<cfif variables.idCompanyDepartment gt 0><cfqueryparam value="#variables.idCompanyDepartment#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					<cfif variables.idCompanyPosition gt 0><cfqueryparam value="#variables.idCompanyPosition#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>
					)
				ON DUPLICATE KEY UPDATE 
					idCompany=<cfif variables.idCompany gt 0><cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					idCompanyDepartment=<cfif variables.idCompanyDepartment gt 0><cfqueryparam value="#variables.idCompanyDepartment#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>,
					idCompanyPosition=<cfif variables.idCompanyPosition gt 0><cfqueryparam value="#variables.idCompanyPosition#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>
			</cfquery>
			<cfset result.id=variables.idEmployee>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [employeeCompany.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="update" access="remote" returntype="struct" output="false">
		<cfreturn create()>
	</cffunction>

	<cffunction name="delete" access="remote" 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 employeeCompany
				WHERE 
					idEmployee=<cfqueryparam value="#variables.idEmployee#" 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 [employeeCompany.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>