<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idSystemModule=0>
	<cfset variables.idParent=0>
	<cfset variables.parent="">
	<cfset variables.location="">
	<cfset variables.showInMenu="Y">
	<cfset variables.displayName="">
	<cfset module.list.orderBy="idSystemModule">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idSystemModule=0>
		<cfset variables.idParent=0>
		<cfset variables.parent="">
		<cfset variables.location="">
		<cfset variables.showInMenu="Y">
		<cfset variables.displayName="">
	</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="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="setIdParent" access="public" output="false">
		<cfargument name="idParent" type="numeric" required="yes" default="0">
		<cfset variables.idParent=arguments.idParent>
	</cffunction>

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

	<cffunction name="getParent" access="public" returntype="proventas31.corporate.systemModule" output="false">
		<cfset variables.parent=CreateObject("component", "proventas31.corporate.systemModule")>
		<cfset variables.parent.setIdSystemModule(variables.idParent)>
		<cfset variables.parent.get()>
		<cfreturn variables.parent>
	</cffunction>

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

	<cffunction name="getLocation" access="public" returntype="string" output="false">
		<cfreturn variables.location>
	</cffunction>

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

	<cffunction name="getShowInMenu" access="public" returntype="string" output="false">
		<cfreturn variables.showInMenu>
	</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="setVariablesFromQuery" access="private" output="false">
		<cfargument name="query" type="query" required="yes">
		<cfif query.recordcount gt 0>
			<cfset variables.idSystemModule=query.idSystemModule>
			<cfif Len(query.idParent)><cfset variables.idParent=query.idParent></cfif>
			<cfset variables.location=query.location>
			<cfset variables.showInMenu=query.showInMenu>
			<cfset variables.displayName=query.displayName>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				systemModule.idSystemModule=<cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
	</cffunction>
	
	<cffunction name="getByLocation" access="public" output="false">
		<cfquery name="getByLocationQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				systemModule.location=<cfqueryparam value="#variables.location#" cfsqltype="cf_sql_varchar" maxlength="255">
		</cfquery>
		<cfif getByLocationQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getByLocationQuery)>
		</cfif>
	</cffunction>

	<cffunction name="getList" access="public" output="false" returntype="query">
		<cfargument name="idParent" required="no" type="numeric" default="-1">
		<cfargument name="orderBy" required="no" type="string" default="">

		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			<cfif arguments.idParent gt -1>
			WHERE 
				AND systemModule.idParent=<cfqueryparam value="#arguments.idParent#" cfsqltype="cf_sql_integer">
			</cfif>
			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="
				systemModule.idSystemModule,
				systemModule.idParent,
				parent.displayName AS parent,
				systemModule.location,
				systemModule.showInMenu,
				systemModule.displayName
			FROM 
				systemModule
				LEFT JOIN systemModule AS parent ON systemModule.idParent=parent.idSystemModule
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="createOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfargument name="idParent" required="no" type="numeric" default="-1">
		<cfset var list=getList(arguments.idParent, "systemModule.idSystemModule")>
		<cfset var result=0>
		<cfif list.idSystemModule gt 0><cfset result=list.idSystemModule></cfif>
		<cfloop query="list">
			<cfif list.idSystemModule eq arguments.selected><cfset checked=" selected"><cfset result=list.idSystemModule><cfelse><cfset checked=""></cfif>
			<cfoutput><option value="#list.idSystemModule#"#checked#><cfif Len(list.parent)>[#list.parent#] </cfif>#list.displayName#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>

	<cffunction name="getId" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfquery name="getIdQuery" datasource="#application.datasource#">
			SELECT 
				idSystemModule 
			FROM 
				systemModule 
			WHERE 
				idParent=<cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer">
				AND location=<cfqueryparam value="#variables.location#" cfsqltype="cf_sql_varchar" maxlength="255">
				<cfif variables.idSystemModule gt 0>
				AND idSystemModule != <cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idSystemModule>
		</cfif>
		<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 not Len(variables.displayName)>
			<cfset result.message="Nombre de modulo es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.location)>
			<cfset result.message="Ubicacion en el servidor es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Modulo de sistema con esos parametros ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO systemModule
					(
					idSystemModule, idParent,
					location, showInMenu, 
					displayName
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.location#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#UCase(variables.showInMenu)#" cfsqltype="cf_sql_char" maxlength="1">,
					<cfqueryparam value="#variables.displayName#" cfsqltype="cf_sql_varchar" maxlength="255">
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idSystemModule=result.id>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [systemModule.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfif not Len(variables.displayName)>
			<cfset result.message="Nombre de modulo es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.location)>
			<cfset result.message="Ubicacion en el servidor es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Modulo de sistema con esos parametros ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE systemModule
				SET 
					idParent=<cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer">, 
					location=<cfqueryparam value="#variables.location#" cfsqltype="cf_sql_varchar" maxlength="255">,
					showInMenu=<cfqueryparam value="#UCase(variables.showInMenu)#" cfsqltype="cf_sql_char" maxlength="1">,
					displayName=<cfqueryparam value="#variables.displayName#" cfsqltype="cf_sql_varchar" maxlength="255">
				WHERE 
					idSystemModule=<cfqueryparam value="#variables.idSystemModule#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idSystemModule>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [systemModule.update()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</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 systemModule
				WHERE 
					idSystemModule=<cfqueryparam value="#variables.idSystemModule#" 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 [systemModule.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>