<cfcomponent extends="components.common.formObject">
	<cfset variables.idCompanyDepartment=0>
	<cfset variables.idCompany=0>
	<cfset variables.company="">
	<cfset variables.idServerFile=0>
	<cfset variables.serverFile="">
	<cfset variables.name="">
	<cfset module.list.orderBy="name">
	
	<cffunction name="init" access="remote" output="false">
		<cfset variables.idCompanyDepartment=0>
		<cfset variables.idCompany=0>
		<cfset variables.company="">
		<cfset variables.idServerFile=0>
		<cfset variables.serverFile="">
		<cfset variables.name="">
		<cfset module.list.orderBy="name">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdCompanyDepartment()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdCompanyDepartment(arguments.objectId)>
	</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="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="setIdServerFile" access="public" output="false">
		<cfargument name="idServerFile" type="numeric" required="yes" default="0">
		<cfset variables.idServerFile=arguments.idServerFile>
	</cffunction>

	<cffunction name="getIdServerFile" access="public" returntype="numeric" output="false">
		<cfreturn variables.idServerFile>
	</cffunction>
	
	<cffunction name="getServerFile" access="public" returntype="components.corporate.serverFile" output="false">
		<cfif not IsObject("variables.serverFile")><cfset variables.serverFile=CreateObject("component", "components.corporate.serverFile")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.serverFile.isRetrievedFromDB()) or variables.serverFile.getIdServerFile() neq variables.idServerFile>
			<cfset variables.serverFile=CreateObject("component", "components.corporate.serverFile")>
			<cfset variables.serverFile.setIdServerFile(variables.idServerFile)>
			<cfset variables.serverFile.get()>
		</cfif>
		<cfreturn variables.serverFile>
	</cffunction>

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

	<cffunction name="getName" access="remote" returntype="string" output="false">
		<cfreturn variables.name>
	</cffunction>

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idCompanyDepartment=getQuery.idCompanyDepartment>
			<cfset variables.idCompany=getQuery.idCompany>
			<cfif Len(getQuery.idServerFile)><cfset variables.idServerFile=getQuery.idServerFile><cfelse><cfset variables.idServerFile=0></cfif>
			<cfset variables.name=getQuery.name>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="remote" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				companyDepartment.idCompanyDepartment=<cfqueryparam value="#variables.idCompanyDepartment#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getList" access="remote" output="false" returntype="query">
		<cfargument name="orderBy" required="no" type="string" default="idCompanyDepartment">
		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				companyDepartment.idCompany=<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">
			ORDER BY <cfif Len(arguments.orderBy)>#arguments.orderBy#<cfelse>#module.list.orderBy#</cfif>
		</cfquery>
		<cfreturn getListQuery>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				companyDepartment.idCompanyDepartment,
				companyDepartment.idCompany, company.name as company, 
				companyDepartment.idServerFile, serverFile.serverFileName AS serverFileName, serverFile.displayName AS displayName,
				companyDepartment.name
			FROM 
				companyDepartment 
			LEFT JOIN company ON companyDepartment.idCompany=company.idCompany
			LEFT JOIN serverFile ON companyDepartment.idServerFile=serverFile.idServerFile
			">
		<cfreturn result>
	</cffunction>

	<cffunction name="getId" access="remote" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfquery name="getIdQuery" datasource="#application.datasource#">
			SELECT 
				idCompanyDepartment 
			FROM 
				companyDepartment 
			WHERE 
				idCompany=<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">
				AND name=<cfqueryparam value="#encodeAndTrim(variables.name, 255)#" cfsqltype="cf_sql_varchar" maxlength="255">
				<cfif variables.idCompanyDepartment gt 0>
				AND idCompanyDepartment != <cfqueryparam value="#variables.idCompanyDepartment#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idCompanyDepartment>
		</cfif>
		<cfreturn result>
	</cffunction>
	

	<cffunction name="create" access="remote" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Departamento cone esos datos ya existe">
			<cfreturn result>
		</cfif>
		<!--- check parameters --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO companyDepartment
					(
					idCompany, 
					idServerFile,
					name 
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idServerFile gt 0><cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#encodeAndTrim(variables.name, 255)#" cfsqltype="cf_sql_varchar" maxlength="255">
					)
			</cfquery>
			<cfset result=getId()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [companyDepartment.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="remote" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<!--- check parameters --->
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Departamento cone esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE companyDepartment SET
					idServerFile=<cfif variables.idServerFile gt 0><cfqueryparam value="#variables.idServerFile#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					name=<cfif Len(variables.name)><cfqueryparam value="#encodeAndTrim(variables.name, 255)#" cfsqltype="cf_sql_varchar" maxlength="255"><cfelse>NULL</cfif>
				WHERE
					companyDepartment.idCompanyDepartment=<cfqueryparam value="#variables.idCompanyDepartment#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idCompanyDepartment>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [companyDepartment.update()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</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 companyDepartment
				WHERE 
					companyDepartment.idCompanyDepartment=<cfqueryparam value="#variables.idCompanyDepartment#" 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 [companyDepartment.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
	<cffunction name="createOptions" access="public" returntype="numeric" output="true">
		<cfargument name="selected" required="yes" type="numeric" default="0">
		<cfargument name="idCompany" required="no" type="numeric" default="0">
		<cfset var list="">
		<cfset var result=0>
		<cfset variables.idCompany=arguments.idCompany>
		<cfset list=getList("companyDepartment.name")>
		<cfset result=0>
		<cfif list.idCompanyDepartment gt 0><cfset result=list.idCompanyDepartment></cfif>
		<cfloop query="list">
			<cfif list.idCompanyDepartment eq arguments.selected><cfset _selected=" selected"><cfset result=list.idCompanyDepartment><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idCompanyDepartment#"#_selected#>#list.name#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>