<cfcomponent extends="proerp.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="proerp.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "proerp.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", "proerp.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="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idProject=getQuery.idProject>
			<cfset variables.phrase=getQuery.phrase>
			<cfset variables.address=ToString(getQuery.address)>
			<cfset variables.siteURL=getQuery.siteURL>
			<cfset variables.arquitect=getQuery.arquitect>
			<cfset variables.descriptionUnits=ToString(getQuery.descriptionUnits)>
			<cfset variables.descriptionGeneral=ToString(getQuery.descriptionGeneral)>
			<cfset variables.descriptionAccessory=ToString(getQuery.descriptionAccessory)>
			<cfset variables.descriptionAttributes=ToString(getQuery.descriptionAttributes)>
			<cfset variables.descriptionAdditional=ToString(getQuery.descriptionAdditional)>
			<cfif Len(getQuery.dateStart)><cfset variables.dateStart=LSDateFormat(getQuery.dateStart, "dd/mm/yyyy")><cfelse><cfset variables.dateStart=""></cfif>
			<cfif Len(getQuery.dateEnd)><cfset variables.dateEnd=LSDateFormat(getQuery.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="deleteQuery" datasource="#application.datasource#">
				DELETE FROM projectInfo
				WHERE 
					idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">
			</cfquery>
			<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 ListLen(variables.dateStart,"/") eq 3>'#ListGetAt(variables.dateStart,3,"/")#-#ListGetAt(variables.dateStart,2,"/")#-#ListGetAt(variables.dateStart,1,"/")#'<cfelse>'0000-00-00'</cfif>,
					<cfif ListLen(variables.dateEnd,"/") eq 3>'#ListGetAt(variables.dateEnd,3,"/")#-#ListGetAt(variables.dateEnd,2,"/")#-#ListGetAt(variables.dateEnd,1,"/")#'<cfelse>'0000-00-00'</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>