<cfcomponent extends="components.common.formObject">
	<cfset variables.idAccessProfile=0>
	<cfset variables.accessProfile="">
	<cfset variables.idSystemModule=0>
	<cfset variables.systemModule="">
	<cfset variables.displayName="">
	<cfset variables.roles="">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idAccessProfile=0>
		<cfset variables.accessProfile="">
		<cfset variables.idSystemModule=0>
		<cfset variables.systemModule="">
		<cfset variables.displayName="">
		<cfset variables.roles="">
	</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="getAccessProfile" access="public" returntype="components.corporate.accessProfile" output="false">
		<cfset variables.accessProfile=CreateObject("component", "components.corporate.accessProfile")>
		<cfset variables.accessProfile.setIdSystemModule(variables.idAccessProfile)>
		<cfset variables.accessProfile.get()>
		<cfreturn variables.accessProfile>
	</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="setDisplayName" access="public" output="false">
		<cfargument name="displayName" type="string" required="yes" default="">
		<cfset variables.displayName=arguments.displayName>
	</cffunction>
	
	<cffunction name="getDisplayName" access="public" returntype="string" output="false">
		<cfreturn variables.displayName>
	</cffunction>

	<cffunction name="getSystemModule" access="public" returntype="components.corporate.systemModule" output="false">
		<cfset variables.systemModule=CreateObject("component", "components.corporate.systemModule")>
		<cfset variables.systemModule.setIdSystemModule(variables.idSystemModule)>
		<cfset variables.systemModule.get()>
		<cfset variables.displayName=variables.systemModule.getDisplayName()>
		<cfreturn variables.systemModule>
	</cffunction>

	<cffunction name="setRoles" access="public" output="false">
		<cfargument name="roles" type="string" required="yes" default="">
		<cfset variables.roles=arguments.roles>
	</cffunction>

	<cffunction name="getRoles" access="public" returntype="string" output="false">
		<cfreturn variables.roles>
	</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">
				AND accessProfileRoles.idSystemModule=<cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset variables.roles=getQuery.roles>
		</cfif>
		<!--- ADDED: set that object was retrieved from DB --->
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				accessProfileRoles.idAccessProfile,
				accessProfileRoles.idSystemModule,
				accessProfileRoles.roles
			FROM 
				accessProfileRoles">
		<cfreturn result>
	</cffunction>

	<cffunction name="create" access="public" output="false" returntype="struct">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfif variables.idAccessProfile lt 1>
			<cfset result.message="Nombre de perfil de acceso es invalido">
			<cfreturn result>
		</cfif>
		<cfif variables.idSystemModule lt 1>
			<cfset result.message="Modulo de sistema es invalido">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.roles)>
			<cfset result=delete()>
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO accessProfileRoles
					(
					idAccessProfile, idSystemModule, roles
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idAccessProfile#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.roles#" cfsqltype="cf_sql_varchar" maxlength="255">
					)
				ON DUPLICATE KEY UPDATE 
					roles=<cfqueryparam value="#variables.roles#" cfsqltype="cf_sql_varchar" maxlength="255">
			</cfquery>
			<cfset result.id=1>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [accesssProfileRoles.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="delete" access="public" output="false" returntype="struct">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfif variables.idAccessProfile lt 1>
			<cfset result.message="Nombre de perfil de acceso es invalido">
			<cfreturn result>
		</cfif>
		<cfif variables.idSystemModule lt 1>
			<cfset result.message="Modulo de sistema es invalido">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="deleteQuery" datasource="#application.datasource#">
				DELETE FROM accessProfileRoles 
				WHERE 
					idAccessProfile=<cfqueryparam value="#variables.idAccessProfile#" cfsqltype="cf_sql_integer">
					AND idSystemModule=<cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=0>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [accesssProfileRoles.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>