<cfcomponent extends="proventas31.common.formObject">
s	<cfset variables.idAccessProfile=0>
	<cfset variables.idSystemModule=0>
	<cfset variables.rolesStructure=StructNew()>
	<cfset module.list.orderBy="idSystemModule">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idAccessProfile=0>
		<cfset variables.rolesStructure=StructNew()>
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdSystemModule()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdSystemModule(arguments.objectId)>
	</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="setIdSystemModule" access="public" output="false">
		<cfargument name="idSystemModule" type="numeric" required="yes" default="0">
		<cfset variables.idSystemModule=arguments.idSystemModule>
	</cffunction>

	<cffunction name="getIdSystemModule" access="public" returntype="numeric" output="false">
		<cfreturn variables.idSystemModule>
	</cffunction>
	
	<cffunction name="addAccessProfileRole" access="public" output="false">
		<cfargument name="accessProfileRole" type="proventas31.corporate.accessProfileRole" required="yes">
		<cfset var idSystemModule=arguments.accessProfileRole.getIdSystemModule()>
		<cfset arguments.accessProfileRole.setIdAccessProfile(variables.idAccessProfile)>
		<cfset variables.rolesStructure[idSystemModule]=arguments.accessProfileRole>
	</cffunction>

	<cffunction name="deleteAccessProfileRole" access="public" output="false">
		<cfargument name="accessProfileRole" type="proventas31.corporate.accessProfileRole" required="yes">
		<cfset var idSystemModule=arguments.accessProfileRole.getIdSystemModule()>
		<cfset arguments.accessProfileRole.setIdAccessProfile(variables.idAccessProfile)>
		<cfset StructDelete(variables.rolesStructure, idSystemModule) />
	</cffunction>
	
	<cffunction name="getAccessProfileRole" access="public" returntype="proventas31.corporate.accessProfileRole" output="false">
		<cfargument name="idSystemModule" type="numeric" required="yes">
		<cfif StructKeyExists(variables.rolesStructure, arguments.idSystemModule)>
			<cfreturn variables.rolesStructure[arguments.idSystemModule]>
		<cfelse>
			<cfreturn CreateObject("component", "proventas31.corporate.accessProfileRole")>
		</cfif>
	</cffunction>
	
	<cffunction name="create" access="public" output="false" returntype="struct">
		<cfargument name="accessProfileRole" type="proventas31.corporate.accessProfileRole" required="yes">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfset arguments.accessProfileRole.setIdAccessProfile(variables.idAccessProfile)>
		<cfset result=arguments.accessProfileRole.create()>
		<cfif result.id gt 0>
			<cfset addAccessProfileRole(arguments.accessProfileRole)>
		</cfif>
		<cfreturn result>
	</cffunction>

	<cffunction name="delete" access="public" output="false" returntype="struct">
		<cfargument name="accessProfileRole" type="proventas31.corporate.accessProfileRole" required="yes">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfset arguments.accessProfileRole.setIdAccessProfile(variables.idAccessProfile)>
		<cfset result=arguments.accessProfileRole.delete()>
		<cfif result.id gt -1>
			<cfset deleteAccessProfileRole(arguments.accessProfileRole)>
		</cfif>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="getRolesStruct" access="public" returntype="struct" output="true">
		<cfset get()>
		<cfreturn variables.rolesStructure>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				accessProfileRoles.idAccessProfile=<cfqueryparam value="#variables.idAccessProfile#" cfsqltype="cf_sql_integer">
			ORDER BY accessProfileRoles.idSystemModule
		</cfquery>
		<cfif getQuery.recordcount neq StructCount(variables.rolesStructure)>
			<cfset variables.rolesStructure=StructNew()>
			<cfloop query="getQuery">
				<cfset role=CreateObject("component", "proventas31.corporate.accessProfileRole")>
				<cfset role.setIdAccessProfile(getQuery.idAccessProfile)>
				<cfset role.setIdSystemModule(getQuery.idSystemModule)>
				<cfset role.setDisplayName(getQuery.displayName)>
				<cfset role.setRoles(getQuery.roles)>
				<cfset addAccessProfileRole(role)>
			</cfloop>
		</cfif>
	</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
				accessProfileRoles.idAccessProfile=<cfqueryparam value="#variables.idAccessProfile#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#URLDecode(arguments.orderBy)#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>
	
	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				accessProfileRoles.idAccessProfile,
				accessProfileRoles.idSystemModule,
				systemModule.displayName,
				systemModule.idParent, parent.displayName AS parent,
				accessProfileRoles.roles
			FROM 
				accessProfileRoles
			LEFT JOIN systemModule ON systemModule.idSystemModule=accessProfileRoles.idSystemModule
			LEFT JOIN systemModule AS parent ON systemModule.idParent=parent.idSystemModule
			">
		<cfreturn result>
	</cffunction>
</cfcomponent>