<cfcomponent extends="proventas31.common.formObject">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.phrase="">
	<cfset variables.address="">
	<cfset variables.siteURL="">
	<cfset variables.arquitect="">
	<cfset variables.descriptionUnits="">
	<cfset variables.descriptionGeneral="">
	<cfset variables.descriptionAccessory="">
	<cfset variables.descriptionAttributes="">
	<cfset variables.descriptionAdditional="">
	<cfset variables.dateStart="">
	<cfset variables.dateEnd="">
	<cfset module.list.orderBy="idProject">
	
	<cffunction name="init" access="public" output="false">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.phrase="">
		<cfset variables.address="">
		<cfset variables.siteURL="">
		<cfset variables.arquitect="">
		<cfset variables.descriptionUnits="">
		<cfset variables.descriptionGeneral="">
		<cfset variables.descriptionAccessory="">
		<cfset variables.descriptionAttributes="">
		<cfset variables.descriptionAdditional="">
		<cfset variables.dateStart="">
		<cfset variables.dateEnd="">
	</cffunction>

	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProject()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProject(arguments.objectId)>
	</cffunction>

	<cffunction name="setIdProject" access="public" output="false">
		<cfargument name="idProject" type="numeric" required="yes" default="0">
		<cfset variables.idProject=arguments.idProject>
	</cffunction>

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

	<cffunction name="getProject" access="public" returntype="proventas31.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "proventas31.corporate.project")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.project.isRetrievedFromDB()) or variables.project.getIdProject() neq variables.idProject>
			<cfset variables.project=CreateObject("component", "proventas31.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="query" type="query" required="yes">
		<cfif query.recordcount gt 0>
			<cfset variables.idProject=query.idProject>
			<cfset variables.phrase=query.phrase>
			<cfset variables.address=ToString(query.address)>
			<cfset variables.siteURL=query.siteURL>
			<cfset variables.arquitect=query.arquitect>
			<cfset variables.descriptionUnits=ToString(query.descriptionUnits)>
			<cfset variables.descriptionGeneral=ToString(query.descriptionGeneral)>
			<cfset variables.descriptionAccessory=ToString(query.descriptionAccessory)>
			<cfset variables.descriptionAttributes=ToString(query.descriptionAttributes)>
			<cfset variables.descriptionAdditional=ToString(query.descriptionAdditional)>
			<cfif Len(query.dateStart)><cfset variables.dateStart=LSDateFormat(query.dateStart, "dd/mm/yyyy")><cfelse><cfset variables.dateStart=""></cfif>
			<cfif Len(query.dateEnd)><cfset variables.dateEnd=LSDateFormat(query.dateEnd, "dd/mm/yyyy")><cfelse><cfset variables.dateEnd=""></cfif>
		</cfif>
	</cffunction>
	
	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectInfo.idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

	<cffunction name="getQueryString" access="private" output="false" returntype="string">
		<cfset var result="
				projectInfo.idProject, 
				projectInfo.phrase,
				projectInfo.address,
				projectInfo.siteURL,
				projectInfo.arquitect,
				projectInfo.descriptionUnits,
				projectInfo.descriptionGeneral,
				projectInfo.descriptionAccessory,
				projectInfo.descriptionAttributes,
				projectInfo.descriptionAdditional,
				projectInfo.dateStart,
				projectInfo.dateEnd
			FROM 
				projectInfo 
			">
		<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 --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectInfo
					(
					idProject, 
					phrase,
					address,
					siteURL,
					arquitect, 
					descriptionUnits, 
					descriptionGeneral, 
					descriptionAccessory, 
					descriptionAttributes, 
					descriptionAdditional, 
					dateStart, 
					dateEnd 
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.phrase#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.address#" cfsqltype="cf_sql_clob">,
					<cfqueryparam value="#variables.siteURL#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.arquitect#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#variables.descriptionUnits#" cfsqltype="cf_sql_clob">,
					<cfqueryparam value="#variables.descriptionGeneral#" cfsqltype="cf_sql_clob">,
					<cfqueryparam value="#variables.descriptionAccessory#" cfsqltype="cf_sql_clob">,
					<cfqueryparam value="#variables.descriptionAttributes#" cfsqltype="cf_sql_clob">,
					<cfqueryparam value="#variables.descriptionAdditional#" cfsqltype="cf_sql_clob">,
					<cfif len(variables.dateStart)><cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					<cfif len(variables.dateEnd)><cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
					)
				ON DUPLICATE KEY UPDATE 
					phrase=<cfqueryparam value="#variables.phrase#" cfsqltype="cf_sql_varchar" maxlength="255">,
					address=<cfqueryparam value="#variables.address#" cfsqltype="cf_sql_clob">,
					siteURL=<cfqueryparam value="#variables.siteURL#" cfsqltype="cf_sql_varchar" maxlength="255">,
					arquitect=<cfqueryparam value="#variables.arquitect#" cfsqltype="cf_sql_varchar" maxlength="255">,
					descriptionUnits=<cfqueryparam value="#variables.descriptionUnits#" cfsqltype="cf_sql_clob">,
					descriptionGeneral=<cfqueryparam value="#variables.descriptionGeneral#" cfsqltype="cf_sql_clob">,
					descriptionAccessory=<cfqueryparam value="#variables.descriptionAccessory#" cfsqltype="cf_sql_clob">,
					descriptionAttributes=<cfqueryparam value="#variables.descriptionAttributes#" cfsqltype="cf_sql_clob">,
					descriptionAdditional=<cfqueryparam value="#variables.descriptionAdditional#" cfsqltype="cf_sql_clob">,
					dateStart=<cfif len(variables.dateStart)><cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>,
					dateEnd=<cfif len(variables.dateEnd)><cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
			</cfquery>
			<cfset result.id=variables.idProject>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectInfo.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>

	<cffunction name="update" access="public" returntype="struct" output="false">
		<cfreturn create()>
	</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 projectInfo
				WHERE 
					idProject=<cfqueryparam value="#variables.idProject#" 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 [projectInfo.delete()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
	
</cfcomponent>