<cfcomponent extends="components.common.formObject">
	<cfset variables.dateRegistered="">
	<cfset variables.idRegistrant=0>
	<cfset variables.registrant="">
	<cfset variables.comment="">
	<cfset variables.idProjectActivity=0>
	<cfset variables.idParent=0>
	<cfset variables.parent="">
	<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="projectActivityHistory.dateRegistered DESC">

	<cffunction name="init" access="public" output="false">
		<cfset variables.dateRegistered="">
		<cfset variables.idRegistrant=0>
		<cfset variables.registrant="">
		<cfset variables.comment="">
		<cfset variables.idProjectActivity=0>
		<cfset variables.idParent=0>
		<cfset variables.parent="">
		<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 getIdProjectActivity()>
	</cffunction>
	
	<cffunction name="setFormObjectId" access="public" output="false">
		<cfargument name="objectId" type="numeric" required="yes">
		<cfset setIdProjectActivity(arguments.objectId)>
	</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="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.projectActivity" output="false">
		<cfif not IsObject("variables.parent")><cfset variables.parent=CreateObject("component", "components.corporate.projectActivity")></cfif>
		<cfif (Compare(module.form.pageAction, "add") and not variables.parent.isRetrievedFromDB()) or variables.parent.getIdProjectActivity() neq variables.idParent>
			<cfset variables.parent=CreateObject("component", "components.corporate.projectActivity")>
			<cfset variables.parent.setIdProjectActivity(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()>
			<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()>
			<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="setDateRegistered" access="public" output="false">
		<cfargument name="dateRegistered" type="string" required="yes" default="">
		<cfset variables.dateRegistered=arguments.dateRegistered>
	</cffunction>

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

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

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

	<cffunction name="getRegistrant" access="remote" returntype="components.corporate.employee" output="false">
		<cfif not IsObject("variables.registrant")><cfset variables.registrant=CreateObject("component", "components.corporate.employee")></cfif>
		<cfif Compare(module.form.pageAction, "add") and not variables.registrant.isRetrievedFromDB()>
			<cfset variables.registrant=CreateObject("component", "components.corporate.employee")>
			<cfset variables.registrant.setIdEmployee(variables.idRegistrant)>
			<cfset variables.registrant.get()>
		</cfif>
		<cfreturn variables.registrant>
	</cffunction>

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

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

	<cffunction name="setVariablesFromQuery" access="private" output="false">
		<cfargument name="getQuery" type="query" required="yes">
		<cfif getQuery.recordcount gt 0>
			<cfif Len(getQuery.dateRegistered)><cfset variables.dateRegistered=LSDateFormat(getQuery.dateRegistered, "dd/mm/yyyy") & " " & LSTimeFormat(getQuery.dateRegistered)><cfelse><cfset variables.dateRegistered=""></cfif>
			<cfset variables.idRegistrant=getQuery.idRegistrant>
			<cfset variables.comment=ToString(getQuery.comment)>
			
			<cfset variables.idProjectActivity=getQuery.idProjectActivity>
			<cfif Len(getQuery.idParent)><cfset variables.idParent=getQuery.idParent><cfelse><cfset variables.idParent=0></cfif>
			<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
				projectActivityHistory.idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">
				<cfif not Len(variables.dateRegistered)>
				AND projectActivityHistory.dateRegistered=(
					SELECT MAX(dateRegistered) FROM projectActivityHistory WHERE idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">
				)
				<cfelse>
				AND projectActivityHistory.dateRegistered=<cfqueryparam value="#parseDate(variables.dateRegistered)#" cfsqltype="cf_sql_timestamp">
				</cfif>
		</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
				projectActivityHistory.idProjectActivity=<cfqueryparam value="#variables.idProjectActivity#" 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="
				projectActivityHistory.dateRegistered,
				projectActivityHistory.idRegistrant, CONCAT(TRIM(CONCAT(registrant.nameFirst, ' ', registrant.nameFirst1)), ' ', TRIM(CONCAT(registrant.nameLast, ' ', registrant.nameLast1))) AS registrant,
				projectActivityHistory.idProjectActivity,
				projectActivityHistory.idParent, parent.name AS parent,
				projectActivityHistory.idProject, project.name AS project, 
				projectActivityHistory.idCurrency, currency.name AS currency,
				projectActivityHistory.idEmployee, CONCAT(TRIM(CONCAT(employee.nameFirst, ' ', employee.nameFirst1)), ' ', TRIM(CONCAT(employee.nameLast, ' ', employee.nameLast1))) AS employee,
				projectActivityHistory.name,
				projectActivityHistory.amountAuthorized,
				projectActivityHistory.amountUsed, 
				(projectActivityHistory.amountAuthorized-projectActivityHistory.amountUsed) AS amountAvailable,
				projectActivityHistory.dateStart,
				projectActivityHistory.dateEnd,
				projectActivityHistory.dateEndReal,
				projectActivityHistory.comment
			FROM 
				projectActivityHistory
			LEFT JOIN projectActivity AS parent ON projectActivityHistory.idParent=parent.idProjectActivity
			LEFT JOIN project ON projectActivityHistory.idProject=project.idProject
			LEFT JOIN currency ON projectActivityHistory.idCurrency=currency.idCurrency
			LEFT JOIN employee ON projectActivityHistory.idEmployee=employee.idEmployee
			LEFT JOIN employee AS registrant ON projectActivityHistory.idRegistrant=registrant.idEmployee
			">
		<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>
		<!--- variables ok --->
		<cftry>
			<cfquery name="createQuery" datasource="#application.datasource#">
				INSERT INTO projectActivityHistory
					(
					dateRegistered,
					idRegistrant,
					idProjectActivity, 
					idParent, 
					idProject, 
					idCurrency, 
					idEmployee, 
					name, 
					amountAuthorized,
					amountUsed,
					dateStart, 
					dateEnd,
					dateEndReal,
					comment
					) 
				VALUES 
					(
					<cfqueryparam value="#Now()#" cfsqltype="cf_sql_timestamp">, 
					<cfqueryparam value="#session.employee.getIdEmployee()#" cfsqltype="cf_sql_integer">, 
					<cfqueryparam value="#variables.idProjectActivity#" cfsqltype="cf_sql_integer">, 
					<cfif variables.idParent gt 0><cfqueryparam value="#variables.idParent#" cfsqltype="cf_sql_integer"><cfelse>NULL</cfif>, 
					<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>,
					<cfqueryparam value="#variables.comment#" cfsqltype="cf_sql_clob">
					)
			</cfquery>
			<cfset result.id=variables.idProjectActivity>
			<!--- catch any error --->
			<cfcatch type="any">
				<cfset result.id=-1>
				<cfset result.message="Error [projectActivityHistory.create()]: " & cfcatch.Message & "<br>Details: " & cfcatch.Detail>
			</cfcatch>
		</cftry>
		<cfreturn result>
	</cffunction>
</cfcomponent>