<cfcomponent extends="components.common.formObject">
	<cfset variables.idCompanyProject=0>
	<cfset variables.idCompany=0>
	<cfset variables.company="">
	<cfset variables.idPriceRangeStart=0>
	<cfset variables.priceRangeStart="">
	<cfset variables.idPriceRangeEnd=0>
	<cfset variables.priceRangeEnd="">
	<cfset variables.name="">
	<cfset variables.numberOfUnits=0>
	<cfset variables.deliveryDate="">
	<cfset variables.location="">
	
	<cffunction name="init" access="remote" output="false">
		<cfset variables.idCompanyProject=0>
		<cfset variables.idCompany=0>
		<cfset variables.company="">
		<cfset variables.idPriceRangeStart=0>
		<cfset variables.priceRangeStart="">
		<cfset variables.idPriceRangeEnd=0>
		<cfset variables.priceRangeEnd="">
		<cfset variables.name="">
		<cfset variables.numberOfUnits=0>
		<cfset variables.deliveryDate="">
		<cfset variables.location="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdCompanyProject()>
	</cffunction>
	
	<cffunction name="setIdCompanyProject" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdCompany(arguments.objectId)>
	</cffunction>

	<!--- //////////////////////////////////////idCompanyProject\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\--->
	<cffunction name="setIdCompanyProject" access="remote" output="false">
		<cfargument name="idCompanyProject" type="numeric" required="yes" default="0">
		<cfset variables.idCompanyProject=arguments.idCompanyProject>
	</cffunction>

	<cffunction name="getIdCompanyProject" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idCompanyProject>
	</cffunction>

	<!--- //////////////////////////////////////company\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\--->
	<cffunction name="setIdCompany" access="public" output="false">
		<cfargument name="idCompany" type="numeric" required="yes" default="0">
		<cfset variables.idCompany=arguments.idCompany>
	</cffunction>

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

	<cffunction name="getCompany" access="public" 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>

	<!--- //////////////////////////////////////priceRangeStart\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\--->
	<cffunction name="setIdPriceRangeStart" access="remote" output="false">
		<cfargument name="idPriceRangeStart" type="numeric" required="yes" default="0">
		<cfset variables.idPriceRangeStart=arguments.idPriceRangeStart>
	</cffunction>

	<cffunction name="getIdPriceRangeStart" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idPriceRangeStart>
	</cffunction>
	
	<cffunction name="getPriceRangeStart" access="remote" returntype="components.corporate.infPriceRange" output="false">
		<cfset variables.priceRangeStart=CreateObject("component", "components.corporate.infPriceRange")>
		<cfset variables.priceRangeStart.setIdPriceRange(variables.idPriceRangeStart)>
		<cfset variables.priceRangeStart.get()>
		<cfreturn variables.priceRangeStart>
	</cffunction>

	<!--- //////////////////////////////////////priceRangeEnd\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\--->
	<cffunction name="setIdPriceRangeEnd" access="remote" output="false">
		<cfargument name="idPriceRangeEnd" type="numeric" required="yes" default="0">
		<cfset variables.idPriceRangeEnd=arguments.idPriceRangeEnd>
	</cffunction>

	<cffunction name="getIdPriceRangeEnd" access="remote" returntype="numeric" output="false">
		<cfreturn variables.idPriceRangeEnd>
	</cffunction>
	
	<cffunction name="getPriceRangeEnd" access="remote" returntype="components.corporate.infPriceRange" output="false">
		<cfset variables.priceRangeEnd=CreateObject("component", "components.corporate.infPriceRange")>
		<cfset variables.priceRangeEnd.setIdPriceRange(variables.idPriceRangeEnd)>
		<cfset variables.priceRangeEnd.get()>
		<cfreturn variables.priceRangeEnd>
	</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="setNumberOfUnits" access="remote" output="false">
		<cfargument name="numberOfUnits" type="numeric" required="yes" default="0">
		<cfset variables.numberOfUnits=arguments.numberOfUnits>
	</cffunction>

	<cffunction name="getNumberOfUnits" access="remote" returntype="numeric" output="false">
		<cfreturn variables.numberOfUnits>
	</cffunction>
	
	<cffunction name="setDeliveryDate" access="remote" output="false">
		<cfargument name="deliveryDate" type="string" required="yes" default="">
		<cfset variables.deliveryDate=arguments.deliveryDate>
	</cffunction>

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

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idCompanyProject=getQuery.idCompanyProject>
			<cfset variables.idCompany=getQuery.idCompany>
			<cfset variables.company=getQuery.Company>
			<cfset variables.idPriceRangeStart=getQuery.idPriceRangeStart>
			<cfset variables.idPriceRangeEnd=getQuery.idPriceRangeEnd>
			<cfset variables.name=getQuery.name>
			<cfif Len(getQuery.numberOfUnits)><cfset variables.numberOfUnits=getQuery.numberOfUnits></cfif>
			<cfset variables.deliveryDate=LSDateFormat(getQuery.deliveryDate,"dd/mm/yyyy")>
			<cfset variables.location=getQuery.location>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="remote" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				companyProject.idCompanyProject=<cfqueryparam value="#variables.idCompanyProject#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<!--- ADDED: set that object was retrieved from DB --->
		<cfset module.retrievedFromDB=true>
	</cffunction>

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

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				companyProject.idCompanyProject,
				companyProject.idCompany, 
				company.name as company, 
				companyProject.idPriceRangeStart,
				infPriceRangeStart.name as priceRangeStart,
				companyProject.idPriceRangeEnd,
				infPriceRangeEnd.name as priceRangeEnd,
				companyProject.name, 
				companyProject.numberOfUnits,
				companyProject.deliveryDate,
				companyProject.location
			FROM 
				companyProject 
			LEFT JOIN company ON companyProject.idCompany=company.idCompany
			LEFT JOIN infPriceRange AS infPriceRangeStart ON companyProject.idPriceRangeStart=infPriceRangeStart.idPriceRange
			LEFT JOIN infPriceRange AS infPriceRangeEnd ON companyProject.idPriceRangeEnd=infPriceRangeEnd.idPriceRange
			">
		<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 
				idCompanyProject 
			FROM 
				companyProject 
			WHERE 
				idCompany=<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">
				AND name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">
				<cfif variables.idCompanyProject gt 0>
				AND idCompanyProject != <cfqueryparam value="#variables.idCompanyProject#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idCompanyProject>
		</cfif>
		<cfreturn result>
	</cffunction>

	<cffunction name="create" access="remote" returntype="struct" output="false">
		<cfset var result=StructNew()>
		<cfset result.id=0>
		<cfset result.message="">
		<cfif not Len(variables.name)>
			<cfset result.message="Nombre de desarrollo es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Contacto del banco cone esos datos ya existe">
			<cfreturn result>
		</cfif>
		<!--- check parameters --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO companyProject
					(
					idCompany, 
					idPriceRangeStart,
					idPriceRangeEnd,
					name, 
					numberOfUnits,
					deliveryDate,
					location
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idCompany#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idPriceRangeStart#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idPriceRangeEnd#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.numberOfUnits#" cfsqltype="cf_sql_integer">, 
					<cfif Len(variables.deliveryDate)><cfqueryparam value="#parseDate(variables.deliveryDate)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfif Len(variables.location)><cfqueryparam value="#encode(variables.location)#" cfsqltype="cf_sql_clob"><cfelse>NULL</cfif>
					)
			</cfquery>
			<cfset result=getId()>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [companyProject.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="Contacto del banco cone esos datos ya existe">
			<cfreturn result>
		</cfif>
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE companyProject SET
					idPriceRangeStart=<cfqueryparam value="#variables.idPriceRangeStart#" cfsqltype="cf_sql_integer">, 
					idPriceRangeEnd=<cfqueryparam value="#variables.idPriceRangeEnd#" cfsqltype="cf_sql_integer">, 
					name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					numberOfUnits=<cfqueryparam value="#variables.numberOfUnits#" cfsqltype="cf_sql_integer">, 
					deliveryDate=<cfif Len(variables.deliveryDate)><cfqueryparam value="#parseDate(variables.deliveryDate)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					location=<cfif Len(variables.location)><cfqueryparam value="#encode(variables.location)#" cfsqltype="cf_sql_clob"><cfelse>NULL</cfif>
				WHERE
					companyProject.idCompanyProject=<cfqueryparam value="#variables.idCompanyProject#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idCompanyProject>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [companyProject.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 companyProject
				WHERE 
					companyProject.idCompanyProject=<cfqueryparam value="#variables.idCompanyProject#" 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 [companyProject.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>