<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idEmployee=0>
	<cfset variables.employee="">
	<cfset variables.idAccessProfile=0>
	<cfset variables.accessProfile="">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.accessProfileRoles="">
	<cfset module.list.orderBy="accessProfile">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idEmployee=0>
		<cfset variables.employee="">
		<cfset variables.idAccessProfile=0>
		<cfset variables.accessProfile="">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.accessProfileRoles="">
	</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="setIdEmployee" access="public" output="false">
		<cfargument name="idEmployee" type="numeric" required="yes" default="0">
		<cfset variables.idEmployee=arguments.idEmployee>
	</cffunction>

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

	<cffunction name="getEmployee" access="public" returntype="proventas31.corporate.employee" output="false">
		<cfif not IsObject("variables.employee")><cfset variables.employee=CreateObject("component", "proventas31.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", "proventas31.corporate.employee")>
			<cfset variables.employee.setIdEmployee(variables.idEmployee)>
			<cfset variables.employee.get()>
		</cfif>
		<cfreturn variables.employee>
	</cffunction>

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

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

	<cffunction name="getAccessProfile" access="public" returntype="proventas31.corporate.accessProfile" output="false">
		<cfif not IsObject("variables.accessProfile")><cfset variables.accessProfile=CreateObject("component", "proventas31.corporate.accessProfile")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.accessProfile.isRetrievedFromDB()) or variables.accessProfile.getidAccessProfile() neq variables.idAccessProfile>
			<cfset variables.accessProfile=CreateObject("component", "proventas31.corporate.accessProfile")>
			<cfset variables.accessProfile.setIdAccessProfile(variables.idAccessProfile)>
			<cfset variables.accessProfile.get()>
		</cfif>
		<cfreturn variables.accessProfile>
	</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()) or variables.project.getIdProject() neq variables.idProject>
			<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="getAccessProfileRoles" access="public" returntype="proventas31.corporate.accessProfileRoles" output="false">
		<cfif not IsObject("variables.accessProfileRoles")><cfset variables.accessProfileRoles=CreateObject("component", "proventas31.corporate.accessProfileRoles")></cfif>
		<cfset variables.accessProfileRoles.setIdAccessProfile(variables.idAccessProfile)>
		<cfset variables.accessProfileRoles.get()>
		<cfreturn variables.accessProfileRoles>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				employeeAccessProfile.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
				AND employeeAccessProfile.idProject<cfif variables.idProject gt 0>=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idAccessProfile=getQuery.idAccessProfile>
			<cfif len(getQuery.idProject)><cfset variables.idProject=getQuery.idProject><cfelse><cfset variables.idProject=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="">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT DISTINCT
				#getQueryString()#
			WHERE
				employeeAccessProfile.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
				<cfif variables.idProject gt 0>
				AND employeeAccessProfile.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getProjectList" access="public" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="">
		<cfquery name="getProjectListQuery" datasource="#application.datasource#">
			SELECT DISTINCT
				#getQueryString()#
			WHERE
				employeeAccessProfile.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
				AND employeeAccessProfile.idProject IS NOT NULL
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getProjectListQuery>
	</cffunction>

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

	<cffunction name="getMenuList" access="public" output="false" returntype="query">
		<cfargument name="idParent" type="numeric" required="yes" default="0">
		<cfquery name="getMenuListQuery" datasource="#application.datasource#">
			SELECT 
				employeeAccessProfile.idAccessProfile,
				accessProfileRoles.idSystemModule,
				accessProfileRoles.roles,
				systemModule.idParent,
				systemModule.location,
				systemModule.displayName
			FROM 
				employeeAccessProfile 
			LEFT JOIN accessProfileRoles ON employeeAccessProfile.idAccessProfile=accessProfileRoles.idAccessProfile
			LEFT JOIN systemModule ON systemModule.idSystemModule=accessProfileRoles.idSystemModule
			WHERE 
				employeeAccessProfile.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
				AND employeeAccessProfile.idProject IS NULL
				AND systemModule.idParent=<cfqueryparam value="#arguments.idParent#" cfsqltype="cf_sql_integer">
				AND systemModule.showInMenu=<cfqueryparam value="Y" cfsqltype="cf_sql_char" maxlength="1">
			ORDER BY systemModule.idParent, accessProfileRoles.idSystemModule
		</cfquery>
		<cfreturn getMenuListQuery>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				employeeAccessProfile.idEmployee, CONCAT(TRIM(employee.nameFirst),' ', TRIM(employee.nameFirst1),' ',TRIM(employee.nameLast),' ',TRIM(employee.nameLast1)) as employee,
				employeeData.email,
				employeeAccessProfile.idAccessProfile, accessProfile.name AS accessProfile,
				employeeAccessProfile.idProject, project.name as project
			FROM 
				employeeAccessProfile
			LEFT JOIN employee ON employeeAccessProfile.idEmployee=employee.idEmployee
			LEFT JOIN employeeData ON employeeAccessProfile.idEmployee=employeeData.idEmployee
			LEFT JOIN accessProfile ON employeeAccessProfile.idAccessProfile=accessProfile.idAccessProfile
			LEFT JOIN project ON employeeAccessProfile.idProject=project.idProject
			">
		<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.idEmployee lt 1>
			<cfset result.message="idEmployee is obligatory">
			<cfreturn result>
		</cfif>
		<cfif variables.idAccessProfile lt 1>
			<cfset result.message="idAccessProfile is obligatory">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO employeeAccessProfile
					(
					idEmployee, idAccessProfile, idProject
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idAccessProfile#" cfsqltype="cf_sql_integer">,
					<cfif variables.idProject gt 0><cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>
					)
				ON DUPLICATE KEY UPDATE 
					idAccessProfile=<cfqueryparam value="#variables.idAccessProfile#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idEmployee>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [accessProfile.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="">
		<!--- variables ok --->
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM 
					employeeAccessProfile
				WHERE 
					employeeAccessProfile.idEmployee=<cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer">
					AND employeeAccessProfile.idProject<cfif variables.idProject gt 0>=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer"><cfelse> IS NULL</cfif>
			</cfquery>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [accessProfile.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="getSellerList" access="public" output="false" returntype="query">
		<cfargument name="accessProfileNamePart" type="string" required="no" default="">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT DISTINCT
				employeeAccessProfile.idEmployee, 
				employee.nameFirst, employee.nameFirst1, 
				employee.nameLast, employee.nameLast1
			FROM 
				employeeAccessProfile
			LEFT JOIN employee ON employeeAccessProfile.idEmployee=employee.idEmployee
			LEFT JOIN accessProfile ON employeeAccessProfile.idAccessProfile=accessProfile.idAccessProfile
				<cfif Len(arguments.accessProfileNamePart)>
				AND accessProfile.name LIKE <cfqueryparam value="%#arguments.accessProfileNamePart#%" cfsqltype="cf_sql_varchar" maxlength="200">
				</cfif>
			WHERE
				1=1
				<cfif variables.idProject gt 0>
				AND employeeAccessProfile.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
				</cfif>
				<cfif Len(arguments.accessProfileNamePart)>
				AND accessProfile.name LIKE <cfqueryparam value="%#arguments.accessProfileNamePart#%" cfsqltype="cf_sql_varchar" maxlength="200">
				</cfif>
			ORDER BY employee.nameFirst, employee.nameFirst1, employee.nameLast, employee.nameLast1
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

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

	<cffunction name="createSellerOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfset var list=getSellerList("ventas")>
		<cfset var result=0>
		<cfif list.idEmployee gt 0><cfset result=list.idEmployee></cfif>
		<cfloop query="list">
			<cfif list.idEmployee eq arguments.selected><cfset _selected=" selected"><cfset result=list.idEmployee><cfelse><cfset _selected=""></cfif>
			<cfset name=list.nameFirst>
			<cfif Len(list.nameFirst1)><cfset name=name & " " & list.nameFirst1></cfif>
			<cfif Len(list.nameLast)><cfset name=name & " " & list.nameLast></cfif>
			<cfif Len(list.nameLast1)><cfset name=name & " " & list.nameLast1></cfif>
			<cfoutput><option value="#list.idEmployee#"#_selected#>#name#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>