<cfcomponent extends="components.common.formObject">
	<cfset variables.idProjectParcel=0>
	<cfset variables.idParent=0>
	<cfset variables.parent="">
	<cfset variables.idProjectTask=0>
	<cfset variables.projectTask="">
	<cfset variables.idProjectActivity=0>
	<cfset variables.projectActivity="">
	<cfset variables.idProject=0>
	<cfset variables.project="">
	<cfset variables.idCurrency=0>
	<cfset variables.currency="">
	<cfset variables.idEmployee=0>
	<cfset variables.employee=0>
	<cfset variables.name="">
	<cfset variables.amountAuthorized=0>
	<cfset variables.amountUsed=0>
	<cfset variables.dateStart="">
	<cfset variables.dateEnd="">
	<cfset variables.dateEndReal="">
	<cfset module.list.orderBy="projectTask.name">

	<cffunction name="init" access="public" output="false">
		<cfset variables.idProjectParcel=0>
		<cfset variables.idParent=0>
		<cfset variables.parent="">
		<cfset variables.idProjectTask=0>
		<cfset variables.projectTask="">
		<cfset variables.idProjectActivity=0>
		<cfset variables.projectActivity="">
		<cfset variables.idProject=0>
		<cfset variables.project="">
		<cfset variables.idCurrency=0>
		<cfset variables.currency="">
		<cfset variables.idEmployee=0>
		<cfset variables.employee=0>
		<cfset variables.name="">
		<cfset variables.amountAuthorized=0>
		<cfset variables.amountUsed=0>
		<cfset variables.dateStart="">
		<cfset variables.dateEnd="">
		<cfset variables.dateEndReal="">
	</cffunction>
	
	<cffunction name="getFormObjectId" access="public" output="false" returntype="numeric">
		<cfreturn getIdProjectParcel()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProjectParcel(arguments.objectId)>
	</cffunction>

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

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

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

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

	<cffunction name="getProjectTask" access="remote" returntype="components.corporate.projectTask" output="false">
		<cfif not IsObject("variables.projectTask")><cfset variables.projectTask=CreateObject("component", "components.corporate.projectTask")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.projectTask.isRetrievedFromDB()) or variables.projectTask.getIdProjectTask() neq variables.idProjectTask>
			<cfset variables.projectTask=CreateObject("component", "components.corporate.projectTask")>
			<cfset variables.projectTask.setIdProjectTask(variables.idProjectTask)>
			<cfset variables.projectTask.get()>
		</cfif>
		<cfreturn variables.projectTask>
	</cffunction>

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

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

	<cffunction name="getProjectActivity" access="remote" returntype="components.corporate.projectActivity" output="false">
		<cfif not IsObject("variables.projectActivity")><cfset variables.projectActivity=CreateObject("component", "components.corporate.projectActivity")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.projectActivity.isRetrievedFromDB()) or variables.projectActivity.getIdProjectActivity() neq variables.idProjectActivity>
			<cfset variables.projectActivity=CreateObject("component", "components.corporate.projectActivity")>
			<cfset variables.projectActivity.setIdProjectActivity(variables.idProjectActivity)>
			<cfset variables.projectActivity.get()>
		</cfif>
		<cfreturn variables.projectActivity>
	</cffunction>

	<cffunction name="setIdParent" access="remote" output="false">
		<cfargument name="idParent" type="numeric" required="yes" default="0">
		<cfset variables.idParent=arguments.idParent>
	</cffunction>

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

	<cffunction name="getParent" access="remote" returntype="components.corporate.projectParcel" output="false">
		<cfif not IsObject("variables.parent")><cfset variables.parent=CreateObject("component", "components.corporate.projectParcel")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.parent.isRetrievedFromDB()) or variables.parent.getIdProjectParcel() neq variables.idProject>
			<cfset variables.parent=CreateObject("component", "components.corporate.projectParcel")>
			<cfset variables.parent.setIdProjectParcel(variables.idParent)>
			<cfset variables.parent.get()>
		</cfif>
		<cfreturn variables.parent>
	</cffunction>

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

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

	<cffunction name="getProject" access="remote" returntype="components.corporate.project" output="false">
		<cfif not IsObject("variables.project")><cfset variables.project=CreateObject("component", "components.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", "components.corporate.project")>
			<cfset variables.project.setIdProject(variables.idProject)>
			<cfset variables.project.get()>
		</cfif>
		<cfreturn variables.project>
	</cffunction>

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

	<cffunction name="getIdCurrency" access="public" returntype="numeric" output="false">
		<cfreturn variables.idCurrency>
	</cffunction>
	
	<cffunction name="getCurrency" access="remote" returntype="components.corporate.currency" output="false">
		<cfif not IsObject("variables.currency")><cfset variables.currency=CreateObject("component", "components.corporate.currency")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.currency.isRetrievedFromDB()) or variables.currency.getIdCurrency() neq variables.idCurrency>
			<cfset variables.currency=CreateObject("component", "components.corporate.currency")>
			<cfset variables.currency.setIdCurrency(variables.idCurrency)>
			<cfset variables.currency.get()>
		</cfif>
		<cfreturn variables.currency>
	</cffunction>

	<cffunction name="setIdEmployee" access="remote" output="false">
		<cfargument name="idEmployee" type="numeric" required="yes" default="0">
		<cfset variables.idEmployee=arguments.idEmployee>
	</cffunction>

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

	<cffunction name="getEmployee" access="remote" returntype="components.corporate.employee" output="false">
		<cfif not IsObject("variables.employee")><cfset variables.employee=CreateObject("component", "components.corporate.employee")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.employee.isRetrievedFromDB()) or variables.employee.getidEmployee() neq variables.idEmployee>
			<cfset variables.employee=CreateObject("component", "components.corporate.employee")>
			<cfset variables.employee.setidEmployee(variables.idEmployee)>
			<cfset variables.employee.get()>
		</cfif>
		<cfreturn variables.employee>
	</cffunction>

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

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

	<cffunction name="setAmountAuthorized" access="public" output="false">
		<cfargument name="amountAuthorized" type="string" required="yes" default="0">
		<cfset variables.amountAuthorized=parseCurrency(arguments.amountAuthorized)>
	</cffunction>

	<cffunction name="getAmountAuthorized" access="public" returntype="string" output="false">
		<cfreturn parseCurrency(variables.amountAuthorized)>
	</cffunction>

	<cffunction name="setAmountUsed" access="public" output="false">
		<cfargument name="amountUsed" type="string" required="yes" default="0">
		<cfset variables.amountUsed=parseCurrency(arguments.amountUsed)>
	</cffunction>

	<cffunction name="getAmountUsed" access="public" returntype="string" output="false">
		<cfreturn parseCurrency(variables.amountUsed)>
	</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="setDateEndReal" access="public" output="false">
		<cfargument name="dateEndReal" type="string" required="yes" default="">
		<cfset variables.dateEndReal=arguments.dateEndReal>
	</cffunction>

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfset variables.idProjectParcel=getQuery.idProjectParcel>
			<cfif Len(getQuery.idParent)><cfset variables.idParent=getQuery.idParent><cfelse><cfset variables.idParent=0></cfif>
			<cfset variables.idProjectTask=getQuery.idProjectTask>
			<cfset variables.idProjectActivity=getQuery.idProjectActivity>
			<cfset variables.idProject=getQuery.idProject>
			<cfif Len(getQuery.idCurrency)><cfset variables.idCurrency=getQuery.idCurrency><cfelse><cfset variables.idCurrency=0></cfif>
			<cfif Len(getQuery.idEmployee)><cfset variables.idEmployee=getQuery.idEmployee><cfelse><cfset variables.idEmployee=0></cfif>
			<cfset variables.name=getQuery.name>
			<cfset variables.amountAuthorized=getQuery.amountAuthorized>
			<cfset variables.amountUsed=getQuery.amountUsed>
			<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 Len(getQuery.dateEndReal)><cfset variables.dateEndReal=LSDateFormat(getQuery.dateEndReal, "dd/mm/yyyy")><cfelse><cfset variables.dateEndReal=""></cfif>
		</cfif>
	</cffunction>

	<cffunction name="get" access="public" output="false">
		<cfquery name="getQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectParcel.idProjectParcel=<cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer">
		</cfquery>
		<cfif getQuery.recordcount gt 0>
			<cfset setVariablesFromQuery(getQuery)>
		</cfif>
		<cfset module.retrievedFromDB=true>
	</cffunction>

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

		<cfquery name="getListQuery" datasource="#application.datasource#">
			SELECT 
				#getQueryString()#
			WHERE
				projectParcel.idProjectTask=<cfqueryparam value="#variables.idProjectTask#" 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="
				projectParcel.idProjectParcel,
				projectParcel.idParent, parent.name AS parent,
				projectParcel.idProjectTask, projectTask.name AS projectTask, 
				projectParcel.idProjectActivity, projectActivity.name AS projectActivity,
				projectParcel.idProject, project.name AS project, 
				projectParcel.idCurrency, currency.name AS currency,
				projectParcel.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				projectParcel.name,
				projectParcel.amountAuthorized,
				projectParcel.amountUsed, 
				(projectParcel.amountAuthorized-projectParcel.amountUsed) AS amountAvailable,
				projectParcel.dateStart,
				projectParcel.dateEnd,
				projectParcel.dateEndReal
			FROM 
				projectParcel
			LEFT JOIN projectParcel AS parent ON projectParcel.idParent=parent.idProjectParcel
			LEFT JOIN projectTask ON projectParcel.idProjectTask=projectTask.idProjectTask
			LEFT JOIN projectActivity ON projectParcel.idProjectActivity=projectActivity.idProjectActivity
			LEFT JOIN project ON projectParcel.idProject=project.idProject
			LEFT JOIN currency ON projectParcel.idCurrency=currency.idCurrency
			LEFT JOIN employee ON projectParcel.idEmployee=employee.idEmployee
			">
		<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 
				idProjectParcel 
			FROM 
				projectParcel 
			WHERE 
				name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">
				AND projectParcel.idProjectTask=<cfqueryparam value="#variables.idProjectTask#" cfsqltype="cf_sql_integer">
				<cfif variables.idProjectParcel gt 0>
				AND idProjectParcel != <cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer">
				</cfif>
		</cfquery>
		<cfif getIdQuery.recordcount gt 0>
			<cfset result.id=getIdQuery.idProjectParcel>
		</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 variables.idProject lt 1>
			<cfset result.message="Proyecto es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfif not Len(variables.name)>
			<cfset result.message="Nombre de la actividad es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Actividad con ese nombre ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectParcel
					(
					idProjectParcel, 
					idParent, 
					idProjectTask, 
					idProjectActivity, 
					idProject, 
					idCurrency, 
					idEmployee, 
					name, 
					amountAuthorized,
					amountUsed,
					dateStart, 
					dateEnd,
					dateEndReal
					) 
				VALUES 
					(
					<cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idParent gt 0><cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.idProjectTask#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					<cfqueryparam value="#parseCurrency(variables.amountAuthorized)#" cfsqltype="cf_sql_double">,
					<cfqueryparam value="#parseCurrency(variables.amountUsed)#" cfsqltype="cf_sql_double">,
					<cfif variables.dateStart gt 0><cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					<cfif variables.dateEnd gt 0><cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					<cfif variables.dateEndReal gt 0><cfqueryparam value="#parseDate(variables.dateEndReal)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
					)
			</cfquery>
			<cfset result=getId()>
			<cfset variables.idProjectParcel=result.id>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectParcel.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.name)>
			<cfset result.message="Nombre de tipo de empleado es un campo obligatorio">
			<cfreturn result>
		</cfif>
		<cfset result=getId()>
		<cfif result.id gt 0>
			<cfset result.message="Tipo de empleado con ese nombre ya existe">
			<cfreturn result>
		</cfif>
		<!--- variables ok --->
		<cftry>
			<cfquery name="updateQuery" datasource="#application.datasource#">
				UPDATE projectParcel
				SET 
					idParent=<cfif variables.idParent gt 0><cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idProjectTask=<cfqueryparam value="#variables.idProjectTask#" cfsqltype="cf_sql_integer">,
					idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">,
					idProject=<cfqueryparam value="#variables.idProject#" cfsqltype="cf_sql_integer">, 
					idCurrency=<cfif variables.idCurrency gt 0><cfqueryparam value="#variables.idCurrency#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					idEmployee=<cfif variables.idEmployee gt 0><cfqueryparam value="#variables.idEmployee#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					name=<cfqueryparam value="#variables.name#" cfsqltype="cf_sql_varchar" maxlength="255">,
					amountAuthorized=<cfqueryparam value="#parseCurrency(variables.amountAuthorized)#" cfsqltype="cf_sql_double">,
					amountUsed=<cfqueryparam value="#parseCurrency(variables.amountUsed)#" cfsqltype="cf_sql_double">,
					dateStart=<cfif variables.dateStart gt 0><cfqueryparam value="#parseDate(variables.dateStart)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					dateEnd=<cfif variables.dateEnd gt 0><cfqueryparam value="#parseDate(variables.dateEnd)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>, 
					dateEndReal=<cfif variables.dateEndReal gt 0><cfqueryparam value="#parseDate(variables.dateEndReal)#" cfsqltype="cf_sql_date"><cfelse>NULL</cfif>
				WHERE 
					idProjectParcel=<cfqueryparam value="#variables.idProjectParcel#" cfsqltype="cf_sql_integer">
			</cfquery>
			<cfset result.id=variables.idProjectParcel>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectParcel.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 projectParcel
				WHERE 
					idProjectParcel=<cfqueryparam value="#variables.idProjectParcel#" 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 [projectParcel.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">
		<cfset var list=getList("projectParcel.idProjectParcel")>
		<cfset var result=0>
		<cfif list.idProjectParcel gt 0><cfset result=list.idProjectParcel></cfif>
		<cfloop query="list">
			<cfif list.idProjectParcel eq arguments.selected><cfset _selected=" selected"><cfset result=list.idProjectParcel><cfelse><cfset _selected=""></cfif>
			<cfoutput><option value="#list.idProjectParcel#"#_selected#>#list.name#</option></cfoutput>
		</cfloop>
		<cfreturn result>
	</cffunction>
</cfcomponent>